Use of builtin timezones does not work on Linux

Allen Winter winter at kde.org
Sun Nov 1 14:55:34 EST 2020


Fix committed.
all my testing passed. No idea if ancient CMake versions will be a problem.
Guess we'll find out.

On Sunday, November 1, 2020 1:23:41 PM EST Allen Winter wrote:
> On Monday, July 27, 2020 10:05:22 AM EST Milan Crha wrote:
> > 	Hi,
> > when I configure libical with -DUSE_BUILTIN_TZDATA=ON then a simple
> > program like this one fails:
> > 
> > ----------------------------------------------------------------------
> > 
> > /* gcc `pkg-config --cflags --libs libical` icaltz.c -g -O0 -o icaltz && ./icaltz */
> > 
> > #include <stdio.h>
> > #include <libical/ical.h>
> > 
> > int
> > main (int argc,
> >       char *argv[])
> > {
> > 	icaltimezone *tz;
> > 	tz = icaltimezone_get_builtin_timezone ("Indian/Cocos");
> > 	printf ("%s: tz:%p id:'%s'\n", __FUNCTION__, tz, icaltimezone_get_tzid (tz));
> > 
> > 	return 0;
> > }
> > 
> > ----------------------------------------------------------------------
> > 
> > because it cannot find the time zone. I found out the problem is in the
> > src/libical/CMakeLists.txt, which has this:
> > 
> >    set(PACKAGE_DATA_DIR "\\\"${CMAKE_INSTALL_PREFIX}/share/libical\\\"")
> > 
> > The problem are the extra double quotes around the path, which are
> > propagated to the sources, which means the:
> > 
> >    #define ZONEINFO_DIRECTORY      PACKAGE_DATA_DIR "/zoneinfo"
> > 
> > evaluates to:
> > 
> >    "\"/my/prefix/share/libical\"/zoneinfo"
> > 
> > which cannot by accessed/opened. I do not know when this behavior
> > changed, the git blame on the CMakeLists.txt identifies the last change
> > on the PACKAGE_DATA_DIR (and some other variables) in commit 4b9de15e8,
> > made back in 2008, as "fixes for cmake 2.4.8". The double quotes were
> > there before this commit.
> > 
> > This change does not influence libical tests, but it causes a failure
> > of two libical-glib tests (part of `make test`), due to not being able
> > to open some time zones.
> > 
> > I tried to remove the extra double quotes in the PACKAGE_DATA_DIR, aka:
> > 
> >    set(PACKAGE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share/libical")
> > 
> > which helped, but my prefix doesn't contain any spaces and I do not
> > know what that would do on Windows.
> > 
> > I've currently installed CMake 3.17.3.
> 
> This tiny patch seems to fix linux. 
> 
> -set(PACKAGE_DATA_DIR "\\\"${CMAKE_INSTALL_PREFIX}/share/libical\\\"")
> +set(PACKAGE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share/libical")
> 
> works even when CMAKE_INSTALL_PREFIX contains whitespace (on linux).
> I need to test on Windows next.  maybe we needed all those escape quotes
> in an ancient CMake version...
> 
> 
> 
> 
> 
> 
> _______________________________________________
> libical-devel mailing list
> libical-devel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/libical-devel
> 








More information about the libical-devel mailing list