152 lines
5.1 KiB
Makefile
152 lines
5.1 KiB
Makefile
# extract name from package.json
|
|
PACKAGE_NAME := $(shell awk '/"name":/ {gsub(/[",]/, "", $$2); print $$2}' package.json)
|
|
VERSION := $(shell T=$$(git describe 2>/dev/null) || T=1; echo $$T | tr '-' '.')
|
|
ifeq ($(TEST_OS),)
|
|
TEST_OS = centos-7
|
|
endif
|
|
export TEST_OS
|
|
VM_IMAGE=$(CURDIR)/test/images/$(TEST_OS)
|
|
# one example directory from `npm install` to check if that already ran
|
|
NODE_MODULES_TEST=node_modules/po2json
|
|
# one example file in dist/ from webpack to check if that already ran
|
|
WEBPACK_TEST=dist/index.html
|
|
|
|
all: $(WEBPACK_TEST)
|
|
|
|
#
|
|
# i18n
|
|
#
|
|
|
|
LINGUAS=$(basename $(notdir $(wildcard po/*.po)))
|
|
|
|
po/POTFILES.js.in:
|
|
mkdir -p $(dir $@)
|
|
find src/ -name '*.js' -o -name '*.jsx' -o -name '*.es6' > $@
|
|
|
|
po/$(PACKAGE_NAME).js.pot: po/POTFILES.js.in
|
|
xgettext --default-domain=cockpit --output=$@ --language=C --keyword= \
|
|
--keyword=_:1,1t --keyword=_:1c,2,1t --keyword=C_:1c,2 \
|
|
--keyword=N_ --keyword=NC_:1c,2 \
|
|
--keyword=gettext:1,1t --keyword=gettext:1c,2,2t \
|
|
--keyword=ngettext:1,2,3t --keyword=ngettext:1c,2,3,4t \
|
|
--keyword=gettextCatalog.getString:1,3c --keyword=gettextCatalog.getPlural:2,3,4c \
|
|
--from-code=UTF-8 --files-from=$^
|
|
|
|
po/POTFILES.html.in:
|
|
mkdir -p $(dir $@)
|
|
find src -name '*.html' > $@
|
|
|
|
po/$(PACKAGE_NAME).html.pot: po/POTFILES.html.in
|
|
po/html2po -f $^ -o $@
|
|
|
|
po/$(PACKAGE_NAME).manifest.pot:
|
|
po/manifest2po src/manifest.json -o $@
|
|
|
|
po/$(PACKAGE_NAME).pot: po/$(PACKAGE_NAME).html.pot po/$(PACKAGE_NAME).js.pot po/$(PACKAGE_NAME).manifest.pot
|
|
msgcat --sort-output --output-file=$@ $^
|
|
|
|
# Update translations against current PO template
|
|
update-po: po/$(PACKAGE_NAME).pot
|
|
for lang in $(LINGUAS); do \
|
|
msgmerge --output-file=po/$$lang.po po/$$lang.po $<; \
|
|
done
|
|
|
|
dist/po.%.js: po/%.po $(NODE_MODULES_TEST)
|
|
mkdir -p $(dir $@)
|
|
po/po2json -m po/po.empty.js -o $@.js.tmp $<
|
|
mv $@.js.tmp $@
|
|
|
|
#
|
|
# Build/Install/dist
|
|
#
|
|
|
|
%.spec: %.spec.in
|
|
sed -e 's/@VERSION@/$(VERSION)/g' $< > $@
|
|
|
|
$(WEBPACK_TEST): $(NODE_MODULES_TEST) $(shell find src/ -type f) package.json webpack.config.js $(patsubst %,dist/po.%.js,$(LINGUAS))
|
|
NODE_ENV=$(NODE_ENV) npm run build
|
|
|
|
watch:
|
|
NODE_ENV=$(NODE_ENV) npm run watch
|
|
|
|
clean:
|
|
rm -rf dist/
|
|
[ ! -e cockpit-$(PACKAGE_NAME).spec.in ] || rm -f cockpit-$(PACKAGE_NAME).spec
|
|
|
|
install: $(WEBPACK_TEST)
|
|
mkdir -p $(DESTDIR)/usr/share/cockpit/$(PACKAGE_NAME)
|
|
cp -r dist/* $(DESTDIR)/usr/share/cockpit/$(PACKAGE_NAME)
|
|
mkdir -p $(DESTDIR)/usr/share/metainfo/
|
|
cp org.cockpit-project.$(PACKAGE_NAME).metainfo.xml $(DESTDIR)/usr/share/metainfo/
|
|
|
|
# this requires a built source tree and avoids having to install anything system-wide
|
|
devel-install: $(WEBPACK_TEST)
|
|
mkdir -p ~/.local/share/cockpit
|
|
ln -s `pwd`/dist ~/.local/share/cockpit/$(PACKAGE_NAME)
|
|
|
|
# when building a distribution tarball, call webpack with a 'production' environment
|
|
# ship a stub node_modules/ so that `make` works without re-running `npm install`
|
|
dist-gzip: NODE_ENV=production
|
|
dist-gzip: all cockpit-$(PACKAGE_NAME).spec
|
|
mv node_modules node_modules.release
|
|
mkdir -p $(NODE_MODULES_TEST)
|
|
touch -r package.json $(NODE_MODULES_TEST)
|
|
touch dist/*
|
|
tar czf cockpit-$(PACKAGE_NAME)-$(VERSION).tar.gz --transform 's,^,cockpit-$(PACKAGE_NAME)/,' \
|
|
--exclude cockpit-$(PACKAGE_NAME).spec.in \
|
|
$$(git ls-files) cockpit-$(PACKAGE_NAME).spec dist/ node_modules
|
|
rm -rf node_modules
|
|
mv node_modules.release node_modules
|
|
|
|
srpm: dist-gzip cockpit-$(PACKAGE_NAME).spec
|
|
rpmbuild -bs \
|
|
--define "_sourcedir `pwd`" \
|
|
--define "_srcrpmdir `pwd`" \
|
|
cockpit-$(PACKAGE_NAME).spec
|
|
|
|
rpm: dist-gzip cockpit-$(PACKAGE_NAME).spec
|
|
mkdir -p "`pwd`/output"
|
|
mkdir -p "`pwd`/rpmbuild"
|
|
rpmbuild -bb \
|
|
--define "_sourcedir `pwd`" \
|
|
--define "_specdir `pwd`" \
|
|
--define "_builddir `pwd`/rpmbuild" \
|
|
--define "_srcrpmdir `pwd`" \
|
|
--define "_rpmdir `pwd`/output" \
|
|
--define "_buildrootdir `pwd`/build" \
|
|
cockpit-$(PACKAGE_NAME).spec
|
|
find `pwd`/output -name '*.rpm' -printf '%f\n' -exec mv {} . \;
|
|
rm -r "`pwd`/rpmbuild"
|
|
rm -r "`pwd`/output" "`pwd`/build"
|
|
|
|
# build a VM with locally built rpm installed
|
|
$(VM_IMAGE): rpm bots
|
|
rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2
|
|
bots/image-customize -v -i cockpit -i `pwd`/cockpit-$(PACKAGE_NAME)-*.noarch.rpm -s $(CURDIR)/test/vm.install $(TEST_OS)
|
|
|
|
# convenience target for the above
|
|
vm: $(VM_IMAGE)
|
|
echo $(VM_IMAGE)
|
|
|
|
# run the browser integration tests; skip check for SELinux denials
|
|
check: $(NODE_MODULES_TEST) $(VM_IMAGE) test/common
|
|
TEST_AUDIT_NO_SELINUX=1 test/check-application
|
|
|
|
# checkout Cockpit's bots/ directory for standard test VM images and API to launch them
|
|
# must be from cockpit's master, as only that has current and existing images; but testvm.py API is stable
|
|
bots:
|
|
git fetch --depth=1 https://github.com/cockpit-project/cockpit.git
|
|
git checkout --force FETCH_HEAD -- bots/
|
|
git reset bots
|
|
|
|
# checkout Cockpit's test API; this has no API stability guarantee, so check out a stable tag
|
|
# when you start a new project, use the latest relese, and update it from time to time
|
|
test/common:
|
|
git fetch --depth=1 https://github.com/cockpit-project/cockpit.git 181
|
|
git checkout --force FETCH_HEAD -- test/common
|
|
git reset test/common
|
|
|
|
$(NODE_MODULES_TEST): package.json
|
|
npm install
|
|
|
|
.PHONY: all clean install devel-install dist-gzip srpm rpm check vm update-po
|