mirror of
https://github.com/clearlinux/common.git
synced 2026-06-17 19:45:59 +00:00
Compare commits
518 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fd6bcb7b24 | |||
| 771b704606 | |||
| b3ea1cd421 | |||
| 752274f532 | |||
| 1addfd447d | |||
| 8546a126bd | |||
| 280d5471d7 | |||
| 025c9a74f1 | |||
| b03db840a6 | |||
| 59dfc2236f | |||
| e61ebaafc6 | |||
| 4bcceb402e | |||
| 5e15b47efc | |||
| 043265171f | |||
| 982d58e0e6 | |||
| accf578c02 | |||
| efe2b2bccf | |||
| 9f77cbb6e3 | |||
| bd6c14938b | |||
| 32729558d9 | |||
| b2ad8dbda8 | |||
| e545190de3 | |||
| 9921115897 | |||
| 8d5f8e37c5 | |||
| 6bc5718c25 | |||
| a21156767e | |||
| 9dd5bb895b | |||
| 67b7ef2bf4 | |||
| 6ad56934fd | |||
| 7b08135720 | |||
| 168c9b8606 | |||
| 3ff4181689 | |||
| a581ac8fbf | |||
| 601ca9e0fc | |||
| 8848658fcf | |||
| b76a7bc7f8 | |||
| f8f9619eec | |||
| b7b8774581 | |||
| b3618cc43c | |||
| 921ac270fe | |||
| f41acbdeb0 | |||
| 83a461fe40 | |||
| 6876f3d11e | |||
| 5a4dd4451a | |||
| d48889eb29 | |||
| b402f2bbdf | |||
| 1fcaa4aea6 | |||
| 71b927321f | |||
| 40f17091a6 | |||
| 3b062e1b45 | |||
| 3c3fc1a16c | |||
| 3c7aac6a8e | |||
| baf555428f | |||
| 262d005c62 | |||
| ceff8301a1 | |||
| 8eb7264597 | |||
| c10d558ee6 | |||
| bd75d90fc7 | |||
| 081c620f82 | |||
| 7e017ee247 | |||
| 5b43360fe8 | |||
| eb8879f0f0 | |||
| f18ba9060d | |||
| 9fc1471023 | |||
| 9885cdbf9b | |||
| ce12c754ba | |||
| b363871adf | |||
| c028ea0072 | |||
| 7dc414433f | |||
| 50f18a0146 | |||
| 51c26d9a01 | |||
| c143f7ee95 | |||
| 81bd7f5e54 | |||
| 5d8e976a2a | |||
| 7d624ab7ae | |||
| ba14c4e50f | |||
| 34fb007895 | |||
| 153c8cf8f7 | |||
| be45cbcf9e | |||
| 853cc64dff | |||
| 7e81742862 | |||
| a6eceb3613 | |||
| 9956be75dc | |||
| c99415521e | |||
| 775d77c942 | |||
| 0c80ea9b2d | |||
| e75cdd1186 | |||
| 90f2aab33a | |||
| 64fa18b676 | |||
| dc6677df7e | |||
| 68d78be45d | |||
| 47e3b379d9 | |||
| b089c2eee1 | |||
| b66637b940 | |||
| 0802f3932b | |||
| 2507032cba | |||
| 5a1d5567ca | |||
| 05a7063d8e | |||
| 11ebc1c8fc | |||
| 463ae178c2 | |||
| 1d4aba3f8f | |||
| c7fc2c3961 | |||
| 82cd0ecd3f | |||
| f754a866c0 | |||
| 5d17b16122 | |||
| 51b040bccb | |||
| ad94d692e1 | |||
| 8f08161958 | |||
| 490bd76041 | |||
| 461918321b | |||
| 836969dddf | |||
| cabadbf7e3 | |||
| 2e20586c58 | |||
| bd721579a7 | |||
| f75cf1807e | |||
| 49f6d1b502 | |||
| 284ad47e91 | |||
| 7b3321fa58 | |||
| b2c8135aad | |||
| 8150769596 | |||
| a093411597 | |||
| e429dcaa45 | |||
| 06d1a29dc1 | |||
| 1548275e4b | |||
| fd0963167b | |||
| 517f5bc371 | |||
| 284ccd9ce0 | |||
| 43d436eec3 | |||
| 2bb93912f6 | |||
| 3a0c58c76f | |||
| 5519d04178 | |||
| e733b31a68 | |||
| 46bb95d483 | |||
| afafad1ed9 | |||
| bd030b99fe | |||
| 179cec491a | |||
| 3f9a4421d4 | |||
| 519fe3ef50 | |||
| a95343b9d1 | |||
| 4ffa3d7af0 | |||
| 05115e1bc3 | |||
| fff95669db | |||
| 36d363d533 | |||
| 74028d1094 | |||
| e9baf282b5 | |||
| fa36a19fe7 | |||
| cf4599a923 | |||
| 3e7a03c6b6 | |||
| c4e133da04 | |||
| 295db72a7c | |||
| a4927695e0 | |||
| e2ede0ec09 | |||
| d3f7e72d7c | |||
| ce67fd374a | |||
| 1feea0f15e | |||
| 4c1c55f03e | |||
| 214ebc3f93 | |||
| 00997dcd48 | |||
| 07fdbe3153 | |||
| b671ab5709 | |||
| fc29b4c1c3 | |||
| f108ac36d6 | |||
| 1c2bc9d50c | |||
| 8952175bc9 | |||
| 3812469ac2 | |||
| d1b434583a | |||
| dbd3c9accf | |||
| 6214fa5e9f | |||
| 8e9dd55e0f | |||
| 9ee80a2635 | |||
| 653105ffdf | |||
| a67fe47e39 | |||
| 103222eb4e | |||
| 0304bbd6b1 | |||
| 4ca1662790 | |||
| 94e2c39146 | |||
| d67be8a71b | |||
| 130f0f089e | |||
| a75e19a379 | |||
| d2e1c72c33 | |||
| b94a1c537f | |||
| 164dd8300e | |||
| 32141b9181 | |||
| bc66045b2d | |||
| 649a59bf12 | |||
| b1706fe2c4 | |||
| 6548a7a206 | |||
| a3fcd6a943 | |||
| 3c834e4761 | |||
| 77c334ec1a | |||
| 7c013dd5df | |||
| a499f61626 | |||
| 794174863b | |||
| dedad8c6c7 | |||
| 54737f7d97 | |||
| 56fdddbca3 | |||
| 58dff13c12 | |||
| 45a416f269 | |||
| b09ef7403e | |||
| 2059376f34 | |||
| 4501493d03 | |||
| df3579f538 | |||
| 3c01990ffc | |||
| 991e0baaaa | |||
| 434ab82632 | |||
| 0f814b2df9 | |||
| f2c3f4f95b | |||
| 590efe2b9c | |||
| 7919adae9f | |||
| 8ea05f2ae4 | |||
| 3560600fb6 | |||
| 0e54abbb3f | |||
| 3e7f5be6fc | |||
| 36d3edd56c | |||
| 9008cbccba | |||
| 04022fb765 | |||
| 424c34140e | |||
| f85cd42756 | |||
| e7afb1ae5e | |||
| 2c52a5ab39 | |||
| d84fec113e | |||
| f1b1424db4 | |||
| df8b789d60 | |||
| 78d7b4366b | |||
| 7be12344b6 | |||
| 04e58480cb | |||
| ebcc67f00b | |||
| f5b1aa8c87 | |||
| c61c91f9f2 | |||
| a57af837d8 | |||
| 03ba957d5f | |||
| d661496a4c | |||
| 4e1ce01d4e | |||
| dfeb8f9862 | |||
| 79c4befdea | |||
| c8c0c08100 | |||
| 877cd04101 | |||
| 7453e26bc7 | |||
| 11e0b5baee | |||
| 54c652944f | |||
| ef5179c975 | |||
| fc9793ff4e | |||
| 1508582709 | |||
| fca82072fa | |||
| 7fb07fdb29 | |||
| 387cb23c79 | |||
| c63ed02014 | |||
| d0773602f5 | |||
| 7b2b947843 | |||
| e619aeeab5 | |||
| f041821042 | |||
| 04e79ac6f7 | |||
| 942c21283f | |||
| 0803beead9 | |||
| 8bf3888935 | |||
| 3f2c7de583 | |||
| 514048840f | |||
| 012a1a3767 | |||
| 0168eb6258 | |||
| 2212f350e9 | |||
| 75a06769ea | |||
| 797f6c050c | |||
| 3169a8db4c | |||
| c6e5d09862 | |||
| 76d551ae77 | |||
| 92202763aa | |||
| 3a666723c1 | |||
| ed7e63d752 | |||
| bf6c49b8b9 | |||
| cc0b7da35a | |||
| 33febf4489 | |||
| 52ab50a9c7 | |||
| 70d40d9b59 | |||
| 8b709c2e1b | |||
| ea4e713277 | |||
| ca817a8c5e | |||
| db80ffd052 | |||
| 54e7c47bd6 | |||
| 60cb8aa36a | |||
| 3a5c12aa29 | |||
| 118120ca01 | |||
| f59a650cf4 | |||
| 1dae5422cc | |||
| b4860a0d82 | |||
| 4760d853bb | |||
| 4331a0a193 | |||
| ca68988393 | |||
| 37879628f7 | |||
| 7f158c6e91 | |||
| 4b9b44feef | |||
| 20e55005ac | |||
| ceeee94f0c | |||
| 852b6e83c9 | |||
| ae9f0610d6 | |||
| fa65110479 | |||
| 4259e8dbf0 | |||
| 56a38edc64 | |||
| d5cdd5d1c5 | |||
| 806a1f5593 | |||
| b82d61d686 | |||
| d7404ca99d | |||
| c81774a23c | |||
| b1ef20b90b | |||
| b100150ca3 | |||
| 482940952d | |||
| b50fabd346 | |||
| c383979d14 | |||
| 08138ad889 | |||
| b78940d18a | |||
| bb74ceef8d | |||
| 12800a51fa | |||
| 9b445f1116 | |||
| 40898f6ce0 | |||
| 3b4b1b3053 | |||
| e26fd3e022 | |||
| 677fe6cbd5 | |||
| 9e54179aea | |||
| 1145477b30 | |||
| 19cb72b28e | |||
| 497059b257 | |||
| fbda0655f2 | |||
| 1b32d114f3 | |||
| 90a4ceb162 | |||
| 2947369532 | |||
| 26bb3f43f8 | |||
| fd509a2295 | |||
| eb4fcd4085 | |||
| 4fd9e54785 | |||
| 5bc6cc856b | |||
| 3bfdb39ee1 | |||
| b495687f7c | |||
| c719db89dd | |||
| ba9e38f3f0 | |||
| 0d4b01ec83 | |||
| 4867cefcb7 | |||
| e88fcdc4bc | |||
| a381875001 | |||
| 114936fc23 | |||
| 3739bc0e0f | |||
| f43a186a78 | |||
| da562cb750 | |||
| 16467cfbc0 | |||
| 16466cac02 | |||
| 6e8d00eb30 | |||
| c160c30218 | |||
| 9b09c217da | |||
| 00230e7d1d | |||
| ff40498428 | |||
| 6483c7dd86 | |||
| d1079234d9 | |||
| 51a2c03a4a | |||
| 3d8c98b0d8 | |||
| 243ad03d32 | |||
| e1072736aa | |||
| 9a557531f4 | |||
| d8cb4987e5 | |||
| 6719c0f7df | |||
| 7166df721b | |||
| a70cf49f45 | |||
| 781eae34bb | |||
| ee17bc50a9 | |||
| 1fcfde404c | |||
| 36716ffe26 | |||
| eab92f6841 | |||
| 903919de2f | |||
| 69000f2f2e | |||
| 8b8f649dcb | |||
| 91ba5c1c6b | |||
| 70e5280ae4 | |||
| dbc677ddca | |||
| c2ff34b4ca | |||
| df917a0aa2 | |||
| c0e95c9bcd | |||
| 979430e742 | |||
| 61d9b5ab29 | |||
| 557bc87774 | |||
| fb869ea5a2 | |||
| 665a2546f8 | |||
| d8f18e5f6d | |||
| 255935f4fb | |||
| 34df391482 | |||
| 3d9fd9fd67 | |||
| 8894658b0a | |||
| f2d0972aab | |||
| 64c2b82443 | |||
| 3963a1f319 | |||
| 68cd34db8f | |||
| b9952701c5 | |||
| 3671774e8a | |||
| fa7c45049f | |||
| 768bdc7550 | |||
| 6372c11a12 | |||
| 5629731f54 | |||
| a0f8fd9a50 | |||
| cad2e6081d | |||
| 2daf8a48b2 | |||
| 26582bd9f2 | |||
| c6a2d6fabd | |||
| 2d8fc9a155 | |||
| 1eadce9aad | |||
| 6613644b9c | |||
| 93115e4073 | |||
| 12537cbfb0 | |||
| d397ee463a | |||
| dfe55331e6 | |||
| 0c69bfb9a9 | |||
| 689e48a2f7 | |||
| 82e334a93a | |||
| ab6c4a674f | |||
| 78de1a6a13 | |||
| 74e79ffea2 | |||
| bb21809c73 | |||
| e912d4e6ae | |||
| 340b6a74d4 | |||
| 2e8f9ef0ab | |||
| 4bdd1765c5 | |||
| 45f39671d6 | |||
| 1d46a683e0 | |||
| 41d2113b8a | |||
| 528cd77168 | |||
| 916ce142bb | |||
| e2a3b113f2 | |||
| 0acf617611 | |||
| 39aeb852fe | |||
| 0e7d7e336d | |||
| 2323c9924f | |||
| da1f1f7483 | |||
| 723a925ed8 | |||
| 7e9ee1949d | |||
| f0df3f7809 | |||
| 9f77c5b172 | |||
| 3c52bbd7d7 | |||
| 7203329212 | |||
| b76562fe35 | |||
| 657bf44505 | |||
| c0e4bbf18e | |||
| 38b5e792cd | |||
| 43a333f08f | |||
| 9985956b7c | |||
| 7a62e62b28 | |||
| 92977583a6 | |||
| b8d121260a | |||
| ace60d849e | |||
| a2759eca40 | |||
| 7d0977c785 | |||
| 9184a2fd62 | |||
| e80c6eb4bd | |||
| 5cf5fd71cb | |||
| 4b01a5a9cd | |||
| 4910ef0882 | |||
| 1518adace0 | |||
| ef0e792c3d | |||
| 1bb7b0c471 | |||
| 51dc7a7c24 | |||
| c8848dbdb2 | |||
| 92e045116a | |||
| 1f3475a1ef | |||
| f836786e2d | |||
| 7dc88fd01a | |||
| 250efaef8f | |||
| c6532c6759 | |||
| f1c85e3294 | |||
| f5abc3a8d3 | |||
| 74d5bc42f5 | |||
| d6cc120a3c | |||
| 71c1bd013f | |||
| aadbd40a21 | |||
| 60020aebcc | |||
| 3a00f7eda4 | |||
| 0470861400 | |||
| 4fac58a65e | |||
| 743041a30c | |||
| 59f9bb1f7a | |||
| 1e74d17500 | |||
| 6a7fac08d9 | |||
| 932c2236a7 | |||
| 6c92ce3160 | |||
| 3e2219c07e | |||
| f0d2523151 | |||
| de39e64e29 | |||
| 877fee6375 | |||
| e921a2a883 | |||
| e00c76846b | |||
| af2c0bea72 | |||
| b99b7e8c25 | |||
| 359d2a8379 | |||
| d828f3a3ce | |||
| 330876d190 | |||
| 3bf5f39687 | |||
| 71d9699bdd | |||
| ded920ccb3 | |||
| cc16065a09 | |||
| 45f2185a25 | |||
| 9ffc0b9640 | |||
| 98c5937801 | |||
| a50450212c | |||
| ab77a99a47 | |||
| 090bb77f92 | |||
| f2b7a30d12 | |||
| c26e27ce65 | |||
| 6fa010e10b | |||
| 173673b5c6 | |||
| eea34ccd7f | |||
| fa58b00fb7 | |||
| cd9b9c1319 | |||
| d22e4f985d | |||
| eb58950c17 | |||
| 8ff80b0be2 | |||
| 05634010e9 | |||
| f6442a0e7f | |||
| d6250a68cd | |||
| a0208a0509 | |||
| 7ff122463b | |||
| 08498361a4 | |||
| 1b8c8d250d | |||
| 4eccb104d5 | |||
| 4ac2b829d3 | |||
| 052fa48e83 |
@@ -17,5 +17,9 @@ update:
|
||||
curl -f -o packages ${BASE_URL}/source/package-sources
|
||||
cut -f1 packages | LC_ALL=C sort > packages.new && mv packages.new packages
|
||||
|
||||
.PHONY: spdx
|
||||
spdx:
|
||||
curl -s spdx.org/licenses/ | sed '0,/<tbody>/d;/<\/tbody>/q;s/<tr>/\f/g;s/$$/,/g;s/<[^>]*>//g' | awk 'BEGIN{RS="\f";FS=","} {print $$4}' | sed '/^$$/d;s/^[ ]*//' > spdx
|
||||
JSON=$$(mktemp); \
|
||||
trap "rm $$JSON" EXIT; \
|
||||
curl -f -S -s https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json > $$JSON || exit 1; \
|
||||
jq -r '.licenses[] | .licenseId' < $$JSON | LC_COLLATE=C sort > licenses-spdx
|
||||
|
||||
+201
-73
@@ -14,14 +14,14 @@ SPECFILE = $(addsuffix .spec, $(PKG_NAME))
|
||||
SRPMVERS = $(shell [ ! -f $(SPECFILE) ] || rpmspec -D '_vendor clr' --srpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}\n' $(SPECFILE))
|
||||
SRPMFILE = results/$(SRPMVERS).src.rpm
|
||||
|
||||
LATEST_RPMS = $(shell [ ! -s results/build.log ] || for r in `egrep 'Wrote.*/RPMS/.*.rpm' results/build.log | sed 's/.*\///'` ; do echo "results/$$r"; done)
|
||||
LATEST_RPMS = $(wildcard rpms/*.rpm)
|
||||
DEBUGINFO_RPM = $(wildcard rpms/*-debuginfo-*.rpm)
|
||||
RPMS ?= $(LATEST_RPMS)
|
||||
|
||||
WITH_SUDO = $(shell cmp /usr/bin/mock /usr/sbin/mock &> /dev/null && echo sudo )
|
||||
|
||||
# MOCK_CONFIG_VAL is set in Makefile.shared
|
||||
MOCK ?= $(WITH_SUDO) /usr/bin/mock -r $(MOCK_CONFIG_VAL)
|
||||
|
||||
MOCK ?= $(WITH_SUDO) /usr/bin/mock -r $(MOCK_CONFIG_VAL) $(MOCK_OPTS)
|
||||
|
||||
ifneq ($(wildcard upstream),)
|
||||
__allsources := $(notdir $(strip $(shell cat upstream)))
|
||||
@@ -29,22 +29,24 @@ __missingsources := $(filter-out $(wildcard ${__allsources}), ${__allsources})
|
||||
endif
|
||||
|
||||
$(SPECFILE):
|
||||
@echo Error: $(SPECFILE) is missing. Please run \`make autospec\` to try and auto
|
||||
@echo Error: generate one for you.
|
||||
@exit 1
|
||||
@[[ -f "$@" ]] || (\
|
||||
echo Error: $@ is missing. Please run \`make autospec\` to try and auto;\
|
||||
echo Error: generate one for you.;\
|
||||
exit 1 )
|
||||
|
||||
upstream:
|
||||
@echo Error: The \"upstream\" file is missing. Try running \`make autospec\` to
|
||||
@echo Error: auto generate one for you. If you are not using autospec to
|
||||
@echo Error: generate a spec file, specify the proper "Source*" entries in the
|
||||
@echo Error: spec header, and try running \`make generateupstream\`.
|
||||
@exit 1
|
||||
@[[ -f "$@" ]] || (\
|
||||
echo Error: The \"$@\" file is missing. Try running \`make autospec\` to;\
|
||||
echo Error: auto generate one for you. If you are not using autospec to;\
|
||||
echo Error: generate a spec file, specify the proper "Source*" entries in the;\
|
||||
echo Error: spec header, and try running \`make generateupstream\`.;\
|
||||
exit 1 )
|
||||
|
||||
#help spdxcheck: Checks that the package license is a valid SPDX license,
|
||||
#help or that it is in the exceptions list.
|
||||
spdxcheck: $(SPECFILE)
|
||||
@for LICENSE in `rpmspec -D '_vendor clr' --srpm -q --queryformat '%{LICENSE}\n' $(SPECFILE)`; do \
|
||||
if ! grep -q "^$$LICENSE$$" $(TOPLVL)/projects/common/licenses-spdx && ! grep -q "$$LICENSE$$" $(TOPLVL)/projects/common/licenses-exceptions; then FAIL=yes; echo "ERROR: License '$$LICENSE' is not an allowed SPDX license ID"; fi; \
|
||||
if ! grep -qx "$$LICENSE" $(TOPLVL)/projects/common/licenses-{spdx,exceptions,extra}; then FAIL=yes; echo "ERROR: License '$$LICENSE' is not an allowed SPDX license ID"; fi; \
|
||||
done; test -z "$$FAIL"
|
||||
|
||||
#help cvecheck: Checks
|
||||
@@ -60,7 +62,7 @@ clean:
|
||||
|
||||
#help proper: Brings your copy of the package to a nearly clean git checkout state.
|
||||
proper: repodel
|
||||
rm -rf results
|
||||
rm -rf results rpms
|
||||
rm -f build.log.round*
|
||||
rm -f mock_build.log mock_srpm.log $(__allsources) report.html
|
||||
|
||||
@@ -68,10 +70,9 @@ proper: repodel
|
||||
mockclean:
|
||||
$(MOCK) --clean --scrub=all
|
||||
|
||||
#help mockproper: Clean mock chroot and cache directories for this package.
|
||||
#help mockproper: Clean mock chroot
|
||||
mockproper:
|
||||
$(MOCK) --clean --scrub=all --uniqueext=$(PKG_NAME)
|
||||
$(MOCK) --clean --scrub=chroot --uniqueext=$(PKG_NAME)
|
||||
$(MOCK) --clean --uniqueext=$(PKG_NAME)
|
||||
|
||||
configemail:
|
||||
@test -d .git || git init
|
||||
@@ -89,8 +90,10 @@ prebuild-checks:
|
||||
#help files and rpms in the results directory of your package. If there
|
||||
#help are mutlple tar.gz files for a package, make will do make sources,
|
||||
#help which creates a src.rpm file from the spec file.
|
||||
#help Use MOCK_OPTS environment varible to pass down arbitrary mock options.
|
||||
build: prebuild-checks configemail $(SPECFILE) upstream $(SRPMFILE)
|
||||
$(MOCK) $(SRPMFILE) --result=results/ --no-cleanup-after --uniqueext=$(PKG_NAME)
|
||||
$(MAKE) link-new-rpms PKG_REPO_DIR="."
|
||||
@perl $(TOPLVL)/projects/common/logcheck.pl results/build.log
|
||||
@perl $(TOPLVL)/projects/common/count.pl results/build.log &> testresults
|
||||
@$(MAKE) checkblacklist
|
||||
@@ -98,6 +101,7 @@ build: prebuild-checks configemail $(SPECFILE) upstream $(SRPMFILE)
|
||||
#help build-nocheck: Same as 'make build', but do not run the package's test suite.
|
||||
build-nocheck: configemail $(SPECFILE) upstream $(SRPMFILE)
|
||||
$(MOCK) $(SRPMFILE) --nocheck --result=results/ --no-cleanup-after --uniqueext=$(PKG_NAME)
|
||||
$(MAKE) link-new-rpms PKG_REPO_DIR="."
|
||||
@perl $(TOPLVL)/projects/common/logcheck.pl results/build.log
|
||||
@perl $(TOPLVL)/projects/common/count.pl results/build.log &> testresults
|
||||
@$(MAKE) checkblacklist
|
||||
@@ -115,21 +119,31 @@ shell:
|
||||
|
||||
# Always rebuild the source rpm
|
||||
.PHONY: $(SRPMFILE)
|
||||
$(SRPMFILE): $(SPECFILE) $(__allsources) localreponotice
|
||||
$(SRPMFILE): $(SPECFILE) $(__allsources) localreponotice clean-old-content
|
||||
@$(MAKE) spdxcheck
|
||||
$(MOCK) --buildsrpm --source=./ --spec=$(SPECFILE) --result=results/ --no-cleanup-after --uniqueext=$(PKG_NAME)
|
||||
mv results/root.log results/srpm-root.log
|
||||
mv results/build.log results/srpm-build.log
|
||||
|
||||
# Do a git fetch and a git rebase rather than a git pull so aborting
|
||||
# the git pull at a password prompt doesn't leave local changes stashed
|
||||
# Do the the git status dance so we only apply a stash we create
|
||||
# Do a git fetch and a git rebase to apply local commits on top of latest
|
||||
# commits from the remote. A git fetch/rebase is used rather than a git pull so
|
||||
# aborting the git pull at a password prompt doesn't leave local changes
|
||||
# stashed. Do the git status dance so we only apply a stash we create. Note
|
||||
# that a fetch/rebase is not attempted if the remote 'origin' is not
|
||||
# initialized locally, or if the remote contains no commits.
|
||||
pullrebase:
|
||||
if [ -z "$$SKIP_GIT" ] && [ -e .git ]; then \
|
||||
set -x ; \
|
||||
@if [ -z "$$SKIP_GIT" ] && [ -e .git ]; then \
|
||||
if ! git rev-parse --verify --quiet origin/master > /dev/null; then \
|
||||
echo "Remote not yet initialized. Continuing."; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
echo "Fetching origin"; \
|
||||
git fetch; \
|
||||
if ! git rev-parse --verify --quiet FETCH_HEAD > /dev/null; then \
|
||||
echo "No commits exist in remote. Continuing."; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
echo "Rebasing to origin/master"; \
|
||||
if git status --porcelain | grep -q '^.[^?]'; \
|
||||
then \
|
||||
git stash save; \
|
||||
@@ -140,28 +154,40 @@ pullrebase:
|
||||
fi \
|
||||
fi
|
||||
|
||||
preautospec-checks:
|
||||
|
||||
#help autospec: automatically generates a specfile. If there is
|
||||
#help already a specfile, it will be overwritten. Several files used by
|
||||
#help autospec will be created in the process. For more information, see
|
||||
#help the project at https://github.com/clearlinux/autospec
|
||||
autospec: pullrebase localreponotice
|
||||
rm -f results/*src.rpm
|
||||
#help autospec will be created in the process.
|
||||
#help Use MOCK_OPTS environment varible to pass down arbitrary mock options
|
||||
#help to autospec.
|
||||
#help For more information, see the project at https://github.com/clearlinux/autospec
|
||||
autospec: preautospec-checks pullrebase localreponotice clean-old-content
|
||||
@if [ -e $(SPECFILE) ] && ! grep -q "# Generated by: autospec.py" $(SPECFILE) ; then \
|
||||
echo "Specfile already exists and was not created by autospec.py! Aborting."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@printf 'PKG_NAME := %s\nURL = %s\nARCHIVES = %s\n\ninclude ../common/Makefile.common\n' $(PKG_NAME) '$(firstword $(value NEWURL) $(value URL))' '$(value ARCHIVES)' > Makefile
|
||||
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py -t . --integrity \
|
||||
${NON_INTERACTIVE} --config "$(AUTOSPEC_CONF)" ${SKIP_GIT} \
|
||||
$(firstword $(NEWURL) $(URL)) --name $(PKG_NAME) ${CLEANUP} \
|
||||
$${SETVERSION:+ -v $${SETVERSION}} -a $(ARCHIVES) \
|
||||
-m $(MOCK_CONFIG_VAL)
|
||||
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py \
|
||||
--target . \
|
||||
--integrity \
|
||||
--config "$(AUTOSPEC_CONF)" \
|
||||
--name $(PKG_NAME) \
|
||||
--archives $(ARCHIVES) \
|
||||
--mock-config $(MOCK_CONFIG_VAL) \
|
||||
--mock-opts "$(MOCK_OPTS)" \
|
||||
$${SETVERSION:+ --version $${SETVERSION}} \
|
||||
${NON_INTERACTIVE} ${SKIP_GIT} ${CLEANUP} \
|
||||
$(firstword $(NEWURL) $(URL));
|
||||
$(MAKE) link-new-rpms PKG_REPO_DIR="."
|
||||
@$(MAKE) spdxcheck
|
||||
@$(MAKE) checkblacklist
|
||||
@if [ -e update_changelog.sh ] && [ -z "$$SKIP_GIT" ] ; then \
|
||||
bash update_changelog.sh ; \
|
||||
git commit --amend --no-edit Change* ; \
|
||||
fi
|
||||
git diff | grep -q index || python3 $(TOPLVL)/projects/common/patchfilter.py > for-review.txt ;
|
||||
git diff | grep -q index || python3 $(TOPLVL)/projects/common/patchfilter.py ;
|
||||
|
||||
#help autospecnogit: Runs autospec, but does not create a commit
|
||||
autospecnogit:
|
||||
@@ -192,30 +218,12 @@ bumpnogit:
|
||||
|
||||
$(__missingsources): sources
|
||||
|
||||
#help sources: If SOURCES_URL is defined, download required upstream source
|
||||
#help files from that location. Otherwise, try to extract source files from the
|
||||
#help SRPM in the latest Clear Linux release, as specified by the LATEST_SRPMS
|
||||
#help variable. This will run automatically, as a dependency. NOTE: A Koji
|
||||
#help server can make use of this "make sources" command, since it lives in a
|
||||
#help repo named "common". If you use this makefile in Koji, ensure
|
||||
#help "make sources" continues to work for both remote and local builds, since
|
||||
#help it is a prerequisite of several commands for building packages.
|
||||
sources: upstream
|
||||
ifneq ($(strip $(SOURCES_URL)),)
|
||||
while read u; do \
|
||||
case "$$u" in \
|
||||
"") continue ;; \
|
||||
*://*) n="$$u" ;; \
|
||||
*) n="$(SOURCES_URL)/$$u" ;; \
|
||||
esac; \
|
||||
curl --fail --noproxy "*" "$$n" -o `basename "$$n"`; \
|
||||
done < upstream
|
||||
else
|
||||
@tmp=$$(mktemp -d -p "."); \
|
||||
# First argument is a Clear Linux build number (e.g. 22000)
|
||||
define fetch-from-srpm
|
||||
tmp=$$(mktemp -d -p "."); \
|
||||
srpm=$$(rpmspec --srpm -q --qf "%{NVR}.src.rpm\n" $(SPECFILE)); \
|
||||
if cd "$$tmp" && ! curl -f -L -O $(LATEST_SRPMS)/$$srpm; then \
|
||||
echo "Failed to download $$srpm from latest Clear Linux release." >&2; \
|
||||
echo "Run \"git pull\" and try again." >&2; \
|
||||
if cd "$$tmp" && ! curl -s -S -f -L -O $(MIRROR_CURL_OPTS) $(DOWNLOAD_MIRROR)/releases/$(1)/clear/source/SRPMS/$$srpm; then \
|
||||
echo "Failed to download $$srpm from Clear Linux release $(1)." >&2; \
|
||||
cd .. && rm -rf "$$tmp"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
@@ -223,14 +231,58 @@ else
|
||||
cd ..; \
|
||||
srclist=$$(rpmspec --srpm -q --qf "[%{SOURCE}\n]" $(SPECFILE)); \
|
||||
for s in $$srclist; do \
|
||||
if ! mv "$$tmp"/$$s .; then \
|
||||
if ! mv --no-clobber "$$tmp"/$$s .; then \
|
||||
echo "Missing source file \"$$s\" in $${srpm}." >&2; \
|
||||
rm -rf "$$tmp"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "Retrieved source file $$s ..."; \
|
||||
done; \
|
||||
rm -rf "$$tmp";
|
||||
rm -rf "$$tmp"
|
||||
endef
|
||||
|
||||
#help sources: If SOURCES_URL is defined, download required upstream source files
|
||||
#help from that location. Otherwise, try to download source files according to the
|
||||
#help URLs listed in the spec file. If any of the source files fail to download,
|
||||
#help check for the relevant SRPM from published releases of Clear Linux OS, and
|
||||
#help extract the files if found. Note that SRPMs are taken from the DOWNLOAD_MIRROR
|
||||
#help location. This will run automatically, as a dependency. NOTE: A Koji server can
|
||||
#help make use of this "make sources" command, since it lives in a repo named
|
||||
#help "common". If you use this makefile in Koji, ensure "make sources" continues to
|
||||
#help work for both remote and local builds, since it is a prerequisite of several
|
||||
#help commands for building packages.
|
||||
ifneq ($(strip $(SOURCES_URL)),)
|
||||
sources: upstream
|
||||
while read u; do \
|
||||
case "$$u" in \
|
||||
"") continue ;; \
|
||||
*://*) n="$$u" ;; \
|
||||
*) n="$(SOURCES_URL)/$$u" ;; \
|
||||
esac; \
|
||||
if ! curl --fail -L -o `basename "$$n"` $(SOURCES_CURL_OPTS) "$$n"; then \
|
||||
echo "Failed to download $$n"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
done < upstream
|
||||
else
|
||||
sources:
|
||||
@$(MAKE) generateupstream; \
|
||||
[ $$? -eq 0 ] && exit 0; \
|
||||
nvr="$$(rpmspec --srpm -q --qf '%{NAME}\t%{VERSION}\t%{RELEASE}\n' $(SPECFILE))"; \
|
||||
latest_builds=$$(git -C $(TOPLVL)/projects/common tag -l | sort -rn); \
|
||||
for b in $$latest_builds; do \
|
||||
url="$(DOWNLOAD_MIRROR)/releases/$$b/clear/source/package-sources"; \
|
||||
echo "Checking for source files in build $$b ..."; \
|
||||
if grep -q "$$nvr" <(curl -s -f -L $(MIRROR_CURL_OPTS) $$url); then \
|
||||
$(call fetch-from-srpm,$$b); \
|
||||
if [ $$? -eq 0 ]; then \
|
||||
echo "Source files retrieved from build $$b"; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
echo "Source files not found for package"; \
|
||||
exit 1
|
||||
endif
|
||||
|
||||
prekoji-checks:
|
||||
@@ -244,8 +296,14 @@ koji: prekoji-checks kojidef
|
||||
@if ! git branch | grep -q -E '^\* master'; then \
|
||||
echo "Error: Must be on the master branch to submit to koji" >&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if ! git diff --quiet HEAD ${SPECFILE}; then \
|
||||
echo "Error: All changes to ${SPECFILE} must be committed first" >&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if git rev-parse --verify --quiet origin/master > /dev/null; then \
|
||||
git pull --rebase; \
|
||||
fi
|
||||
git pull --rebase
|
||||
git tag $(SRPMVERS)
|
||||
git push origin master refs/tags/$(SRPMVERS)
|
||||
$(KOJI_CMD) build $$KOJI_NOWAIT $(KOJI_TAG) $(PKG_BASE_URL)/$(PKG_NAME)?#$(SRPMVERS)
|
||||
@@ -283,19 +341,24 @@ $(TOPLVL)/repo:
|
||||
#help repoadd: Adds locally-built RPMs for this package to the local RPM
|
||||
#help repository. If this repository does not yet exist, it is created and
|
||||
#help enabled.
|
||||
repoadd: results/build.log $(TOPLVL)/repo
|
||||
@if [ -z "`grep '^Wrote: .*$(shell basename $(SRPMFILE))$$' results/build.log`" ]; then \
|
||||
echo "You have not yet succesfully built this release yet"; exit 1; \
|
||||
fi
|
||||
@if [ -f .repo-index ]; then \
|
||||
repoadd: $(TOPLVL)/repo
|
||||
@if [ -z "${LATEST_RPMS}" ]; then \
|
||||
echo "No rpms found in rpms/ directory."; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [ -f .repo-index ]; then \
|
||||
echo "Cleaning old rpms:"; \
|
||||
for r in `cat .repo-index`; do \
|
||||
echo "-$$r"; \
|
||||
rm -f $(TOPLVL)/repo/$$r; \
|
||||
done; \
|
||||
rm .repo-index; \
|
||||
fi
|
||||
for r in $(LATEST_RPMS); do echo "+$$r"; echo $$(basename $$r) >> .repo-index; cp $$r $(TOPLVL)/repo; done
|
||||
fi; \
|
||||
for r in ${LATEST_RPMS}; do \
|
||||
echo "+$$r"; \
|
||||
echo $$(basename $$r) >> .repo-index; \
|
||||
ln -f $$r $(TOPLVL)/repo/; \
|
||||
done
|
||||
$(MAKE) localrepocreate
|
||||
$(call localrepoenable,${PM_CONF},${MOCK_CONF})
|
||||
|
||||
@@ -347,25 +410,90 @@ install:
|
||||
done
|
||||
@$(MAKE) loop-down DEVICE=6
|
||||
|
||||
#help install-debuginfo-local: Install locally built debuginfo RPM to
|
||||
#help the automatic debuginfo cache location (/var/cache/debuginfo)
|
||||
install-debuginfo-local:
|
||||
@if [ -z "${DEBUGINFO_RPM}" ]; then \
|
||||
echo "No debuginfo to install... skipping"; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
echo -n "Installing ${DEBUGINFO_RPM}... "; \
|
||||
tmpdir=$$(mktemp -d); \
|
||||
rpm2cpio ${DEBUGINFO_RPM} | ( cd $$tmpdir; cpio -i -d -u 2> /dev/null); \
|
||||
dest=/var/cache/debuginfo/lib; \
|
||||
find $$tmpdir/usr/lib/debug/ -mindepth 1 -maxdepth 1 2> /dev/null | while read -r d; do \
|
||||
sudo chown -R dbginfo:dbginfo "$$d"; \
|
||||
sudo cp -a "$$d" $$dest/; \
|
||||
done; \
|
||||
find $$tmpdir/usr/share/debug/ -mindepth 1 -maxdepth 1 -regextype awk -regex '.*/(.build-id|boot|lib|sbin|usr)$$' 2> /dev/null | while read -r d; do \
|
||||
sudo chown -R dbginfo:dbginfo "$$d"; \
|
||||
sudo cp -a "$$d" $$dest/; \
|
||||
done; \
|
||||
dest=/var/cache/debuginfo/src; \
|
||||
find $$tmpdir/usr/src/debug/ -mindepth 1 -maxdepth 1 2> /dev/null | while read -r d; do \
|
||||
sudo chown -R dbginfo:dbginfo "$$d"; \
|
||||
sudo cp -a "$$d" $$dest/; \
|
||||
done; \
|
||||
find $$tmpdir/usr/share/debug/src/ -mindepth 1 -maxdepth 1 2> /dev/null | while read -r d; do \
|
||||
sudo chown -R dbginfo:dbginfo "$$d"; \
|
||||
sudo cp -a "$$d" $$dest/; \
|
||||
done; \
|
||||
sudo rm -rf $$tmpdir; \
|
||||
echo "done"
|
||||
|
||||
#help install-local: Install locally built RPMs to the root filesystem. Note that the
|
||||
#help debuginfo RPM installs to /var/cache/debuginfo
|
||||
install-local:
|
||||
@for r in $(filter-out ${DEBUGINFO_RPM},${RPMS}); do \
|
||||
echo -n "Installing $$r... "; \
|
||||
rpm2cpio $$r | (cd /; sudo cpio -i -d -u 2> /dev/null); \
|
||||
echo "done"; \
|
||||
done
|
||||
@$(MAKE) -s install-debuginfo-local
|
||||
|
||||
#help install-mock: Install locally built RPMs to the mock rootcache
|
||||
#help filesystem. This command is usually used with "make shell".
|
||||
install-mock: repoadd
|
||||
$(MOCK) --result=results/ --no-cleanup-after --uniqueext=$(PKG_NAME) -i $(filter-out ${DEBUGINFO_RPM},${RPMS})
|
||||
|
||||
#help generateupstream: Run this rule to create or update the 'upstream' file
|
||||
#help by downloading the upstream source tarballs listed in the spec file and
|
||||
#help calculating their hashes. Autospec performs this step automatically, so ignore
|
||||
#help it for packages managed with autospec.
|
||||
#help calculating their hashes. Autospec performs this step automatically, so
|
||||
#help ignore it for packages managed with autospec. Additional curl options
|
||||
#help may be used for downloading the upstream source tarballs by defining the
|
||||
#help CURL_OPTS variable for this rule.
|
||||
generateupstream:
|
||||
@rm -f upstream
|
||||
@urls=$$(rpmspec -D '_vendor clr' -P $(SPECFILE) | grep Source | cut -d: -f2- | grep '://'); \
|
||||
@[ -e upstream ] && mv upstream upstream.bak; \
|
||||
urls=$$(rpmspec -D '_vendor clr' -P $(SPECFILE) | sed -n "s|^Source[0-9]*[[:blank:]]*:[[:blank:]]*\(..*://..*\)$$|\1|p"); \
|
||||
for url in $$urls; do \
|
||||
filename=$$(basename $$url); \
|
||||
if [ ! -e $$filename ]; then \
|
||||
curl --fail -L -O $$url; \
|
||||
fi; \
|
||||
echo $$(sha1sum $$filename | cut -d\ -f1)/$$filename >> upstream; \
|
||||
filename=$$(basename $$url); \
|
||||
if [ ! -e $$filename ]; then \
|
||||
if ! curl --fail -L -O $(CURL_OPTS) $$url; then \
|
||||
echo "Failed to download $$url"; \
|
||||
[ -e upstream.bak ] && mv --no-clobber upstream.bak upstream; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
echo $$(sha1sum $$filename | cut -d\ -f1)/$$filename >> upstream; \
|
||||
done
|
||||
@rm -f upstream.bak
|
||||
@cat upstream
|
||||
|
||||
#help drop-abandoned: Remove all unused patches from the git tree
|
||||
drop-abandoned: $(SPECFILE)
|
||||
python3 $(TOPLVL)/projects/common/drop-abandoned-patches.py $(SPECFILE)
|
||||
|
||||
#help cloc: Count lines of code with the `cloc` tool on the full sources of package
|
||||
cloc: $(SRPMFILE)
|
||||
@$(MOCK) -r $(TOPLVL)/repo/clear.cfg $(SRPMFILE) --result=results/ --no-cleanup-after
|
||||
@$(MOCK) --chroot --copyin /usr/bin/cloc /usr/bin/cloc --result=results/ --no-cleanup-after
|
||||
@$(MOCK) --result=results/ --no-cleanup-after --chroot '/usr/bin/cloc /builddir > /tmp/cloc.txt'
|
||||
@$(MOCK) --copyout /tmp/cloc.txt results/ --result=results/
|
||||
@$(MOCK) --clean --scrub=chroot --uniqueext=$(PKG_NAME)
|
||||
cat results/cloc.txt
|
||||
|
||||
# Define site local common targets in a separate makefile
|
||||
-include $(TOPLVL)/projects/common/Makefile.common.site_local
|
||||
|
||||
# Include optional extended makefiles from individual package repos
|
||||
-include Makefile.custom
|
||||
|
||||
+10
-4
@@ -26,6 +26,9 @@ CGIT_BASE_URL =
|
||||
# Location of upstream tarball cache used by 'make build', 'make sources', etc.
|
||||
SOURCES_URL =
|
||||
|
||||
# Additional curl options to use when downloading files from SOURCES_URL
|
||||
SOURCES_CURL_OPTS =
|
||||
|
||||
# Location where package repos are hosted.
|
||||
PKG_BASE_URL = https://github.com/clearlinux-pkgs
|
||||
|
||||
@@ -38,6 +41,9 @@ PROJ_PKGS = autospec clr-bundles common
|
||||
# Clear Linux download mirror to use
|
||||
DOWNLOAD_MIRROR = https://cdn.download.clearlinux.org
|
||||
|
||||
# Additional curl options to use when downloading files from DOWNLOAD_MIRROR
|
||||
MIRROR_CURL_OPTS =
|
||||
|
||||
# Location of release content from latest Clear Linux release
|
||||
LATEST_RELEASE = $(DOWNLOAD_MIRROR)/current
|
||||
|
||||
@@ -48,17 +54,17 @@ LATEST_SRPMS = $(LATEST_RELEASE)/source/SRPMS
|
||||
PACKAGES_FILE = $(TOPLVL)/projects/common/packages
|
||||
|
||||
# Configuration file for autospec.
|
||||
AUTOSPEC_CONF = $(TOPLVL)/projects/common/autospec.conf
|
||||
AUTOSPEC_CONF = $(TOPLVL)/projects/common/conf/autospec.conf
|
||||
|
||||
# Set this variable to any non-empty value to use the package mappings stored
|
||||
# in "pkg-mapping" for cloning/pulling package repos.
|
||||
USE_PACKAGE_MAPPING = yes
|
||||
|
||||
# Package manager config file. Default to the in-tree copy.
|
||||
PM_CONF = $(TOPLVL)/projects/common/image-creator/yum.conf
|
||||
# Package manager config file. Default to the in-tree copy of dnf.conf.
|
||||
PM_CONF = $(TOPLVL)/projects/common/conf/dnf.conf
|
||||
|
||||
# Mock configuration file. Default to the in-tree copy.
|
||||
MOCK_CONF = $(TOPLVL)/projects/common/koji-client-files/clear.cfg
|
||||
MOCK_CONF = $(TOPLVL)/projects/common/conf/clear.cfg
|
||||
|
||||
|
||||
# Include any site local configuration variables. These variables may override
|
||||
|
||||
+26
-2
@@ -14,9 +14,9 @@ define loopup
|
||||
@sudo partprobe /dev/loop$(DEVICE)
|
||||
@sleep 1
|
||||
@if [ -e /dev/loop$(DEVICE)p3 ]; then \
|
||||
sudo mount /dev/loop$(DEVICE)p3 $(TOPLVL)/image; \
|
||||
sudo mount /dev/loop$(DEVICE)p3 $(TOPLVL)/image; \
|
||||
else \
|
||||
sudo mount /dev/loop$(DEVICE)p2 $(TOPLVL)/image; \
|
||||
sudo mount /dev/loop$(DEVICE)p2 $(TOPLVL)/image; \
|
||||
fi
|
||||
@sudo mount /dev/loop$(DEVICE)p1 $(TOPLVL)/image/boot
|
||||
endef
|
||||
@@ -138,6 +138,30 @@ localreponotice:
|
||||
[ -f $(TOPLVL)/repo/opt-in-build ] || sleep 3; \
|
||||
fi >&2
|
||||
|
||||
.PHONY: clean-old-rpms clean-old-logs clean-old-content
|
||||
clean-old-rpms:
|
||||
rm -rf ./rpms
|
||||
rm -f ./results/*.rpm
|
||||
|
||||
clean-old-logs:
|
||||
rm -f ./results/*.log
|
||||
|
||||
clean-old-content: clean-old-rpms clean-old-logs
|
||||
|
||||
.PHONY: require-pkg-repo-dir link-new-rpms
|
||||
require-pkg-repo-dir:
|
||||
@if [ -z ${PKG_REPO_DIR} ]; then \
|
||||
echo "Please specify PKG_REPO_DIR to indicate package repo location."; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
link-new-rpms: require-pkg-repo-dir
|
||||
mkdir -p ${PKG_REPO_DIR}/rpms
|
||||
rm -f ${PKG_REPO_DIR}/rpms/*.rpm
|
||||
find ${PKG_REPO_DIR}/results -maxdepth 1 -name '*.rpm' -exec ln {} ${PKG_REPO_DIR}/rpms/ \;
|
||||
rm -f ${PKG_REPO_DIR}/rpms/*.src.rpm
|
||||
|
||||
|
||||
.PHONY: help
|
||||
##### Code
|
||||
# Make sure that HELPSPACE has exactly HELPLEN spaces in it
|
||||
|
||||
+39
-17
@@ -10,6 +10,7 @@ include $(TOPLVL)/projects/common/Makefile.shared
|
||||
SHELL = /bin/bash
|
||||
|
||||
PKGS = $(shell cat $(PACKAGES_FILE))
|
||||
PKGS_LOCAL = $(sort $(filter ${PKGS},$(subst packages/,,$(wildcard packages/*))))
|
||||
|
||||
proj_PKGS = $(addprefix proj_,$(PROJ_PKGS))
|
||||
clone_PKGS = $(addprefix clone_,$(PKGS))
|
||||
@@ -64,7 +65,7 @@ cvecheck:
|
||||
#help of merge commits, while displaying any changes since your last pull. It is
|
||||
#help silent if there are no changes.
|
||||
.PHONY: pull ${PULL_PKGS}
|
||||
PULL_PKGS:= $(addprefix PULL_projects/,$(PROJ_PKGS)) $(addprefix PULL_packages/,$(PKGS))
|
||||
PULL_PKGS:= $(addprefix PULL_projects/,$(PROJ_PKGS)) $(addprefix PULL_packages/,${PKGS_LOCAL})
|
||||
${PULL_PKGS}:
|
||||
@p=$(patsubst PULL_%,%,$@) ; \
|
||||
if [ ! -d "$$p/.git" ]; then echo "Nothing to pull for $$p - $$p/.git missing"; exit 0; fi; \
|
||||
@@ -135,11 +136,11 @@ clean-pkgs-dir: $(PACKAGES_FILE)
|
||||
done
|
||||
@echo "packages directory cleaned";
|
||||
|
||||
clean_PKGS = $(addprefix clean_,$(PKGS))
|
||||
clean_PKGS = $(addprefix clean_,$(PKGS_LOCAL))
|
||||
#help clean: Run 'make clean' for every package.
|
||||
clean: $(clean_PKGS)
|
||||
|
||||
proper_PKGS = $(addprefix proper_,$(PKGS))
|
||||
proper_PKGS = $(addprefix proper_,$(PKGS_LOCAL))
|
||||
#help proper: Run 'make proper' for every package, and purge the local
|
||||
#help repo and image.
|
||||
proper: $(proper_PKGS)
|
||||
@@ -153,34 +154,34 @@ proper: $(proper_PKGS)
|
||||
|
||||
$(clean_PKGS):
|
||||
@echo "cleaning $(patsubst clean_%,%,$@)"
|
||||
-@$(MAKE) -s -j -C $(addprefix packages/,$(patsubst clean_%,%,$@)) clean
|
||||
-@$(MAKE) -s -C $(addprefix packages/,$(patsubst clean_%,%,$@)) clean
|
||||
|
||||
$(proper_PKGS):
|
||||
-@$(MAKE) -s -j -C $(addprefix packages/,$(patsubst proper_%,%,$@)) proper
|
||||
-@$(MAKE) -s -C $(addprefix packages/,$(patsubst proper_%,%,$@)) proper
|
||||
|
||||
#help status: Runs git status for all package repos, thus displaying untracked
|
||||
#help and unstaged files in addition to staged files.
|
||||
status: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS))
|
||||
@for p in projects/common $(addprefix packages/,$(PKGS)); do \
|
||||
status: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS_LOCAL))
|
||||
@for p in projects/common $(addprefix packages/,$(PKGS_LOCAL)); do \
|
||||
if [ -d "$$p/.git" ] && [ -n "$$(git -C $$p status -uno --porcelain)" ]; then echo "Uncommitted changes in $$p:"; git -C "$$p" status --short; fi ;\
|
||||
done
|
||||
|
||||
#help diff: Runs git diff for all package repos and displays the output using
|
||||
#help diffstat. Requires that diffstat is installed.
|
||||
diff: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS))
|
||||
@for p in projects/common $(addprefix packages/,$(PKGS)); do \
|
||||
diff: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS_LOCAL))
|
||||
@for p in projects/common $(addprefix packages/,$(PKGS_LOCAL)); do \
|
||||
(cd $$p ; git status | grep -q 'nothing to commit, working [^ ]* clean' || (echo "Uncommitted changes in: $$p"; git diff |diffstat -p1)) ;\
|
||||
done
|
||||
|
||||
#help versions: Displays the version of each package in the ./packages tree.
|
||||
versions: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS))
|
||||
@for p in $(addprefix packages/,$(PKGS)); do \
|
||||
versions: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS_LOCAL))
|
||||
@for p in $(addprefix packages/,$(PKGS_LOCAL)); do \
|
||||
(cd $$p; if ls *.spec &> /dev/null; then rpmspec -q --queryformat '%{NAME}-%{VERSION}\n' *.spec | head -n1; fi) ;\
|
||||
done
|
||||
|
||||
#help releases: Like 'make versions', but also displays the release number.
|
||||
releases: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS))
|
||||
@for p in $(addprefix packages/,$(PKGS)); do \
|
||||
releases: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS_LOCAL))
|
||||
@for p in $(addprefix packages/,$(PKGS_LOCAL)); do \
|
||||
(cd $$p; if ls *.spec &> /dev/null; then rpmspec -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}\n' *.spec | head -n1; fi) ;\
|
||||
done
|
||||
|
||||
@@ -189,14 +190,20 @@ releases: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS))
|
||||
provides:
|
||||
@$(TOPLVL)/projects/common/provides.sh -f $(FP) -r $(RN)
|
||||
|
||||
preautospecnew-checks:
|
||||
|
||||
#help autospecnew: Creates a new autospec package with for a given URL=$(URL)
|
||||
#help with NAME=$(NAME). Several files used by autospec will be created in the
|
||||
#help process. For more information about autospec, see the project page on Github https://github.com/clearlinux/autospec
|
||||
autospecnew: localreponotice
|
||||
#help process.
|
||||
#help Use MOCK_OPTS environment varible to pass down arbitrary mock options
|
||||
#help to autospec.
|
||||
#help For more information about autospec, see the project page on Github https://github.com/clearlinux/autospec
|
||||
autospecnew: preautospecnew-checks localreponotice
|
||||
@if [ -z $(NAME) ] || [ -z $(URL) ]; then \
|
||||
echo "Please specify NAME and URL. The ARCHIVES variable is optional."; \
|
||||
exit 1; \
|
||||
fi
|
||||
-$(MAKE) clone_$(NAME)
|
||||
@if [ ! -d $(TOPLVL)/packages/$(NAME)/.git ]; then \
|
||||
echo "no remote repository found, creating new package repository and running autospec"; \
|
||||
mkdir -p $(TOPLVL)/packages/$(NAME); \
|
||||
@@ -208,8 +215,23 @@ autospecnew: localreponotice
|
||||
$(call subjectprefix,$(NAME)); \
|
||||
); \
|
||||
printf 'PKG_NAME := %s\nURL = %s\nARCHIVES = %s\n\ninclude ../common/Makefile.common\n' $(NAME) '$(value URL)' '$(value ARCHIVES)' > $(TOPLVL)/packages/$(NAME)/Makefile; \
|
||||
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py --integrity -t packages/$(NAME) --config $(AUTOSPEC_CONF) $(URL) --name $(NAME) -m $(MOCK_CONFIG_VAL); \
|
||||
$(TOPLVL)/projects/common/checkblacklist.sh $(TOPLVL)/projects/common/blacklist $(TOPLVL)/packages/${NAME}/results/*.rpm; \
|
||||
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py \
|
||||
--target packages/$(NAME) \
|
||||
--integrity \
|
||||
--config "$(AUTOSPEC_CONF)" \
|
||||
--name $(NAME) \
|
||||
--archives $(ARCHIVES) \
|
||||
--mock-config $(MOCK_CONFIG_VAL) \
|
||||
--mock-opts "$(MOCK_OPTS)" \
|
||||
$${SETVERSION:+ --version $${SETVERSION}} \
|
||||
${NON_INTERACTIVE} ${SKIP_GIT} ${CLEANUP} \
|
||||
$(URL); \
|
||||
if [ $$? -eq 0 ]; then \
|
||||
$(MAKE) link-new-rpms PKG_REPO_DIR="${TOPLVL}/packages/${NAME}"; \
|
||||
$(TOPLVL)/projects/common/checkblacklist.sh $(TOPLVL)/projects/common/blacklist $(TOPLVL)/packages/${NAME}/results/*.rpm; \
|
||||
python3 $(TOPLVL)/projects/common/patchfilter.py <(git -C $(TOPLVL)/packages/$(NAME) show) > $(TOPLVL)/packages/$(NAME)/for-review.txt; \
|
||||
python3 $(TOPLVL)/projects/common/patchfilter.py <(git -C $(TOPLVL)/packages/$(NAME) show); \
|
||||
fi; \
|
||||
else \
|
||||
echo "$(NAME) already exists at $(TOPLVL)/packages/$(NAME)"; \
|
||||
exit 1; \
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -31,43 +31,13 @@ $ ./user-setup.sh
|
||||
After the script completes, make sure to logout and login again to complete the
|
||||
setup process.
|
||||
|
||||
The script either accepts no options, or all (3) options in case you are
|
||||
configuring the Koji CLI for remote building on a Koji server. The options are
|
||||
documented in the script's `--help` output.
|
||||
The script accepts several options, or no options at all. The options are
|
||||
documented in the script's `--help` output. Note that if you are supplying any
|
||||
of the three Koji cert options (`-k`, `-s`, or `-c`), the other two options
|
||||
must be supplied as well.
|
||||
|
||||
### Manual setup
|
||||
|
||||
On your Clear Linux system, create a workspace for Clear Linux development
|
||||
work:
|
||||
|
||||
```
|
||||
$ mkdir clearlinux
|
||||
```
|
||||
|
||||
Clone this repo into a `projects` directory within the workspace:
|
||||
|
||||
```
|
||||
$ cd clearlinux
|
||||
$ mkdir projects
|
||||
$ git clone https://github.com/clearlinux/common projects/common
|
||||
```
|
||||
|
||||
Create the toplevel tooling Makefile:
|
||||
|
||||
```
|
||||
$ ln -s projects/common/Makefile.toplevel Makefile
|
||||
```
|
||||
|
||||
Clone all Clear Linux package and project repositories:
|
||||
|
||||
```
|
||||
$ make clone
|
||||
```
|
||||
|
||||
Note: You can clone the repos in parallel by using make's `-j` option.
|
||||
|
||||
At this point, the `packages` directory will contain all Clear Linux package
|
||||
repos, and `projects` will contain common, clr-bundles, and autospec repos.
|
||||
If you do not wish to run the user-setup script, see the "Manual setup" section
|
||||
below for hints about how to initialize the tooling workspace.
|
||||
|
||||
## Example usage
|
||||
|
||||
@@ -132,6 +102,10 @@ $ echo missing-build-req >> buildreq_add
|
||||
$ make autospec
|
||||
```
|
||||
|
||||
Please see https://github.com/clearlinux/autospec#common-files for
|
||||
documention on buildreq_add and the other files autospec uses during the
|
||||
build process.
|
||||
|
||||
### Bump the release number for a package
|
||||
|
||||
If you simply need to increment a package's release number and rebuild the
|
||||
@@ -141,3 +115,76 @@ package, a `make bump` command is available for this purpose.
|
||||
$ make bump
|
||||
$ make build
|
||||
```
|
||||
|
||||
### Update the release version for a package
|
||||
|
||||
If you have an update release version for a package, you can change the url
|
||||
for the new release in the package/example-pkg/Makefile. After modifying the
|
||||
new url, run `make autospec` again to fetch the new package and rebuild.
|
||||
|
||||
```
|
||||
$ make autospec
|
||||
```
|
||||
|
||||
## Other topics
|
||||
|
||||
### Customizing the mock config
|
||||
|
||||
In the past, the various make commands that call `mock` required a mock config
|
||||
installed at `/etc/mock/clear.cfg`. However, at present, the commands will
|
||||
instead use the mock config within this repo (`conf/clear.cfg`).
|
||||
|
||||
If you wish to use a custom mock config, you must override the `MOCK_CONF`
|
||||
variable to specify a different value to pass to mock's `-r` option. The value
|
||||
is either a full path that ends with `.cfg`, or a config NAME installed at
|
||||
`/etc/mock/<NAME>.cfg`. You can override the `MOCK_CONF` config variable by
|
||||
redefining it in `Makefile.config.site_local`, which must reside at the
|
||||
toplevel directory in this repo.
|
||||
|
||||
For example, to retain the old behavior of mock using `/etc/mock/clear.cfg`,
|
||||
add this line to `Makefile.config.site_local`:
|
||||
|
||||
```
|
||||
MOCK_CONF = /etc/mock/clear.cfg
|
||||
```
|
||||
|
||||
If `Makefile.config.site_local` doesn't exist already, create it.
|
||||
|
||||
### Manual setup
|
||||
|
||||
If you did not run the user-setup script (see "Automated setup" section above),
|
||||
you will want to set up the developer tooling workspace manually. This section
|
||||
provides general documentation for the manual setup process, and it is not
|
||||
meant to be exhaustive.
|
||||
|
||||
On your Clear Linux system, create a workspace for Clear Linux development
|
||||
work:
|
||||
|
||||
```
|
||||
$ mkdir clearlinux
|
||||
```
|
||||
|
||||
Clone this repo into a `projects` directory within the workspace:
|
||||
|
||||
```
|
||||
$ cd clearlinux
|
||||
$ mkdir projects
|
||||
$ git clone https://github.com/clearlinux/common projects/common
|
||||
```
|
||||
|
||||
Create the toplevel tooling Makefile:
|
||||
|
||||
```
|
||||
$ ln -s projects/common/Makefile.toplevel Makefile
|
||||
```
|
||||
|
||||
Clone all Clear Linux package and project repositories:
|
||||
|
||||
```
|
||||
$ make clone
|
||||
```
|
||||
|
||||
Note: You can clone the repos in parallel by using make's `-j` option.
|
||||
|
||||
At this point, the `packages` directory will contain all Clear Linux package
|
||||
repos, and `projects` will contain common, clr-bundles, and autospec repos.
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
# Configuration files
|
||||
|
||||
This directory contains various configuration files used by the developer
|
||||
tooling framework.
|
||||
|
||||
Unless otherwise noted in the config file documentation below, the config files
|
||||
can be modified with custom, site-local changes by modifying a variable in
|
||||
`Makefile.config.site_local` to point to a location of your choice (e.g.
|
||||
somewhere in `/etc`). The framework will then read the config file from the
|
||||
location you have specified instead, so copy the in-tree copy to that location
|
||||
as a starting point if you need to.
|
||||
|
||||
* `autospec.conf`: default Autospec configuration file used by `make autospec`
|
||||
and `make autospecnew`. All configuration is commented out by default, so
|
||||
default Autospec settings are used. Config variable: `AUTOSPEC_CONF`
|
||||
|
||||
* `clear.cfg`: default Mock configuration file used by various targets that
|
||||
call out to Mock. Config variable: `MOCK_CONF`
|
||||
|
||||
* `dnf.conf`: DNF conf for use as the package manager configuration file, made
|
||||
available for the framework's local repo support. Config variable: `PM_CONF`
|
||||
|
||||
* `yum.conf`: YUM conf for use as the package manager configuration file, made
|
||||
available for the framework's local repo support. Config variable: `PM_CONF`
|
||||
|
||||
* `koji.conf`: template Koji configuration file. It is installed by
|
||||
`user-setup.sh` to `/etc/koji.conf`, and the in-tree copy is not used. If you
|
||||
are using Koji with the framework, you will need to modify `/etc/koji.conf`
|
||||
according to how the Koji instance is set up for your environment. Configuring
|
||||
the installation location via `Makefile.config.site_local` is not possible at
|
||||
the moment but is a planned feature.
|
||||
@@ -18,6 +18,10 @@
|
||||
# an absolute path or a path relative to this autospec.conf.
|
||||
#packages_file =
|
||||
|
||||
# Path to yum config, used for generating whatrequires. It can be an absolute
|
||||
# Path to dnf/yum config, used for generating whatrequires. It can be an absolute
|
||||
# path or a path relative to this autospec.conf.
|
||||
#yum_conf =
|
||||
|
||||
# Path to autospec failed patterns directory, used to match build failure lines to
|
||||
# package dependencies.
|
||||
#failed_pattern_dir =
|
||||
@@ -6,17 +6,22 @@ config_opts['dist'] = 'clear' # only useful for --resultdir variable subst
|
||||
config_opts['extra_chroot_dirs'] = [ '/run/lock', ]
|
||||
config_opts['useradd'] = '/usr/sbin/useradd -m -u %(uid)s -g %(gid)s -d %(home)s %(user)s'
|
||||
config_opts['plugin_conf']['ccache_enable'] = False
|
||||
config_opts['plugin_conf']['root_cache_opts']['compress_program'] = 'zstd -5'
|
||||
config_opts['plugin_conf']['root_cache_opts']['extension'] = '.zst'
|
||||
config_opts['releasever'] = 'clear'
|
||||
config_opts['package_manager'] = 'dnf'
|
||||
config_opts['chrootgroup'] = 'mockbuild'
|
||||
config_opts['use_bootstrap_container'] = False
|
||||
|
||||
|
||||
config_opts['yum.conf'] = """
|
||||
config_opts['dnf.conf'] = """
|
||||
|
||||
[main]
|
||||
cachedir=/var/cache/yum
|
||||
cachedir=/var/cache/dnf
|
||||
keepcache=1
|
||||
debuglevel=1
|
||||
reposdir=/dev/null
|
||||
logfile=/var/log/yum.log
|
||||
logfile=/var/log/dnf.log
|
||||
retries=20
|
||||
obsoletes=1
|
||||
gpgcheck=0
|
||||
@@ -0,0 +1,24 @@
|
||||
[main]
|
||||
keepcache=1
|
||||
debuglevel=1
|
||||
logfile=/var/log/dnf.log
|
||||
exactarch=1
|
||||
obsoletes=1
|
||||
gpgcheck=0
|
||||
plugins=0
|
||||
retries=10
|
||||
installonly_limit=3
|
||||
reposdir=/root/mash
|
||||
|
||||
[clear]
|
||||
name=Clear
|
||||
baseurl=https://cdn.download.clearlinux.org/current/x86_64/os/
|
||||
enabled=1
|
||||
gpgcheck=0
|
||||
|
||||
[clear-source]
|
||||
name=Clear sources
|
||||
failovermethod=priority
|
||||
baseurl=https://cdn.download.clearlinux.org/current/source/SRPMS/
|
||||
enabled=1
|
||||
gpgcheck=0
|
||||
+1
-1
@@ -82,7 +82,7 @@ sub find_file {
|
||||
return $file;
|
||||
}
|
||||
|
||||
open(BUILD_LOG, '<', "results/build.log") or die $!;
|
||||
open(BUILD_LOG, '<', "results/logs/build.log") or die $!;
|
||||
while (<BUILD_LOG>) {
|
||||
if($_ =~ /(\S+):([0-9]*):([0-9]*): note: (basic block|loop) (vectorized)/) {
|
||||
$fmv->{s_name} = (split('/',$1))[-1];
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# This file contains SPDX license identifiers that are not defined in the
|
||||
# latest version of SPDX but still needed (or possibly needed) for Clear Linux
|
||||
# packages.
|
||||
GFDL-1.3+
|
||||
MIT-Opengroup
|
||||
WXwindows
|
||||
w3c
|
||||
+162
-87
@@ -1,56 +1,63 @@
|
||||
0BSD
|
||||
AAL
|
||||
Abstyles
|
||||
Adobe-2006
|
||||
Adobe-Glyph
|
||||
ADSL
|
||||
AFL-1.1
|
||||
AFL-1.2
|
||||
AFL-2.0
|
||||
AFL-2.1
|
||||
AFL-3.0
|
||||
Afmparse
|
||||
AGPL-1.0
|
||||
AGPL-1.0-only
|
||||
AGPL-1.0-or-later
|
||||
AGPL-3.0
|
||||
Aladdin
|
||||
AGPL-3.0-only
|
||||
AGPL-3.0-or-later
|
||||
AMDPLPA
|
||||
AML
|
||||
AMPAS
|
||||
ANTLR-PD
|
||||
Apache-1.0
|
||||
Apache-1.1
|
||||
Apache-2.0
|
||||
APAFML
|
||||
APL-1.0
|
||||
APSL-1.0
|
||||
APSL-1.1
|
||||
APSL-1.2
|
||||
APSL-2.0
|
||||
Abstyles
|
||||
Adobe-2006
|
||||
Adobe-Glyph
|
||||
Afmparse
|
||||
Aladdin
|
||||
Apache-1.0
|
||||
Apache-1.1
|
||||
Apache-2.0
|
||||
Artistic-1.0
|
||||
Artistic-1.0-cl8
|
||||
Artistic-1.0-Perl
|
||||
Artistic-1.0-cl8
|
||||
Artistic-2.0
|
||||
BSD-1-Clause
|
||||
BSD-2-Clause
|
||||
BSD-2-Clause-FreeBSD
|
||||
BSD-2-Clause-NetBSD
|
||||
BSD-2-Clause-Patent
|
||||
BSD-3-Clause
|
||||
BSD-3-Clause-Attribution
|
||||
BSD-3-Clause-Clear
|
||||
BSD-3-Clause-LBNL
|
||||
BSD-3-Clause-No-Nuclear-License
|
||||
BSD-3-Clause-No-Nuclear-License-2014
|
||||
BSD-3-Clause-No-Nuclear-Warranty
|
||||
BSD-4-Clause
|
||||
BSD-4-Clause-UC
|
||||
BSD-Protection
|
||||
BSD-Source-Code
|
||||
BSL-1.0
|
||||
Bahyph
|
||||
Barr
|
||||
Beerware
|
||||
BitTorrent-1.0
|
||||
BitTorrent-1.1
|
||||
Borceux
|
||||
BSD-2-Clause
|
||||
BSD-2-Clause-FreeBSD
|
||||
BSD-2-Clause-NetBSD
|
||||
BSD-3-Clause
|
||||
BSD-3-Clause-Attribution
|
||||
BSD-3-Clause-Clear
|
||||
BSD-3-Clause-LBNL
|
||||
BSD-4-Clause
|
||||
BSD-4-Clause-UC
|
||||
BSD-Protection
|
||||
BSL-1.0
|
||||
bzip2-1.0.5
|
||||
bzip2-1.0.6
|
||||
Caldera
|
||||
CATOSL-1.1
|
||||
CC0-1.0
|
||||
CC-BY-1.0
|
||||
CC-BY-2.0
|
||||
CC-BY-2.5
|
||||
@@ -81,96 +88,121 @@ CC-BY-SA-2.0
|
||||
CC-BY-SA-2.5
|
||||
CC-BY-SA-3.0
|
||||
CC-BY-SA-4.0
|
||||
CC0-1.0
|
||||
CDDL-1.0
|
||||
CDDL-1.1
|
||||
CDLA-Permissive-1.0
|
||||
CDLA-Sharing-1.0
|
||||
CECILL-1.0
|
||||
CECILL-1.1
|
||||
CECILL-2.0
|
||||
CECILL-2.1
|
||||
CECILL-B
|
||||
CECILL-C
|
||||
ClArtistic
|
||||
CERN-OHL-1.1
|
||||
CERN-OHL-1.2
|
||||
CNRI-Jython
|
||||
CNRI-Python
|
||||
CNRI-Python-GPL-Compatible
|
||||
Condor-1.1
|
||||
CPAL-1.0
|
||||
CPL-1.0
|
||||
CPOL-1.02
|
||||
Crossword
|
||||
CUA-OPL-1.0
|
||||
Caldera
|
||||
ClArtistic
|
||||
Condor-1.1
|
||||
Crossword
|
||||
CrystalStacker
|
||||
Cube
|
||||
D-FSL-1.0
|
||||
diffmark
|
||||
DOC
|
||||
Dotseqn
|
||||
DSDP
|
||||
dvipdfm
|
||||
Dotseqn
|
||||
ECL-1.0
|
||||
ECL-2.0
|
||||
eCos-2.0
|
||||
EFL-1.0
|
||||
EFL-2.0
|
||||
eGenix
|
||||
Entessa
|
||||
EPL-1.0
|
||||
ErlPL-1.1
|
||||
EPL-2.0
|
||||
EUDatagrid
|
||||
EUPL-1.0
|
||||
EUPL-1.1
|
||||
EUPL-1.2
|
||||
Entessa
|
||||
ErlPL-1.1
|
||||
Eurosym
|
||||
Fair
|
||||
Frameworx-1.0
|
||||
FreeImage
|
||||
FSFAP
|
||||
FSFUL
|
||||
FSFULLR
|
||||
FTL
|
||||
Fair
|
||||
Frameworx-1.0
|
||||
FreeImage
|
||||
GFDL-1.1
|
||||
GFDL-1.1-only
|
||||
GFDL-1.1-or-later
|
||||
GFDL-1.2
|
||||
GFDL-1.2-only
|
||||
GFDL-1.2-or-later
|
||||
GFDL-1.3
|
||||
GFDL-1.3+
|
||||
Giftware
|
||||
GFDL-1.3-only
|
||||
GFDL-1.3-or-later
|
||||
GL2PS
|
||||
Glide
|
||||
Glulxe
|
||||
gnuplot
|
||||
GPL-1.0
|
||||
GPL-1.0+
|
||||
GPL-1.0-only
|
||||
GPL-1.0-or-later
|
||||
GPL-2.0
|
||||
GPL-2.0+
|
||||
GPL-2.0-only
|
||||
GPL-2.0-or-later
|
||||
GPL-2.0-with-GCC-exception
|
||||
GPL-2.0-with-autoconf-exception
|
||||
GPL-2.0-with-bison-exception
|
||||
GPL-2.0-with-classpath-exception
|
||||
GPL-2.0-with-font-exception
|
||||
GPL-2.0-with-GCC-exception
|
||||
GPL-3.0
|
||||
GPL-3.0+
|
||||
GPL-3.0-with-autoconf-exception
|
||||
GPL-3.0-only
|
||||
GPL-3.0-or-later
|
||||
GPL-3.0-with-GCC-exception
|
||||
gSOAP-1.3b
|
||||
HaskellReport
|
||||
GPL-3.0-with-autoconf-exception
|
||||
Giftware
|
||||
Glide
|
||||
Glulxe
|
||||
HPND
|
||||
HPND-sell-variant
|
||||
HaskellReport
|
||||
IBM-pibs
|
||||
ICU
|
||||
IJG
|
||||
ImageMagick
|
||||
iMatix
|
||||
Imlib2
|
||||
Intel
|
||||
Intel-ACPI
|
||||
IPA
|
||||
IPL-1.0
|
||||
ISC
|
||||
JasPer-2.0
|
||||
ImageMagick
|
||||
Imlib2
|
||||
Info-ZIP
|
||||
Intel
|
||||
Intel-ACPI
|
||||
Interbase-1.0
|
||||
JPNIC
|
||||
JSON
|
||||
Latex2e
|
||||
Leptonica
|
||||
JasPer-2.0
|
||||
LAL-1.2
|
||||
LAL-1.3
|
||||
LGPL-2.0
|
||||
LGPL-2.0+
|
||||
LGPL-2.0-only
|
||||
LGPL-2.0-or-later
|
||||
LGPL-2.1
|
||||
LGPL-2.1+
|
||||
LGPL-2.1-only
|
||||
LGPL-2.1-or-later
|
||||
LGPL-3.0
|
||||
LGPL-3.0+
|
||||
Libpng
|
||||
libtiff
|
||||
LGPL-3.0-only
|
||||
LGPL-3.0-or-later
|
||||
LGPLLR
|
||||
LPL-1.0
|
||||
LPL-1.02
|
||||
LPPL-1.0
|
||||
@@ -178,17 +210,20 @@ LPPL-1.1
|
||||
LPPL-1.2
|
||||
LPPL-1.3a
|
||||
LPPL-1.3c
|
||||
MakeIndex
|
||||
MirOS
|
||||
Latex2e
|
||||
Leptonica
|
||||
LiLiQ-P-1.1
|
||||
LiLiQ-R-1.1
|
||||
LiLiQ-Rplus-1.1
|
||||
Libpng
|
||||
Linux-OpenIB
|
||||
MIT
|
||||
MIT-advertising
|
||||
MIT-0
|
||||
MIT-CMU
|
||||
MIT-advertising
|
||||
MIT-enna
|
||||
MIT-feh
|
||||
MIT-Opengroup
|
||||
MITNFA
|
||||
Motosoto
|
||||
mpich2
|
||||
MPL-1.0
|
||||
MPL-1.1
|
||||
MPL-2.0
|
||||
@@ -196,29 +231,39 @@ MPL-2.0-no-copyleft-exception
|
||||
MS-PL
|
||||
MS-RL
|
||||
MTLL
|
||||
MakeIndex
|
||||
MirOS
|
||||
Motosoto
|
||||
Multics
|
||||
Mup
|
||||
NASA-1.3
|
||||
Naumen
|
||||
NBPL-1.0
|
||||
NCSA
|
||||
NetCDF
|
||||
Newsletr
|
||||
NGPL
|
||||
NLOD-1.0
|
||||
NLPL
|
||||
Nokia
|
||||
NOSL
|
||||
Noweb
|
||||
NPL-1.0
|
||||
NPL-1.1
|
||||
NPOSL-3.0
|
||||
NRL
|
||||
NTP
|
||||
Naumen
|
||||
Net-SNMP
|
||||
NetCDF
|
||||
Newsletr
|
||||
Nokia
|
||||
Noweb
|
||||
Nunit
|
||||
OCCT-PL
|
||||
OCLC-2.0
|
||||
ODC-By-1.0
|
||||
ODbL-1.0
|
||||
OFL-1.0
|
||||
OFL-1.1
|
||||
OGL-UK-1.0
|
||||
OGL-UK-2.0
|
||||
OGL-UK-3.0
|
||||
OGTSL
|
||||
OLDAP-1.1
|
||||
OLDAP-1.2
|
||||
@@ -237,77 +282,107 @@ OLDAP-2.6
|
||||
OLDAP-2.7
|
||||
OLDAP-2.8
|
||||
OML
|
||||
OpenSSL
|
||||
OPL-1.0
|
||||
OSET-PL-2.1
|
||||
OSL-1.0
|
||||
OSL-1.1
|
||||
OSL-2.0
|
||||
OSL-2.1
|
||||
OSL-3.0
|
||||
OpenSSL
|
||||
PDDL-1.0
|
||||
PHP-3.0
|
||||
PHP-3.01
|
||||
Plexus
|
||||
PostgreSQL
|
||||
psfrag
|
||||
psutils
|
||||
Python-2.0
|
||||
Qhull
|
||||
QPL-1.0
|
||||
Rdisc
|
||||
Qhull
|
||||
RHeCos-1.1
|
||||
RPL-1.1
|
||||
RPL-1.5
|
||||
RPSL-1.0
|
||||
RSA-MD
|
||||
RSCPL
|
||||
Rdisc
|
||||
Ruby
|
||||
Saxpath
|
||||
SAX-PD
|
||||
SCEA
|
||||
SGI-B-1.0
|
||||
SGI-B-1.1
|
||||
SGI-B-2.0
|
||||
SimPL-2.0
|
||||
SISSL
|
||||
SISSL-1.2
|
||||
Sleepycat
|
||||
SMLNJ
|
||||
SMPPL
|
||||
SNIA
|
||||
SPL-1.0
|
||||
SWL
|
||||
Saxpath
|
||||
Sendmail
|
||||
Sendmail-8.23
|
||||
SimPL-2.0
|
||||
Sleepycat
|
||||
Spencer-86
|
||||
Spencer-94
|
||||
Spencer-99
|
||||
StandardML-NJ
|
||||
SugarCRM-1.1.3
|
||||
SWL
|
||||
TAPR-OHL-1.0
|
||||
TCL
|
||||
TCP-wrappers
|
||||
TMate
|
||||
TORQUE-1.1
|
||||
TOSL
|
||||
TU-Berlin-1.0
|
||||
TU-Berlin-2.0
|
||||
UPL-1.0
|
||||
Unicode-DFS-2015
|
||||
Unicode-DFS-2016
|
||||
Unicode-TOU
|
||||
Unlicense
|
||||
Vim
|
||||
VOSTROM
|
||||
VSL-1.0
|
||||
Vim
|
||||
W3C
|
||||
W3C-19980720
|
||||
W3C-20150513
|
||||
WTFPL
|
||||
Watcom-1.0
|
||||
Wsuipa
|
||||
WTFPL
|
||||
WXwindows
|
||||
X11
|
||||
Xerox
|
||||
XFree86-1.1
|
||||
xinetd
|
||||
Xnet
|
||||
xpp
|
||||
XSkat
|
||||
Xerox
|
||||
Xnet
|
||||
YPL-1.0
|
||||
YPL-1.1
|
||||
ZPL-1.1
|
||||
ZPL-2.0
|
||||
ZPL-2.1
|
||||
Zed
|
||||
Zend-2.0
|
||||
Zimbra-1.3
|
||||
Zimbra-1.4
|
||||
Zlib
|
||||
bzip2-1.0.5
|
||||
bzip2-1.0.6
|
||||
copyleft-next-0.3.0
|
||||
copyleft-next-0.3.1
|
||||
curl
|
||||
diffmark
|
||||
dvipdfm
|
||||
eCos-2.0
|
||||
eGenix
|
||||
gSOAP-1.3b
|
||||
gnuplot
|
||||
iMatix
|
||||
libpng-2.0
|
||||
libtiff
|
||||
mpich2
|
||||
psfrag
|
||||
psutils
|
||||
wxWindows
|
||||
xinetd
|
||||
xpp
|
||||
zlib-acknowledgement
|
||||
ZPL-1.1
|
||||
ZPL-2.0
|
||||
ZPL-2.1
|
||||
w3c
|
||||
|
||||
+348
@@ -0,0 +1,348 @@
|
||||
#!/usr/bin/python3
|
||||
import sys
|
||||
import tempfile
|
||||
import subprocess
|
||||
|
||||
header = list()
|
||||
files = list()
|
||||
files_chunks = dict() # dict to list
|
||||
files_header = dict() # dict to list
|
||||
|
||||
|
||||
|
||||
def push_chunk(file, chunk):
|
||||
global files_chunks
|
||||
|
||||
if len(chunk) == 0:
|
||||
return
|
||||
|
||||
if file not in files_chunks:
|
||||
files_chunks[file] = list()
|
||||
|
||||
files_chunks[file].append(chunk)
|
||||
|
||||
|
||||
def parse_patch(lines):
|
||||
global header
|
||||
global files
|
||||
global files_chunks
|
||||
global files_header
|
||||
|
||||
phase = 0
|
||||
|
||||
currentfile = ""
|
||||
currentchunk = list()
|
||||
|
||||
|
||||
for line in lines:
|
||||
line = line.replace("\n","")
|
||||
|
||||
if line.startswith("diff --git"):
|
||||
|
||||
push_chunk(currentfile, currentchunk)
|
||||
currentchunk = list()
|
||||
|
||||
filename = line.replace("diff --git","")
|
||||
index= filename.find("b/")
|
||||
if index >= 0:
|
||||
filename = filename[index:].strip()
|
||||
currentfile = filename
|
||||
files.append(currentfile)
|
||||
phase = 1
|
||||
|
||||
if line.startswith("@@"):
|
||||
push_chunk(currentfile, currentchunk)
|
||||
currentchunk = list()
|
||||
phase = 2
|
||||
|
||||
|
||||
if phase == 0:
|
||||
header.append(line)
|
||||
if phase == 1:
|
||||
if currentfile not in files_header:
|
||||
files_header[currentfile] = list()
|
||||
files_header[currentfile].append(line)
|
||||
if phase == 2:
|
||||
currentchunk.append(line)
|
||||
|
||||
push_chunk(currentfile, currentchunk)
|
||||
currentchunk = list()
|
||||
|
||||
def print_all():
|
||||
global header
|
||||
global files
|
||||
global files_chunks
|
||||
global files_header
|
||||
|
||||
for line in header:
|
||||
print(line)
|
||||
for file in files:
|
||||
for line in files_header[file]:
|
||||
print(line)
|
||||
if file in files_chunks:
|
||||
for chunk in files_chunks[file]:
|
||||
for line in chunk:
|
||||
print(line)
|
||||
|
||||
|
||||
def zap_entire_file(filename):
|
||||
global header
|
||||
global files
|
||||
global files_chunks
|
||||
global files_header
|
||||
if filename in files:
|
||||
files.remove(filename)
|
||||
|
||||
def zap_entire_file_end(filename):
|
||||
global header
|
||||
global files
|
||||
global files_chunks
|
||||
global files_header
|
||||
for file in files:
|
||||
if file.endswith(filename):
|
||||
files.remove(file)
|
||||
|
||||
def zap_line_in_file(filename, match):
|
||||
global header
|
||||
global files
|
||||
global files_chunks
|
||||
global files_header
|
||||
for file in files:
|
||||
if file.endswith(filename):
|
||||
for chunk in files_chunks[filename]:
|
||||
to_delete = list()
|
||||
for line in chunk:
|
||||
if line == ("+" + match):
|
||||
to_delete.append(line)
|
||||
if line == ("-" + match):
|
||||
to_delete.append(line)
|
||||
for line in to_delete:
|
||||
chunk.remove(line)
|
||||
|
||||
|
||||
def zap_line_in_file_start(filename, match):
|
||||
global header
|
||||
global files
|
||||
global files_chunks
|
||||
global files_header
|
||||
|
||||
for file in files:
|
||||
if file.endswith(filename):
|
||||
for chunk in files_chunks[file]:
|
||||
to_remove = list()
|
||||
for line in chunk:
|
||||
if line.startswith("+" + match):
|
||||
to_remove.append(line)
|
||||
if line.startswith("-" + match):
|
||||
to_remove.append(line)
|
||||
for line in to_remove:
|
||||
chunk.remove(line)
|
||||
|
||||
def zap_plus_line_in_file(filename):
|
||||
global header
|
||||
global files
|
||||
global files_chunks
|
||||
global files_header
|
||||
|
||||
for file in files:
|
||||
if file.endswith(filename):
|
||||
for chunk in files_chunks[file]:
|
||||
to_remove = list()
|
||||
for line in chunk:
|
||||
if line.startswith("+"):
|
||||
to_remove.append(line)
|
||||
for line in to_remove:
|
||||
chunk.remove(line)
|
||||
|
||||
|
||||
|
||||
def chunk_empty(chunk):
|
||||
for line in chunk:
|
||||
if len(line) > 0 and line[0] == '+':
|
||||
return False
|
||||
return True
|
||||
|
||||
def zap_empty_chunks():
|
||||
global header
|
||||
global files
|
||||
global files_chunks
|
||||
global files_header
|
||||
files_to_remove = list()
|
||||
for file in files:
|
||||
if file not in files_chunks:
|
||||
files.remove(file)
|
||||
continue
|
||||
to_remove = list()
|
||||
for chunk in files_chunks[file]:
|
||||
if chunk_empty(chunk):
|
||||
to_remove.append(chunk)
|
||||
for c in to_remove:
|
||||
files_chunks[file].remove(c)
|
||||
if len(files_chunks[file]) == 0:
|
||||
files_to_remove.append(file)
|
||||
|
||||
for file in files_to_remove:
|
||||
files.remove(file)
|
||||
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
filename = sys.argv[1]
|
||||
|
||||
with open (filename, "r") as myfile:
|
||||
lines = myfile.readlines()
|
||||
else:
|
||||
output = subprocess.check_output("git show", shell=True).decode("latin-1")
|
||||
lines = output.split("\n")
|
||||
|
||||
parse_patch(lines)
|
||||
|
||||
zap_entire_file("b/release")
|
||||
zap_entire_file("b/buildreq_cache")
|
||||
zap_entire_file("b/.gitignore")
|
||||
zap_entire_file("b/upstream")
|
||||
zap_entire_file("b/NEWS")
|
||||
zap_entire_file("b/ChangeLog")
|
||||
zap_entire_file_end("xz.sig")
|
||||
zap_entire_file_end("gz.sig")
|
||||
zap_entire_file_end("bz2.sig")
|
||||
|
||||
zap_line_in_file("b/testresults", "Total : 0")
|
||||
zap_line_in_file("b/testresults", "Pass : 0")
|
||||
zap_line_in_file("b/testresults", "Fail : 0")
|
||||
zap_line_in_file("b/testresults", "XFail : 0")
|
||||
zap_line_in_file("b/testresults", "Skip : 0")
|
||||
|
||||
zap_line_in_file("b/requires_ban", "#FOO")
|
||||
zap_line_in_file("b/Makefile", "ARCHIVES = ")
|
||||
zap_line_in_file("b/Makefile", "include ../common/Makefile.common")
|
||||
zap_line_in_file("b/Makefile", "")
|
||||
|
||||
zap_line_in_file_start(".spec", "Release :")
|
||||
zap_line_in_file_start(".spec", "Source99 :")
|
||||
zap_line_in_file_start(".spec", "Source0 :")
|
||||
zap_line_in_file_start(".spec", "export SOURCE_DATE_EPOCH")
|
||||
zap_line_in_file_start(".spec", "%setup -q -n ")
|
||||
zap_line_in_file_start(".spec", "URL :")
|
||||
zap_line_in_file_start(".spec", "Version :")
|
||||
zap_line_in_file_start(".spec", "Group : Development/Tools")
|
||||
zap_line_in_file_start(".spec", "No detailed description available")
|
||||
zap_line_in_file_start(".spec", "bin components for the")
|
||||
zap_line_in_file_start(".spec", "dev components for the")
|
||||
zap_line_in_file_start(".spec", "lib components for the")
|
||||
zap_line_in_file_start(".spec", "data components for the")
|
||||
zap_line_in_file_start(".spec", "locales components for the")
|
||||
zap_line_in_file_start(".spec", "license components for the")
|
||||
zap_line_in_file_start(".spec", "Group: Default")
|
||||
zap_line_in_file_start(".spec", "export http_proxy=http://127.0.0.1:9/")
|
||||
zap_line_in_file_start(".spec", "export https_proxy=http://127.0.0.1:9/")
|
||||
zap_line_in_file_start(".spec", "export ftp_proxy=http://127.0.0.1:9/")
|
||||
zap_line_in_file_start(".spec", "export no_proxy=localhost,127.0.0.1,0.0.0.0")
|
||||
zap_line_in_file_start(".spec", "Summary:")
|
||||
zap_line_in_file_start(".spec", "Group: Development")
|
||||
zap_line_in_file_start(".spec", "Group: Binaries")
|
||||
zap_line_in_file_start(".spec", "Group: Data")
|
||||
zap_line_in_file_start(".spec", "Group: Libraries")
|
||||
zap_line_in_file_start(".spec", "export LANG=C")
|
||||
zap_line_in_file_start(".spec", "%description lib")
|
||||
zap_line_in_file_start(".spec", "%description bin")
|
||||
zap_line_in_file_start(".spec", "%description data")
|
||||
zap_line_in_file_start(".spec", "%description locales")
|
||||
zap_line_in_file_start(".spec", "%description dev")
|
||||
zap_line_in_file_start(".spec", "%description license")
|
||||
|
||||
zap_line_in_file_start("b/Makefile", "URL =")
|
||||
zap_line_in_file_start("b/Makefile", "PKG_NAME :=")
|
||||
|
||||
zap_line_in_file("b/options.conf", "archives = ")
|
||||
zap_line_in_file("b/options.conf", "giturl = ")
|
||||
zap_line_in_file("b/options.conf", "[package]")
|
||||
zap_line_in_file("b/options.conf", "")
|
||||
zap_line_in_file("b/options.conf", "[autospec]")
|
||||
zap_line_in_file("b/options.conf", "# build 32 bit libraries")
|
||||
zap_line_in_file("b/options.conf", "32bit = false")
|
||||
zap_line_in_file("b/options.conf", "# allow package to build with test failures")
|
||||
zap_line_in_file("b/options.conf", "allow_test_failures = false")
|
||||
zap_line_in_file("b/options.conf", "# unset %build ld_as_needed variable")
|
||||
zap_line_in_file("b/options.conf", "asneeded = false")
|
||||
zap_line_in_file("b/options.conf", "# this package is trusted enough to automatically update (used by other tools)")
|
||||
zap_line_in_file("b/options.conf", "autoupdate = false")
|
||||
zap_line_in_file("b/options.conf", "# extend flags with '-std=gnu++98")
|
||||
zap_line_in_file("b/options.conf", "broken_c++ = false")
|
||||
zap_line_in_file("b/options.conf", "# disable parallelization during build")
|
||||
zap_line_in_file("b/options.conf", "broken_parallel_build = false")
|
||||
zap_line_in_file("b/options.conf", "# this package is a library compatability package and only ships versioned library files")
|
||||
zap_line_in_file("b/options.conf", "compat = false")
|
||||
zap_line_in_file("b/options.conf", "# set conservative build flags")
|
||||
zap_line_in_file("b/options.conf", "conservative_flags = false")
|
||||
zap_line_in_file("b/options.conf", "# dev package requires the extras to be installed")
|
||||
zap_line_in_file("b/options.conf", "dev_requires_extras = false")
|
||||
zap_line_in_file("b/options.conf", "# pass -ffast-math to compiler")
|
||||
zap_line_in_file("b/options.conf", "fast-math = false")
|
||||
zap_line_in_file("b/options.conf", "# optimize build for speed over size")
|
||||
zap_line_in_file("b/options.conf", "funroll-loops = false")
|
||||
zap_line_in_file("b/options.conf", "# set flags to smallest -02 flags possible")
|
||||
zap_line_in_file("b/options.conf", "insecure_build = false")
|
||||
zap_line_in_file("b/options.conf", "# do not remove static libraries")
|
||||
zap_line_in_file("b/options.conf", "keepstatic = false")
|
||||
zap_line_in_file("b/options.conf", "# do not require autostart subpackage")
|
||||
zap_line_in_file("b/options.conf", "no_autostart = false")
|
||||
zap_line_in_file("b/options.conf", "# disable stripping binaries")
|
||||
zap_line_in_file("b/options.conf", "nostrip = false")
|
||||
zap_line_in_file("b/options.conf", "# optimize build for size over speed")
|
||||
zap_line_in_file("b/options.conf", "optimize_size = false")
|
||||
zap_line_in_file("b/options.conf", "# set profile for pgo")
|
||||
zap_line_in_file("b/options.conf", "pgo = false")
|
||||
zap_line_in_file("b/options.conf", "# set flags for security-sensitive builds")
|
||||
zap_line_in_file("b/options.conf", "security_sensitive = false")
|
||||
zap_line_in_file("b/options.conf", "# do not run test suite")
|
||||
zap_line_in_file("b/options.conf", "skip_tests = false")
|
||||
zap_line_in_file("b/options.conf", "# add .so files to the lib package instead of dev")
|
||||
zap_line_in_file("b/options.conf", "so_to_lib = false")
|
||||
zap_line_in_file("b/options.conf", "# configure build for avx2")
|
||||
zap_line_in_file("b/options.conf", "use_avx2 = false")
|
||||
zap_line_in_file("b/options.conf", "# configure build for avx512")
|
||||
zap_line_in_file("b/options.conf", "use_avx512 = false")
|
||||
zap_line_in_file("b/options.conf", "# add clang flags")
|
||||
zap_line_in_file("b/options.conf", "use_clang = false")
|
||||
zap_line_in_file("b/options.conf", "# configure build for lto")
|
||||
zap_line_in_file("b/options.conf", "use_lto = false")
|
||||
zap_line_in_file("b/options.conf", "# require package verification for build")
|
||||
zap_line_in_file("b/options.conf", "verify_required = true")
|
||||
|
||||
zap_line_in_file("b/buildreq_add", "# This file contains additional build requirements that did not get")
|
||||
zap_line_in_file("b/buildreq_add", "# picked up automatically. One name per line, no whitespace.")
|
||||
zap_line_in_file("b/buildreq_ban", "# This file contains build requirements that get picked up but are")
|
||||
zap_line_in_file("b/buildreq_ban", "# undesirable. One entry per line, no whitespace.")
|
||||
|
||||
|
||||
zap_line_in_file("b/excludes", "# This file contains the output files that need %exclude. Full path")
|
||||
zap_line_in_file("b/excludes", "# names, one per line.")
|
||||
|
||||
zap_line_in_file("b/pkgconfig_add", "# This file contains additional pkgconfig build requirements that did")
|
||||
zap_line_in_file("b/pkgconfig_add", "# not get picked up automatically. One name per line, no whitespace.")
|
||||
zap_line_in_file("b/pkgconfig_ban", "# This file contains pkgconfig build requirements that get picked up")
|
||||
zap_line_in_file("b/pkgconfig_ban", "# but are undesirable. One entry per line, no whitespace.")
|
||||
zap_line_in_file("b/requires_add", "# This file contains additional runtime requirements that did not get")
|
||||
zap_line_in_file("b/requires_add", "# picked up automatically. One name per line, no whitespace.")
|
||||
zap_line_in_file("b/requires_ban", "# This file contains runtime requirements that get picked up but are")
|
||||
zap_line_in_file("b/requires_ban", "# undesirable. One entry per line, no whitespace.")
|
||||
|
||||
zap_line_in_file_start(".spec", "Summary : No detailed summary available")
|
||||
|
||||
zap_plus_line_in_file("symbols")
|
||||
zap_plus_line_in_file("symbols32")
|
||||
|
||||
zap_entire_file("b/whatrequires")
|
||||
|
||||
zap_empty_chunks()
|
||||
|
||||
print_all()
|
||||
|
||||
if __name__ == '__main__':
|
||||
with tempfile.TemporaryDirectory() as workingdir:
|
||||
main()
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ if [ "$#" -eq 0 ]; then
|
||||
fi
|
||||
|
||||
if [ ! -e /etc/yum.conf ]; then
|
||||
echo "Error: yum.conf is missing. Please copy projects/common/image-creator/yum.conf to /etc"
|
||||
echo "Error: yum.conf is missing. Please copy projects/common/conf/yum.conf to /etc"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
Regular → Executable
+10
-1
@@ -43,15 +43,24 @@ if [ ! -f "$IMAGE" ]; then
|
||||
fi
|
||||
rm -f debug.log
|
||||
|
||||
# 10/25/2018: keep back compatibility for a while
|
||||
UEFI_BIOS="-bios OVMF.fd"
|
||||
|
||||
if [ -f OVMF_VARS.fd -a -f OVMF_CODE.fd ]; then
|
||||
UEFI_BIOS=" -drive file=OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on "
|
||||
UEFI_BIOS+=" -drive file=OVMF_VARS.fd,if=pflash,format=raw,unit=1 "
|
||||
fi
|
||||
|
||||
VMN=${VMN:=1}
|
||||
|
||||
qemu-system-x86_64 \
|
||||
-enable-kvm \
|
||||
-bios OVMF.fd \
|
||||
${UEFI_BIOS} \
|
||||
-smp sockets=1,cpus=4,cores=2 -cpu host \
|
||||
-m 1024 \
|
||||
-vga none -nographic \
|
||||
-drive file="$IMAGE",if=virtio,aio=threads,format=raw \
|
||||
-netdev user,id=mynet0,hostfwd=tcp::${VMN}0022-:22,hostfwd=tcp::${VMN}2375-:2375 \
|
||||
-device virtio-net-pci,netdev=mynet0 \
|
||||
-device virtio-rng-pci \
|
||||
-debugcon file:debug.log -global isa-debugcon.iobase=0x402 $@
|
||||
+143
-101
@@ -1,102 +1,136 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPT=$(/usr/bin/basename $0)
|
||||
PEM=""
|
||||
SERVERCA=""
|
||||
CLIENTCA=""
|
||||
WORKSPACE="clearlinux"
|
||||
PACKAGE_REPOS=
|
||||
NEEDS_KVM_GROUP=
|
||||
|
||||
help() {
|
||||
printf "%s\n" >&2 "Usage: $SCRIPT [options]" \
|
||||
"" \
|
||||
"Options:" \
|
||||
"-k --client-cert PEM_FILE: Enable client user cert for koji configuration; requires a PEM file argument" \
|
||||
"-s --server-ca PEM_FILE: Enable server CA cert for koji configuration; requires a PEM file argument" \
|
||||
"-c --client-ca PEM_FILE: Enable client CA cert for koji configuration; requires a PEM file argument" \
|
||||
""
|
||||
printf "%s\n" >&2 "Usage: $SCRIPT [options]" \
|
||||
"" \
|
||||
"Options:" \
|
||||
"" \
|
||||
"-d --directory NAME: Set up workspace in the given directory." \
|
||||
"-a --clone-packages: Clone all package repos." \
|
||||
"-j --jobs [NUM]: Clone repos with NUM jobs. If NUM is not given, it is set to the available CPU count." \
|
||||
"" \
|
||||
"-k --client-cert PEM_FILE: Enable client user cert for koji configuration; requires a PEM file argument" \
|
||||
"-s --server-ca PEM_FILE: Enable server CA cert for koji configuration; requires a PEM file argument" \
|
||||
"-c --client-ca PEM_FILE: Enable client CA cert for koji configuration; requires a PEM file argument" \
|
||||
""
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "Error: $1\n" >&2
|
||||
help
|
||||
exit 1
|
||||
}
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
"--help"|"-h")
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
"--client-cert"|"-k")
|
||||
shift
|
||||
PEM="$PWD/$1"
|
||||
;;
|
||||
"--server-ca"|"-s")
|
||||
shift
|
||||
SERVERCA="$PWD/$1"
|
||||
;;
|
||||
"--client-ca"|"-c")
|
||||
shift
|
||||
CLIENTCA="$PWD/$1"
|
||||
;;
|
||||
*)
|
||||
help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
case "$1" in
|
||||
"--help"|"-h")
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
"--client-cert"|"-k")
|
||||
shift
|
||||
PEM="$(realpath $1)"
|
||||
;;
|
||||
"--server-ca"|"-s")
|
||||
shift
|
||||
SERVERCA="$(realpath $1)"
|
||||
;;
|
||||
"--client-ca"|"-c")
|
||||
shift
|
||||
CLIENTCA="$(realpath $1)"
|
||||
;;
|
||||
"--jobs"|"-j")
|
||||
if echo "$2" | grep -qx "[1-9][0-9]*"; then
|
||||
shift
|
||||
JOBS="$1"
|
||||
elif [ -f /proc/cpuinfo ]; then
|
||||
JOBS=$(grep -Ec '^processor.*:.*[0-9]+$' /proc/cpuinfo)
|
||||
fi
|
||||
;;
|
||||
"--directory"|"-d")
|
||||
[ -z "$2" ] && error "Must supply a directory name to the -d option"
|
||||
[ "${2:0:1}" = "-" ] && error "Directory name cannot begin with \"-\""
|
||||
shift
|
||||
WORKSPACE="$1"
|
||||
;;
|
||||
"--clone-packages"|"-a")
|
||||
PACKAGE_REPOS=1
|
||||
;;
|
||||
*)
|
||||
help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
error() {
|
||||
echo -e "Error: $1\n" >&2
|
||||
help
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ -z "$PEM" ] && [ -z "$SERVERCA" ] && [ -z "$CLIENTCA" ]; then
|
||||
USE_KOJI=
|
||||
USE_KOJI=
|
||||
else
|
||||
if [ -z "$PEM" ] || [ -z "$SERVERCA" ] || [ -z "$CLIENTCA" ]; then
|
||||
error "Must specify all three command line options (or none)"
|
||||
fi
|
||||
if [ ! -f "$PEM" ]; then
|
||||
error "Missing koji client PEM key file"
|
||||
fi
|
||||
if [ ! -f "$SERVERCA" ]; then
|
||||
error "Missing koji server CA PEM file"
|
||||
fi
|
||||
if [ ! -f "$CLIENTCA" ]; then
|
||||
error "Missing koji client CA PEM file"
|
||||
fi
|
||||
USE_KOJI="yes"
|
||||
if [ -z "$PEM" ] || [ -z "$SERVERCA" ] || [ -z "$CLIENTCA" ]; then
|
||||
error "Must specify all three command line options (or none)"
|
||||
fi
|
||||
if [ ! -f "$PEM" ]; then
|
||||
error "Missing koji client PEM key file"
|
||||
fi
|
||||
if [ ! -f "$SERVERCA" ]; then
|
||||
error "Missing koji server CA PEM file"
|
||||
fi
|
||||
if [ ! -f "$CLIENTCA" ]; then
|
||||
error "Missing koji client CA PEM file"
|
||||
fi
|
||||
USE_KOJI="yes"
|
||||
fi
|
||||
|
||||
if [ -n "$JOBS" ]; then
|
||||
JOBS_ARG="-j $JOBS"
|
||||
fi
|
||||
|
||||
if [ -d "$WORKSPACE" ]; then
|
||||
error "Directory \"$WORKSPACE\" already exists. \
|
||||
Either remove this workspace, or use a different workspace name."
|
||||
fi
|
||||
|
||||
required_progs() {
|
||||
local bindir="/usr/bin"
|
||||
for f in git mock rpm rpmbuild ; do
|
||||
[ ! -x "${bindir}/${f}" ] && missing+="${f} "
|
||||
done
|
||||
[ "$PEM" ] && [ ! -x /usr/bin/koji ] && missing+="koji "
|
||||
if [ -n "$missing" ]; then
|
||||
echo "Install the following programs and re-run this script:" >&2
|
||||
echo $missing >&2
|
||||
echo 'All programs should be provided in the "os-clr-on-clr" bundle.' >&2
|
||||
exit 1
|
||||
fi
|
||||
local bindir="/usr/bin"
|
||||
for f in git mock rpm rpmbuild ; do
|
||||
[ ! -x "${bindir}/${f}" ] && missing+="${f} "
|
||||
done
|
||||
[ "$PEM" ] && [ ! -x /usr/bin/koji ] && missing+="koji "
|
||||
if [ -n "$missing" ]; then
|
||||
echo "Install the following programs and re-run this script:" >&2
|
||||
echo $missing >&2
|
||||
echo 'All programs should be provided in the "os-clr-on-clr" bundle.' >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
required_progs
|
||||
|
||||
echo 'Initializing development workspace in "clearlinux" . . .'
|
||||
if [ -d "clearlinux" ]; then
|
||||
echo 'Directory "clearlinux" already exists in current directory.' >&2
|
||||
echo "Cannot initialize workspace." >&2
|
||||
exit 1
|
||||
if ! groups | grep -qw kvm; then
|
||||
NEEDS_KVM_GROUP=1
|
||||
fi
|
||||
|
||||
mkdir clearlinux
|
||||
cd clearlinux
|
||||
echo "Initializing development workspace in \"$WORKSPACE\" . . ."
|
||||
|
||||
mkdir "$WORKSPACE"
|
||||
cd "$WORKSPACE"
|
||||
|
||||
echo "Setting up common repo . . ."
|
||||
mkdir projects
|
||||
git clone https://github.com/clearlinux/common projects/common
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to clone common repo." >&2
|
||||
exit 1
|
||||
echo "Failed to clone common repo." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Finish setup for packages/projects hierarchy
|
||||
@@ -105,48 +139,56 @@ mkdir -p packages/common
|
||||
ln -sf ../../projects/common/Makefile.common packages/common/Makefile.common
|
||||
|
||||
if [ "$USE_KOJI" ]; then
|
||||
echo "Setting up koji certs . . ."
|
||||
mkdir -p ~/.koji
|
||||
cp "$PEM" ~/.koji/client.crt
|
||||
cp "$CLIENTCA" ~/.koji/clientca.crt
|
||||
cp "$SERVERCA" ~/.koji/serverca.crt
|
||||
echo "Setting up koji certs . . ."
|
||||
mkdir -p ~/.koji
|
||||
cp "$PEM" ~/.koji/client.crt
|
||||
cp "$CLIENTCA" ~/.koji/clientca.crt
|
||||
cp "$SERVERCA" ~/.koji/serverca.crt
|
||||
|
||||
if [ ! -f /etc/koji.conf ]; then
|
||||
echo "Setting up koji config . . ."
|
||||
sudo cp projects/common/koji-client-files/koji.conf /etc
|
||||
fi
|
||||
if [ ! -f /etc/koji.conf ]; then
|
||||
echo "Setting up koji config . . ."
|
||||
sudo cp projects/common/conf/koji.conf /etc
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f /etc/mock/clear.cfg ]; then
|
||||
echo "Setting up mock config . . ."
|
||||
sudo mkdir -p /etc/mock
|
||||
sudo cp projects/common/koji-client-files/clear.cfg /etc/mock
|
||||
if [ -n "$NEEDS_KVM_GROUP" ]; then
|
||||
echo "Adding user to kvm group . . ."
|
||||
sudo usermod -a -G kvm $USER
|
||||
fi
|
||||
|
||||
echo "Adding user to kvm group . . ."
|
||||
sudo usermod -a -G kvm $USER
|
||||
|
||||
echo "Cloning special project repositories . . ."
|
||||
make clone-projects
|
||||
make ${JOBS_ARG} clone-projects
|
||||
|
||||
if [ -z "$NO_PACKAGE_REPOS" ]; then
|
||||
echo "Cloning all package repositories . . ."
|
||||
make clone-packages
|
||||
if [ -n "$PACKAGE_REPOS" ]; then
|
||||
echo "Cloning all package repositories . . ."
|
||||
make ${JOBS_ARG} clone-packages
|
||||
fi
|
||||
|
||||
echo "Creating mix workspace . . ."
|
||||
mkdir -p mix
|
||||
|
||||
if [ "$USE_KOJI" ]; then
|
||||
echo "Testing koji installation . . ."
|
||||
if koji moshimoshi; then
|
||||
echo -en "\n************************\n\n"
|
||||
echo "Koji installed and configured successfully"
|
||||
else
|
||||
echo -en "\n************************\n\n"
|
||||
echo "Error with koji installation or configuration" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Testing koji installation . . ."
|
||||
if koji moshimoshi; then
|
||||
echo -en "\n************************\n\n"
|
||||
echo "Koji installed and configured successfully"
|
||||
else
|
||||
echo -en "\n************************\n\n"
|
||||
echo "Error with koji installation or configuration" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -en "\n************************\n"
|
||||
|
||||
echo 'Workspace has been set up in the "clearlinux" directory'
|
||||
echo 'NOTE: logout and log back in or run "newgrp kvm" to finalize the setup process'
|
||||
echo "Workspace has been set up in \"$WORKSPACE\""
|
||||
if [ -z "$PACKAGE_REPOS" ]; then
|
||||
echo "NOTE: To clone all package repos, run \"cd $WORKSPACE; make [-j NUM] clone-packages\""
|
||||
echo "NOTE: To clone a single package repo with NAME, run \"cd $WORKSPACE; make clone_NAME\""
|
||||
fi
|
||||
if [ -n "$NEEDS_KVM_GROUP" ]; then
|
||||
echo 'NOTE: logout and log back in to finalize the setup process'
|
||||
fi
|
||||
|
||||
|
||||
# vi: ft=sh sw=2 et sts=2
|
||||
|
||||
Reference in New Issue
Block a user