PACKAGE_NAME := $(shell python3 -c "import json; print(json.load(open('package.json'))['name'])") VERSION := $(shell git describe 2>/dev/null || echo 1) 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) $(wildcard src/*) package.json webpack.config.js $(patsubst %,dist/po.%.js,$(LINGUAS)) NODE_ENV=$(NODE_ENV) npm run build 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 dist-gzip: NODE_ENV=production dist-gzip: $(NODE_MODULES_TEST) all cockpit-$(PACKAGE_NAME).spec 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/ 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 bots/image-customize -v -r 'rpm -e cockpit-$(PACKAGE_NAME) || true' -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 172 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