#!/usr/bin/make -f include /usr/share/dpkg/pkg-info.mk include /usr/share/javahelper/java-vars.mk export LEIN_HOME=$(CURDIR)/.lein export LEIN_OFFLINE=true # ruby gems to include in puppetserver's jruby environment JRUBY_GEMS := $(shell cd resources/ext/build-scripts && cat jruby-gem-list.txt mri-gem-list-no-dependencies.txt | cut -d' ' -f1) # fake home directory for the testsuite FAKE_HOME := $(shell mktemp -d) CLASSPATH=/usr/share/java/clojure.jar:/usr/share/java/slingshot.jar:/usr/share/java/snakeyaml.jar:/usr/share/java/commons-lang.jar:/usr/share/java/commons-io.jar:/usr/share/java/clj-time.jar:/usr/share/java/clj-semver.jar:/usr/share/java/schema.jar:/usr/share/java/fs.jar:/usr/share/java/liberator.jar:/usr/share/java/commons-exec.jar:/usr/share/java/metrics-core.jar:/usr/share/java/jruby-utils.jar:/usr/share/java/clj-shell-utils.jar:/usr/share/java/trapperkeeper.jar:/usr/share/java/trapperkeeper-status.jar:/usr/share/java/trapperkeeper-scheduler.jar:/usr/share/java/trapperkeeper-webserver-jetty9.jar:/usr/share/java/trapperkeeper-authorization.jar:/usr/share/java/trapperkeeper-comidi-metrics.jar:/usr/share/java/trapperkeeper-metrics.jar:/usr/share/java/trapperkeeper-filesystem-watcher.jar:/usr/share/java/kitchensink.jar:/usr/share/java/ssl-utils.jar:/usr/share/java/ring-middleware.jar:/usr/share/java/dujour-version-check.jar:/usr/share/java/http-client.jar:/usr/share/java/comidi.jar:/usr/share/java/i18n.jar:/usr/share/java/semver.jar:/usr/share/java/libtrapperkeeper-comidi-metrics-clojure.jar %: dh $@ --with javahelper override_dh_auto_configure: cd debian && ln -sf /usr/share/maven-repo . override_dh_auto_build: # main build lein i18n make lein jar execute_after_dh_auto_build: # create symlink tree for vendored-jruby-gems for gem in $(JRUBY_GEMS); do \ PUPPETSERVER_GEM_HOME=target/vendored-jruby-gems ./debian/puppetserver_gem_helper.sh $$gem; \ done # prepare main binary mkdir -p target/bin sed -e 's/%DEB_VERSION_UPSTREAM%/$(DEB_VERSION_UPSTREAM)/' < debian/bin/puppetserver.in > target/bin/puppetserver # prepare cli subcommands defaults script # inject the jar classpath into cli-defaults.sh mkdir -p target/cli sed -e "s#%CLASSPATH%#$(CLASSPATH)#" < debian/bin/cli-defaults.sh.in > target/cli/cli-defaults.sh # prepare cli subcommands mkdir -p target/cli/apps cp debian/bin/cli/* target/cli/apps cp resources/ext/cli/* target/cli/apps find target/cli -name \*.erb | xargs sed -i \ -e 's/<%= EZBake::Config\[:uberjar_name\] %>/puppetserver.jar/' \ -e '1s|^#!/opt/puppetlabs/puppet/bin/ruby|#!/usr/bin/ruby|' \ -e '1s|^#!/usr/bin/env bash|#!/bin/bash|' rename --filename -e 's/\.erb$$//' target/cli/**/* chmod +x target/cli/**/* # dropsonde unsupported @rm -f target/cli/apps/dropsonde override_dh_auto_test: ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) # make facter and puppet gems available to the testsuite # upstream uses git submodules here, but we can use Debian sources instead for component in facter puppet resource_api; do \ mkdir -p ruby/$${component}/lib; \ if [ "$$component" = "puppet" ]; then package=puppet-agent ; \ elif [ "$$component" = "resource_api" ]; then package=ruby-puppet-resource-api ; \ else package=$$component; fi; \ dpkg -L $$package | grep -Po "^/usr/lib/ruby/vendor_ruby/\K.*" | \ while read file; do \ if [ -d /usr/lib/ruby/vendor_ruby/$$file ]; then \ mkdir -p ruby/$${component}/lib/$$file; \ else \ ln -sf /usr/lib/ruby/vendor_ruby/$$file ruby/$${component}/lib/$$file; \ fi; \ done; \ done # symlink vendored gems to the test suite's custom gem-home # (see test/unit/puppetlabs/services/jruby/jruby_puppet_testutils.clj) mkdir -p $(FAKE_HOME)/.puppetlabs/opt/server/data/puppetserver ln -s $(CURDIR)/target/vendored-jruby-gems $(FAKE_HOME)/.puppetlabs/opt/server/data/puppetserver/jruby-gems # regenerate tls certificates used in https tests cd dev-resources/puppetlabs && ( \ for testdir in puppetserver/ruby/http_client_test puppetserver/certificate_authority_test/master/conf puppetserver/certificate_authority_test/update_crls services/ca/certificate_authority_core_test/update_crls services/certificate_authority/certificate_authority_int_test/ca_true_test/master/conf services/certificate_authority/certificate_authority_int_test/infracrl_test/master/conf; do \ cp -a $$testdir $${testdir}.clean; \ done ) ruby $(CURDIR)/dev-resources/regen_certs.rb # run unit and integration tests _JAVA_OPTIONS=-Duser.home=$(FAKE_HOME) lein test endif execute_before_dh_link: # create unversioned jar symlinks dh_link usr/share/puppetserver/puppetserver-$(DEB_VERSION_UPSTREAM).jar usr/share/puppetserver/puppetserver.jar # create private vendor_ruby directory for puppetserver's jruby mkdir -p debian/puppetserver/usr/lib/puppetserver/ruby/vendor_ruby for component in hiera facter puppet; do \ ln -s /usr/lib/ruby/vendor_ruby/$$component debian/puppetserver/usr/lib/puppetserver/ruby/vendor_ruby/$$component; \ ln -s /usr/lib/ruby/vendor_ruby/$${component}*.rb debian/puppetserver/usr/lib/puppetserver/ruby/vendor_ruby; \ done override_dh_installsystemd: dh_installsystemd --no-enable override_dh_fixperms: # cli scripts need to have execute permission dh_fixperms -Xusr/share/puppetserver/cli override_jh_manifest: jh_manifest -c "$(subst :, ,$(CLASSPATH))" -m puppetlabs.trapperkeeper.main usr/share/puppetserver/puppetserver-$(DEB_VERSION_UPSTREAM).jar override_dh_gencontrol: # tighten the binary Depends: # due to the ruby gem symlinks, see bug #1029299 for gem in $(JRUBY_GEMS); do \ package=$$(ruby -e "require 'gem2deb/package_name_mapping'; @mapping = Gem2Deb::PackageNameMapping.new(false); puts @mapping['$${gem}']") \ ver=$$(dpkg-query -f '$${source:Upstream-Version}' -W $${package}); \ ruby_depends="$${ruby_depends}, $${package} (<< $${ver}.), $${package} (>= $${ver}~~)"; \ done; \ dh_gencontrol -- -VrubyDepends="$${ruby_depends}" override_dh_installman: cd debian/manpages; \ for man in *.rst; do \ rst2man --exit-status=2 --report=1 $${man} "$${man%%.*}".1; \ done dh_installman debian/manpages/*.1 override_dh_clean: rm -f debian/maven-repo debian/manpages/*.1 rm -Rf .lein .lein-failures target rm -rf resources/puppetlabs resources/locales.clj rm -rf ruby/facter/* ruby/puppet/* ruby/resource_api/* # cleanup regenerated certificates -cd dev-resources/puppetlabs && ( \ for testdir in puppetserver/ruby/http_client_test puppetserver/certificate_authority_test/master/conf puppetserver/certificate_authority_test/update_crls services/ca/certificate_authority_core_test/update_crls services/certificate_authority/certificate_authority_int_test/ca_true_test/master/conf services/certificate_authority/certificate_authority_int_test/infracrl_test/master/conf; do \ test -d $${testdir}.clean && ( rm -rf $$testdir; mv $${testdir}.clean $$testdir ); \ done ) dh_clean -Xacceptance