Use of builtin timezones does not work on Linux
Allen Winter
winter at kde.org
Sun Nov 1 13:23:41 EST 2020
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...
More information about the libical-devel
mailing list