#!/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 NAME=puppetserver # 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) CLASSPATH=/usr/share/java/clojure.jar:/usr/share/java/slingshot.jar:/usr/share/java/snakeyaml-1.x.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 mkdir -p target/vendored-jruby-gems/gems mkdir -p target/vendored-jruby-gems/specifications $(foreach gem_name,$(JRUBY_GEMS), \ set -e; \ gem=$(shell ls -1 /usr/share/rubygems-integration/all/specifications | grep -Po "^$(gem_name)-[0-9\.]+(?=\.gemspec)"); \ ln -s /usr/share/rubygems-integration/all/specifications/$${gem}.gemspec target/vendored-jruby-gems/specifications; \ if [ -e /usr/share/rubygems-integration/all/gems/$${gem} ]; then \ ln -s /usr/share/rubygems-integration/all/gems/$${gem} target/vendored-jruby-gems/gems; \ else \ mkdir -p target/vendored-jruby-gems/gems/$${gem}/lib; \ cp -as /usr/lib/ruby/vendor_ruby/$(gem_name)*.rb target/vendored-jruby-gems/gems/$${gem}/lib; \ ln -s /usr/lib/ruby/vendor_ruby/$(gem_name) target/vendored-jruby-gems/gems/$${gem}/lib; \ fi; \ ) # 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 # testsuite looks for gems in this directory cd target && ln -sf vendored-jruby-gems jruby-gem-home # run unit and integration tests PUPPETSERVER_HEAP_SIZE=6G lein test endif execute_before_dh_install: # cleanup vendored jruby gems @rm -rf target/vendored-jruby-gems/cache/* @rm -rf target/vendored-jruby-gems/gems/*/ext @rm -rf target/vendored-jruby-gems/gems/*/test @rm -rf target/vendored-jruby-gems/gems/*/samples @rm -rf target/vendored-jruby-gems/gems/*/spec 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 echo "$(JRUBY_GEMS)" 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: mkdir debian/tmp/man for manpage_path in debian/manpages/*.rst; do \ manpage=$$(basename $$manpage_path); \ rst2man --exit-status=2 --report=1 $${manpage_path} "debian/tmp/man/$${manpage%%.*}".1; \ done dh_installman debian/tmp/man/*.1 override_dh_clean: rm -f debian/maven-repo rm -Rf target ruby dh_clean -Xacceptance