summaryrefslogtreecommitdiff
blob: 89af27caf03d47d37666aaff618e98830a46e2ea (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI=2

inherit gnustep-base apache-module flag-o-matic subversion

ESVN_REPO_URI="http://svn.opengroupware.org/SOPE/trunk"

DESCRIPTION="An extensive set of frameworks which form a complete Web application server environment"
HOMEPAGE="http://sope.opengroupware.org/en/index.html"
LICENSE="LGPL-2"
SLOT="0"
KEYWORDS=""
IUSE="apache2 ldap libFoundation mysql postgres sqlite"
DEPEND="gnustep-base/gnustep-base
	dev-libs/libxml2
	dev-libs/openssl
	dev-util/monotone
	ldap? ( net-nds/openldap )
	mysql? ( virtual/mysql )
	postgres? ( virtual/postgresql-base )
	sqlite? ( >=dev-db/sqlite-3.0 )"
RDEPEND="${DEPEND}"

APACHE2_MOD_DEFINE="NGOBJWEB"
APACHE2_MOD_FILE="sope-appserver/mod_ngobjweb/mod_ngobjweb.so"
APACHE2_MOD_CONF="47_mod_ngobjweb"

S=${WORKDIR}/${PN}

want_apache

pkg_setup() {
	gnustep-base_pkg_setup
	local myLDFLAGS="$(gnustep-config --variable=LDFLAGS 2>/dev/null)"
	if [ -n "${myLDFLAGS}" ] && (echo "${myLDFLAGS}" | grep -q "\-\-a\(dd\|s\)\-needed" 2>/dev/null); then
		ewarn
		ewarn "You seem to have compiled GNUstep with custom LDFLAGS:"
		for foo in $(gnustep-config --variable=LDFLAGS); do
			ewarn "  "${foo}
		done
		ewarn
		ewarn "SOPE is very sensitive regarding custom LDFLAGS. Especially with:"
		ewarn "  --add-needed"
		ewarn "  --as-needed"
		ewarn
		ewarn "If your SOPE install does not work as expected then please re-emerge SOPE"
		ewarn "and your GNUstep (base and make) without any LDFLAGS before filing bugs."
		ewarn
	fi
	append-ldflags -Wl,--no-as-needed
	depend.apache_pkg_setup
}

src_unpack() {
	subversion_src_unpack

	# SOGo Monotone
	EMTN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/mtn-src"
	addread "${EMTN_STORE_DIR}"
	addwrite "${EMTN_STORE_DIR}"
	if [ ! -d "${EMTN_STORE_DIR}" ]; then
		mkdir -p "${EMTN_STORE_DIR}" || die "Can't mkdir ${EMTN_STORE_DIR}."
	fi
	cd "${EMTN_STORE_DIR}" || die "Can't chdir to ${EMTN_STORE_DIR}"

	if [ ! -f "db.mtn" ]; then
	mtn db init --db=./db.mtn || die "Failed to initialize Monotone database"
	fi

	# Pull Inverse's SOGo Monotone repository
	mtn --db=./db.mtn pull inverse.ca ca.inverse.sogo || die "Failed to pull Monotone repository"
	if [ ! -d "SOGo" ]; then
		mtn --db=./db.mtn checkout --branch ca.inverse.sogo SOGo || die "Failed to checkout SOGo branch"
	else
		cd SOGo
		mtn update
	fi
}

src_prepare() {
	# http://www.scalableogo.org/english/support/faq/article/how-do-i-compile-sogo.html
	epatch "${EMTN_STORE_DIR}"/SOGo/SOPE/sope-gsmake2.diff
	epatch "${EMTN_STORE_DIR}"/SOGo/SOPE/sope-patchset-r*.diff
	epatch "${FILESDIR}"/${PN}-r1660-use_system_root.patch
	epatch "${FILESDIR}"/${PN}-r1660-SOGo-fix.patch
	epatch "${FILESDIR}"/${PN}-r1660-SoOFS.patch			# Fixing stuff after SOGo patches
	epatch "${FILESDIR}"/${PN}-r1660-MySQL4Channel.m.patch		# Fixing issues with primary key and UTF8
	epatch "${FILESDIR}"/${PN}-r1660-NGLogSyslogAppender.m.patch	# Fixing compiler warnings
	epatch "${FILESDIR}"/${PN}-r1660-NGHttp+WO.m.patch		# Fixing compiler warnings
	epatch "${FILESDIR}"/${PN}-r1660-LDAP_deprecated.patch		# Fixing QA issues on 64 Bit

	if use apache2; then
		# Only add mod_ngobjweb if it is not already in SUBPROJECTS
		if ! ( sed -e :a -e '/\\$/N; s/\\\n//; ta' "${S}"/sope-appserver/GNUmakefile 2>/dev/null | grep -q "^[[:space:]]*SUBPROJECTS[\t \+=].*[[:space:]]mod_ngobjweb" ); then
			sed -i "/^SUBPROJECTS[\t \+=]/,/^[\t ]\{1,99\}[a-zA-Z]\{1,99\}[\t ]*$/{s/\([a-zA-Z]\)$/\1\t\\\\\n\tmod_ngobjweb/}" \
				"${S}"/sope-appserver/GNUmakefile
		fi
	else
		# Only remove mod_ngobjweb if it is found in SUBPROJECTS
		if ( sed -e :a -e '/\\$/N; s/\\\n//; ta' "${S}"/sope-appserver/GNUmakefile 2>/dev/null | grep -q "^[[:space:]]*SUBPROJECTS[\t \+=].*[[:space:]]mod_ngobjweb" ); then
			sed -i "s/^[\t ]*mod_ngobjweb[\t ]*$/\n/;/^[\t ]*mod_ngobjweb[\t ]*\\\\$/d" \
				"${S}"/sope-appserver/GNUmakefile
		fi
	fi

	gnustep-base_src_prepare
}

src_configure() {
	egnustep_env
	local myconf
	if use libFoundation; then
		myconf="${myconf} --frameworks=libFoundation"
		cd "${S}"/libFoundation
		./configure \
			--prefix=/usr \
			$(use_enable debug) \
			--with-gnustep || die "configure libFoundation failed"
	fi
	cd "${S}"
	./configure \
		$(use_enable debug) \
		$(use_enable debug strip) \
		--with-gnustep ${myconf} || die "configure failed"
}

src_compile() {
	egnustep_env
	local myconf
	if use libFoundation; then
		cd "${S}"/libFoundation
		CFLAGS="${CFLAGS} -Wno-import" egnustep_make
		cd "${S}"
	fi
	if use apache2; then
		myconf="${myconf} apxs=/usr/sbin/apxs"
		myconf="${myconf} apr=/usr/bin/apr-1-config"
	fi
	egnustep_make ${myconf}
}

src_test() {
	# SOPE tends to break horribly if gnustep-make is build with LDFLAGS such as
	# -Wl,--add-needed or -Wl,--as-needed. So we check here some vital binaries.
	# Check if SoCore, SoOFS is correctly build/linked
	local mySoCoreLDD=$(ldd -d "${S}"/sope-appserver/NGObjWeb/SoCore.sxp/SoCore 2>&1 | grep "lib\(NG\(ObjWeb\|Mime\|Streams\|Extensions\)\|EOControl\|DOM\|SaxObjC\|XmlRpc\)\.so\." | wc -l)
	local mySoOFSLDD=$(ldd -d "${S}"/sope-appserver/SoOFS/SoOFS.sxp/SoOFS 2>&1 | grep "lib\(SoOFS\|NG\(ObjWeb\|Mime\|Streams\|Extensions\)\|EOControl\|DOM\|SaxObjC\|XmlRpc\)\.so\." | wc -l)
	if [ -z "${mySoCoreLDD}" -o -z "${mySoOFSLDD}" -o "${mySoCoreLDD}" != "8" -o "${mySoOFSLDD}" != "9" ]; then
		ewarn
		ewarn "This SOPE installtion is not correctly build. Probably you are using"
		ewarn "LDFLAGS to build SOPE that are not correctly handled in SOPE or you"
		ewarn "have emerged gnustep-base/gnustep-make with LDFLAGS which are"
		ewarn "preventing SOPE to link the needed libraries into it's own binaries."
		ewarn "Please remerge gnustep-base/gnustep-make and/or SOPE with empty LDFLAGS."
		ewarn
		die "SOPE build is not complete (SoCore, SoOFS)"
	fi
	# Do the same for WEExtensions, WOExtensions, WEPrototype
	local myWEExtensionsLDD=$(ldd -d "${S}"/sope-appserver/WEExtensions/WEExtensions.wox/WEExtensions 2>&1 | grep "lib\(WEExtensions\|NG\(ObjWeb\|Mime\|Streams\|Extensions\)\|EOControl\|DOM\|SaxObjC\|XmlRpc\)\.so\." | wc -l)
	local myWOExtensionsLDD=$(ldd -d "${S}"/sope-appserver/WOExtensions/WOExtensions.wox/WOExtensions 2>&1 | grep "lib\(W[EO]Extensions\|NG\(ObjWeb\|Mime\|Streams\|Extensions\)\|EOControl\|DOM\|SaxObjC\|XmlRpc\)\.so\." | wc -l)
	local myWEPrototypeLDD=$(ldd -d "${S}"/sope-appserver/WEPrototype/WEPrototype.wox/WEPrototype 2>&1 | grep "lib\(WEPrototype\|NG\(ObjWeb\|Mime\|Streams\|Extensions\)\|EOControl\|DOM\|SaxObjC\|XmlRpc\)\.so\." | wc -l)
	if [ -z "${myWEExtensionsLDD}" -o -z "${myWOExtensionsLDD}" -o -z "${myWEPrototypeLDD}" -o "${myWEExtensionsLDD}" != "9" -o "${myWOExtensionsLDD}" != "10" -o "${myWEPrototypeLDD}" != "9" ]; then
		ewarn
		ewarn "This SOPE installtion is not correctly build. Probably you are using"
		ewarn "LDFLAGS to build SOPE that are not correctly handled in SOPE or you"
		ewarn "have emerged gnustep-base/gnustep-make with LDFLAGS which are"
		ewarn "preventing SOPE to link the needed libraries into it's own binaries."
		ewarn "Please remerge gnustep-base/gnustep-make and/or SOPE with empty LDFLAGS."
		ewarn
		die "SOPE build is not complete (WEExtensions, WOExtensions, WEPrototype)"
	fi
}

src_install() {
	newenvd "${FILESDIR}"/sope.envd 99sope \
		|| die "Failed installing env.d script"
	gnustep-base_src_install
	use apache2 && apache-module_src_install
}

pkg_postinst() {
	gnustep-base_pkg_postinst
	use apache2 && apache-module_pkg_postinst
}