On Fri, 2007-08-24 at 09:03 +0100, Peter Saffrey wrote:
> > Or, you can build the latest version yourself if you want to go that
> > route.  It's not trivial but it's not too bad.

> I've had a quick go at this. Evo 2.12 is not available from the main
> downloads page:
> 
> http://www.gnome.org/projects/evolution/download.shtml

As others have mentioned, until the code is released you won't be able
to download prebuilt versions.  That's why I said above you need to
build it.

> So I used svn to get the latest version. This required a little guess
> work since the svn instructions were generic to Gnome and I only wanted
> Evolution. 

Reid has given you a pointer to specific Evo instructions.

These could have also been found via Google very quickly, with a search
like "build evolution from svn", where the page Reid references will be
the first thing that shows up.

> The compilation instructions were generic GNU instructions and said
> there would be a configure script, which there wasn't. I tried make but
> it said no targets. I tried running "./autogen.sh" and it said "You need
> to install gnome-common from the GNOME CVS" - this is probably because
> I'm trying to build in a user directory so I don't overwrite the old
> version.

Gnome is a very large suite of applications, and Evolution is one part
of that, and uses a large number of base Gnome libraries.  This means
that to compile Evo you have to have the developer packages for all the
Gnome libraries that Evo needs.  Be default on modern distributions
these are not included, since they're not usually needed and they take
up a lot of disk space.

However, they ARE packaged and they can easily be installed (once you
know what to do).

> I don't want to spend hours fighting with it, so I guess I'll
> just wait for the package version of 2.12 to come out in October.

Based on a info from the web and a lot of help from people like Reid,
I've created a makefile that should make this pretty simple; this is how
I do it:

        sudo mkdir /opt/evo-src /opt/evo
        sudo chown $USER /opt/evo-src /opt/evo
        cd /opt/evo-src
        cp ~/Makefile .
        make

It will do everything for you, including checking out the SVN versions
of libsoup, gtkhtml, evolution-*, then configuring, building, and
installing, all in the right order.

The nice thing about using make is that next week (or tomorrow) you can
run "make" again, and it will check if there have been any updates to
any of the SVN code and if so, update it, redo the configuration,
install, etc. for the parts that are changed.

It works quite well, IME.  My only caveat is that the check to see
whether you have all the packages installed you need (the check-prereqs
target) is (a) specific to Ubuntu 7.04, and (b) might not list
everything you actually need, since I (stupidly) didn't jot down all the
packages I needed to install when I did it first.  If you have changes
or updates, please let me know!

You can also see if there are updates without doing anything else with:

        make check-updates

And finally, you can view the ChangeLog updates since your last build
(more info than just knowing which files changed) with:

        make check-changelog

> I must say, it's these kind of problems that made it a relief to move
> from Linux to Windows a year ago. A working PIM seems like a pretty
> fundamental part of a modern OS, but Evolution is the only choice under
> Linux and it's flaky and unreliable. Even if you've got plenty of
> experience building software, missing or inadequate documentation means
> it's always a struggle.
> 
> I guess it's too much to expect that Linux software will eventually have
> the "it just works" quality, but I keep hoping.

I understand your frustration but really, these kinds of comments aren't
helpful.  I agree that Evolution's support of Exchange has had a long
and rocky road; in fact until last summer I was using a complex setup
where I would use fetchmail to download all messages from my Exchange
server via IMAP, EXCEPT meeting requests, then I would use Evo's
Exchange support ONLY to handle my shared calendar.

Even given a few annoying things that still exist in the current SVN
codebase (some of which I still hope will be fixed before 2.12 is
released), 2.12 is much, much better than any previous version.  I can't
address your "super slow" issue directly, except to say that I
definitely try to avoid having too many messages in any given folder; my
largest folder is "Deleted Items" with 2300 messages; my largest
"regular" folder has <500 messages.  I don't know if that's an issue for
you.

I do hope you try my makefile (or the instructions Reid pointed you to)
and see if your problem is fixed or not.  If not, it would be great if
you could help the Evo developers find and fix your issues.

Let me just make a few points to your general statement though:

      * Almost everything in Linux really DOES "just work" these days,
        maybe not quite as easily as a Mac, with it's restricted
        hardware platform support, but certainly at least as well as
        Windows.

      * The places where things don't "just work" are almost exclusively
        due to interacting with proprietary environments; there's only
        so much people can do in the face of unpublished 3rd party
        interfaces.  Evolution is a fine mail client for standard
        protocols like POP, IMAP, etc.  It doesn't work that well for
        proprietary, unpublished interfaces like Exchange.  It sucks but
        where does the blame really lie here?  I realize that assigning
        blame doesn't make broken things work better, and I sympathize
        with that point of view, but at the same time you have to vent
        your frustrations in the right direction.

      * Building packages from source is NOT intended to be trivial and
        plug-n-play, unless you go to a distro like Gentoo (and they
        have their own problems).  That's why we have distributions.
        You may be frustrated that it was not simple but consider this:
        when was the last time Microsoft offered to let you build their
        current codebase so you could work around a bug in their
        software?

Anyway, good luck and let me know if you have problems with my makefile.

-- 
-----------------------------------------------------------------------------
 Paul D. Smith <[EMAIL PROTECTED]>                http://make.paulandlesley.org
 "Please remain calm--I may be mad, but I am a professional."--Mad Scientist

#!/usr/bin/make -f
#
# Build (debuggable) Evo from SVN HEAD
#
# Author: Paul Smith <[EMAIL PROTECTED]>
#
# Also you can look here:
#   http://www.go-evolution.org/Compiling_Evolution_from_SVN
#
# --------------- User Customization ---------------
# Feel free to change these if you like

# Where to install Evo.  DO NOT use /usr here for any system controlled by a
# package manager (rpm, dpkg)
prefix :=	/opt/evo

# Comment this out if you don't want to use ccache
CCACHE :=	ccache


# --------------- Configuration Setup ---------------
# You shouldn't need to touch anything below here!

SVNURL :=	http://svn.gnome.org/svn

PACKAGES :=	libsoup gtkhtml evolution-data-server \
		evolution evolution-exchange evolution-webcal

PREREQS :=	gtk-doc-tools subversion libldap2-dev libnss-dev libnspr-dev \
		flex bison build-essential evolution-dev $(CCACHE)
# gnome-core-devel libgail-gnome-dev

CONFIG_VARS =	CC='$(CCACHE) gcc' CFLAGS=-g
CONFIG_OPTS =	--prefix='$(prefix)'
BUILD_VARS =
BUILD_OPTS =
INSTALL_VARS =
INSTALL_OPTS =

CCACHE_DIR :=	$(CURDIR)/ccache
PKG_CONFIG_PATH := $(prefix)/lib/pkgconfig
export CCACHE_DIR PKG_CONFIG_PATH

# ----- Per-package configuration and build options

libsoup_CONFIG_VARS =
libsoup_CONFIG_OPTS =
libsoup_BUILD_VARS =
libsoup_BUILD_OPTS =
libsoup_INSTALL_VARS =
libsoup_INSTALL_OPTS =

gtkhtml_CONFIG_VARS =
gtkhtml_CONFIG_OPTS =
gtkhtml_BUILD_VARS =
gtkhtml_BUILD_OPTS =
gtkhtml_INSTALL_VARS =
gtkhtml_INSTALL_OPTS =

evolution-data-server_CONFIG_VARS =
evolution-data-server_CONFIG_OPTS =	--with-openldap=yes \
				        --enable-gnome-keyring=yes \
					--with-e2k-debug
evolution-data-server_BUILD_VARS =
evolution-data-server_BUILD_OPTS =
evolution-data-server_INSTALL_VARS =
evolution-data-server_INSTALL_OPTS =

evolution_CONFIG_VARS =
evolution_CONFIG_OPTS =	--with-openldap=yes --enable-nntp=yes \
			--enable-ipv6=yes --enable-test-component=yes \
			--enable-nss=yes --enable-smime=yes \
			--enable-plugins=all --enable-cairo-calendar=yes \
			--enable-exchange=yes --with-e2k-debug \
			--enable-imap4=yes
evolution_BUILD_VARS =
# We have to run with errors off here because we don't have permissions
# to install into /var/lib/scrollkeeper/scrollkeeper_docs
evolution_BUILD_OPTS =	-k
evolution_INSTALL_VARS =
# We have to ignore errors here because of a bug:
# make[4]: Entering directory `/opt/tmp/evo-src/evolution/shell'
# /bin/bash ../mkinstalldirs /opt/tmp/evo/bin
# mkdir -p -- /opt/tmp/evo/bin
# /bin/bash ../libtool --mode=install /usr/bin/install -c evolution /opt/tmp/evo/bin/evolution
# libtool: install: warning: `libeshell.la' has not been installed in `/opt/tmp/evo/lib/evolution/2.12'
# /usr/bin/install -c .libs/evolution /opt/tmp/evo/bin/evolution
# test -z "/opt/tmp/evo/lib/evolution/2.12/components" || mkdir -p -- "/opt/tmp/evo/lib/evolution/2.12/components"
#  /bin/bash ../libtool --mode=install /usr/bin/install -c  'libevolution-test.la' '/opt/tmp/evo/lib/evolution/2.12/components/libevolution-test.la'
# libtool: install: warning: relinking `libevolution-test.la'
# (cd /opt/tmp/evo-src/evolution/shell; /bin/bash ../libtool ... )
# ccache gcc -shared  .libs/Evolution-common.o .libs/Evolution-skels.o .libs/Evolution-stubs.o .libs/evolution-test-component.o  -Wl,--rpath -Wl,/opt/tmp/evo/lib/evolution/2.12 -L/opt/tmp/evo/lib/evolution/2.12 -leshell -L/usr/lib -lgnomeui-2 -lSM -lICE -lgnomevfs-2 -lgnome-keyring -lgconf-2 -lbonoboui-2 -lgnomecanvas-2 -lgnome-2 -lpopt -lart_lgpl_2 -lpangoft2-1.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXfixes -lpango-1.0 -lcairo -lX11 -lbonobo-2 -lbonobo-activation -lgmodule-2.0 -ldl -lORBit-2 -lgthread-2.0 -lrt -lgobject-2.0 -lglib-2.0  -Wl,--export-dynamic -pthread -Wl,-soname -Wl,libevolution-test.so -o .libs/libevolution-test.so
# /usr/bin/ld: cannot find -leshell
# collect2: ld returned 1 exit status
# libtool: install: error: relink `libevolution-test.la' with the above command before installing it
# make[4]: *** [install-componentLTLIBRARIES] Error 1
# make[4]: Leaving directory `/opt/tmp/evo-src/evolution/shell'
# make[3]: *** [install-am] Error 2
# make[3]: Leaving directory `/opt/tmp/evo-src/evolution/shell'
# make[2]: *** [install] Error 2
# make[2]: Leaving directory `/opt/tmp/evo-src/evolution/shell'
# make[1]: *** [install-recursive] Error 1
# make[1]: Leaving directory `/opt/tmp/evo-src/evolution'
evolution_INSTALL_OPTS = ; true

evolution-exchange_CONFIG_VARS =
evolution-exchange_CONFIG_OPTS = --with-openldap=yes --with-e2k-debug
evolution-exchange_BUILD_VARS =
evolution-exchange_BUILD_OPTS =
evolution-exchange_INSTALL_VARS =
evolution-exchange_INSTALL_OPTS =

evolution-webcal_CONFIG_VARS =
evolution-webcal_CONFIG_OPTS =
evolution-webcal_BUILD_VARS =
evolution-webcal_BUILD_OPTS =
evolution-webcal_INSTALL_VARS =
evolution-webcal_INSTALL_OPTS =

# -----

STAMPDIR :=	.stamp

# Commands

CP :=		cp -p
CPDIR :=	cp -a
ECHO :=		echo
LINK :=		ln -s
MKDIR :=	mkdir -p
RM :=		rm -f
RMDIR :=	rm -rf
SUDO :=		sudo
SVN :=		svn
TOUCH :=	touch
UNPACK :=	tar xjf
WGET :=		wget

MKSTAMP =	$(TOUCH) '$(CURDIR)/$@'

# Make sure we look in the new location for apps
PATH :=		$(prefix)/bin:$(PATH)
export PATH

$(shell $(MKDIR) $(CURDIR)/$(STAMPDIR))

STAMPTYPES :=	update patch config build install

# ----- all target

# All means everything is installed
.PHONY: all all-install
all: all-install $(STAMPDIR)/setup

all-install: $(patsubst %,$(STAMPDIR)/%.install,$(PACKAGES))

# Make sure none of the targets are considered intermediate
.PRECIOUS: $(foreach X,$(STAMPTYPES),$(STAMPDIR)/%.$X) \
	   $(addsuffix /.svn,$(PACKAGES))

# ----- final setup operations

$(STAMPDIR)/setup: $(STAMPDIR)/evolution-data-server.install
	@echo "Setting privileges (requires $(SUDO)!)..." \
	   && $(SUDO) chgrp mail $(prefix)/libexec/camel-lock-helper-* \
	   && $(SUDO) chmod g+s $(prefix)/libexec/camel-lock-helper-*
	@$(MKSTAMP)

# ----- install SVN workspaces

$(STAMPDIR)/%.install: $(STAMPDIR)/%.build
	cd '$*' \
	 && $(INSTALL_VARS) $($*_INSTALL_VARS) \
		$(MAKE) install $(INSTALL_OPTS) $($*_INSTALL_OPTS)
	@$(MKSTAMP)

# ----- build SVN workspaces

$(STAMPDIR)/%.build: $(STAMPDIR)/%.config
	cd '$*' \
	 && $(BUILD_VARS) $($*_BUILD_VARS) \
		$(MAKE) $(BUILD_OPTS) $($*_BUILD_OPTS)
	@$(MKSTAMP)

# ----- configure SVN workspaces

$(STAMPDIR)/%.config: $(STAMPDIR)/%.patch
	cd '$*' \
	 && $(CONFIG_VARS) $($*_CONFIG_VARS) \
		./autogen.sh $(CONFIG_OPTS) $($*_CONFIG_OPTS)
	@$(MKSTAMP)

# ----- patch SVN workspaces

$(STAMPDIR)/%.patch: $(STAMPDIR)/%.update
	@$(MKSTAMP)

# ----- update SVN workspaces

getsvnrev = `$(SVN) info $(1) | sed -n 's/^Revision: \([0-9][0-9]*\).*/\1/p'`

$(STAMPDIR)/%.update: %/.svn FORCE | check-prereqs
	cd '$*' \
	   && head="$(call getsvnrev,-r HEAD)" \
	   && if [ "$(call getsvnrev,)" = "$$head" ]; then \
		$(ECHO) "No SVN update needed for $*."; \
	      else \
		$(SVN) update; \
		$(MKSTAMP); \
	      fi
FORCE:

%/.svn:
	$(SVN) checkout '$(SVNURL)/$*/trunk' '$*'
	@$(TOUCH) '$(CURDIR)/$(STAMPDIR)/$*.update'

.PHONY: check-update
check-update:
	@for pkg in $(PACKAGES); do \
	   ( \
	     cd "$$pkg"; \
	     head="$(call getsvnrev,-r HEAD)"; \
	     if [ "$(call getsvnrev,)" = "$$head" ]; then \
		$(ECHO) "No SVN update needed for $$pkg."; \
	     else \
		$(ECHO) "$$pkg has SVN updates available:"; \
		$(SVN) status -q -u; \
	     fi; \
	   ); \
	 done

.PHONY: check-changelog
check-changelog:
	@for pkg in $(PACKAGES); do \
	   ( \
	     cd "$$pkg"; \
	     head="$(call getsvnrev,-r HEAD)"; \
	     if [ "$(call getsvnrev,)" = "$$head" ]; then \
		$(ECHO) "No SVN update needed for $$pkg."; \
	     else \
		$(ECHO) "$$pkg has SVN updates available:"; \
		log="/tmp/svnstatus.log.$$$$"; \
		$(SVN) status -q -u 2>&1 | tee "$$log"; \
		clogs=`while read stat rev fn; do \
			 case $$fn in \
			   ChangeLog|*/ChangeLog) echo "$$fn" ;; \
			 esac; \
		       done < "$$log" | sort`; \
		[ -n "$$clogs" ] && $(SVN) diff -r "BASE:$$head" $$clogs; \
		$(RM) "$$log"; \
	     fi; \
	   ); \
	 done

# ----- create SVN workspaces

# ----- check packages

# This is for DPKG systsems.  Someone else will have the write the
# equivalent RPM code.
.PHONY: check-prereqs
check-prereqs:
	@installed=`dpkg -l $(PREREQS) | grep '^ii ' | wc -l`; \
	    if [ "$$installed" != "$(words $(PREREQS))" ]; then \
		$(ECHO); \
		$(ECHO) "Not all prerequisites are installed!"; \
		$(ECHO) "Use 'aptitude install ...' on the above missing packages."; \
		$(ECHO); \
		exit 1; \
	    fi

# ----- cleanup

.PHONY: clean
clean:
	$(RMDIR) $(STAMPDIR) $(BLDROOT)/* $(PREFIX)

# ----- ordering

# These ensure that packages are built in the correct order.  In general,
# we can't do the config until after we've installed the previous packages.
#
# Technically, we don't really need to reconfig after every install: most of
# the time it would be enough to rebuild after the install; however, there's
# no good way to make that work all the time, unless we had perfect
# prerequisite declarations (knowing which installed files actually would
# require a reconfig vs. a rebuild for example).

$(STAMPDIR)/gtkhtml.config : $(STAMPDIR)/libsoup.install

$(STAMPDIR)/evolution-data-server.config : \
	$(STAMPDIR)/libsoup.install \
	$(STAMPDIR)/gtkhtml.install

$(STAMPDIR)/evolution.config : \
	$(STAMPDIR)/libsoup.install \
	$(STAMPDIR)/gtkhtml.install \
	$(STAMPDIR)/evolution-data-server.install

$(STAMPDIR)/evolution-exchange.config : \
	$(STAMPDIR)/evolution-data-server.install \
	$(STAMPDIR)/evolution.install

$(STAMPDIR)/evolution-webcal.config : \
	$(STAMPDIR)/evolution-data-server.install \
	$(STAMPDIR)/evolution.install
_______________________________________________
Evolution-list mailing list
Evolution-list@gnome.org
http://mail.gnome.org/mailman/listinfo/evolution-list

Reply via email to