summaryrefslogtreecommitdiff
blob: 62621a5f00d09e9c4c59c592d1552bb018560091 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=6
USE_RUBY="ruby24 ruby25 ruby26 ruby27"

inherit apache-module flag-o-matic multilib ruby-ng toolchain-funcs

DESCRIPTION="Passenger makes deployment of Ruby on Rails applications a breeze"
HOMEPAGE="https://www.phusionpassenger.com/"
SRC_URI="https://s3.amazonaws.com/phusion-passenger/releases/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="apache2 debug"

ruby_add_bdepend "dev-ruby/rake"

ruby_add_rdepend "
	>=dev-ruby/rack-1.0.0:*
	>=dev-ruby/rake-0.8.1"

# libev is bundled but with adapations that do not seem to be accepted
# upstream, so we must use the bundled version :-(
CDEPEND="
	>=dev-libs/libuv-1.8.0
	net-misc/curl[ssl]
	apache2? ( www-servers/apache[apache2_modules_unixd(+)] )"

RDEPEND="${RDEPEND} ${CDEPEND}"
DEPEND="${DEPEND} ${CDEPEND}"

APACHE2_MOD_CONF="30_mod_${PN}-5.0.0 30_mod_${PN}"
APACHE2_MOD_DEFINE="PASSENGER"

want_apache2

pkg_setup() {
	use debug && append-flags -DPASSENGER_DEBUG
	depend.apache_pkg_setup
}

all_ruby_prepare() {
	eapply "${FILESDIR}"/${PN}-5.1.11-gentoo.patch
	eapply "${FILESDIR}"/${PN}-5.1.1-isnan.patch

	# Change these with sed instead of a patch so that we can easily use
	# the toolchain-funcs methods.
	sed -i -e "/^CC/ s/=.*$/= '$(tc-getCC)'/" \
		-e "/^CXX\s/ s/=.*$/= '$(tc-getCXX)'/" \
		-e 's/PlatformInfo.debugging_cflags//' build/basics.rb || die

	# Avoid fixed debugging CFLAGs.
	sed -e '/debugging_cflags/areturn ""' -i src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb || die

	# Use sed here so that we can dynamically set the documentation directory.
	sed -i -e "s:/usr/share/doc/passenger:/usr/share/doc/${P}:" \
		-e "s:/usr/lib/phusion-passenger/agents:/usr/libexec/phusion-passenger/agents:" \
		src/ruby_supportlib/phusion_passenger.rb || die
	sed -i -e "s:/usr/lib/phusion-passenger/agents:/usr/libexec/phusion-passenger/agents:" src/cxx_supportlib/ResourceLocator.h || die

	# Don't install a tool that won't work in our setup.
	sed -i -e '/passenger-install-apache2-module/d' src/ruby_supportlib/phusion_passenger/packaging.rb || die
	rm -f bin/passenger-install-apache2-module || die "Unable to remove unneeded install script."

	# Make sure we use the system-provided version where possible
	rm -rf src/cxx_supportlib/vendor-copy/libuv || die "Unable to remove vendored code."

	# Avoid building documentation to avoid a dependency on mizuho.
	#sed -i -e 's/, :doc//' build/packaging.rb || die
	touch doc/*.html || die

	# Fix hard-coded use of AR
	sed -i -e "s/ar cru/"$(tc-getAR)" cru/" build/support/cplusplus.rb || die

	# Make sure apache support is not attempted with -apache2
	if ! use apache2 ; then
		sed -i -e '/fakeroot/ s/:apache2, //' build/packaging.rb || die
	fi
}

all_ruby_compile() {
	if use apache2 ; then
		V=1 EXTRA_LDFLAGS="${LDFLAGS}" \
		 APXS2="${APXS}" \
		 HTTPD="${APACHE_BIN}" \
		 FS_LIBDIR='/usr/'$(get_libdir) \
		 USE_VENDORED_LIBUV="no" LIBUV_LIBS="-luv" \
		 RANLIB=$(tc-getRANLIB) \
		 ruby -S rake apache2 || die "rake failed"
	fi
}

each_ruby_compile() {
	append-flags -fno-strict-aliasing

	V=1 EXTRA_LDFLAGS="${LDFLAGS}" \
	APXS2="${APXS}" \
	HTTPD="${APACHE_BIN}" \
	FS_LIBDIR='/usr/'$(get_libdir) \
	USE_VENDORED_LIBUV="no" LIBUV_LIBS="-luv" \
	RANLIB=$(tc-getRANLIB) \
	${RUBY} -S rake native_support || die "rake failed"
}

all_ruby_install() {
	if use apache2 ; then
		APACHE2_MOD_FILE="${S}/buildout/apache2/mod_${PN}.so"
		apache-module_src_install

		# Patch in the correct libdir
		sed -i -e 's:/usr/lib/:/usr/'$(get_libdir)'/:' "${D}${APACHE_MODULES_CONFDIR}/30_mod_${PN}.conf" || die
	fi

	dodoc CHANGELOG README.md
}

each_ruby_install() {
	DISTDIR="${D}" \
	RUBYLIBDIR="$(ruby_rbconfig_value vendordir)" \
	RUBYARCHDIR="$(ruby_rbconfig_value archdir)" \
	APXS2="${APXS}" \
	HTTPD="${APACHE_BIN}" \
	FS_LIBDIR='/usr/'$(get_libdir) \
	EXTRA_LDFLAGS="${LDFLAGS}" \
	USE_VENDORED_LIBUV="no" LIBUV_LIBS="-luv" \
	RANLIB=$(tc-getRANLIB) \
	${RUBY} -S rake fakeroot || die "rake failed"
}