libical-1.0/0000775000076400007640000000000012141300551011723 5ustar allenallenlibical-1.0/COPYING0000664000076400007640000000123212132563136012766 0ustar allenallenlibical is distributed under two licenses. You may choose the terms of either: * The Mozilla Public License (MPL) v1.0 or * The GNU Library General Public License (LGPL) v2.1 ---------------------------------------------------------------------- Software distributed under these licenses is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is libical. The Initial Developer of the Original Code is Eric Busboom All Rights Reserved. Contributor(s): See individual source files. libical-1.0/aclocal.m40000664000076400007640000126554312141277174013621 0ustar allenallen# generated automatically by aclocal 1.12.2 -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # Copyright (C) 2002-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.12' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.12.2], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.12.2])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 17 # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 19 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated. For more info, see: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl dnl Support for Objective C++ was only introduced in Autoconf 2.65, dnl but we still cater to Autoconf 2.62. m4_ifdef([AC_PROG_OBJCXX], [AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1998-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl supported. (2.0 was released on October 16, 2000). m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 python3.2 python3.1 python3.0 python2.7 dnl python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) AC_ARG_VAR([PYTHON], [the Python interpreter]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version is >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Python interpreter is too old])]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of '-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR libical-1.0/README.cmake0000664000076400007640000000175412132563136013703 0ustar allenallenlibical supports the CMake buildsystem. You must have CMake version 2.4 or higher. Please see the comments at the top of CMakeLists.txt for the available configuration options you can pass to cmake. The installation directory defaults to /usr/local on UNIX and c:/Program Files on Windows. You can change this by passing -DCMAKE_INSTALL_PREFIX=/install/path to cmake. To build a debug version pass -DCMAKE_BUILD_TYPE=Debug to cmake. Building on Linux/Unix with a native compiler: % mkdir build % cd build % cmake .. % make % make install Building on Windows with MicroSoft Visual Studio: % mkdir build % cd build % cmake -G "NMake Makefiles" .. % nmake % nmake install Building on Windows with mingw: % mkdir build % cd build % cmake -G "MinGW Makefiles" .. % mingw32-make % mingw32-make install Building on Windows under Cygwin: % mkdir build % cd build % cmake .. % make % make install To run the test suite, run 'make test'. To run the test suite in verbose mode, run 'make test ARGS="-V"'. libical-1.0/ChangeLog0000664000076400007640000014112312141277315013512 0ustar allenallen *** THIS CHANGELOG IS NO LONGER MAINTAINED; PLEASE REFER TO THE SVN COMMIT LOG ! 2007-12-12 Christian Krause ** Fix for bug #487687 * src/libical/icalvalue.c: (icalvalue_new_from_string_with_error): Do not dereference NULL when a geo parsing error occurs. 2007-11-16 Milan Crha ** Fix for bug #492426 by Robert Noland * src/libical/icaltz-util.c: (find_transidx): Do not iterate beyond bounds of the array. 2007-10-22 Matthew Barnes * src/libicalss/icalssyacc.y: Add a function declaration for sslex(). * src/libicalvcal/vcc.y: Add a function declaration for mime_lex(). 2007-10-04 Milan Crha * src/libical/icaltz-util.c: (icaltzutil_fetch_timezone): Fixed leak in this function. 2007-09-10 Chenthill Palanisamy * zoneinfo/Africa/Cairo.ics: * zoneinfo/America/Grand_Turk.ics: * zoneinfo/America/Havana.ics: * zoneinfo/America/Port-au-Prince.ics: * zoneinfo/Antarctica/McMurdo.ics: * zoneinfo/Antarctica/South_Pole.ics: * zoneinfo/Asia/Choibalsan.ics: * zoneinfo/Asia/Damascus.ics: * zoneinfo/Australia/Broken_Hill.ics: * zoneinfo/Australia/Hobart.ics: * zoneinfo/Australia/Lord_Howe.ics: * zoneinfo/Australia/Sydney.ics: * zoneinfo/Pacific/Auckland.ics: * zoneinfo/Pacific/Chatham.ics: Updated the timezones. 2007-08-30 Chenthill Palanisamy Fixes #298788 (bnc) * src/libical/icaltz-util.c: (find_transidx), (icaltzutil_fetch_timezone): Fixes crash in 64 bit architectures. 2007-08-28 Ross Burton * src/libical/icallangbind.c: * src/libical/icalderivedparameter.c.in: * src/test/process.c: * src/test/regression.c: * src/test/regression-storage.c: * src/test/testmime.c: * src/test/regression-classify.c: * src/libicalss/icalset.c: Add missing config.h includes (part of #271841) 2007-08-24 Milan Crha ** Partial fix for bug #458753 by DULMANDAKH Sukhbaatar * zoneinfo/Asia/Ulaanbaatar.ics: Removes DST. 2007-08-21 Wang Xin * src/libical/icaltz-util.c: Fix #462499. Patch from damien.carbery@sun.com. 2007-08-15 Wang Xin Fix #464252. * src/libical/icaltz-util.c: Search zone info in /usr/share/lib/zoneinfo, not /usr/share/lib/zoneinfo/tab. * src/libical/icaltz-util.h: On Solaris, zone tab is /usr/share/zoneinfo/tab/zone_sun.tab. So define ZONES_TAB_SYSTEM_FILENAME to "tab/zone_sun.tab" not zone_sun.tab. * src/libical/icaltimezone.c: Move ZONES_TAB_SYSTEM_FILENAME to icaltz-util.h because it's used by icaltz-util.c too. 2007-08-13 Ross Burton * src/libical/sspm.[ch]: Add consts to fix compile warnings. 2007-08-09 Jeff Cai * src/libical/icaltimezone.c: * src/libical/icaltz-util.c: (set_zone_directory): Use /usr/share/lib/zoneinfo/tab/zone_sun.tab on Solaris Fix #464252 2007-08-01 Veerapuram Varadhan * Makefile.am: Define DIST_SUBDIRS and add zoneinfo to it. Fixes build break on release-tarballs. 2007-08-01 Chenthill Palanisamy * Makefile.am: * configure.in: Install the timezone files only on win32 systems. 2007-07-31 Milan Crha ** Partially fixes bug #327851 * src/libical/icaltimezone.c: (icaltimezone_get_builtin_timezone_from_tzid): Do not check for exact time zone id. 2007-07-31 Matthew Barnes * src/libical/icaltimezone.c: Fix implicit declaration of isspace() by including . 2007-07-30 Chenthill Palanisamy * src/libical/icaltz-util.[ch]: Updated the license information. 2007-07-30 Chenthill Palanisamy * src/libical/Makefile.am: * src/libical/icaltimezone.c: (icaltimezone_get_builtin_timezone), (parse_coord), (fetch_lat_long_from_string), (icaltimezone_parse_zone_tab), (icaltimezone_load_builtin_timezone): * src/libical/icaltz-util.c: (decode), (zname_from_stridx), (find_transidx), (set_zone_directory), (icaltzutil_get_zone_directory), (icaltzutil_fetch_timezone): * src/libical/icaltz-util.h: Reads the timezone information from the system instead of the timezone files which we maintain. The files are not removed since windows systems would still need them. 2007-06-09 Loïc Minier * configure.in: Use more specific "src/libical/ical.h" in AC_INIT() instead of the generic "src"; remove AC_CONFIG_AUX_DIR() override which was incorrect and was causing rebuilds to fail (#443705) 2007-06-01 Pascal Terjan * zoneinfo/Asia/Jerusalem.ics: add a timezone name for Asia/Jerusalem (#425129) 2007-05-24 Pascal Terjan * calendar/libical/src/libical/icaltimezone.c: Fix a crash when the timezone has no name (#425129) 2007-05-24 Pascal Terjan * zoneinfo/Australia/Perth.ics: add a timezone name for Australia/Perth (#425129) 2007-05-18 Matthew Barnes * src/libical/icalvalue.c: Fix implicit function declarations. 2007-05-12 Dodji Seketeli * calendar/libical/src/libical/icalvalue.c: (icalvalue_new_from_string_with_error): add support for parsing GEO properties. 2007-04-16 Ross Burton * scripts/mkrestrictiontable.pl: * scripts/mkderivedproperties.pl: * scripts/mkderivedvalues.pl: * scripts/mkderivedparameters.pl: * src/libical/icalrestriction.c.in: * src/libical/icalrecur.c: * src/libical/icalcomponent.c: * src/libical/icalenums.c: * src/libical/icalmime.c: * src/libical/icalerror.c: * src/libical/icalerror.h: * src/libicalss/icalclassify.c: * src/libicalvcal/icalvcal.c: * src/libicalvcal/vobject.c: Add numerous static and const keywords to move large arrays into shared memory (#318176). 2007-04-09 Chenthill Palanisamy Committing on behalf of Thomas Klausner * configure.in: Use = instead of == for test(1) construct. Fixes #362726 2007-03-27 Harish Krishnaswamy * src/libical/icalvalue.c (icalvalue_decode_ical_string) : Plug a possible memory leak. Fixes Bug #384044. Patch submitted by Matt Davey. 2007-03-05 Chenthill Palanisamy Partly fixes #301363 * zoneinfo/Africa/Cairo.ics: * zoneinfo/Africa/Tunis.ics: * zoneinfo/America/Adak.ics: * zoneinfo/America/Anchorage.ics: * zoneinfo/America/Araguaina.ics: * zoneinfo/America/Asuncion.ics: * zoneinfo/America/Boise.ics: * zoneinfo/America/Cambridge_Bay.ics: * zoneinfo/America/Chicago.ics: * zoneinfo/America/Cuiaba.ics: * zoneinfo/America/Dawson.ics: * zoneinfo/America/Denver.ics: * zoneinfo/America/Detroit.ics: * zoneinfo/America/Edmonton.ics: * zoneinfo/America/Fortaleza.ics: * zoneinfo/America/Glace_Bay.ics: * zoneinfo/America/Goose_Bay.ics: * zoneinfo/America/Halifax.ics: * zoneinfo/America/Indiana/Indianapolis.ics: * zoneinfo/America/Indiana/Knox.ics: * zoneinfo/America/Indiana/Marengo.ics: * zoneinfo/America/Indiana/Vevay.ics: * zoneinfo/America/Inuvik.ics: * zoneinfo/America/Iqaluit.ics: * zoneinfo/America/Juneau.ics: * zoneinfo/America/Kentucky/Louisville.ics: * zoneinfo/America/Kentucky/Monticello.ics: * zoneinfo/America/Los_Angeles.ics: * zoneinfo/America/Maceio.ics: * zoneinfo/America/Menominee.ics: * zoneinfo/America/Miquelon.ics: * zoneinfo/America/Montevideo.ics: * zoneinfo/America/Montreal.ics: * zoneinfo/America/Nassau.ics: * zoneinfo/America/New_York.ics: * zoneinfo/America/Nipigon.ics: * zoneinfo/America/Nome.ics: * zoneinfo/America/North_Dakota/Center.ics: * zoneinfo/America/Pangnirtung.ics: * zoneinfo/America/Port-au-Prince.ics: * zoneinfo/America/Rainy_River.ics: * zoneinfo/America/Rankin_Inlet.ics: * zoneinfo/America/Recife.ics: * zoneinfo/America/Sao_Paulo.ics: * zoneinfo/America/Shiprock.ics: * zoneinfo/America/St_Johns.ics: * zoneinfo/America/Thule.ics: * zoneinfo/America/Thunder_Bay.ics: * zoneinfo/America/Vancouver.ics: * zoneinfo/America/Whitehorse.ics: * zoneinfo/America/Winnipeg.ics: * zoneinfo/America/Yakutat.ics: * zoneinfo/America/Yellowknife.ics: * zoneinfo/Asia/Almaty.ics: * zoneinfo/Asia/Amman.ics: * zoneinfo/Asia/Aqtau.ics: * zoneinfo/Asia/Aqtobe.ics: * zoneinfo/Asia/Baku.ics: * zoneinfo/Asia/Bishkek.ics: * zoneinfo/Asia/Choibalsan.ics: * zoneinfo/Asia/Colombo.ics: * zoneinfo/Asia/Damascus.ics: * zoneinfo/Asia/Dili.ics: * zoneinfo/Asia/Gaza.ics: * zoneinfo/Asia/Hovd.ics: * zoneinfo/Asia/Istanbul.ics: * zoneinfo/Asia/Jerusalem.ics: * zoneinfo/Asia/Karachi.ics: * zoneinfo/Asia/Tbilisi.ics: * zoneinfo/Asia/Tehran.ics: * zoneinfo/Asia/Ulaanbaatar.ics: * zoneinfo/Atlantic/Bermuda.ics: * zoneinfo/Australia/Adelaide.ics: * zoneinfo/Australia/Broken_Hill.ics: * zoneinfo/Australia/Hobart.ics: * zoneinfo/Australia/Lord_Howe.ics: * zoneinfo/Australia/Melbourne.ics: * zoneinfo/Australia/Perth.ics: * zoneinfo/Australia/Sydney.ics: * zoneinfo/Europe/Istanbul.ics: * zoneinfo/Europe/Vilnius.ics: * zoneinfo/Pacific/Chatham.ics: * zoneinfo/Pacific/Tongatapu.ics: Updated timezone information. 2006-12-03 Harish Krishnaswamy * calendar/libical/src/libical/icalvalue.c: (icalvalue_decode_ical_string): Fix a potential buffer over-run. 2006-09-21 Chenthill Palanisamy * zoneinfo/Asia/Jerusalem.ics: Updated the right timezone for Jerusalem. 2006-08-28 Chenthill Palanisamy Fixes #301363 * zoneinfo/America/Los_Angeles.ics: * zoneinfo/Asia/Jerusalem.ics: Updating the timezone information. Committing the patch from Roozbeh Pournader 2006-08-14 Ricardo Markiewicz reviewed by: Harish Krishnaswamy * src/libical/icalmime.c: (icalmime_text_end_part): use after dereference. Fixes #335251. 2006-08-07 Chenthill Palanisamy Fixes #349078 * zoneinfo/Asia/Choibalsan.ics: * zoneinfo/Asia/Hovd.ics: * zoneinfo/Asia/Ulaanbaatar.ics: Updated the timezone information. Committing on behalf of DULMANDAKH Sukhbaatar 2006-06-16 Tor Lillqvist * src/libical/icaltimezone.c: Add gmtime_r() macro implementadion for Win32. 2006-06-15 Harish Krishnaswamy * src/libical/icalvalue.[ch] (icalvalue_decode_ical_string): Add a function to decode an icalstring and restore escaped characters in original form. 2006-06-15 Andre Klapper * zoneinfo/Asia/Columbo.ics: update timezone info. Fixes bug #344978. 2006-06-14 Srinivasa Ragavan * src/libical/icaltimezone.c: Added a new api to get the location from the offset and the TZNAME. (icaltimezone_get_vtimezone_properties), (tm_to_icaltimetype), (get_offset), (icaltimezone_get_builtin_timezone_from_offset), (icaltimezone_load_builtin_timezone): * src/libical/icaltimezone.h: 2006-05-12 Nancy Cai * src/libical/icaltimezone.c: (icaltimezone_get_builtin_timezone): init time zone first if builtin_timezones is NULL, before checking location. Fixes #333594. 2006-02-13 Chenthill Palanisamy * src/libical/icalrecur.c: (icalrecurrencetype_as_string): Check if the week start is set before getting the value. Fixes #330215. 2005-12-13 Tor Lillqvist * src/test/regression-utils.c (ical_timet_string): Don't crash if gmtime() returns NULL. * src/test/testmime.c: No sleep() in the MSFT C library, use _sleep() (which takes milliseconds). 2005-11-28 Tor Lillqvist * src/libical/icaltime.c (icaltime_as_timet_with_zone): On Windows we must call tzset() after setting the TZ environment variable. The mktime() in Microsoft's C library calls tzset() internally just the first time it's called. * src/libical/icaltimezone.c (get_zone_directory): On Windows look up the zoneinfo directory at run-time. The code previously used the built-in pathname /Projects/libical for PACKAGE_DATA_DIR on Windows, and not even the one from the configure script, huh? 2005-10-27 Harish Krishnaswamy * zoneinfo/zones.tab: Correct typo on Macao. Fixes #317804 2005-09-27 Dinesh Layek Fixes bug#272176 * src/libical/icalparser.c (icalparser_add_line): removed the leading and trailing white spaces of the string to be parse * scripts/mkderivedvalues.pl: changed the code to make the functions, which returns a string, return NULL on NULL input. 2005-09-20 Irene Huang * src/libical/icalcomponent.c: (icalcomponent_get_datetime): icaltimezone_get_builtin_timezone(tzid) was replaced by icaltimezone_get_builtin_timezone_from_tzid(tzid), which is the correct function to retrive timezone information from tzid 2005-09-15 Tor Lillqvist * src/libical/vsnprintf.c: No reason not to include config.h also on Win32. * src/libicalvcal/icalvcal.c (get_alarm_properties): Add comment about brokenness of the code on Win32. 2005-09-05 P. S. Chakravarthi Fixes #312462 * src/libical/icaltime.c (set_tz), (unset_tz) : make the functions thread safe. 2005-08-25 Harish Krishnaswamy Fix submitted by David Malcolm * src/libical/vsnprintf.c: Revert the earlier patch which borks the build. 2005-08-22 Not Zed * src/libicalvcal/icalvcal.c (rrule_parse_weekly_days): init e to something before using it. (rrule_parse_monthly_positions): init only_weekday to remove spurious warning. (rrule_parse_monthly_positions): init e to something. (rule_prop): remove unused vars. (dc_prop): remove unused vars. * src/libicalss/icalfileset.c (icalfileset_begin_component) (icalfileset_form_a_matched_recurrence_component) (icalfilesetiter_to_next): () to remove warning. * src/libical/icaltypes.c (icaltriggertype_from_string): set es before using it. * src/libical/icaltime.c (icaltime_from_timet_with_zone) (icaltime_as_timet_with_zone, icaltime_convert_to_zone) (icaltime_get_tzid): cast away warnings. * src/libical/icalerror.c: fix this strange function to always return something. 2005-08-12 Tor Lillqvist * src/libical/Makefile.am (libical_evolution_la_LIBADD): Add PTHREAD_LIBS. 2005-08-11 Tor Lillqvist * configure.in: Check for Win32, define Automake conditional OS_WIN32. * src/libical/icalrecur.c: No need to define intptr_t on Win32, it is defined in the mingw headers. * src/libical/vsnprintf.c: Hmm, redo the ifdefs a bit to bypass this on Win32, it doesn't compile, and doesn't seem to be needed. * src/libicalss/icalcalendar.c * src/test/regression.c: Handle the different prototype for mkdir() on Win32. * src/libicalss/icalmessage.c (icalmessage_new_reply_base): Remove bogus Win32 ifdef. * src/test/Makefile.am: Don't build stow on Win32. * src/test/copycluster.c: Conditionalize use of SIGALRM. 2005-03-09 Not Zed * src/libical/icaltime.c (unset_tz): uncomment out free'ing code. 2005-01-08 Not Zed * src/libicalss/icalfileset.c (icalfileset_read_from_file) (icalfileset_read_file): pass the icalfileset to the callback rather than cast the fd to/from a pointer. 2004-12-20 Rodrigo Moya * src/libical/icaltime.c (set_tz): uncomment free() call that was commented because of a crash that does not happen anymore. 2004-10-27 Julio M. Merino Vidal * configure.in: search for unsetenv. * src/libical/icaltime.c (unset_tz): use unsetenv when available. 2004-10-15 Rodney Dawes * configure.in: Call AC_CONFIG_AUX_DIR() before AM_INIT_AUTOMAKE This is ordering is required by automake 1.9 2004-09-03 Rodrigo Moya Fixes crash in #57443 * src/libical/icalerror.c (icalerror_errors_are_fatal): s/#ifdef/#if, so that we check against the value, not the definition being available. 2004-08-02 Not Zed * src/libicalvcal/vcc.y: re-alloc when we reach the buffer length, not one past it. Fixes an ABW. 2004-05-13 Phil Goembel * src/libical/icalparser.c (icalparser_get_line): accept tab and space as continuation character, bug #55561. 2004-04-01 JP Rosevear Fixes #55984 * src/libical/icaltime.c (icaltime_as_timet_with_zone): copy the icaltimetype to a local struct and use that 2004-02-26 JP Rosevear * configure.in: don't ac_output python and java dirs * src/Makefile.am: remove python and java dirs 2004-02-23 JP Rosevear * zoneinfo/Makefile.am: uninstall the zone files * src/libical/Makefile.am: make sure icalversion.h gets cleaned and icalrestrication is found in the builddir * src/test/Makefile.am: add includes for srcdir != builddir, add define to locate test source calendar, clean up files * src/test/process.c: make sure to load the sources from the right spot * src/test/regression-recur.c: ditto * src/test/regression-classify.c: ditto * src/test/regression.c: ditto * src/test/test-classify.c: ditto * src/libicalvcal/Makefile.am: add includes for srcdir != builddir * Makefile.am: ditto * examples/Makefile.am: ditto 2004-02-12 Hans Petter Jansson * src/libicalvcal/vcc.y (enterValues): Allocate space for the string terminator. Fixes mem corruption. 2004-02-04 JP Rosevear * src/libicalvcal/icalvcal.c (icalvcal_traverse_objects): just return on unknown property 2004-01-09 Harish K * src/libical/icaltime.c: allow separators in ISO 8601 strings. 2004-01-08 JP Rosevear * src/libical/icaltime.c (icaltime_from_string): a date is a floating time (icaltime_as_timet_with_zone): revert to the right thing 2004-01-07 JP Rosevear * src/libical/icaltime.c: revert icaltime_as_timet_with_zone and icaltime_from_timet_with_zone to previous versions as these version always use the machine timezone 2003-11-05 JP Rosevear * src/libical/Makefile.am: ditto * src/libicalvcal/Makefile.am: ditto * src/libicalss/Makefile.am: don't install the library 2003-11-04 JP Rosevear * src/libicalvcal/Makefile.am: install headers 2003-10-24 Dan Winship * configure.in: add AM_DISABLE_STATIC here too. 2003-10-23 Dan Winship * src/libical/Makefile.am (libical_evolutioninclude_HEADERS): install all of the headers that ical.h now #includes 2003-10-15 Rodrigo Moya * src/libicalss/icalssyacc.y: re-added missing header. * src/libical/ical.h: added from HEAD. 2003-10-09 Jeffrey Stedfast * src/libical/Makefile.am: Fixed INCLUDES and don't autogenerate ical.h, no need to. Plus it caused problems anyways. * src/libical/*.[c,h]: Fixed the #includes * src/libicalss/Makefile.am: Fixed INCLUDES and don't autogenerate icalss.h, no need to. Plus it caused problems anyways. * src/libicalss/*.[c,h]: Fixed the #includes * tests/*.c: #include rather than "ical.h" * tests/Makefile.am: Fixed INCLUDES * examples/*.c: #include rather than "ical.h" * examples/Makefile.am: Fixed INCLUDES * src/libicalvcal/icalvcal.h: #include which is no longer autogenerated. * src/libicalvcal/icalvcal.c (icalvcal_convert_with_defaults): Use the proper macro names from config.h 2003-10-07 Dan Winship * src/libical/Makefile.am: Remove libical-static * src/libicalcap/Makefile.am: and libicalcap-static 2003-09-23 Hans Petter Jansson * configure.in: Remove flex check. Set ICAL_ERRORS_ARE_FATAL to 0. * src/libicalss/icalgauge.c (icalgauge_new_from_sql): Don't use globals struct. Remove calls to sslex_init(), _extra(), ss_scan_string(). Use a global pointer icalss_yy_gauge to hold context. Call ssparse() with no arguments. * src/libicalss/icalsslexer.l: Remove options reentrant and bison-bridge. Rename variables, change function invocations to comply with flex 2.5.4. (icalss_input): Add function to read input. * src/libicalss/icalssyacc.y (yyextra): Remove. (select_list) (from_list) (where_clause) (where_list): yyextra -> icalss_yy_gauge * src/libicalss/icalsslexer.c: * src/libicalss/icalssyacc.c: * src/libicalss/icalssyacc.h: Add generated files back to repository. They don't belong there, but that's not my problem. 2003-09-22 Hans Petter Jansson * src/libicalcap/Makefile.am (LDADD): Remove $(cxx_libs), it's undefined. 2003-09-22 Hans Petter Jansson * configure.in: Require flex 2.5.31 and add a test for it. Rename WITH_CXX conditional to WITH_CXX_BINDINGS. * examples/Makefile.am (doesnothing_LDADD): Add -evolution to lib names. * src/test/Makefile.am: WITH_CXX -> WITH_CXX_BINDINGS. Add -evolution to lib names. * src/test/regression.c (main): WITH_CXX -> WITH_CXX_BINDINGS. * src/libicalcap/Makefile.am: Add -evolution to lib names. Install to Evolution's priv dirs. * src/libicalvcal/Makefile.am: Ditto. * src/libical/Makefile.am: WITH_CXX -> WITH_CXX_BINDINGS. Add -evolution to lib names. Install in privlibdir. Install includes to $(privincludedir)/libical. * src/libicalss/Makefile.am: Ditto. * src/libicalss/icalsslexer.l: Replace option reentrant-bison with reentrant and bison-bridge. Use new Flex variable names. * src/libical/icallexer.l: * src/libical/icalyacc.y: * src/libicalss/icalsslexer.c: * src/libicalss/icalssyacc.c: * src/libicalss/icalssyacc.h: Removed from repository. 2003-09-12 Hans Petter Jansson * configure.in: Subst in Evolution install variables. * src/libical/Makefile.am (CPPFLAGS): Use Evolution's privdatadir. 2004-02-04 JP Rosevear (merged to upstream by Ross Burton and Art Cancro) * src/libicalvcal/icalvcal.c (icalvcal_traverse_objects): just return on unknown property 2004-08-02 Not Zed (merged to upstream by Ross Burton and Art Cancro) * src/libicalvcal/vcc.y: re-alloc when we reach the buffer length, not one past it. Fixes an ABW. 2005-09-15 Tor Lillqvist (merged to upstream by Ross Burton and Art Cancro) * src/libical/vsnprintf.c: No reason not to include config.h also on Win32. 2007-05-18 Matthew Barnes (merged to upstream by Ross Burton and Art Cancro) * src/libical/icalvalue.c: Fix implicit function declarations. 2007-03-?? Art Cancro * Updated tzdata in order to deal with daylight savings time changes in the US. 200?-??-?? Omar Kilani (merged to upstream by Art Cancro) * Merge the libical forks from KDE, Evolution, and SourceForge. 2002-07-09 Andrea Campi * src/libical/icalcomponent.c * src/libical/icalcomponent.h: Added a check for valid component kind before instancing a new one. 2002-07-08 Andrea Campi * src/python/Gauge.py * src/python/LibicalWrap.i * src/python/Property.py * src/python/Store.py * src/python/Time.py * src/python/python-binding.txt * src/python/test.py: Updated the python bindings to match the C API changes. Obtained from: Mark Tearle 2002-07-04 Andrea Campi * src/libical/icalderivedproperty.c.in * src/libical/icalproperty.c * src/libical/icalproperty.h: Added a check for valid property kind before instancing a new one. * src/libical/icalvalue.c: Fixed icalvalue_new_clone to properly clone X- properties. 2002-06-28 Andrea Campi * design-data/parameters.csv * src/libicalss/icalgauge.c * src/libicalss/icalgaugeimpl.h * src/libicalss/icalsslexer.c * src/libicalss/icalsslexer.l * src/libicalss/icalssyacc.c * src/libicalss/icalssyacc.h * src/libicalss/icalssyacc.y: Added IS NULL to icalgauge syntax. Obtained from: Paul Lindner * src/libical/icallexer.c * src/libical/icallexer.l * src/libical/icalyacc.c * src/libical/icalyacc.h * src/libical/icalyacc.y: Sent lex/yacc code to Attic. * src/libical/icalparameter.c: Changed icalparameter_as_ical_string to also quote the param value if it contains a , (comma), as per RFC2445. * src/libicalss/icalset.c * src/libicalss/icalset.h: Added experimental code to support dynamic loading of icalset derived classes. * src/libicalss/Makefile.am * src/libicalss/icalspanlist_cxx.cpp * src/libicalss/icalspanlist_cxx.h: Added C++ binding for libicalss. Obtained from: Paul Lindner 2002-06-28 Eric Busboom * src/libical/Makefile.am * src/libical/icalduration.c * src/libical/icalparser.c * src/libical/icalvalue.c * src/libical/icalyacc.c * src/libical/icalyacc.h: removed lex and yacc by writing code to parse UTC-OFFSET 2002-06-27 Andrea Campi * src/libical/icalcomponent.c * src/libical/icalcomponent.h: Added icalcomponent_foreach_recurrence as a better way of handling recurrences; deprecated icalcomponent_get_span Obtained from: Paul Lindner * src/libical/icalderivedvalue.c.in * src/libical/icalvalue.c * src/libical/icalvalue.h: Added a check for valid value kind before instancing a new one. Obtained from: Paul Lindner * src/libical/icalproperty.c * src/libical/icalproperty.h: Deprecated icalproperty_remove_parameter, added 3 new functions to do the same in a safer way (wrt X- params). Obtained from: Paul Lindner * src/libical/icaltime.c * src/libical/icaltime.h: Added functions to work with time spans. Obtained from: Paul Lindner 2002-06-26 Andrea Campi * src/libical/icalduration.c: Fixed icaldurationtype_from_int to generate valid RFC2445 durations (it used to mix weeks and other time units). 2002-06-13 Andrea Campi * src/libical/icalvalue.c: Fixed escaping of TEXT values and formatting of UTCOFFSET values to more closely match RFC2445. * configure.in * src/libical/Makefile.am * src/libical/icalparameter_cxx.cpp * src/libical/icalparameter_cxx.h * src/libical/icalproperty_cxx.cpp * src/libical/icalproperty_cxx.h * src/libical/icalvalue_cxx.cpp * src/libical/icalvalue_cxx.h * src/libical/vcomponent.cpp * src/libical/vcomponent.h * src/libicalss/icalbdbset_cxx.h: Added C++ binding. Obtained from: Paul Lindner * configure.in * src/libicalss/Makefile.am * src/libicalss/icalbdbset.c * src/libicalss/icalbdbset.h * src/libicalss/icalbdbset.h * src/libicalss/icalbdbsetimpl.h * src/test/Makefile.am * src/test/storage.c: Added BerkeleyDB 4.0 icalset implementation. Obtained from: Paul Lindner 2002-06-11 Andrea Campi * src/test/Makefile.am * src/test/regression-classify.c * src/test/regression-component.c * src/test/regression-recur.c * src/test/regression-utils.c * src/test/regression.c * src/test/regression.h * src/test/test_fileset.ics: New regression test suite Obtained from: Paul Lindner * src/libical/icalcomponent.c * src/libical/icalproperty.c * src/libical/icalproperty.h * src/python/test.py * src/test/regression.c: Improved X- parameter handling. Obtained from: Mark Tearle 2002-06-07 Andrea Campi * configure.in * src/libical/Makefile.am * src/libical/icallexer.l * src/libical/icalparser.c * src/libical/icalparser.h * src/libical/icalyacc.y * src/libicalss/Makefile.am * src/libicalss/icalgauge.c * src/libicalss/icalsslexer.c * src/libicalss/icalsslexer.l * src/libicalss/icalssyacc.c * src/libicalss/icalssyacc.h * src/libicalss/icalssyacc.y: Made parser fully reentrant using recent versions of flex/bison. Also committed the generated files so that the library can be compiled even without those tools. Obtained from: Paul Lindner * src/python/LibicalWrap.i * src/python/Property.py * src/python/test.py: Support X- properties in the Python wrapper. Obtained from: Mark Tearle 2002-06-04 Andrea Campi * *: Constifed a lot of functions, also made a few of them static Obtained from: Paul Lindner 2002-06-03 Andrea Campi * src/libical/icallangbind.c * src/python/Component.py * src/python/Gauge.py * src/python/Libical.py * src/python/LibicalWrap.i * src/python/Store.py * src/python/test.py: Fully implemented FileStore and Gauge in the python bindings. Obtained from: Mark Tearle 2002-05-28 Andrea Campi * src/libical/icalattach.c * src/libical/icalattach.h * src/libical/icalattachimpl.h * src/libical/icalderivedproperty.c.in * src/libical/icalderivedvalue.c.in * src/libical/icalderivedvalue.h.in * src/libical/icaltypes.c * src/libical/icaltypes.h * src/libical/icalvalue.c * src/libical/icalvalueimpl.h: Changed ATTACH to be an opaque type 2002-05-27 Eric Busboom * scripts/mkderivedparameters.pl * scripts/mkderivedproperties.pl * scripts/mkderivedvalues.pl * src/libical/icalderivedparameter.c.in * src/libical/icalderivedparameter.h.in * src/libical/icalderivedproperty.c.in * src/libical/icalderivedproperty.h.in * src/libical/icalderivedvalue.c.in * src/libical/icalderivedvalue.h.in: changed the auto generated files and scripts so that the generated code is inserted into the middle of the template (.in) file, instead of the end. This means we could get rid of the declaration for the maps. 2002-05-27 Andrea Campi * src/libical/icaltimezone.c: Worked around Outlook/Exchange brokenness. Obtained from: evolution CVS repository 2002-05-24 Andrea Campi * src/libical/icalproperty.c: Implemented proper RFC2445 folding. Obtained from: evolution CVS repository * src/libical/icalrecur.c: Worked around Outlook/Exchange brokenness. Obtained from: evolution CVS repository 2002-05-21 Andrea Campi * src/libical/*: Removed void * in favor of opaque typedef types. This helped uncover a few bugs and made debugging easier. Obtained from: Paul Lindner 2002-05-10 Andrea Campi * src/libical/icalmemory.c: Made the memory allocator threadsafe. This code is currently conditional on USE_THREAD, but it might become the default in the future. Obtained from: Paul Lindner * src/libical/icaltime.c: Implemented icaltime_is_date(), with the intent of removing all direct accesses to is_date. 2002-05-09 Andrea Campi * icaltime.c Rewrote and documented icaltime API, with the goal of keeping it stable until release 1.0. Some functions and internal implementation details are now declared obsolete and removed from the documentation; they will be removed at a later time. 2001-12-12 Eric Busboom * icalrecur.c implemented recurrence rule for "FREQ=YEARLY", with no BY rules. 2001-12-11 Eric Busboom * icalrecur.c Fixed bug in next_month for MONTHLY rules that have only BYDAY rules. The code would miss valid dates that fell on the first of the month. created new routine is_day_in_byday() * icaltime.c Fixed icaltime_from_day_of_year to correctly handle negative and over-range day-of-years * icaltime.c collected all instances of leap year code into icaltime_is_leap_year * icaltime.c icaltime_day_of_year. Changed an assert into code that advances the year when the day of year is lager than the number of days in the given year * icalerrno.c,h Added the function version icalerror_set_errno. Only the define verson existed. * icaltime.c Moved all of the getenv/putenv operations into icaltimegm() 2001-06-29 Eric Busboom * icalderivedproperties.h,c Changed the signature if the CLASS property from TEXT to CLASS. ( enum icalproperty_class) 2001-06-22 Eric Busboom * icaltypes.c Fixed bug in icaltriggertype_new_from_string htat caused it to fail. 2001-04-12 Eric Busboom * icalvalue.c Added quoting to apostrophies ("'") in text values. This is not required by the spec, but it is necessary in icallangbind_property_eval_string, since ' is special in both perl and python. 2001-04-10 Eric Busboom * icalvalue.c Added routine icalvalue_reset_kind. This routine is now called by all autogenerated icalvalue_set_* routines. icalvalue_reset_kind() will change the kind of the value based on the data in the value. Currently, it will set a value to either DATETIME or DATE based on the is_date flag of icaltimetype. 2001-04-09 Eric Busboom * icalproperty.h Converted REQUEST-STATUS to use the struct icalreqstat structure instead of a string 2001-04-01 Eric Busboom * icalcomponent.h Changed meaning of icalcomponent_new_from_string. It used to create a new component given the text name of the component type to create. Now it calls icalparser_parse_string to create a new component from the complete iCalendar text representation of the component. 2001-03-31 Eric Busboom * icalvalue Changed ACTION properties to take an ACTION value instead of TEXT. The ACTION value is enumerated. 2001-03-26 Eric Busboom * icalparameter.h icalparameter_rsvp_* routines now take, return ICAL_RSVP_TRUE and ICAL_RSVP_FALSE, not 0 and 1 2001-03-25 Eric Busboom * icalrecur.c Many changes to get YEARLY rules working and fix other errors. Recurrences are stil broken, but more types of rue now work. 2001-03-16 Eric Busboom * icalparameter.c Changed icalparameter_new_from_string() to icalparameter_new_from_value_string(). Created new icalparameter_new_from_string() that takes strings of form"PARAMNAME=PARAMVALUE" * *_XNAME changes all _XNAME enumerations to _X * derived props, values, parameters. Seperated out derived proeprties, parameters and values into their own files. This makes it easier to auto generate all of the enumerations for values, parameters and proeprties. * icalenum.h Major changes to icalenum. Movel all of the icalenum_* values to other modules, and changed the names. Look for #defines in icalenum.h tying the old name to the new name. Also moved all of the enumerations into other files. 2001-02-26 Eric Busboom * src/libical/icalproperty.c Added icalproperty_set_parameter_from_string and icalproperty_set_value_from_string to aid in binding to Python 2001-02-15 Eric Busboom * design-data/prop-to-value.txt Made a new CSV file, properties.cvs That collects property-to-value and default value information * src/libical/icalproperty.{c,h}.in Moved auto generated code into icalderivedproperty.{c,h} and created icalderivedproperty.{c,h}.in 2001-02-14 JP Rosevear * src/libical/Makefile.am: Sigh, automake is dumber than i thought 2001-02-12 JP Rosevear * src/test/Makefile.am: link with the static versions * src/python/Makefile.am: use include dir discovered in configure checks * src/python/.cvsignore: shush * src/libical/icalrestriction.c: remove autogenerated file * src/libical/Makefile.am: the generated files are now disted so look for them in the source dir rather than the build dir * src/Makefile.am: Only build the python dir if all the configure stuff checked out * configure.in: Remove shared library disabling and add a python check and allow for the python bindings to not be built 2001-02-11 Eric Busboom * src/python/Makefile.am Tweaked makefile to use automake more, but it stil isn't quie right. 2001-02-09 JP Rosevear * Shush cvs 2001-02-09 JP Rosevear * src/libical/Makefile.am: Slightly over zealous during the merge 2001-02-09 JP Rosevear * src/libical/Makefile.am: Correct typo * Removal of more auto generated files 2001-02-09 JP Rosevear * Removal of various auto generated files 2001-02-09 JP Rosevear * src/libical/icalparameter.c.in (icalparameter_new_from_string): its NEEDS-ACTION rather than NEEDSACTION (icalparameter_as_ical_string): ditto 2001-02-09 Eric Busboom * python Added src/python directory. Inserted SWIG wrapper files, and a simple interface to Component, Time, Duration, Period and Store. * icallangbind.c More experimental work * icalduration.{c,h}, icalperiod.{c,h} Broke out period and duration types into their own files 2001-02-06 Christopher James Lahey * src/libical/icallangbind.c: Added a missing #include here. * src/libical/icalrecur.c (icalrecur_add_bydayrules): Copy the passed in const vals since we change it. 2001-02-06 Eric Busboom * icaltime.c Changed icaltime_from_day_of_year to run mktime in the UTC timezone. This fixed a bug where it would return one day eariler for some timezones. 2001-02-05 Ettore Perazzoli * src/libical/Makefile.am (COMBINEDHEADERS): `icalvalue.h', `icalparameter.h', `icalproperty.h' and `icalrestriction.h' are created in the builddir so they shouldn't be prefixed with `$(top_builddir)/src/libical'. 2001-01-26 Eric Busboom * icalproperty.c.in Improved icalproperty_as_ical_string() to eliminate the possibility of having a VALUE parameter that does not match the actual kind of value. * icalvalue.c.in made icalvalue_*_trigger() and icalvalue_*_datetimeperiod non-autogenerated. These routines were for combined value type -- non standard values that can have more than on standard value type. These non-standard types now delegate to stadard types. 2001-01-24 Eric Busboom * icalfileset.c fixed icalfileset_read-from_file so it will handle lines longer than 80 char properly. 2001-01-23 JP Rosevear * configure.in: Don't AC_INIT on an autogenerated file that does not exist beforehand 2001-01-23 Eric Busboom * icltime.c Removed all of the _local_ routines and simplified icaltime_utc_offset and icaltime_as_timet * regression.c Added tests for triggers and improvements to icaltime.c * icaltypes.c Addedd icaltriggertype_from_string and changed icaltriggertype to be a struct 2001-01-22 Eric Busboom * icaltime.c implemented icaldurationtype_from_string to parse the string it self, rather than use lex/yacc 2001-01-15 Eric Busboom * icalfileset.c Many improvements. File locking now works, and so does searching with icalfileset_select() 2001-01-08 Eric Busboom * Makefile.am Remove spaces after -I in several Makefile.am routines. * icalset.c removed return statements from some void functions. * icalparameter.c.in Added break to default: case that had no body. Compilers on Solaris and Tru64 UNIX complained. 2001-01-02 Eric Busboom * icaltime.c Changed icaldurationtype_from_time and _as_timet to _from_int and _as_int. This is a change interface that may break some code. * icalgauge.c icalgaugeimpl.h, icalgauge.h., Rewrote gauge code to use pvl-lists directly, instead of trying to reuse icalcomponent. 2000-12-13 Ettore Perazzoli * src/libicalvcal/Makefile.am (INCLUDES): Add `$(top_builddir)/src/libical' to the include directory list. * src/libical/Makefile.am (icalparameter.h): Use `$(srcdir)'. (icalparameter.c): Likewise. (icalproperty.h): Likewise. (icalproperty.c): Likewise. (icalvalue.h): Likewise. (icalvalue.c): Likewise. (icalrestriction.c): Likewise. (COMBINEDHEADERS): `icalvalue.h', `icalparameter.h' and `icalproperty.h' are in builddir, not srcdir, so fix the list to use `$(top_builddir)' instead of `$(top_srcdir)'. (all): Removed. (BUILT_SOURCES): Move `ical.h' here instead. (ical.h): Don't depend on `(BUILT_SOURCES)'; this a built source itself. 2000-12-12 Eric Busboom * icalparser.c Addedd support for x-parameters. * icalenum.c Fixed icalenum_parameter_type_to_string and icalenum_property_type_to_string to property identify X- parameers and properties. * icalparameter.c Fixed icalparameter_as_ical_string to property write out X-Parameters. 2000-12-11 Eric Busboom * icalcstp.c added empty bodies to prep_* routines so that shared libraries would build. 2000-12-11 JP Rosevear * src/libical/icaltime.c (icaltime_compare_date_only): New function that compares only the dates, not the times as well. * src/libical/icaltime.h: Add prototype for the function above. * src/libical/icalrecur.h (struct icalrecurrencetype): Correct header documentation. * src/libical/icaltypes.c: No longer include . * src/libical/icalrecur.c: Likewise. * src/libical/icalvalue.c: Likewise. * src/libical/icalyacc.y: Likewise. 2000-12-11 Federico Mena Quintero * configure.in (AC_OUTPUT): Fixed order of generated files to make "make distcheck" work. Turn on AM_MAINTAINER_MODE. * src/libical/Makefile.am (EXTRA_DIST): Add icalversion.h.in. (COMBINEDHEADERS): Added paths to make "make distcheck" work. (libical_la_SOURCES): Added headers for distribution in our weird setup. 2000-12-06 Eric Busboom * icaltime.c added icaltime_as_local to convert a UTC time to a local time * icaltime.h icaltime.c Removed is_utc argument from icaltime_from_timet 2000-11-29 Eric Busboom * icalrecur.c More testing and bug fixes. Many more of the rules in recur.txt work correctly. 2000-11-28 Eric Busboom * icalrecur.c Several changes to extract icalrecur.c from libical. I'd like to make it into a reference impl for recurrence rules. CHanges include moving all of the recurrence type and recurrence enums from icalenum and icaltypes into icalrecur, and adding code to parse recurrence rule strings. * icaltime.c Changed icaltime_from_string to parse the string directly. Now icaltime.c has no dependency on icalvalue.c 2000-11-21 Eric Busboom * icalrecur.c Fixed a bug in the increment_* routines that made incrementing by more then 1 insensible. Thanks to Martin Neimeier 2000-11-20 Eric Busboom * icalmessage.c Many routines to create new ical messages. * icalspanlist.c Code to generate a list of the busy time f the VEVENTS in a set. Also includes routiens to generate free and busy lists from the spanlist, and to find the next free time after a given time. * icalvalue.c The STATUS property now has its own value type, STATUS, which holds the enumeration icalproperty_status. * icalrestriction.c Added more restrictions. Now handles mutual and exclusive consitions, and checks for the reight values in STATUS properties 2000-11-10 Eric Busboom * icaltypes.c Added routine to create durationtype from string: icaldurationtype_from_string 2000-11-09 Eric Busboom * icalcomponet.c Add sever get/set convienience routines to access and manipulate common component propoerties from the component interface. This eliminates the need to create a lot of temporary variables if you just want to change the start time of and event. 2000-11-06 Eric Busboom * icalcomponent.c Added new routines to icalcomponent: _get_span -- returns the start and end times of the event in UTC _get_first_real_component -- return ref to VTODO, VEVENT or VJOURNAL * icalspanlist.c Added new class, icalspanlist, that generates a list of alternating busy and free times from an icalset. The class includes routines to gnerate rfc2445 busy and free lists, and to get the next avaliable busy or free time after a given time. 2000-11-06 Federico Mena Quintero * src/libical/icalvalue.c (icalvalue_recur_as_ical_string): Handle both the position and weekday in the by_day field. 2000-10-20 Eric Busboom * Const correctness. Added 'const' all over everywhere. 2000-10-19 Eric Busboom * icalproperty, icalparameter, icalvalue .c, .h Changed most instances of char* to const char* * icalclassify.h Added multiple include protection * icalset.h and others, got rid of parameter named "new" 2000-10-15 Eric Busboom * icalcomponent Added convienience functions for constructing components: icalcomponent_new_vcalendar(), etc. * Makefile.am Incorporated build system patch from Federico Quintero. Misc small fixes and cleanup * scripts Incorporated auto-gen patch from Frederico. Generated code in libical now uses icalproperty.c.in (etc) instead of editing file icalparoperty.c in place. * libical. Changed flex/bison to use the -P/-p options to set ical_yy as a prefix. Removed prefix redefinition from icalyacc.y 2000-10-12 Eric Busboom * icalproperty.c Fixed icalproperty_get_{first,next}_parameter to honor the parameter kind argument * icalparameter.c Added, but did not complete, a new version of icalparameters_from_string that does not use the hairy nested case/switch statements of the previous version 2000-10-02 Eric Busboom * ical.h ical.h and icalss.h now are concatenations of all of the public headers for their respective libraries. Thus, only ical.h, icalss.h and icalvcal.h need to be installed. 2000-09-11 Eric Busboom * icalvcal.c Added more comments 2000-08-31 JP Rosevear * configure.in: Don't list config.h in AC_OUTPUT 2000-08-26 Ettore Perazzoli * examples/Makefile.am (INCLUDES): More `$(srcdir)' loving. * src/libicalvcal/Makefile.am (INCLUDES): Add `-I $(srcdir)/../libical' for builddir != srcdir loving. 2000-08-25 Christopher James Lahey * examples/access_properties_and_parameters.c, src/libicalvcal/vcc.y: Got rid of some warnings. * src/libicalvcal/vcc.c: Checking in generated C file. 2000-08-25 Christopher James Lahey * src/libical/icalcomponent.c: Fixed an incorrect struct name. 2000-08-25 Peter Williams * src/libical/icalcomponent.c (icalcomponent_end_component): Compile fix; use icalerror_check_arg_re so we can return an valid icalcompiter. (icalcomponent_begin_component): Same. 2000-08-24 Federico Mena Quintero * src/test/Makefile.am: Make it work. 2000-08-04 Eric Busboom * stow.c Changed stow to write data to a file ( icalfileset) not a calendar. Also added MIME parsing capability * sspm.c Core of the mime processor. Now handles quoted-printable and base64 encodings * icalmime.h New file that parses mime data and returns an icalcomponent that includes all of the parts. 2000-07-26 Eric Busboom * icaldirset.h misc bug fixes to get deleting components to work * icalcomponent.h Eliminated internal use of _get_first_component and _get_next_component, since these will reset the interal iterators. 2000-07-23 Eric Busboom * icalcomponent.h Added external iterators to icalcomponent for subcomponents: icalcompiter. These are still experimental, but they seem to work OK and have a nice syntax 2000-07-18 Eric Busboom * icalset This is a new "superclass" for icalstore, icalcluster, and others. It merges the interfaces of the old icalstore and icalcluster * icalstore.{c,h} CHanged name to icaldirset * icalcluster.{c,h} Changed name to icalfileset 2000-06-12 Eric Busboom * icalstow.c misc improvements and bug fixes to make it useful. 2000-06-09 Eric Busboom * icalrecur.c More extensive code changes for recurrence rule. * icalyacc.y Added support for integers in by day lists 2000-06-01 Eric Busboom * icalrecur.c moved recur code into new files 2000-05-30 Eric Busboom * icaltypes.c Extensive work on code to expand recurences * icaltypes.h Changed signature icaltimetype_from_timet to include is_utc flag. 2000-03-17 Eric Busboom * icalstore.c Vastly improved icalstore_test. 2000-03-16 Eric Busboom * icalcluster.c Added compile flag (ICAL_SAFESAVES) to switch how icalcluster saves files during commits. When the flag is define, it will write the data to a temorar file and rename the file to the target file. * storage.c Added seterate test suite for sotage components * icalparser.c Created parser object, implemented line-oriented parsering, and made message oriented parsing work in terms f line oriented parsing. * icalparser.c Fixed icalparser_get_line to remove \r in input. libical-1.0/configure0000775000076400007640000221261112141277621013652 0ustar allenallen#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for libical 1.00. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: http://freeassociation.sf.net/ about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libical' PACKAGE_TARNAME='libical' PACKAGE_VERSION='1.00' PACKAGE_STRING='libical 1.00' PACKAGE_BUGREPORT='http://freeassociation.sf.net/' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_default_prefix=/usr/local/libical ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS PY_CFLAGS HAVE_SWIG_FALSE HAVE_SWIG_TRUE swig_val HAVE_PYTHON_FALSE HAVE_PYTHON_TRUE pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_PLATFORM PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON WITH_JAVA_FALSE WITH_JAVA_TRUE JAVA_PLATFORM JAVAH JAVAC JAVA JAR WITH_CXX_BINDINGS_FALSE WITH_CXX_BINDINGS_TRUE PTHREAD_LIBS HAVE_PTHREAD_FALSE HAVE_PTHREAD_TRUE PERL DEV_FALSE DEV_TRUE WITH_BDB4_FALSE WITH_BDB4_TRUE BDB_VERSION BDB_LIB BDB_DIR_LIB BDB_DIR_INCLUDE BDB_DIR ZONE_INFO OS_WIN32_FALSE OS_WIN32_TRUE CXXCPP CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL LN_S LEXLIB LEX_OUTPUT_ROOT LEX am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC YFLAGS YACC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock with_builtintz with_bdb4 with_bdb4_dir with_backtrace with_devel enable_reentrant enable_icalerrors_are_fatal enable_cxx enable_java enable_python ' ac_precious_vars='build_alias host_alias target_alias YACC YFLAGS CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP CXXCPP PYTHON' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures libical 1.00 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/libical] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libical 1.00:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-reentrant define _REENTRANT to enable reentrant system calls --enable-icalerrors-are-fatal define ICAL_ERRORS_ARE_FATAL to make icalerror_* calls fatal --enable-cxx Enable C++ bindings --enable-java Enable Java bindings --enable-python Enable python bindings Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-builtintz deliver our own zonefiles? --with-bdb4 Add support for Berkeley DB 4.0 --with-bdb4-dir=PATH Use PATH as location of BerkeleyDB 4.0 --with-backtrace enable backtrace dumps in the syslog --with-devel Add development options Some influential environment variables: YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor CXXCPP C++ preprocessor PYTHON the Python interpreter Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF libical configure 1.00 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------------------- ## ## Report this to http://freeassociation.sf.net/ ## ## --------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libical $as_me 1.00, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- am__api_version='1.12' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='libical' VERSION='1.00' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ac_config_headers="$ac_config_headers config.h" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the system provides zonefiles or we should bring our own? " >&5 $as_echo_n "checking whether the system provides zonefiles or we should bring our own? ... " >&6; } case "$host" in *-mingw*) use_builtin_timezone=yes os_win32=yes ;; *linux*) use_builtin_timezone=no os_win32=no ;; *kfreebsd*-gnu*) use_builtin_timezone=no os_win32=no ;; *) use_builtin_timezone=yes os_win32=no ;; esac if test "$use_builtin_timezone" = "no" ; then if test ! -d /usr/share/zoneinfo; then use_builtin_timezone=yes fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_builtin_timezone" >&5 $as_echo "$use_builtin_timezone" >&6; } if test $os_win32 = yes; then OS_WIN32_TRUE= OS_WIN32_FALSE='#' else OS_WIN32_TRUE='#' OS_WIN32_FALSE= fi if test "x$os_win32" = "xyes"; then zoneinfo_dir="zoneinfo" fi # Check whether --with-builtintz was given. if test "${with_builtintz+set}" = set; then : withval=$with_builtintz; if test "x$withval" = "xyes" ; then use_builtin_timezone="yes" fi if test "x$withval" = "xno" ; then use_builtin_timezone="no" fi fi zoneinfodir="" if test "$use_builtin_timezone" = "yes"; then $as_echo "#define USE_BUILTIN_TZDATA /**/" >>confdefs.h zoneinfodir=zoneinfo fi ZONE_INFO="$zoneinfodir" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB4 support" >&5 $as_echo_n "checking for Berkeley DB4 support... " >&6; } # Check whether --with-bdb4 was given. if test "${with_bdb4+set}" = set; then : withval=$with_bdb4; case $with_bdb4 in yes) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Adding Berkeley DB support" >&5 $as_echo "Adding Berkeley DB support" >&6; } WITH_BDB4="yes" ;; no) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Ignoring unknown argument to --with-bdb4: $with_bdb4" >&5 $as_echo "Ignoring unknown argument to --with-bdb4: $with_bdb4" >&6; } ;; esac else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$WITH_BDB4 = xyes; then # Check whether --with-bdb4_dir was given. if test "${with_bdb4_dir+set}" = set; then : withval=$with_bdb4_dir; BDB_DIR=$withval else BDB_DIR=/usr/local/BerkeleyDB.4.0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB include files" >&5 $as_echo_n "checking for Berkeley DB include files... " >&6; } if test -f $BDB_DIR/include/db.h; then BDB_DIR_INCLUDE=$BDB_DIR/include { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDB_DIR_INCLUDE" >&5 $as_echo "$BDB_DIR_INCLUDE" >&6; } else if test -f $BDB_DIR/include/db4/db.h; then BDB_DIR_INCLUDE=$BDB_DIR/include/db4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDB_DIR_INCLUDE" >&5 $as_echo "$BDB_DIR_INCLUDE" >&6; } else WITH_BDB4="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found!" >&5 $as_echo "not found!" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB libraries" >&5 $as_echo_n "checking for Berkeley DB libraries... " >&6; } if test -f $BDB_DIR/lib/libdb-4.0.la; then BDB_DIR_LIB=$BDB_DIR/lib BDB_LIB=libdb-4.0.la { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDB_DIR_LIB $BDB_LIB" >&5 $as_echo "$BDB_DIR_LIB $BDB_LIB" >&6; } else if test -f $BDB_DIR/lib/libdb4.la; then BDB_DIR_LIB=$BDB_DIR/lib BDB_LIB=libdb4.la { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDB_DIR_LIB $BDB_LIB" >&5 $as_echo "$BDB_DIR_LIB $BDB_LIB" >&6; } else WITH_BDB4="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found!" >&5 $as_echo "not found!" >&6; } fi fi BDB_VERSION="4.0" fi if test x$WITH_BDB4 = xyes; then WITH_BDB4_TRUE= WITH_BDB4_FALSE='#' else WITH_BDB4_TRUE='#' WITH_BDB4_FALSE= fi # Check whether --with-backtrace was given. if test "${with_backtrace+set}" = set; then : withval=$with_backtrace; if test "x$withval" != "xno" ; then CFLAGS="$CFLAGS -rdynamic " LDFLAGS="$LDFLAGS -rdynamic " SERVER_LDFLAGS="$SERVER_LDFLAGS -rdynamic " for ac_func in backtrace do : ac_fn_c_check_func "$LINENO" "backtrace" "ac_cv_func_backtrace" if test "x$ac_cv_func_backtrace" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BACKTRACE 1 _ACEOF fi done fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support development" >&5 $as_echo_n "checking whether to support development... " >&6; } # Check whether --with-devel was given. if test "${with_devel+set}" = set; then : withval=$with_devel; case $with_devel in yes) DEV="yes" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting up for development: -Wall" >&5 $as_echo "Setting up for development: -Wall" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Note that you will need flex 2.5.7 or higher" >&5 $as_echo "** Note that you will need flex 2.5.7 or higher" >&6; } ;; no) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Ignoring unknown argument to --with-devel: $with_devel" >&5 $as_echo "Ignoring unknown argument to --with-devel: $with_devel" >&6; } ;; esac else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$DEV = xyes; then DEV_TRUE= DEV_FALSE='#' else DEV_TRUE='#' DEV_FALSE= fi for ac_prog in ar aal do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done test -n "$AR" || AR="ar" for ac_prog in perl5 perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PERL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PERL"; then ac_cv_prog_PERL="$PERL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PERL="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PERL=$ac_cv_prog_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PERL" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to define _REENTRANT" >&5 $as_echo_n "checking whether to define _REENTRANT... " >&6; } # Check whether --enable-reentrant was given. if test "${enable_reentrant+set}" = set; then : enableval=$enable_reentrant; case "${enableval}" in no) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ac_cv_reentrant=no ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define ICAL_REENTRANT /**/" >>confdefs.h CFLAGS="$CFLAGS -D_REENTRANT" ac_cv_reentrant=yes ;; esac else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if icalerrors_* calls should abort instead of internally signalling an error" >&5 $as_echo_n "checking if icalerrors_* calls should abort instead of internally signalling an error... " >&6; } # Check whether --enable-icalerrors-are-fatal was given. if test "${enable_icalerrors_are_fatal+set}" = set; then : enableval=$enable_icalerrors_are_fatal; case "${enableval}" in yes) ac_cv_ical_errors_are_fatal=yes ;; *) ac_cv_ical_errors_are_fatal=no ;; esac else ac_cv_ical_errors_are_fatal=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_ical_errors_are_fatal" >&5 $as_echo "$ac_cv_ical_errors_are_fatal" >&6; } if test "x$ac_cv_ical_errors_are_fatal" != "xyes"; then $as_echo "#define ICAL_ERRORS_ARE_FATAL 0" >>confdefs.h else $as_echo "#define ICAL_ERRORS_ARE_FATAL 1" >>confdefs.h fi $as_echo "#define NO_WARN_DEPRECATED 1" >>confdefs.h $as_echo "#define NO_WARN_ICAL_MALFORMEDDATA_ERROR_HACK 1" >>confdefs.h $as_echo "#define ICAL_UNIX_NEWLINE 1" >>confdefs.h $as_echo "#define ICAL_ALLOW_EMPTY_PROPERTIES 0" >>confdefs.h case "${host}" in *-*-freebsdelf4* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for pthread_create in -lpthread... -pthread (FreeBSD 4.x style)" >&5 $as_echo "checking for pthread_create in -lpthread... -pthread (FreeBSD 4.x style)" >&6; } $as_echo "#define HAVE_PTHREAD /**/" >>confdefs.h PTHREAD_LIBS=-pthread;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_create (); int main () { return pthread_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_create=yes else ac_cv_lib_pthread_pthread_create=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 $as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : have_pthread=yes fi if test "x$have_pthread" = xyes; then $as_echo "#define HAVE_PTHREAD /**/" >>confdefs.h PTHREAD_LIBS=-lpthread fi;; esac if test "$have_pthread" = "yes"; then HAVE_PTHREAD_TRUE= HAVE_PTHREAD_FALSE='#' else HAVE_PTHREAD_TRUE='#' HAVE_PTHREAD_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in assert.h ctype.h pthread.h stdint.h time.h sys/types.h unistd.h wctype.h endian.h sys/endian.h byteswap.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" if test "x$ac_cv_type_intptr_t" = xyes; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi for ac_func in gmtime_r isspace iswspace strdup snprintf unsetenv setenv do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Check whether --enable-cxx was given. if test "${enable_cxx+set}" = set; then : enableval=$enable_cxx; else enable_cxx="no" fi if test x$enable_cxx = "xyes"; then WITH_CXX_BINDINGS_TRUE= WITH_CXX_BINDINGS_FALSE='#' else WITH_CXX_BINDINGS_TRUE='#' WITH_CXX_BINDINGS_FALSE= fi if test "$prefix" = NONE; then cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "$ac_default_prefix/share/libical" _ACEOF ssl_dir="$ac_default_prefix/keys" else cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "$prefix/share/libical" _ACEOF fi # Check whether --enable-java was given. if test "${enable_java+set}" = set; then : enableval=$enable_java; else enable_java="no" fi if test "x$enable_java" = "xyes"; then # Extract the first word of "jar", so it can be a program name with args. set dummy jar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_JAR+:} false; then : $as_echo_n "(cached) " >&6 else case $JAR in [\\/]* | ?:[\\/]*) ac_cv_path_JAR="$JAR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="/usr/local/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_JAR" && ac_cv_path_JAR="/usr/local/bin/jar" ;; esac fi JAR=$ac_cv_path_JAR if test -n "$JAR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5 $as_echo "$JAR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "java", so it can be a program name with args. set dummy java; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_JAVA+:} false; then : $as_echo_n "(cached) " >&6 else case $JAVA in [\\/]* | ?:[\\/]*) ac_cv_path_JAVA="$JAVA" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="/usr/local/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_JAVA" && ac_cv_path_JAVA="/usr/local/bin/java" ;; esac fi JAVA=$ac_cv_path_JAVA if test -n "$JAVA"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 $as_echo "$JAVA" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "javac", so it can be a program name with args. set dummy javac; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_JAVAC+:} false; then : $as_echo_n "(cached) " >&6 else case $JAVAC in [\\/]* | ?:[\\/]*) ac_cv_path_JAVAC="$JAVAC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="/usr/local/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAVAC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_JAVAC" && ac_cv_path_JAVAC="/usr/local/bin/javac" ;; esac fi JAVAC=$ac_cv_path_JAVAC if test -n "$JAVAC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 $as_echo "$JAVAC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "javah", so it can be a program name with args. set dummy javah; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_JAVAH+:} false; then : $as_echo_n "(cached) " >&6 else case $JAVAH in [\\/]* | ?:[\\/]*) ac_cv_path_JAVAH="$JAVAH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="/usr/local/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAVAH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_JAVAH" && ac_cv_path_JAVAH="/usr/local/bin/javah" ;; esac fi JAVAH=$ac_cv_path_JAVAH if test -n "$JAVAH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAH" >&5 $as_echo "$JAVAH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case "${host}" in *-*-solaris*) JAVA_PLATFORM="solaris" ;; *-*-linux*) JAVA_PLATFORM="linux" ;; *-*-freebsd*) JAVA_PLATFORM="bsd" ;; *-*-aix*) JAVA_PLATFORM="aix" ;; *-sequent-*) JAVA_PLATFORM="ptx" ;; *-*-hpux*) JAVA_PLATFORM="hpux" ;; *-*-irix*) JAVA_PLATFORM="irix" ;; *-*-os390*) JAVA_PLATFORM="os390" ;; *-*-os400*) JAVA_PLATFORM="os400" ;; *-apple-darwin*|*-apple-rhapsody*) JAVA_PLATFORM="darwin" ;; *) JAVA_PLATFORM="unknown" ;; esac fi enable_java=no if test x$enable_java = "xyes"; then WITH_JAVA_TRUE= WITH_JAVA_FALSE='#' else WITH_JAVA_TRUE='#' WITH_JAVA_FALSE= fi python_val=false # Check whether --enable-python was given. if test "${enable_python+set}" = set; then : enableval=$enable_python; else enable_python="no" fi if test "x$enable_python" = "xyes"; then if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.3" >&5 $as_echo_n "checking whether $PYTHON version is >= 2.3... " >&6; } prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.3'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 ($PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Python interpreter is too old" "$LINENO" 5 fi am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.3" >&5 $as_echo_n "checking for a Python interpreter with version >= 2.3... " >&6; } if ${am_cv_pathless_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else for am_cv_pathless_PYTHON in python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do test "$am_cv_pathless_PYTHON" = none && break prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.3'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 $as_echo "$am_cv_pathless_PYTHON" >&6; } # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. set dummy $am_cv_pathless_PYTHON; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi am_display_PYTHON=$am_cv_pathless_PYTHON fi if test "$PYTHON" = :; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 $as_echo_n "checking for $am_display_PYTHON version... " >&6; } if ${am_cv_python_version+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version PYTHON_PREFIX='${prefix}' PYTHON_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; } if ${am_cv_python_platform+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 $as_echo "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } if ${am_cv_python_pythondir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 $as_echo "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } if ${am_cv_python_pyexecdir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 $as_echo "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi if test "$PYTHON" != :; then HAVE_PYTHON_TRUE= HAVE_PYTHON_FALSE='#' else HAVE_PYTHON_TRUE='#' HAVE_PYTHON_FALSE= fi # Extract the first word of "swig", so it can be a program name with args. set dummy swig; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_swig_val+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$swig_val"; then ac_cv_prog_swig_val="$swig_val" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_swig_val="true" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_swig_val" && ac_cv_prog_swig_val="false" fi fi swig_val=$ac_cv_prog_swig_val if test -n "$swig_val"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $swig_val" >&5 $as_echo "$swig_val" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$swig_val" = "xtrue"; then HAVE_SWIG_TRUE= HAVE_SWIG_FALSE='#' else HAVE_SWIG_TRUE='#' HAVE_SWIG_FALSE= fi PY_PREFIX=`$PYTHON -c 'import sys ; print sys.prefix'` as_ac_Header=`$as_echo "ac_cv_header_python$PYTHON_VERSION/Python.h" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "python$PYTHON_VERSION/Python.h" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : else as_fn_error $? "Can't find python header files" "$LINENO" 5 fi if test -f "$PY_PREFIX/include/python$PYTHON_VERSION/Python.h"; then PY_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION" # SWIG needs PIC in order to work. CFLAGS="$CFLAGS -fPIC" fi ac_config_files="$ac_config_files src/python/Makefile" else if false; then HAVE_PYTHON_TRUE= HAVE_PYTHON_FALSE='#' else HAVE_PYTHON_TRUE='#' HAVE_PYTHON_FALSE= fi if false; then HAVE_SWIG_TRUE= HAVE_SWIG_FALSE='#' else HAVE_SWIG_TRUE='#' HAVE_SWIG_FALSE= fi fi if test "$use_builtin_timezone" = "yes"; then ac_config_files="$ac_config_files zoneinfo/Makefile" fi ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files design-data/Makefile" ac_config_files="$ac_config_files doc/Makefile" ac_config_files="$ac_config_files examples/Makefile" ac_config_files="$ac_config_files scripts/Makefile" ac_config_files="$ac_config_files src/Makefile" ac_config_files="$ac_config_files src/libical/Makefile" ac_config_files="$ac_config_files src/libical/icalversion.h" ac_config_files="$ac_config_files src/libical/icalerror.h" ac_config_files="$ac_config_files src/libicalss/Makefile" ac_config_files="$ac_config_files src/libicalvcal/Makefile" ac_config_files="$ac_config_files src/test/Makefile" ac_config_files="$ac_config_files test-data/Makefile" ac_config_files="$ac_config_files libical.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then as_fn_error $? "conditional \"OS_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_BDB4_TRUE}" && test -z "${WITH_BDB4_FALSE}"; then as_fn_error $? "conditional \"WITH_BDB4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DEV_TRUE}" && test -z "${DEV_FALSE}"; then as_fn_error $? "conditional \"DEV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PTHREAD_TRUE}" && test -z "${HAVE_PTHREAD_FALSE}"; then as_fn_error $? "conditional \"HAVE_PTHREAD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_CXX_BINDINGS_TRUE}" && test -z "${WITH_CXX_BINDINGS_FALSE}"; then as_fn_error $? "conditional \"WITH_CXX_BINDINGS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_JAVA_TRUE}" && test -z "${WITH_JAVA_FALSE}"; then as_fn_error $? "conditional \"WITH_JAVA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SWIG_TRUE}" && test -z "${HAVE_SWIG_FALSE}"; then as_fn_error $? "conditional \"HAVE_SWIG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SWIG_TRUE}" && test -z "${HAVE_SWIG_FALSE}"; then as_fn_error $? "conditional \"HAVE_SWIG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by libical $as_me 1.00, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ libical config.status 1.00 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "src/python/Makefile") CONFIG_FILES="$CONFIG_FILES src/python/Makefile" ;; "zoneinfo/Makefile") CONFIG_FILES="$CONFIG_FILES zoneinfo/Makefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "design-data/Makefile") CONFIG_FILES="$CONFIG_FILES design-data/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/libical/Makefile") CONFIG_FILES="$CONFIG_FILES src/libical/Makefile" ;; "src/libical/icalversion.h") CONFIG_FILES="$CONFIG_FILES src/libical/icalversion.h" ;; "src/libical/icalerror.h") CONFIG_FILES="$CONFIG_FILES src/libical/icalerror.h" ;; "src/libicalss/Makefile") CONFIG_FILES="$CONFIG_FILES src/libicalss/Makefile" ;; "src/libicalvcal/Makefile") CONFIG_FILES="$CONFIG_FILES src/libicalvcal/Makefile" ;; "src/test/Makefile") CONFIG_FILES="$CONFIG_FILES src/test/Makefile" ;; "test-data/Makefile") CONFIG_FILES="$CONFIG_FILES test-data/Makefile" ;; "libical.pc") CONFIG_FILES="$CONFIG_FILES libical.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi libical-1.0/config.sub0000755000076400007640000010532712141277762013735 0ustar allenallen#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-04-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libical-1.0/libical.pc.in0000664000076400007640000000044212132563136014265 0ustar allenallenprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ threadslib=@PTHREAD_LIBS@ Name: libical Description: An implementation of basic iCAL protocols Version: @VERSION@ Libs: -L${libdir} -lical -licalss -licalvcal ${threadslib} Cflags: -I${includedir} libical-1.0/cmake/0000775000076400007640000000000012132563124013012 5ustar allenallenlibical-1.0/cmake/modules/0000775000076400007640000000000012132563124014462 5ustar allenallenlibical-1.0/cmake/modules/FindGObjectIntrospection.cmake0000664000076400007640000000376512132563124022376 0ustar allenallen# - try to find gobject-introspection # # Once done this will define # # INTROSPECTION_FOUND - system has gobject-introspection # INTROSPECTION_SCANNER - the gobject-introspection scanner, g-ir-scanner # INTROSPECTION_COMPILER - the gobject-introspection compiler, g-ir-compiler # INTROSPECTION_GENERATE - the gobject-introspection generate, g-ir-generate # INTROSPECTION_GIRDIR # INTROSPECTION_TYPELIBDIR # INTROSPECTION_CFLAGS # INTROSPECTION_LIBS # # Copyright (C) 2010, Pino Toscano, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=${_varname} gobject-introspection-1.0 OUTPUT_VARIABLE _result RESULT_VARIABLE _null ) if (_null) else() string(REGEX REPLACE "[\r\n]" " " _result "${_result}") string(REGEX REPLACE " +$" "" _result "${_result}") separate_arguments(_result) set(${_outvar} ${_result} CACHE INTERNAL "") endif() endmacro(_GIR_GET_PKGCONFIG_VAR) find_package(PkgConfig) if(PKG_CONFIG_FOUND) if(PACKAGE_FIND_VERSION_COUNT GREATER 0) set(_gir_version_cmp ">=${PACKAGE_FIND_VERSION}") endif() pkg_check_modules(_pc_gir gobject-introspection-1.0${_gir_version_cmp}) if(_pc_gir_FOUND) set(INTROSPECTION_FOUND TRUE) _gir_get_pkgconfig_var(INTROSPECTION_SCANNER "g_ir_scanner") _gir_get_pkgconfig_var(INTROSPECTION_COMPILER "g_ir_compiler") _gir_get_pkgconfig_var(INTROSPECTION_GENERATE "g_ir_generate") _gir_get_pkgconfig_var(INTROSPECTION_GIRDIR "girdir") _gir_get_pkgconfig_var(INTROSPECTION_TYPELIBDIR "typelibdir") set(INTROSPECTION_CFLAGS "${_pc_gir_CFLAGS}") set(INTROSPECTION_LIBS "${_pc_gir_LIBS}") endif() endif() mark_as_advanced( INTROSPECTION_SCANNER INTROSPECTION_COMPILER INTROSPECTION_GENERATE INTROSPECTION_GIRDIR INTROSPECTION_TYPELIBDIR INTROSPECTION_CFLAGS INTROSPECTION_LIBS ) libical-1.0/cmake/modules/FindWcecompat.cmake0000664000076400007640000000223512132563124020211 0ustar allenallen# Try to find Wcecompat functionality # Once done this will define # # WCECOMPAT_FOUND - system has Wcecompat # WCECOMPAT_INCLUDE_DIR - Wcecompat include directory # WCECOMPAT_LIBRARIES - Libraries needed to use Wcecompat # # Copyright (c) 2010, Andreas Holzammer, # # Redistribution and use is allowed according to the terms of the BSD license. if(WCECOMPAT_INCLUDE_DIR AND WCECOMPAT_LIB_FOUND) set(Wcecompat_FIND_QUIETLY TRUE) endif(WCECOMPAT_INCLUDE_DIR AND WCECOMPAT_LIB_FOUND) find_path(WCECOMPAT_INCLUDE_DIR errno.h PATH_SUFFIXES wcecompat) set(WCECOMPAT_LIB_FOUND FALSE) if(WCECOMPAT_INCLUDE_DIR) find_library(WCECOMPAT_LIBRARIES NAMES wcecompat wcecompatex ) if(WCECOMPAT_LIBRARIES) set(WCECOMPAT_LIB_FOUND TRUE) endif(WCECOMPAT_LIBRARIES) endif(WCECOMPAT_INCLUDE_DIR) # I have no idea what this is about, but it seems to be used quite often, so I add this here set(WCECOMPAT_CONST const) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Wcecompat DEFAULT_MSG WCECOMPAT_LIBRARIES WCECOMPAT_LIB_FOUND) mark_as_advanced(WCECOMPAT_INCLUDE_DIR WCECOMPAT_LIBRARIES WCECOMPAT_CONST WCECOMPAT_LIB_FOUND) libical-1.0/cmake/modules/GObjectIntrospectionMacros.cmake0000664000076400007640000000666412132563124022743 0ustar allenallen# Copyright (C) 2010, Pino Toscano, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(_gir_list_prefix _outvar _listvar _prefix) set(${_outvar}) foreach(_item IN LISTS ${_listvar}) list(APPEND ${_outvar} ${_prefix}${_item}) endforeach() endmacro(_gir_list_prefix) macro(gir_add_introspections introspections_girs) set(_gir_girs) set(_gir_typelibs) foreach(gir IN LISTS ${introspections_girs}) set(_gir_name "${gir}") ## Transform the gir filename to something which can reference through a variable ## without automake/make complaining, eg Gtk-2.0.gir -> Gtk_2_0_gir string(REPLACE "-" "_" _gir_name "${_gir_name}") string(REPLACE "." "_" _gir_name "${_gir_name}") # Namespace and Version is either fetched from the gir filename # or the _NAMESPACE/_VERSION variable combo set(_gir_namespace "${${_gir_name}_NAMESPACE}") if (_gir_namespace STREQUAL "") string(REGEX REPLACE "([^-]+)-.*" "\\1" _gir_namespace "${gir}") endif () set(_gir_version "${${_gir_name}_VERSION}") if (_gir_version STREQUAL "") string(REGEX REPLACE ".*-([^-]+).gir" "\\1" _gir_version "${gir}") endif () # _PROGRAM is an optional variable which needs it's own --program argument set(_gir_program "${${_gir_name}_PROGRAM}") if (NOT _gir_program STREQUAL "") set(_gir_program "--program=${_gir_program}") endif () # Variables which provides a list of things _gir_list_prefix(_gir_libraries ${_gir_name}_LIBS "--library=") _gir_list_prefix(_gir_packages ${_gir_name}_PACKAGES "--pkg=") _gir_list_prefix(_gir_includes ${_gir_name}_INCLUDES "--include=") # Reuse the LIBTOOL variable from by automake if it's set set(_gir_libtool "--no-libtool") add_custom_command( COMMAND ${INTROSPECTION_SCANNER} ${INTROSPECTION_SCANNER_ARGS} --namespace=${_gir_namespace} --nsversion=${_gir_version} ${_gir_libtool} ${_gir_program} ${_gir_libraries} ${_gir_packages} ${_gir_includes} ${${_gir_name}_SCANNERFLAGS} ${${_gir_name}_CFLAGS} ${${_gir_name}_FILES} --output ${CMAKE_CURRENT_BINARY_DIR}/${gir} --accept-unprefixed DEPENDS ${${_gir_name}_FILES} ${${_gir_name}_LIBS} OUTPUT ${gir} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} VERBATIM ) list(APPEND _gir_girs ${CMAKE_CURRENT_BINARY_DIR}/${gir}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${gir} DESTINATION share/gir-1.0) string(REPLACE ".gir" ".typelib" _typelib "${gir}") add_custom_command( COMMAND ${INTROSPECTION_COMPILER} ${INTROSPECTION_COMPILER_ARGS} --includedir=. ${CMAKE_CURRENT_BINARY_DIR}/${gir} -o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${gir} OUTPUT ${_typelib} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) list(APPEND _gir_typelibs ${CMAKE_CURRENT_BINARY_DIR}/${_typelib}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DESTINATION lib${LIB_SUFFIX}/girepository-1.0) endforeach() add_custom_target(gir-girs ALL DEPENDS ${_gir_girs}) add_custom_target(gir-typelibs ALL DEPENDS ${_gir_typelibs}) endmacro(gir_add_introspections) libical-1.0/ltmain.sh0000755000076400007640000073306012141277566013600 0ustar allenallen# Generated from ltmain.m4sh. # ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print informational messages (default) # --version print version information # -h, --help print short or long help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.2.6b # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=ltmain.sh PACKAGE=libtool VERSION=2.2.6b TIMESTAMP="" package_revision=1.3017 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # NLS nuisances: We save the old values to restore during execute mode. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done $lt_unset CDPATH : ${CP="cp -f"} : ${ECHO="echo"} : ${EGREP="/bin/grep -E"} : ${FGREP="/bin/grep -F"} : ${GREP="/bin/grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="/bin/sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # Generated shell functions inserted here. # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: # In the unlikely event $progname began with a '-', it would play havoc with # func_echo (imagine progname=-n), so we prepend ./ in that case: func_dirname_and_basename "$progpath" progname=$func_basename_result case $progname in -*) progname=./$progname ;; esac # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname${mode+: }$mode: $*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` done my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "X$my_tmpdir" | $Xsed } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "X$1" | $Xsed \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_version # Echo version message to standard output and exit. func_version () { $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $SED -n '/^# Usage:/,/# -h/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" $ECHO $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help # Echo long help message to standard output and exit. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p }' < "$progpath" exit $? } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1" exit_cmd=exit } exit_cmd=: # Check that we have a working $ECHO. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then # Yippee, $ECHO works! : else # Restart under the correct shell, and then maybe $ECHO will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 in # Valid mode arguments: clean) ;; compile) ;; execute) ;; finish) ;; install) ;; link) ;; relink) ;; uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } ## ----------- ## ## Main. ## ## ----------- ## $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$mode' for more information." } # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case "$@ " in " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command="$command -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$mode'" ;; esac $ECHO $ECHO "Try \`$progname --help' for more information about other modes." exit $? } # Now that we've collected a possible --mode arg, show help if necessary $opt_help && func_mode_help # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_quote_for_eval "$file" args="$args $func_quote_for_eval_result" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" $ECHO "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS $ECHO "X----------------------------------------------------------------------" | $Xsed $ECHO "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done $ECHO $ECHO "If you ever happen to want to link against installed libraries" $ECHO "in a given directory, LIBDIR, you must either use libtool, and" $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" $ECHO "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" $ECHO " during execution" fi if test -n "$runpath_var"; then $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" $ECHO " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $ECHO $ECHO "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" $ECHO "pages." ;; *) $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac $ECHO "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS } test "$mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $ECHO "X$nonopt" | $GREP shtool >/dev/null; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog="$install_prog$func_quote_for_eval_result" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_prog $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" fi $ECHO >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; " case $host in *cygwin* | *mingw* | *cegcc* ) $ECHO >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ extern $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags="$symtab_cflags $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper_part1 [arg=no] # # Emit the first part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part1 () { func_emit_wrapper_part1_arg1=no if test -n "$1" ; then func_emit_wrapper_part1_arg1=$1 fi $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then ECHO=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then # Yippee, \$ECHO works! : else # Restart under the correct shell, and then maybe \$ECHO will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $ECHO "\ # Find the directory that this script lives in. thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done " } # end: func_emit_wrapper_part1 # func_emit_wrapper_part2 [arg=no] # # Emit the second part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part2 () { func_emit_wrapper_part2_arg1=no if test -n "$1" ; then func_emit_wrapper_part2_arg1=$1 fi $ECHO "\ # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # end: func_emit_wrapper_part2 # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=no if test -n "$1" ; then func_emit_wrapper_arg1=$1 fi # split this up so that func_emit_cwrapperexe_src # can call each part independently. func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_path_tmp1=`( cmd //c echo "$1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_tmp1=`cygpath -w "$1"` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result="" fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # Path separators are also converted from $build format to # $host format. If ARG begins or ends with a path separator # character, it is preserved (but converted to $host format) # on output. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_to_host_pathlist_tmp2="$1" # Once set for this call, this variable should not be # reassigned. It is used in tha fallback case. func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e 's|^:*||' -e 's|:*$||'` case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" fi fi fi IFS=: done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result" ; then func_error "Could not determine the host path(s) corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" ;; esac ;; esac fi } # end: func_to_host_pathlist # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include # define setmode _setmode #else # include # include # ifdef __CYGWIN__ # include # define HAVE_SETENV # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif # endif #endif #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif #ifdef _MSC_VER # define S_IXUSR _S_IEXEC # define stat _stat # ifndef _INTPTR_T_DEFINED # define intptr_t int # endif #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifdef __CYGWIN__ # define FOPEN_WB "wb" #endif #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #undef LTWRAPPER_DEBUGPRINTF #if defined DEBUGWRAPPER # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args static void ltwrapper_debugprintf (const char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } #else # define LTWRAPPER_DEBUGPRINTF(args) #endif const char *program_name = NULL; void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_fatal (const char *message, ...); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_opt_process_env_set (const char *arg); void lt_opt_process_env_prepend (const char *arg); void lt_opt_process_env_append (const char *arg); int lt_split_name_value (const char *arg, char** name, char** value); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); static const char *script_text_part1 = EOF func_emit_wrapper_part1 yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ "/' -e 's/$/\\n"/' echo ";" cat <"))); for (i = 0; i < newargc; i++) { LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", tmp_pathspec)); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { char *errstr = strerror (errno); lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal ("Could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } void lt_setenv (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", (name ? name : ""), (value ? value : ""))); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } int lt_split_name_value (const char *arg, char** name, char** value) { const char *p; int len; if (!arg || !*arg) return 1; p = strchr (arg, (int)'='); if (!p) return 1; *value = xstrdup (++p); len = strlen (arg) - strlen (*value); *name = XMALLOC (char, len); strncpy (*name, arg, len-1); (*name)[len - 1] = '\0'; return 0; } void lt_opt_process_env_set (const char *arg) { char *name = NULL; char *value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); } lt_setenv (name, value); XFREE (name); XFREE (value); } void lt_opt_process_env_prepend (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); } new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_opt_process_env_append (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); } new_value = lt_extend_str (getenv (name), value, 1); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_update_exe_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF } # end: func_emit_cwrapperexe_src # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs="$deplibs $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname '-L' '' "$arg" dir=$func_stripname_result if test -z "$dir"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$linker_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$deplibs $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $ECHO $ECHO "*** Warning: Trying to link with static lib archive $deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because the file extensions .$libext of this argument makes me believe" $ECHO "*** that it is just a static archive that I should not use here." else $ECHO $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath="$temp_rpath$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then $ECHO if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $ECHO $ECHO "*** And there doesn't seem to be a static archive available" $ECHO "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $ECHO $ECHO "*** Warning: This system can not link to static lib archive $lib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $ECHO "*** But as you try to build a module library, libtool will still create " $ECHO "*** a static module, that should work as long as the dlopening application" $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) func_dirname "$deplib" "" "." dir="$func_dirname_result" # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else $ECHO $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` done fi if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | $GREP . >/dev/null; then $ECHO if test "X$deplibs_check_method" = "Xnone"; then $ECHO "*** Warning: inter-library dependencies are not supported in this platform." else $ECHO "*** Warning: inter-library dependencies are not known to be supported." fi $ECHO "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $ECHO $ECHO "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" $ECHO "*** a static module, that should work as long as the dlopening" $ECHO "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $ECHO "*** The inter-library dependencies that have been dropped here will be" $ECHO "*** automatically added whenever a program is linked with this library" $ECHO "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $ECHO $ECHO "*** Since this library must not contain undefined symbols," $ECHO "*** because either the platform does not support them or" $ECHO "*** it was explicitly requested with -no-undefined," $ECHO "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles="$delfiles $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$ECHO "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" $ECHO 'INPUT (' > $output for obj in $save_libobjs do $ECHO "$obj" >> $output done $ECHO ')' >> $output delfiles="$delfiles $output" elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=$obj func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$delfiles $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *cegcc) # Disable wrappers for cegcc, we are cross compiling anyway. wrappers_required=no ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $ECHO for shipping. if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$oldobjs $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else $ECHO "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$newdlfiles $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles="$newdlprefiles $libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$mode" = link || test "$mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles="$rmfiles $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 libical-1.0/zoneinfo/0000775000076400007640000000000012141277614013567 5ustar allenallenlibical-1.0/zoneinfo/zones.tab0000664000076400007640000003410612132563134015414 0ustar allenallen+0051900 -0040200 Africa/Abidjan +0053300 +0001300 Africa/Accra +0090200 +0384200 Africa/Addis_Ababa +0364700 +0030300 Africa/Algiers +0152000 +0385300 Africa/Asmara +0123900 -0080000 Africa/Bamako +0042200 +0183500 Africa/Bangui +0132800 -0163900 Africa/Banjul +0115100 -0153500 Africa/Bissau -0154700 +0350000 Africa/Blantyre -0041600 +0151700 Africa/Brazzaville -0032300 +0292200 Africa/Bujumbura +0300300 +0311500 Africa/Cairo +0333900 -0073500 Africa/Casablanca +0355300 -0051900 Africa/Ceuta +0093100 -0134300 Africa/Conakry +0144000 -0172600 Africa/Dakar -0064800 +0391700 Africa/Dar_es_Salaam +0113600 +0430900 Africa/Djibouti +0040300 +0094200 Africa/Douala +0270900 -0131200 Africa/El_Aaiun +0083000 -0131500 Africa/Freetown -0254500 +0255500 Africa/Gaborone -0175000 +0310300 Africa/Harare -0261500 +0280000 Africa/Johannesburg +0045100 +0313600 Africa/Juba.ics +0001900 +0322500 Africa/Kampala +0153600 +0323200 Africa/Khartoum -0015700 +0300400 Africa/Kigali -0041800 +0151800 Africa/Kinshasa +0062700 +0032400 Africa/Lagos +0002300 +0092700 Africa/Libreville +0060800 +0011300 Africa/Lome -0084800 +0131400 Africa/Luanda -0114000 +0272800 Africa/Lubumbashi -0152500 +0281700 Africa/Lusaka +0034500 +0084700 Africa/Malabo -0255800 +0323500 Africa/Maputo -0292800 +0273000 Africa/Maseru -0261800 +0310600 Africa/Mbabane +0020400 +0452200 Africa/Mogadishu +0061800 -0104700 Africa/Monrovia -0011700 +0364900 Africa/Nairobi +0120700 +0150300 Africa/Ndjamena +0133100 +0020700 Africa/Niamey +0180600 -0155700 Africa/Nouakchott +0122200 -0013100 Africa/Ouagadougou +0062900 +0023700 Africa/Porto-Novo +0002000 +0064400 Africa/Sao_Tome +0325400 +0131100 Africa/Tripoli +0364800 +0101100 Africa/Tunis -0223400 +0170600 Africa/Windhoek +0515248 -1763929 America/Adak +0611305 -1495401 America/Anchorage +0181200 -0630400 America/Anguilla +0170300 -0614800 America/Antigua -0071200 -0481200 America/Araguaina -0343600 -0582700 America/Argentina/Buenos_Aires -0282800 -0654700 America/Argentina/Catamarca -0312400 -0641100 America/Argentina/Cordoba -0241100 -0651800 America/Argentina/Jujuy -0292600 -0665100 America/Argentina/La_Rioja -0325300 -0684900 America/Argentina/Mendoza -0513800 -0691300 America/Argentina/Rio_Gallegos -0313200 -0683100 America/Argentina/San_Juan -0264900 -0651300 America/Argentina/Tucuman -0544800 -0681800 America/Argentina/Ushuaia +0123000 -0685800 America/Aruba -0251600 -0574000 America/Asuncion +0484531 -0913718 America/Atikokan -0125900 -0383100 America/Bahia -0125900 -0383100 America/Bahia_Banderas +0130600 -0593700 America/Barbados -0012700 -0482900 America/Belem +0173000 -0881200 America/Belize +0512500 -0570700 America/Blanc-Sablon +0024900 -0604000 America/Boa_Vista +0043600 -0740500 America/Bogota +0433649 -1161209 America/Boise +0690300 -1050500 America/Cambridge_Bay -0202700 -0543700 America/Campo_Grande +0210500 -0864600 America/Cancun +0103000 -0665600 America/Caracas +0045600 -0522000 America/Cayenne +0191800 -0812300 America/Cayman +0415100 -0873900 America/Chicago +0283800 -1060500 America/Chihuahua +0095600 -0840500 America/Costa_Rica +0490600 -1163100 America/Creston -0153500 -0560500 America/Cuiaba +0121100 -0690000 America/Curacao +0764600 -0184000 America/Danmarkshavn +0640400 -1392500 America/Dawson +0594600 -1201400 America/Dawson_Creek +0394421 -1045903 America/Denver +0421953 -0830245 America/Detroit +0151800 -0612400 America/Dominica +0533300 -1132800 America/Edmonton -0064000 -0695200 America/Eirunepe +0134200 -0891200 America/El_Salvador -0034300 -0383000 America/Fortaleza +0461200 -0595700 America/Glace_Bay +0641100 -0514400 America/Godthab +0532000 -0602500 America/Goose_Bay +0212800 -0710800 America/Grand_Turk +0120300 -0614500 America/Grenada +0161400 -0613200 America/Guadeloupe +0143800 -0903100 America/Guatemala -0021000 -0795000 America/Guayaquil +0064800 -0581000 America/Guyana +0443900 -0633600 America/Halifax +0230800 -0822200 America/Havana +0290400 -1105800 America/Hermosillo +0394606 -0860929 America/Indiana/Indianapolis +0411745 -0863730 America/Indiana/Knox +0382232 -0862041 America/Indiana/Marengo +0382931 -0871643 America/Indiana/Petersburg +0375711 -0864541 America/Indiana/Tell_City +0384452 -0850402 America/Indiana/Vevay +0384038 -0873143 America/Indiana/Vincennes +0410305 -0863611 America/Indiana/Winamac +0682059 -1334300 America/Inuvik +0634400 -0682800 America/Iqaluit +0180000 -0764800 America/Jamaica +0581807 -1342511 America/Juneau +0381515 -0854534 America/Kentucky/Louisville +0364947 -0845057 America/Kentucky/Monticello -0163000 -0680900 America/La_Paz -0120300 -0770300 America/Lima +0340308 -1181434 America/Los_Angeles -0094000 -0354300 America/Maceio +0120900 -0861700 America/Managua -0030800 -0600100 America/Manaus +0180400 -0630500 America/Marigot +0143600 -0610500 America/Martinique +0255000 -0973000 America/Matamoros +0231300 -1062500 America/Mazatlan +0450628 -0873651 America/Menominee +0205800 -0893700 America/Merida +0550737 -1313435 America/Metlakatla +0192400 -0990900 America/Mexico_City +0470300 -0562000 America/Miquelon +0460600 -0644700 America/Moncton +0254000 -1001900 America/Monterrey -0345300 -0561100 America/Montevideo +0453100 -0733400 America/Montreal +0164300 -0621300 America/Montserrat +0250500 -0772100 America/Nassau +0404251 -0740023 America/New_York +0490100 -0881600 America/Nipigon +0643004 -1652423 America/Nome -0035100 -0322500 America/Noronha +0471551 -1014640 America/North_Dakota/Beulah +0470659 -1011757 America/North_Dakota/Center +0465042 -1012439 America/North_Dakota/New_Salem +0293400 -1042500 America/Ojinaga +0085800 -0793200 America/Panama +0660800 -0654400 America/Pangnirtung +0055000 -0551000 America/Paramaribo +0332654 -1120424 America/Phoenix +0183200 -0722000 America/Port-au-Prince +0103900 -0613100 America/Port_of_Spain -0084600 -0635400 America/Porto_Velho +0182806 -0660622 America/Puerto_Rico +0484300 -0943400 America/Rainy_River +0624900 -0920459 America/Rankin_Inlet -0080300 -0345400 America/Recife +0502400 -1043900 America/Regina +0744144 -0944945 America/Resolute -0095800 -0674800 America/Rio_Branco -0332700 -0704000 America/Santiago +0301800 -1145200 America/Santa_Isabel +0182800 -0695400 America/Santo_Domingo -0233200 -0463700 America/Sao_Paulo +0702900 -0215800 America/Scoresbysund +0364708 -1084111 America/Shiprock +0571035 -1351807 America/Sitka +0175300 -0625100 America/St_Barthelemy +0473400 -0524300 America/St_Johns +0171800 -0624300 America/St_Kitts +0140100 -0610000 America/St_Lucia +0182100 -0645600 America/St_Thomas +0130900 -0611400 America/St_Vincent +0501700 -1075000 America/Swift_Current +0140600 -0871300 America/Tegucigalpa +0763400 -0684700 America/Thule +0482300 -0891500 America/Thunder_Bay +0323200 -1170100 America/Tijuana +0433900 -0792300 America/Toronto +0182700 -0643700 America/Tortola +0491600 -1230700 America/Vancouver +0604300 -1350300 America/Whitehorse +0495300 -0970900 America/Winnipeg +0593249 -1394338 America/Yakutat +0622700 -1142100 America/Yellowknife -0661700 +1103100 Antarctica/Casey -0683500 +0775800 Antarctica/Davis -0664000 +1400100 Antarctica/DumontDUrville -0543000 +1585700 Antarctica/Macquarie -0673600 +0625300 Antarctica/Mawson -0775000 +1663600 Antarctica/McMurdo -0644800 -0640600 Antarctica/Palmer -0673400 -0680800 Antarctica/Rothera -0900000 +0000000 Antarctica/South_Pole -0690022 +0393524 Antarctica/Syowa -0782400 +1065400 Antarctica/Vostok +0780000 +0160000 Arctic/Longyearbyen +0124500 +0451200 Asia/Aden +0431500 +0765700 Asia/Almaty +0315700 +0355600 Asia/Amman +0644500 +1772900 Asia/Anadyr +0443100 +0501600 Asia/Aqtau +0501700 +0571000 Asia/Aqtobe +0375700 +0582300 Asia/Ashgabat +0332100 +0442500 Asia/Baghdad +0262300 +0503500 Asia/Bahrain +0402300 +0495100 Asia/Baku +0134500 +1003100 Asia/Bangkok +0335300 +0353000 Asia/Beirut +0425400 +0743600 Asia/Bishkek +0045600 +1145500 Asia/Brunei +0223200 +0882200 Asia/Calcutta +0480400 +1143000 Asia/Choibalsan +0293400 +1063500 Asia/Chongqing +0065600 +0795100 Asia/Colombo +0333000 +0361800 Asia/Damascus +0234300 +0902500 Asia/Dhaka -0083300 +1253500 Asia/Dili +0251800 +0551800 Asia/Dubai +0383500 +0684800 Asia/Dushanbe +0313000 +0342800 Asia/Gaza +0454500 +1264100 Asia/Harbin +0313200 +0350542 Asia/Hebron +0104500 +1064000 Asia/Ho_Chi_Minh +0221700 +1140900 Asia/Hong_Kong +0480100 +0913900 Asia/Hovd +0521600 +1042000 Asia/Irkutsk +0410100 +0285800 Asia/Istanbul -0061000 +1064800 Asia/Jakarta -0023200 +1404200 Asia/Jayapura +0314600 +0351400 Asia/Jerusalem +0343100 +0691200 Asia/Kabul +0530100 +1583900 Asia/Kamchatka +0245200 +0670300 Asia/Karachi +0392900 +0755900 Asia/Kashgar +0274300 +0851900 Asia/Kathmandu +0274300 +0851900 Asia/Katmandu +0223200 +0882200 Asia/Kolkata +0560100 +0925000 Asia/Krasnoyarsk +0031000 +1014200 Asia/Kuala_Lumpur +0013300 +1102000 Asia/Kuching +0292000 +0475900 Asia/Kuwait +0221400 +1133500 Asia/Macau +0593400 +1504800 Asia/Magadan -0050700 +1192400 Asia/Makassar +0143500 +1210000 Asia/Manila +0233600 +0583500 Asia/Muscat +0351000 +0332200 Asia/Nicosia +0534500 +0870700 Asia/Novokuznetsk +0550200 +0825500 Asia/Novosibirsk +0550000 +0732400 Asia/Omsk +0511300 +0512100 Asia/Oral +0113300 +1045500 Asia/Phnom_Penh +0000200 +1092000 Asia/Pontianak +0390100 +1254500 Asia/Pyongyang +0251700 +0513200 Asia/Qatar +0444800 +0652800 Asia/Qyzylorda +0164700 +0961000 Asia/Rangoon +0243800 +0464300 Asia/Riyadh +0104500 +1064000 Asia/Saigon +0465800 +1424200 Asia/Sakhalin +0394000 +0664800 Asia/Samarkand +0373300 +1265800 Asia/Seoul +0311400 +1212800 Asia/Shanghai +0011700 +1035100 Asia/Singapore +0250300 +1213000 Asia/Taipei +0412000 +0691800 Asia/Tashkent +0414300 +0444900 Asia/Tbilisi +0354000 +0512600 Asia/Tehran +0272800 +0893900 Asia/Thimphu +0353916 +1394441 Asia/Tokyo +0475500 +1065300 Asia/Ulaanbaatar +0434800 +0873500 Asia/Urumqi +0175800 +1023600 Asia/Vientiane +0431000 +1315600 Asia/Vladivostok +0620000 +1294000 Asia/Yakutsk +0565100 +0603600 Asia/Yekaterinburg +0401100 +0443000 Asia/Yerevan +0374400 -0254000 Atlantic/Azores +0321700 -0644600 Atlantic/Bermuda +0280600 -0152400 Atlantic/Canary +0145500 -0233100 Atlantic/Cape_Verde +0620100 -0064600 Atlantic/Faroe +0705900 -0080500 Atlantic/Jan_Mayen +0323800 -0165400 Atlantic/Madeira +0640900 -0215100 Atlantic/Reykjavik -0541600 -0363200 Atlantic/South_Georgia -0155500 -0054200 Atlantic/St_Helena -0514200 -0575100 Atlantic/Stanley -0345500 +1383500 Australia/Adelaide -0272800 +1530200 Australia/Brisbane -0315700 +1412700 Australia/Broken_Hill -0395600 +1435200 Australia/Currie -0122800 +1305000 Australia/Darwin -0314300 +1285200 Australia/Eucla -0425300 +1471900 Australia/Hobart -0201600 +1490000 Australia/Lindeman -0313300 +1590500 Australia/Lord_Howe -0374900 +1445800 Australia/Melbourne -0315700 +1155100 Australia/Perth -0335200 +1511300 Australia/Sydney +0522200 +0045400 Europe/Amsterdam +0423000 +0013100 Europe/Andorra +0375800 +0234300 Europe/Athens +0445000 +0203000 Europe/Belgrade +0523000 +0132200 Europe/Berlin +0480900 +0170700 Europe/Bratislava +0505000 +0042000 Europe/Brussels +0442600 +0260600 Europe/Bucharest +0473000 +0190500 Europe/Budapest +0470000 +0285000 Europe/Chisinau +0554000 +0123500 Europe/Copenhagen +0532000 -0061500 Europe/Dublin +0360800 -0052100 Europe/Gibraltar +0492700 -0023200 Europe/Guernsey +0601000 +0245800 Europe/Helsinki +0540900 -0042800 Europe/Isle_of_Man +0410100 +0285800 Europe/Istanbul +0491200 -0020700 Europe/Jersey +0544300 +0203000 Europe/Kaliningrad +0502600 +0303100 Europe/Kiev +0384300 -0090800 Europe/Lisbon +0460300 +0143100 Europe/Ljubljana +0512830 +0001845 Europe/London +0493600 +0060900 Europe/Luxembourg +0402400 -0034100 Europe/Madrid +0355400 +0143100 Europe/Malta +0600600 +0195700 Europe/Mariehamn +0535400 +0273400 Europe/Minsk +0434200 +0072300 Europe/Monaco +0554500 +0373500 Europe/Moscow +0351000 +0332200 Europe/Nicosia +0595500 +0104500 Europe/Oslo +0485200 +0022000 Europe/Paris +0422600 +0191600 Europe/Podgorica +0500500 +0142600 Europe/Prague +0565700 +0240600 Europe/Riga +0415400 +0122900 Europe/Rome +0531200 +0500900 Europe/Samara +0435500 +0122800 Europe/San_Marino +0435200 +0182500 Europe/Sarajevo +0445700 +0340600 Europe/Simferopol +0415900 +0212600 Europe/Skopje +0424100 +0231900 Europe/Sofia +0592000 +0180300 Europe/Stockholm +0592500 +0244500 Europe/Tallinn +0412000 +0195000 Europe/Tirane +0483700 +0221800 Europe/Uzhgorod +0470900 +0093100 Europe/Vaduz +0415400 +0122700 Europe/Vatican +0481300 +0162000 Europe/Vienna +0544100 +0251900 Europe/Vilnius +0484400 +0442500 Europe/Volgograd +0521500 +0210000 Europe/Warsaw +0454800 +0155800 Europe/Zagreb +0475000 +0351000 Europe/Zaporozhye +0472300 +0083200 Europe/Zurich -0185500 +0473100 Indian/Antananarivo -0072000 +0722500 Indian/Chagos -0102500 +1054300 Indian/Christmas -0121000 +0965500 Indian/Cocos -0114100 +0431600 Indian/Comoro -0492110 +0701303 Indian/Kerguelen -0044000 +0552800 Indian/Mahe +0041000 +0733000 Indian/Maldives -0201000 +0573000 Indian/Mauritius -0124700 +0451400 Indian/Mayotte -0205200 +0552800 Indian/Reunion -0135000 -1714400 Pacific/Apia -0365200 +1744600 Pacific/Auckland -0435700 -1763300 Pacific/Chatham +0072500 +1514700 Pacific/Chuuk -0270900 -1092600 Pacific/Easter -0174000 +1682500 Pacific/Efate -0030800 -1710500 Pacific/Enderbury -0092200 -1711400 Pacific/Fakaofo -0180800 +1782500 Pacific/Fiji -0083100 +1791300 Pacific/Funafuti +0005400 -0893600 Pacific/Galapagos -0230800 -1345700 Pacific/Gambier -0093200 +1601200 Pacific/Guadalcanal +0132800 +1444500 Pacific/Guam +0211825 -1575130 Pacific/Honolulu +0170000 -1683000 Pacific/Johnston +0015200 -1572000 Pacific/Kiritimati +0051900 +1625900 Pacific/Kosrae +0090500 +1672000 Pacific/Kwajalein +0070900 +1711200 Pacific/Majuro -0090000 -1393000 Pacific/Marquesas +0281300 -1772200 Pacific/Midway +0003100 +1665500 Pacific/Nauru -0190100 +1695500 Pacific/Niue -0290300 +1675800 Pacific/Norfolk -0221600 +1653000 Pacific/Noumea -0141600 -1704200 Pacific/Pago_Pago +0072000 +1342900 Pacific/Palau -0250400 -1300500 Pacific/Pitcairn +0065800 +1581300 Pacific/Pohnpei +0065800 +1581300 Pacific/Ponape -0093000 +1471000 Pacific/Port_Moresby -0211400 -1594600 Pacific/Rarotonga +0151200 +1454500 Pacific/Saipan -0173200 -1493400 Pacific/Tahiti +0012500 +1730000 Pacific/Tarawa -0211000 +1751000 Pacific/Tongatapu +0072500 +1514700 Pacific/Truk +0191700 +1663700 Pacific/Wake -0131800 -1761000 Pacific/Wallis libical-1.0/zoneinfo/Antarctica/0000775000076400007640000000000012132563134015633 5ustar allenallenlibical-1.0/zoneinfo/Antarctica/South_Pole.ics0000664000076400007640000000075112132563134020417 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Antarctica/South_Pole X-LIC-LOCATION:Antarctica/South_Pole BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/Vostok.ics0000664000076400007640000000046012132563134017620 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Antarctica/Vostok X-LIC-LOCATION:Antarctica/Vostok BEGIN:STANDARD TZOFFSETFROM:+0600 TZOFFSETTO:+0600 TZNAME:VOST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/Rothera.ics0000664000076400007640000000046212132563134017741 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Antarctica/Rothera X-LIC-LOCATION:Antarctica/Rothera BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ROTT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/Palmer.ics0000664000076400007640000000074012132563134017554 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Antarctica/Palmer X-LIC-LOCATION:Antarctica/Palmer BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:CLT DTSTART:19700315T000000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:CLST DTSTART:19701011T000000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/Macquarie.ics0000664000076400007640000000046612132563134020250 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/Antarctica/Macquarie X-LIC-LOCATION:Antarctica/Macquarie BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:MIST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/Mawson.ics0000664000076400007640000000046012132563134017577 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Antarctica/Mawson X-LIC-LOCATION:Antarctica/Mawson BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:MAWT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/McMurdo.ics0000664000076400007640000000074312132563134017705 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Antarctica/McMurdo X-LIC-LOCATION:Antarctica/McMurdo BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/Syowa.ics0000664000076400007640000000045612132563134017442 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Antarctica/Syowa X-LIC-LOCATION:Antarctica/Syowa BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:SYOT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/Casey.ics0000664000076400007640000000045512132563134017403 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Antarctica/Casey X-LIC-LOCATION:Antarctica/Casey BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:WST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/DumontDUrville.ics0000664000076400007640000000050012132563134021243 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Antarctica/DumontDUrville X-LIC-LOCATION:Antarctica/DumontDUrville BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:DDUT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Antarctica/Davis.ics0000664000076400007640000000045612132563134017406 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Antarctica/Davis X-LIC-LOCATION:Antarctica/Davis BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:DAVT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/0000775000076400007640000000000012132563134014437 5ustar allenallenlibical-1.0/zoneinfo/Asia/Jakarta.ics0000664000076400007640000000044512132563134016517 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Jakarta X-LIC-LOCATION:Asia/Jakarta BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:WIT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Rangoon.ics0000664000076400007640000000044512132563134016545 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Rangoon X-LIC-LOCATION:Asia/Rangoon BEGIN:STANDARD TZOFFSETFROM:+0630 TZOFFSETTO:+0630 TZNAME:MMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Kashgar.ics0000664000076400007640000000044512132563134016522 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Kashgar X-LIC-LOCATION:Asia/Kashgar BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Jayapura.ics0000664000076400007640000000044712132563134016720 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Jayapura X-LIC-LOCATION:Asia/Jayapura BEGIN:STANDARD TZOFFSETFROM:+0900 TZOFFSETTO:+0900 TZNAME:EIT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Almaty.ics0000664000076400007640000000044412132563134016370 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Almaty X-LIC-LOCATION:Asia/Almaty BEGIN:STANDARD TZOFFSETFROM:+0600 TZOFFSETTO:+0600 TZNAME:ALMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Aden.ics0000664000076400007640000000043712132563134016012 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Aden X-LIC-LOCATION:Asia/Aden BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Tokyo.ics0000664000076400007640000000044112132563134016243 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Tokyo X-LIC-LOCATION:Asia/Tokyo BEGIN:STANDARD TZOFFSETFROM:+0900 TZOFFSETTO:+0900 TZNAME:JST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Singapore.ics0000664000076400007640000000045112132563134017066 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Singapore X-LIC-LOCATION:Asia/Singapore BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:SGT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Manila.ics0000664000076400007640000000044312132563134016341 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Manila X-LIC-LOCATION:Asia/Manila BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:PHT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Dhaka.ics0000664000076400007640000000044112132563134016146 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Dhaka X-LIC-LOCATION:Asia/Dhaka BEGIN:STANDARD TZOFFSETFROM:+0600 TZOFFSETTO:+0600 TZNAME:BDT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Muscat.ics0000664000076400007640000000044312132563134016374 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Muscat X-LIC-LOCATION:Asia/Muscat BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:GST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Oral.ics0000664000076400007640000000044012132563134016032 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Oral X-LIC-LOCATION:Asia/Oral BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:ORAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Kolkata.ics0000664000076400007640000000044512132563134016530 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/Asia/Kolkata X-LIC-LOCATION:Asia/Kolkata BEGIN:STANDARD TZOFFSETFROM:+0530 TZOFFSETTO:+0530 TZNAME:IST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Hong_Kong.ics0000664000076400007640000000045112132563134017010 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Hong_Kong X-LIC-LOCATION:Asia/Hong_Kong BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:HKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Katmandu.ics0000664000076400007640000000044712132563134016710 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Katmandu X-LIC-LOCATION:Asia/Katmandu BEGIN:STANDARD TZOFFSETFROM:+0545 TZOFFSETTO:+0545 TZNAME:NPT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Qatar.ics0000664000076400007640000000044112132563134016206 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Qatar X-LIC-LOCATION:Asia/Qatar BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Kamchatka.ics0000664000076400007640000000045212132563134017024 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_3/Asia/Kamchatka X-LIC-LOCATION:Asia/Kamchatka BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:PETT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Tashkent.ics0000664000076400007640000000044712132563134016725 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Tashkent X-LIC-LOCATION:Asia/Tashkent BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:UZT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Vientiane.ics0000664000076400007640000000045112132563134017061 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Vientiane X-LIC-LOCATION:Asia/Vientiane BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:ICT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Macau.ics0000664000076400007640000000044112132563134016164 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Macau X-LIC-LOCATION:Asia/Macau BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Ulaanbaatar.ics0000664000076400007640000000045612132563134017357 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Asia/Ulaanbaatar X-LIC-LOCATION:Asia/Ulaanbaatar BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:ULAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Yakutsk.ics0000664000076400007640000000044612132563134016576 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Yakutsk X-LIC-LOCATION:Asia/Yakutsk BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:YAKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Amman.ics0000664000076400007640000000072412132563134016173 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_3/Asia/Amman X-LIC-LOCATION:Asia/Amman BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701030T010000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700326T235959 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Tehran.ics0000664000076400007640000000044412132563134016362 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Tehran X-LIC-LOCATION:Asia/Tehran BEGIN:STANDARD TZOFFSETFROM:+0330 TZOFFSETTO:+0330 TZNAME:IRST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Dili.ics0000664000076400007640000000043712132563134016024 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Dili X-LIC-LOCATION:Asia/Dili BEGIN:STANDARD TZOFFSETFROM:+0900 TZOFFSETTO:+0900 TZNAME:TLT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Riyadh.ics0000664000076400007640000000044312132563134016360 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Riyadh X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Karachi.ics0000664000076400007640000000044512132563134016504 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Karachi X-LIC-LOCATION:Asia/Karachi BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:PKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Yerevan.ics0000664000076400007640000000044512132563134016553 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Asia/Yerevan X-LIC-LOCATION:Asia/Yerevan BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:AMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Kuala_Lumpur.ics0000664000076400007640000000045712132563134017546 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Kuala_Lumpur X-LIC-LOCATION:Asia/Kuala_Lumpur BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:MYT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Urumqi.ics0000664000076400007640000000044312132563134016422 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Urumqi X-LIC-LOCATION:Asia/Urumqi BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Harbin.ics0000664000076400007640000000044312132563134016343 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Harbin X-LIC-LOCATION:Asia/Harbin BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Bahrain.ics0000664000076400007640000000044512132563134016506 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Bahrain X-LIC-LOCATION:Asia/Bahrain BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Hovd.ics0000664000076400007640000000044012132563134016035 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Asia/Hovd X-LIC-LOCATION:Asia/Hovd BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:HOVT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Jerusalem.ics0000664000076400007640000000077012132563134017072 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Asia/Jerusalem X-LIC-LOCATION:Asia/Jerusalem BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:IDT DTSTART:19700327T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=FR END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:IST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Gaza.ics0000664000076400007640000000043712132563134016025 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_3/Asia/Gaza X-LIC-LOCATION:Asia/Gaza BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Hebron.ics0000664000076400007640000000044312132563134016355 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_1/Asia/Hebron X-LIC-LOCATION:Asia/Hebron BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Aqtau.ics0000664000076400007640000000044212132563134016212 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Aqtau X-LIC-LOCATION:Asia/Aqtau BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:AQTT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Kathmandu.ics0000664000076400007640000000045112132563134017053 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/Asia/Kathmandu X-LIC-LOCATION:Asia/Kathmandu BEGIN:STANDARD TZOFFSETFROM:+0545 TZOFFSETTO:+0545 TZNAME:NPT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Kuching.ics0000664000076400007640000000044512132563134016532 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Kuching X-LIC-LOCATION:Asia/Kuching BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:MYT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Vladivostok.ics0000664000076400007640000000045612132563134017451 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Vladivostok X-LIC-LOCATION:Asia/Vladivostok BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:VLAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Irkutsk.ics0000664000076400007640000000044612132563134016577 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Irkutsk X-LIC-LOCATION:Asia/Irkutsk BEGIN:STANDARD TZOFFSETFROM:+0900 TZOFFSETTO:+0900 TZNAME:IRKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Pontianak.ics0000664000076400007640000000045112132563134017063 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Pontianak X-LIC-LOCATION:Asia/Pontianak BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:WIT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Makassar.ics0000664000076400007640000000044712132563134016706 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Makassar X-LIC-LOCATION:Asia/Makassar BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CIT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Pyongyang.ics0000664000076400007640000000045112132563134017112 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Pyongyang X-LIC-LOCATION:Asia/Pyongyang BEGIN:STANDARD TZOFFSETFROM:+0900 TZOFFSETTO:+0900 TZNAME:KST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Chongqing.ics0000664000076400007640000000045112132563134017054 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Chongqing X-LIC-LOCATION:Asia/Chongqing BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Omsk.ics0000664000076400007640000000044012132563134016046 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Omsk X-LIC-LOCATION:Asia/Omsk BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:OMST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Krasnoyarsk.ics0000664000076400007640000000045612132563134017453 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Krasnoyarsk X-LIC-LOCATION:Asia/Krasnoyarsk BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:KRAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Dushanbe.ics0000664000076400007640000000044712132563134016675 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Dushanbe X-LIC-LOCATION:Asia/Dushanbe BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:TJT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Kabul.ics0000664000076400007640000000044112132563134016174 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Kabul X-LIC-LOCATION:Asia/Kabul BEGIN:STANDARD TZOFFSETFROM:+0430 TZOFFSETTO:+0430 TZNAME:AFT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Novokuznetsk.ics0000664000076400007640000000046012132563134017657 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Novokuznetsk X-LIC-LOCATION:Asia/Novokuznetsk BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:NOVT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Yekaterinburg.ics0000664000076400007640000000046212132563134017754 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Yekaterinburg X-LIC-LOCATION:Asia/Yekaterinburg BEGIN:STANDARD TZOFFSETFROM:+0600 TZOFFSETTO:+0600 TZNAME:YEKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Anadyr.ics0000664000076400007640000000044412132563134016357 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_3/Asia/Anadyr X-LIC-LOCATION:Asia/Anadyr BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:ANAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Calcutta.ics0000664000076400007640000000044712132563134016704 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Calcutta X-LIC-LOCATION:Asia/Calcutta BEGIN:STANDARD TZOFFSETFROM:+0530 TZOFFSETTO:+0530 TZNAME:IST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Magadan.ics0000664000076400007640000000044612132563134016473 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Magadan X-LIC-LOCATION:Asia/Magadan BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:MAGT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Nicosia.ics0000664000076400007640000000073012132563134016524 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Nicosia X-LIC-LOCATION:Asia/Nicosia BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Choibalsan.ics0000664000076400007640000000044012132563134017200 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Asia/Choibalsan X-LIC-LOCATION:Asia/Choibalsan BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Colombo.ics0000664000076400007640000000044512132563134016534 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Colombo X-LIC-LOCATION:Asia/Colombo BEGIN:STANDARD TZOFFSETFROM:+0530 TZOFFSETTO:+0530 TZNAME:IST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Qyzylorda.ics0000664000076400007640000000045212132563134017136 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Qyzylorda X-LIC-LOCATION:Asia/Qyzylorda BEGIN:STANDARD TZOFFSETFROM:+0600 TZOFFSETTO:+0600 TZNAME:QYZT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Ashgabat.ics0000664000076400007640000000044712132563134016656 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Ashgabat X-LIC-LOCATION:Asia/Ashgabat BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:TMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Sakhalin.ics0000664000076400007640000000045012132563134016670 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Sakhalin X-LIC-LOCATION:Asia/Sakhalin BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:SAKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Baghdad.ics0000664000076400007640000000044512132563134016454 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Asia/Baghdad X-LIC-LOCATION:Asia/Baghdad BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Shanghai.ics0000664000076400007640000000044712132563134016666 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Shanghai X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Baku.ics0000664000076400007640000000072212132563134016022 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Baku X-LIC-LOCATION:Asia/Baku BEGIN:DAYLIGHT TZOFFSETFROM:+0400 TZOFFSETTO:+0500 TZNAME:AZST DTSTART:19700329T040000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0400 TZNAME:AZT DTSTART:19701025T050000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Taipei.ics0000664000076400007640000000044312132563134016353 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Taipei X-LIC-LOCATION:Asia/Taipei BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Bishkek.ics0000664000076400007640000000044512132563134016522 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Bishkek X-LIC-LOCATION:Asia/Bishkek BEGIN:STANDARD TZOFFSETFROM:+0600 TZOFFSETTO:+0600 TZNAME:KGT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Bangkok.ics0000664000076400007640000000044512132563134016516 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Bangkok X-LIC-LOCATION:Asia/Bangkok BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:ICT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Beirut.ics0000664000076400007640000000072612132563134016376 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Beirut X-LIC-LOCATION:Asia/Beirut BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T000000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T000000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Aqtobe.ics0000664000076400007640000000044412132563134016354 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Aqtobe X-LIC-LOCATION:Asia/Aqtobe BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:AQTT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Dubai.ics0000664000076400007640000000044112132563134016162 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Dubai X-LIC-LOCATION:Asia/Dubai BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:GST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Saigon.ics0000664000076400007640000000044312132563134016360 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Saigon X-LIC-LOCATION:Asia/Saigon BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:ICT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Novosibirsk.ics0000664000076400007640000000045612132563134017454 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Asia/Novosibirsk X-LIC-LOCATION:Asia/Novosibirsk BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:NOVT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Istanbul.ics0000664000076400007640000000073212132563134016722 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_3/Asia/Istanbul X-LIC-LOCATION:Asia/Istanbul BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Thimphu.ics0000664000076400007640000000044512132563134016560 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Thimphu X-LIC-LOCATION:Asia/Thimphu BEGIN:STANDARD TZOFFSETFROM:+0600 TZOFFSETTO:+0600 TZNAME:BTT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Tbilisi.ics0000664000076400007640000000044512132563134016541 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Tbilisi X-LIC-LOCATION:Asia/Tbilisi BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:GET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Seoul.ics0000664000076400007640000000044112132563134016225 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Seoul X-LIC-LOCATION:Asia/Seoul BEGIN:STANDARD TZOFFSETFROM:+0900 TZOFFSETTO:+0900 TZNAME:KST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Phnom_Penh.ics0000664000076400007640000000045312132563134017174 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Phnom_Penh X-LIC-LOCATION:Asia/Phnom_Penh BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:ICT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Kuwait.ics0000664000076400007640000000044312132563134016404 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Kuwait X-LIC-LOCATION:Asia/Kuwait BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Brunei.ics0000664000076400007640000000044312132563134016364 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Brunei X-LIC-LOCATION:Asia/Brunei BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:BNT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Samarkand.ics0000664000076400007640000000045112132563134017040 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Asia/Samarkand X-LIC-LOCATION:Asia/Samarkand BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:UZT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Ho_Chi_Minh.ics0000664000076400007640000000045512132563134017247 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/Asia/Ho_Chi_Minh X-LIC-LOCATION:Asia/Ho_Chi_Minh BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:ICT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Asia/Damascus.ics0000664000076400007640000000073212132563134016701 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_3/Asia/Damascus X-LIC-LOCATION:Asia/Damascus BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701030T000000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700327T000000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/0000775000076400007640000000000012132563135015121 5ustar allenallenlibical-1.0/zoneinfo/Pacific/Noumea.ics0000664000076400007640000000045112132563135017045 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Noumea X-LIC-LOCATION:Pacific/Noumea BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:NCT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Wallis.ics0000664000076400007640000000045112132563135017054 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Wallis X-LIC-LOCATION:Pacific/Wallis BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:WFT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Palau.ics0000664000076400007640000000044712132563135016670 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Palau X-LIC-LOCATION:Pacific/Palau BEGIN:STANDARD TZOFFSETFROM:+0900 TZOFFSETTO:+0900 TZNAME:PWT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Pohnpei.ics0000664000076400007640000000045412132563135017226 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/Pacific/Pohnpei X-LIC-LOCATION:Pacific/Pohnpei BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:PONT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Tarawa.ics0000664000076400007640000000045212132563135017041 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Tarawa X-LIC-LOCATION:Pacific/Tarawa BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:GILT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Fakaofo.ics0000664000076400007640000000045312132563135017171 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Pacific/Fakaofo X-LIC-LOCATION:Pacific/Fakaofo BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1300 TZNAME:TKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Guam.ics0000664000076400007640000000044612132563135016516 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Guam X-LIC-LOCATION:Pacific/Guam BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:ChST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Port_Moresby.ics0000664000076400007640000000046512132563135020252 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Port_Moresby X-LIC-LOCATION:Pacific/Port_Moresby BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:PGT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Truk.ics0000664000076400007640000000044612132563135016552 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Truk X-LIC-LOCATION:Pacific/Truk BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:TRUT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Fiji.ics0000664000076400007640000000102412132563135016477 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Pacific/Fiji X-LIC-LOCATION:Pacific/Fiji BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:FJST DTSTART:19701018T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=18,19,20,21,22,23,24;BYDAY=SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:FJT DTSTART:19700118T030000 RRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=18,19,20,21,22,23,24;BYDAY=SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Pago_Pago.ics0000664000076400007640000000045712132563135017463 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Pago_Pago X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZOFFSETFROM:-1100 TZOFFSETTO:-1100 TZNAME:SST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Niue.ics0000664000076400007640000000044512132563135016524 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Niue X-LIC-LOCATION:Pacific/Niue BEGIN:STANDARD TZOFFSETFROM:-1100 TZOFFSETTO:-1100 TZNAME:NUT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Honolulu.ics0000664000076400007640000000045512132563135017432 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Honolulu X-LIC-LOCATION:Pacific/Honolulu BEGIN:STANDARD TZOFFSETFROM:-1000 TZOFFSETTO:-1000 TZNAME:HST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Chatham.ics0000664000076400007640000000073712132563135017175 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Pacific/Chatham X-LIC-LOCATION:Pacific/Chatham BEGIN:DAYLIGHT TZOFFSETFROM:+1245 TZOFFSETTO:+1345 TZNAME:CHADT DTSTART:19700927T024500 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1345 TZOFFSETTO:+1245 TZNAME:CHAST DTSTART:19700405T034500 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Galapagos.ics0000664000076400007640000000046012132563135017517 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Galapagos X-LIC-LOCATION:Pacific/Galapagos BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:GALT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Pitcairn.ics0000664000076400007640000000045512132563135017376 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Pitcairn X-LIC-LOCATION:Pacific/Pitcairn BEGIN:STANDARD TZOFFSETFROM:-0800 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Rarotonga.ics0000664000076400007640000000045712132563135017563 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Rarotonga X-LIC-LOCATION:Pacific/Rarotonga BEGIN:STANDARD TZOFFSETFROM:-1000 TZOFFSETTO:-1000 TZNAME:CKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Wake.ics0000664000076400007640000000044612132563135016514 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Wake X-LIC-LOCATION:Pacific/Wake BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:WAKT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Nauru.ics0000664000076400007640000000044712132563135016720 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Nauru X-LIC-LOCATION:Pacific/Nauru BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:NRT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Majuro.ics0000664000076400007640000000045112132563135017056 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Majuro X-LIC-LOCATION:Pacific/Majuro BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:MHT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Easter.ics0000664000076400007640000000073412132563135017050 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Easter X-LIC-LOCATION:Pacific/Easter BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:EASST DTSTART:19701010T220000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:EAST DTSTART:19700314T220000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Kwajalein.ics0000664000076400007640000000045712132563135017534 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Kwajalein X-LIC-LOCATION:Pacific/Kwajalein BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:MHT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Apia.ics0000664000076400007640000000072612132563135016500 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Pacific/Apia X-LIC-LOCATION:Pacific/Apia BEGIN:STANDARD TZOFFSETFROM:+1400 TZOFFSETTO:+1300 TZNAME:WST DTSTART:19700405T040000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1300 TZOFFSETTO:+1400 TZNAME:WSDT DTSTART:19700927T030000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Kosrae.ics0000664000076400007640000000045212132563135017046 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Kosrae X-LIC-LOCATION:Pacific/Kosrae BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:KOST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Tahiti.ics0000664000076400007640000000045212132563135017044 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Tahiti X-LIC-LOCATION:Pacific/Tahiti BEGIN:STANDARD TZOFFSETFROM:-1000 TZOFFSETTO:-1000 TZNAME:TAHT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Efate.ics0000664000076400007640000000044712132563135016652 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Efate X-LIC-LOCATION:Pacific/Efate BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:VUT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Enderbury.ics0000664000076400007640000000046012132563135017560 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Enderbury X-LIC-LOCATION:Pacific/Enderbury BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1300 TZNAME:PHOT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Midway.ics0000664000076400007640000000045112132563135017053 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Midway X-LIC-LOCATION:Pacific/Midway BEGIN:STANDARD TZOFFSETFROM:-1100 TZOFFSETTO:-1100 TZNAME:SST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Ponape.ics0000664000076400007640000000045212132563135017044 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Ponape X-LIC-LOCATION:Pacific/Ponape BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:PONT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Chuuk.ics0000664000076400007640000000045012132563135016677 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/Pacific/Chuuk X-LIC-LOCATION:Pacific/Chuuk BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:CHUT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Marquesas.ics0000664000076400007640000000046012132563135017562 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Marquesas X-LIC-LOCATION:Pacific/Marquesas BEGIN:STANDARD TZOFFSETFROM:-0930 TZOFFSETTO:-0930 TZNAME:MART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Tongatapu.ics0000664000076400007640000000045712132563135017571 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Tongatapu X-LIC-LOCATION:Pacific/Tongatapu BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1300 TZNAME:TOT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Saipan.ics0000664000076400007640000000045212132563135017035 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Saipan X-LIC-LOCATION:Pacific/Saipan BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:ChST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Auckland.ics0000664000076400007640000000073712132563135017352 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Pacific/Auckland X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZOFFSETFROM:+1200 TZOFFSETTO:+1300 TZNAME:NZDT DTSTART:19700927T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1300 TZOFFSETTO:+1200 TZNAME:NZST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Gambier.ics0000664000076400007640000000045412132563135017172 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Gambier X-LIC-LOCATION:Pacific/Gambier BEGIN:STANDARD TZOFFSETFROM:-0900 TZOFFSETTO:-0900 TZNAME:GAMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Norfolk.ics0000664000076400007640000000045312132563135017235 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Norfolk X-LIC-LOCATION:Pacific/Norfolk BEGIN:STANDARD TZOFFSETFROM:+1130 TZOFFSETTO:+1130 TZNAME:NFT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Kiritimati.ics0000664000076400007640000000046212132563135017731 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Kiritimati X-LIC-LOCATION:Pacific/Kiritimati BEGIN:STANDARD TZOFFSETFROM:+1400 TZOFFSETTO:+1400 TZNAME:LINT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Guadalcanal.ics0000664000076400007640000000046312132563135020020 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Guadalcanal X-LIC-LOCATION:Pacific/Guadalcanal BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1100 TZNAME:SBT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Johnston.ics0000664000076400007640000000045512132563135017427 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Johnston X-LIC-LOCATION:Pacific/Johnston BEGIN:STANDARD TZOFFSETFROM:-1000 TZOFFSETTO:-1000 TZNAME:HST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Pacific/Funafuti.ics0000664000076400007640000000045512132563135017406 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Pacific/Funafuti X-LIC-LOCATION:Pacific/Funafuti BEGIN:STANDARD TZOFFSETFROM:+1200 TZOFFSETTO:+1200 TZNAME:TVT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/zones.h0000664000076400007640000002301712132563134015074 0ustar allenallenN_("Africa/Abidjan"); N_("Africa/Accra"); N_("Africa/Addis_Ababa"); N_("Africa/Algiers"); N_("Africa/Asmara"); N_("Africa/Bamako"); N_("Africa/Bangui"); N_("Africa/Banjul"); N_("Africa/Bissau"); N_("Africa/Blantyre"); N_("Africa/Brazzaville"); N_("Africa/Bujumbura"); N_("Africa/Cairo"); N_("Africa/Casablanca"); N_("Africa/Ceuta"); N_("Africa/Conakry"); N_("Africa/Dakar"); N_("Africa/Dar_es_Salaam"); N_("Africa/Djibouti"); N_("Africa/Douala"); N_("Africa/El_Aaiun"); N_("Africa/Freetown"); N_("Africa/Gaborone"); N_("Africa/Harare"); N_("Africa/Johannesburg"); N_("Africa/Kampala"); N_("Africa/Khartoum"); N_("Africa/Kigali"); N_("Africa/Kinshasa"); N_("Africa/Lagos"); N_("Africa/Libreville"); N_("Africa/Lome"); N_("Africa/Luanda"); N_("Africa/Lubumbashi"); N_("Africa/Lusaka"); N_("Africa/Malabo"); N_("Africa/Maputo"); N_("Africa/Maseru"); N_("Africa/Mbabane"); N_("Africa/Mogadishu"); N_("Africa/Monrovia"); N_("Africa/Nairobi"); N_("Africa/Ndjamena"); N_("Africa/Niamey"); N_("Africa/Nouakchott"); N_("Africa/Ouagadougou"); N_("Africa/Porto-Novo"); N_("Africa/Sao_Tome"); N_("Africa/Tripoli"); N_("Africa/Tunis"); N_("Africa/Windhoek"); N_("America/Adak"); N_("America/Anchorage"); N_("America/Anguilla"); N_("America/Antigua"); N_("America/Araguaina"); N_("America/Argentina/Buenos_Aires"); N_("America/Argentina/Catamarca"); N_("America/Argentina/Cordoba"); N_("America/Argentina/Jujuy"); N_("America/Argentina/La_Rioja"); N_("America/Argentina/Mendoza"); N_("America/Argentina/Rio_Gallegos"); N_("America/Argentina/San_Juan"); N_("America/Argentina/Tucuman"); N_("America/Argentina/Ushuaia"); N_("America/Aruba"); N_("America/Asuncion"); N_("America/Atikokan"); N_("America/Bahia"); N_("America/Bahia_Banderas"); N_("America/Barbados"); N_("America/Belem"); N_("America/Belize"); N_("America/Blanc-Sablon"); N_("America/Boa_Vista"); N_("America/Bogota"); N_("America/Boise"); N_("America/Cambridge_Bay"); N_("America/Campo_Grande"); N_("America/Cancun"); N_("America/Caracas"); N_("America/Cayenne"); N_("America/Cayman"); N_("America/Chicago"); N_("America/Chihuahua"); N_("America/Costa_Rica"); N_("America/Cuiaba"); N_("America/Curacao"); N_("America/Danmarkshavn"); N_("America/Dawson"); N_("America/Dawson_Creek"); N_("America/Denver"); N_("America/Detroit"); N_("America/Dominica"); N_("America/Edmonton"); N_("America/Eirunepe"); N_("America/El_Salvador"); N_("America/Fortaleza"); N_("America/Glace_Bay"); N_("America/Godthab"); N_("America/Goose_Bay"); N_("America/Grand_Turk"); N_("America/Grenada"); N_("America/Guadeloupe"); N_("America/Guatemala"); N_("America/Guayaquil"); N_("America/Guyana"); N_("America/Halifax"); N_("America/Havana"); N_("America/Hermosillo"); N_("America/Indiana/Indianapolis"); N_("America/Indiana/Knox"); N_("America/Indiana/Marengo"); N_("America/Indiana/Petersburg"); N_("America/Indiana/Tell_City"); N_("America/Indiana/Vevay"); N_("America/Indiana/Vincennes"); N_("America/Indiana/Winamac"); N_("America/Inuvik"); N_("America/Iqaluit"); N_("America/Jamaica"); N_("America/Juneau"); N_("America/Kentucky/Louisville"); N_("America/Kentucky/Monticello"); N_("America/La_Paz"); N_("America/Lima"); N_("America/Los_Angeles"); N_("America/Maceio"); N_("America/Managua"); N_("America/Manaus"); N_("America/Marigot"); N_("America/Martinique"); N_("America/Matamoros"); N_("America/Mazatlan"); N_("America/Menominee"); N_("America/Merida"); N_("America/Metlakatla"); N_("America/Mexico_City"); N_("America/Miquelon"); N_("America/Moncton"); N_("America/Monterrey"); N_("America/Montevideo"); N_("America/Montreal"); N_("America/Montserrat"); N_("America/Nassau"); N_("America/New_York"); N_("America/Nipigon"); N_("America/Nome"); N_("America/Noronha"); N_("America/North_Dakota/Beulah"); N_("America/North_Dakota/Center"); N_("America/North_Dakota/New_Salem"); N_("America/Ojinaga"); N_("America/Panama"); N_("America/Pangnirtung"); N_("America/Paramaribo"); N_("America/Phoenix"); N_("America/Port-au-Prince"); N_("America/Port_of_Spain"); N_("America/Porto_Velho"); N_("America/Puerto_Rico"); N_("America/Rainy_River"); N_("America/Rankin_Inlet"); N_("America/Recife"); N_("America/Regina"); N_("America/Resolute"); N_("America/Rio_Branco"); N_("America/Santa_Isabel"); N_("America/Santiago"); N_("America/Santo_Domingo"); N_("America/Sao_Paulo"); N_("America/Scoresbysund"); N_("America/Shiprock"); N_("America/Sitka"); N_("America/St_Barthelemy"); N_("America/St_Johns"); N_("America/St_Kitts"); N_("America/St_Lucia"); N_("America/St_Thomas"); N_("America/St_Vincent"); N_("America/Swift_Current"); N_("America/Tegucigalpa"); N_("America/Thule"); N_("America/Thunder_Bay"); N_("America/Tijuana"); N_("America/Toronto"); N_("America/Tortola"); N_("America/Vancouver"); N_("America/Whitehorse"); N_("America/Winnipeg"); N_("America/Yakutat"); N_("America/Yellowknife"); N_("Antarctica/Casey"); N_("Antarctica/Davis"); N_("Antarctica/DumontDUrville"); N_("Antarctica/Macquarie"); N_("Antarctica/Mawson"); N_("Antarctica/McMurdo"); N_("Antarctica/Palmer"); N_("Antarctica/Rothera"); N_("Antarctica/South_Pole"); N_("Antarctica/Syowa"); N_("Antarctica/Vostok"); N_("Arctic/Longyearbyen"); N_("Asia/Aden"); N_("Asia/Almaty"); N_("Asia/Amman"); N_("Asia/Anadyr"); N_("Asia/Aqtau"); N_("Asia/Aqtobe"); N_("Asia/Ashgabat"); N_("Asia/Baghdad"); N_("Asia/Bahrain"); N_("Asia/Baku"); N_("Asia/Bangkok"); N_("Asia/Beirut"); N_("Asia/Bishkek"); N_("Asia/Brunei"); N_("Asia/Calcutta"); N_("Asia/Choibalsan"); N_("Asia/Chongqing"); N_("Asia/Colombo"); N_("Asia/Damascus"); N_("Asia/Dhaka"); N_("Asia/Dili"); N_("Asia/Dubai"); N_("Asia/Dushanbe"); N_("Asia/Gaza"); N_("Asia/Harbin"); N_("Asia/Ho_Chi_Minh"); N_("Asia/Hong_Kong"); N_("Asia/Hovd"); N_("Asia/Irkutsk"); N_("Asia/Istanbul"); N_("Asia/Jakarta"); N_("Asia/Jayapura"); N_("Asia/Jerusalem"); N_("Asia/Kabul"); N_("Asia/Kamchatka"); N_("Asia/Karachi"); N_("Asia/Kashgar"); N_("Asia/Kathmandu"); N_("Asia/Katmandu"); N_("Asia/Kolkata"); N_("Asia/Krasnoyarsk"); N_("Asia/Kuala_Lumpur"); N_("Asia/Kuching"); N_("Asia/Kuwait"); N_("Asia/Macau"); N_("Asia/Magadan"); N_("Asia/Makassar"); N_("Asia/Manila"); N_("Asia/Muscat"); N_("Asia/Nicosia"); N_("Asia/Novokuznetsk"); N_("Asia/Novosibirsk"); N_("Asia/Omsk"); N_("Asia/Oral"); N_("Asia/Phnom_Penh"); N_("Asia/Pontianak"); N_("Asia/Pyongyang"); N_("Asia/Qatar"); N_("Asia/Qyzylorda"); N_("Asia/Rangoon"); N_("Asia/Riyadh"); N_("Asia/Saigon"); N_("Asia/Sakhalin"); N_("Asia/Samarkand"); N_("Asia/Seoul"); N_("Asia/Shanghai"); N_("Asia/Singapore"); N_("Asia/Taipei"); N_("Asia/Tashkent"); N_("Asia/Tbilisi"); N_("Asia/Tehran"); N_("Asia/Thimphu"); N_("Asia/Tokyo"); N_("Asia/Ulaanbaatar"); N_("Asia/Urumqi"); N_("Asia/Vientiane"); N_("Asia/Vladivostok"); N_("Asia/Yakutsk"); N_("Asia/Yekaterinburg"); N_("Asia/Yerevan"); N_("Atlantic/Azores"); N_("Atlantic/Bermuda"); N_("Atlantic/Canary"); N_("Atlantic/Cape_Verde"); N_("Atlantic/Faroe"); N_("Atlantic/Jan_Mayen"); N_("Atlantic/Madeira"); N_("Atlantic/Reykjavik"); N_("Atlantic/South_Georgia"); N_("Atlantic/St_Helena"); N_("Atlantic/Stanley"); N_("Australia/Adelaide"); N_("Australia/Brisbane"); N_("Australia/Broken_Hill"); N_("Australia/Currie"); N_("Australia/Darwin"); N_("Australia/Eucla"); N_("Australia/Hobart"); N_("Australia/Lindeman"); N_("Australia/Lord_Howe"); N_("Australia/Melbourne"); N_("Australia/Perth"); N_("Australia/Sydney"); N_("Europe/Amsterdam"); N_("Europe/Andorra"); N_("Europe/Athens"); N_("Europe/Belgrade"); N_("Europe/Berlin"); N_("Europe/Bratislava"); N_("Europe/Brussels"); N_("Europe/Bucharest"); N_("Europe/Budapest"); N_("Europe/Chisinau"); N_("Europe/Copenhagen"); N_("Europe/Dublin"); N_("Europe/Gibraltar"); N_("Europe/Guernsey"); N_("Europe/Helsinki"); N_("Europe/Isle_of_Man"); N_("Europe/Istanbul"); N_("Europe/Jersey"); N_("Europe/Kaliningrad"); N_("Europe/Kiev"); N_("Europe/Lisbon"); N_("Europe/Ljubljana"); N_("Europe/London"); N_("Europe/Luxembourg"); N_("Europe/Madrid"); N_("Europe/Malta"); N_("Europe/Mariehamn"); N_("Europe/Minsk"); N_("Europe/Monaco"); N_("Europe/Moscow"); N_("Europe/Nicosia"); N_("Europe/Oslo"); N_("Europe/Paris"); N_("Europe/Podgorica"); N_("Europe/Prague"); N_("Europe/Riga"); N_("Europe/Rome"); N_("Europe/Samara"); N_("Europe/San_Marino"); N_("Europe/Sarajevo"); N_("Europe/Simferopol"); N_("Europe/Skopje"); N_("Europe/Sofia"); N_("Europe/Stockholm"); N_("Europe/Tallinn"); N_("Europe/Tirane"); N_("Europe/Uzhgorod"); N_("Europe/Vaduz"); N_("Europe/Vatican"); N_("Europe/Vienna"); N_("Europe/Vilnius"); N_("Europe/Volgograd"); N_("Europe/Warsaw"); N_("Europe/Zagreb"); N_("Europe/Zaporozhye"); N_("Europe/Zurich"); N_("Indian/Antananarivo"); N_("Indian/Chagos"); N_("Indian/Christmas"); N_("Indian/Cocos"); N_("Indian/Comoro"); N_("Indian/Kerguelen"); N_("Indian/Mahe"); N_("Indian/Maldives"); N_("Indian/Mauritius"); N_("Indian/Mayotte"); N_("Indian/Reunion"); N_("Pacific/Apia"); N_("Pacific/Auckland"); N_("Pacific/Chatham"); N_("Pacific/Chuuk"); N_("Pacific/Easter"); N_("Pacific/Efate"); N_("Pacific/Enderbury"); N_("Pacific/Fakaofo"); N_("Pacific/Fiji"); N_("Pacific/Funafuti"); N_("Pacific/Galapagos"); N_("Pacific/Gambier"); N_("Pacific/Guadalcanal"); N_("Pacific/Guam"); N_("Pacific/Honolulu"); N_("Pacific/Johnston"); N_("Pacific/Kiritimati"); N_("Pacific/Kosrae"); N_("Pacific/Kwajalein"); N_("Pacific/Majuro"); N_("Pacific/Marquesas"); N_("Pacific/Midway"); N_("Pacific/Nauru"); N_("Pacific/Niue"); N_("Pacific/Norfolk"); N_("Pacific/Noumea"); N_("Pacific/Pago_Pago"); N_("Pacific/Palau"); N_("Pacific/Pitcairn"); N_("Pacific/Pohnpei"); N_("Pacific/Ponape"); N_("Pacific/Port_Moresby"); N_("Pacific/Rarotonga"); N_("Pacific/Saipan"); N_("Pacific/Tahiti"); N_("Pacific/Tarawa"); N_("Pacific/Tongatapu"); N_("Pacific/Truk"); N_("Pacific/Wake"); N_("Pacific/Wallis"); libical-1.0/zoneinfo/Indian/0000775000076400007640000000000012132563134014764 5ustar allenallenlibical-1.0/zoneinfo/Indian/Mayotte.ics0000664000076400007640000000045112132563134017106 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Mayotte X-LIC-LOCATION:Indian/Mayotte BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Reunion.ics0000664000076400007640000000045112132563134017103 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Reunion X-LIC-LOCATION:Indian/Reunion BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:RET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Chagos.ics0000664000076400007640000000044712132563134016675 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Chagos X-LIC-LOCATION:Indian/Chagos BEGIN:STANDARD TZOFFSETFROM:+0600 TZOFFSETTO:+0600 TZNAME:IOT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Kerguelen.ics0000664000076400007640000000045512132563134017411 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Kerguelen X-LIC-LOCATION:Indian/Kerguelen BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:TFT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Comoro.ics0000664000076400007640000000044712132563134016727 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Comoro X-LIC-LOCATION:Indian/Comoro BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Antananarivo.ics0000664000076400007640000000046312132563134020110 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Antananarivo X-LIC-LOCATION:Indian/Antananarivo BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Mauritius.ics0000664000076400007640000000045512132563134017452 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Mauritius X-LIC-LOCATION:Indian/Mauritius BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:MUT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Christmas.ics0000664000076400007640000000045512132563134017425 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Christmas X-LIC-LOCATION:Indian/Christmas BEGIN:STANDARD TZOFFSETFROM:+0700 TZOFFSETTO:+0700 TZNAME:CXT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Cocos.ics0000664000076400007640000000044512132563134016535 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Cocos X-LIC-LOCATION:Indian/Cocos BEGIN:STANDARD TZOFFSETFROM:+0630 TZOFFSETTO:+0630 TZNAME:CCT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Maldives.ics0000664000076400007640000000045312132563134017232 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Maldives X-LIC-LOCATION:Indian/Maldives BEGIN:STANDARD TZOFFSETFROM:+0500 TZOFFSETTO:+0500 TZNAME:MVT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Indian/Mahe.ics0000664000076400007640000000044312132563134016337 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Indian/Mahe X-LIC-LOCATION:Indian/Mahe BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:SCT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Makefile.am0000664000076400007640000000141412132563134015616 0ustar allenallen zoneinfodatadir = $(datadir)/$(PACKAGE)/zoneinfo zoneinfodata_DATA = zones.tab DIRS = \ Africa \ America \ America/North_Dakota \ America/Indiana \ America/Kentucky \ America/Argentina \ Antarctica \ Arctic \ Asia \ Atlantic \ Australia \ Europe \ Indian \ Pacific install-data-local: @$(NORMAL_INSTALL) for dir in $(DIRS); do \ $(mkinstalldirs) $(DESTDIR)$(datadir)/$(PACKAGE)/zoneinfo/$$dir; \ for tzfile in $(srcdir)/$$dir/*.ics; do \ $(INSTALL_DATA) $$tzfile $(DESTDIR)$(datadir)/$(PACKAGE)/zoneinfo/$$dir; \ done \ done dist-hook: for dir in $(DIRS); do \ mkdir $(distdir)/$$dir; \ for tzfile in $(srcdir)/$$dir/*.ics; do \ cp -p $$tzfile $(distdir)/$$dir; \ done \ done EXTRA_DIST = $(zoneinfodata_DATA) libical-1.0/zoneinfo/Atlantic/0000775000076400007640000000000012132563133015320 5ustar allenallenlibical-1.0/zoneinfo/Atlantic/Stanley.ics0000664000076400007640000000073512132563133017444 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Stanley X-LIC-LOCATION:Atlantic/Stanley BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:FKT DTSTART:19700419T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:FKST DTSTART:19700906T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/Cape_Verde.ics0000664000076400007640000000046312132563133020020 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Cape_Verde X-LIC-LOCATION:Atlantic/Cape_Verde BEGIN:STANDARD TZOFFSETFROM:-0100 TZOFFSETTO:-0100 TZNAME:CVT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/St_Helena.ics0000664000076400007640000000046112132563133017663 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/St_Helena X-LIC-LOCATION:Atlantic/St_Helena BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/South_Georgia.ics0000664000076400007640000000047112132563133020561 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/South_Georgia X-LIC-LOCATION:Atlantic/South_Georgia BEGIN:STANDARD TZOFFSETFROM:-0200 TZOFFSETTO:-0200 TZNAME:GST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/Canary.ics0000664000076400007640000000073612132563133017243 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Canary X-LIC-LOCATION:Atlantic/Canary BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:WEST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:WET DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/Madeira.ics0000664000076400007640000000074012132563133017363 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Madeira X-LIC-LOCATION:Atlantic/Madeira BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:WEST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:WET DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/Reykjavik.ics0000664000076400007640000000046112132563133017760 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Reykjavik X-LIC-LOCATION:Atlantic/Reykjavik BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/Faroe.ics0000664000076400007640000000073412132563133017060 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Faroe X-LIC-LOCATION:Atlantic/Faroe BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:WEST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:WET DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/Azores.ics0000664000076400007640000000074012132563133017264 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Azores X-LIC-LOCATION:Atlantic/Azores BEGIN:DAYLIGHT TZOFFSETFROM:-0100 TZOFFSETTO:+0000 TZNAME:AZOST DTSTART:19700329T000000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:-0100 TZNAME:AZOT DTSTART:19701025T010000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/Bermuda.ics0000664000076400007640000000073512132563133017404 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Bermuda X-LIC-LOCATION:Atlantic/Bermuda BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:ADT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Atlantic/Jan_Mayen.ics0000664000076400007640000000074412132563133017666 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Atlantic/Jan_Mayen X-LIC-LOCATION:Atlantic/Jan_Mayen BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Makefile.in0000664000076400007640000003401312141277614015635 0ustar allenallen# Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = zoneinfo DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(zoneinfodatadir)" DATA = $(zoneinfodata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ zoneinfodatadir = $(datadir)/$(PACKAGE)/zoneinfo zoneinfodata_DATA = zones.tab DIRS = \ Africa \ America \ America/North_Dakota \ America/Indiana \ America/Kentucky \ America/Argentina \ Antarctica \ Arctic \ Asia \ Atlantic \ Australia \ Europe \ Indian \ Pacific EXTRA_DIST = $(zoneinfodata_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu zoneinfo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu zoneinfo/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-zoneinfodataDATA: $(zoneinfodata_DATA) @$(NORMAL_INSTALL) @list='$(zoneinfodata_DATA)'; test -n "$(zoneinfodatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(zoneinfodatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(zoneinfodatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(zoneinfodatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(zoneinfodatadir)" || exit $$?; \ done uninstall-zoneinfodataDATA: @$(NORMAL_UNINSTALL) @list='$(zoneinfodata_DATA)'; test -n "$(zoneinfodatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(zoneinfodatadir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(zoneinfodatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-zoneinfodataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-zoneinfodataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ dist-hook distclean distclean-generic distclean-libtool \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip install-zoneinfodataDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-zoneinfodataDATA install-data-local: @$(NORMAL_INSTALL) for dir in $(DIRS); do \ $(mkinstalldirs) $(DESTDIR)$(datadir)/$(PACKAGE)/zoneinfo/$$dir; \ for tzfile in $(srcdir)/$$dir/*.ics; do \ $(INSTALL_DATA) $$tzfile $(DESTDIR)$(datadir)/$(PACKAGE)/zoneinfo/$$dir; \ done \ done dist-hook: for dir in $(DIRS); do \ mkdir $(distdir)/$$dir; \ for tzfile in $(srcdir)/$$dir/*.ics; do \ cp -p $$tzfile $(distdir)/$$dir; \ done \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/zoneinfo/America/0000775000076400007640000000000012132563134015123 5ustar allenallenlibical-1.0/zoneinfo/America/Toronto.ics0000664000076400007640000000073312132563134017272 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Toronto X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Creston.ics0000664000076400007640000000045312132563134017242 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_1/America/Creston X-LIC-LOCATION:America/Creston BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Paramaribo.ics0000664000076400007640000000046112132563134017701 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Paramaribo X-LIC-LOCATION:America/Paramaribo BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:SRT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Whitehorse.ics0000664000076400007640000000074112132563134017746 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Whitehorse X-LIC-LOCATION:America/Whitehorse BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Anguilla.ics0000664000076400007640000000045512132563134017363 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Anguilla X-LIC-LOCATION:America/Anguilla BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Lima.ics0000664000076400007640000000044512132563134016510 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Lima X-LIC-LOCATION:America/Lima BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:PET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Boa_Vista.ics0000664000076400007640000000045712132563134017500 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Boa_Vista X-LIC-LOCATION:America/Boa_Vista BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Danmarkshavn.ics0000664000076400007640000000046512132563134020245 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Danmarkshavn X-LIC-LOCATION:America/Danmarkshavn BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Puerto_Rico.ics0000664000076400007640000000046312132563134020060 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Puerto_Rico X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Phoenix.ics0000664000076400007640000000045312132563134017237 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Phoenix X-LIC-LOCATION:America/Phoenix BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Yellowknife.ics0000664000076400007640000000074312132563134020117 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Yellowknife X-LIC-LOCATION:America/Yellowknife BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Panama.ics0000664000076400007640000000045112132563134017020 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Panama X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Araguaina.ics0000664000076400007640000000045712132563134017521 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Araguaina X-LIC-LOCATION:America/Araguaina BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:BRT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Tortola.ics0000664000076400007640000000045312132563134017251 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Tortola X-LIC-LOCATION:America/Tortola BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Pangnirtung.ics0000664000076400007640000000074312132563134020123 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Pangnirtung X-LIC-LOCATION:America/Pangnirtung BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Nome.ics0000664000076400007640000000072712132563134016527 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Nome X-LIC-LOCATION:America/Nome BEGIN:DAYLIGHT TZOFFSETFROM:-0900 TZOFFSETTO:-0800 TZNAME:AKDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0800 TZOFFSETTO:-0900 TZNAME:AKST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Thunder_Bay.ics0000664000076400007640000000074312132563134020033 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Thunder_Bay X-LIC-LOCATION:America/Thunder_Bay BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/New_York.ics0000664000076400007640000000073512132563134017365 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/New_York X-LIC-LOCATION:America/New_York BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Merida.ics0000664000076400007640000000073212132563134017026 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Merida X-LIC-LOCATION:America/Merida BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Campo_Grande.ics0000664000076400007640000000074712132563134020152 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Campo_Grande X-LIC-LOCATION:America/Campo_Grande BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:AMST DTSTART:19701101T000000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:AMT DTSTART:19700222T000000 RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Bahia_Banderas.ics0000664000076400007640000000075212132563134020432 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/Bahia_Banderas X-LIC-LOCATION:America/Bahia_Banderas BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/St_Kitts.ics0000664000076400007640000000045512132563134017373 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/St_Kitts X-LIC-LOCATION:America/St_Kitts BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Dominica.ics0000664000076400007640000000045512132563134017352 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Dominica X-LIC-LOCATION:America/Dominica BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/North_Dakota/0000775000076400007640000000000012132563134017500 5ustar allenallenlibical-1.0/zoneinfo/America/North_Dakota/Beulah.ics0000664000076400007640000000076312132563134021406 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/North_Dakota/Beulah X-LIC-LOCATION:America/North_Dakota/Beulah BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/North_Dakota/Center.ics0000664000076400007640000000076312132563134021426 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/North_Dakota/Center X-LIC-LOCATION:America/North_Dakota/Center BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/North_Dakota/New_Salem.ics0000664000076400007640000000077112132563134022057 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/North_Dakota/New_Salem X-LIC-LOCATION:America/North_Dakota/New_Salem BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Yakutat.ics0000664000076400007640000000073512132563134017252 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Yakutat X-LIC-LOCATION:America/Yakutat BEGIN:DAYLIGHT TZOFFSETFROM:-0900 TZOFFSETTO:-0800 TZNAME:AKDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0800 TZOFFSETTO:-0900 TZNAME:AKST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Noronha.ics0000664000076400007640000000045312132563134017231 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Noronha X-LIC-LOCATION:America/Noronha BEGIN:STANDARD TZOFFSETFROM:-0200 TZOFFSETTO:-0200 TZNAME:FNT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Rankin_Inlet.ics0000664000076400007640000000074512132563134020206 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Rankin_Inlet X-LIC-LOCATION:America/Rankin_Inlet BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Adak.ics0000664000076400007640000000072712132563134016471 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Adak X-LIC-LOCATION:America/Adak BEGIN:DAYLIGHT TZOFFSETFROM:-1000 TZOFFSETTO:-0900 TZNAME:HADT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0900 TZOFFSETTO:-1000 TZNAME:HAST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Maceio.ics0000664000076400007640000000045112132563134017020 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Maceio X-LIC-LOCATION:America/Maceio BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:BRT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Barbados.ics0000664000076400007640000000045512132563134017344 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Barbados X-LIC-LOCATION:America/Barbados BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Los_Angeles.ics0000664000076400007640000000074312132563134020022 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Los_Angeles X-LIC-LOCATION:America/Los_Angeles BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Hermosillo.ics0000664000076400007640000000046112132563134017741 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Hermosillo X-LIC-LOCATION:America/Hermosillo BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Grand_Turk.ics0000664000076400007640000000074112132563134017665 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/America/Grand_Turk X-LIC-LOCATION:America/Grand_Turk BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/St_Barthelemy.ics0000664000076400007640000000046712132563134020374 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/St_Barthelemy X-LIC-LOCATION:America/St_Barthelemy BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Nassau.ics0000664000076400007640000000073112132563134017056 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Nassau X-LIC-LOCATION:America/Nassau BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Cuiaba.ics0000664000076400007640000000073312132563134017012 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Cuiaba X-LIC-LOCATION:America/Cuiaba BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:AMST DTSTART:19701101T000000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:AMT DTSTART:19700222T000000 RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Guyana.ics0000664000076400007640000000045112132563134017047 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Guyana X-LIC-LOCATION:America/Guyana BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:GYT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Iqaluit.ics0000664000076400007640000000073312132563134017236 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Iqaluit X-LIC-LOCATION:America/Iqaluit BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Resolute.ics0000664000076400007640000000073512132563134017432 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/America/Resolute X-LIC-LOCATION:America/Resolute BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Tegucigalpa.ics0000664000076400007640000000046312132563134020053 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Tegucigalpa X-LIC-LOCATION:America/Tegucigalpa BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Shiprock.ics0000664000076400007640000000073512132563134017412 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Shiprock X-LIC-LOCATION:America/Shiprock BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Montreal.ics0000664000076400007640000000073512132563134017411 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Montreal X-LIC-LOCATION:America/Montreal BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Nipigon.ics0000664000076400007640000000073312132563134017231 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Nipigon X-LIC-LOCATION:America/Nipigon BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Mazatlan.ics0000664000076400007640000000073612132563134017400 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Mazatlan X-LIC-LOCATION:America/Mazatlan BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Havana.ics0000664000076400007640000000073112132563134017022 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_3/America/Havana X-LIC-LOCATION:America/Havana BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:CST DTSTART:19701101T010000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:CDT DTSTART:19700308T000000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Godthab.ics0000664000076400007640000000073612132563134017201 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Godthab X-LIC-LOCATION:America/Godthab BEGIN:DAYLIGHT TZOFFSETFROM:-0300 TZOFFSETTO:-0200 TZNAME:WGST DTSTART:19700328T220000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0200 TZOFFSETTO:-0300 TZNAME:WGT DTSTART:19701024T230000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Port-au-Prince.ics0000664000076400007640000000047112132563134020372 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/America/Port-au-Prince X-LIC-LOCATION:America/Port-au-Prince BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/St_Thomas.ics0000664000076400007640000000045712132563134017532 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/St_Thomas X-LIC-LOCATION:America/St_Thomas BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Rio_Branco.ics0000664000076400007640000000046112132563134017641 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Rio_Branco X-LIC-LOCATION:America/Rio_Branco BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:ACT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Guayaquil.ics0000664000076400007640000000045712132563134017572 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Guayaquil X-LIC-LOCATION:America/Guayaquil BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:ECT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Blanc-Sablon.ics0000664000076400007640000000046512132563134020063 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Blanc-Sablon X-LIC-LOCATION:America/Blanc-Sablon BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Dawson_Creek.ics0000664000076400007640000000046512132563134020174 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Dawson_Creek X-LIC-LOCATION:America/Dawson_Creek BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Jamaica.ics0000664000076400007640000000045312132563134017152 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Jamaica X-LIC-LOCATION:America/Jamaica BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Fortaleza.ics0000664000076400007640000000045712132563134017560 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Fortaleza X-LIC-LOCATION:America/Fortaleza BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:BRT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Atikokan.ics0000664000076400007640000000045512132563134017370 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Atikokan X-LIC-LOCATION:America/Atikokan BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Martinique.ics0000664000076400007640000000046112132563134017742 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Martinique X-LIC-LOCATION:America/Martinique BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Chicago.ics0000664000076400007640000000073312132563134017163 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Chicago X-LIC-LOCATION:America/Chicago BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Manaus.ics0000664000076400007640000000045112132563134017047 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Manaus X-LIC-LOCATION:America/Manaus BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Regina.ics0000664000076400007640000000045112132563134017030 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Regina X-LIC-LOCATION:America/Regina BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Edmonton.ics0000664000076400007640000000073512132563134017413 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Edmonton X-LIC-LOCATION:America/Edmonton BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Kentucky/0000775000076400007640000000000012132563134016720 5ustar allenallenlibical-1.0/zoneinfo/America/Kentucky/Monticello.ics0000664000076400007640000000076312132563134021533 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Kentucky/Monticello X-LIC-LOCATION:America/Kentucky/Monticello BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Kentucky/Louisville.ics0000664000076400007640000000076312132563134021555 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Kentucky/Louisville X-LIC-LOCATION:America/Kentucky/Louisville BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Marigot.ics0000664000076400007640000000045312132563134017227 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/Marigot X-LIC-LOCATION:America/Marigot BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Metlakatla.ics0000664000076400007640000000046212132563134017704 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/America/Metlakatla X-LIC-LOCATION:America/Metlakatla BEGIN:STANDARD TZOFFSETFROM:-0800 TZOFFSETTO:-0800 TZNAME:MeST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Ojinaga.ics0000664000076400007640000000073312132563134017176 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/Ojinaga X-LIC-LOCATION:America/Ojinaga BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Swift_Current.ics0000664000076400007640000000046712132563134020430 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Swift_Current X-LIC-LOCATION:America/Swift_Current BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Costa_Rica.ics0000664000076400007640000000046112132563134017633 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Costa_Rica X-LIC-LOCATION:America/Costa_Rica BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Chihuahua.ics0000664000076400007640000000074012132563134017523 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Chihuahua X-LIC-LOCATION:America/Chihuahua BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Aruba.ics0000664000076400007640000000044712132563134016662 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Aruba X-LIC-LOCATION:America/Aruba BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Santo_Domingo.ics0000664000076400007640000000046712132563134020372 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Santo_Domingo X-LIC-LOCATION:America/Santo_Domingo BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Inuvik.ics0000664000076400007640000000073112132563134017071 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Inuvik X-LIC-LOCATION:America/Inuvik BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/El_Salvador.ics0000664000076400007640000000046312132563134020021 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/El_Salvador X-LIC-LOCATION:America/El_Salvador BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Guatemala.ics0000664000076400007640000000045712132563134017531 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Guatemala X-LIC-LOCATION:America/Guatemala BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Santa_Isabel.ics0000664000076400007640000000074612132563134020157 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/Santa_Isabel X-LIC-LOCATION:America/Santa_Isabel BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Managua.ics0000664000076400007640000000045312132563134017176 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Managua X-LIC-LOCATION:America/Managua BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Santiago.ics0000664000076400007640000000073612132563134017376 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Santiago X-LIC-LOCATION:America/Santiago BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:CLST DTSTART:19701011T000000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:CLT DTSTART:19700315T000000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Porto_Velho.ics0000664000076400007640000000046312132563134020066 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Porto_Velho X-LIC-LOCATION:America/Porto_Velho BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Thule.ics0000664000076400007640000000072712132563134016712 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Thule X-LIC-LOCATION:America/Thule BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:ADT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Matamoros.ics0000664000076400007640000000073712132563134017574 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/Matamoros X-LIC-LOCATION:America/Matamoros BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Monterrey.ics0000664000076400007640000000074012132563134017610 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Monterrey X-LIC-LOCATION:America/Monterrey BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Antigua.ics0000664000076400007640000000045312132563134017215 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Antigua X-LIC-LOCATION:America/Antigua BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/St_Lucia.ics0000664000076400007640000000045512132563134017332 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/St_Lucia X-LIC-LOCATION:America/St_Lucia BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Winnipeg.ics0000664000076400007640000000073512132563134017410 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Winnipeg X-LIC-LOCATION:America/Winnipeg BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Tijuana.ics0000664000076400007640000000073312132563134017221 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/America/Tijuana X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Glace_Bay.ics0000664000076400007640000000073712132563134017440 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Glace_Bay X-LIC-LOCATION:America/Glace_Bay BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:ADT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Bahia.ics0000664000076400007640000000044712132563134016634 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Bahia X-LIC-LOCATION:America/Bahia BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:BRT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Anchorage.ics0000664000076400007640000000074112132563134017514 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Anchorage X-LIC-LOCATION:America/Anchorage BEGIN:DAYLIGHT TZOFFSETFROM:-0900 TZOFFSETTO:-0800 TZNAME:AKDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0800 TZOFFSETTO:-0900 TZNAME:AKST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Menominee.ics0000664000076400007640000000073712132563134017546 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Menominee X-LIC-LOCATION:America/Menominee BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Moncton.ics0000664000076400007640000000073312132563134017243 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Moncton X-LIC-LOCATION:America/Moncton BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:ADT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Eirunepe.ics0000664000076400007640000000045512132563134017403 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Eirunepe X-LIC-LOCATION:America/Eirunepe BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:ACT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Juneau.ics0000664000076400007640000000073312132563134017055 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Juneau X-LIC-LOCATION:America/Juneau BEGIN:DAYLIGHT TZOFFSETFROM:-0900 TZOFFSETTO:-0800 TZNAME:AKDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0800 TZOFFSETTO:-0900 TZNAME:AKST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Dawson.ics0000664000076400007640000000073112132563134017057 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Dawson X-LIC-LOCATION:America/Dawson BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/La_Paz.ics0000664000076400007640000000045112132563134016771 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/La_Paz X-LIC-LOCATION:America/La_Paz BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:BOT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Indiana/0000775000076400007640000000000012132563134016466 5ustar allenallenlibical-1.0/zoneinfo/America/Indiana/Vincennes.ics0000664000076400007640000000075712132563134021127 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/America/Indiana/Vincennes X-LIC-LOCATION:America/Indiana/Vincennes BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Indiana/Knox.ics0000664000076400007640000000074512132563134020113 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Indiana/Knox X-LIC-LOCATION:America/Indiana/Knox BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Indiana/Marengo.ics0000664000076400007640000000075312132563134020563 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Indiana/Marengo X-LIC-LOCATION:America/Indiana/Marengo BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Indiana/Tell_City.ics0000664000076400007640000000075712132563134021067 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/Indiana/Tell_City X-LIC-LOCATION:America/Indiana/Tell_City BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Indiana/Vevay.ics0000664000076400007640000000074712132563134020270 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Indiana/Vevay X-LIC-LOCATION:America/Indiana/Vevay BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Indiana/Winamac.ics0000664000076400007640000000075312132563134020552 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Indiana/Winamac X-LIC-LOCATION:America/Indiana/Winamac BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Indiana/Indianapolis.ics0000664000076400007640000000076512132563134021610 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Indiana/Indianapolis X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Indiana/Petersburg.ics0000664000076400007640000000076112132563134021314 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/America/Indiana/Petersburg X-LIC-LOCATION:America/Indiana/Petersburg BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Cayenne.ics0000664000076400007640000000045312132563134017207 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Cayenne X-LIC-LOCATION:America/Cayenne BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:GFT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/St_Johns.ics0000664000076400007640000000073512132563134017357 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/America/St_Johns X-LIC-LOCATION:America/St_Johns BEGIN:STANDARD TZOFFSETFROM:-0230 TZOFFSETTO:-0330 TZNAME:NST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0330 TZOFFSETTO:-0230 TZNAME:NDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Montserrat.ics0000664000076400007640000000046112132563134017762 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Montserrat X-LIC-LOCATION:America/Montserrat BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/0000775000076400007640000000000012132563134017033 5ustar allenallenlibical-1.0/zoneinfo/America/Argentina/Tucuman.ics0000664000076400007640000000047712132563134021157 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/Tucuman X-LIC-LOCATION:America/Argentina/Tucuman BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/Mendoza.ics0000664000076400007640000000047712132563134021140 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/Mendoza X-LIC-LOCATION:America/Argentina/Mendoza BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/Rio_Gallegos.ics0000664000076400007640000000051112132563134022076 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/Rio_Gallegos X-LIC-LOCATION:America/Argentina/Rio_Gallegos BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/Ushuaia.ics0000664000076400007640000000047712132563134021142 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/Ushuaia X-LIC-LOCATION:America/Argentina/Ushuaia BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/Catamarca.ics0000664000076400007640000000050312132563134021405 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/Catamarca X-LIC-LOCATION:America/Argentina/Catamarca BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/Buenos_Aires.ics0000664000076400007640000000051112132563134022106 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/Buenos_Aires X-LIC-LOCATION:America/Argentina/Buenos_Aires BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/Cordoba.ics0000664000076400007640000000047712132563134021114 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/Cordoba X-LIC-LOCATION:America/Argentina/Cordoba BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/La_Rioja.ics0000664000076400007640000000050112132563134021207 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/La_Rioja X-LIC-LOCATION:America/Argentina/La_Rioja BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/San_Juan.ics0000664000076400007640000000050112132563134021225 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/San_Juan X-LIC-LOCATION:America/Argentina/San_Juan BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Argentina/Jujuy.ics0000664000076400007640000000047312132563134020645 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Argentina/Jujuy X-LIC-LOCATION:America/Argentina/Jujuy BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:ART DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Montevideo.ics0000664000076400007640000000074212132563134017737 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Montevideo X-LIC-LOCATION:America/Montevideo BEGIN:DAYLIGHT TZOFFSETFROM:-0300 TZOFFSETTO:-0200 TZNAME:UYST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0200 TZOFFSETTO:-0300 TZNAME:UYT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Boise.ics0000664000076400007640000000072712132563134016672 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Boise X-LIC-LOCATION:America/Boise BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Cayman.ics0000664000076400007640000000045112132563134017033 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Cayman X-LIC-LOCATION:America/Cayman BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Scoresbysund.ics0000664000076400007640000000075012132563134020310 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Scoresbysund X-LIC-LOCATION:America/Scoresbysund BEGIN:DAYLIGHT TZOFFSETFROM:-0100 TZOFFSETTO:+0000 TZNAME:EGST DTSTART:19700329T000000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:-0100 TZNAME:EGT DTSTART:19701025T010000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Cancun.ics0000664000076400007640000000073212132563134017034 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Cancun X-LIC-LOCATION:America/Cancun BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Caracas.ics0000664000076400007640000000045312132563134017162 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Caracas X-LIC-LOCATION:America/Caracas BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:VET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Miquelon.ics0000664000076400007640000000073712132563134017423 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Miquelon X-LIC-LOCATION:America/Miquelon BEGIN:DAYLIGHT TZOFFSETFROM:-0300 TZOFFSETTO:-0200 TZNAME:PMDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0200 TZOFFSETTO:-0300 TZNAME:PMST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Cambridge_Bay.ics0000664000076400007640000000074712132563134020303 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Cambridge_Bay X-LIC-LOCATION:America/Cambridge_Bay BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Mexico_City.ics0000664000076400007640000000074412132563134020044 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Mexico_City X-LIC-LOCATION:America/Mexico_City BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Halifax.ics0000664000076400007640000000073312132563134017202 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Halifax X-LIC-LOCATION:America/Halifax BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:ADT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Sitka.ics0000664000076400007640000000073112132563134016677 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_1/America/Sitka X-LIC-LOCATION:America/Sitka BEGIN:DAYLIGHT TZOFFSETFROM:-0900 TZOFFSETTO:-0800 TZNAME:AKDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0800 TZOFFSETTO:-0900 TZNAME:AKST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Recife.ics0000664000076400007640000000045112132563134017020 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Recife X-LIC-LOCATION:America/Recife BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:BRT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Vancouver.ics0000664000076400007640000000073712132563134017602 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Vancouver X-LIC-LOCATION:America/Vancouver BEGIN:DAYLIGHT TZOFFSETFROM:-0800 TZOFFSETTO:-0700 TZNAME:PDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0700 TZOFFSETTO:-0800 TZNAME:PST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Denver.ics0000664000076400007640000000073112132563134017047 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Denver X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZOFFSETFROM:-0700 TZOFFSETTO:-0600 TZNAME:MDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0700 TZNAME:MST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Sao_Paulo.ics0000664000076400007640000000074112132563134017507 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Sao_Paulo X-LIC-LOCATION:America/Sao_Paulo BEGIN:DAYLIGHT TZOFFSETFROM:-0300 TZOFFSETTO:-0200 TZNAME:BRST DTSTART:19701101T000000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0200 TZOFFSETTO:-0300 TZNAME:BRT DTSTART:19700222T000000 RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Belize.ics0000664000076400007640000000045112132563134017035 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Belize X-LIC-LOCATION:America/Belize BEGIN:STANDARD TZOFFSETFROM:-0600 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Rainy_River.ics0000664000076400007640000000074312132563134020060 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Rainy_River X-LIC-LOCATION:America/Rainy_River BEGIN:DAYLIGHT TZOFFSETFROM:-0600 TZOFFSETTO:-0500 TZNAME:CDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0600 TZNAME:CST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Asuncion.ics0000664000076400007640000000073612132563134017410 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Asuncion X-LIC-LOCATION:America/Asuncion BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:PYST DTSTART:19701018T000000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:PYT DTSTART:19700308T000000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Grenada.ics0000664000076400007640000000045312132563134017166 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Grenada X-LIC-LOCATION:America/Grenada BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Port_of_Spain.ics0000664000076400007640000000046712132563134020374 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Port_of_Spain X-LIC-LOCATION:America/Port_of_Spain BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Bogota.ics0000664000076400007640000000045112132563134017036 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Bogota X-LIC-LOCATION:America/Bogota BEGIN:STANDARD TZOFFSETFROM:-0500 TZOFFSETTO:-0500 TZNAME:COT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Goose_Bay.ics0000664000076400007640000000073712132563134017501 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/America/Goose_Bay X-LIC-LOCATION:America/Goose_Bay BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:-0400 TZOFFSETTO:-0300 TZNAME:ADT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Guadeloupe.ics0000664000076400007640000000046112132563134017716 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Guadeloupe X-LIC-LOCATION:America/Guadeloupe BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/St_Vincent.ics0000664000076400007640000000046112132563134017700 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/St_Vincent X-LIC-LOCATION:America/St_Vincent BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Detroit.ics0000664000076400007640000000073312132563134017240 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Detroit X-LIC-LOCATION:America/Detroit BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Curacao.ics0000664000076400007640000000045312132563134017202 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Curacao X-LIC-LOCATION:America/Curacao BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0400 TZNAME:AST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/America/Belem.ics0000664000076400007640000000044712132563134016654 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/America/Belem X-LIC-LOCATION:America/Belem BEGIN:STANDARD TZOFFSETFROM:-0300 TZOFFSETTO:-0300 TZNAME:BRT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Arctic/0000775000076400007640000000000012132563134014767 5ustar allenallenlibical-1.0/zoneinfo/Arctic/Longyearbyen.ics0000664000076400007640000000074612132563134020134 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Arctic/Longyearbyen X-LIC-LOCATION:Arctic/Longyearbyen BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/CMakeLists.txt0000664000076400007640000000110112132563135016314 0ustar allenallen ########### install files ############### install(FILES zones.tab DESTINATION ${SHARE_INSTALL_DIR}/libical/zoneinfo) set(zoneinfodir Africa America America/North_Dakota America/Indiana America/Kentucky America/Argentina Antarctica Arctic Asia Atlantic Australia Europe Indian Pacific ) foreach(_zoneinfocurrentdir ${zoneinfodir}) file(GLOB _icsfile "${_zoneinfocurrentdir}/*.ics") install( FILES ${_icsfile} DESTINATION ${SHARE_INSTALL_DIR}/libical/zoneinfo/${_zoneinfocurrentdir}/ ) endforeach(_zoneinfocurrentdir ${zoneinfodir}) libical-1.0/zoneinfo/Africa/0000775000076400007640000000000012132563134014747 5ustar allenallenlibical-1.0/zoneinfo/Africa/Juba.ics0000664000076400007640000000044312132563134016331 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_1/Africa/Juba X-LIC-LOCATION:Africa/Juba BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Algiers.ics0000664000076400007640000000045112132563134017035 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Algiers X-LIC-LOCATION:Africa/Algiers BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Johannesburg.ics0000664000076400007640000000046412132563134020100 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Johannesburg X-LIC-LOCATION:Africa/Johannesburg BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:SAST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Libreville.ics0000664000076400007640000000045712132563134017546 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Libreville X-LIC-LOCATION:Africa/Libreville BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Cairo.ics0000664000076400007640000000044512132563134016507 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_3/Africa/Cairo X-LIC-LOCATION:Africa/Cairo BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Kampala.ics0000664000076400007640000000045112132563134017015 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Kampala X-LIC-LOCATION:Africa/Kampala BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Ndjamena.ics0000664000076400007640000000045312132563134017166 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Ndjamena X-LIC-LOCATION:Africa/Ndjamena BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Lusaka.ics0000664000076400007640000000044712132563134016674 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Lusaka X-LIC-LOCATION:Africa/Lusaka BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:CAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/El_Aaiun.ics0000664000076400007640000000045312132563134017126 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/El_Aaiun X-LIC-LOCATION:Africa/El_Aaiun BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:WET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Nouakchott.ics0000664000076400007640000000045712132563134017574 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Nouakchott X-LIC-LOCATION:Africa/Nouakchott BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Dakar.ics0000664000076400007640000000044512132563134016474 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Dakar X-LIC-LOCATION:Africa/Dakar BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Kigali.ics0000664000076400007640000000044712132563134016654 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Kigali X-LIC-LOCATION:Africa/Kigali BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:CAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Addis_Ababa.ics0000664000076400007640000000046112132563134017542 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Addis_Ababa X-LIC-LOCATION:Africa/Addis_Ababa BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Windhoek.ics0000664000076400007640000000073312132563134017222 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Windhoek X-LIC-LOCATION:Africa/Windhoek BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:WAST DTSTART:19700906T020000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Bamako.ics0000664000076400007640000000044712132563134016646 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Bamako X-LIC-LOCATION:Africa/Bamako BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Douala.ics0000664000076400007640000000044712132563134016661 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Douala X-LIC-LOCATION:Africa/Douala BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Maseru.ics0000664000076400007640000000045012132563134016702 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Maseru X-LIC-LOCATION:Africa/Maseru BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:SAST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Monrovia.ics0000664000076400007640000000045312132563134017243 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Monrovia X-LIC-LOCATION:Africa/Monrovia BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Ceuta.ics0000664000076400007640000000073012132563134016510 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Ceuta X-LIC-LOCATION:Africa/Ceuta BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Asmara.ics0000664000076400007640000000044712132563134016660 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Asmara X-LIC-LOCATION:Africa/Asmara BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Harare.ics0000664000076400007640000000044712132563134016656 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Harare X-LIC-LOCATION:Africa/Harare BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:CAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Dar_es_Salaam.ics0000664000076400007640000000046512132563134020127 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Dar_es_Salaam X-LIC-LOCATION:Africa/Dar_es_Salaam BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Mogadishu.ics0000664000076400007640000000045512132563134017373 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Mogadishu X-LIC-LOCATION:Africa/Mogadishu BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Tunis.ics0000664000076400007640000000044512132563134016554 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Africa/Tunis X-LIC-LOCATION:Africa/Tunis BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Mbabane.ics0000664000076400007640000000045212132563134016775 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Mbabane X-LIC-LOCATION:Africa/Mbabane BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:SAST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Conakry.ics0000664000076400007640000000045112132563134017055 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Conakry X-LIC-LOCATION:Africa/Conakry BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Djibouti.ics0000664000076400007640000000045312132563134017222 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Djibouti X-LIC-LOCATION:Africa/Djibouti BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Lagos.ics0000664000076400007640000000044512132563134016517 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Lagos X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Gaborone.ics0000664000076400007640000000045312132563134017205 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Gaborone X-LIC-LOCATION:Africa/Gaborone BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:CAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Tripoli.ics0000664000076400007640000000073412132563134017075 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Africa/Tripoli X-LIC-LOCATION:Africa/Tripoli BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700327T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701030T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Blantyre.ics0000664000076400007640000000045312132563134017231 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Blantyre X-LIC-LOCATION:Africa/Blantyre BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:CAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Maputo.ics0000664000076400007640000000044712132563134016721 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Maputo X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:CAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Sao_Tome.ics0000664000076400007640000000045312132563134017157 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Sao_Tome X-LIC-LOCATION:Africa/Sao_Tome BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Bujumbura.ics0000664000076400007640000000045512132563134017407 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Bujumbura X-LIC-LOCATION:Africa/Bujumbura BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:CAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Khartoum.ics0000664000076400007640000000045312132563134017243 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Khartoum X-LIC-LOCATION:Africa/Khartoum BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Lome.ics0000664000076400007640000000044312132563134016344 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Lome X-LIC-LOCATION:Africa/Lome BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Freetown.ics0000664000076400007640000000045312132563134017242 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Freetown X-LIC-LOCATION:Africa/Freetown BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Niamey.ics0000664000076400007640000000044712132563134016676 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Niamey X-LIC-LOCATION:Africa/Niamey BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Malabo.ics0000664000076400007640000000044712132563134016647 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Malabo X-LIC-LOCATION:Africa/Malabo BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Kinshasa.ics0000664000076400007640000000045312132563134017212 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Kinshasa X-LIC-LOCATION:Africa/Kinshasa BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Nairobi.ics0000664000076400007640000000045112132563134017032 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Nairobi X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:EAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Banjul.ics0000664000076400007640000000044712132563134016667 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Banjul X-LIC-LOCATION:Africa/Banjul BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Brazzaville.ics0000664000076400007640000000046112132563134017735 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Brazzaville X-LIC-LOCATION:Africa/Brazzaville BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Luanda.ics0000664000076400007640000000044712132563134016660 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Luanda X-LIC-LOCATION:Africa/Luanda BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Casablanca.ics0000664000076400007640000000074112132563134017461 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Africa/Casablanca X-LIC-LOCATION:Africa/Casablanca BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:WEST DTSTART:19700426T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:WET DTSTART:19700927T030000 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Bissau.ics0000664000076400007640000000044712132563134016702 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Bissau X-LIC-LOCATION:Africa/Bissau BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Porto-Novo.ics0000664000076400007640000000045712132563134017477 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Porto-Novo X-LIC-LOCATION:Africa/Porto-Novo BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Ouagadougou.ics0000664000076400007640000000046112132563134017727 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Ouagadougou X-LIC-LOCATION:Africa/Ouagadougou BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Abidjan.ics0000664000076400007640000000045112132563134016777 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Abidjan X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Lubumbashi.ics0000664000076400007640000000045712132563134017550 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Lubumbashi X-LIC-LOCATION:Africa/Lubumbashi BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0200 TZNAME:CAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Accra.ics0000664000076400007640000000044512132563134016463 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Accra X-LIC-LOCATION:Africa/Accra BEGIN:STANDARD TZOFFSETFROM:+0000 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Africa/Bangui.ics0000664000076400007640000000044712132563134016661 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Africa/Bangui X-LIC-LOCATION:Africa/Bangui BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0100 TZNAME:WAT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/0000775000076400007640000000000012132563134015507 5ustar allenallenlibical-1.0/zoneinfo/Australia/Adelaide.ics0000664000076400007640000000074112132563134017701 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Australia/Adelaide X-LIC-LOCATION:Australia/Adelaide BEGIN:STANDARD TZOFFSETFROM:+1030 TZOFFSETTO:+0930 TZNAME:CST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0930 TZOFFSETTO:+1030 TZNAME:CST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Broken_Hill.ics0000664000076400007640000000074712132563134020407 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Australia/Broken_Hill X-LIC-LOCATION:Australia/Broken_Hill BEGIN:STANDARD TZOFFSETFROM:+1030 TZOFFSETTO:+0930 TZNAME:CST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0930 TZOFFSETTO:+1030 TZNAME:CST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Lindeman.ics0000664000076400007640000000046112132563134017737 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Australia/Lindeman X-LIC-LOCATION:Australia/Lindeman BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:EST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Darwin.ics0000664000076400007640000000045512132563134017437 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Australia/Darwin X-LIC-LOCATION:Australia/Darwin BEGIN:STANDARD TZOFFSETFROM:+0930 TZOFFSETTO:+0930 TZNAME:CST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Hobart.ics0000664000076400007640000000073512132563134017433 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Australia/Hobart X-LIC-LOCATION:Australia/Hobart BEGIN:DAYLIGHT TZOFFSETFROM:+1000 TZOFFSETTO:+1100 TZNAME:EST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1000 TZNAME:EST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Sydney.ics0000664000076400007640000000073512132563134017467 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Australia/Sydney X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1000 TZNAME:EST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1000 TZOFFSETTO:+1100 TZNAME:EST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Perth.ics0000664000076400007640000000045312132563134017273 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Australia/Perth X-LIC-LOCATION:Australia/Perth BEGIN:STANDARD TZOFFSETFROM:+0800 TZOFFSETTO:+0800 TZNAME:WST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Brisbane.ics0000664000076400007640000000046112132563134017735 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Australia/Brisbane X-LIC-LOCATION:Australia/Brisbane BEGIN:STANDARD TZOFFSETFROM:+1000 TZOFFSETTO:+1000 TZNAME:EST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Lord_Howe.ics0000664000076400007640000000074512132563134020077 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Australia/Lord_Howe X-LIC-LOCATION:Australia/Lord_Howe BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1030 TZNAME:LHST DTSTART:19700405T020000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1030 TZOFFSETTO:+1100 TZNAME:LHST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Currie.ics0000664000076400007640000000073512132563134017445 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Australia/Currie X-LIC-LOCATION:Australia/Currie BEGIN:DAYLIGHT TZOFFSETFROM:+1000 TZOFFSETTO:+1100 TZNAME:EST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1000 TZNAME:EST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Melbourne.ics0000664000076400007640000000074312132563134020143 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110318_2/Australia/Melbourne X-LIC-LOCATION:Australia/Melbourne BEGIN:STANDARD TZOFFSETFROM:+1100 TZOFFSETTO:+1000 TZNAME:EST DTSTART:19700405T030000 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+1000 TZOFFSETTO:+1100 TZNAME:EST DTSTART:19701004T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Australia/Eucla.ics0000664000076400007640000000045412132563134017243 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Australia/Eucla X-LIC-LOCATION:Australia/Eucla BEGIN:STANDARD TZOFFSETFROM:+0845 TZOFFSETTO:+0845 TZNAME:CWST DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/0000775000076400007640000000000012132563134015021 5ustar allenallenlibical-1.0/zoneinfo/Europe/Ljubljana.ics0000664000076400007640000000074012132563134017424 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Ljubljana X-LIC-LOCATION:Europe/Ljubljana BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Skopje.ics0000664000076400007640000000073212132563134016756 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Skopje X-LIC-LOCATION:Europe/Skopje BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Mariehamn.ics0000664000076400007640000000074012132563134017423 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Mariehamn X-LIC-LOCATION:Europe/Mariehamn BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Gibraltar.ics0000664000076400007640000000074012132563134017431 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Gibraltar X-LIC-LOCATION:Europe/Gibraltar BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Monaco.ics0000664000076400007640000000073212132563134016737 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Monaco X-LIC-LOCATION:Europe/Monaco BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Warsaw.ics0000664000076400007640000000073212132563134016767 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Warsaw X-LIC-LOCATION:Europe/Warsaw BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Vatican.ics0000664000076400007640000000073412132563134017112 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Vatican X-LIC-LOCATION:Europe/Vatican BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/London.ics0000664000076400007640000000073112132563134016753 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/London X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:BST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Vaduz.ics0000664000076400007640000000073012132563134016612 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Vaduz X-LIC-LOCATION:Europe/Vaduz BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Lisbon.ics0000664000076400007640000000073212132563134016751 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Lisbon X-LIC-LOCATION:Europe/Lisbon BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:WET DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:WEST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Helsinki.ics0000664000076400007640000000073612132563134017275 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Helsinki X-LIC-LOCATION:Europe/Helsinki BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Kiev.ics0000664000076400007640000000072612132563134016424 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Kiev X-LIC-LOCATION:Europe/Kiev BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Zagreb.ics0000664000076400007640000000073212132563134016735 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Zagreb X-LIC-LOCATION:Europe/Zagreb BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Prague.ics0000664000076400007640000000073212132563134016746 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Prague X-LIC-LOCATION:Europe/Prague BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Copenhagen.ics0000664000076400007640000000074212132563134017573 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Copenhagen X-LIC-LOCATION:Europe/Copenhagen BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Tirane.ics0000664000076400007640000000073212132563134016745 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Tirane X-LIC-LOCATION:Europe/Tirane BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Jersey.ics0000664000076400007640000000073112132563134016763 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Jersey X-LIC-LOCATION:Europe/Jersey BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:BST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Athens.ics0000664000076400007640000000073212132563134016745 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Athens X-LIC-LOCATION:Europe/Athens BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Chisinau.ics0000664000076400007640000000073612132563134017272 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Chisinau X-LIC-LOCATION:Europe/Chisinau BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Brussels.ics0000664000076400007640000000073612132563134017331 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Brussels X-LIC-LOCATION:Europe/Brussels BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Rome.ics0000664000076400007640000000072612132563134016430 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Rome X-LIC-LOCATION:Europe/Rome BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Isle_of_Man.ics0000664000076400007640000000074312132563134017700 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Isle_of_Man X-LIC-LOCATION:Europe/Isle_of_Man BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:BST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Amsterdam.ics0000664000076400007640000000074012132563134017437 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Amsterdam X-LIC-LOCATION:Europe/Amsterdam BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Oslo.ics0000664000076400007640000000072612132563134016442 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Oslo X-LIC-LOCATION:Europe/Oslo BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Madrid.ics0000664000076400007640000000073212132563134016723 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Madrid X-LIC-LOCATION:Europe/Madrid BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Minsk.ics0000664000076400007640000000044512132563134016605 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_2/Europe/Minsk X-LIC-LOCATION:Europe/Minsk BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:FET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Bucharest.ics0000664000076400007640000000074012132563134017442 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Bucharest X-LIC-LOCATION:Europe/Bucharest BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Andorra.ics0000664000076400007640000000073412132563134017113 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Andorra X-LIC-LOCATION:Europe/Andorra BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Kaliningrad.ics0000664000076400007640000000046112132563134017745 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20130218_3/Europe/Kaliningrad X-LIC-LOCATION:Europe/Kaliningrad BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0300 TZNAME:FET DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Bratislava.ics0000664000076400007640000000074212132563134017614 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Bratislava X-LIC-LOCATION:Europe/Bratislava BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Budapest.ics0000664000076400007640000000073612132563134017276 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Budapest X-LIC-LOCATION:Europe/Budapest BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Zaporozhye.ics0000664000076400007640000000074212132563134017676 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Zaporozhye X-LIC-LOCATION:Europe/Zaporozhye BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/San_Marino.ics0000664000076400007640000000074212132563134017552 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/San_Marino X-LIC-LOCATION:Europe/San_Marino BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Zurich.ics0000664000076400007640000000073212132563134016767 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Zurich X-LIC-LOCATION:Europe/Zurich BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Berlin.ics0000664000076400007640000000073212132563134016736 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Berlin X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Podgorica.ics0000664000076400007640000000074012132563134017431 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Podgorica X-LIC-LOCATION:Europe/Podgorica BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Dublin.ics0000664000076400007640000000073112132563134016737 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Dublin X-LIC-LOCATION:Europe/Dublin BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:IST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Luxembourg.ics0000664000076400007640000000074212132563134017655 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Luxembourg X-LIC-LOCATION:Europe/Luxembourg BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Paris.ics0000664000076400007640000000073012132563134016577 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Paris X-LIC-LOCATION:Europe/Paris BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Nicosia.ics0000664000076400007640000000073412132563134017112 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Nicosia X-LIC-LOCATION:Europe/Nicosia BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Belgrade.ics0000664000076400007640000000073612132563134017234 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Belgrade X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Moscow.ics0000664000076400007640000000044712132563134016775 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Europe/Moscow X-LIC-LOCATION:Europe/Moscow BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:MSK DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Samara.ics0000664000076400007640000000045012132563134016724 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_3/Europe/Samara X-LIC-LOCATION:Europe/Samara BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:SAMT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Vilnius.ics0000664000076400007640000000073412132563134017156 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Vilnius X-LIC-LOCATION:Europe/Vilnius BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Riga.ics0000664000076400007640000000072612132563134016410 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Riga X-LIC-LOCATION:Europe/Riga BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Stockholm.ics0000664000076400007640000000074012132563134017465 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Stockholm X-LIC-LOCATION:Europe/Stockholm BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Simferopol.ics0000664000076400007640000000074212132563134017643 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Simferopol X-LIC-LOCATION:Europe/Simferopol BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Malta.ics0000664000076400007640000000073012132563134016557 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Malta X-LIC-LOCATION:Europe/Malta BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Volgograd.ics0000664000076400007640000000045612132563134017452 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_2/Europe/Volgograd X-LIC-LOCATION:Europe/Volgograd BEGIN:STANDARD TZOFFSETFROM:+0400 TZOFFSETTO:+0400 TZNAME:VOLT DTSTART:19700101T000000 END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Vienna.ics0000664000076400007640000000073212132563134016743 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Vienna X-LIC-LOCATION:Europe/Vienna BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Tallinn.ics0000664000076400007640000000073412132563134017126 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Tallinn X-LIC-LOCATION:Europe/Tallinn BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Istanbul.ics0000664000076400007640000000073612132563134017310 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20110819_3/Europe/Istanbul X-LIC-LOCATION:Europe/Istanbul BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Uzhgorod.ics0000664000076400007640000000073612132563134017330 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Uzhgorod X-LIC-LOCATION:Europe/Uzhgorod BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Sarajevo.ics0000664000076400007640000000073612132563134017301 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Sarajevo X-LIC-LOCATION:Europe/Sarajevo BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Sofia.ics0000664000076400007640000000073012132563134016562 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Sofia X-LIC-LOCATION:Europe/Sofia BEGIN:DAYLIGHT TZOFFSETFROM:+0200 TZOFFSETTO:+0300 TZNAME:EEST DTSTART:19700329T030000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0300 TZOFFSETTO:+0200 TZNAME:EET DTSTART:19701025T040000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/zoneinfo/Europe/Guernsey.ics0000664000076400007640000000073512132563134017327 0ustar allenallenBEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:/citadel.org/20070227_1/Europe/Guernsey X-LIC-LOCATION:Europe/Guernsey BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:BST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR libical-1.0/config.guess0000755000076400007640000012743212141300002014241 0ustar allenallen#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libical-1.0/README0000664000076400007640000000674112141277315012626 0ustar allenallen LIBICAL -- an implementation of iCalendar protocols and data formats Most of the code in here was written by Eric Busboom with help from dozens of contributors. It is currently maintained by Art Cancro and Wilfried Goesgens. libical is available for you to use under your choice of the Mozilla Public License (MPL) v1.0 or the GNU Library General Public License (LGPL) v2.1. This dual license ensures that the library can be incorporated into both proprietary code and GPL'd programs, and will benefit from improvements made by programmers in both realms. We will only accept changes into the library if they are similarly dual-licensed. Portions of this distribution are (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. See src/libicalvcal/README.TXT for details. Portions of this distribution are Copyright (c) 1997 Theo de Raadt. See the header for src/libical/vsnprintf.c for the full copyright statement. If you would like to contribute to this project, please visit the SourceForge page: http://freeassociation.sourceforge.net Building the library -------------------- This distribution is developed on CentOS Linux and should also build cleanly on any unix-like system as long as it has the usual set of open source build tools online. The library is configured with automake. IF YOU ARE BUILDING THE SOURCE FROM A TARBALL, From the root directory, run ./configure To build all of the Makefiles for your system. If you will be installing the library, you may want to use the --prefix flag to set the directory where the library and header files will be installed. ./configure --prefix=/proj/local/ If configure runs fine, run "make" to build the library and "make install" to install it. Although the distribution uses libtool to generate libraries, it has shared libraries turned off by default. To create and install shared libraries use: ./configure --enable-shared IF YOU ARE BUILDING FROM SVN, there will be no configure file until you create one with the "bootstrap" script. The current version of libical focuses on creating and manipulating iCal objects. With it, you can parse text representations of iCal components, add and remove sub-components, properties, parameters and values, and print the components back out as strings. Notes for Libical Developers ---------------------------- If you don't want to use gcc as the compiler, and you got the sources from SVN, you should set the CC variable to the path to the compiler and run "automake --include-deps" to keep automake from using gcc-specific automatic dependancy tracking. > CC=/pkg/SUNWspro/bin/cc; export CC > automake --include-deps > ./configure --prefix=/proj/local/ > make You will not need to re-run automake unless you got the sources from SVN. When updating to a new release, tweak the version number in the following files: CMakeLists.txt configure.in src/libical/icalversion.h src/java/Makefile.am src/libicalcap/Makefile.am src/libical/Makefile.am src/libicalss/Makefile.am src/libicalvcal/Makefile.am src/java/CMakeLists.txt src/libicalcap/CMakeLists.txt src/libicalss/CMakeLists.txt src/libicalvcal/CMakeLists.txt Using the Library ----------------- There is rudimentary, unfinished documentation in the /doc directory, and annotated examples in /examples and the test code in src/test. Sourcecode now in SVN --------------------- We now work in our SF.net SVN Repository. Please don't use the CVS anymore. libical-1.0/install-sh0000775000076400007640000003253712132563136013753 0ustar allenallen#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libical-1.0/config-libical.h.cmake0000664000076400007640000000152712132563136016034 0ustar allenallen/* config.h. Generated by cmake from config.h.cmake */ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_WCTYPE_H 1 /* FIXME: These are statically defined, as the configure check fails too often This prevents libical's snprintf() copy to be used, which is buggy and causes dbus to crash in handle_error() In case there is a platform to be supported without working vsnprintf(), a) fix the configure check b) fix libical's vsnprintf.c/provide a better snprintf() implementation */ #define HAVE_SNPRINTF 1 #define HAVE_VSNPRINTF 1 /* Define to 1 if you have the `iswspace' function. */ #cmakedefine HAVE_ISWSPACE 1 libical-1.0/NEWS0000664000076400007640000000007012141277315012432 0ustar allenallen FOX News has accuracy and integrity. MSNBC is trash. libical-1.0/configure.in.in0000664000076400007640000000072412132563136014656 0ustar allenallendnl Checks for programs. AC_PROG_YACC AM_PROG_LEX AC_CHECK_PROGS(PERL, perl5 perl) AC_DEFINE(ICAL_SAFESAVES,1, [safe saves]) AC_DEFINE(ICAL_UNIX_NEWLINE,1, [unix newline]) AC_DEFINE(ICAL_ALLOW_EMPTY_PROPERTIES,0, [allow empty properties]) AC_CHECK_HEADERS(time.h sys/types.h assert.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T AC_STRUCT_TM AM_PROG_LEX dnl Checks for library functions. AC_CHECK_FUNCS(strdup) libical-1.0/debian/0000775000076400007640000000000012141276220013152 5ustar allenallenlibical-1.0/debian/copyright0000664000076400007640000006252612132563125015123 0ustar allenallenThis package was debianized by Fathi Boudra on Wed, 27 Dec 2006 12:19:06 +0100. It was downloaded from http://www.aurore.net/projects/libical/ This is a modified version of the original libical project from softwarestudio and the original author is Eric Busboom . Upstream Authors: John Gray Andrea Campi Omar Kilani Copyright for generated icalderivedproperties: (C) 1999 Eric Busboom Copyright for generated restrictionrecords and parameterrestrictions: (C) 1999 Graham Davison Copyright for sspm based on code from the mimelite distribution: (C) 1994 Gisle Hannemyr (C) 2000 Eric Busboom Copyright for snprintf: (C) 1997 Theo de Raadt Copyright for astime and caldate: (C) 1986-2000 Hiram Clawson Copyright for icalattach: (C) 2002 Andrea Campi Copyright for icaltimezone: (C) 2001 Damon Chaplin Copyright for icalarray: (C) 2001 Ximian Inc. astime and caldate license: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither name of The Museum of Hiram nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. snprintf license: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. sspm license: Permission is granted to hack, make and distribute copies of this program as long as this copyright notice is not removed. libical license: The code and datafiles in this distribution are licensed under the Mozilla Public License. See http://www.mozilla.org/NPL/MPL-1.0.html for a copy of the license. Alternately, you may use libical under the terms of the GNU Library General Public License. See http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL. This dual license ensures that the library can be incorporated into both proprietary code and GPL'd programs, and will benefit from improvements made by programmers in both realms. I will only accept changes into my version of the library if they are similarly dual-licensed. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ MPL 1.0 license: MOZILLA PUBLIC LICENSE Version 1.0 ---------------- 1. Definitions. 1.1. ``Contributor'' means each entity that creates or contributes to the creation of Modifications. 1.2. ``Contributor Version'' means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. ``Covered Code'' means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. 1.4. ``Electronic Distribution Mechanism'' means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. ``Executable'' means Covered Code in any form other than Source Code. 1.6. ``Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. ``Larger Work'' means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. ``License'' means this document. 1.9. ``Modifications'' means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. ``Original Code'' means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.11. ``Source Code'' means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. ``You'' means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, ``You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, ``control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and (b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell (``Utilize'') the Original Code (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or combinations. 2.2. Contributor Grant. Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code or as part of a Larger Work; and (b) under patents now or hereafter owned or controlled by Contributor, to Utilize the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Contributor Version (or portions thereof), and not to any greater extent that may be necessary to Utilize further Modifications or combinations. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which you contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters (a) Third Party Claims. If You have knowledge that a party claims an intellectual property right in particular functionality or code (or its utilization under this License), you must include a text file with the source code distribution titled ``LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after You make Your Modification available as described in Section 3.2, You shall promptly modify the LEGAL file in all copies You make available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Your Modification is an application programming interface and You own or control patents which are reasonably necessary to implement that API, you must also include this information in the LEGAL file. 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code, and this License in any documentation for the Source Code, where You describe recipients' rights relating to Covered Code. If You created one or more Modification(s), You may add your name as a Contributor to the notice described in Exhibit A. If it is not possible to put such notice in a particular Source Code file due to its structure, then you must include such notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A, and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Netscape Communications Corporation (``Netscape'') may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If you create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), you must (a) rename Your license so that the phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or any confusingly similar phrase do not appear anywhere in your license and (b) otherwise make it clear that your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a ``commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software'' and ``commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in, the United States of America: (a) unless otherwise agreed in writing, all disputes relating to this License (excepting any dispute relating to intellectual property rights) shall be subject to final and binding arbitration, with the losing party paying all costs of arbitration; (b) any arbitration relating to this Agreement shall be held in Santa Clara County, California, under the auspices of JAMS/EndDispute; and (c) any litigation relating to this Agreement shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. Except in cases where another Contributor has failed to comply with Section 3.4, You are responsible for damages arising, directly or indirectly, out of Your utilization of rights under this License, based on the number of copies of Covered Code you made available, the revenues you received from utilizing such rights, and other relevant factors. You agree to work with affected parties to distribute responsibility on an equitable basis. EXHIBIT A. ``The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is ______________________________________. The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved. Contributor(s): ______________________________________.'' LGPL license: This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU Lesser General Public License can be found in `/usr/share/common-licenses/LGPL'. The Debian packaging is (C) 2006, Fathi Boudra and is licensed under the GPL, see `/usr/share/common-licenses/GPL'. libical-1.0/debian/python-libical.install0000664000076400007640000000002312132563125017456 0ustar allenallenusr/lib/pymodules/*libical-1.0/debian/rules0000775000076400007640000001167612132563125014250 0ustar allenallen#!/usr/bin/make -f # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) CFLAGS = -Wall -g EXTRA_ARGS= PROFILE_ARGS= # To enable debugging: export DEB_BUILD_OPTIONS="debug profiling threadoff" ifneq (,$(findstring profiling,$(DEB_BUILD_OPTIONS))) PROFILE_ARGS= --with-gprof endif ifneq (,$(findstring backtrace,$(DEB_BUILD_OPTIONS))) EXTRA_ARGS=--with-backtrace BTCFLAGS=-rdynamic endif ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 -ggdb -D_GNU_SOURCE -MD -MP -Wl,--as-needed -Wall -ansi else CFLAGS += -O2 endif # shared library versions, option 1 version=2.0.5 major=2 # option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so #version=`ls src/.libs/lib*.so.* | \ # awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` #major=`ls src/.libs/lib*.so.* | \ # awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` PYVERS=$(shell pyversions -vr) build: build-c $(PYVERS:%=build-python%/build-stamp) install: build install-c $(PYVERS:%=install-python%) clean: clean-c $(PYVERS:%=clean-python%) ### Python libraries build rules ### build-python%/configure-stamp: dh_testdir mkdir build-python$* cd build-python$* && \ PYTHON=/usr/bin/python$* CFLAGS="$(BTCFLAGS) $(CFLAGS)" ../configure \ --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --srcdir=.. \ --prefix=/usr \ --includedir="/usr/include" \ --mandir="/usr/share/man" \ --sysconfdir=/etc \ --localstatedir=/var \ $(EXTRA_ARGS) $(PROFILE_ARGS) \ --libexecdir="/usr/lib/libical" \ --enable-python touch $@ build-python%/build-stamp: build-c build-python%/configure-stamp dh_testdir # Trick into using already built build-c libs so we don't end up # building the same ical lib more than once. find "build-python$*/src" -maxdepth 1 -mindepth 1 | grep -v python$$ | xargs -r -t rm -rf find "build-c/src" -maxdepth 1 -mindepth 1 | grep -v python$$ | xargs -r -t -I{} ln -s "../../{}" "build-python$*/src" $(MAKE) -C build-python$*/src/python pyexecdir=/usr/lib/pymodules/python$* touch $@ install-python%: build-python%/build-stamp dh_testdir dh_testroot # dh_clean -k dh_installdirs # install with hack to move installed python libs to pymodule dir $(MAKE) -C build-python$*/src/python install pyexecdir=/usr/lib/pymodules/python$* DESTDIR=$(CURDIR)/debian/tmp && \ mv -i $(CURDIR)/debian/tmp/usr/lib/python$*/*/* $(CURDIR)/debian/tmp/usr/lib/pymodules/python$*/ clean-python%: # mkdir -p build-python$* && cd build-python$* dh_testdir # dh_testroot rm -rf build-python$* dh_prep ### C libraries build rules ### build-c/configure-stamp: configure #config.status: configure dh_testdir ifneq "$(wildcard /usr/share/misc/config.sub)" "" cp -f /usr/share/misc/config.sub config.sub endif ifneq "$(wildcard /usr/share/misc/config.guess)" "" cp -f /usr/share/misc/config.guess config.guess endif mkdir build-c cd build-c && \ CFLAGS="$(BTCFLAGS) $(CFLAGS)" ../configure \ --host=$(DEB_HOST_GNU_TYPE) \ --build=$(DEB_BUILD_GNU_TYPE) \ --prefix=/usr \ --includedir="/usr/include" \ --mandir="/usr/share/man" \ --sysconfdir=/etc \ --localstatedir=/var \ $(EXTRA_ARGS) $(PROFILE_ARGS) \ --libexecdir="/usr/lib/libical" touch $@ build-c: build-c/build-stamp build-c/build-stamp: build-c/configure-stamp dh_testdir # $(MAKE) clean $(MAKE) -C build-c touch $@ clean-c: dh_testdir dh_testroot rm -rf build-c dh_prep install-c: build-c dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) -C build-c DESTDIR=$(CURDIR)/debian/tmp install # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs ChangeLog dh_installdocs dh_installexamples dh_install -s --sourcedir=debian/tmp # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_installinit # dh_installcron # dh_installinfo dh_installman dh_link dh_strip dh_compress dh_fixperms # dh_perl dh_pysupport # dh_makeshlibs dh_installdeb # dh_shlibdeps # We need to exclude dependency resolving for the python extension # module because if libical0 is installed but libical-dev is not # we get build errors. The lib in /usr/lib will be found first # but no .la will exist to get the dependency info from. Is there # a way to tell dh_shlibdeps to find the lib first in debian/tmp? dh_shlibdeps -XLibicalWrap # dh_shlibdeps -l$(CURDIR)/debian/tmp/usr/lib -- -v dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install libical-1.0/debian/libical-dev.install0000664000076400007640000000024312132563125016717 0ustar allenallenusr/include usr/lib/libical.a usr/lib/libical.so usr/lib/libicalss.a usr/lib/libicalss.so usr/lib/libicalvcal.a usr/lib/libicalvcal.so usr/lib/pkgconfig/libical.pclibical-1.0/debian/libical0.install0000664000076400007640000000002212132563125016216 0ustar allenallenusr/lib/lib*.so.* libical-1.0/debian/control0000664000076400007640000000470512132563125014566 0ustar allenallenSource: libical Section: libs Priority: optional Maintainer: Wilfried Goesgens Uploaders: Fathi Boudra Build-Depends: debhelper (>= 5.0.42), autotools-dev, tzdata, swig, python-all-dev (>= 2.4.4), python-support (>= 0.5.6), python (>= 2.4.4) XS-Python-Version: all Standards-Version: 3.7.2 Homepage: http://freeassociation.sourceforge.net Package: libical-dev Section: libdevel Architecture: any Depends: ${misc:Depends}, libical0 (= ${binary:Version}) Description: iCalendar library implementation in C (development) libical is an open source implementation of the IETF's iCalendar calendaring and scheduling protocols (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. . This package contains the libical development files. Package: libical0 Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, tzdata Description: iCalendar library implementation in C (runtime) libical is an open source implementation of the IETF's iCalendar calendaring and scheduling protocols (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. . This package contains the files necessary for running applications that use the libical library. Package: libical0-dbg Section: libs Priority: extra Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libical0 (= ${binary:Version}) Description: iCalendar library implementation in C (runtime) libical is an open source implementation of the IETF's iCalendar calendaring and scheduling protocols (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. . This package contains the files necessary for running and debugging applications that use the libical library. Package: python-libical Section: python Architecture: any Depends: ${shlibs:Depends}, ${python:Depends}, libical0 (= ${binary:Version}) Description: iCalendar library implementation python language bindings libical is an open source implementation of the IETF's iCalendar calendaring and scheduling protocols (RFC 2445, 2446, and 2447). It parses iCal components and provides a C API for manipulating the component properties, parameters, and subcomponents. . This package contains the python language bindings. libical-1.0/debian/changelog0000664000076400007640000000222612132563125015031 0ustar allenallenlibical (0.43-6) stable; urgency=high * new upstream release -- Wilfried Goesgens Sat, 13 Sep 2008 10:00:00 +0001 libical (0.31-4) stable; urgency=high * new release fixing a crash -- Wilfried Goesgens Mon, 17 Mar 2008 20:00:00 +0001 libical (0.30-1) unstable; urgency=low [ Wilfried Goesgens ] * remove CDBS * merge into upstream libical * merge in several patches roaming arround -- Wilfried Goesgens Wed, 30 Nov 2007 12:19:06 +0100 libical (0.26.6-1) unstable; urgency=low [ Fathi Boudra ] * Initial Debian release (Closes: #404862) * Remove dirs and README.Debian * Add soname patch * compat: bumped to 5 * control: * convert package to cdbs * add myself as uploader * bump Standards-Version to 3.7.2 * rewrite descriptions * copyright: complete rewrite [ Wilfried Goesgens ] * Update to aurore ical. -- Fathi Boudra Wed, 27 Dec 2006 12:19:06 +0100 libical (0.24-1) unstable; urgency=low * Initial release -- Wilfried Goesgens Fri, 22 Jul 2005 13:09:43 +0200 libical-1.0/debian/docs0000664000076400007640000000002112132563125014021 0ustar allenallenNEWS README TODO libical-1.0/debian/compat0000664000076400007640000000000212132563125014353 0ustar allenallen5 libical-1.0/README.win320000664000076400007640000000621112132563135013555 0ustar allenallenBuilding on Win32. Building libical on Windows is a different process than building it on the other platforms: Instead of autogenerating makefiles using the autoconf/automake/make tools, Microsoft project files (.dsp) are used. Here are the requirements and steps to build libical on the Win32 platform. Software Requirements --------------------- The following softwares need to be installed for a standard Windows build: - Microsoft Visual C++ 6.0 or higher (only tested on 6.0 as of today). - GNU Tools for Microsoft Windows (the cygwin toolkit). cygwin is a UNIX-like environment for Windows, free from Red Hat. libical uses a few set of cygwin packages, which must be installed. Go to http://www.cygwin.com and follow the installation instructions. The cygwin installer wizard runs as a Windows program. One page of the wizard presents an outline view of categories and packages. Here is a list of the cygwin packages needed for building libical: . base --> ash : Unix-like command line interpreter shell. . base --> grep: GNU grep, egrep and fgrep . interpreters --> perl: A scripting language used to autogenerate some header files. Environment Variables --------------------- Visual C++ needs to be able to launch the cygwin tools. To do so, you can either: - add the path to the cygwin tools (by default c:\cygwin\bin) to your global or user Path enviroment variable, - or, in Visual C++ go to Tools --> Options --> Directories --> Show directories for Executable files and add the path to the cygwin tools (by default c:\cygwin\bin). Building the library -------------------- You need to build each subcomponent of libical one by one in the following order: . src/libical/libical.dsp . src/libicalss/libicalss.dsp . src/libicalvcal/libicalvcal.dsp Testing your build ------------------ libical comes with 2 regression test programs: . src/test/recur.dsp . src/test/regression.dsp Building those and running them (from the command line or from VC++) is probably a good idea to check that your build is OK. The results are pretty much self explanatory. Of course, running the regression tests becomes mandatory if you're planning on submitting a change. Using the library ----------------- By default, the library is created as a static library under src/libical/Debug/libical.lib (Debug version). You can also create a Release version which will be put under src/libical/Release/libical.lib. The header file ical.h is autogenerated by the build process and should be located under src/libical/ical.h. The library is created using the (Debug) Multithreaded DLL run-time library option. Be sure that you have the same setting in your application (Project --> Settings --> C/C++ --> Code Generation) or things will start to break. The symptoms of this problem are link time errors like: MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in LIBCMTD.lib(dbgheap.obj) MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _free already defined in LIBCMTD.lib(dbgheap.obj) MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strncmp already defined in LIBCMTD.lib(strncmp.obj) Alternatively, you can alter the libical .dsp files and recompile the library. libical-1.0/examples/0000775000076400007640000000000012141277613013555 5ustar allenallenlibical-1.0/examples/parse_text.c0000664000076400007640000000305512132563136016100 0ustar allenallen/* parse_text.c */ #include #include #include #include #include #include /* The icalparser_get_line routine will create a single *content* line out of one or more input lines. The content line is all of the properties and values for a single property, and it can span several input lines. So, icalparser_get_line will need to be able to get more data on its own. Read_string is a routine that does this. You can write your own version of read stream to get data from other types of files, sockets, etc. */ char* read_stream(char *s, size_t size, void *d) { char *c = fgets(s,size, (FILE*)d); return c; } void parse_text(int argc, char* argv[]) { char* line; FILE* stream; icalcomponent *c; /* Create a new parser object */ icalparser *parser = icalparser_new(); stream = fopen(argv[1],"r"); assert(stream != 0); /* Tell the parser what input routie it should use. */ icalparser_set_gen_data(parser,stream); do{ /* Get a single content line by making one or more calls to read_stream()*/ line = icalparser_get_line(parser,read_stream); /* Now, add that line into the parser object. If that line completes a component, c will be non-zero */ c = icalparser_add_line(parser,line); if (c != 0){ char *temp = icalcomponent_as_ical_string_r(c); printf("%s", temp); free(temp); printf("\n---------------\n"); icalcomponent_free(c); } } while ( line != 0); icalparser_free(parser); } libical-1.0/examples/usecases.c0000664000076400007640000000473312132563136015541 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: usecases.c CREATOR: eric 03 April 1999 DESCRIPTION: $Id: usecases.c,v 1.3 2008-01-02 20:07:29 dothebart Exp $ $Locker: $ (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The original author is Eric Busboom The original code is usecases.c ======================================================================*/ #include #include #include /* for strdup */ #include /* for malloc */ #include /* for printf */ #include /* for time() */ char str[] = "BEGIN:VCALENDAR\ PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ VERSION:2.0\ BEGIN:VEVENT\ DTSTAMP:19980309T231000Z\ UID:guid-1.host1.com\ ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\ ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\ DESCRIPTION:Project XYZ Review Meeting\ CATEGORIES:MEETING\ CREATED:19980309T130000Z\ SUMMARY:XYZ Project Review\ DTSTART;TZID=US-Eastern:19980312T083000\ DTEND;TZID=US-Eastern:19980312T093000\ END:VEVENT\ END:VCALENDAR"; /* Here are some ways to work with values. */ void test_values() { icalvalue *v; icalvalue *copy; char *str; v = icalvalue_new_caladdress("cap://value/1"); printf("caladdress 1: %s\n",icalvalue_get_caladdress(v)); icalvalue_set_caladdress(v,"cap://value/2"); printf("caladdress 2: %s\n",icalvalue_get_caladdress(v)); str = icalvalue_as_ical_string_r(v)); printf("String: %s\n", str); free(str); copy = icalvalue_new_clone(v); str = icalvalue_as_ical_string_r(v); printf("Clone: %s\n", str); free(str); icalvalue_free(v); icalvalue_free(copy); } void test_parameters() { icalparameter *p; char *str; p = icalparameter_new_cn("A Common Name"); printf("Common Name: %s\n",icalparameter_get_cn(p)); str = icalparameter_as_ical_string_r(p)); printf("As String: %s\n", str); free(str); } libical-1.0/examples/changenames.pl0000664000076400007640000000015612132563136016363 0ustar allenallens/icalcluster/icalfileset/g; s/ICALCLUSTER/ICALFILESET/g; s/icalstore/icaldirset/g; s/ICALSTORE/ICALDIRSET/g; libical-1.0/examples/access-usecases.txt0000664000076400007640000000253412132563136017372 0ustar allenallen Usecases --------- 1) iMIP based CUA uses a local, file-based store 2) CAP based CUA uses one or more remote CAP servers 3) CAP based CUA uses a local cache that synchronizes with one or more CAP servers. 4) CUA imports and exports from a file Scenarios. --------- 1 Open a connection to a store. 2 Create a new calendar for which user Bob can read and user Alice can read an write. 3 Create several new calendars 4 Delete a calendar 5 Change the calid of a calendar 6 Delete all calendars belonging to user bob 7 Get three new UIDs from the store 8 Store a new VEVENT in the store. 9 Find all components for which the LOCATION is "West Conference Room" and change them to "East Conference Room" 10 Find the component with UID X and add a GEO property to it. 11 Delete all VEVENTS which have a METHOD that is not CREATED 12 Retrieve all VEVENTS which have a METHOD that is not CREATED 13 Retrieve the capabilities of the store 14 Retrieve/Modify/Add/Delete properties of a store 15 Retrieve/Modify/Add/Delete VCARs of a store 16 Retrieve/Modify/Add/Delete VTIMEZONEs of a store 17 Retrieve/Modify/Add/Delete properties of a calendar 18 Retrieve/Modify/Add/Delete VCARs of a calendar 19 Retrieve/Modify/Add/Delete VTIMEZONEs of a calendar 20 Translate a CALID into one or more UPNs 21 Expand a group UPN into all of the members of the grouplibical-1.0/examples/main.c0000664000076400007640000000026112132563136014642 0ustar allenallen/* This is just to make the code in the example directory link properly. */ #include int main() { return 1; } void do_something(icalcomponent* comp){ } libical-1.0/examples/Makefile.am0000664000076400007640000000107712132563136015614 0ustar allenallen noinst_PROGRAMS = doesnothing if WITH_BDB4 doesnothing_LDADD = ../src/libical/libical.la ../src/libicalss/libicalss.la ../src/libicalvcal/libicalvcal.la @BDB_DIR_LIB@/@BDB_LIB@ else doesnothing_LDADD = ../src/libical/libical.la ../src/libicalss/libicalss.la ../src/libicalvcal/libicalvcal.la endif LIBS = @PTHREAD_LIBS@ INCLUDES = -I. -I../src -I../src/libical -I$(srcdir)/../src/libical -I../src/libicalss -I../src/libicalvcal doesnothing_SOURCES = \ access_components.c \ access_properties_and_parameters.c \ errors.c \ main.c \ parse_text.c distclean: clean libical-1.0/examples/access_components.c0000664000076400007640000002040012132563136017421 0ustar allenallen/* Access_component.c */ #include #include #include /* for strdup */ #include /* for malloc */ #include /* for printf */ #include /* for time() */ void do_something(icalcomponent *c); /* Creating iCal Components There are two ways to create new component in libical. You can build the component from primitive parts, or you can create it from a string. There are two variations of the API for building the component from primitive parts. In the first variation, you add each parameter and value to a property, and then add each property to a component. This results in a long series of function calls. This style is show in create_new_component() The second variation uses vargs lists to nest many primitive part constructors, resulting in a compact, neatly formated way to create components. This style is shown in create_new_component_with_va_args() */ icalcomponent* create_new_component() { /* variable definitions */ icalcomponent* calendar; icalcomponent* event; struct icaltimetype atime = icaltime_from_timet( time(0),0); struct icalperiodtype rtime; icalproperty* property; /* Define a time type that will use as data later. */ rtime.start = icaltime_from_timet( time(0),0); rtime.end = icaltime_from_timet( time(0),0); rtime.end.hour++; /* Create calendar and add properties */ calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); /* Nearly every libical function call has the same general form. The first part of the name defines the 'class' for the function, and the first argument will be a pointer to a struct of that class. So, icalcomponent_ functions will all take icalcomponent* as their first argument. */ /* The next call creates a new proeprty and immediately adds it to the 'calendar' component. */ icalcomponent_add_property( calendar, icalproperty_new_version("2.0") ); /* Here is the short version of the memory rules: If the routine name has "new" in it: Caller owns the returned memory. If you pass in a string, the routine takes the memory. If the routine name has "add" in it: The routine takes control of the component, property, parameter or value memory. If the routine returns a string ( "get" and "as_ical_string" ) The library owns the returned memory. There are more rules, so refer to the documentation for more details. */ icalcomponent_add_property( calendar, icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN") ); /* Add an event */ event = icalcomponent_new(ICAL_VEVENT_COMPONENT); icalcomponent_add_property( event, icalproperty_new_dtstamp(atime) ); /* In the previous call, atime is a struct, and it is passed in by value. This is how all compound types of values are handled. */ icalcomponent_add_property( event, icalproperty_new_uid("guid-1.host1.com") ); /* add a property that has parameters */ property = icalproperty_new_organizer("mailto:mrbig@host.com"); icalproperty_add_parameter( property, icalparameter_new_role(ICAL_ROLE_CHAIR) ); icalcomponent_add_property(event,property); /* In this style of component creation, you need to use an extra call to add parameters to properties, but the form of this operation is the same as adding a property to a component */ /* add another property that has parameters */ property = icalproperty_new_attendee("mailto:employee-A@host.com"); icalproperty_add_parameter( property, icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT) ); icalproperty_add_parameter( property, icalparameter_new_rsvp(1) ); icalproperty_add_parameter( property, icalparameter_new_cutype(ICAL_CUTYPE_GROUP) ); icalcomponent_add_property(event,property); /* more properties */ icalcomponent_add_property( event, icalproperty_new_description("Project XYZ Review Meeting") ); icalcomponent_add_property( event, icalproperty_new_categories("MEETING") ); icalcomponent_add_property( event, icalproperty_new_class(ICAL_CLASS_PUBLIC) ); icalcomponent_add_property( event, icalproperty_new_created(atime) ); icalcomponent_add_property( event, icalproperty_new_summary("XYZ Project Review") ); property = icalproperty_new_dtstart(atime); icalproperty_add_parameter( property, icalparameter_new_tzid("US-Eastern") ); icalcomponent_add_property(event,property); property = icalproperty_new_dtend(atime); icalproperty_add_parameter( property, icalparameter_new_tzid("US-Eastern") ); icalcomponent_add_property(event,property); icalcomponent_add_property( event, icalproperty_new_location("1CP Conference Room 4350") ); icalcomponent_add_component(calendar,event); return calendar; } /* Now, create the same component as in the previous routine, but use the constructor style. */ icalcomponent* create_new_component_with_va_args() { /* This is a similar set up to the last routine */ icalcomponent* calendar; struct icaltimetype atime = icaltime_from_timet( time(0),0); struct icalperiodtype rtime; rtime.start = icaltime_from_timet( time(0),0); rtime.end = icaltime_from_timet( time(0),0); rtime.end.hour++; /* Some of these routines are the same as those in the previous routine, but we've also added several 'vanew' routines. These 'vanew' routines take a list of properties, parameters or values and add each of them to the parent property or component. */ calendar = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version("2.0"), icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstamp(atime), icalproperty_new_uid("guid-1.host1.com"), icalproperty_vanew_organizer( "mailto:mrbig@host.com", icalparameter_new_role(ICAL_ROLE_CHAIR), 0 ), icalproperty_vanew_attendee( "mailto:employee-A@host.com", icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), icalparameter_new_rsvp(1), icalparameter_new_cutype(ICAL_CUTYPE_GROUP), 0 ), icalproperty_new_description("Project XYZ Review Meeting"), icalproperty_new_categories("MEETING"), icalproperty_new_class(ICAL_CLASS_PUBLIC), icalproperty_new_created(atime), icalproperty_new_summary("XYZ Project Review"), icalproperty_vanew_dtstart( atime, icalparameter_new_tzid("US-Eastern"), 0 ), icalproperty_vanew_dtend( atime, icalparameter_new_tzid("US-Eastern"), 0 ), icalproperty_new_location("1CP Conference Room 4350"), 0 ), 0 ); /* Note that properties with no parameters can use the regular 'new' constructor, while those with parameters use the 'vanew' constructor. And, be sure that the last argument in the 'vanew' call is a zero. Without, your program will probably crash. */ return calendar; } void find_sub_components(icalcomponent* comp) { icalcomponent *c; /* The second parameter to icalcomponent_get_first_component indicates the type of component to search for. This will iterate through all sub-components */ for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); c != 0; c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ do_something(c); } /* This will iterate only though VEVENT sub-components */ for(c = icalcomponent_get_first_component(comp,ICAL_VEVENT_COMPONENT); c != 0; c = icalcomponent_get_next_component(comp,ICAL_VEVENT_COMPONENT)){ do_something(c); } } /* Ical components only have one internal iterator, so removing the object that the iterator points to can cause problems. Here is the right way to remove components */ void remove_vevent_sub_components(icalcomponent* comp){ icalcomponent *c, *next; for( c = icalcomponent_get_first_component(comp,ICAL_VEVENT_COMPONENT); c != 0; c = next) { next = icalcomponent_get_next_component(comp,ICAL_VEVENT_COMPONENT); icalcomponent_remove_component(comp,c); do_something(c); } } libical-1.0/examples/Makefile.in0000664000076400007640000004157612141277613015637 0ustar allenallen# Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = doesnothing$(EXEEXT) subdir = examples DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_doesnothing_OBJECTS = access_components.$(OBJEXT) \ access_properties_and_parameters.$(OBJEXT) errors.$(OBJEXT) \ main.$(OBJEXT) parse_text.$(OBJEXT) doesnothing_OBJECTS = $(am_doesnothing_OBJECTS) @WITH_BDB4_FALSE@doesnothing_DEPENDENCIES = ../src/libical/libical.la \ @WITH_BDB4_FALSE@ ../src/libicalss/libicalss.la \ @WITH_BDB4_FALSE@ ../src/libicalvcal/libicalvcal.la @WITH_BDB4_TRUE@doesnothing_DEPENDENCIES = ../src/libical/libical.la \ @WITH_BDB4_TRUE@ ../src/libicalss/libicalss.la \ @WITH_BDB4_TRUE@ ../src/libicalvcal/libicalvcal.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(doesnothing_SOURCES) DIST_SOURCES = $(doesnothing_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @PTHREAD_LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @WITH_BDB4_FALSE@doesnothing_LDADD = ../src/libical/libical.la ../src/libicalss/libicalss.la ../src/libicalvcal/libicalvcal.la @WITH_BDB4_TRUE@doesnothing_LDADD = ../src/libical/libical.la ../src/libicalss/libicalss.la ../src/libicalvcal/libicalvcal.la @BDB_DIR_LIB@/@BDB_LIB@ INCLUDES = -I. -I../src -I../src/libical -I$(srcdir)/../src/libical -I../src/libicalss -I../src/libicalvcal doesnothing_SOURCES = \ access_components.c \ access_properties_and_parameters.c \ errors.c \ main.c \ parse_text.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list doesnothing$(EXEEXT): $(doesnothing_OBJECTS) $(doesnothing_DEPENDENCIES) $(EXTRA_doesnothing_DEPENDENCIES) @rm -f doesnothing$(EXEEXT) $(LINK) $(doesnothing_OBJECTS) $(doesnothing_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/access_components.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/access_properties_and_parameters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_text.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am distclean: clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/examples/errors.c0000664000076400007640000000335612132563136015242 0ustar allenallen/* errors.c */ #include #include void program_errors() { /*Most routines will set icalerrno on errors. This is an enumeration defined in icalerror.h */ icalcomponent *c; icalerror_clear_errno(); c = icalcomponent_new(ICAL_VEVENT_COMPONENT); if (icalerrno != ICAL_NO_ERROR){ fprintf(stderr,"Horrible libical error: %s\n", icalerror_strerror(icalerrno)); } } void component_errors(icalcomponent *comp) { int errors; icalproperty *p; /* presume that we just got this component from the parser */ errors = icalcomponent_count_errors(comp); printf("This component has %d parsing errors\n", errors); /* Print out all of the parsing errors. This is not strictly correct, because it does not descend into any sub-components, as icalcomponent_count_errors() does. */ for(p = icalcomponent_get_first_property(comp,ICAL_XLICERROR_PROPERTY); p != 0; p = icalcomponent_get_next_property(comp,ICAL_XLICERROR_PROPERTY)) { printf("-- The error is %s:\n",icalproperty_get_xlicerror(p)); } /* Check the component for iTIP compilance, and add more X-LIC-ERROR properties if it is non-compilant. */ icalrestriction_check(comp); /* Count the new errors. */ if(errors != icalcomponent_count_errors(comp)){ printf(" -- The component also has iTIP restriction errors \n"); } /* Since there are iTIP restriction errors, it may be impossible to process this component as an iTIP request. In this case, the X-LIC-ERROR proeprties should be expressed as REQUEST-STATUS properties in the reply. This following routine makes this conversion */ icalcomponent_convert_errors(comp); } libical-1.0/examples/access_store.c0000664000076400007640000001335612132563136016404 0ustar allenallen void acess_cap(void) { /* Note, all routines that are prefixed with "caller_" are implemented by the caller of libical */ /* 1 Open a connection to a store. */ /* The caller is responsible for getting a socket to the server and negotiating the first stages of the CAP exchange. These can be fairly complex and varied for different operating systems, local vs remote usage, and for different authentication schemes, so the API does not try to simplify them. */ int sock = caller_create_socket_to_server(); icalcstp *cstp = icalcstp_new(0,sock,sock); caller_authenticate(cstp); icalcsdb *csdb = icalcsdb_new(cstp); /* 2 Create a new calendar for which user Bill can read and user Mary can read and write. See CAP draft 7.2.1.1.1. for the text of this example*/ /* This case requires setting up a TARGET, multiple OWNERs and multiple VCARs, so it creates a component and uses CSTP that than the CSDB interface. icalcomponent *create = icalcaputil_new_create(); icalcomponent_add_property(create, icalproperty_new_target( strdup("cap://cal.example.com/relcal8") )); icalcomponent *cal = icalcomponent_vanew_vcalendar( icalproperty_new_relcalid(strdup("relcalid")), icalproperty_new_name(strdup("Bill & Mary's cal")), icalproperty_new_owner(strdup("bill")), icalproperty_new_owner(strdup("mary")), icalproperty_new_calmaster(strdup("mailto:bill@example.com")), icalcomponent_vanew_vcar( icalproperty_new_grant(strdup("UPN=bill;ACTION=*;OBJECT=*")), icalproperty_new_grant(strdup("UPN=bill;ACTION=*;OBJECT=*")) 0) 0); error = icalcomponent_add_component(create,cal); /* Send the data */ error = icalcstp_senddata(cstp,10,create); /* Get the response */ icalcstp_response response = icalcstp_get_first_response(cstp); /* Do something with the response*/ if(icalenum_reqstat_major(response.code) != 2){ /* do something with the error */ } icalcomponent_free(create); /* 3 Create several new calendars */ /* Same as #2, but insert more TARGET properties and read more responses*/ /* 4 Delete a calendar */ error = icalcsdb_delete(csdb,"uid12345-example.com"); /* 5 Change the calid of a calendar */ erorr = icalcsdb_move(csdb,"uid12345-old-example.com", "uid12345-new-example.com"); /* 6 Delete all calendars belonging to user bob */ icalproperty *p; /* First expand bob's UPN into a set of CALIDs */ icalcomponent *calids = icalcsdb_expand_upn("bob@example.com"); /* Then, create a message to delete all of them */ icalcomponent *delete = icalcaputil_new_create(); for(p = icalcomponent_get_first_property(calids,ICAL_CALID_PROPERTY); p != 0; p = icalcomponent_get_next_property(calids,ICAL_CALID_PROPERTY)){ char* = icalproperty_get_calid(p); icalcomponent_add_target(delete,p); } /* Send the message */ error = icalcstp_senddata(cstp,10,delete); /* Finally, read the responses */ for(response = icalcstp_get_first_response(cstp); response.code != ICAL_UNKNOWN_STATUS; response = icalcstp_get_next_response(cstp)){ if(icalenum_reqstat_major(response.code) != 2){ /* do something with the error */ } } /* 7 Get three new UIDs from the store */ /* libical owns the returned memory. Copy before using */ char* uid1 = icalcsdb_generateuid(csdb); char* uid2 = icalcsdb_generateuid(csdb); char* uid3 = icalcsdb_generateuid(csdb); /* 8 Store a new VEVENT in the store. */ /* Very similar to case #2 */ /* 9 Find all components for which the LOCATION is "West Conference Room" and change them to "East Conference Room" */ icalcomponent *modify = icalcaputil_new_modify(); icalcaputil_modify_add_old_prop(modify, icalproperty_new_location( strdup("West Conference Room"))); icalcaputil_modify_add_new_prop(modify, icalproperty_new_location( strdup("East Conference Room"))); icalcaputil_add_target(modify,"relcal2"); /* Send the component */ error = icalcstp_senddata(cstp,10,delete); /* Get the response */ icalcstp_response response = icalcstp_get_first_response(cstp); /* Do something with the response*/ if(icalenum_reqstat_major(response.code) != 2){ /* do something with the error */ } icalcomponent_free(modify); /* 10 Find the component with UID X and add a GEO property to it. */ icalcomponent *modify = icalcaputil_new_modify(); icalcaputil_modify_add_query(modify, "SELECT UID FROM VEVENT WHERE UID = 'X'"); icalcaputil_modify_add_new_prop(modify, icalproperty_new_geo( strdup("-117;32"))); icalcaputil_add_target(modify,"relcal2"); /* Send the component */ error = icalcstp_senddata(cstp,10,delete); /* Get the response */ icalcstp_response response = icalcstp_get_first_response(cstp); /* Do something with the response*/ if(icalenum_reqstat_major(response.code) != 2){ /* do something with the error */ } icalcomponent_free(modify); /* 11 Delete all VEVENTS which have a METHOD that is not CREATED */ /* 12 Retrieve all VEVENTS which have a METHOD that is not CREATED */ /* Nearly the same at #11 */ /* 13 Retrieve the capabilities of the store */ /* 14 Retrieve/Modify/Add/Delete properties of a store */ /* 15 Retrieve/Modify/Add/Delete VCARs of a store */ /* 16 Retrieve/Modify/Add/Delete VTIMEZONEs of a store */ /* 17 Retrieve/Modify/Add/Delete properties of a calendar */ /* 18 Retrieve/Modify/Add/Delete VCARs of a calendar */ /* 19 Retrieve/Modify/Add/Delete VTIMEZONEs of a calendar */ /* 20 Translate a CALID into one or more UPNs */ /* 21 Expand a group UPN into all of the members of the group */ libical-1.0/examples/CMakeLists.txt0000664000076400007640000000106112132563136016311 0ustar allenalleninclude_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/src ${CMAKE_SOURCE_DIR}/src/libical ${CMAKE_BINARY_DIR}/src/libical ${CMAKE_SOURCE_DIR}/src/libicalss ${CMAKE_BINARY_DIR}/src/libicalss ) ########### next target ############### set(doesnothing_SRCS access_components.c access_properties_and_parameters.c errors.c main.c parse_text.c ) add_executable(doesnothing ${doesnothing_SRCS}) target_link_libraries(doesnothing ical icalss icalvcal ical icalss icalvcal) ########### install files ############### libical-1.0/examples/access_properties_and_parameters.c0000664000076400007640000001037212132563136022504 0ustar allenallen/* access_properties_and_parameters.c */ #include #include #include /* Get a particular parameter out of a component. This routine will return a list of strings of all attendees who are required. Note that this routine assumes that the component that we pass in is a VEVENT. */ void get_required_attendees(icalcomponent* event) { icalproperty* p; icalparameter* parameter; assert(event != 0); assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); /* This loop iterates over all of the ATTENDEE properties in the event */ /* The iteration routines save their state in the event struct, so the are not thread safe unless you lock the whole component. */ for( p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) ) { /* Get the first ROLE parameter in the property. There should only be one, so we won't bother to iterate over them. But, you can iterate over parameters just like with properties */ parameter = icalproperty_get_first_parameter(p,ICAL_ROLE_PARAMETER); /* If the parameter indicates the participant is required, get the attendees name and stick a copy of it into the output array */ if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT) { /* Remember, the caller does not own this string, so you should strdup it if you want to change it. */ const char *attendee = icalproperty_get_attendee(p); printf("%s",attendee); } } } /* Here is a similar example. If an attendee has a PARTSTAT of NEEDSACTION or has no PARTSTAT parameter, change it to TENTATIVE. */ void update_attendees(icalcomponent* event) { icalproperty* p; icalparameter* parameter; assert(event != 0); assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); for( p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) ) { parameter = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER); if (parameter == 0) { /* There was no PARTSTAT parameter, so add one. */ icalproperty_add_parameter( p, icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) ); } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) { /* Remove the NEEDSACTION parameter and replace it with TENTATIVE */ icalproperty_remove_parameter(p,ICAL_PARTSTAT_PARAMETER); /* Don't forget to free it */ icalparameter_free(parameter); /* Add a new one */ icalproperty_add_parameter( p, icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) ); } } } /* Here are some examples of manipulating properties */ void test_properties() { icalproperty *prop; icalparameter *param; icalvalue *value; char *str; icalproperty *clone; /* Create a new property */ prop = icalproperty_vanew_comment( "Another Comment", icalparameter_new_cn("A Common Name 1"), icalparameter_new_cn("A Common Name 2"), icalparameter_new_cn("A Common Name 3"), icalparameter_new_cn("A Common Name 4"), 0); /* Iterate through all of the parameters in the property */ for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); param != 0; param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { printf("Prop parameter: %s\n",icalparameter_get_cn(param)); } /* Get a string representation of the property's value */ printf("Prop value: %s\n",icalproperty_get_comment(prop)); /* Spit out the property in its RFC 2445 representation */ str = icalproperty_as_ical_string_r(prop); printf("As iCAL string:\n %s\n", str); free(str); /* Make a copy of the property. Caller owns the memory */ clone = icalproperty_new_clone(prop); /* Get a reference to the value within the clone property */ value = icalproperty_get_value(clone); str = icalvalue_as_ical_string_r(value); printf("Value: %s", str); free(str); /* Free the original and the clone */ icalproperty_free(clone); icalproperty_free(prop); } libical-1.0/scripts/0000775000076400007640000000000012141277613013426 5ustar allenallenlibical-1.0/scripts/mkneticali.pl0000775000076400007640000000367512132563125016115 0ustar allenallen#!/usr/local/bin/perl $pr = 1; $ignore = 0; print< /* for size_t */ #include %} EOM foreach $f (@ARGV) { @f = split(/\//,$f); $fn = pop(@f); $fn=~/pvl/ && next; $fn=~/sspm/ && next; $fn=~/cstp/ && next; $fn=~/csdb/ && next; $fn=~/vcal/ && next; $fn=~/yacc/ && next; $fn=~/lex/ && next; print "\n/**********************************************************************\n"; print "\t$fn\n"; print "**********************************************************************/\n\n"; open F, $f; while(){ s/^#.*//; s/\/\*.*\*\///; /^\/\// && next; next if /^$/; if(/\/\*/){ $pr = 0;} /icalparser_parse\(/ and $ignore = 1; /vanew/ and $ignore = 1; /_stub/ and $ignore = 1; /_response/ and $ignore = 1; /line_gen_func/ and $ignore = 1; /extern/ and $ignore = 1; /sspm/ and $ignore = 1; /icalrecur/ and $ignore = 1; if ($pr == 1 && $ignore == 0){ print ; } if(/\*\//){ $pr = 1;} if (/\;/){ $ignore = 0; } } } libical-1.0/scripts/mkinclude.sh0000664000076400007640000000167512132563125015742 0ustar allenallen#!/bin/sh # # Given a list of headers, combine them into one, excluding certain lines # OUTFILE="/dev/stdout" COMBINEDHEADERS="" EXCLUDES="" while [ $# -gt 0 ] do case $1 in -o) OUTFILE=$2; shift;; -e) EXCLUDES="$EXCLUDES $2"; shift;; *) COMBINEDHEADERS="$COMBINEDHEADERS $1"; esac shift done echo '#ifdef __cplusplus' > $OUTFILE echo 'extern "C" {' >> $OUTFILE echo '#endif' >> $OUTFILE echo '/*' >> $OUTFILE echo " \$Id\$" >> $OUTFILE echo '*/' >> $OUTFILE cat $COMBINEDHEADERS >> file.temp1 for exclude in $EXCLUDES do cp file.temp1 file.temp2 egrep -v "$exclude" file.temp2 > file.temp1 done cat file.temp1 >> $OUTFILE rm -f file.temp1 rm -f file.temp2 echo '#ifdef __cplusplus' >> $OUTFILE echo '};' >> $OUTFILE echo '#endif' >> $OUTFILE libical-1.0/scripts/mkderivedproperties.pl0000775000076400007640000001441412132563125020055 0ustar allenallen#!/usr/bin/env perl require "readvaluesfile.pl"; use Getopt::Std; getopts('chspmi:'); # ARG 0 is properties.csv %propmap = read_properties_file($ARGV[0]); # ARG 1 is value-types.txt %valuemap = read_values_file($ARGV[1]); $include_vanew = 1; # Write the file inline by copying everything before a demarcation # line, and putting the generated data after the demarcation if ($opt_i) { open(IN,$opt_i) || die "Can't open input file $opt_i"; while(){ if (//){ insert_code(); } else { print; } } } sub fudge_data { my $prop = shift; my $value = $propmap{$prop}->{'lic_value'}; if (!$value){ die "Can't find value for property \"$prop\"\n"; } my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$prop)); my $lc = lc($ucf); my $uc = uc($lc); my $ucfvalue = join("",map {ucfirst(lc($_));} split(/-/,$value)); my $lcvalue = lc($ucfvalue); my $ucvalue = uc($lcvalue); my $type = $valuemap{$value}->{C}->[1]; return ($uc,$lc,$lcvalue,$ucvalue,$type); } sub insert_code { # Create the property map data if($opt_c){ my @props = sort keys %propmap; my $count = scalar(@props); print "static const struct icalproperty_map property_map[$count] = {\n"; foreach $prop (@props) { next if !$prop; next if $prop eq 'NO'; my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); print "{ICAL_${uc}_PROPERTY,\"$prop\",ICAL_${ucvalue}_VALUE},\n"; } $prop = "NO"; my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); print "{ICAL_${uc}_PROPERTY,\"\",ICAL_NO_VALUE}};\n\n"; $idx = 10000; $count = 1; my $out = ""; foreach $value (sort keys %valuemap) { next if !$value; next if $value eq 'NO' or $prop eq 'ANY'; my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); my @enums = @{$valuemap{$value}->{'enums'}}; if(@enums){ my ($c_autogen,$c_type) = @{$valuemap{$value}->{'C'}}; unshift(@enums,"X"); push(@enums,"NONE"); foreach $e (@enums) { my $uce = join("",map {uc(lc($_));} split(/-/,$e)); if($e ne "X" and $e ne "NONE"){ $str = $e; } else { $str = ""; } $out.=" {ICAL_${ucv}_PROPERTY,ICAL_${ucv}_${uce},\"$str\" }, /*$idx*/\n"; $idx++; $count++; } } } $count++; print "static const struct icalproperty_enum_map enum_map[$count] = {\n"; print $out; print " {ICAL_NO_PROPERTY,0,\"\"}\n};\n\n"; } if($opt_h){ # Create the property enumerations list print "typedef enum icalproperty_kind {\n ICAL_ANY_PROPERTY = 0,\n"; foreach $prop (sort keys %propmap) { next if !$prop; next if $prop eq 'NO' or $prop eq 'ANY'; my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); print " ICAL_${uc}_PROPERTY, \n"; } print " ICAL_NO_PROPERTY\n} icalproperty_kind;\n\n"; } foreach $prop (sort keys %propmap) { next if !$prop; next if $prop eq 'NO' or $prop eq 'ANY'; my ($uc,$lc,$lcvalue,$ucvalue,$type) = fudge_data($prop); my $pointer_check; if ($type =~ /\*/){ $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/; } elsif ( $type eq "void" ){ $pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; } my $set_pointer_check = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; if($opt_c) { # Generate C source if ($include_vanew) { print<){ s/#.*//; chop; push(@components,$_); } close PV; # Write the file inline by copying everything before a demarcation # line, and putting the generated data after the demarcation if ($opt_i) { open(IN,$opt_i) || die "Can't open input file \"$opt_i\""; while(){ if (/Do not edit/){ last; } print; } if($opt_i){ print "# Everything below this line is machine generated. Do not edit. \n"; } else { print "/* Everything below this line is machine generated. Do not edit. */\n"; } } if ($opt_c or $opt_h and !$opt_i){ print < /* for va_arg functions */ EOM } if ($opt_p and !$opt_i){ print </dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = scripts DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ mkderivedcomponents.pl \ mkderivedparameters.pl \ mkderivedproperties.pl \ mkderivedvalues.pl \ mkparameterrestrictions.pl \ mkrestrictionrecords.pl \ mkrestrictiontable.pl \ readvaluesfile.pl all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu scripts/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/scripts/readvaluesfile.pl0000664000076400007640000000401412132563125016751 0ustar allenallen sub read_values_file { my $path = shift; my %h; open(F,$path) || die "Can't open values file $path"; while(){ chop; s/#.*$//g; s/\"//g; s/\r//g; next if ! $_; @column = split(/,/,$_); my $value_name = $column[0]; my $c_type_str = $column[1]; my $c_autogen = ($c_type_str =~ /\(a\)/); my $c_type = $c_type_str; $c_type =~ s/\(.\)//; my $python_type = $column[2]; my $components = $column[3]; my $enum_values = $column[4]; my @components; if($components ne "unitary"){ @components = split(/;/,$components); } else { @components = (); } my @enums; if($enum_values) { @enums = split(/;/,$enum_values); } else { @enums = (); } $h{$value_name} = { C => [$c_autogen,$c_type], perl => $perl_type, python => $python_type, components=>[@components], enums=>[@enums] }; } return %h; } sub read_properties_file { my $path = shift; my %h; open(F,$path) || die "Can't open properties file $path"; while(){ chop; s/#.*$//g; s/\"//g; s/\r//g; next if ! $_; @column = split(/,/,$_); my $property_name = $column[0]; my $lic_value = $column[1]; my $default_value = $column[2]; $h{$property_name} = { lic_value => $lic_value, default_value => $default_value }; } return %h; } sub read_parameters_file { my $path = shift; my %h; open(F,$path) || die "Can't open parameters file $path"; while(){ chop; s/#.*$//g; s/\"//g; s/\r//g; next if ! $_; @column = split(/\,/,$_); my $parameter_name = $column[0]; my $enumConst = $column[1]; my $data_type = $column[2]; my $enum_string = $column[3]; my @enums; if($enum_string){ @enums = split(/;/,$enum_string); } $h{$parameter_name} = { C => $data_type, kindEnum => $enumConst, enums => [@enums] }; } close(F); return %h; } 1; libical-1.0/scripts/mkrestrictiontable.pl0000775000076400007640000000400112132563125017662 0ustar allenallen#!/usr/bin/env perl use Getopt::Std; getopts('i:'); # the argument should be the path to the restriction datafile, usually # design-data/restrictions.csv open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!"; # Write the file inline by copying everything before a demarcation # line, and putting the generated data after the demarcation if ($opt_i) { open(IN,$opt_i) || die "Can't open input file $opt_i"; while(){ if (//){ insert_code(); } if (/Do not edit/){ last; } print; } close IN; } sub insert_code { # First build the property restriction table print "static const icalrestriction_property_record icalrestriction_property_records[] = {\n"; while() { chop; s/\#.*$//; my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_); next if !$method; if(!$sub) { $sub = "0"; } else { $sub = "icalrestriction_".$sub; } if($prop ne "NONE"){ print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${prop}_PROPERTY,ICAL_RESTRICTION_${restr},$sub},\n"); } } # Print the terminating line print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE}\n"; print "};\n"; print "static const icalrestriction_component_record icalrestriction_component_records[] = {\n"; # Go back through the entire file and build the component restriction table close(F); open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!"; while() { chop; s/\#.*$//; my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_); next if !$method; if(!$sub) { $sub = "0"; } else { $sub = "icalrestriction_".$sub; } if($subcomp ne "NONE"){ print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${subcomp}_COMPONENT,ICAL_RESTRICTION_${restr},$sub\},\n"); } } # print the terminating line print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE}\n"; print "};\n"; } libical-1.0/scripts/mkparameterrestrictions.pl0000775000076400007640000000321012132563125020737 0ustar allenallen#!/usr/bin/perl # Version: 1.0 # Script last updated: 30May1999 GMD # Change log: # # usually open params-in-prop.txt open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; print <) { chop; # split line by whitespace my @v = split(/\s+/,$_); # property is first item on line my $prop = shift @v; my $prop_name = $prop; if (substr($prop,0,1) eq "X") { $prop = "X"; } $prop = join("",split(/-/,$prop)); print < generate c code file # h-> generate header file # Open with value-types.txt my %h = read_values_file($ARGV[0]); # Write the file inline by copying everything before a demarcation # line, and putting the generated data after the demarcation if ($opt_i) { open(IN,$opt_i) || die "Can't open input file $opt_i"; while(){ if (//){ insert_code(); } else { print; } } } sub insert_code { # Map type names to the value in the icalvalue_impl data union */ %union_map = ( BOOLEAN => 'int', CALADDRESS=>'string', DATE=>'time', DATETIME=>'time', DATETIMEDATE=>'time', DATETIMEPERIOD=>'period', DURATION=>'duration', INTEGER=>'int', TEXT=>'string', URI=>'string', UTCOFFSET=>'int', QUERY=>'string', BINARY=>'string', X=>'string' ); if($opt_h){ # First print out the value enumerations $idx = 5000; print "typedef enum icalvalue_kind {\n"; print " ICAL_ANY_VALUE=$idx,\n"; foreach $value (keys %h) { $idx++; my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); next if $value eq "NO"; print " ICAL_${ucv}_VALUE=$idx,\n"; } $idx++; print " ICAL_NO_VALUE=$idx\n} icalvalue_kind ;\n\n"; # Now create enumerations for property values $idx = 10000; print "#define ICALPROPERTY_FIRST_ENUM $idx\n\n"; foreach $value (sort keys %h) { next if !$value; next if $value eq 'NO' or $prop eq 'ANY'; my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); my @enums = @{$h{$value}->{'enums'}}; if(@enums){ my ($c_autogen,$c_type) = @{$h{$value}->{'C'}}; print "typedef $c_type {\n"; my $first = 1; unshift(@enums,"X"); push(@enums,"NONE"); foreach $e (@enums) { if (!$first){ print ",\n"; } else { $first = 0; } my $uce = join("",map {uc(lc($_));} split(/-/,$e)); print " ICAL_${ucv}_${uce} = $idx"; $idx++; } $c_type =~ s/enum //; print "\n} $c_type;\n\n"; } } print "#define ICALPROPERTY_LAST_ENUM $idx\n\n"; } if($opt_c){ # print out the value to string map my $count = scalar(keys %h) + 1; print "static const struct icalvalue_kind_map value_map[$count]={\n"; foreach $value (keys %h) { $idx++; my $ucv = join("",map {uc(lc($_));} split(/-/,$value)); next if $value eq "NO"; print " {ICAL_${ucv}_VALUE,\"$value\"},\n"; } print " {ICAL_NO_VALUE,\"\"}\n};"; } foreach $value (keys %h) { my $autogen = $h{$value}->{C}->[0]; my $type = $h{$value}->{C}->[1]; my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$value)); my $lc = lc($ucf); my $uc = uc($lc); my $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/; my $pointer_check_rv = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; my $assign; if ($type =~ /char/){ $assign = "icalmemory_strdup(v);\n\n if (impl->data.v_string == 0){\n errno = ENOMEM;\n }\n"; } else { $assign = "v;"; } my $union_data; if(@{$h{$value}->{'enums'}}){ $union_data = 'enum'; } elsif (exists $union_map{$uc} ){ $union_data=$union_map{$uc}; } else { $union_data = $lc; } if ($opt_c && $autogen) { print "\n\n\ icalvalue* icalvalue_new_${lc} ($type v){\ struct icalvalue_impl* impl;\ $pointer_check\ impl = icalvalue_new_impl(ICAL_${uc}_VALUE);\ icalvalue_set_${lc}((icalvalue*)impl,v);\ return (icalvalue*)impl;\ }\ void icalvalue_set_${lc}(icalvalue* value, $type v) {\ struct icalvalue_impl* impl; \ icalerror_check_arg_rv( (value!=0),\"value\");\ $pointer_check_rv\ icalerror_check_value_type(value, ICAL_${uc}_VALUE);\ impl = (struct icalvalue_impl*)value;\n"; if( $union_data eq 'string') { print " if(impl->data.v_${union_data}!=0) {free((void*)impl->data.v_${union_data});}\n"; } print "\n\ impl->data.v_$union_data = $assign \n\ icalvalue_reset_kind(impl);\n}\n"; print "$type\ icalvalue_get_${lc} (const icalvalue* value) {\n\n"; if( $union_data eq 'string') { print " icalerror_check_arg_rz ((value!=0),\"value\");\n"; } else { print " icalerror_check_arg ((value!=0),\"value\");\n"; } print " icalerror_check_value_type (value, ICAL_${uc}_VALUE);\ return ((struct icalvalue_impl*)value)->data.v_${union_data};\n}\n"; } elsif($opt_h && $autogen) { print "\n /* $value */ \ icalvalue* icalvalue_new_${lc}($type v); \ $type icalvalue_get_${lc}(const icalvalue* value); \ void icalvalue_set_${lc}(icalvalue* value, ${type} v);\n\n"; } } if ($opt_h){ print "#endif /*ICALVALUE_H*/\n"; } } libical-1.0/scripts/CMakeLists.txt0000664000076400007640000000005412132563125016161 0ustar allenallen ########### install files ############### libical-1.0/scripts/mkrestrictionrecords.pl0000775000076400007640000000475312132563125020252 0ustar allenallen#!/usr/bin/env perl # Version: 1.0 # Script last updated: 30May1999 GMD # Change log: # # usually open restrictions.csv open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; print <) { chop; # split line at commas my ($method,$component,$property,$subcomponent,$restriction)=split(/\,/,$_); # #put in code to generate comments here! # if ($method ne $last_method) { $need_header = 1; $last_method = $method; } if ($component ne $last_component) { $need_header = 1; $last_component = $component; } if ($need_header) { print "\n\t/* METHOD: ${method}, COMPONENT: ${component} */\n"; $need_header = 0; } foreach $item ($component,$property,$subcomponent,$restriction) { # handle special cases. if ($item eq "NONE") { $item = "NO"; } else { if (substr($item,0,1) eq "X") { $item = "X"; }} # strip out dashes $item = join("",split(/-/,$item)); } # strip leading V from component names $component =~ s/^(V?)(\w+?)((SAVINGS)?)((TIME)?)$/$2/; $subcomponent =~ s/^V(\w+)/$1/; print "\t\{ICAL_METHOD_${method},ICAL_${component}_COMPONENT,"; print "ICAL_${property}_PROPERTY,ICAL_${subcomponent}_COMPONENT,"; print "ICAL_RESTRICTION_${restriction}\},\n"; } print <1,RANGE=>1,RSVP=>1,XLICERRORTYPE=>1,XLICCOMPARETYPE=>1); %params = read_parameters_file($ARGV[0]); # Write the file inline by copying everything before a demarcation # line, and putting the generated data after the demarcation if ($opt_i) { open(IN,$opt_i) || die "Can't open input file $opt_i"; while(){ if (//){ $autogenMsg = "of section of machine generated code (mkderivedparameters.pl). Do not edit."; if($opt_p){ $startComment = "#"; $endComment = ""; } else { $startComment = "/*"; $endComment = " */"; } print $startComment." START ".$autogenMsg.$endComment."\n\n"; insert_code(); print $startComment." END ".$autogenMsg.$endComment."\n\n"; } else { print; } } } sub insert_code { # Write parameter enumerations and datatypes if($opt_h){ my $enumConst = $params{'ANY'}->{"kindEnum"}; print "typedef enum icalparameter_kind {\n ICAL_ANY_PARAMETER = ".$enumConst.",\n"; $enumVal = 1; foreach $param (sort keys %params) { next if !$param; next if $param eq 'NO' or $param eq 'ANY'; my $uc = join("",map {uc($_);} split(/-/,$param)); $enumConst = $params{$param}->{"kindEnum"}; print " ICAL_${uc}_PARAMETER = ".$enumConst.", \n"; } $enumConst = $params{'NO'}->{"kindEnum"}; print " ICAL_NO_PARAMETER = ".$enumConst."\n} icalparameter_kind;\n\n"; # Now create enumerations for parameter values $idx = 20000; print "#define ICALPARAMETER_FIRST_ENUM $idx\n\n"; foreach $param (sort keys %params) { next if !$param; next if $param eq 'NO' or $param eq 'ANY'; my $type = $params{$param}->{"C"}; my $ucv = join("",map {uc(lc($_));} split(/-/,$param)); my @enums = @{$params{$param}->{'enums'}}; if(@enums){ print "typedef enum $type {\n"; my $first = 1; unshift(@enums,"X"); push(@enums,"NONE"); foreach $e (@enums) { if (!$first){ print ",\n"; } else { $first = 0; } my $uce = join("",map {uc(lc($_));} split(/-/,$e)); print " ICAL_${ucv}_${uce} = $idx"; $idx++; } $c_type =~ s/enum //; print "\n} $type;\n\n"; } } print "#define ICALPARAMETER_LAST_ENUM $idx\n\n"; } if ($opt_c){ # Create the icalparameter_value to icalvalue_kind conversion table my $count = 0; my $out; foreach $enum (@{$params{'VALUE'}->{'enums'}}){ next if $enum eq 'NO' or $enum eq 'ERROR'; $uc = join("",map {uc(lc($_));} split(/-/,$enum)); $out.=" {ICAL_VALUE_${uc},ICAL_${uc}_VALUE},\n"; $count++; } $count+=2; print "static const struct icalparameter_value_kind_map value_kind_map[$count] = {\n"; print $out; print " {ICAL_VALUE_X,ICAL_X_VALUE},\n"; print " {ICAL_VALUE_NONE,ICAL_NO_VALUE}\n};\n\n"; #Create the parameter Name map $out=""; $count=0; foreach $param (sort keys %params) { next if !$param; next if $param eq 'NO' or $param eq 'ANY'; my $lc = join("",map {lc($_);} split(/-/,$param)); my $uc = join("",map {uc(lc($_));} split(/-/,$param)); $count++; $out.=" {ICAL_${uc}_PARAMETER,\"$param\"},\n"; } $count+=1; print "static const struct icalparameter_kind_map parameter_map[$count] = { \n"; print $out; print " { ICAL_NO_PARAMETER, \"\"}\n};\n\n"; # Create the parameter value map $out =""; $count=0; foreach $param (sort keys %params) { next if !$param; next if $param eq 'NO' or $param eq 'ANY'; my $type = $params{$param}->{"C"}; my $uc = join("",map {uc(lc($_));} split(/-/,$param)); my @enums = @{$params{$param}->{'enums'}}; if(@enums){ foreach $e (@enums){ my $uce = join("",map {uc(lc($_));} split(/-/,$e)); $count++; $out.=" {ICAL_${uc}_PARAMETER,ICAL_${uc}_${uce},\"$e\"},\n"; } } } $count+=3; print "static const struct icalparameter_map icalparameter_map[] = {\n"; print "{ICAL_ANY_PARAMETER,0,\"\"},\n"; print $out; print " {ICAL_NO_PARAMETER,0,\"\"}};\n\n"; } foreach $param (sort keys %params){ next if $param eq 'NO' or $param eq 'ANY'; my $type = $params{$param}->{'C'}; my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$param)); my $lc = lc($ucf); my $uc = uc($lc); my $charorenum; my $set_code; my $pointer_check; my $pointer_check_v; my $xrange; if ($type=~/char/ ) { $charorenum = " icalerror_check_arg_rz( (param!=0), \"param\");\n return param->string;"; $set_code = "((struct icalparameter_impl*)param)->string = icalmemory_strdup(v);"; $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");"; $pointer_check_v = "icalerror_check_arg_rv( (v!=0),\"v\");"; } else { $xrange =" if (param->string != 0){\n return ICAL_${uc}_X;\n }\n" if !exists $no_xname{$uc}; $charorenum= "icalerror_check_arg( (param!=0), \"param\");\n$xrange\nreturn ($type)(param->data);"; $pointer_check = "icalerror_check_arg_rz(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rz(v < ICAL_${uc}_NONE,\"v\");"; $pointer_check_v = "icalerror_check_arg_rv(v >= ICAL_${uc}_X,\"v\");\n icalerror_check_arg_rv(v < ICAL_${uc}_NONE,\"v\");"; $set_code = "((struct icalparameter_impl*)param)->data = (int)v;"; } if ($opt_c) { print <string != NULL) free (param->string); $set_code } EOM } elsif( $opt_h) { print <[0] = \$p; return \$self; } sub get { my \$self = shift; my \$impl = \$self->_impl(); return Net::ICal::icalparameter_as_ical_string(\$impl); } sub set { # This is hard to implement, so I've punted for now. die "Set is not implemented"; } EOM } } if ($opt_h){ print < # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=libicalss - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "libicalss.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "libicalss.mak" CFG="libicalss - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "libicalss - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "libicalss - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "libicalss - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "../libical" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "YY_NO_UNISTD_H" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ELSEIF "$(CFG)" == "libicalss - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "libicalss___Win32_Debug" # PROP BASE Intermediate_Dir "libicalss___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\libical" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "YY_NO_UNISTD_H" /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ENDIF # Begin Target # Name "libicalss - Win32 Release" # Name "libicalss - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\icalcalendar.c # End Source File # Begin Source File SOURCE=.\icalclassify.c # End Source File # Begin Source File SOURCE=.\icalcluster.c # End Source File # Begin Source File SOURCE=.\icaldirset.c # End Source File # Begin Source File SOURCE=.\icalfileset.c # End Source File # Begin Source File SOURCE=.\icalgauge.c # End Source File # Begin Source File SOURCE=.\icalmessage.c # End Source File # Begin Source File SOURCE=.\icalset.c # End Source File # Begin Source File SOURCE=.\icalspanlist.c # End Source File # Begin Source File SOURCE=.\icalsslexer.c # End Source File # Begin Source File SOURCE=.\icalssyacc.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\icalbdbset.h # End Source File # Begin Source File SOURCE=.\icalbdbsetimpl.h # End Source File # Begin Source File SOURCE=.\icalcalendar.h # End Source File # Begin Source File SOURCE=.\icalcaputil.h # End Source File # Begin Source File SOURCE=.\icalclassify.h # End Source File # Begin Source File SOURCE=.\icalcluster.h # End Source File # Begin Source File SOURCE=.\icalclusterimpl.h # End Source File # Begin Source File SOURCE=.\icalcsdb.h # End Source File # Begin Source File SOURCE=.\icaldirset.h # End Source File # Begin Source File SOURCE=.\icaldirsetimpl.h # End Source File # Begin Source File SOURCE=.\icalfileset.h # End Source File # Begin Source File SOURCE=.\icalfilesetimpl.h # End Source File # Begin Source File SOURCE=.\icalgauge.h # End Source File # Begin Source File SOURCE=.\icalgaugeimpl.h # End Source File # Begin Source File SOURCE=.\icalmessage.h # End Source File # Begin Source File SOURCE=.\icalset.h # End Source File # Begin Source File SOURCE=.\icalspanlist.h # End Source File # Begin Source File SOURCE=.\icalss.h # End Source File # Begin Source File SOURCE=.\icalssyacc.h # End Source File # End Group # End Target # End Project libical-1.0/src/libicalss/icalfileset.c0000664000076400007640000006005512132563133017124 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalfileset.c CREATOR: eric 23 December 1999 $Id: icalfileset.c,v 1.36 2008-01-15 23:17:43 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalfileset.h" #include "icalgauge.h" #include #include /* for stat */ #ifndef WIN32 #include /* for stat, getpid */ #else #include #ifndef _WIN32_WCE #include #endif #endif #include #include #include /* for fcntl */ #include "icalfilesetimpl.h" #include "icalclusterimpl.h" #if defined(_MSC_VER) #define _S_ISTYPE(mode, mask) (((mode) & _S_IFMT) == (mask)) #define S_ISDIR(mode) _S_ISTYPE((mode), _S_IFDIR) #define S_ISREG(mode) _S_ISTYPE((mode), _S_IFREG) #define snprintf _snprintf #define strcasecmp stricmp #endif #ifdef _WIN32_WCE #include #endif /** Default options used when NULL is passed to icalset_new() **/ icalfileset_options icalfileset_options_default = {O_RDWR|O_CREAT, 0644, 0}; int icalfileset_lock(icalfileset *set); int icalfileset_unlock(icalfileset *set); icalerrorenum icalfileset_read_file(icalfileset* set, mode_t mode); int icalfileset_filesize(icalfileset* set); icalerrorenum icalfileset_create_cluster(const char *path); icalset* icalfileset_new(const char* path) { return icalset_new(ICAL_FILE_SET, path, &icalfileset_options_default); } icalset* icalfileset_new_reader(const char* path) { icalfileset_options reader_options = icalfileset_options_default; reader_options.flags = O_RDONLY; return icalset_new(ICAL_FILE_SET, path, &reader_options); } icalset* icalfileset_new_writer(const char* path) { icalfileset_options writer_options = icalfileset_options_default; writer_options.flags = O_RDONLY; return icalset_new(ICAL_FILE_SET, path, &writer_options); } icalset* icalfileset_init(icalset *set, const char* path, void* options_in) { icalfileset_options *options = (options_in) ? options_in : &icalfileset_options_default; icalfileset *fset = (icalfileset*) set; int flags; mode_t mode; off_t cluster_file_size; icalerror_clear_errno(); icalerror_check_arg_rz( (path!=0), "path"); icalerror_check_arg_rz( (fset!=0), "fset"); fset->path = strdup(path); fset->options = *options; flags = options->flags; mode = options->mode; cluster_file_size = icalfileset_filesize(fset); if(cluster_file_size < 0){ icalfileset_free(set); return 0; } #ifndef WIN32 fset->fd = open(fset->path, flags, mode); #else fset->fd = open(fset->path, flags, mode); /* fset->fd = sopen(fset->path,flags, _SH_DENYWR, _S_IREAD | _S_IWRITE); */ #endif if (fset->fd < 0){ icalerror_set_errno(ICAL_FILE_ERROR); icalfileset_free(set); return 0; } #ifndef WIN32 icalfileset_lock(fset); #endif if(cluster_file_size > 0 ){ icalerrorenum error; if((error = icalfileset_read_file(fset,mode))!= ICAL_NO_ERROR){ icalfileset_free(set); return 0; } } if (options->cluster) { fset->cluster = icalcomponent_new_clone(icalcluster_get_component(options->cluster)); fset->changed = 1; } if (fset->cluster == 0) { fset->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT); } return set; } icalcluster* icalfileset_produce_icalcluster(const char *path) { icalset *fileset; icalcluster *ret; int errstate = icalerror_errors_are_fatal; icalerror_errors_are_fatal = 0; fileset = icalfileset_new_reader(path); if (fileset == 0 || icalerrno == ICAL_FILE_ERROR) { /* file does not exist */ ret = icalcluster_new(path, NULL); } else { ret = icalcluster_new(path, ((icalfileset*)fileset)->cluster); icalfileset_free(fileset); } icalerror_errors_are_fatal = errstate; icalerror_set_errno(ICAL_NO_ERROR); return ret; } char* icalfileset_read_from_file(char *s, size_t size, void *d) { char* p = s; icalfileset *set = d; /* Simulate fgets -- read single characters and stop at '\n' */ for(p=s; pfd,p,1) != 1 || *p=='\n'){ p++; break; } } *p = '\0'; if(*s == 0){ return 0; } else { return s; } } icalerrorenum icalfileset_read_file(icalfileset* set,mode_t mode) { icalparser *parser; parser = icalparser_new(); icalparser_set_gen_data(parser, set); set->cluster = icalparser_parse(parser,icalfileset_read_from_file); icalparser_free(parser); if (set->cluster == 0 || icalerrno != ICAL_NO_ERROR){ icalerror_set_errno(ICAL_PARSE_ERROR); /*return ICAL_PARSE_ERROR;*/ } if (icalcomponent_isa(set->cluster) != ICAL_XROOT_COMPONENT){ /* The parser got a single component, so it did not put it in an XROOT. */ icalcomponent *cl = set->cluster; set->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT); icalcomponent_add_component(set->cluster,cl); } return ICAL_NO_ERROR; } int icalfileset_filesize(icalfileset* fset) { int cluster_file_size; struct stat sbuf; if (stat(fset->path,&sbuf) != 0){ /* A file by the given name does not exist, or there was another error */ cluster_file_size = 0; if (errno == ENOENT) { /* It was because the file does not exist */ return 0; } else { /* It was because of another error */ icalerror_set_errno(ICAL_FILE_ERROR); return -1; } } else { /* A file by the given name exists, but is it a regular file? */ if (!S_ISREG(sbuf.st_mode)){ /* Nope, not a regular file */ icalerror_set_errno(ICAL_FILE_ERROR); return -1; } else { /* Lets assume that it is a file of the right type */ return sbuf.st_size; } } /*return -1; not reached*/ } void icalfileset_free(icalset* set) { icalfileset *fset = (icalfileset*) set; icalerror_check_arg_rv((set!=0),"set"); if (fset->cluster != 0){ icalfileset_commit(set); icalcomponent_free(fset->cluster); fset->cluster=0; } if (fset->gauge != 0){ icalgauge_free(fset->gauge); fset->gauge=0; } if(fset->fd > 0){ icalfileset_unlock(fset); close(fset->fd); fset->fd = -1; } if(fset->path != 0){ free(fset->path); fset->path = 0; } } const char* icalfileset_path(icalset* set) { icalerror_check_arg_rz((set!=0),"set"); return ((icalfileset*)set)->path; } int icalfileset_lock(icalfileset *set) { #ifndef WIN32 struct flock lock; int rtrn; icalerror_check_arg_rz((set->fd>0),"set->fd"); errno = 0; lock.l_type = F_WRLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */ lock.l_start = 0; /* byte offset relative to l_whence */ lock.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */ lock.l_len = 0; /* #bytes (0 means to EOF) */ rtrn = fcntl(set->fd, F_SETLKW, &lock); return rtrn; #else return 0; #endif } int icalfileset_unlock(icalfileset *set) { #ifndef WIN32 struct flock lock; icalerror_check_arg_rz((set->fd>0),"set->fd"); lock.l_type = F_WRLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */ lock.l_start = 0; /* byte offset relative to l_whence */ lock.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */ lock.l_len = 0; /* #bytes (0 means to EOF) */ return (fcntl(set->fd, F_UNLCK, &lock)); #else return 0; #endif } static char * shell_quote(const char *s) { char *result; char *p; p = result = malloc(strlen(s)*5+1); while(*s) { if (*s == '\'') { *p++ = '\''; *p++ = '"'; *p++ = *s++; *p++ = '"'; *p++ = '\''; } else { *p++ = *s++; } } *p = '\0'; return result; } icalerrorenum icalfileset_commit(icalset* set) { char tmp[ICAL_PATH_MAX]; char *str; icalcomponent *c; off_t write_size=0; icalfileset *fset = (icalfileset*) set; #ifdef _WIN32_WCE wchar_t *wtmp=0; PROCESS_INFORMATION pi; #endif icalerror_check_arg_re((fset!=0),"set",ICAL_BADARG_ERROR); icalerror_check_arg_re((fset->fd>0),"set->fd is invalid", ICAL_INTERNAL_ERROR) ; if (fset->changed == 0 ){ return ICAL_NO_ERROR; } if (fset->options.safe_saves == 1) { #ifndef WIN32 char *quoted_file = shell_quote(fset->path); snprintf(tmp,ICAL_PATH_MAX,"cp '%s' '%s.bak'",fset->path, fset->path); free(quoted_file); #else snprintf(tmp,ICAL_PATH_MAX,"copy %s %s.bak", fset->path, fset->path); #endif #ifndef _WIN32_WCE if(system(tmp) < 0){ #else wtmp = wce_mbtowc(tmp); if (CreateProcess (wtmp, L"", NULL, NULL, FALSE, 0, NULL, NULL, NULL,&pi)){ #endif icalerror_set_errno(ICAL_FILE_ERROR); return ICAL_FILE_ERROR; } } #ifdef _WIN32_WCE free(wtmp); #endif if(lseek(fset->fd, 0, SEEK_SET) < 0){ icalerror_set_errno(ICAL_FILE_ERROR); return ICAL_FILE_ERROR; } for(c = icalcomponent_get_first_component(fset->cluster,ICAL_ANY_COMPONENT); c != 0; c = icalcomponent_get_next_component(fset->cluster,ICAL_ANY_COMPONENT)){ int sz; str = icalcomponent_as_ical_string_r(c); sz=write(fset->fd,str,strlen(str)); if ( sz != strlen(str)){ perror("write"); icalerror_set_errno(ICAL_FILE_ERROR); free(str); return ICAL_FILE_ERROR; } free(str); write_size += sz; } fset->changed = 0; #ifndef WIN32 if(ftruncate(fset->fd,write_size) < 0){ return ICAL_FILE_ERROR; } #else #ifndef _WIN32_WCE chsize( fset->fd, tell( fset->fd ) ); #else SetEndOfFile(fset->fd); #endif #endif return ICAL_NO_ERROR; } void icalfileset_mark(icalset* set) { icalerror_check_arg_rv((set!=0),"set"); ((icalfileset*)set)->changed = 1; } icalcomponent* icalfileset_get_component(icalset* set){ icalfileset *fset = (icalfileset*) set; icalerror_check_arg_rz((set!=0),"set"); return fset->cluster; } /* manipulate the components in the set */ icalerrorenum icalfileset_add_component(icalset *set, icalcomponent* child) { icalfileset *fset = (icalfileset*) set; icalerror_check_arg_re((set!=0),"set", ICAL_BADARG_ERROR); icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR); icalcomponent_add_component(fset->cluster,child); icalfileset_mark(set); return ICAL_NO_ERROR; } icalerrorenum icalfileset_remove_component(icalset *set, icalcomponent* child) { icalfileset *fset = (icalfileset*) set; icalerror_check_arg_re((set!=0),"set",ICAL_BADARG_ERROR); icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR); icalcomponent_remove_component(fset->cluster,child); icalfileset_mark(set); return ICAL_NO_ERROR; } int icalfileset_count_components(icalset *set, icalcomponent_kind kind) { icalfileset *fset = (icalfileset*) set; if (set == 0){ icalerror_set_errno(ICAL_BADARG_ERROR); return -1; } return icalcomponent_count_components(fset->cluster,kind); } icalerrorenum icalfileset_select(icalset* set, icalgauge* gauge) { icalfileset *fset = (icalfileset*) set; icalerror_check_arg_re(gauge!=0,"gauge",ICAL_BADARG_ERROR); fset->gauge = gauge; return ICAL_NO_ERROR; } void icalfileset_clear(icalset* set) { icalfileset *fset = (icalfileset*) set; icalerror_check_arg_rv(set!=0,"set"); fset->gauge = 0; } icalcomponent* icalfileset_fetch(icalset* set,const char* uid) { icalfileset *fset = (icalfileset*) set; icalcompiter i; icalerror_check_arg_rz(set!=0,"set"); for(i = icalcomponent_begin_component(fset->cluster,ICAL_ANY_COMPONENT); icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){ icalcomponent *this = icalcompiter_deref(&i); icalcomponent *inner; icalproperty *p; const char *this_uid; for(inner = icalcomponent_get_first_component(this,ICAL_ANY_COMPONENT); inner != 0; inner = icalcomponent_get_next_component(this,ICAL_ANY_COMPONENT)){ p = icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY); if ( p ) { this_uid = icalproperty_get_uid(p); if(this_uid==0){ icalerror_warn("icalfileset_fetch found a component with no UID"); continue; } if (strcmp(uid,this_uid)==0){ return this; } } } } return 0; } int icalfileset_has_uid(icalset* set,const char* uid) { assert(0); /* HACK, not implemented */ return 0; } /******* support routines for icalfileset_fetch_match *********/ struct icalfileset_id{ char* uid; char* recurrence_id; int sequence; }; void icalfileset_id_free(struct icalfileset_id *id) { if(id->recurrence_id != 0){ free(id->recurrence_id); } if(id->uid != 0){ free(id->uid); } } struct icalfileset_id icalfileset_get_id(icalcomponent* comp) { icalcomponent *inner; struct icalfileset_id id; icalproperty *p; inner = icalcomponent_get_first_real_component(comp); p = icalcomponent_get_first_property(inner, ICAL_UID_PROPERTY); assert(p!= 0); id.uid = strdup(icalproperty_get_uid(p)); p = icalcomponent_get_first_property(inner, ICAL_SEQUENCE_PROPERTY); if(p == 0) { id.sequence = 0; } else { id.sequence = icalproperty_get_sequence(p); } p = icalcomponent_get_first_property(inner, ICAL_RECURRENCEID_PROPERTY); if (p == 0){ id.recurrence_id = 0; } else { icalvalue *v; v = icalproperty_get_value(p); id.recurrence_id = icalvalue_as_ical_string_r(v); assert(id.recurrence_id != 0); } return id; } /* Find the component that is related to the given component. Currently, it just matches based on UID and RECURRENCE-ID */ icalcomponent* icalfileset_fetch_match(icalset* set, icalcomponent *comp) { icalfileset *fset = (icalfileset*) set; icalcompiter i; struct icalfileset_id comp_id, match_id; comp_id = icalfileset_get_id(comp); for(i = icalcomponent_begin_component(fset->cluster,ICAL_ANY_COMPONENT); icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){ icalcomponent *match = icalcompiter_deref(&i); match_id = icalfileset_get_id(match); if(strcmp(comp_id.uid, match_id.uid) == 0 && ( comp_id.recurrence_id ==0 || strcmp(comp_id.recurrence_id, match_id.recurrence_id) ==0 )){ /* HACK. What to do with SEQUENCE? */ icalfileset_id_free(&match_id); icalfileset_id_free(&comp_id); return match; } icalfileset_id_free(&match_id); } icalfileset_id_free(&comp_id); return 0; } icalerrorenum icalfileset_modify(icalset* set, icalcomponent *old, icalcomponent *new) { /* icalfileset *fset = (icalfileset*) set; */ assert(0); /* HACK, not implemented */ return ICAL_NO_ERROR; } /* Iterate through components */ icalcomponent* icalfileset_get_current_component (icalset* set) { icalfileset *fset = (icalfileset*) set; icalerror_check_arg_rz((set!=0),"set"); return icalcomponent_get_current_component(fset->cluster); } icalcomponent* icalfileset_get_first_component(icalset* set) { icalcomponent *c=0; icalfileset *fset = (icalfileset*) set; icalerror_check_arg_rz((set!=0),"set"); do { if (c == 0){ c = icalcomponent_get_first_component(fset->cluster, ICAL_ANY_COMPONENT); } else { c = icalcomponent_get_next_component(fset->cluster, ICAL_ANY_COMPONENT); } if(c != 0 && (fset->gauge == 0 || icalgauge_compare(fset->gauge, c) == 1)){ return c; } } while(c != 0); return 0; } icalcomponent* icalfileset_get_next_component(icalset* set) { icalfileset *fset = (icalfileset*) set; icalcomponent *c; icalerror_check_arg_rz((set!=0),"set"); do { c = icalcomponent_get_next_component(fset->cluster, ICAL_ANY_COMPONENT); if(c != 0 && (fset->gauge == 0 || icalgauge_compare(fset->gauge,c) == 1)){ return c; } } while(c != 0); return 0; } /* icalsetiter icalfileset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge) { icalsetiter itr = icalsetiter_null; icalcomponent* comp = NULL; icalcompiter citr; icalfileset *fset = (icalfileset*) set; icalerror_check_arg_re((set!=0), "set", icalsetiter_null); itr.gauge = gauge; citr = icalcomponent_begin_component(fset->cluster, kind); comp = icalcompiter_deref(&citr); while (comp != 0) { comp = icalcompiter_deref(&citr); if (gauge == 0 || icalgauge_compare(itr.gauge, comp) == 1) { itr.iter = citr; return itr; } comp = icalcompiter_next(&citr); } return icalsetiter_null; } */ icalsetiter icalfileset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge) { icalsetiter itr = icalsetiter_null; icalcomponent* comp = NULL; icalcompiter citr; icalfileset *fset = (icalfileset*) set; struct icaltimetype start, next; icalproperty *dtstart, *rrule, *prop, *due; struct icalrecurrencetype recur; int g = 0; icalerror_check_arg_re((set!=0), "set", icalsetiter_null); start = icaltime_from_timet( time(0),0); itr.gauge = gauge; citr = icalcomponent_begin_component(fset->cluster, kind); comp = icalcompiter_deref(&citr); if (gauge == 0) { itr.iter = citr; return itr; } while (comp != 0) { /* check if it is a recurring component and with guage expand, if so we need to add recurrence-id property to the given component */ rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY); g = icalgauge_get_expand(gauge); if (rrule != 0 && g == 1) { recur = icalproperty_get_rrule(rrule); if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) { dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY); if (dtstart) start = icalproperty_get_dtstart(dtstart); } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) { due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY); if (due) start = icalproperty_get_due(due); } if (itr.last_component == NULL) { itr.ritr = icalrecur_iterator_new(recur, start); next = icalrecur_iterator_next(itr.ritr); itr.last_component = comp; } else { next = icalrecur_iterator_next(itr.ritr); if (icaltime_is_null_time(next)){ itr.last_component = NULL; icalrecur_iterator_free(itr.ritr); itr.ritr = NULL; return icalsetiter_null; } else { itr.last_component = comp; } } /* add recurrence-id to the component if there is a recurrence-id already, remove it, then add the new one */ prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY); if (prop) icalcomponent_remove_property(comp, prop); icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next)); } if (gauge == 0 || icalgauge_compare(itr.gauge, comp) == 1) { /* matches and returns */ itr.iter = citr; return itr; } /* if there is no previous component pending, then get the next component */ if (itr.last_component == NULL) comp = icalcompiter_next(&citr); } return icalsetiter_null; } icalcomponent* icalfileset_form_a_matched_recurrence_component(icalsetiter* itr) { icalcomponent* comp = NULL; struct icaltimetype start, next; icalproperty *dtstart, *rrule, *prop, *due; struct icalrecurrencetype recur; start = icaltime_from_timet( time(0),0); comp = itr->last_component; if (comp == NULL || itr->gauge == NULL) { return NULL; } rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY); recur = icalproperty_get_rrule(rrule); if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) { dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY); if (dtstart) start = icalproperty_get_dtstart(dtstart); } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) { due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY); if (due) start = icalproperty_get_due(due); } if (itr->ritr == NULL) { itr->ritr = icalrecur_iterator_new(recur, start); next = icalrecur_iterator_next(itr->ritr); itr->last_component = comp; } else { next = icalrecur_iterator_next(itr->ritr); if (icaltime_is_null_time(next)){ /* no more recurrence, returns */ itr->last_component = NULL; icalrecur_iterator_free(itr->ritr); itr->ritr = NULL; return NULL; } else { itr->last_component = comp; } } /* add recurrence-id to the component * if there is a recurrence-id already, remove it, then add the new one */ prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY); if (prop) icalcomponent_remove_property(comp, prop); icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next)); if (itr->gauge == 0 || icalgauge_compare(itr->gauge, comp) == 1) { /* matches and returns */ return comp; } /* not matched */ return NULL; } icalcomponent* icalfilesetiter_to_next(icalset* set, icalsetiter* i) { icalcomponent* c = NULL; /* icalfileset *fset = (icalfileset*) set; */ struct icaltimetype start, next; icalproperty *dtstart, *rrule, *prop, *due; struct icalrecurrencetype recur; int g = 0; start = icaltime_from_timet( time(0),0); next = icaltime_from_timet( time(0),0); do { c = icalcompiter_next(&(i->iter)); if (c == 0) continue; if (i->gauge == 0) return c; rrule = icalcomponent_get_first_property(c, ICAL_RRULE_PROPERTY); g = icalgauge_get_expand(i->gauge); /* a recurring component with expand query */ if (rrule != 0 && g == 1) { recur = icalproperty_get_rrule(rrule); if (icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT) { dtstart = icalcomponent_get_first_property(c, ICAL_DTSTART_PROPERTY); if (dtstart) start = icalproperty_get_dtstart(dtstart); } else if (icalcomponent_isa(c) == ICAL_VTODO_COMPONENT) { due = icalcomponent_get_first_property(c, ICAL_DUE_PROPERTY); if (due) start = icalproperty_get_due(due); } if (i->ritr == NULL) { i->ritr = icalrecur_iterator_new(recur, start); next = icalrecur_iterator_next(i->ritr); i->last_component = c; } else { next = icalrecur_iterator_next(i->ritr); if (icaltime_is_null_time(next)) { /* no more recurrence, returns */ i->last_component = NULL; icalrecur_iterator_free(i->ritr); i->ritr = NULL; return NULL; } else { i->last_component = c; } } } /* add recurrence-id to the component * if there is a recurrence-id already, remove it, then add the new one */ prop = icalcomponent_get_first_property(c, ICAL_RECURRENCEID_PROPERTY); if (prop) icalcomponent_remove_property(c, prop); icalcomponent_add_property(c, icalproperty_new_recurrenceid(next)); if(c != 0 && (i->gauge == 0 || icalgauge_compare(i->gauge, c) == 1)){ return c; } } while (c != 0); return 0; } libical-1.0/src/libicalss/icalgauge.h0000664000076400007640000000317012132563133016561 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalgauge.h CREATOR: eric 23 December 1999 $Id: icalgauge.h,v 1.6 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALGAUGE_H #define ICALGAUGE_H #include "icalcomponent.h" /** @file icalgauge.h * @brief Routines implementing a filter for ical components */ typedef struct icalgauge_impl icalgauge; icalgauge* icalgauge_new_from_sql(char* sql, int expand); int icalgauge_get_expand(icalgauge* gauge); void icalgauge_free(icalgauge* gauge); char* icalgauge_as_sql(icalcomponent* gauge); void icalgauge_dump(icalgauge* gauge); /** @brief Return true if comp matches the gauge. * * The component must be in * cannonical form -- a VCALENDAR with one VEVENT, VTODO or VJOURNAL * sub component */ int icalgauge_compare(icalgauge* g, icalcomponent* comp); /** Clone the component, but only return the properties * specified in the gauge */ icalcomponent* icalgauge_new_clone(icalgauge* g, icalcomponent* comp); #endif /* ICALGAUGE_H*/ libical-1.0/src/libicalss/icalcaputil.h0000664000076400007640000000357712132563133017145 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalutil.h CREATOR: eric 23 December 1999 $Id: icalcaputil.h,v 1.1.1.1 2001-01-02 07:33:03 ebusboom Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ =========================================================================*/ /* Create new components that have a form suitable for the various iTIP trasactions */ /* Scheduling commands */ icalcomponent* icalcaputil_new_accept_reply(icalcomponent* comp, char* calid); icalcomponent* icalcaputil_new_decline_reply(icalcomponent* comp, char* calid); icalcomponent* icalcaputil_new_refresh(icalcomponent* comp, char* calid); icalcomponent* icalcaputil_new_cancel(icalcomponent* comp); icalcomponent* icalcaputil_new_counter(icalcomponent* comp); icalcomponent* icalcaputil_new_declinecounter(icalcomponent* comp); /* Calendaring commands */ icalcomponent* icalcaputil_new_create(); icalcomponent* icalcaputil_new_delete(); icalcomponent* icalcaputil_new_modify(); icalerrorenum* icalcaputil_modify_add_old_prop(icalcomponent* c, icalproperty *p); icalerrorenum* icalcaputil_modify_add_new_prop(icalcomponent* c, icalproperty *p); icalerrorenum* icalcaputil_add_query(icalcomponent* c, char* str); icalcomponent* icalcaputil_new_move(); icalcomponent* icalcaputil_new_read(); icalerrorenum icalcaputil_add_target(icalcomponent* comp,char* target); icalerrorenum icalcaputil_add_to_vcar(icalcomponent* comp,char* target); libical-1.0/src/libicalss/icalfileset.h0000664000076400007640000001004112132563133017117 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalfileset.h CREATOR: eric 23 December 1999 $Id: icalfileset.h,v 1.15 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALFILESET_H #define ICALFILESET_H #include #include "icalset.h" #include "icalcluster.h" #include "icalgauge.h" #include /* For open() flags and mode */ #include /* For open() flags and mode */ #include /* For open() flags and mode */ #ifdef WIN32 #define mode_t int #endif typedef struct icalfileset_impl icalfileset; icalset* icalfileset_new(const char* path); icalset* icalfileset_new_reader(const char* path); icalset* icalfileset_new_writer(const char* path); icalset* icalfileset_init(icalset *set, const char *dsn, void* options); icalfileset* icalfileset_new_from_cluster(const char* path, icalcluster *cluster); icalcluster* icalfileset_produce_icalcluster(const char *path); void icalfileset_free(icalset* cluster); const char* icalfileset_path(icalset* cluster); /* Mark the cluster as changed, so it will be written to disk when it is freed. Commit writes to disk immediately. */ void icalfileset_mark(icalset* set); icalerrorenum icalfileset_commit(icalset* set); icalerrorenum icalfileset_add_component(icalset* set, icalcomponent* child); icalerrorenum icalfileset_remove_component(icalset* set, icalcomponent* child); int icalfileset_count_components(icalset* set, icalcomponent_kind kind); /** * Restrict the component returned by icalfileset_first, _next to those * that pass the gauge. _clear removes the gauge */ icalerrorenum icalfileset_select(icalset* set, icalgauge* gauge); /** clear the gauge **/ void icalfileset_clear(icalset* set); /** Get and search for a component by uid **/ icalcomponent* icalfileset_fetch(icalset* set, const char* uid); int icalfileset_has_uid(icalset* set, const char* uid); icalcomponent* icalfileset_fetch_match(icalset* set, icalcomponent *c); /** * Modify components according to the MODIFY method of CAP. Works on the * currently selected components. */ icalerrorenum icalfileset_modify(icalset* set, icalcomponent *oldcomp, icalcomponent *newcomp); /* Iterate through components. If a gauge has been defined, these will skip over components that do not pass the gauge */ icalcomponent* icalfileset_get_current_component (icalset* cluster); icalcomponent* icalfileset_get_first_component(icalset* cluster); icalcomponent* icalfileset_get_next_component(icalset* cluster); /* External iterator for thread safety */ icalsetiter icalfileset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge); icalcomponent * icalfilesetiter_to_next(icalset* set, icalsetiter *iter); icalcomponent* icalfileset_form_a_matched_recurrence_component(icalsetiter* itr); /** Return a reference to the internal component. You probably should not be using this. */ icalcomponent* icalfileset_get_component(icalset* cluster); /** * @brief options for opening an icalfileset. * * These options should be passed to the icalset_new() function */ typedef struct icalfileset_options { int flags; /**< flags for open() O_RDONLY, etc */ mode_t mode; /**< file mode */ int safe_saves; /**< to lock or not */ icalcluster *cluster; /**< use this cluster to initialize data */ } icalfileset_options; extern icalfileset_options icalfileset_options_default; #endif /* !ICALFILESET_H */ libical-1.0/src/libicalss/icalssyacc.h0000664000076400007640000000540512132563133016761 0ustar allenallen/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { STRING = 258, SELECT = 259, FROM = 260, WHERE = 261, COMMA = 262, QUOTE = 263, EQUALS = 264, NOTEQUALS = 265, LESS = 266, GREATER = 267, LESSEQUALS = 268, GREATEREQUALS = 269, AND = 270, OR = 271, EOL = 272, END = 273, IS = 274, NOT = 275, SQLNULL = 276 }; #endif /* Tokens. */ #define STRING 258 #define SELECT 259 #define FROM 260 #define WHERE 261 #define COMMA 262 #define QUOTE 263 #define EQUALS 264 #define NOTEQUALS 265 #define LESS 266 #define GREATER 267 #define LESSEQUALS 268 #define GREATEREQUALS 269 #define AND 270 #define OR 271 #define EOL 272 #define END 273 #define IS 274 #define NOT 275 #define SQLNULL 276 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { char* v_string; } /* Line 1489 of yacc.c. */ YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE sslval; libical-1.0/src/libicalss/icalcsdb.h0000664000076400007640000000324312132563133016405 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalcsdb.h Calendar Server Database CREATOR: eric 23 December 1999 $Id: icalcsdb.h,v 1.2 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALCSDB_H #define ICALCSDB_H #include typedef void icalcsdb; icalcsdb* icalcsdb_new(char* path); void icalcsdb_free(icalcsdb* csdb); icalerrorenum icalcsdb_create(icalcsdb* db, char* calid); icalerrorenum icalcsdb_delete(icalcsdb* db, char* calid); icalerrorenum icalcsdb_move(icalcsdb* db, char* oldcalid, char* newcalid); icalerrorenum icalcsdb_noop(icalcsdb* db); char* icalcsdb_generateuid(icalcsdb* db); icalcomponent* icalcsdb_expand_upn(icalcsdb* db, char* upn); icalcomponent* icalcsdb_expand_calid(icalcsdb* db, char* calid); icalerrorenum icalcsbd_senddata(icalcsdb* db, icalcomponent* comp); icalset* icalcsdb_get_calendar(icalcsdb* db, char* calid, icalcomponent *gauge); icalset* icalcsdb_get_vcars(icalcsdb* db); icalset* icalcsdb_get_properties(icalcsdb* db); icalset* icalcsdb_get_capabilities(icalcsdb* db); icalset* icalcsdb_get_timezones(icalcsdb* db); #endif /* !ICALCSDB_H */ libical-1.0/src/libicalss/icalset.c0000664000076400007640000002572712132563133016273 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalset.c CREATOR: eric 17 Jul 2000 Icalset is the "base class" for representations of a collection of iCal components. Derived classes (actually delegates) include: icalfileset Store components in a single file icaldirset Store components in multiple files in a directory icalheapset Store components on the heap icalmysqlset Store components in a mysql database. $Id: icalset.c,v 1.18 2008-01-02 20:07:41 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "icalset.h" #include "icalfileset.h" #include "icalfilesetimpl.h" #include "icaldirset.h" #include "icaldirsetimpl.h" #include #include #include #ifdef WITH_BDB4 #include "icalbdbset.h" #include "icalbdbsetimpl.h" #endif /* #define _DLOPEN_TEST */ #ifdef _DLOPEN_TEST #include #include #include #endif static icalset icalset_dirset_init = { ICAL_DIR_SET, sizeof(icaldirset), NULL, icaldirset_init, icaldirset_free, icaldirset_path, icaldirset_mark, icaldirset_commit, icaldirset_add_component, icaldirset_remove_component, icaldirset_count_components, icaldirset_select, icaldirset_clear, icaldirset_fetch, icaldirset_fetch_match, icaldirset_has_uid, icaldirset_modify, icaldirset_get_current_component, icaldirset_get_first_component, icaldirset_get_next_component, icaldirset_begin_component, icaldirsetiter_to_next, icaldirsetiter_to_prior }; static icalset icalset_fileset_init = { ICAL_FILE_SET, sizeof(icalfileset), NULL, icalfileset_init, icalfileset_free, icalfileset_path, icalfileset_mark, icalfileset_commit, icalfileset_add_component, icalfileset_remove_component, icalfileset_count_components, icalfileset_select, icalfileset_clear, icalfileset_fetch, icalfileset_fetch_match, icalfileset_has_uid, icalfileset_modify, icalfileset_get_current_component, icalfileset_get_first_component, icalfileset_get_next_component, icalfileset_begin_component, icalfilesetiter_to_next, NULL }; #ifdef WITH_BDB4 static icalset icalset_bdbset_init = { ICAL_BDB_SET, sizeof(icalbdbset), NULL, icalbdbset_init, icalbdbset_free, icalbdbset_path, icalbdbset_mark, icalbdbset_commit, icalbdbset_add_component, icalbdbset_remove_component, icalbdbset_count_components, icalbdbset_select, icalbdbset_clear, icalbdbset_fetch, icalbdbset_fetch_match, icalbdbset_has_uid, icalbdbset_modify, icalbdbset_get_current_component, icalbdbset_get_first_component, icalbdbset_get_next_component, icalbdbset_begin_component, icalbdbsetiter_to_next, NULL }; #endif #ifdef _DLOPEN_TEST static int icalset_init_done = 0; static pvl_list icalset_kinds = 0; typedef icalset *(*fptr)(void); /** * Try to load the file and register any icalset found within. */ static int load(const char *file) { void *modh; fptr inith; icalset *icalset_init_ptr; if ((modh = dlopen(file, RTLD_NOW)) == 0) { perror("dlopen"); return 0; } if ((inith = (fptr)dlsym(modh, "InitModule")) == 0) { perror("dlsym"); return 0; } while ((icalset_init_ptr = ((inith)())) != 0) { pvl_push(icalset_kinds, &icalset_init_ptr); } return 1; } /** * Look in the given directory for files called mod_*.o and try to * load them. */ int icalset_loaddir(const char *path) { DIR *d; struct dirent *dp; char buf[PATH_MAX], *bufptr; int tot = 0; strcpy(buf, path); bufptr = buf + strlen(buf); if (*(bufptr-1) != '/') *bufptr++ = '/'; if ((d = opendir(path)) == 0) { perror("opendir"); return 0; } while ((dp = readdir(d)) != 0) { if (strncmp(dp->d_name, "mod_", 4)) continue; strcpy(bufptr, dp->d_name); load(buf); tot++; } (void)closedir(d); return 1; } int icalset_register_class(icalset *set); static void icalset_init(void) { assert(icalset_kinds == 0); icalset_kinds = pvl_newlist(); pvl_push(icalset_kinds, &icalset_fileset_init); pvl_push(icalset_kinds, &icalset_dirset_init); #ifdef WITH_BDB4 pvl_push(icalset_kinds, &icalset_bdb4set_init); #endif #ifdef EXT_PATH icalset_loaddir(EXT_PATH); #endif icalset_init_done++; } int icalset_register_class(icalset *set) { if (!icalset_init_done) icalset_init(); pvl_push(icalset_kinds, set); return 1; } #endif icalset* icalset_new(icalset_kind kind, const char* dsn, void* options) { icalset *data = NULL; icalset *ret = NULL; #ifdef _DLOPEN_TEST pvl_elem e; icalset *impl; if (!icalset_init_done) icalset_init(); for(e = pvl_head(icalset_kinds); e!=0; e = pvl_next(e)) { impl = (icalset*)pvl_data(e); if (impl->kind == kind) break; } if (e == 0) { icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); return(NULL); } data = (icalset*)malloc(impl->size); if (data == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); errno = ENOMEM; return 0; } /* The first member of the derived class must be an icalset. */ memset(data,0,impl->size); /* *data = *impl; */ memcpy(data, impl, sizeof(icalset)); data->dsn = strdup(dsn); #else switch(kind) { case ICAL_FILE_SET: data = (icalset*) malloc(sizeof(icalfileset)); if (data == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); errno = ENOMEM; return 0; } memset(data,0,sizeof(icalfileset)); *data = icalset_fileset_init; break; case ICAL_DIR_SET: data = (icalset*) malloc(sizeof(icaldirset)); if (data == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); errno = ENOMEM; return 0; } memset(data,0,sizeof(icaldirset)); *data = icalset_dirset_init; break; #ifdef WITH_BDB4 case ICAL_BDB_SET: data = (icalset*) malloc(sizeof(icalbdbset)); if (data == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); errno = ENOMEM; return 0; } memset(data,0,sizeof(icalbdbset)); *data = icalset_bdbset_init; break; #endif default: icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); /** unimplemented **/ return(NULL); } data->kind = kind; data->dsn = strdup(dsn); #endif /** call the implementation specific initializer **/ if ((ret = data->init(data, dsn, options)) == NULL) icalset_free(data); return ret; } icalset* icalset_new_file(const char* path) { return icalset_new(ICAL_FILE_SET, path, NULL); } icalset* icalset_new_file_writer(const char* path) { return icalfileset_new_writer(path); } icalset* icalset_new_file_reader(const char* path) { return icalfileset_new_reader(path); } icalset* icalset_new_dir(const char* path) { return icalset_new(ICAL_DIR_SET, path, NULL); } icalset* icalset_new_dir_writer(const char* path) { return icaldirset_new_writer(path); } icalset* icalset_new_dir_reader(const char* path) { return icaldirset_new_reader(path); } /* Functions for built-in methods */ /** * free memory associated with this icalset * automatically calls the implementation specific free routine */ void icalset_free(icalset* set) { if (set->free) set->free(set); if (set->dsn) free(set->dsn); free(set); } const char* icalset_path(icalset* set) { return set->path(set); } void icalset_mark(icalset* set) { set->mark(set); } icalerrorenum icalset_commit(icalset* set) { return set->commit(set); } icalerrorenum icalset_add_component(icalset* set, icalcomponent* comp) { return set->add_component(set,comp); } icalerrorenum icalset_remove_component(icalset* set, icalcomponent* comp) { return set->remove_component(set,comp); } int icalset_count_components(icalset* set,icalcomponent_kind kind) { return set->count_components(set,kind); } icalerrorenum icalset_select(icalset* set, icalgauge* gauge) { return set->select(set, gauge); } void icalset_clear(icalset* set) { set->clear(set); } icalcomponent* icalset_fetch(icalset* set, const char* uid) { return set->fetch(set, uid); } icalcomponent* icalset_fetch_match(icalset* set, icalcomponent *comp) { return set->fetch_match(set, comp); } int icalset_has_uid(icalset* set, const char* uid) { return set->has_uid(set, uid); } icalerrorenum icalset_modify(icalset* set, icalcomponent *old, icalcomponent *new) { return set->modify(set, old, new); } icalcomponent* icalset_get_current_component(icalset* set) { return set->get_current_component(set); } icalcomponent* icalset_get_first_component(icalset* set) { return set->get_first_component(set); } icalcomponent* icalset_get_next_component(icalset* set) { return set->get_next_component(set); } icalsetiter icalsetiter_null = {{ICAL_NO_COMPONENT, 0}, 0}; icalsetiter icalset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge) { return set->icalset_begin_component(set, kind, gauge); } icalcomponent* icalsetiter_next(icalsetiter* itr) { icalcomponent* c = 0; icalerror_check_arg_rz( (itr != NULL), "i"); do { c = icalcompiter_next(&(itr->iter)); if(c != 0 && (itr->gauge == 0 || icalgauge_compare(itr->gauge, c) == 1)){ return c; } } while (c != 0); return 0; } icalcomponent* icalsetiter_prior(icalsetiter* i) { icalcomponent* c = 0; icalerror_check_arg_rz( (i != NULL), "i" ); do { c = icalcompiter_prior(&(i->iter)); if(c != 0 && (i->gauge == 0 || icalgauge_compare(i->gauge, c) == 1)){ return c; } } while (c != 0); return 0; } icalcomponent* icalsetiter_deref(icalsetiter* i) { icalerror_check_arg_rz( (i != NULL), "i" ); return (icalcompiter_deref(&(i->iter))); } /* for subclasses that use multiple clusters that require specialized cluster traversal */ icalcomponent* icalsetiter_to_next(icalset* set, icalsetiter* i) { return set->icalsetiter_to_next(set, i); } icalcomponent* icalsetiter_to_prior(icalset* set, icalsetiter* i) { return set->icalsetiter_to_prior(set, i); } libical-1.0/src/libicalss/icaldirset.c0000664000076400007640000004503012132563133016757 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icaldirset.c CREATOR: eric 28 November 1999 $Id: icaldirset.c,v 1.24 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ /** @file icaldirset.c @brief icaldirset manages a database of ical components and offers interfaces for reading, writing and searching for components. icaldirset groups components in to clusters based on their DTSTAMP time -- all components that start in the same month are grouped together in a single file. All files in a sotre are kept in a single directory. The primary interfaces are icaldirset__get_first_component and icaldirset_get_next_component. These routine iterate through all of the components in the store, subject to the current gauge. A gauge is an icalcomponent that is tested against other componets for a match. If a gauge has been set with icaldirset_select, icaldirset_first and icaldirset_next will only return componentes that match the gauge. The Store generated UIDs for all objects that are stored if they do not already have a UID. The UID is the name of the cluster (month & year as MMYYYY) plus a unique serial number. The serial number is stored as a property of the cluster. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "icaldirset.h" #include "icaldirset.h" #include "icalfileset.h" #include "icalfilesetimpl.h" #include "icalcluster.h" #include "icalgauge.h" #ifndef WIN32 #include /* for opendir() */ #include /* for stat, getpid */ #include /* for uname */ #else #include #include #endif #include #include /* for opendir() */ #include /* for stat */ #include /* For PATH_MAX */ #include /* for clock() */ #include /* for rand(), srand() */ #include /* for strdup */ #include "icaldirsetimpl.h" #if defined(_MSC_VER) #define _S_ISTYPE(mode, mask) (((mode) & _S_IFMT) == (mask)) #define S_ISDIR(mode) _S_ISTYPE((mode), _S_IFDIR) #define S_ISREG(mode) _S_ISTYPE((mode), _S_IFREG) #define snprintf _snprintf #define strcasecmp stricmp #endif /** Default options used when NULL is passed to icalset_new() **/ icaldirset_options icaldirset_options_default = {O_RDWR|O_CREAT}; const char* icaldirset_path(icalset* set) { icaldirset *dset = (icaldirset*)set; return dset->dir; } void icaldirset_mark(icalset* set) { icaldirset *dset = (icaldirset*)set; icalcluster_mark(dset->cluster); } icalerrorenum icaldirset_commit(icalset* set) { icaldirset *dset = (icaldirset*)set; icalset *fileset; icalfileset_options options = icalfileset_options_default; options.cluster = dset->cluster; fileset = icalset_new(ICAL_FILE_SET, icalcluster_key(dset->cluster), &options); fileset->commit(fileset); fileset->free(fileset); return ICAL_NO_ERROR; } void icaldirset_lock(const char* dir) { } void icaldirset_unlock(const char* dir) { } /* Load the contents of the store directory into the store's internal directory list*/ icalerrorenum icaldirset_read_directory(icaldirset *dset) { char *str; #ifndef WIN32 struct dirent *de; DIR* dp; dp = opendir(dset->dir); if (dp == 0) { icalerror_set_errno(ICAL_FILE_ERROR); return ICAL_FILE_ERROR; } /* clear contents of directory list */ while((str = pvl_pop(dset->directory))){ free(str); } /* load all of the cluster names in the directory list */ for(de = readdir(dp); de != 0; de = readdir(dp)){ /* Remove known directory names '.' and '..'*/ if (strcmp(de->d_name,".") == 0 || strcmp(de->d_name,"..") == 0 ){ continue; } pvl_push(dset->directory, (void*)strdup(de->d_name)); } closedir(dp); #else struct _finddata_t c_file; intptr_t hFile; /* Find first .c file in current directory */ if( (hFile = _findfirst( "*", &c_file )) == -1L ) { icalerror_set_errno(ICAL_FILE_ERROR); return ICAL_FILE_ERROR; } else { while((str = pvl_pop(dset->directory))){ free(str); } /* load all of the cluster names in the directory list */ do { /* Remove known directory names '.' and '..'*/ if (strcmp(c_file.name,".") == 0 || strcmp(c_file.name,"..") == 0 ){ continue; } pvl_push(dset->directory, (void*)strdup(c_file.name)); } while ( _findnext( hFile, &c_file ) == 0 ); _findclose( hFile ); } #endif return ICAL_NO_ERROR; } icalset* icaldirset_init(icalset* set, const char* dir, void* options_in) { icaldirset *dset = (icaldirset*)set; icaldirset_options *options = options_in; struct stat sbuf; icalerror_check_arg_rz( (dir!=0), "dir"); icalerror_check_arg_rz( (set!=0), "set"); if (stat(dir,&sbuf) != 0){ icalerror_set_errno(ICAL_FILE_ERROR); return 0; } /* dir is not the name of a direectory*/ if (!S_ISDIR(sbuf.st_mode)){ icalerror_set_errno(ICAL_USAGE_ERROR); return 0; } icaldirset_lock(dir); dset->dir = (char*)strdup(dir); dset->options = *options; dset->directory = pvl_newlist(); dset->directory_iterator = 0; dset->gauge = 0; dset->first_component = 0; dset->cluster = 0; return set; } icalset* icaldirset_new(const char* dir) { return icalset_new(ICAL_DIR_SET, dir, &icaldirset_options_default); } icalset* icaldirset_new_reader(const char* dir) { icaldirset_options reader_options = icaldirset_options_default; reader_options.flags = O_RDONLY; return icalset_new(ICAL_DIR_SET, dir, &reader_options); } icalset* icaldirset_new_writer(const char* dir) { icaldirset_options writer_options = icaldirset_options_default; writer_options.flags = O_RDWR|O_CREAT; return icalset_new(ICAL_DIR_SET, dir, &writer_options); } void icaldirset_free(icalset* s) { icaldirset *dset = (icaldirset*)s; char* str; icaldirset_unlock(dset->dir); if(dset->dir !=0){ free(dset->dir); dset->dir = 0; } if(dset->gauge !=0){ icalgauge_free(dset->gauge); dset->gauge = 0; } if(dset->cluster !=0){ icalcluster_free(dset->cluster); } while(dset->directory !=0 && (str=pvl_pop(dset->directory)) != 0){ free(str); } if(dset->directory != 0){ pvl_free(dset->directory); dset->directory = 0; } dset->directory_iterator = 0; dset->first_component = 0; } /* icaldirset_next_uid_number updates a serial number in the Store directory in a file called SEQUENCE */ int icaldirset_next_uid_number(icaldirset* dset) { char sequence = 0; char temp[128]; char filename[ICAL_PATH_MAX]; char *r; FILE *f; struct stat sbuf; icalerror_check_arg_rz( (dset!=0), "dset"); snprintf(filename,sizeof(filename),"%s/%s",dset->dir,"SEQUENCE"); /* Create the file if it does not exist.*/ if (stat(filename,&sbuf) == -1 || !S_ISREG(sbuf.st_mode)){ f = fopen(filename,"w"); if (f != 0){ fprintf(f,"0"); fclose(f); } else { icalerror_warn("Can't create SEQUENCE file in icaldirset_next_uid_number"); return 0; } } if ( (f = fopen(filename,"r+")) != 0){ rewind(f); r = fgets(temp,128,f); if (r == 0){ sequence = 1; } else { sequence = atoi(temp)+1; } rewind(f); fprintf(f,"%d",sequence); fclose(f); return sequence; } else { icalerror_warn("Can't create SEQUENCE file in icaldirset_next_uid_number"); return 0; } } icalerrorenum icaldirset_next_cluster(icaldirset* dset) { char path[ICAL_PATH_MAX]; if (dset->directory_iterator == 0){ icalerror_set_errno(ICAL_INTERNAL_ERROR); return ICAL_INTERNAL_ERROR; } dset->directory_iterator = pvl_next(dset->directory_iterator); if (dset->directory_iterator == 0){ /* There are no more clusters */ if(dset->cluster != 0){ icalcluster_free(dset->cluster); dset->cluster = 0; } return ICAL_NO_ERROR; } snprintf(path,sizeof(path),"%s/%s", dset->dir,(char*)pvl_data(dset->directory_iterator)); icalcluster_free(dset->cluster); dset->cluster = icalfileset_produce_icalcluster(path); return icalerrno; } static void icaldirset_add_uid(icalcomponent* comp) { char uidstring[ICAL_PATH_MAX]; icalproperty *uid; #ifndef WIN32 struct utsname unamebuf; #endif icalerror_check_arg_rv( (comp!=0), "comp"); uid = icalcomponent_get_first_property(comp,ICAL_UID_PROPERTY); if (uid == 0) { #ifndef WIN32 uname(&unamebuf); snprintf(uidstring,sizeof(uidstring),"%d-%s",(int)getpid(),unamebuf.nodename); #else snprintf(uidstring,sizeof(uidstring),"%d-%s",(int)getpid(),"WINDOWS"); /* FIX: There must be an easy get the system name */ #endif uid = icalproperty_new_uid(uidstring); icalcomponent_add_property(comp,uid); } else { strncpy(uidstring,icalproperty_get_uid(uid),ICAL_PATH_MAX-1); uidstring[ICAL_PATH_MAX-1]='\0'; } } /** This assumes that the top level component is a VCALENDAR, and there is an inner component of type VEVENT, VTODO or VJOURNAL. The inner component must have a DSTAMP property */ icalerrorenum icaldirset_add_component(icalset* set, icalcomponent* comp) { char clustername[ICAL_PATH_MAX]; icalproperty *dt = 0; icalvalue *v; struct icaltimetype tm; icalerrorenum error = ICAL_NO_ERROR; icalcomponent *inner; icaldirset *dset = (icaldirset*) set; icalerror_check_arg_rz( (dset!=0), "dset"); icalerror_check_arg_rz( (comp!=0), "comp"); icaldirset_add_uid(comp); /* Determine which cluster this object belongs in. This is a HACK */ for(inner = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); inner != 0; inner = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ dt = icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY); if (dt != 0) break; } if (dt == 0) { for(inner = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); inner != 0; inner = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ dt = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY); if (dt != 0) break; } } if (dt == 0){ icalerror_warn("The component does not have a DTSTAMP or DTSTART property, so it cannot be added to the store"); icalerror_set_errno(ICAL_BADARG_ERROR); return ICAL_BADARG_ERROR; } v = icalproperty_get_value(dt); tm = icalvalue_get_datetime(v); snprintf(clustername,ICAL_PATH_MAX,"%s/%04d%02d",dset->dir, tm.year, tm.month); /* Load the cluster and insert the object */ if(dset->cluster != 0 && strcmp(clustername,icalcluster_key(dset->cluster)) != 0 ){ icalcluster_free(dset->cluster); dset->cluster = 0; } if (dset->cluster == 0){ dset->cluster = icalfileset_produce_icalcluster(clustername); if (dset->cluster == 0){ error = icalerrno; } } if (error != ICAL_NO_ERROR){ icalerror_set_errno(error); return error; } /* Add the component to the cluster */ icalcluster_add_component(dset->cluster,comp); /* icalcluster_mark(impl->cluster); */ return ICAL_NO_ERROR; } /** Remove a component in the current cluster. HACK. This routine is a "friend" of icalfileset, and breaks its encapsulation. It was either do it this way, or add several layers of interfaces that had no other use. */ icalerrorenum icaldirset_remove_component(icalset* set, icalcomponent* comp) { icaldirset *dset = (icaldirset*)set; icalcomponent *filecomp = icalcluster_get_component(dset->cluster); icalcompiter i; int found = 0; icalerror_check_arg_re((set!=0),"set",ICAL_BADARG_ERROR); icalerror_check_arg_re((comp!=0),"comp",ICAL_BADARG_ERROR); icalerror_check_arg_re((dset->cluster!=0),"Cluster pointer",ICAL_USAGE_ERROR); for(i = icalcomponent_begin_component(filecomp,ICAL_ANY_COMPONENT); icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){ icalcomponent *this = icalcompiter_deref(&i); if (this == comp){ found = 1; break; } } if (found != 1){ icalerror_warn("icaldirset_remove_component: component is not part of current cluster"); icalerror_set_errno(ICAL_USAGE_ERROR); return ICAL_USAGE_ERROR; } icalcluster_remove_component(dset->cluster,comp); /* icalcluster_mark(impl->cluster); */ /* If the removal emptied the fileset, get the next fileset */ if( icalcluster_count_components(dset->cluster,ICAL_ANY_COMPONENT)==0){ icalerrorenum error = icaldirset_next_cluster(dset); if(dset->cluster != 0 && error == ICAL_NO_ERROR){ icalcluster_get_first_component(dset->cluster); } else { /* HACK. Not strictly correct for impl->cluster==0 */ return error; } } else { /* Do nothing */ } return ICAL_NO_ERROR; } int icaldirset_count_components(icalset* store, icalcomponent_kind kind) { /* HACK, not implemented */ assert(0); return 0; } icalcomponent* icaldirset_fetch_match(icalset* set, icalcomponent *c) { fprintf(stderr," icaldirset_fetch_match is not implemented\n"); assert(0); return 0; } icalcomponent* icaldirset_fetch(icalset* set, const char* uid) { icaldirset *dset = (icaldirset*)set; icalgauge *gauge; icalgauge *old_gauge; icalcomponent *c; char sql[256]; icalerror_check_arg_rz( (set!=0), "set"); icalerror_check_arg_rz( (uid!=0), "uid"); snprintf(sql, 256, "SELECT * FROM VEVENT WHERE UID = \"%s\"", uid); gauge = icalgauge_new_from_sql(sql, 0); old_gauge = dset->gauge; dset->gauge = gauge; c= icaldirset_get_first_component(set); dset->gauge = old_gauge; icalgauge_free(gauge); return c; } int icaldirset_has_uid(icalset* set, const char* uid) { icalcomponent *c; icalerror_check_arg_rz( (set!=0), "set"); icalerror_check_arg_rz( (uid!=0), "uid"); /* HACK. This is a temporary implementation. _has_uid should use a database, and _fetch should use _has_uid, not the other way around */ c = icaldirset_fetch(set,uid); return c!=0; } icalerrorenum icaldirset_select(icalset* set, icalgauge* gauge) { icaldirset *dset = (icaldirset*)set; icalerror_check_arg_re( (set!=0), "set",ICAL_BADARG_ERROR); icalerror_check_arg_re( (gauge!=0), "gauge",ICAL_BADARG_ERROR); dset->gauge = gauge; return ICAL_NO_ERROR; } icalerrorenum icaldirset_modify(icalset* set, icalcomponent *old, icalcomponent *new) { assert(0); return ICAL_NO_ERROR; /* HACK, not implemented */ } void icaldirset_clear(icalset* set) { assert(0); return; /* HACK, not implemented */ } icalcomponent* icaldirset_get_current_component(icalset* set) { icaldirset *dset = (icaldirset*)set; if (dset->cluster == 0){ icaldirset_get_first_component(set); } if(dset->cluster == 0){ return 0; } return icalcluster_get_current_component(dset->cluster); } icalcomponent* icaldirset_get_first_component(icalset* set) { icaldirset *dset = (icaldirset*)set; icalerrorenum error; char path[ICAL_PATH_MAX]; error = icaldirset_read_directory(dset); if (error != ICAL_NO_ERROR){ icalerror_set_errno(error); return 0; } dset->directory_iterator = pvl_head(dset->directory); if (dset->directory_iterator == 0){ icalerror_set_errno(error); return 0; } snprintf(path,ICAL_PATH_MAX,"%s/%s", dset->dir, (char*)pvl_data(dset->directory_iterator)); /* If the next cluster we need is different than the current cluster, delete the current one and get a new one */ if(dset->cluster != 0 && strcmp(path,icalcluster_key(dset->cluster)) != 0 ){ icalcluster_free(dset->cluster); dset->cluster = 0; } if (dset->cluster == 0){ dset->cluster = icalfileset_produce_icalcluster(path); if (dset->cluster == 0){ error = icalerrno; } } if (error != ICAL_NO_ERROR){ icalerror_set_errno(error); return 0; } dset->first_component = 1; return icaldirset_get_next_component(set); } icalcomponent* icaldirset_get_next_component(icalset* set) { icaldirset *dset = (icaldirset*)set; icalcomponent *c; icalerrorenum error; icalerror_check_arg_rz( (set!=0), "set"); if(dset->cluster == 0){ icalerror_warn("icaldirset_get_next_component called with a NULL cluster (Caller must call icaldirset_get_first_component first"); icalerror_set_errno(ICAL_USAGE_ERROR); return 0; } /* Set the component iterator for the following for loop */ if (dset->first_component == 1){ icalcluster_get_first_component(dset->cluster); dset->first_component = 0; } else { icalcluster_get_next_component(dset->cluster); } while(1){ /* Iterate through all of the objects in the cluster*/ for( c = icalcluster_get_current_component(dset->cluster); c != 0; c = icalcluster_get_next_component(dset->cluster)){ /* If there is a gauge defined and the component does not pass the gauge, skip the rest of the loop */ if (dset->gauge != 0 && icalgauge_compare(dset->gauge,c) == 0){ continue; } /* Either there is no gauge, or the component passed the gauge, so return it*/ return c; } /* Fell through the loop, so the component we want is not in this cluster. Load a new cluster and try again.*/ error = icaldirset_next_cluster(dset); if(dset->cluster == 0 || error != ICAL_NO_ERROR){ /* No more clusters */ return 0; } else { c = icalcluster_get_first_component(dset->cluster); return c; } } return 0; /* Should never get here */ } icalsetiter icaldirset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge) { icalsetiter itr = icalsetiter_null; icaldirset *fset = (icaldirset*) set; icalerror_check_arg_re((fset!=0), "set", icalsetiter_null); itr.iter.kind = kind; itr.gauge = gauge; /* TO BE IMPLEMENTED */ return icalsetiter_null; } icalcomponent* icaldirsetiter_to_next(icalset* set, icalsetiter* i) { /* TO BE IMPLEMENTED */ return NULL; } icalcomponent* icaldirsetiter_to_prior(icalset* set, icalsetiter* i) { /* TO BE IMPLEMENTED */ return NULL; } libical-1.0/src/libicalss/icalssutil.c0000664000076400007640000000146312132563133017012 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalssutil.c CREATOR: ebusboom 23 aug 2000 $Id: icalssutil.c,v 1.3 2008-01-02 20:15:45 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif libical-1.0/src/libicalss/icalcstpserver.h0000664000076400007640000000665412132563133017703 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalcstpserver.h CREATOR: eric 13 Feb 01 $Id: icalcstpserver.h,v 1.3 2008-01-02 20:15:45 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalcstp.h ======================================================================*/ #ifndef ICALCSTPS_H #define ICALCSTPS_H #include /********************** Server (Reciever) Interfaces *************************/ /* On the server side, the caller will recieve data from the incoming socket and pass it to icalcstps_next_input. The caller then takes the return from icalcstps_next_outpu and sends it out through the socket. This gives the caller a point of control. If the cstp code connected to the socket itself, it would be hard for the caller to do anything else after the cstp code was started. All of the server and client command routines will generate response codes. On the server side, these responses will be turned into text and sent to the client. On the client side, the reponse is the one sent from the server. Since each command can return multiple responses, the responses are stored in the icalcstps object and are accesses by icalcstps_first_response() and icalcstps_next_response() How to use: 1) Construct a new icalcstps, bound to your code via stubs 2) Repeat forever: 2a) Get string from client & give to icalcstps_next_input() 2b) Repeat until icalcstp_next_output returns 0: 2b1) Call icalcstps_next_output. 2b2) Send string to client. */ typedef void icalcstps; /* Pointers to the rountines that icalcstps_process_incoming will call when it recognizes a CSTP command in the data. BTW, the CONTINUE command is named 'cont' because 'continue' is a C keyword */ struct icalcstps_commandfp { icalerrorenum (*abort)(icalcstps* cstp); icalerrorenum (*authenticate)(icalcstps* cstp, char* mechanism, char* data); icalerrorenum (*calidexpand)(icalcstps* cstp, char* calid); icalerrorenum (*capability)(icalcstps* cstp); icalerrorenum (*cont)(icalcstps* cstp, unsigned int time); icalerrorenum (*identify)(icalcstps* cstp, char* id); icalerrorenum (*disconnect)(icalcstps* cstp); icalerrorenum (*sendata)(icalcstps* cstp, unsigned int time, icalcomponent *comp); icalerrorenum (*starttls)(icalcstps* cstp, char* command, char* data); icalerrorenum (*upnexpand)(icalcstps* cstp, char* upn); icalerrorenum (*unknown)(icalcstps* cstp, char* command, char* data); }; icalcstps* icalcstps_new(struct icalcstps_commandfp stubs); void icalcstps_free(icalcstps* cstp); int icalcstps_set_timeout(icalcstps* cstp, int sec); /* Get the next string to send to the client */ char* icalcstps_next_output(icalcstps* cstp); /* process the next string from the client */ int icalcstps_next_input(icalcstps* cstp); #endif /* ICALCSTPS */ libical-1.0/src/libicalss/icalspanlist.c0000664000076400007640000003553212132563133017330 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalspanlist.c CREATOR: ebusboom 23 aug 2000 $Id: icalspanlist.c,v 1.15 2008-01-02 20:07:42 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "icalspanlist.h" #include /* for free and malloc */ #include struct icalspanlist_impl { pvl_list spans; /**< list of icaltime_span data **/ struct icaltimetype start; /**< start time of span **/ struct icaltimetype end; /**< end time of span **/ }; /** @brief Internal comparison function for two spans * * @param a a spanlist. * @param b another spanlist. * * @return -1, 0, 1 depending on the comparison of the start times. * * Used to insert spans into the tree in sorted order. */ static int compare_span(void* a, void* b) { struct icaltime_span *span_a = (struct icaltime_span *)a ; struct icaltime_span *span_b = (struct icaltime_span *)b ; if(span_a->start == span_b->start){ return 0; } else if(span_a->start < span_b->start){ return -1; } else { /*if(span_a->start > span->b.start)*/ return 1; } } /** @brief callback function for collecting spanlists of a * series of events. * * @param comp A valid icalcomponent. * @param span The span to insert into data. * @param data The actual spanlist to insert into * * This callback is used by icalcomponent_foreach_recurrence() * to build up a spanlist. */ static void icalspanlist_new_callback(icalcomponent *comp, struct icaltime_span *span, void *data) { icaltime_span *s; icalspanlist *sl = (icalspanlist*) data; if (span->is_busy == 0) return; if ((s=(icaltime_span *) malloc(sizeof(icaltime_span))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } /** copy span data into allocated memory.. **/ *s = *span; pvl_insert_ordered(sl->spans, compare_span, (void*)s); } /** @brief Make a free list from a set of VEVENT components. * * @param set A valid icalset containing VEVENTS * @param start The free list starts at this date/time * @param end The free list ends at this date/time * * @return A spanlist corresponding to the VEVENTS * * Given a set of components, a start time and an end time * return a spanlist that contains the free/busy times. */ icalspanlist* icalspanlist_new(icalset *set, struct icaltimetype start, struct icaltimetype end) { struct icaltime_span range; pvl_elem itr; icalcomponent *c,*inner; icalcomponent_kind kind, inner_kind; icalspanlist *sl; struct icaltime_span *freetime; if ( ( sl = (struct icalspanlist_impl*) malloc(sizeof(struct icalspanlist_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } sl->spans = pvl_newlist(); sl->start = start; sl->end = end; range.start = icaltime_as_timet(start); range.end = icaltime_as_timet(end); /* Get a list of spans of busy time from the events in the set and order the spans based on the start time */ for(c = icalset_get_first_component(set); c != 0; c = icalset_get_next_component(set)){ kind = icalcomponent_isa(c); inner = icalcomponent_get_inner(c); if(!inner){ continue; } inner_kind = icalcomponent_isa(inner); if( kind != ICAL_VEVENT_COMPONENT && inner_kind != ICAL_VEVENT_COMPONENT){ continue; } icalerror_clear_errno(); icalcomponent_foreach_recurrence(c, start, end, icalspanlist_new_callback, (void*)sl); } /* Now Fill in the free time spans. loop through the spans. if the start of the range is not within the span, create a free entry that runs from the start of the range to the start of the span. */ for( itr = pvl_head(sl->spans); itr != 0; itr = pvl_next(itr)) { struct icaltime_span *s = (struct icaltime_span*)pvl_data(itr); if ((freetime=(struct icaltime_span *) malloc(sizeof(struct icaltime_span))) == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); icalspanlist_free(sl); return 0; } if(range.start < s->start){ freetime->start = range.start; freetime->end = s->start; freetime->is_busy = 0; pvl_insert_ordered(sl->spans,compare_span,(void*)freetime); } else { free(freetime); } range.start = s->end; } /* If the end of the range is null, then assume that everything after the last item in the calendar is open and add a span that indicates this */ if( icaltime_is_null_time(end)){ struct icaltime_span* last_span; last_span = (struct icaltime_span*)pvl_data(pvl_tail(sl->spans)); if (last_span != 0){ if ((freetime=(struct icaltime_span *) malloc(sizeof(struct icaltime_span))) == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); icalspanlist_free(sl); return 0; } freetime->is_busy = 0; freetime->start = last_span->end; freetime->end = freetime->start; pvl_insert_ordered(sl->spans,compare_span,(void*)freetime); } } return sl; } /** @brief Destructor. * @param s A valid icalspanlist * * Free memory associated with the spanlist */ void icalspanlist_free(icalspanlist* s) { struct icaltime_span *span; if (s == NULL) return; while( (span=pvl_pop(s->spans)) != 0){ free(span); } pvl_free(s->spans); s->spans = 0; free(s); } /** @brief (Debug) print out spanlist to stdout. * @param sl A valid icalspanlist. */ void icalspanlist_dump(icalspanlist* sl){ int i = 0; pvl_elem itr; for( itr = pvl_head(sl->spans); itr != 0; itr = pvl_next(itr)) { struct icaltime_span *s = (struct icaltime_span*)pvl_data(itr); printf("#%02d %d start: %s",++i,s->is_busy,ctime(&s->start)); printf(" end : %s",ctime(&s->end)); } } icalcomponent* icalspanlist_make_free_list(icalspanlist* sl); icalcomponent* icalspanlist_make_busy_list(icalspanlist* sl); /** @brief Find next free time span in a spanlist. * * @param sl The spanlist to search. * @param t The time to start looking. * * Given a spanlist and a time, find the next period of time * that is free */ struct icalperiodtype icalspanlist_next_free_time(icalspanlist* sl, struct icaltimetype t) { pvl_elem itr; struct icalperiodtype period; struct icaltime_span *s; time_t rangett= icaltime_as_timet(t); period.start = icaltime_null_time(); period.end = icaltime_null_time(); itr = pvl_head(sl->spans); s = (struct icaltime_span *)pvl_data(itr); if (s == 0){ /* No elements in span */ return period; } /* Is the reference time before the first span? If so, assume that the reference time is free */ if(rangett start ){ /* End of period is start of first span if span is busy, end of the span if it is free */ period.start = t; if (s->is_busy == 1){ period.end = icaltime_from_timet(s->start,0); } else { period.end = icaltime_from_timet(s->end,0); } return period; } /* Otherwise, find the first free span that contains the reference time. */ for( itr = pvl_head(sl->spans); itr != 0; itr = pvl_next(itr)) { s = (struct icaltime_span *)pvl_data(itr); if(s->is_busy == 0 && s->start >= rangett && ( rangett < s->end || s->end == s->start)){ if (rangett < s->start){ period.start = icaltime_from_timet(s->start,0); } else { period.start = icaltime_from_timet(rangett,0); } period.end = icaltime_from_timet(s->end,0); return period; } } period.start = icaltime_null_time(); period.end = icaltime_null_time(); return period; } struct icalperiodtype icalspanlist_next_busy_time(icalspanlist* sl, struct icaltimetype t); /** @brief Returns an hour-by-hour array of free/busy times over a * given period. * * @param sl A valid icalspanlist * @param delta_t The time slice to divide by, in seconds. Default 3600. * * @return A pointer to an array of integers containing the number of * busy events in each delta_t time period. The final entry * contains the value -1. * * This calculation is somewhat tricky. This is due to the fact that * the time range contains the start time, but does not contain the * end time. To perform a proper calculation we subtract one second * off the end times to get a true containing time. * * Also note that if you supplying a spanlist that does not start or * end on a time boundary divisible by delta_t you may get results * that are not quite what you expect. */ int* icalspanlist_as_freebusy_matrix(icalspanlist* sl, int delta_t) { pvl_elem itr; int spanduration_secs; int *matrix; int matrix_slots; time_t sl_start, sl_end; icalerror_check_arg_rz( (sl!=0), "spanlist"); if (!delta_t) delta_t = 3600; /** calculate the start and end time as time_t **/ sl_start = icaltime_as_timet_with_zone(sl->start, icaltimezone_get_utc_timezone()); sl_end = icaltime_as_timet_with_zone(sl->end, icaltimezone_get_utc_timezone()); /** insure that the time period falls on a time boundary divisable by delta_t */ sl_start /= delta_t; sl_start *= delta_t; sl_end /= delta_t; sl_end *= delta_t; /** find the duration of this spanlist **/ spanduration_secs = sl_end - sl_start; /** malloc our matrix, add one extra slot for a final -1 **/ matrix_slots = spanduration_secs/delta_t + 1; matrix = (int*) malloc(sizeof(int) * matrix_slots); if (matrix == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return NULL; } memset(matrix, 0, sizeof(int) * matrix_slots); matrix[matrix_slots-1] = -1; /* loop through each span and mark the slots in the array */ for( itr = pvl_head(sl->spans); itr != 0; itr = pvl_next(itr)) { struct icaltime_span *s = (struct icaltime_span*)pvl_data(itr); if (s->is_busy == 1) { int offset_start = s->start/delta_t - sl_start/delta_t; int offset_end = (s->end - 1) /delta_t - sl_start/delta_t + 1; int i; if (offset_end >= matrix_slots) offset_end = matrix_slots - 1; i = offset_start; for (i=offset_start; i < offset_end; i++) { matrix[i]++; } } } return matrix; } /** @brief Return a VFREEBUSY component for the corresponding spanlist * * @param sl A valid icalspanlist, from icalspanlist_new() * @param organizer The organizer specified as MAILTO:user@domain * @param attendee The attendee specified as MAILTO:user@domain * * @return A valid icalcomponent or NULL. * * This function returns a VFREEBUSY component for the given spanlist. * The start time is mapped to DTSTART, the end time to DTEND. * Each busy span is represented as a separate FREEBUSY entry. * An attendee parameter is required, and organizer parameter is * optional. */ icalcomponent *icalspanlist_as_vfreebusy(icalspanlist* sl, const char* organizer, const char* attendee) { icalcomponent *comp; icalproperty *p; struct icaltimetype atime = icaltime_from_timet( time(0),0); pvl_elem itr; icaltimezone *utc_zone; icalparameter *param; if (!attendee) { icalerror_set_errno(ICAL_USAGE_ERROR); return 0; } utc_zone = icaltimezone_get_utc_timezone (); comp = icalcomponent_new_vfreebusy(); icalcomponent_add_property(comp, icalproperty_new_dtstart(sl->start)); icalcomponent_add_property(comp, icalproperty_new_dtend(sl->end)); icalcomponent_add_property(comp, icalproperty_new_dtstamp(atime)); if (organizer) { icalcomponent_add_property(comp, icalproperty_new_organizer(organizer)); } icalcomponent_add_property(comp, icalproperty_new_attendee(attendee)); /* now add the freebusy sections.. */ for( itr = pvl_head(sl->spans); itr != 0; itr = pvl_next(itr)) { struct icalperiodtype period; struct icaltime_span *s = (struct icaltime_span*)pvl_data(itr); if (s->is_busy == 1) { period.start = icaltime_from_timet_with_zone (s->start, 0, utc_zone); period.end = icaltime_from_timet_with_zone (s->end, 0, utc_zone); period.duration = icaldurationtype_null_duration(); p = icalproperty_new_freebusy(period); param = icalparameter_new_fbtype(ICAL_FBTYPE_BUSY); icalproperty_add_parameter(p, param); icalcomponent_add_property(comp, p); } } return comp; } /** @brief Return a spanlist corresponding to the VFREEBUSY portion of * an icalcomponent. * * @param c A valid icalcomponent. * * @return A valid icalspanlist or NULL if no VFREEBUSY section. * */ icalspanlist *icalspanlist_from_vfreebusy(icalcomponent* comp) { icalcomponent *inner; icalproperty *prop; icalspanlist *sl; icalerror_check_arg_rz((comp != NULL), "comp"); inner = icalcomponent_get_inner(comp); if (!inner) return NULL; if ( ( sl = (icalspanlist*) malloc(sizeof(icalspanlist))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } sl->spans = pvl_newlist(); /* cycle through each FREEBUSY property, adding to the spanlist */ for (prop = icalcomponent_get_first_property(inner, ICAL_FREEBUSY_PROPERTY); prop != NULL; prop = icalcomponent_get_next_property(inner, ICAL_FREEBUSY_PROPERTY)) { icaltime_span *s = (icaltime_span *) malloc(sizeof(icaltime_span)); icalparameter *param; struct icalperiodtype period; icalparameter_fbtype fbtype; if (s == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); icalspanlist_free(sl); return 0; } param = icalproperty_get_first_parameter(prop, ICAL_FBTYPE_PARAMETER); fbtype = (param) ? icalparameter_get_fbtype(param) : ICAL_FBTYPE_BUSY; switch (fbtype) { case ICAL_FBTYPE_FREE: case ICAL_FBTYPE_NONE: case ICAL_FBTYPE_X: s->is_busy = 1; break; default: s->is_busy = 0; } period = icalproperty_get_freebusy(prop); s->start = icaltime_as_timet_with_zone(period.start, icaltimezone_get_utc_timezone()); s->end = icaltime_as_timet_with_zone(period.end, icaltimezone_get_utc_timezone()); ; pvl_insert_ordered(sl->spans, compare_span, (void*)s); } /** @todo calculate start/end limits.. fill in holes? **/ return sl; } libical-1.0/src/libicalss/icalcalendar.h0000664000076400007640000000340312132563133017241 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalcalendar.h CREATOR: eric 23 December 1999 $Id: icalcalendar.h,v 1.4 2008-01-02 20:07:39 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALCALENDAR_H #define ICALCALENDAR_H #include #include "icalset.h" /* icalcalendar * Routines for storing calendar data in a file system. The calendar * has two icaldirsets, one for incoming components and one for booked * components. It also has interfaces to access the free/busy list * and a list of calendar properties */ typedef struct icalcalendar_impl icalcalendar; icalcalendar* icalcalendar_new(char* dir); void icalcalendar_free(icalcalendar* calendar); int icalcalendar_lock(icalcalendar* calendar); int icalcalendar_unlock(icalcalendar* calendar); int icalcalendar_islocked(icalcalendar* calendar); int icalcalendar_ownlock(icalcalendar* calendar); icalset* icalcalendar_get_booked(icalcalendar* calendar); icalset* icalcalendar_get_incoming(icalcalendar* calendar); icalset* icalcalendar_get_properties(icalcalendar* calendar); icalset* icalcalendar_get_freebusy(icalcalendar* calendar); #endif /* !ICALCALENDAR_H */ libical-1.0/src/libicalss/icalssutil.h0000664000076400007640000000135512132563133017017 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalssutil.h CREATOR: eric 21 Aug 2000 $Id: icalssutil.h,v 1.3 2008-01-02 20:15:45 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ =========================================================================*/ #include libical-1.0/src/libicalss/icalcluster.h0000664000076400007640000000355512132563133017161 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalcluster.h CREATOR: eric 23 December 1999 $Id: icalcluster.h,v 1.4 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALCLUSTER_H #define ICALCLUSTER_H #include #include "icalset.h" typedef struct icalcluster_impl icalcluster; icalcluster* icalcluster_new(const char *key, icalcomponent *data); icalcluster* icalcluster_new_clone(const icalcluster *cluster); void icalcluster_free(icalcluster *cluster); const char* icalcluster_key(icalcluster *cluster); int icalcluster_is_changed(icalcluster *cluster); void icalcluster_mark(icalcluster *cluster); void icalcluster_commit(icalcluster *cluster); icalcomponent* icalcluster_get_component(icalcluster* cluster); int icalcluster_count_components(icalcluster *cluster, icalcomponent_kind kind); icalerrorenum icalcluster_add_component(icalcluster* cluster, icalcomponent* child); icalerrorenum icalcluster_remove_component(icalcluster* cluster, icalcomponent* child); icalcomponent* icalcluster_get_current_component(icalcluster* cluster); icalcomponent* icalcluster_get_first_component(icalcluster* cluster); icalcomponent* icalcluster_get_next_component(icalcluster* cluster); #endif /* !ICALCLUSTER_H */ libical-1.0/src/libicalss/icalss_file.cmake0000664000076400007640000000245312132563133017751 0ustar allenallen# ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. # It is required to make the combined header icalss.h properly. set(COMBINEDHEADERSICALSS ${TOPS}/src/libicalss/icalgauge.h ${TOPS}/src/libicalss/icalset.h ${TOPS}/src/libicalss/icalcluster.h ${TOPS}/src/libicalss/icalfileset.h ${TOPS}/src/libicalss/icaldirset.h ${TOPS}/src/libicalss/icalcalendar.h ${TOPS}/src/libicalss/icalclassify.h ${TOPS}/src/libicalss/icalspanlist.h ${TOPS}/src/libicalss/icalmessage.h ) FILE(WRITE ${ICAL_FILE_H_FILE} "#ifndef LIBICAL_ICALSS_H\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#define LIBICAL_ICALSS_H\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#ifdef __cplusplus\n") FILE(APPEND ${ICAL_FILE_H_FILE} "extern \"C\" {\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#endif\n") foreach (_current_FILE ${COMBINEDHEADERSICALSS}) FILE(READ ${_current_FILE} _contents) STRING(REGEX REPLACE "#include *\"ical.*\\.h\"" "" _contents "${_contents}" ) STRING(REGEX REPLACE "#include *\"pvl\\.h\"" "" _contents "${_contents}" ) FILE(APPEND ${ICAL_FILE_H_FILE} "${_contents}") endforeach (_current_FILE) FILE(APPEND ${ICAL_FILE_H_FILE} "\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#ifdef __cplusplus\n") FILE(APPEND ${ICAL_FILE_H_FILE} "}\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#endif\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#endif\n") libical-1.0/src/libicalss/icalspanlist_cxx.cpp0000664000076400007640000000414012132563133020541 0ustar allenallen#include "icalspanlist_cxx.h" #include /** @brief Construct an ICalSpanList from an icalset @param set The icalset containing the VEVENTS @param start Designated start of the spanlist @param end Designated end of the spanlist */ ICalSpanList::ICalSpanList(icalset *set, icaltimetype start, icaltimetype end) throw(icalerrorenum) { data = icalspanlist_new(set, start, end); if (!data) throw icalerrno; }; /** @brief Constructor @param comp A valid icalcomponent with a VFREEBUSY section */ ICalSpanList::ICalSpanList(icalcomponent *comp) throw(icalerrorenum) { data = icalspanlist_from_vfreebusy(comp); if (!data) throw icalerrno; } /** @brief Constructor @param comp A valid VComponent with a VFREEBUSY section */ ICalSpanList::ICalSpanList(VComponent &comp) throw(icalerrorenum) { data = icalspanlist_from_vfreebusy((icalcomponent*) comp); if (!data) throw icalerrno; } /** Destructor */ ICalSpanList::~ICalSpanList() { if (data) icalspanlist_free(data); } /** * @brief Returns a VFREEBUSY component for the object. * * @see icalspanlist_as_vfreebusy() */ VComponent* ICalSpanList::get_vfreebusy(const char *organizer, const char *attendee) throw(icalerrorenum) { icalcomponent *comp; VComponent *vcomp; comp = icalspanlist_as_vfreebusy(data, organizer, attendee); if (comp == 0) throw icalerrno; vcomp = new VComponent(comp); if (vcomp == 0) throw icalerrno; return vcomp; } /** * @brief Returns a summary of events over delta_t * * @param delta_t Number of seconds to divide the spanlist time period * into. * * This method calculates the total number of events in each time slot * of delta_t seconds. * * @see icalspanlist_as_freebusy_matrix() */ std::vector ICalSpanList::as_vector(int delta_t) throw(icalerrorenum) { int *matrix; int i = 0; std::vector event_vec; matrix = icalspanlist_as_freebusy_matrix(data, delta_t); if (!matrix) throw ICAL_USAGE_ERROR; while (matrix[i] != -1) { event_vec.push_back(matrix[i]); // Add item at end of vector } return(event_vec); } libical-1.0/src/libicalss/icalsslexer.c0000664000076400007640000014200112132563133017146 0ustar allenallen #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer ss_create_buffer #define yy_delete_buffer ss_delete_buffer #define yy_flex_debug ss_flex_debug #define yy_init_buffer ss_init_buffer #define yy_flush_buffer ss_flush_buffer #define yy_load_buffer_state ss_load_buffer_state #define yy_switch_to_buffer ss_switch_to_buffer #define yyin ssin #define yyleng ssleng #define yylex sslex #define yylineno sslineno #define yyout ssout #define yyrestart ssrestart #define yytext sstext #define yywrap sswrap #define yyalloc ssalloc #define yyrealloc ssrealloc #define yyfree ssfree #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include #ifdef _WIN32_WCE #include #endif /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE ssrestart(ssin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int ssleng; extern FILE *ssin, *ssout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up sstext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up sstext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via ssrestart()), so that the user can continue scanning by * just pointing ssin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when sstext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int ssleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow sswrap()'s to do buffer switches * instead of setting up a fresh ssin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void ssrestart (FILE *input_file ); void ss_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE ss_create_buffer (FILE *file,int size ); void ss_delete_buffer (YY_BUFFER_STATE b ); void ss_flush_buffer (YY_BUFFER_STATE b ); void sspush_buffer_state (YY_BUFFER_STATE new_buffer ); void sspop_buffer_state (void ); static void ssensure_buffer_stack (void ); static void ss_load_buffer_state (void ); static void ss_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER ss_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE ss_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE ss_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE ss_scan_bytes (yyconst char *bytes,int len ); void *ssalloc (yy_size_t ); void *ssrealloc (void *,yy_size_t ); void ssfree (void * ); #define yy_new_buffer ss_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ ssensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ ss_create_buffer(ssin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ ssensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ ss_create_buffer(ssin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef unsigned char YY_CHAR; FILE *ssin = (FILE *) 0, *ssout = (FILE *) 0; typedef int yy_state_type; extern int sslineno; int sslineno = 1; extern char sstext[]; static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up sstext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ ssleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ if ( ssleng >= YYLMAX ) \ YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \ yy_flex_strncpy( sstext, (yytext_ptr), ssleng + 1 ); \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 23 #define YY_END_OF_BUFFER 24 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[56] = { 0, 0, 0, 0, 0, 0, 0, 24, 22, 18, 18, 22, 17, 21, 4, 19, 8, 5, 9, 21, 21, 21, 21, 21, 21, 21, 18, 7, 0, 21, 10, 6, 11, 21, 21, 14, 21, 21, 13, 21, 21, 20, 12, 21, 15, 21, 21, 21, 2, 16, 21, 21, 21, 3, 1, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 5, 1, 1, 1, 1, 1, 6, 1, 1, 7, 1, 8, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 12, 13, 1, 7, 14, 7, 15, 16, 17, 18, 7, 19, 20, 7, 7, 21, 22, 23, 24, 7, 7, 25, 26, 27, 28, 7, 29, 7, 7, 7, 1, 1, 1, 1, 1, 1, 30, 7, 31, 32, 33, 34, 7, 35, 36, 7, 7, 37, 38, 39, 40, 7, 7, 41, 42, 43, 44, 7, 45, 7, 7, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[46] = { 0, 1, 1, 1, 2, 1, 1, 3, 1, 2, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ; static yyconst flex_int16_t yy_base[58] = { 0, 0, 0, 0, 0, 0, 0, 98, 107, 44, 47, 85, 0, 0, 107, 107, 84, 83, 79, 29, 28, 28, 31, 31, 40, 39, 58, 107, 84, 0, 107, 107, 107, 47, 40, 0, 38, 45, 0, 46, 59, 107, 0, 55, 0, 57, 67, 60, 0, 0, 71, 70, 61, 0, 0, 107, 103, 86 } ; static yyconst flex_int16_t yy_def[58] = { 0, 55, 1, 1, 1, 1, 1, 55, 55, 55, 55, 55, 56, 57, 55, 55, 55, 55, 55, 57, 57, 57, 57, 57, 57, 57, 55, 55, 56, 57, 55, 55, 55, 57, 57, 57, 57, 57, 57, 57, 57, 55, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0, 55, 55 } ; static yyconst flex_int16_t yy_nxt[153] = { 0, 8, 9, 10, 9, 11, 12, 13, 14, 8, 15, 16, 17, 18, 19, 13, 13, 13, 20, 13, 21, 13, 13, 22, 23, 13, 24, 13, 13, 25, 19, 13, 13, 13, 20, 13, 21, 13, 13, 22, 23, 13, 24, 13, 13, 25, 26, 26, 26, 26, 26, 26, 33, 34, 35, 36, 38, 39, 40, 37, 26, 26, 26, 42, 43, 44, 45, 46, 33, 34, 35, 36, 38, 39, 40, 37, 47, 48, 49, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54, 29, 41, 32, 47, 48, 49, 31, 30, 27, 55, 55, 50, 51, 52, 53, 54, 28, 28, 7, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55 } ; static yyconst flex_int16_t yy_chk[153] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 10, 10, 10, 19, 20, 21, 22, 23, 24, 25, 22, 26, 26, 26, 33, 34, 36, 37, 39, 19, 20, 21, 22, 23, 24, 25, 22, 40, 43, 45, 33, 34, 36, 37, 39, 46, 47, 50, 51, 52, 57, 28, 18, 40, 43, 45, 17, 16, 11, 7, 0, 46, 47, 50, 51, 52, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int ss_flex_debug; int ss_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #ifndef YYLMAX #define YYLMAX 8192 #endif char sstext[YYLMAX]; char *yytext_ptr; /* -*- Mode: C -*- ====================================================================== FILE: icalsslexer.l CREATOR: eric 8 Aug 2000 DESCRIPTION: $Id: icalsslexer.l,v 1.10 2008-01-02 20:07:42 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #include "icalssyacc.h" #include "icalgaugeimpl.h" #include "assert.h" #include /* For strdup() */ const char* input_buffer; const char* input_buffer_p; #define minInt(a,b) ((a) < (b) ? (a) : (b)) int icalss_input(char* buf, int max_size) { int n = minInt(max_size,strlen(input_buffer_p)); if (n > 0){ memcpy(buf, input_buffer_p, n); input_buffer_p += n; return n; } else { return 0; } } #undef YY_INPUT #define YY_INPUT(b,r,ms) ( r= icalss_input(b,ms)) #undef SS_FATAL_ERROR #define SS_FATAL_ERROR(msg) sserror(msg) #define INITIAL 0 #define sql 1 #define string_value 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int sslex_destroy (void ); int ssget_debug (void ); void ssset_debug (int debug_flag ); YY_EXTRA_TYPE ssget_extra (void ); void ssset_extra (YY_EXTRA_TYPE user_defined ); FILE *ssget_in (void ); void ssset_in (FILE * in_str ); FILE *ssget_out (void ); void ssset_out (FILE * out_str ); int ssget_leng (void ); char *ssget_text (void ); int ssget_lineno (void ); void ssset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int sswrap (void ); #else extern int sswrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( sstext, ssleng, 1, ssout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( ssin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( ssin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, ssin))==0 && ferror(ssin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(ssin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int sslex (void); #define YY_DECL int sslex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after sstext and ssleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! ssin ) ssin = stdin; if ( ! ssout ) ssout = stdout; if ( ! YY_CURRENT_BUFFER ) { ssensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = ss_create_buffer(ssin,YY_BUF_SIZE ); } ss_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of sstext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 56 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 107 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP { return SELECT; } YY_BREAK case 2: YY_RULE_SETUP { return FROM; } YY_BREAK case 3: YY_RULE_SETUP { return WHERE; } YY_BREAK case 4: YY_RULE_SETUP { return COMMA; } YY_BREAK case 5: YY_RULE_SETUP { return EQUALS; } YY_BREAK case 6: YY_RULE_SETUP { return EQUALS; } YY_BREAK case 7: YY_RULE_SETUP { return NOTEQUALS; } YY_BREAK case 8: YY_RULE_SETUP { return LESS; } YY_BREAK case 9: YY_RULE_SETUP { return GREATER; } YY_BREAK case 10: YY_RULE_SETUP { return LESSEQUALS; } YY_BREAK case 11: YY_RULE_SETUP { return GREATEREQUALS; } YY_BREAK case 12: YY_RULE_SETUP { return AND; } YY_BREAK case 13: YY_RULE_SETUP { return OR; } YY_BREAK case 14: YY_RULE_SETUP { return IS; } YY_BREAK case 15: YY_RULE_SETUP { return NOT; } YY_BREAK case 16: YY_RULE_SETUP { return SQLNULL; } YY_BREAK case 17: YY_RULE_SETUP { return QUOTE; } YY_BREAK case 18: /* rule 18 can match eol */ YY_RULE_SETUP ; YY_BREAK case 19: YY_RULE_SETUP { return EOL; } YY_BREAK case 20: YY_RULE_SETUP { int c = input(); if(c != EOF){ unput(c); } if(c!='\''){ sslval.v_string= icalmemory_tmp_copy(sstext); return STRING; } else { /*ssmore();*/ } } YY_BREAK case 21: YY_RULE_SETUP { sslval.v_string= icalmemory_tmp_copy(sstext); return STRING; } YY_BREAK case 22: YY_RULE_SETUP { return sstext[0]; } YY_BREAK case 23: YY_RULE_SETUP ECHO; YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(sql): case YY_STATE_EOF(string_value): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed ssin at a new source and called * sslex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = ssin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( sswrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * sstext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of sslex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ ssrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; ssrestart(ssin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ssrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 56 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 56 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 55); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up sstext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ ssrestart(ssin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( sswrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve sstext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void ssrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ ssensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = ss_create_buffer(ssin,YY_BUF_SIZE ); } ss_init_buffer(YY_CURRENT_BUFFER,input_file ); ss_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void ss_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * sspop_buffer_state(); * sspush_buffer_state(new_buffer); */ ssensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; ss_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (sswrap()) processing, but the only time this flag * is looked at is after sswrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void ss_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; ssin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE ss_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) ssalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in ss_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) ssalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in ss_create_buffer()" ); b->yy_is_our_buffer = 1; ss_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with ss_create_buffer() * */ void ss_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) ssfree((void *) b->yy_ch_buf ); ssfree((void *) b ); } #ifndef __cplusplus extern int isatty (int ); #endif /* __cplusplus */ /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a ssrestart() or at EOF. */ static void ss_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; ss_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then ss_init_buffer was _probably_ * called from ssrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void ss_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) ss_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void sspush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; ssensure_buffer_stack(); /* This block is copied from ss_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from ss_switch_to_buffer. */ ss_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void sspop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; ss_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { ss_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void ssensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)ssalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in ssensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)ssrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in ssensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE ss_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) ssalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in ss_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; ss_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to sslex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * ss_scan_bytes() instead. */ YY_BUFFER_STATE ss_scan_string (yyconst char * yystr ) { return ss_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to sslex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE ss_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) ssalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in ss_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = ss_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in ss_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up sstext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ sstext[ssleng] = (yy_hold_char); \ (yy_c_buf_p) = sstext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ ssleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int ssget_lineno (void) { return sslineno; } /** Get the input stream. * */ FILE *ssget_in (void) { return ssin; } /** Get the output stream. * */ FILE *ssget_out (void) { return ssout; } /** Get the length of the current token. * */ int ssget_leng (void) { return ssleng; } /** Get the current token. * */ char *ssget_text (void) { return sstext; } /** Set the current line number. * @param line_number * */ void ssset_lineno (int line_number ) { sslineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see ss_switch_to_buffer */ void ssset_in (FILE * in_str ) { ssin = in_str ; } void ssset_out (FILE * out_str ) { ssout = out_str ; } int ssget_debug (void) { return ss_flex_debug; } void ssset_debug (int bdebug ) { ss_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from sslex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT ssin = stdin; ssout = stdout; #else ssin = (FILE *) 0; ssout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * sslex_init() */ return 0; } /* sslex_destroy is for both reentrant and non-reentrant scanners. */ int sslex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ ss_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; sspop_buffer_state(); } /* Destroy the stack itself. */ ssfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * sslex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *ssalloc (yy_size_t size ) { return (void *) malloc( size ); } void *ssrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void ssfree (void * ptr ) { free( (char *) ptr ); /* see ssrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" int sswrap() { return 1; } libical-1.0/src/libicalss/icalcluster.c0000664000076400007640000001273512132563133017154 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalcluster.c CREATOR: acampi 13 March 2002 $Id: icalcluster.c,v 1.4 2007-04-30 13:57:48 artcancro Exp $ $Locker: $ (C) COPYRIGHT 2002, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ /** * * icalcluster is an utility class design to manage clusters of * icalcomponents on behalf of an implementation of icalset. This is * done in order to split out common behavior different classes might * need. * The definition of what exactly a cluster will contain depends on the * icalset subclass. At the basic level, an icluster is just a tuple, * with anything as key and an icalcomponent as value. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #if 0 #include #include /* for stat */ #ifndef WIN32 #include /* for stat, getpid */ #else #include #include #endif #include /* for fcntl */ #endif #include "icalcluster.h" #include "icalclusterimpl.h" #include "icalgauge.h" #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif icalcluster * icalcluster_new_impl(void) { struct icalcluster_impl* impl; if ((impl = (struct icalcluster_impl*)malloc( sizeof(struct icalcluster_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } memset(impl, 0, sizeof(struct icalcluster_impl)); strcpy(impl->id,ICALCLUSTER_ID); return impl; } /** * Create a cluster with a key/value pair. * * @todo Always do a deep copy. */ icalcluster * icalcluster_new(const char* key, icalcomponent *data) { struct icalcluster_impl *impl = icalcluster_new_impl(); assert(impl->data == 0); impl->key = strdup(key); impl->changed = 0; impl->data = 0; if (data != NULL) { if (icalcomponent_isa(data) != ICAL_XROOT_COMPONENT) { impl->data = icalcomponent_new(ICAL_XROOT_COMPONENT); icalcomponent_add_component(impl->data, data); } else { impl->data = icalcomponent_new_clone(data); } } else { impl->data = icalcomponent_new(ICAL_XROOT_COMPONENT); } return impl; } /** * Deep clone an icalcluster to a new one */ icalcluster *icalcluster_new_clone(const icalcluster *data) { struct icalcluster_impl *old = (struct icalcluster_impl *)data; struct icalcluster_impl *impl = icalcluster_new_impl(); impl->key = strdup(old->key); impl->data = icalcomponent_new_clone(old->data); impl->changed = 0; return impl; } void icalcluster_free(icalcluster *impl) { icalerror_check_arg_rv((impl!=0),"cluster"); if (impl->key != 0){ free(impl->key); impl->key = 0; } if (impl->data != 0){ icalcomponent_free(impl->data); impl->data = 0; } free(impl); } const char *icalcluster_key(icalcluster *impl) { icalerror_check_arg_rz((impl!=0),"cluster"); return impl->key; } int icalcluster_is_changed(icalcluster *impl) { icalerror_check_arg_rz((impl!=0),"cluster"); return impl->changed; } void icalcluster_mark(icalcluster *impl) { icalerror_check_arg_rv((impl!=0),"cluster"); impl->changed = 1; } void icalcluster_commit(icalcluster *impl) { icalerror_check_arg_rv((impl!=0),"cluster"); impl->changed = 0; } icalcomponent *icalcluster_get_component(icalcluster *impl) { icalerror_check_arg_rz((impl!=0),"cluster"); if (icalcomponent_isa(impl->data) != ICAL_XROOT_COMPONENT) { char *obj; icalerror_warn("The top component is not an XROOT"); obj = icalcomponent_as_ical_string_r(impl->data); fprintf(stderr, "%s\n", obj); free(obj); abort(); } return impl->data; } icalerrorenum icalcluster_add_component(icalcluster *impl, icalcomponent* child) { icalerror_check_arg_re((impl!=0),"cluster", ICAL_BADARG_ERROR); icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR); icalcomponent_add_component(impl->data, child); icalcluster_mark(impl); return ICAL_NO_ERROR; } icalerrorenum icalcluster_remove_component(icalcluster *impl, icalcomponent* child) { icalerror_check_arg_re((impl!=0),"cluster",ICAL_BADARG_ERROR); icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR); icalcomponent_remove_component(impl->data,child); icalcluster_mark(impl); return ICAL_NO_ERROR; } int icalcluster_count_components(icalcluster *impl, icalcomponent_kind kind) { icalerror_check_arg_re((impl!=0),"cluster",ICAL_BADARG_ERROR); return icalcomponent_count_components(impl->data, kind); } /** Iterate through components **/ icalcomponent *icalcluster_get_current_component(icalcluster* impl) { icalerror_check_arg_rz((impl!=0),"cluster"); return icalcomponent_get_current_component(impl->data); } icalcomponent *icalcluster_get_first_component(icalcluster* impl) { icalerror_check_arg_rz((impl!=0),"cluster"); return icalcomponent_get_first_component(impl->data, ICAL_ANY_COMPONENT); } icalcomponent *icalcluster_get_next_component(icalcluster* impl) { icalerror_check_arg_rz((impl!=0),"cluster"); return icalcomponent_get_next_component(impl->data, ICAL_ANY_COMPONENT); } libical-1.0/src/libicalss/Makefile.am0000664000076400007640000000741112132563133016525 0ustar allenallen#====================================================================== # FILE: Makefile.am # CREATOR: eric # # $Id: Makefile.am,v 1.24 2008-02-03 15:27:34 dothebart Exp $ # # # (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ # # # #====================================================================== AM_YFLAGS = -d -v -p ss -l AM_LFLAGS = -Pss -L -R LEX_OUTPUT_ROOT = lex.ss BUILT_SOURCES = icalss.h # just to get it built $(srcdir)/icalgauge.c: icalssyacc.h $(srcdir)/icalsslexer.c: icalssyacc.h if WITH_BDB4 BDB_INCLUDE=-I@BDB_DIR_INCLUDE@ -DWITH_BDB4 BDB_SOURCEFILES=icalbdbset.c icalbdbset.h icalbdbsetimpl.h BDB_HEADERFILES=$(srcdir)/icalbdbset.h libicalssinclude_BDBHEADERS=icalbdbset.h icalbdbsetimpl.h BDB_LIBFILES=@BDB_DIR_LIB@/@BDB_LIB@ else BDB_INCLUDE= BDB_SOURCEFILES= BDB_HEADERFILES= endif if WITH_CXX_BINDINGS cxx_lib=libicalss_cxx.la cxx_headers=icalspanlist_cxx.h else cxx_lib= cxx_headers= endif lib_LTLIBRARIES = libicalss.la $(cxx_lib) INCLUDES = \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ $(BDB_INCLUDE) libicalss_la_LDFLAGS = -version-info 48:0:48 if OS_WIN32 libicalss_la_LDFLAGS += -no-undefined endif libicalss_la_LIBADD = $(BDB_LIBFILES) $(top_builddir)/src/libical/libical.la if DEV libicalss_la_DEVSOURCES = icalsslexer.l icalssyacc.y else libicalss_la_DEVSOURCES = icalsslexer.c icalssyacc.c endif libicalss_la_SOURCES = \ icalcalendar.c \ icalcalendar.h \ icalclassify.c \ icalclassify.h \ icalcluster.c \ icalcluster.h \ icalclusterimpl.h \ icalgauge.c \ icalgauge.h \ icalgaugeimpl.h \ icaldirset.c \ icaldirset.h \ icaldirsetimpl.h \ icalfileset.c \ icalfileset.h \ icalfilesetimpl.h \ icalset.c \ icalset.h \ icalssyacc.h \ icalspanlist.c \ icalspanlist.h \ icalmessage.c \ icalmessage.h \ $(BDB_SOURCEFILES) \ $(libicalss_la_DEVSOURCES) libicalssincludedir = $(includedir)/libical COMBINEDHEADERS = \ $(srcdir)/icalgauge.h \ $(srcdir)/icalset.h \ $(srcdir)/icalcluster.h \ $(srcdir)/icalfileset.h \ $(srcdir)/icaldirset.h \ $(BDB_HEADERFILES) \ $(srcdir)/icalcalendar.h \ $(srcdir)/icalclassify.h \ $(srcdir)/icalspanlist.h \ $(srcdir)/icalmessage.h if WITH_CXX_BINDINGS libicalss_cxx_la_SOURCES = \ $(libicalss_evolution_la_SOURCES) \ icalspanlist_cxx.h \ icalspanlist_cxx.cpp endif icalss.h: $(COMBINEDHEADERS) echo '#ifndef LIBICAL_ICALSS_H' > icalss.h echo '#define LIBICAL_ICALSS_H' >> icalss.h echo '#ifdef __cplusplus' >> icalss.h echo 'extern "C" {' >> icalss.h echo '#endif' >> icalss.h echo '/*' >> icalss.h echo ' $$''Id''$$' >> icalss.h echo '*/' >> icalss.h cat $(COMBINEDHEADERS) \ | egrep -v "#include.*\"ical" \ | egrep -v "#include.*\"pvl\.h\"" \ | egrep -v '\$$(Id|Locker): .+\$$'>> icalss.h echo '#ifdef __cplusplus' >> icalss.h echo '}' >> icalss.h echo '#endif' >> icalss.h echo '#endif' >> icalss.h libicalssinclude_HEADERS = icalss.h icalcalendar.h icalclassify.h icalcluster.h icaldirset.h icaldirsetimpl.h icalfileset.h icalfilesetimpl.h icalgauge.h icalgaugeimpl.h icalmessage.h icalset.h icalspanlist.h icalssyacc.h $(libicalssinclude_BDBHEADERS) CONFIG_CLEAN_FILES = y.output libical-1.0/src/libicalss/icaldirsetimpl.h0000664000076400007640000000270012132563133017643 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icaldirsetimpl.h CREATOR: eric 21 Aug 2000 $Id: icaldirsetimpl.h,v 1.6 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* This definition is in its own file so it can be kept out of the main header file, but used by "friend classes" like icalset*/ struct icaldirset_impl { icalset super; /**< parent class */ char* dir; /**< directory containing ics files */ icaldirset_options options; /**< copy of options passed to icalset_new() */ icalcluster* cluster; /**< cluster containing data */ icalgauge* gauge; /**< gauge for filtering out data */ int first_component; /**< ??? */ pvl_list directory; /**< ??? */ pvl_elem directory_iterator; /**< ??? */ }; libical-1.0/src/libicalss/Makefile.in0000664000076400007640000007157712141277614016562 0ustar allenallen# Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #====================================================================== # FILE: Makefile.am # CREATOR: eric # # $Id: Makefile.am,v 1.24 2008-02-03 15:27:34 dothebart Exp $ # # # (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ # # # #====================================================================== VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @OS_WIN32_TRUE@am__append_1 = -no-undefined subdir = src/libicalss DIST_COMMON = $(am__libicalssinclude_HEADERS_DIST) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp $(top_srcdir)/mkinstalldirs \ $(top_srcdir)/ylwrap icalsslexer.c icalssyacc.c icalssyacc.h ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(libicalssincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libicalss_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/libical/libical.la am__libicalss_la_SOURCES_DIST = icalcalendar.c icalcalendar.h \ icalclassify.c icalclassify.h icalcluster.c icalcluster.h \ icalclusterimpl.h icalgauge.c icalgauge.h icalgaugeimpl.h \ icaldirset.c icaldirset.h icaldirsetimpl.h icalfileset.c \ icalfileset.h icalfilesetimpl.h icalset.c icalset.h \ icalssyacc.h icalspanlist.c icalspanlist.h icalmessage.c \ icalmessage.h icalbdbset.c icalbdbset.h icalbdbsetimpl.h \ icalsslexer.c icalssyacc.c icalsslexer.l icalssyacc.y @WITH_BDB4_TRUE@am__objects_1 = icalbdbset.lo @DEV_FALSE@am__objects_2 = icalsslexer.lo icalssyacc.lo @DEV_TRUE@am__objects_2 = icalsslexer.lo icalssyacc.lo am_libicalss_la_OBJECTS = icalcalendar.lo icalclassify.lo \ icalcluster.lo icalgauge.lo icaldirset.lo icalfileset.lo \ icalset.lo icalspanlist.lo icalmessage.lo $(am__objects_1) \ $(am__objects_2) libicalss_la_OBJECTS = $(am_libicalss_la_OBJECTS) libicalss_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libicalss_la_LDFLAGS) $(LDFLAGS) -o $@ libicalss_cxx_la_LIBADD = am__libicalss_cxx_la_SOURCES_DIST = icalspanlist_cxx.h \ icalspanlist_cxx.cpp @WITH_CXX_BINDINGS_TRUE@am_libicalss_cxx_la_OBJECTS = \ @WITH_CXX_BINDINGS_TRUE@ icalspanlist_cxx.lo libicalss_cxx_la_OBJECTS = $(am_libicalss_cxx_la_OBJECTS) @WITH_CXX_BINDINGS_TRUE@am_libicalss_cxx_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ @MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ || LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) LTLEXCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) YLWRAP = $(top_srcdir)/ylwrap @MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ || am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) SOURCES = $(libicalss_la_SOURCES) $(libicalss_cxx_la_SOURCES) DIST_SOURCES = $(am__libicalss_la_SOURCES_DIST) \ $(am__libicalss_cxx_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__libicalssinclude_HEADERS_DIST = icalss.h icalcalendar.h \ icalclassify.h icalcluster.h icaldirset.h icaldirsetimpl.h \ icalfileset.h icalfilesetimpl.h icalgauge.h icalgaugeimpl.h \ icalmessage.h icalset.h icalspanlist.h icalssyacc.h \ icalbdbset.h icalbdbsetimpl.h HEADERS = $(libicalssinclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = lex.ss LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_YFLAGS = -d -v -p ss -l AM_LFLAGS = -Pss -L -R BUILT_SOURCES = icalss.h @WITH_BDB4_FALSE@BDB_INCLUDE = @WITH_BDB4_TRUE@BDB_INCLUDE = -I@BDB_DIR_INCLUDE@ -DWITH_BDB4 @WITH_BDB4_FALSE@BDB_SOURCEFILES = @WITH_BDB4_TRUE@BDB_SOURCEFILES = icalbdbset.c icalbdbset.h icalbdbsetimpl.h @WITH_BDB4_FALSE@BDB_HEADERFILES = @WITH_BDB4_TRUE@BDB_HEADERFILES = $(srcdir)/icalbdbset.h @WITH_BDB4_TRUE@libicalssinclude_BDBHEADERS = icalbdbset.h icalbdbsetimpl.h @WITH_BDB4_TRUE@BDB_LIBFILES = @BDB_DIR_LIB@/@BDB_LIB@ @WITH_CXX_BINDINGS_FALSE@cxx_lib = @WITH_CXX_BINDINGS_TRUE@cxx_lib = libicalss_cxx.la @WITH_CXX_BINDINGS_FALSE@cxx_headers = @WITH_CXX_BINDINGS_TRUE@cxx_headers = icalspanlist_cxx.h lib_LTLIBRARIES = libicalss.la $(cxx_lib) INCLUDES = \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ $(BDB_INCLUDE) libicalss_la_LDFLAGS = -version-info 48:0:48 $(am__append_1) libicalss_la_LIBADD = $(BDB_LIBFILES) $(top_builddir)/src/libical/libical.la @DEV_FALSE@libicalss_la_DEVSOURCES = icalsslexer.c icalssyacc.c @DEV_TRUE@libicalss_la_DEVSOURCES = icalsslexer.l icalssyacc.y libicalss_la_SOURCES = \ icalcalendar.c \ icalcalendar.h \ icalclassify.c \ icalclassify.h \ icalcluster.c \ icalcluster.h \ icalclusterimpl.h \ icalgauge.c \ icalgauge.h \ icalgaugeimpl.h \ icaldirset.c \ icaldirset.h \ icaldirsetimpl.h \ icalfileset.c \ icalfileset.h \ icalfilesetimpl.h \ icalset.c \ icalset.h \ icalssyacc.h \ icalspanlist.c \ icalspanlist.h \ icalmessage.c \ icalmessage.h \ $(BDB_SOURCEFILES) \ $(libicalss_la_DEVSOURCES) libicalssincludedir = $(includedir)/libical COMBINEDHEADERS = \ $(srcdir)/icalgauge.h \ $(srcdir)/icalset.h \ $(srcdir)/icalcluster.h \ $(srcdir)/icalfileset.h \ $(srcdir)/icaldirset.h \ $(BDB_HEADERFILES) \ $(srcdir)/icalcalendar.h \ $(srcdir)/icalclassify.h \ $(srcdir)/icalspanlist.h \ $(srcdir)/icalmessage.h @WITH_CXX_BINDINGS_TRUE@libicalss_cxx_la_SOURCES = \ @WITH_CXX_BINDINGS_TRUE@ $(libicalss_evolution_la_SOURCES) \ @WITH_CXX_BINDINGS_TRUE@ icalspanlist_cxx.h \ @WITH_CXX_BINDINGS_TRUE@ icalspanlist_cxx.cpp libicalssinclude_HEADERS = icalss.h icalcalendar.h icalclassify.h icalcluster.h icaldirset.h icaldirsetimpl.h icalfileset.h icalfilesetimpl.h icalgauge.h icalgaugeimpl.h icalmessage.h icalset.h icalspanlist.h icalssyacc.h $(libicalssinclude_BDBHEADERS) CONFIG_CLEAN_FILES = y.output all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .cpp .l .lo .o .obj .y $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libicalss/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libicalss/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } icalssyacc.h: icalssyacc.c @if test ! -f $@; then rm -f icalssyacc.c; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) icalssyacc.c; else :; fi libicalss.la: $(libicalss_la_OBJECTS) $(libicalss_la_DEPENDENCIES) $(EXTRA_libicalss_la_DEPENDENCIES) $(libicalss_la_LINK) -rpath $(libdir) $(libicalss_la_OBJECTS) $(libicalss_la_LIBADD) $(LIBS) libicalss_cxx.la: $(libicalss_cxx_la_OBJECTS) $(libicalss_cxx_la_DEPENDENCIES) $(EXTRA_libicalss_cxx_la_DEPENDENCIES) $(CXXLINK) $(am_libicalss_cxx_la_rpath) $(libicalss_cxx_la_OBJECTS) $(libicalss_cxx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalbdbset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalcalendar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalclassify.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalcluster.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icaldirset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalfileset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalgauge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalmessage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalset.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalspanlist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalspanlist_cxx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalsslexer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalssyacc.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< .l.c: $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libicalssincludeHEADERS: $(libicalssinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libicalssinclude_HEADERS)'; test -n "$(libicalssincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libicalssincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libicalssincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libicalssincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libicalssincludedir)" || exit $$?; \ done uninstall-libicalssincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libicalssinclude_HEADERS)'; test -n "$(libicalssincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libicalssincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libicalssincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f icalsslexer.c -rm -f icalssyacc.c -rm -f icalssyacc.h -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libicalssincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES \ uninstall-libicalssincludeHEADERS .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-libicalssincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-libLTLIBRARIES \ uninstall-libicalssincludeHEADERS # just to get it built $(srcdir)/icalgauge.c: icalssyacc.h $(srcdir)/icalsslexer.c: icalssyacc.h icalss.h: $(COMBINEDHEADERS) echo '#ifndef LIBICAL_ICALSS_H' > icalss.h echo '#define LIBICAL_ICALSS_H' >> icalss.h echo '#ifdef __cplusplus' >> icalss.h echo 'extern "C" {' >> icalss.h echo '#endif' >> icalss.h echo '/*' >> icalss.h echo ' $$''Id''$$' >> icalss.h echo '*/' >> icalss.h cat $(COMBINEDHEADERS) \ | egrep -v "#include.*\"ical" \ | egrep -v "#include.*\"pvl\.h\"" \ | egrep -v '\$$(Id|Locker): .+\$$'>> icalss.h echo '#ifdef __cplusplus' >> icalss.h echo '}' >> icalss.h echo '#endif' >> icalss.h echo '#endif' >> icalss.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/src/libicalss/icalsslexer.l0000664000076400007640000000516612132563133017171 0ustar allenallen%{ /* -*- Mode: C -*- ====================================================================== FILE: icalsslexer.l CREATOR: eric 8 Aug 2000 DESCRIPTION: $Id: icalsslexer.l,v 1.10 2008-01-02 20:07:42 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #include "icalssyacc.h" #include "icalgaugeimpl.h" #include "assert.h" #include /* For strdup() */ const char* input_buffer; const char* input_buffer_p; int icalss_input(char* buf, int max_size) { int n; int l; l = strlen(input_buffer_p); if (max_size 0){ memcpy(buf, input_buffer_p, n); input_buffer_p += n; return n; } else { return 0; } } #undef YY_INPUT #define YY_INPUT(b,r,ms) ( r= icalss_input(b,ms)) #undef SS_FATAL_ERROR #define SS_FATAL_ERROR(msg) sserror(msg) %} crlf \x0D?\x0A space [ ] qsafechar [^\x00-\x1F\"] safechar [^\x00-\x1F\"\:\;\,] tsafechar [\x20-\x21\x23-\x2B\x2D-\x39\x3C-\x5B\x5D-\x7E] valuechar [^\x00-\x08\x10-\x1F] xname X-[a-zA-Z0-9\-]+ xname2 [a-zA-Z0-9\-\ ] paramtext {safechar}+ value {valuechar}+ quotedstring \"{qsafechar}+\" digit [0-9] %array /* Make yytext an array. Slow, but handy. HACK */ %option caseless %s sql string_value %% %{ %} SELECT { return SELECT; } FROM { return FROM; } WHERE { return WHERE; } , { return COMMA; } "=" { return EQUALS; } "==" { return EQUALS; } "!=" { return NOTEQUALS; } "<" { return LESS; } ">" { return GREATER; } "<=" { return LESSEQUALS; } ">=" { return GREATEREQUALS; } AND { return AND; } OR { return OR; } IS { return IS; } NOT { return NOT; } NULL { return SQLNULL; } \' { return QUOTE; } [ \t\n\r]+ ; ; { return EOL; } \'[\@\*A-Za-z0-9\-\.\:\ ]+\' { int c = input(); if(c != EOF){ unput(c); } if(c!='\''){ sslval.v_string= icalmemory_tmp_copy(yytext); return STRING; } else { /*ssmore();*/ } } [\@\*A-Za-z0-9\-\.]+ { sslval.v_string= icalmemory_tmp_copy(yytext); return STRING; } . { return yytext[0]; } %% int yywrap() { return 1; } libical-1.0/src/libicalss/icalcalendar.c0000664000076400007640000001273412132563133017243 0ustar allenallen/*====================================================================== FILE: icalcalendar.c CREATOR: eric 23 December 1999 $Id: icalcalendar.c,v 1.8 2008-01-02 20:07:39 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalcalendar.h" #include "icalset.h" #include "icalfileset.h" #include "icaldirset.h" #include #include /* For mkdir, stat */ #include /* For mkdir */ #include /* For mkdir */ #ifndef WIN32 #include /* For mkdir, stat */ #endif #ifndef PATH_MAX #define PATH_MAX 512 #endif #include /* for malloc */ #include /* for strcat */ #include #ifdef WIN32 #include #define mkdir(path, mode) _mkdir(path) #endif #define BOOKED_DIR "booked" #define INCOMING_FILE "incoming.ics" #define PROP_FILE "properties.ics" #define FBLIST_FILE "freebusy.ics" struct icalcalendar_impl { char* dir; icalset* freebusy; icalset* properties; icalset* booked; icalset* incoming; }; struct icalcalendar_impl* icalcalendar_new_impl(void) { struct icalcalendar_impl* impl; if ( ( impl = (struct icalcalendar_impl*) malloc(sizeof(struct icalcalendar_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } return impl; } icalerrorenum icalcalendar_create(struct icalcalendar_impl* impl) { char path[PATH_MAX]; struct stat sbuf; int r; icalerror_check_arg_re((impl != 0),"impl",ICAL_BADARG_ERROR); path[0] = '\0'; strncpy(path,impl->dir,PATH_MAX-1); strncat(path,"/",PATH_MAX-strlen(path)-1); strncat(path,BOOKED_DIR,PATH_MAX-strlen(path)-1); path[PATH_MAX-1] = '\0'; r = stat(path,&sbuf); if( r != 0 && errno == ENOENT){ if(mkdir(path,0777)!=0){ icalerror_set_errno(ICAL_FILE_ERROR); return ICAL_FILE_ERROR; } } return ICAL_NO_ERROR; } icalcalendar* icalcalendar_new(char* dir) { struct icalcalendar_impl* impl; icalerror_check_arg_rz((dir != 0),"dir"); impl = icalcalendar_new_impl(); if (impl == 0){ return 0; } impl->dir = (char*)strdup(dir); impl->freebusy = 0; impl->properties = 0; impl->booked = 0; impl->incoming = 0; if (icalcalendar_create(impl) != ICAL_NO_ERROR){ free(impl); return 0; } return impl; } void icalcalendar_free(icalcalendar* impl) { if (impl->dir !=0){ free(impl->dir); } if (impl->freebusy !=0){ icalset_free(impl->freebusy); } if (impl->properties !=0){ icalset_free(impl->properties); } if (impl->booked !=0){ icalset_free(impl->booked); } if (impl->incoming !=0){ icalset_free(impl->incoming); } impl->dir = 0; impl->freebusy = 0; impl->properties = 0; impl->booked = 0; impl->incoming = 0; free(impl); } int icalcalendar_lock(icalcalendar* impl) { icalerror_check_arg_rz((impl != 0),"impl"); return 0; } int icalcalendar_unlock(icalcalendar* impl) { icalerror_check_arg_rz((impl != 0),"impl"); return 0; } int icalcalendar_islocked(icalcalendar* impl) { icalerror_check_arg_rz((impl != 0),"impl"); return 0; } int icalcalendar_ownlock(icalcalendar* impl) { icalerror_check_arg_rz((impl != 0),"impl"); return 0; } icalset* icalcalendar_get_booked(icalcalendar* impl) { char dir[PATH_MAX]; icalerror_check_arg_rz((impl != 0),"impl"); dir[0] = '\0'; strncpy(dir,impl->dir,PATH_MAX-1); strncat(dir,"/",PATH_MAX-strlen(dir)-1); strncat(dir,BOOKED_DIR,PATH_MAX-strlen(dir)-1); dir[PATH_MAX-1] = '\0'; if (impl->booked == 0){ icalerror_clear_errno(); impl->booked = icaldirset_new(dir); assert(icalerrno == ICAL_NO_ERROR); } return impl->booked; } icalset* icalcalendar_get_incoming(icalcalendar* impl) { char path[PATH_MAX]; icalerror_check_arg_rz((impl != 0),"impl"); path[0] = '\0'; strncpy(path,impl->dir,PATH_MAX-1); strncat(path,"/",PATH_MAX-strlen(path)-1); strncat(path,INCOMING_FILE,PATH_MAX-strlen(path)-1); path[PATH_MAX-1] = '\0'; if (impl->properties == 0){ impl->properties = icalfileset_new(path); } return impl->properties; } icalset* icalcalendar_get_properties(icalcalendar* impl) { char path[PATH_MAX]; icalerror_check_arg_rz((impl != 0),"impl"); path[0] = '\0'; strncpy(path,impl->dir,PATH_MAX-1); strncat(path,"/",PATH_MAX-strlen(path)-1); strncat(path,PROP_FILE,PATH_MAX-strlen(path)-1); path[PATH_MAX-1] = '\0'; if (impl->properties == 0){ impl->properties = icalfileset_new(path); } return impl->properties; } icalset* icalcalendar_get_freebusy(icalcalendar* impl) { char path[PATH_MAX]; icalerror_check_arg_rz((impl != 0),"impl"); path[0] = '\0'; strncpy(path,impl->dir,PATH_MAX-1); strncat(path,"/",PATH_MAX-strlen(path)-1); strncat(path,FBLIST_FILE,PATH_MAX-strlen(path)-1); path[PATH_MAX-1] = '\0'; if (impl->freebusy == 0){ impl->freebusy = icalfileset_new(path); } return impl->freebusy; } libical-1.0/src/libicalss/icalgaugeimpl.h0000664000076400007640000000353112132563133017444 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalgaugeimpl.h CREATOR: eric 09 Aug 2000 $Id: icalgaugeimpl.h,v 1.8 2008-01-02 20:07:41 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #include typedef enum icalgaugecompare { ICALGAUGECOMPARE_EQUAL=ICAL_XLICCOMPARETYPE_EQUAL, ICALGAUGECOMPARE_LESS=ICAL_XLICCOMPARETYPE_LESS, ICALGAUGECOMPARE_LESSEQUAL=ICAL_XLICCOMPARETYPE_LESSEQUAL, ICALGAUGECOMPARE_GREATER=ICAL_XLICCOMPARETYPE_GREATER, ICALGAUGECOMPARE_GREATEREQUAL=ICAL_XLICCOMPARETYPE_GREATEREQUAL, ICALGAUGECOMPARE_NOTEQUAL=ICAL_XLICCOMPARETYPE_NOTEQUAL, ICALGAUGECOMPARE_REGEX=ICAL_XLICCOMPARETYPE_REGEX, ICALGAUGECOMPARE_ISNULL=ICAL_XLICCOMPARETYPE_ISNULL, ICALGAUGECOMPARE_ISNOTNULL=ICAL_XLICCOMPARETYPE_ISNOTNULL, ICALGAUGECOMPARE_NONE=0 } icalgaugecompare; typedef enum icalgaugelogic { ICALGAUGELOGIC_NONE, ICALGAUGELOGIC_AND, ICALGAUGELOGIC_OR } icalgaugelogic; struct icalgauge_where { icalgaugelogic logic; icalcomponent_kind comp; icalproperty_kind prop; icalgaugecompare compare; char* value; }; struct icalgauge_impl { pvl_list select; /**< Of icalgaugecompare, using only prop and comp fields*/ pvl_list from; /**< List of component_kinds, as integers */ pvl_list where; /**< List of icalgaugecompare */ int expand; }; libical-1.0/src/libicalss/icalspanlist.h0000664000076400007640000000432312132563133017327 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalspanlist.h CREATOR: eric 21 Aug 2000 $Id: icalspanlist.h,v 1.8 2008-01-02 20:07:42 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ =========================================================================*/ #ifndef ICALSPANLIST_H #define ICALSPANLIST_H #include #include "icalset.h" /** @file icalspanlist.h * @brief Code that supports collections of free/busy spans of time */ typedef struct icalspanlist_impl icalspanlist; /** @brief Constructor * Make a free list from a set of component. Start and end should be in UTC */ icalspanlist* icalspanlist_new(icalset *set, struct icaltimetype start, struct icaltimetype end); /** @brief Destructor */ void icalspanlist_free(icalspanlist* spl); /* Unimplemented functions */ icalcomponent* icalspanlist_make_free_list(icalspanlist* sl); icalcomponent* icalspanlist_make_busy_list(icalspanlist* sl); /** Get first next free time after time t. all times are in UTC. */ struct icalperiodtype icalspanlist_next_free_time(icalspanlist* sl, struct icaltimetype t); /** Get first next busy time after time t. all times are in UTC. */ struct icalperiodtype icalspanlist_next_busy_time(icalspanlist* sl, struct icaltimetype t); void icalspanlist_dump(icalspanlist* s); /** @brief Return a valid VFREEBUSY component for this span */ icalcomponent *icalspanlist_as_vfreebusy(icalspanlist* s_in, const char* organizer, const char* attendee); /** @brief Return an integer matrix of total events per delta_t timespan */ int *icalspanlist_as_freebusy_matrix(icalspanlist* span, int delta_t); /** @brief Construct an icalspanlist from a VFREEBUSY component */ icalspanlist *icalspanlist_from_vfreebusy(icalcomponent* c); #endif libical-1.0/src/libicalss/icalclassify.h0000664000076400007640000000221612132563133017306 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalclassify.h CREATOR: eric 21 Aug 2000 $Id: icalclassify.h,v 1.7 2008-01-15 23:17:43 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ =========================================================================*/ #ifndef ICALCLASSIFY_H #define ICALCLASSIFY_H #include #include "icalset.h" #include "icalcomponent.h" icalproperty_xlicclass icalclassify(icalcomponent* c,icalcomponent* match, const char* user); icalcomponent* icalclassify_find_overlaps(icalset* set, icalcomponent* comp); char* icalclassify_class_to_string(icalproperty_xlicclass c); #endif /* ICALCLASSIFY_H*/ libical-1.0/src/libicalss/icalclassify.c0000664000076400007640000004514312132563133017307 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalclassify.c CREATOR: ebusboom 23 aug 2000 $Id: icalclassify.c,v 1.19 2008-01-15 23:17:43 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "icalclassify.h" #include #include "icalerror.h" #include /* For tolower() */ #include /* for index() */ #include /* for malloc and free */ struct icalclassify_parts { icalcomponent *c; icalcomponent_kind inner_kind; icalproperty_method method; char* organizer; icalparameter_partstat reply_partstat; char* reply_attendee; char* uid; int sequence; struct icaltimetype dtstamp; struct icaltimetype recurrence_id; }; char* icalclassify_lowercase(const char* str) { char* p = 0; char *xnew; if(str ==0){ return 0; } xnew = icalmemory_strdup(str); for(p = xnew; *p!=0; p++){ *p = tolower(*p); } return xnew; } /* Return a set of components that intersect in time with comp. For component X and Y to intersect: X.DTSTART < Y.DTEND && X.DTEND > Y.DTSTART */ icalcomponent* icalclassify_find_overlaps(icalset* set, icalcomponent* comp) { icalcomponent *return_set; icalcomponent *c; struct icaltime_span span,compspan; icalerror_clear_errno(); compspan = icalcomponent_get_span(comp); if(icalerrno != ICAL_NO_ERROR){ return 0; } return_set = icalcomponent_new(ICAL_XROOT_COMPONENT); for(c = icalset_get_first_component(set); c != 0; c = icalset_get_next_component(set)){ icalerror_clear_errno(); span = icalcomponent_get_span(c); if(icalerrno != ICAL_NO_ERROR){ continue; } if (compspan.start < span.end && compspan.end > span.start){ icalcomponent *clone = icalcomponent_new_clone(c); icalcomponent_add_component(return_set,clone); } } if(icalcomponent_count_components(return_set,ICAL_ANY_COMPONENT) !=0){ return return_set; } else { icalcomponent_free(return_set); return 0; } } icalproperty* icalclassify_find_attendee(icalcomponent *c, const char* attendee) { icalproperty *p; icalcomponent* inner; char* lattendee; char* upn; if(attendee == 0){ return 0; } lattendee = icalclassify_lowercase(attendee); upn = strchr(lattendee,':'); if (upn== 0){ upn = lattendee; } else { upn++; /* skip the ";"*/ } inner = icalcomponent_get_first_real_component(c); for(p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(inner,ICAL_ATTENDEE_PROPERTY)) { char* this_upn; char* this_attendee = icalclassify_lowercase(icalproperty_get_attendee(p)); if ( !this_attendee ) continue; this_upn = strchr(this_attendee,':'); if(this_upn == 0){ free(this_attendee); continue; } else { this_upn++; } if(strcmp(this_upn,upn)==0){ free(lattendee); free(this_attendee); return p; } free(this_attendee); } free(lattendee); return 0; } void icalssutil_free_parts(struct icalclassify_parts *parts) { if(parts == 0){ return; } if(parts->organizer != 0){ free(parts->organizer); } if(parts->uid != 0){ free(parts->uid); } if(parts->reply_attendee){ free(parts->reply_attendee); } } void icalssutil_get_parts(icalcomponent* c, struct icalclassify_parts* parts) { icalproperty *p; icalcomponent *inner; memset(parts,0,sizeof(struct icalclassify_parts)); parts->method = ICAL_METHOD_NONE; parts->sequence = 0; parts->reply_partstat = ICAL_PARTSTAT_NONE; if(c == 0){ return; } parts->c = c; p = icalcomponent_get_first_property(c,ICAL_METHOD_PROPERTY); if(p!=0){ parts->method = icalproperty_get_method(p); } inner = icalcomponent_get_first_real_component(c); parts->inner_kind = icalcomponent_isa(inner); p = icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY); if(p!=0){ const char *p_organizer = icalproperty_get_organizer(p); if (p_organizer!=0) { parts->organizer = strdup(p_organizer); } } p = icalcomponent_get_first_property(inner,ICAL_SEQUENCE_PROPERTY); if(p!=0){ parts->sequence = icalproperty_get_sequence(p); } p = icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY); if(p!=0){ const char *p_uid = icalproperty_get_uid(p); if (p_uid!=0) { parts->uid = strdup(p_uid); } } p = icalcomponent_get_first_property(inner,ICAL_RECURRENCEID_PROPERTY); if(p!=0){ parts->recurrence_id = icalproperty_get_recurrenceid(p); } p = icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY); if(p!=0){ parts->dtstamp = icalproperty_get_dtstamp(p); } if(parts->method==ICAL_METHOD_REPLY){ icalparameter *param; p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY); if(p!=0){ const char *attendee = 0; param = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER); if(param != 0){ parts->reply_partstat = icalparameter_get_partstat(param); } attendee = icalproperty_get_attendee(p); if ( attendee ) parts->reply_attendee = strdup( attendee ); } } } int icalssutil_is_rescheduled(icalcomponent* a,icalcomponent* b) { icalproperty *p1,*p2; icalcomponent *i1,*i2; char *temp1, *temp2; int i; icalproperty_kind kind_array[] = { ICAL_DTSTART_PROPERTY, ICAL_DTEND_PROPERTY, ICAL_DURATION_PROPERTY, ICAL_DUE_PROPERTY, ICAL_RRULE_PROPERTY, ICAL_RDATE_PROPERTY, ICAL_EXRULE_PROPERTY, ICAL_EXDATE_PROPERTY, ICAL_NO_PROPERTY }; i1 = icalcomponent_get_first_real_component(a); i2 = icalcomponent_get_first_real_component(b); for(i =0; kind_array[i] != ICAL_NO_PROPERTY; i++){ int cmp; p1 = icalcomponent_get_first_property(i1,kind_array[i]); p2 = icalcomponent_get_first_property(i2,kind_array[i]); if( (p1!=0)^(p2!=0) ){ /* Return true if the property exists in one component and not the other */ return 1; } else if (!p1 && !p2) continue; temp1 = icalproperty_as_ical_string_r(p1); temp2 = icalproperty_as_ical_string_r(p2); cmp = strcmp(temp1, temp2); free(temp1); free(temp2); if (p1 && cmp != 0) { return 1; } } return 0; } #define icalclassify_pre \ int rtrn =0; #define icalclassify_post \ return rtrn; int icalclassify_publish_new(struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre; (void)user; if(comp->method == ICAL_METHOD_PUBLISH && match == 0 && comp->inner_kind != ICAL_VFREEBUSY_COMPONENT){ rtrn = 1; } icalclassify_post; } int icalclassify_publish_update(struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre; (void)user; if(comp->method == ICAL_METHOD_PUBLISH && match !=0 && comp->inner_kind != ICAL_VFREEBUSY_COMPONENT){ rtrn = 1; } icalclassify_post; } int icalclassify_publish_freebusy(struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre; (void)match; (void)user; if(comp->method == ICAL_METHOD_PUBLISH && comp->inner_kind == ICAL_VFREEBUSY_COMPONENT){ rtrn = 1; } icalclassify_post; } int icalclassify_request_new(struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { /* Method is REQUEST, and there is no match */ icalclassify_pre (void)user; if(match->c==0 && comp->method == ICAL_METHOD_REQUEST){ rtrn = 1; } icalclassify_post } int icalclassify_request_update( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { /* REQUEST method, Higher SEQUENCE than match, and all time-related properties are unchanged */ icalclassify_pre (void)user; if (match != 0 && comp->sequence >= match->sequence && !icalssutil_is_rescheduled(comp->c,match->c)){ rtrn = 1; } icalclassify_post } int icalclassify_request_reschedule( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { /* REQUEST method, Higher SEQUENCE than match, and one or more time-related properties are changed */ icalclassify_pre (void)user; if (match->c != 0 && comp->sequence > match->sequence && icalssutil_is_rescheduled(comp->c,match->c)){ rtrn = 1; } icalclassify_post } int icalclassify_request_delegate( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalproperty* attendee; icalparameter* param; icalclassify_pre; (void)match; attendee = icalclassify_find_attendee(comp->c,user); if(attendee == 0){ return 0; } param = icalproperty_get_first_parameter(attendee,ICAL_DELEGATEDFROM_PARAMETER); if (param != 0){ rtrn = 1; } icalclassify_post } int icalclassify_request_new_organizer( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { /* Organizer has changed between match and component */ icalclassify_pre icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); icalclassify_post /* already done before. (void)comp; (void)match; (void)user; */ } int icalclassify_request_status( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); icalclassify_post /* (void)comp; (void)match; (void)user; */ } int icalclassify_request_forward( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); icalclassify_post /* (void)comp; (void)match; (void)user; */ } int icalclassify_request_freebusy( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); icalclassify_post /* (void)comp; (void)match; (void)user; */ } int icalclassify_reply_accept( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalproperty* attendee; icalclassify_pre; (void)user; attendee = icalclassify_find_attendee(match->c,comp->reply_attendee); if(attendee != 0&& comp->reply_partstat == ICAL_PARTSTAT_ACCEPTED){ rtrn = 1; } icalclassify_post } int icalclassify_reply_decline( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalproperty* attendee; icalclassify_pre; (void)user; attendee = icalclassify_find_attendee(match->c,comp->reply_attendee); if( attendee != 0 && comp->reply_partstat == ICAL_PARTSTAT_DECLINED){ rtrn = 1; } icalclassify_post } int icalclassify_reply_delegate( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalproperty* attendee; icalclassify_pre; (void)user; attendee = icalclassify_find_attendee(match->c,comp->reply_attendee); if( attendee != 0 && comp->reply_partstat == ICAL_PARTSTAT_DELEGATED){ rtrn = 1; } icalclassify_post } int icalclassify_reply_crasher_accept( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalproperty* attendee; icalclassify_pre; (void)user; attendee= icalclassify_find_attendee(match->c,comp->reply_attendee); if(attendee == 0 && comp->reply_partstat == ICAL_PARTSTAT_ACCEPTED){ rtrn = 1; } icalclassify_post } int icalclassify_reply_crasher_decline( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalproperty* attendee; icalclassify_pre; (void)user; attendee = icalclassify_find_attendee(match->c,comp->reply_attendee); if(attendee == 0 && comp->reply_partstat == ICAL_PARTSTAT_DECLINED){ rtrn = 1; } icalclassify_post } int icalclassify_add_instance( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre (void)match; (void)user; if(comp->method == ICAL_METHOD_ADD){ rtrn = 1; } icalclassify_post } int icalclassify_cancel_event( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre (void)match; (void)user; if(comp->method == ICAL_METHOD_CANCEL){ rtrn = 1; } icalclassify_post } int icalclassify_cancel_instance( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre (void)match; (void)user; if(comp->method == ICAL_METHOD_CANCEL){ rtrn = 1; } icalclassify_post } int icalclassify_cancel_all( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre (void)match; (void)user; if(comp->method == ICAL_METHOD_CANCEL){ rtrn = 1; } icalclassify_post } int icalclassify_refesh( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre (void)match; (void)user; if(comp->method == ICAL_METHOD_REFRESH){ rtrn = 1; } icalclassify_post } int icalclassify_counter( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre (void)match; (void)user; if(comp->method == ICAL_METHOD_COUNTER){ rtrn = 1; } icalclassify_post } int icalclassify_delinecounter( struct icalclassify_parts *comp, struct icalclassify_parts *match, const char* user) { icalclassify_pre (void)match; (void)user; if(comp->method == ICAL_METHOD_DECLINECOUNTER){ rtrn = 1; } icalclassify_post } static const struct icalclassify_map { icalproperty_method method; int (*fn)(struct icalclassify_parts *comp,struct icalclassify_parts *match, const char* user); icalproperty_xlicclass class; } icalclassify_map[] = { {ICAL_METHOD_PUBLISH,icalclassify_publish_new,ICAL_XLICCLASS_PUBLISHNEW}, {ICAL_METHOD_PUBLISH,icalclassify_publish_update,ICAL_XLICCLASS_PUBLISHUPDATE}, {ICAL_METHOD_PUBLISH,icalclassify_publish_freebusy,ICAL_XLICCLASS_PUBLISHFREEBUSY}, {ICAL_METHOD_REQUEST,icalclassify_request_delegate,ICAL_XLICCLASS_REQUESTDELEGATE}, {ICAL_METHOD_REQUEST,icalclassify_request_new,ICAL_XLICCLASS_REQUESTNEW}, {ICAL_METHOD_REQUEST,icalclassify_request_update,ICAL_XLICCLASS_REQUESTUPDATE}, {ICAL_METHOD_REQUEST,icalclassify_request_reschedule,ICAL_XLICCLASS_REQUESTRESCHEDULE}, {ICAL_METHOD_REQUEST,icalclassify_request_new_organizer,ICAL_XLICCLASS_REQUESTNEWORGANIZER}, {ICAL_METHOD_REQUEST,icalclassify_request_forward,ICAL_XLICCLASS_REQUESTFORWARD}, {ICAL_METHOD_REQUEST,icalclassify_request_status,ICAL_XLICCLASS_REQUESTSTATUS}, {ICAL_METHOD_REQUEST,icalclassify_request_freebusy,ICAL_XLICCLASS_REQUESTFREEBUSY}, {ICAL_METHOD_REPLY,icalclassify_reply_accept,ICAL_XLICCLASS_REPLYACCEPT}, {ICAL_METHOD_REPLY,icalclassify_reply_decline,ICAL_XLICCLASS_REPLYDECLINE}, {ICAL_METHOD_REPLY,icalclassify_reply_delegate,ICAL_XLICCLASS_REPLYDELEGATE}, {ICAL_METHOD_REPLY,icalclassify_reply_crasher_accept,ICAL_XLICCLASS_REPLYCRASHERACCEPT}, {ICAL_METHOD_REPLY,icalclassify_reply_crasher_decline,ICAL_XLICCLASS_REPLYCRASHERDECLINE}, {ICAL_METHOD_ADD,icalclassify_add_instance,ICAL_XLICCLASS_ADDINSTANCE}, {ICAL_METHOD_CANCEL,icalclassify_cancel_event,ICAL_XLICCLASS_CANCELEVENT}, {ICAL_METHOD_CANCEL,icalclassify_cancel_instance,ICAL_XLICCLASS_CANCELINSTANCE}, {ICAL_METHOD_CANCEL,icalclassify_cancel_all,ICAL_XLICCLASS_CANCELALL}, {ICAL_METHOD_REFRESH,icalclassify_refesh,ICAL_XLICCLASS_REFRESH}, {ICAL_METHOD_COUNTER,icalclassify_counter,ICAL_XLICCLASS_COUNTER}, {ICAL_METHOD_DECLINECOUNTER,icalclassify_delinecounter,ICAL_XLICCLASS_DECLINECOUNTER}, {ICAL_METHOD_NONE,0,ICAL_XLICCLASS_NONE} }; icalproperty_xlicclass icalclassify(icalcomponent* c,icalcomponent* match, const char* user) { icalcomponent *inner; icalproperty *p; icalproperty_method method; icalproperty_xlicclass class = ICAL_XLICCLASS_UNKNOWN; int i; struct icalclassify_parts comp_parts; struct icalclassify_parts match_parts; inner = icalcomponent_get_first_real_component(c); if (inner == 0) { return ICAL_XLICCLASS_NONE; } icalssutil_get_parts(c,&comp_parts); icalssutil_get_parts(match,&match_parts); /* Determine if the incoming component is obsoleted by the match */ if(match != 0 && ( comp_parts.method == ICAL_METHOD_REQUEST )){ assert ( ! ((comp_parts.dtstamp.is_utc==1)^ (match_parts.dtstamp.is_utc==1))); if( comp_parts.sequence0) { /* comp has a smaller sequence and a later DTSTAMP */ class = ICAL_XLICCLASS_MISSEQUENCED; goto CLEANUP; } if( (comp_parts.sequence /* For PATH_MAX */ #include #include "icalgauge.h" #ifdef PATH_MAX #define ICAL_PATH_MAX PATH_MAX #else #define ICAL_PATH_MAX 1024 #endif typedef struct icalset_impl icalset; typedef enum icalset_kind { ICAL_FILE_SET, ICAL_DIR_SET, ICAL_BDB_SET } icalset_kind; typedef struct icalsetiter { icalcompiter iter; /* icalcomponent_kind, pvl_elem iter */ icalgauge* gauge; icalrecur_iterator* ritr; /*the last iterator*/ icalcomponent* last_component; /*the pending recurring component to be processed */ const char* tzid; /* the calendar's timezone id */ } icalsetiter; struct icalset_impl { icalset_kind kind; int size; char *dsn; icalset* (*init)(icalset* set, const char *dsn, void *options); void (*free)(icalset* set); const char* (*path)(icalset* set); void (*mark)(icalset* set); icalerrorenum (*commit)(icalset* set); icalerrorenum (*add_component)(icalset* set, icalcomponent* comp); icalerrorenum (*remove_component)(icalset* set, icalcomponent* comp); int (*count_components)(icalset* set, icalcomponent_kind kind); icalerrorenum (*select)(icalset* set, icalgauge* gauge); void (*clear)(icalset* set); icalcomponent* (*fetch)(icalset* set, const char* uid); icalcomponent* (*fetch_match)(icalset* set, icalcomponent *comp); int (*has_uid)(icalset* set, const char* uid); icalerrorenum (*modify)(icalset* set, icalcomponent *old, icalcomponent *newc); icalcomponent* (*get_current_component)(icalset* set); icalcomponent* (*get_first_component)(icalset* set); icalcomponent* (*get_next_component)(icalset* set); icalsetiter (*icalset_begin_component)(icalset* set, icalcomponent_kind kind, icalgauge* gauge); icalcomponent* (*icalsetiter_to_next)(icalset* set, icalsetiter* i); icalcomponent* (*icalsetiter_to_prior)(icalset* set, icalsetiter* i); }; /** @brief Register a new derived class */ int icalset_register_class(icalset *set); /** @brief Generic icalset constructor * * @param kind The type of icalset to create * @param dsn Data Source Name - usually a pathname or DB handle * @param options Any implementation specific options * * @return A valid icalset reference or NULL if error. * * This creates any of the icalset types available. */ icalset* icalset_new(icalset_kind kind, const char* dsn, void* options); icalset* icalset_new_file(const char* path); icalset* icalset_new_file_reader(const char* path); icalset* icalset_new_file_writer(const char* path); icalset* icalset_new_dir(const char* path); icalset* icalset_new_file_reader(const char* path); icalset* icalset_new_file_writer(const char* path); void icalset_free(icalset* set); const char* icalset_path(icalset* set); /** Mark the cluster as changed, so it will be written to disk when it is freed. **/ void icalset_mark(icalset* set); /** Write changes to disk immediately */ icalerrorenum icalset_commit(icalset* set); icalerrorenum icalset_add_component(icalset* set, icalcomponent* comp); icalerrorenum icalset_remove_component(icalset* set, icalcomponent* comp); int icalset_count_components(icalset* set, icalcomponent_kind kind); /** Restrict the component returned by icalset_first, _next to those that pass the gauge. */ icalerrorenum icalset_select(icalset* set, icalgauge* gauge); /** Clears the gauge defined by icalset_select() */ void icalset_clear_select(icalset* set); /** Get a component by uid */ icalcomponent* icalset_fetch(icalset* set, const char* uid); int icalset_has_uid(icalset* set, const char* uid); icalcomponent* icalset_fetch_match(icalset* set, icalcomponent *c); /** Modify components according to the MODIFY method of CAP. Works on the currently selected components. */ icalerrorenum icalset_modify(icalset* set, icalcomponent *oldc, icalcomponent *newc); /** Iterate through the components. If a guage has been defined, these will skip over components that do not pass the gauge */ icalcomponent* icalset_get_current_component(icalset* set); icalcomponent* icalset_get_first_component(icalset* set); icalcomponent* icalset_get_next_component(icalset* set); /** External Iterator with gauge - for thread safety */ extern icalsetiter icalsetiter_null; icalsetiter icalset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge); /** Default _next, _prior, _deref for subclasses that use single cluster */ icalcomponent* icalsetiter_next(icalsetiter* i); icalcomponent* icalsetiter_prior(icalsetiter* i); icalcomponent* icalsetiter_deref(icalsetiter* i); /** for subclasses that use multiple clusters that require specialized cluster traversal */ icalcomponent* icalsetiter_to_next(icalset* set, icalsetiter* i); icalcomponent* icalsetiter_to_prior(icalset* set, icalsetiter* i); #endif /* !ICALSET_H */ libical-1.0/src/libicalss/icalcstpclient.h0000664000076400007640000000625212132563133017645 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalcstpclient.h CREATOR: eric 4 Feb 01 $Id: icalcstpclient.h,v 1.3 2008-01-02 20:15:44 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalcstp.h ======================================================================*/ #ifndef ICALCSTPC_H #define ICALCSTPC_H #include #include /********************** Client (Sender) Interfaces **************************/ /* How to use: 1) Construct a new icalcstpc 2) Issue a command by calling one of the command routines. 3) Repeat until both call icalcstpc_next_output and icalcstpc_next_input return 0: 3a) Call icalcstpc_next_output. Send string to server. 3b) Get string from server, & give to icalcstp_next_input() 4) Iterate with icalcstpc_first_response & icalcstp_next_response to get the servers responses 5) Repeat at #2 */ typedef void icalcstpc; /* Response code sent by the server. */ typedef struct icalcstpc_response { icalrequeststatus code; char *arg; /* These strings are owned by libical */ char *debug_text; char *more_text; void* result; } icalcstpc_response; icalcstpc* icalcstpc_new(); void icalcstpc_free(icalcstpc* cstpc); int icalcstpc_set_timeout(icalcstpc* cstp, int sec); /* Get the next string to send to the server */ char* icalcstpc_next_output(icalcstpc* cstp, char* line); char* icalcstpc_next_output_r(icalcstpc* cstp, char* line); /* process the next string from the server */ int icalcstpc_next_input(icalcstpc* cstp, char * line); /* After icalcstpc_next_input returns a 0, there are responses ready. use these to get them */ icalcstpc_response icalcstpc_first_response(icalcstpc* cstp); icalcstpc_response icalcstpc_next_response(icalcstpc* cstp); /* Issue a command */ icalerrorenum icalcstpc_abort(icalcstpc* cstp); icalerrorenum icalcstpc_authenticate(icalcstpc* cstp, char* mechanism, char* init_data, char* f(char*) ); icalerrorenum icalcstpc_capability(icalcstpc* cstp); icalerrorenum icalcstpc_calidexpand(icalcstpc* cstp,char* calid); icalerrorenum icalcstpc_continue(icalcstpc* cstp, unsigned int time); icalerrorenum icalcstpc_disconnect(icalcstpc* cstp); icalerrorenum icalcstpc_identify(icalcstpc* cstp, char* id); icalerrorenum icalcstpc_starttls(icalcstpc* cstp, char* command, char* init_data, char* f(char*)); icalerrorenum icalcstpc_senddata(icalcstpc* cstp, unsigned int time, icalcomponent *comp); icalerrorenum icalcstpc_upnexpand(icalcstpc* cstp,char* calid); icalerrorenum icalcstpc_sendata(icalcstpc* cstp, unsigned int time, icalcomponent *comp); #endif /* !ICALCSTPC_H */ libical-1.0/src/libicalss/icalspanlist_cxx.h0000664000076400007640000000304212132563133020206 0ustar allenallen/* -*- Mode: C++ -*- */ /** * @file icalspanlist_cxx.h * @author Critical Path * @brief C++ class wrapping the icalspanlist data structure * * This class wraps the icalspanlist routines in libicalss * * Errors within libicalss are propagated via exceptions of type * icalerrorenum. See icalerror.h for the complete list of exceptions * that might be thrown. */ #ifndef ICALSPANLIST_CXX_H #define ICALSPANLIST_CXX_H #include #include #include #include "vcomponent.h" #include /* For as_matrix.. */ class ICalSpanList { public: /** Construct an ICalSpanList from an icalset */ ICalSpanList(icalset *set, icaltimetype start, icaltimetype end) throw(icalerrorenum); /** Construct an ICalSpanList from the VFREEBUSY chunk of a icalcomponent */ ICalSpanList(icalcomponent *comp) throw(icalerrorenum); /** Construct an ICalSpanList from the VFREEBUSY chunk of a vcomponent */ ICalSpanList(VComponent &comp) throw(icalerrorenum); /** Destructor */ ~ICalSpanList(); /** Return a VFREEBUSY icalcomponent */ VComponent* get_vfreebusy(const char *organizer, const char *attendee) throw(icalerrorenum); /** Return the base data when casting */ operator icalspanlist*() {return data;} /** Return a vector of the number of events over delta t */ std::vector as_vector(int delta_t) throw(icalerrorenum); /** Dump the spanlist to stdout */ void dump() {icalspanlist_dump(data);} private: icalspanlist *data; }; #endif libical-1.0/src/libicalss/icalssyacc.y0000664000076400007640000002000612132563133016774 0ustar allenallen%{ /* -*- Mode: C -*- */ /* ====================================================================== */ /* FILE: icalssyacc.y */ /* CREATOR: eric 08 Aug 2000 */ /* */ /* DESCRIPTION: */ /* */ /* $Id: icalssyacc.y,v 1.10 2008-01-14 00:35:26 dothebart Exp $ */ /* $Locker: $ */ /* */ /* (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org */ /* */ /* This program is free software; you can redistribute it and/or modify */ /* it under the terms of either: */ /* */ /* The LGPL as published by the Free Software Foundation, version */ /* 2.1, available at: http://www.fsf.org/copyleft/lesser.html */ /* */ /* Or: */ /* */ /* The Mozilla Public License Version 1.0. You may obtain a copy of */ /* the License at http://www.mozilla.org/MPL/ */ /* */ /* The Original Code is eric. The Initial Developer of the Original */ /* Code is Eric Busboom */ /* */ /* ====================================================================== */ /*#define YYDEBUG 1*/ #include #include /* for strdup() */ #include /* for SHRT_MAX*/ #include #include "icalgauge.h" #include "icalgaugeimpl.h" extern struct icalgauge_impl *icalss_yy_gauge; #define YYPARSE_PARAM yy_globals #define YYLEX_PARAM yy_globals #define YY_EXTRA_TYPE icalgauge_impl* void sserror(char *s); static void ssyacc_add_where(struct icalgauge_impl* impl, char* prop, icalgaugecompare compare , char* value); static void ssyacc_add_select(struct icalgauge_impl* impl, char* str1); static void ssyacc_add_from(struct icalgauge_impl* impl, char* str1); static void set_logic(struct icalgauge_impl* impl,icalgaugelogic l); /* Don't know why I need this.... */ /* older flex version (such as included in OpenBSD) takes a different calling syntax */ #ifdef YYPARSE_PARAM int sslex(void *YYPARSE_PARAM); #else int sslex(void); #endif %} %union { char* v_string; } %token STRING %token SELECT FROM WHERE COMMA QUOTE EQUALS NOTEQUALS LESS GREATER LESSEQUALS %token GREATEREQUALS AND OR EOL END IS NOT SQLNULL %% query_min: SELECT select_list FROM from_list WHERE where_list | SELECT select_list FROM from_list | error { yyclearin; YYABORT; } ; select_list: STRING {ssyacc_add_select(icalss_yy_gauge,$1);} | select_list COMMA STRING {ssyacc_add_select(icalss_yy_gauge,$3);} ; from_list: STRING {ssyacc_add_from(icalss_yy_gauge,$1);} | from_list COMMA STRING {ssyacc_add_from(icalss_yy_gauge,$3);} ; where_clause: /* Empty */ | STRING EQUALS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_EQUAL,$3); } | STRING IS SQLNULL {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_ISNULL,""); } | STRING IS NOT SQLNULL {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_ISNOTNULL,""); } | STRING NOTEQUALS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_NOTEQUAL,$3); } | STRING LESS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_LESS,$3); } | STRING GREATER STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_GREATER,$3); } | STRING LESSEQUALS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_LESSEQUAL,$3); } | STRING GREATEREQUALS STRING {ssyacc_add_where(icalss_yy_gauge,$1,ICALGAUGECOMPARE_GREATEREQUAL,$3); } ; where_list: where_clause {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_NONE);} | where_list AND where_clause {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_AND);} | where_list OR where_clause {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_OR);} ; %% static void ssyacc_add_where(struct icalgauge_impl* impl, char* str1, icalgaugecompare compare , char* value_str) { struct icalgauge_where *where; char *compstr, *propstr, *c, *s,*l; if ( (where = malloc(sizeof(struct icalgauge_where))) ==0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } memset(where,0,sizeof(struct icalgauge_where)); where->logic = ICALGAUGELOGIC_NONE; where->compare = ICALGAUGECOMPARE_NONE; where->comp = ICAL_NO_COMPONENT; where->prop = ICAL_NO_PROPERTY; /* remove enclosing quotes */ s = value_str; if(*s == '\''){ s++; } l = s+strlen(s)-1; if(*l == '\''){ *l=0; } where->value = strdup(s); /* Is there a period in str1 ? If so, the string specified both a */ /* component and a property */ if( (c = strrchr(str1,'.')) != 0){ compstr = str1; propstr = c+1; *c = '\0'; } else { compstr = 0; propstr = str1; } /* Handle the case where a component was specified */ if(compstr != 0){ where->comp = icalenum_string_to_component_kind(compstr); } else { where->comp = ICAL_NO_COMPONENT; } where->prop = icalenum_string_to_property_kind(propstr); where->compare = compare; if(where->value == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); free(where->value); return; } pvl_push(impl->where,where); } static void set_logic(struct icalgauge_impl* impl,icalgaugelogic l) { pvl_elem e = pvl_tail(impl->where); struct icalgauge_where *where = pvl_data(e); where->logic = l; } static void ssyacc_add_select(struct icalgauge_impl* impl, char* str1) { char *c, *compstr, *propstr; struct icalgauge_where *where; /* Uses only the prop and comp fields of the where structure */ if ( (where = malloc(sizeof(struct icalgauge_where))) ==0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } memset(where,0,sizeof(struct icalgauge_where)); where->logic = ICALGAUGELOGIC_NONE; where->compare = ICALGAUGECOMPARE_NONE; where->comp = ICAL_NO_COMPONENT; where->prop = ICAL_NO_PROPERTY; /* Is there a period in str1 ? If so, the string specified both a */ /* component and a property */ if( (c = strrchr(str1,'.')) != 0){ compstr = str1; propstr = c+1; *c = '\0'; } else { compstr = 0; propstr = str1; } /* Handle the case where a component was specified */ if(compstr != 0){ where->comp = icalenum_string_to_component_kind(compstr); } else { where->comp = ICAL_NO_COMPONENT; } /* If the property was '*', then accept all properties */ if(strcmp("*",propstr) == 0) { where->prop = ICAL_ANY_PROPERTY; } else { where->prop = icalenum_string_to_property_kind(propstr); } if(where->prop == ICAL_NO_PROPERTY){ free(where); icalerror_set_errno(ICAL_BADARG_ERROR); return; } pvl_push(impl->select,where); } static void ssyacc_add_from(struct icalgauge_impl* impl, char* str1) { icalcomponent_kind ckind; ckind = icalenum_string_to_component_kind(str1); if(ckind == ICAL_NO_COMPONENT){ assert(0); } pvl_push(impl->from,(void*)ckind); } void sserror(char *s){ fprintf(stderr,"Parse error \'%s\'\n", s); icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); } libical-1.0/src/libicalss/icalbdbsetimpl.h0000664000076400007640000000164012132563133017616 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalbdbsetimpl.h CREATOR: dml 12 December 2001 (C) COPYRIGHT 2001, Critical Path $Id: icalbdbsetimpl.h,v 1.4 2008-01-02 20:07:39 dothebart Exp $ $Locker: $ ======================================================================*/ #ifndef ICALBDBSETIMPL_H #define ICALBDBSETIMPL_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include /* This definition is in its own file so it can be kept out of the main header file, but used by "friend classes" like icaldirset*/ struct icalbdbset_impl { icalset super; /**< parent class */ const char *path; const char *subdb; const char *sindex; const char *key; void *data; int datasize; int changed; icalcomponent* cluster; icalgauge* gauge; DB_ENV *dbenv; DB *dbp; DB *sdbp; DBC *dbcp; }; #endif libical-1.0/src/libicalss/icalbdbset.h0000664000076400007640000001216612132563133016741 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalbdbset.h CREATOR: dml 12 December 2001 (C) COPYRIGHT 2001, Critical Path $Id: icalbdbset.h,v 1.5 2008-01-02 20:07:39 dothebart Exp $ $Locker: $ ======================================================================*/ #ifndef ICALBDBSET_H #define ICALBDBSET_H #include #include #include #include typedef struct icalbdbset_impl icalbdbset; enum icalbdbset_subdb_type {ICALBDB_CALENDARS, ICALBDB_EVENTS, ICALBDB_TODOS, ICALBDB_REMINDERS}; typedef enum icalbdbset_subdb_type icalbdbset_subdb_type; /** sets up the db environment, should be done in parent thread.. */ int icalbdbset_init_dbenv(char *db_env_dir, void (*logDbFunc)(const char*, char*)); icalset* icalbdbset_init(icalset* set, const char *dsn, void *options); int icalbdbset_cleanup(void); void icalbdbset_checkpoint(void); void icalbdbset_rmdbLog(void); /** Creates a component handle. flags allows caller to specify if database is internally a BTREE or HASH */ icalset * icalbdbset_new(const char* database_filename, icalbdbset_subdb_type subdb_type, int dbtype, int flag); DB * icalbdbset_bdb_open_secondary(DB *dbp, const char *subdb, const char *sindex, int (*callback) (DB *db, const DBT *dbt1, const DBT *dbt2, DBT *dbt3), int type); char *icalbdbset_parse_data(DBT *dbt, char *(*pfunc)(const DBT *dbt)) ; void icalbdbset_free(icalset* set); /* cursor operations */ int icalbdbset_acquire_cursor(DB *dbp, DB_TXN* tid, DBC **rdbcp); int icalbdbset_cget(DBC *dbcp, DBT *key, DBT *data, int access_method); int icalbdbset_cput(DBC *dbcp, DBT *key, DBT *data, int access_method); int icalbdbset_get_first(DBC *dbcp, DBT *key, DBT *data); int icalbdbset_get_next(DBC *dbcp, DBT *key, DBT *data); int icalbdbset_get_last(DBC *dbcp, DBT *key, DBT *data); int icalbdbset_get_key(DBC *dbcp, DBT *key, DBT *data); int icalbdbset_delete(DB *dbp, DBT *key); int icalbdbset_put(DB *dbp, DBT *key, DBT *data, int access_method); int icalbdbset_get(DB *dbp, DB_TXN *tid, DBT *key, DBT *data, int flags); const char* icalbdbset_path(icalset* set); const char* icalbdbset_subdb(icalset* set); /* Mark the set as changed, so it will be written to disk when it is freed. Commit writes to disk immediately. */ void icalbdbset_mark(icalset* set); icalerrorenum icalbdbset_commit(icalset *set); icalerrorenum icalbdbset_add_component(icalset* set, icalcomponent* child); icalerrorenum icalbdbset_remove_component(icalset* set, icalcomponent* child); int icalbdbset_count_components(icalset* set, icalcomponent_kind kind); /* Restrict the component returned by icalbdbset_first, _next to those that pass the gauge. _clear removes the gauge */ icalerrorenum icalbdbset_select(icalset* store, icalgauge* gauge); void icalbdbset_clear(icalset* store); /* Get and search for a component by uid */ icalcomponent* icalbdbset_fetch(icalset* set, icalcomponent_kind kind, const char* uid); int icalbdbset_has_uid(icalset* set, const char* uid); icalcomponent* icalbdbset_fetch_match(icalset* set, icalcomponent *c); icalerrorenum icalbdbset_modify(icalset* set, icalcomponent *old, icalcomponent *newc); /* cluster management functions */ icalerrorenum icalbdbset_set_cluster(icalset* set, icalcomponent* cluster); icalerrorenum icalbdbset_free_cluster(icalset* set); icalcomponent* icalbdbset_get_cluster(icalset* set); /* Iterate through components. If a gauge has been defined, these will skip over components that do not pass the gauge */ icalcomponent* icalbdbset_get_current_component (icalset* set); icalcomponent* icalbdbset_get_first_component(icalset* set); icalcomponent* icalbdbset_get_next_component(icalset* set); /* External iterator for thread safety */ icalsetiter icalbdbset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge, const char* tzid); icalcomponent* icalbdbset_form_a_matched_recurrence_component(icalsetiter* itr); icalcomponent* icalbdbsetiter_to_next(icalset* set, icalsetiter* i); icalcomponent* icalbdbsetiter_to_prior(icalset* set, icalsetiter* i); /* Return a reference to the internal component. You probably should not be using this. */ icalcomponent* icalbdbset_get_component(icalset* set); DB_ENV *icalbdbset_get_env(void); int icalbdbset_begin_transaction(DB_TXN* parent_id, DB_TXN** txnid); int icalbdbset_commit_transaction(DB_TXN* txnid); DB* icalbdbset_bdb_open(const char* path, const char *subdb, int type, mode_t mode, int flag); typedef struct icalbdbset_options { icalbdbset_subdb_type subdb; /**< the subdatabase to open */ int dbtype; /**< db_open type: DB_HASH | DB_BTREE */ mode_t mode; /**< file mode */ u_int32_t flag; /**< DB->set_flags(): DB_DUP | DB_DUPSORT */ char *(*pfunc)(const DBT *dbt); /**< parsing function */ int (*callback) (DB *db, /**< callback for secondary db open */ const DBT *dbt1, const DBT *dbt2, DBT *dbt3); } icalbdbset_options; #endif /* !ICALBDBSET_H */ libical-1.0/src/libicalss/CMakeLists.txt0000664000076400007640000000512112132563133017225 0ustar allenalleninclude_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/src ${CMAKE_SOURCE_DIR}/src/libicalss ${CMAKE_BINARY_DIR}/src/libicalss ${CMAKE_SOURCE_DIR}/src/libical ${CMAKE_BINARY_DIR}/src/libical ) if(WIN32) set(TOPS "\"${CMAKE_SOURCE_DIR}\"") set(TOPB "\"${CMAKE_BINARY_DIR}\"") else(WIN32) set(TOPS "${CMAKE_SOURCE_DIR}") set(TOPB "${CMAKE_BINARY_DIR}") endif(WIN32) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libicalss/icalss.h COMMAND ${CMAKE_COMMAND} -DTOPS:FILEPATH=${TOPS} -DTOPB:FILEPATH=${TOPB} -DICAL_FILE_H_FILE:FILEPATH=${CMAKE_BINARY_DIR}/src/libicalss/icalss.h -P ${CMAKE_CURRENT_SOURCE_DIR}/icalss_file.cmake DEPENDS ical-header ) add_custom_target(icalss-header DEPENDS ical-header ${CMAKE_BINARY_DIR}/src/libicalss/icalss.h ) ########### next target ############### #these are generated sources, but we keep them in the repo set(icalss_LIB_DEVSRCS icalsslexer.c icalssyacc.c) set(icalss_LIB_SRCS icalcalendar.c icalcalendar.h icalclassify.c icalclassify.h icalcluster.c icalcluster.h icalclusterimpl.h icalgauge.c icalgauge.h icalgaugeimpl.h icaldirset.c icaldirset.h icaldirsetimpl.h icalfileset.c icalfileset.h icalfilesetimpl.h icalset.c icalset.h icalssyacc.h icalspanlist.c icalspanlist.h icalmessage.c icalmessage.h ${icalss_LIB_DEVSRCS} ) if(MSVC) list(APPEND icalss_LIB_SRCS ../icalss.def) endif(MSVC) add_library(icalss ${LIBRARY_TYPE} ${icalss_LIB_SRCS}) add_library(icalss-static STATIC ${icalss_LIB_SRCS}) add_dependencies(icalss icalss-header) add_dependencies(icalss-static icalss-header) target_link_libraries(icalss ical) if(MSVC) set_target_properties(icalss PROPERTIES OUTPUT_NAME "libicalss") set_target_properties(icalss-static PROPERTIES OUTPUT_NAME "libicalss-static") else(MSVC) set_target_properties(icalss-static PROPERTIES OUTPUT_NAME "icalss") endif(MSVC) set_target_properties(icalss PROPERTIES VERSION ${LIBICAL_LIB_VERSION_STRING} SOVERSION ${LIBICAL_LIB_MAJOR_VERSION} ) set_target_properties(icalss PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(icalss-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) install(TARGETS icalss icalss-static ${INSTALL_TARGETS_DEFAULT_ARGS}) ########### install files ############### install(FILES ${CMAKE_BINARY_DIR}/src/libicalss/icalss.h icalcalendar.h icalclassify.h icalcluster.h icaldirset.h icaldirsetimpl.h icalfileset.h icalfilesetimpl.h icalgauge.h icalgaugeimpl.h icalmessage.h icalset.h icalspanlist.h icalssyacc.h DESTINATION ${INCLUDE_INSTALL_DIR}/libical ) libical-1.0/src/libicalss/icalcstp.h0000664000076400007640000000365512132563133016452 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalcstp.h CREATOR: eric 20 April 1999 $Id: icalcstp.h,v 1.8 2008-01-02 20:15:44 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalcstp.h ======================================================================*/ #ifndef ICALCSTP_H #define ICALCSTP_H #include /* Connection state, from the state machine in RFC2445 */ enum cstps_state { NO_STATE, CONNECTED, AUTHENTICATED, IDENTIFIED, DISCONNECTED, RECEIVE }; /* CSTP Commands that a client can issue to a server */ typedef enum icalcstp_command { ICAL_ABORT_COMMAND, ICAL_AUTHENTICATE_COMMAND, ICAL_CAPABILITY_COMMAND, ICAL_CONTINUE_COMMAND, ICAL_CALIDEXPAND_COMMAND, ICAL_IDENTIFY_COMMAND, ICAL_DISCONNECT_COMMAND, ICAL_SENDDATA_COMMAND, ICAL_STARTTLS_COMMAND, ICAL_UPNEXPAND_COMMAND, ICAL_COMPLETE_COMMAND, ICAL_UNKNOWN_COMMAND } icalcstp_command; /* A statement is a combination of command or response code and a component that the server and client exchage with each other. */ struct icalcstp_statement { icalcstp_command command; char* str_data; /* If non-NUll use as arguments to command */ int int_data; /* If non-NULL use as arguments to command */ icalrequeststatus code; icalcomponent* data; }; const char* icalcstp_command_to_string(icalcstp_command command); icalcstp_command icalcstp_string_to_command(const char* str); #endif /* !ICALCSTP_H */ libical-1.0/src/libicalss/icalcstpclient.c0000664000076400007640000001744312132563133017644 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalcstps.c CREATOR: ebusboom 23 Jun 2000 $Id: icalcstpclient.c,v 1.9 2008-01-02 20:15:44 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "icalcstp.h" #include "icalcstpclient.h" #include "pvl.h" #include /* For send(), others */ #include /* For send(), others. */ #if defined(HAVE_UNISTD_H) #include /* For alarm */ #endif #include #include /* for malloc */ #include #define EOL "\n" /* Client state machine */ typedef enum icalcstpc_line_type { ICALCSTPC_RESPONSE_CODE_LINE, ICALCSTPC_TERMINATOR_LINE, ICALCSTPC_APPLICATION_DATA_LINE } icalcstpc_line_type; typedef enum icalcstpc_state { ICALCSTPC_SEND_STATE, ICALCSTPC_RESPONSE_CODE_STATE, ICALCSTPC_RESPONSE_DATA_STATE } icalcstpc_state; struct icalcstpc_impl { int timeout; icalparser *parser; icalcstp_command command; icalcstpc_state state; char* next_output; char* next_input; }; icalcstpc* icalcstpc_new() { struct icalcstpc_impl *impl; impl = malloc(sizeof(struct icalcstpc_impl)); if(impl == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } memset(impl,0,sizeof(struct icalcstpc_impl)); return impl; } void icalcstpc_free(icalcstpc* cstpc) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstpc; if(impl->next_output != 0){ free(impl->next_output); } if(impl->next_input != 0){ free(impl->next_input); } if(impl->parser != 0){ icalparser_free(impl->parser); } } /* Get the next string to send to the server */ char* icalcstpc_next_output_r(icalcstpc* cstp, char * line) { char* out; struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; if(impl->next_output == 0){ return 0; } out = impl->next_output; impl->next_output = 0; return out; } char* icalcstpc_next_output(icalcstpc* cstp, char * line) { char *buf; buf = icalcstpc_next_output_r(cstp, line); icalmemory_add_tmp_buffer(buf); return buf; } /* process the next string sent by the server */ int icalcstpc_next_input(icalcstpc* cstp, char* line) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; icalcstpc_line_type line_type; if(icalcstp_line_is_endofdata(line) || line == 0){ return 0; } switch (impl->command){ case ICAL_ABORT_COMMAND:{ break; } case ICAL_AUTHENTICATE_COMMAND:{ break; } case ICAL_CAPABILITY_COMMAND:{ break; } case ICAL_CONTINUE_COMMAND:{ break; } case ICAL_CALIDEXPAND_COMMAND:{ break; } case ICAL_IDENTIFY_COMMAND:{ break; } case ICAL_DISCONNECT_COMMAND:{ break; } case ICAL_SENDDATA_COMMAND:{ break; } case ICAL_STARTTLS_COMMAND:{ break; } case ICAL_UPNEXPAND_COMMAND:{ break; } case ICAL_COMPLETE_COMMAND:{ break; } case ICAL_UNKNOWN_COMMAND:{ break; } default: break; } } /* After icalcstpc_next_input returns a 0, there are responses ready. use these to get them */ icalcstpc_response icalcstpc_first_response(icalcstpc* cstp) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; } icalcstpc_response icalcstpc_next_response(icalcstpc* cstp) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; } int icalcstpc_set_timeout(icalcstpc* cstp, int sec) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; } icalerrorenum icalcstpc_abort(icalcstpc* cstp) { struct icalcstpc_impl* impl = (struct icalcstpc_impl*)cstp; icalerror_check_arg_re(cstp!=0,"cstp",ICAL_BADARG_ERROR); impl->next_output = "ABORT\n"; return ICAL_NO_ERROR; } icalerrorenum icalcstpclient_setup_output(icalcstpc* cstp, size_t sz) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; if(impl->next_output != 0){ icalerror_set_errno(ICAL_USAGE_ERROR); return ICAL_USAGE_ERROR; } impl->next_output = malloc(sz); if(impl->next_output == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return ICAL_NEWFAILED_ERROR; } return ICAL_NO_ERROR; } icalerrorenum icalcstpc_authenticate(icalcstpc* cstp, char* mechanism, char* data, char* f(char*)) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; char* command_str; icalerrorenum error; size_t sz; icalerror_check_arg_re(cstp!=0,"cstp",ICAL_BADARG_ERROR); icalerror_check_arg_re(mechanism!=0,"mechanism",ICAL_BADARG_ERROR); icalerror_check_arg_re(data!=0,"data",ICAL_BADARG_ERROR); icalerror_check_arg_re(f!=0,"f",ICAL_BADARG_ERROR); impl->command = ICAL_AUTHENTICATE_COMMAND; command_str = icalcstp_command_to_string(impl->command); sz = strlen(command_str) + strlen(mechanism) + strlen(data) + 4; if((error=icalcstpclient_setup_output(cstp,sz)) != ICAL_NO_ERROR){ return error; } sprintf(impl->next_output,"%s %s %s%s",command_str,mechanism,data,EOL); return ICAL_NO_ERROR; } icalerrorenum icalcstpc_capability(icalcstpc* cstp) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; char* command_str; icalerrorenum error; size_t sz; icalerror_check_arg_re(cstp!=0,"cstp",ICAL_BADARG_ERROR); impl->command = ICAL_CAPABILITY_COMMAND; command_str = icalcstp_command_to_string(impl->command); sz = strlen(command_str); if((error=icalcstpclient_setup_output(cstp,sz)) != ICAL_NO_ERROR){ return error; } return ICAL_NO_ERROR; } icalerrorenum icalcstpc_calidexpand(icalcstpc* cstp,char* calid) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; impl->command = ICAL_CALIDEXPAND_COMMAND; return ICAL_NO_ERROR; } icalerrorenum icalcstpc_continue(icalcstpc* cstp, unsigned int time) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; impl->command = ICAL_CONTINUE_COMMAND; return ICAL_NO_ERROR; } icalerrorenum icalcstpc_disconnect(icalcstpc* cstp) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; impl->command = ICAL_DISCONNECT_COMMAND; return ICAL_NO_ERROR; } icalerrorenum icalcstpc_identify(icalcstpc* cstp, char* id) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; impl->command = ICAL_IDENTIFY_COMMAND; return ICAL_NO_ERROR; } icalerrorenum icalcstpc_starttls(icalcstpc* cstp, char* command, char* data, char * f(char*)) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; impl->command = ICAL_STARTTLS_COMMAND; return ICAL_NO_ERROR; } icalerrorenum icalcstpc_upnexpand(icalcstpc* cstp,char* calid) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; impl->command = ICAL_UPNEXPAND_COMMAND; return ICAL_NO_ERROR; } icalerrorenum icalcstpc_sendata(icalcstpc* cstp, unsigned int time, icalcomponent *comp) { struct icalcstpc_impl *impl = (struct icalcstpc_impl *)cstp; impl->command = ICAL_SENDDATA_COMMAND; return ICAL_NO_ERROR; } libical-1.0/src/libicalss/icalcstpserver.c0000664000076400007640000002104212132563133017662 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalcstpserver.c CREATOR: ebusboom 13 Feb 01 $Id: icalcstpserver.c,v 1.5 2008-01-02 20:15:45 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "icalcstp.h" #include "icalcstpserver.h" #include "pvl.h" #include /* For send(), others */ #include /* For send(), others. */ #if defined(HAVE_UNISTD_H) #include /* For alarm */ #endif #include #include /* for malloc */ #include struct icalcstps_impl { int timeout; icalparser *parser; enum cstps_state major_state; struct icalcstps_commandfp commandfp; }; /* This state machine is a Mealy-type: actions occur on the transitions, not in the states. Here is the state machine diagram from the CAP draft: STARTTLS / CAPABILITY +-------+ | | +---------------+ | +-----------+ AUTHENTICATE | | +-->| Connected |-------------->| Authenticated | +-----------+ | | | +---------------+ | | | | | | | | +-----+ STARTTLS / | V | | CAPABILITY / | +---------------+ | IDENTIFY | | |<-+ | | Identified |<----+ | +--------| | | | | +---------------+ | command | | | | completes V |DISCONNECT | | +--------------+ | |SENDDATA | | Disconnected |<--+ | | +--------------+ | | ABORT A | | | V | | DISCONNECT +---------------+ | +--------------------| Receive |--+ | |<--+ +---------------+ | | | CONTINUTE +----+ In this implmenetation, the transition from CONNECTED to IDENTIFIED is non-standard. The spec specifies that on the ATHENTICATE command, the machine transitions from CONNECTED to AUTHENTICATED, and then immediately goes to IDENTIFIED. This makes AUTHENTICATED a useless state, so I removed it */ struct state_table { enum cstps_state major_state; enum icalcstp_command command; void (*action)(); enum cstps_state next_state; } server_state_table[] = { { CONNECTED, ICAL_CAPABILITY_COMMAND , 0, CONNECTED}, { CONNECTED, ICAL_AUTHENTICATE_COMMAND , 0, IDENTIFIED}, /* Non-standard */ { IDENTIFIED, ICAL_STARTTLS_COMMAND, 0, IDENTIFIED}, { IDENTIFIED, ICAL_IDENTIFY_COMMAND, 0, IDENTIFIED}, { IDENTIFIED, ICAL_CAPABILITY_COMMAND, 0, IDENTIFIED}, { IDENTIFIED, ICAL_SENDDATA_COMMAND, 0, RECEIVE}, { IDENTIFIED, ICAL_DISCONNECT_COMMAND, 0, DISCONNECTED}, { DISCONNECTED, 0, 0, 0}, { RECEIVE, ICAL_DISCONNECT_COMMAND, 0, DISCONNECTED}, { RECEIVE, ICAL_CONTINUE_COMMAND, 0, RECEIVE}, { RECEIVE, ICAL_ABORT_COMMAND , 0, IDENTIFIED}, { RECEIVE, ICAL_COMPLETE_COMMAND , 0, IDENTIFIED} }; /**********************************************************************/ icalcstps* icalcstps_new(struct icalcstps_commandfp cfp) { struct icalcstps_impl* impl; if ( ( impl = (struct icalcstps_impl*) malloc(sizeof(struct icalcstps_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } impl->commandfp = cfp; impl->timeout = 10; return (icalcstps*)impl; } void icalcstps_free(icalcstps* cstp); int icalcstps_set_timeout(icalcstps* cstp, int sec) { struct icalcstps_impl *impl = (struct icalcstps_impl *) cstp; icalerror_check_arg_rz( (cstp!=0), "cstp"); impl->timeout = sec; return sec; } typedef struct icalcstps_response { icalrequeststatus code; char caluid[1024]; void* result; } icalcstps_response; icalerrorenum prep_abort(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_authenticate(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_capability(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_calidexpand(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_continue(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_disconnect(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_identify(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_starttls(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_upnexpand(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } icalerrorenum prep_sendata(struct icalcstps_impl* impl, char* data) { return ICAL_NO_ERROR; } char* icalcstps_process_incoming(icalcstps* cstp, char* input) { struct icalcstps_impl *impl = (struct icalcstps_impl *) cstp; char *i; char *cmd_or_resp; char *data; char *input_cpy; icalerrorenum error; icalerror_check_arg_rz(cstp !=0,"cstp"); icalerror_check_arg_rz(input !=0,"input"); if ((input_cpy = (char*)strdup(input)) == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } i = (char*)strstr(" ",input_cpy); cmd_or_resp = input_cpy; if (i != 0){ *i = '\0'; data = ++i; } else { data = 0; } printf("cmd: %s\n",cmd_or_resp); printf("data: %s\n",data); /* extract the command, look up in the state table, and dispatch to the proper handler */ if(strcmp(cmd_or_resp,"ABORT") == 0){ error = prep_abort(impl,data); } else if(strcmp(cmd_or_resp,"AUTHENTICATE") == 0){ error = prep_authenticate(impl,data); } else if(strcmp(cmd_or_resp,"CAPABILITY") == 0){ error = prep_capability(impl,data); } else if(strcmp(cmd_or_resp,"CALIDEXPAND") == 0){ error = prep_calidexpand(impl,data); } else if(strcmp(cmd_or_resp,"CONTINUE") == 0){ error = prep_continue(impl,data); } else if(strcmp(cmd_or_resp,"DISCONNECT") == 0){ error = prep_disconnect(impl,data); } else if(strcmp(cmd_or_resp,"IDENTIFY") == 0){ error = prep_identify(impl,data); } else if(strcmp(cmd_or_resp,"STARTTLS") == 0){ error = prep_starttls(impl,data); } else if(strcmp(cmd_or_resp,"UPNEXPAND") == 0){ error = prep_upnexpand(impl,data); } else if(strcmp(cmd_or_resp,"SENDDATA") == 0){ error = prep_sendata(impl,data); } return 0; } /* Read data until we get a end of data marker */ struct icalcstps_server_stubs { icalerrorenum (*abort)(icalcstps* cstp); icalerrorenum (*authenticate)(icalcstps* cstp, char* mechanism, char* data); icalerrorenum (*calidexpand)(icalcstps* cstp, char* calid); icalerrorenum (*capability)(icalcstps* cstp); icalerrorenum (*cont)(icalcstps* cstp, unsigned int time); icalerrorenum (*identify)(icalcstps* cstp, char* id); icalerrorenum (*disconnect)(icalcstps* cstp); icalerrorenum (*sendata)(icalcstps* cstp, unsigned int time, icalcomponent *comp); icalerrorenum (*starttls)(icalcstps* cstp, char* command, char* data); icalerrorenum (*upnexpand)(icalcstps* cstp, char* upn); icalerrorenum (*unknown)(icalcstps* cstp, char* command, char* data); }; libical-1.0/src/libicalss/icaldirset.h0000664000076400007640000000631412132563133016766 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icaldirset.h CREATOR: eric 28 November 1999 $Id: icaldirset.h,v 1.8 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALDIRSET_H #define ICALDIRSET_H #include #include "icalset.h" #include "icalcluster.h" #include "icalgauge.h" /* icaldirset Routines for storing, fetching, and searching for ical * objects in a database */ typedef struct icaldirset_impl icaldirset; icalset* icaldirset_new(const char* path); icalset* icaldirset_new_reader(const char* path); icalset* icaldirset_new_writer(const char* path); icalset* icaldirset_init(icalset* set, const char *dsn, void *options); void icaldirset_free(icalset* set); const char* icaldirset_path(icalset* set); /* Mark the cluster as changed, so it will be written to disk when it is freed. Commit writes to disk immediately*/ void icaldirset_mark(icalset* set); icalerrorenum icaldirset_commit(icalset* set); icalerrorenum icaldirset_add_component(icalset* store, icalcomponent* comp); icalerrorenum icaldirset_remove_component(icalset* store, icalcomponent* comp); int icaldirset_count_components(icalset* store, icalcomponent_kind kind); /* Restrict the component returned by icaldirset_first, _next to those that pass the gauge. _clear removes the gauge. */ icalerrorenum icaldirset_select(icalset* store, icalgauge* gauge); void icaldirset_clear(icalset* store); /* Get a component by uid */ icalcomponent* icaldirset_fetch(icalset* store, const char* uid); int icaldirset_has_uid(icalset* store, const char* uid); icalcomponent* icaldirset_fetch_match(icalset* set, icalcomponent *c); /* Modify components according to the MODIFY method of CAP. Works on the currently selected components. */ icalerrorenum icaldirset_modify(icalset* store, icalcomponent *oldc, icalcomponent *newc); /* Iterate through the components. If a gauge has been defined, these will skip over components that do not pass the gauge */ icalcomponent* icaldirset_get_current_component(icalset* store); icalcomponent* icaldirset_get_first_component(icalset* store); icalcomponent* icaldirset_get_next_component(icalset* store); /* External iterator for thread safety */ icalsetiter icaldirset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge); icalcomponent* icaldirsetiter_to_next(icalset* set, icalsetiter* i); icalcomponent* icaldirsetiter_to_prior(icalset* set, icalsetiter* i); typedef struct icaldirset_options { int flags; /**< flags corresponding to the open() system call O_RDWR, etc. */ } icaldirset_options; #endif /* !ICALDIRSET_H */ libical-1.0/src/libicalss/icalbdbset_cxx.h0000664000076400007640000000271512132563133017622 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalbdbset_cxx.h CREATOR: dml 12/12/01 (C) COPYRIGHT 2001, Critical Path ======================================================================*/ #ifndef ICALBDBSET_CXX_H #define ICALBDBSET_CXX_H extern "C" { #include #include } #include "vcomponent.h" #include typedef char* string; // Will use the string library from STL class ICalBDBSet { public: ICalBDBSet(); ICalBDBSet(const ICalBDBSet&); ICalBDBSet operator=(const ICalBDBSet &); ~ICalBDBSet(); ICalBDBSet(const string& path, int flags); public: void free(); string path(); icalerrorenum add_component(VComponent* child); icalerrorenum remove_component(VComponent* child); int count_components(icalcomponent_kind kind); // Restrict the component returned by icalbdbset_first, _next to those // that pass the gauge. _clear removes the gauge icalerrorenum select(icalgauge *gauge); void clear(); // Get and search for a component by uid VComponent* fetch(string &uid); VComponent* fetch_match(icalcomponent *c); int has_uid(string &uid); // Iterate through components. If a guage has been defined, these // will skip over components that do not pass the gauge VComponent* get_current_component(); VComponent* get_first_component(); VComponent* get_next_component(); VComponent* get_component(); }; #endif libical-1.0/src/libicalss/icalclusterimpl.h0000664000076400007640000000221012132563133020026 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalfilesetimpl.h CREATOR: eric 23 December 1999 $Id: icalclusterimpl.h,v 1.2 2007-04-30 13:57:48 artcancro Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif /* This definition is in its own file so it can be kept out of the main header file, but used by "friend classes" like icaldirset*/ #define ICALCLUSTER_ID "clus" struct icalcluster_impl { char id[5]; /* clus */ char *key; icalcomponent *data; int changed; }; libical-1.0/src/libicalss/icalcstp.c0000664000076400007640000000520112132563133016432 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalcstps.c CREATOR: ebusboom 23 Jun 2000 $Id: icalcstp.c,v 1.10 2008-01-02 20:15:44 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "icalcstp.h" #include "pvl.h" #include /* For send(), others */ #include /* For send(), others. */ #if defined(HAVE_UNISTD_H) #include /* For alarm */ #endif #include #include /* for malloc */ #include struct command_map { enum icalcstp_command command; char *str; } command_map[] = { {ICAL_ABORT_COMMAND,"ABORT"}, {ICAL_AUTHENTICATE_COMMAND,"AUTHENTICATE"}, {ICAL_CAPABILITY_COMMAND,"CAPABILITY"}, {ICAL_CONTINUE_COMMAND,"CONTINUE"}, {ICAL_CALIDEXPAND_COMMAND,"CALIDEXPAND"}, {ICAL_IDENTIFY_COMMAND,"IDENTIFY"}, {ICAL_DISCONNECT_COMMAND,"DISCONNECT"}, {ICAL_SENDDATA_COMMAND,"SENDDATA"}, {ICAL_STARTTLS_COMMAND,"STARTTLS"}, {ICAL_UPNEXPAND_COMMAND,"UPNEXPAND"}, {ICAL_UNKNOWN_COMMAND,"UNKNOWN"} }; icalcstp_command icalcstp_line_command(char* line) { int i; for(i = 0; command_map[i].command != ICAL_UNKNOWN_COMMAND; i++){ size_t l = strlen(command_map[i].str); if(strncmp(line, command_map[i].str, l) == 0){ return command_map[i].command; } } return ICAL_UNKNOWN_COMMAND; } icalrequeststatus icalcstp_line_response_code(char* line) { struct icalreqstattype rs; rs = icalreqstattype_from_string(line); return rs.code; } int icalcstp_line_is_endofdata(char* line) { if(line[0] == '.' && line[1] == '\n'){ return 1; } return 0; } int icalcstp_line_is_mime(char* line) { } const char* icalcstp_command_to_string(icalcstp_command command){ int i; for(i = 0; command_map[i].command != ICAL_UNKNOWN_COMMAND; i++){ size_t l = strlen(command_map[i].str); if(command_map[i].command == command){ return command_map[i].str; } } return command_map[i].str; } libical-1.0/src/libicalss/icalmessage.c0000664000076400007640000002163712132563133017120 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalmessage.c CREATOR: ebusboom 07 Nov 2000 $Id: icalmessage.c,v 1.9 2008-01-02 20:07:41 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalmessage.h" #include #include /* for tolower()*/ #include /* for strstr */ #include /* for free(), malloc() */ #if defined(_MSC_VER) #define snprintf _snprintf #endif icalcomponent* icalmessage_get_inner(icalcomponent* comp) { if (icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT){ return icalcomponent_get_first_real_component(comp); } else { return comp; } } static char* lowercase(const char* str) { char* p = 0; char* n = 0; if(str ==0){ return 0; } n = icalmemory_strdup(str); for(p = n; *p!=0; p++){ *p = tolower(*p); } return n; } icalproperty* icalmessage_find_attendee(icalcomponent* comp, const char* user) { icalcomponent *inner = icalmessage_get_inner(comp); icalproperty *p,*attendee = 0; char* luser = lowercase(user); for(p = icalcomponent_get_first_property(inner, ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(inner, ICAL_ATTENDEE_PROPERTY) ){ char* lattendee; lattendee = lowercase(icalproperty_get_attendee(p)); if (strstr(lattendee,user) != 0){ free(lattendee); attendee = p; break; } free(lattendee); } free(luser); return attendee; } void icalmessage_copy_properties(icalcomponent* to, icalcomponent* from, icalproperty_kind kind) { icalcomponent *to_inner = icalmessage_get_inner(to); icalcomponent *from_inner = icalmessage_get_inner(from); if (to_inner == 0 && from_inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return; } if(!icalcomponent_get_first_property(from_inner,kind)){ return; } icalcomponent_add_property(to_inner, icalproperty_new_clone( icalcomponent_get_first_property( from_inner, kind) ) ); } icalcomponent *icalmessage_new_reply_base(icalcomponent* c, const char* user, const char* msg) { icalproperty *attendee; char tmp[45]; icalcomponent *reply = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_method(ICAL_METHOD_REPLY), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstamp(icaltime_from_timet(time(0),0)), 0), 0); icalcomponent *inner = icalmessage_get_inner(reply); icalerror_check_arg_rz(c,"c"); icalmessage_copy_properties(reply,c,ICAL_UID_PROPERTY); icalmessage_copy_properties(reply,c,ICAL_ORGANIZER_PROPERTY); icalmessage_copy_properties(reply,c,ICAL_RECURRENCEID_PROPERTY); icalmessage_copy_properties(reply,c,ICAL_SUMMARY_PROPERTY); icalmessage_copy_properties(reply,c,ICAL_SEQUENCE_PROPERTY); icalcomponent_set_dtstamp(reply,icaltime_from_timet(time(0),0)); if(msg != 0){ icalcomponent_add_property(inner,icalproperty_new_comment(msg)); } /* Copy this user's attendee property */ attendee = icalmessage_find_attendee(c,user); if (attendee == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); icalcomponent_free(reply); return 0; } icalcomponent_add_property(inner,icalproperty_new_clone(attendee)); /* Add PRODID and VERSION */ icalcomponent_add_property(reply,icalproperty_new_version("2.0")); #ifndef WIN32 snprintf(tmp,sizeof(tmp), "-//SoftwareStudio//NONSGML %s %s //EN",PACKAGE,VERSION); #else snprintf(tmp,sizeof(tmp), "-//SoftwareStudio//NONSGML %s %s //EN",ICAL_PACKAGE,ICAL_VERSION); #endif icalcomponent_add_property(reply,icalproperty_new_prodid(tmp)); return reply; } icalcomponent* icalmessage_new_accept_reply(icalcomponent* c, const char* user, const char* msg) { icalcomponent *reply; icalproperty *attendee; icalcomponent *inner; icalerror_check_arg_rz(c,"c"); reply = icalmessage_new_reply_base(c,user,msg); if(reply == 0){ return 0; } inner = icalmessage_get_inner(reply); attendee = icalcomponent_get_first_property(inner, ICAL_ATTENDEE_PROPERTY); icalproperty_set_parameter(attendee, icalparameter_new_partstat(ICAL_PARTSTAT_ACCEPTED)); return reply; } icalcomponent* icalmessage_new_decline_reply(icalcomponent* c, const char* user, const char* msg) { icalcomponent *reply; icalproperty *attendee; icalcomponent *inner; icalerror_check_arg_rz(c,"c"); reply = icalmessage_new_reply_base(c,user,msg); inner = icalmessage_get_inner(reply); if(reply == 0){ return 0; } attendee = icalcomponent_get_first_property(inner, ICAL_ATTENDEE_PROPERTY); icalproperty_set_parameter(attendee, icalparameter_new_partstat(ICAL_PARTSTAT_DECLINED)); return reply; } /* New is modified version of old */ icalcomponent* icalmessage_new_counterpropose_reply(icalcomponent* oldc, icalcomponent* newc, const char* user, const char* msg) { icalcomponent *reply; icalerror_check_arg_rz(oldc,"oldc"); icalerror_check_arg_rz(newc,"newc"); reply = icalmessage_new_reply_base(newc,user,msg); icalcomponent_set_method(reply,ICAL_METHOD_COUNTER); return reply; } icalcomponent* icalmessage_new_delegate_reply(icalcomponent* c, const char* user, const char* delegatee, const char* msg) { icalcomponent *reply; icalproperty *attendee; icalcomponent *inner; icalerror_check_arg_rz(c,"c"); reply = icalmessage_new_reply_base(c,user,msg); inner = icalmessage_get_inner(reply); if(reply == 0){ return 0; } attendee = icalcomponent_get_first_property(inner, ICAL_ATTENDEE_PROPERTY); icalproperty_set_parameter(attendee, icalparameter_new_partstat(ICAL_PARTSTAT_DELEGATED)); icalproperty_set_parameter(attendee, icalparameter_new_delegatedto(delegatee)); return reply; } icalcomponent* icalmessage_new_delegate_request(icalcomponent* c, const char* user, const char* delegatee, const char* msg) { icalcomponent *reply; icalproperty *attendee; icalcomponent *inner; icalerror_check_arg_rz(c,"c"); reply = icalmessage_new_reply_base(c,user,msg); inner = icalmessage_get_inner(reply); if(reply == 0){ return 0; } icalcomponent_set_method(reply,ICAL_METHOD_REQUEST); attendee = icalcomponent_get_first_property(inner, ICAL_ATTENDEE_PROPERTY); icalproperty_set_parameter(attendee, icalparameter_new_partstat(ICAL_PARTSTAT_DELEGATED)); icalproperty_set_parameter(attendee, icalparameter_new_delegatedto(delegatee)); icalcomponent_add_property( inner, icalproperty_vanew_attendee( delegatee, icalparameter_new_delegatedfrom( icalproperty_get_attendee(attendee) ), 0 ) ); return reply; } icalcomponent* icalmessage_new_cancel_event(icalcomponent* c, const char* user, const char* msg); icalcomponent* icalmessage_new_cancel_instance(icalcomponent* c, const char* user, const char* msg); icalcomponent* icalmessage_new_cancel_all(icalcomponent* c, const char* user, const char* msg); icalcomponent* icalmessage_new_error_reply(icalcomponent* c, const char* user, const char* msg, const char* debug, icalrequeststatus code) { icalcomponent *reply; icalcomponent *inner, *cinner; struct icalreqstattype rs; icalerror_check_arg_rz(c,"c"); memset(&rs, 0, sizeof(struct icalreqstattype)); reply = icalmessage_new_reply_base(c,user,msg); inner = icalmessage_get_inner(reply); cinner = icalmessage_get_inner(c); if(reply == 0){ return 0; } if( code != ICAL_UNKNOWN_STATUS){ rs.code = code; rs.debug = debug; icalcomponent_add_property(inner, icalproperty_new_requeststatus(rs)); } else { /* code == ICAL_UNKNOWN_STATUS */ /* Copy all of the request status properties */ icalproperty *p; for(p = icalcomponent_get_first_property(cinner, ICAL_REQUESTSTATUS_PROPERTY); p != 0; p = icalcomponent_get_next_property(cinner, ICAL_REQUESTSTATUS_PROPERTY)){ icalcomponent_add_property(inner,icalproperty_new_clone(p)); } } return reply; } libical-1.0/src/libicalss/icalgauge.c0000664000076400007640000003237712132563133016567 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalgauge.c CREATOR: eric 23 December 1999 $Id: icalgauge.c,v 1.15 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #include #include "icalgauge.h" #include "icalgaugeimpl.h" #include #include "icalssyacc.h" int ssparse(void); extern char *input_buffer; extern char *input_buffer_p; struct icalgauge_impl *icalss_yy_gauge; icalgauge* icalgauge_new_from_sql(char* sql, int expand) { struct icalgauge_impl *impl; int r; if ( ( impl = (struct icalgauge_impl*) malloc(sizeof(struct icalgauge_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } impl->select = pvl_newlist(); impl->from = pvl_newlist(); impl->where = pvl_newlist(); impl->expand = expand; icalss_yy_gauge = impl; input_buffer = input_buffer_p = sql; r = ssparse(); if (r == 0) { return impl; } else { icalgauge_free(impl); return NULL; } } int icalgauge_get_expand(icalgauge* gauge) { return (gauge->expand); } void icalgauge_free(icalgauge* gauge) { struct icalgauge_where *w; assert(gauge->select != 0); assert(gauge->where != 0); assert(gauge->from != 0); if(gauge->select){ while( (w=pvl_pop(gauge->select)) != 0){ if(w->value != 0){ free(w->value); } free(w); } pvl_free(gauge->select); gauge->select = 0; } if(gauge->where){ while( (w=pvl_pop(gauge->where)) != 0){ if(w->value != 0){ free(w->value); } free(w); } pvl_free(gauge->where); gauge->where = 0; } if(gauge->from){ pvl_free(gauge->from); gauge->from = 0; } free(gauge); } /** Convert a VQUERY component into a gauge */ icalcomponent* icalgauge_make_gauge(icalcomponent* query); /** icaldirset_test compares a component against a gauge, and returns true if the component passes the test The gauge is a VCALENDAR component that specifies how to test the target components. The gauge holds a collection of VEVENT, VTODO or VJOURNAL sub-components. Each of the sub-components has a collection of properties that are compared to corresponding properties in the target component, according to the X-LIC-COMPARETYPE parameters to the gauge's properties. When a gauge has several sub-components, the results of testing the target against each of them is ORed together - the target component will pass if it matches any of the sub-components in the gauge. However, the results of matching the properties in a sub-component are ANDed -- the target must match every property in a gauge sub-component to match the sub-component. Here is an example: BEGIN:XROOT DTSTART;X-LIC-COMPARETYPE=LESS:19981025T020000 ORGANIZER;X-LIC-COMPARETYPE=EQUAL:mrbig@host.com END:XROOT BEGIN:XROOT LOCATION;X-LIC-COMPARETYPE=EQUAL:McNary's Pub END:XROOT This gauge has two sub-components; one which will match a VEVENT based on start time, and organizer, and another that matches based on LOCATION. A target component will pass the test if it matched either of the sub-components. */ int icalgauge_compare_recurse(icalcomponent* comp, icalcomponent* gauge) { int pass = 1,localpass = 0; icalproperty *p; icalcomponent *child,*subgauge; icalcomponent_kind gaugekind, compkind; icalerror_check_arg_rz( (comp!=0), "comp"); icalerror_check_arg_rz( (gauge!=0), "gauge"); gaugekind = icalcomponent_isa(gauge); compkind = icalcomponent_isa(comp); if( ! (gaugekind == compkind || gaugekind == ICAL_ANY_COMPONENT) ){ return 0; } /* Test properties. For each property in the gauge, search through the component for a similar property. If one is found, compare the two properties value with the comparison specified in the gauge with the X-LIC-COMPARETYPE parameter */ for(p = icalcomponent_get_first_property(gauge,ICAL_ANY_PROPERTY); p != 0; p = icalcomponent_get_next_property(gauge,ICAL_ANY_PROPERTY)){ icalproperty* targetprop; icalparameter* compareparam; icalparameter_xliccomparetype compare; int rel; /* The relationship between the gauge and target values.*/ /* Extract the comparison type from the gauge. If there is no comparison type, assume that it is "EQUAL" */ compareparam = icalproperty_get_first_parameter( p, ICAL_XLICCOMPARETYPE_PARAMETER); if (compareparam!=0){ compare = icalparameter_get_xliccomparetype(compareparam); } else { compare = ICAL_XLICCOMPARETYPE_EQUAL; } /* Find a property in the component that has the same type as the gauge property. HACK -- multiples of a single property type in the gauge will match only the first instance in the component */ targetprop = icalcomponent_get_first_property(comp, icalproperty_isa(p)); if(targetprop != 0){ /* Compare the values of the gauge property and the target property */ rel = icalvalue_compare(icalproperty_get_value(p), icalproperty_get_value(targetprop)); /* Now see if the comparison is equavalent to the comparison specified in the gauge */ if (rel == compare){ localpass++; } else if (compare == ICAL_XLICCOMPARETYPE_LESSEQUAL && ( rel == ICAL_XLICCOMPARETYPE_LESS || rel == ICAL_XLICCOMPARETYPE_EQUAL)) { localpass++; } else if (compare == ICAL_XLICCOMPARETYPE_GREATEREQUAL && ( rel == ICAL_XLICCOMPARETYPE_GREATER || rel == ICAL_XLICCOMPARETYPE_EQUAL)) { localpass++; } else if (compare == ICAL_XLICCOMPARETYPE_NOTEQUAL && ( rel == ICAL_XLICCOMPARETYPE_GREATER || rel == ICAL_XLICCOMPARETYPE_LESS)) { localpass++; } else { localpass = 0; } pass = pass && (localpass>0); } } /* Test subcomponents. Look for a child component that has a counterpart in the gauge. If one is found, recursively call icaldirset_test */ for(subgauge = icalcomponent_get_first_component(gauge,ICAL_ANY_COMPONENT); subgauge != 0; subgauge = icalcomponent_get_next_component(gauge,ICAL_ANY_COMPONENT)){ gaugekind = icalcomponent_isa(subgauge); if (gaugekind == ICAL_ANY_COMPONENT){ child = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); } else { child = icalcomponent_get_first_component(comp,gaugekind); } if(child !=0){ localpass = icalgauge_compare_recurse(child,subgauge); pass = pass && localpass; } else { pass = 0; } } return pass; } int icalgauge_compare(icalgauge* gauge,icalcomponent* comp) { icalcomponent *inner; int local_pass = 0; int last_clause = 1, this_clause = 1; pvl_elem e; icalcomponent_kind kind; icalproperty *rrule; int compare_recur = 0; icalerror_check_arg_rz( (comp!=0), "comp"); icalerror_check_arg_rz( (gauge!=0), "gauge"); inner = icalcomponent_get_first_real_component(comp); if(inner == 0){ /* Wally Yau: our component is not always wrapped with * a . It's not an error. * icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); * return 0; */ kind = icalcomponent_isa(comp); if(kind == ICAL_VEVENT_COMPONENT || kind == ICAL_VTODO_COMPONENT || kind == ICAL_VJOURNAL_COMPONENT || kind == ICAL_VQUERY_COMPONENT || kind == ICAL_VAGENDA_COMPONENT){ inner = comp; } else { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } inner = comp; } /* Check that this component is one of the FROM types */ local_pass = 0; for(e = pvl_head(gauge->from);e!=0;e=pvl_next(e)){ icalcomponent_kind k = (icalcomponent_kind)pvl_data(e); if(k == icalcomponent_isa(inner)){ local_pass=1; } } if(local_pass == 0){ return 0; } /**** Check each where clause against the component ****/ for(e = pvl_head(gauge->where);e!=0;e=pvl_next(e)){ struct icalgauge_where *w = pvl_data(e); icalcomponent *sub_comp; icalvalue *v; icalproperty *prop; icalvalue_kind vk; if(w->prop == ICAL_NO_PROPERTY || w->value == 0){ icalerror_set_errno(ICAL_INTERNAL_ERROR); return 0; } /* First, create a value from the gauge */ vk = icalenum_property_kind_to_value_kind(w->prop); if(vk == ICAL_NO_VALUE){ icalerror_set_errno(ICAL_INTERNAL_ERROR); return 0; } if (w->compare == ICALGAUGECOMPARE_ISNULL || w->compare == ICALGAUGECOMPARE_ISNOTNULL) v = icalvalue_new(vk); else v = icalvalue_new_from_string(vk,w->value); if (v == 0){ /* Keep error set by icalvalue_from-string*/ return 0; } /* Now find the corresponding property in the component, descending into a sub-component if necessary */ if(w->comp == ICAL_NO_COMPONENT){ sub_comp = inner; } else { sub_comp = icalcomponent_get_first_component(inner,w->comp); if(sub_comp == 0){ icalvalue_free(v); return 0; } } /* check if it is a recurring */ rrule = icalcomponent_get_first_property(sub_comp,ICAL_RRULE_PROPERTY); if (gauge->expand && rrule) { if (w->prop == ICAL_DTSTART_PROPERTY || w->prop == ICAL_DTEND_PROPERTY || w->prop == ICAL_DUE_PROPERTY){ /** needs to use recurrence-id to do comparison */ compare_recur = 1; } } this_clause = 0; local_pass = (w->compare == ICALGAUGECOMPARE_ISNULL) ? 1 : 0; for(prop = icalcomponent_get_first_property(sub_comp,w->prop); prop != 0; prop = icalcomponent_get_next_property(sub_comp,w->prop)){ icalvalue* prop_value; icalgaugecompare relation; if (w->compare == ICALGAUGECOMPARE_ISNULL) { local_pass = 0; break; } if (w->compare == ICALGAUGECOMPARE_ISNOTNULL) { local_pass = 1; break; } if (compare_recur) { icalproperty *p = icalcomponent_get_first_property(sub_comp, ICAL_RECURRENCEID_PROPERTY); prop_value = icalproperty_get_value(p); } else /* prop value from this component */ prop_value = icalproperty_get_value(prop); relation = (icalgaugecompare)icalvalue_compare(prop_value,v); if (relation == w->compare){ local_pass++; } else if (w->compare == ICALGAUGECOMPARE_LESSEQUAL && ( relation == ICALGAUGECOMPARE_LESS || relation == ICALGAUGECOMPARE_EQUAL)) { local_pass++; } else if (w->compare == ICALGAUGECOMPARE_GREATEREQUAL && ( relation == ICALGAUGECOMPARE_GREATER || relation == ICALGAUGECOMPARE_EQUAL)) { local_pass++; } else if (w->compare == ICALGAUGECOMPARE_NOTEQUAL && ( relation == ICALGAUGECOMPARE_GREATER || relation == ICALGAUGECOMPARE_LESS)) { local_pass++; } else { local_pass = 0; } } this_clause = local_pass > 0 ? 1 : 0; /* Now look at the logic operator for this clause to see how the value should be merge with the previous clause */ if(w->logic == ICALGAUGELOGIC_AND){ last_clause = this_clause && last_clause; } else if(w->logic == ICALGAUGELOGIC_OR) { last_clause = this_clause || last_clause; } else { last_clause = this_clause; } icalvalue_free(v); }/**** check next one in where clause ****/ return last_clause; } /** @brief Debug * Print gauge information to stdout. */ void icalgauge_dump(icalgauge* gauge) { pvl_elem p; printf("--- Select ---\n"); for(p = pvl_head(gauge->select);p!=0;p=pvl_next(p)){ struct icalgauge_where *w = pvl_data(p); if(w->comp != ICAL_NO_COMPONENT){ printf("%s ",icalenum_component_kind_to_string(w->comp)); } if(w->prop != ICAL_NO_PROPERTY){ printf("%s ",icalenum_property_kind_to_string(w->prop)); } if (w->compare != ICALGAUGECOMPARE_NONE){ printf("%d ",w->compare); } if (w->value!=0){ printf("%s",w->value); } printf("\n"); } printf("--- From ---\n"); for(p = pvl_head(gauge->from);p!=0;p=pvl_next(p)){ icalcomponent_kind k = (icalcomponent_kind)pvl_data(p); printf("%s\n",icalenum_component_kind_to_string(k)); } printf("--- Where ---\n"); for(p = pvl_head(gauge->where);p!=0;p=pvl_next(p)){ struct icalgauge_where *w = pvl_data(p); if(w->logic != ICALGAUGELOGIC_NONE){ printf("%d ",w->logic); } if(w->comp != ICAL_NO_COMPONENT){ printf("%s ",icalenum_component_kind_to_string(w->comp)); } if(w->prop != ICAL_NO_PROPERTY){ printf("%s ",icalenum_property_kind_to_string(w->prop)); } if (w->compare != ICALGAUGECOMPARE_NONE){ printf("%d ",w->compare); } if (w->value!=0){ printf("%s",w->value); } printf("\n"); } } libical-1.0/src/libicalss/icalcomponent.h0000664000076400007640000000672312132563133017502 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalcomponent.h CREATOR: eric 20 March 1999 (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom The original code is icalcomponent.h ======================================================================*/ #ifndef ICALCOMPONENT_H #define ICALCOMPONENT_H #include #include #include /* defines icalcomponent_kind */ typedef void icalcomponent; icalcomponent* icalcomponent_new(icalcomponent_kind kind); icalcomponent* icalcomponent_new_clone(icalcomponent* component); icalcomponent* icalcomponent_new_from_string(char* str); icalcomponent* icalcomponent_vanew(icalcomponent_kind kind, ...); void icalcomponent_free(icalcomponent* component); char* icalcomponent_as_ical_string(icalcomponent* component); int icalcomponent_is_valid(icalcomponent* component); icalcomponent_kind icalcomponent_isa(icalcomponent* component); int icalcomponent_isa_component (void* component); /* * Working with properties */ void icalcomponent_add_property(icalcomponent* component, icalproperty* property); void icalcomponent_remove_property(icalcomponent* component, icalproperty* property); int icalcomponent_count_properties(icalcomponent* component, icalproperty_kind kind); /* Iterate through the properties */ icalproperty* icalcomponent_get_current_property(icalcomponent* component); icalproperty* icalcomponent_get_first_property(icalcomponent* component, icalproperty_kind kind); icalproperty* icalcomponent_get_next_property(icalcomponent* component, icalproperty_kind kind); /* Return a null-terminated array of icalproperties*/ icalproperty** icalcomponent_get_properties(icalcomponent* component, icalproperty_kind kind); /* * Working with components */ void icalcomponent_add_component(icalcomponent* parent, icalcomponent* child); void icalcomponent_remove_component(icalcomponent* parent, icalcomponent* child); int icalcomponent_count_components(icalcomponent* component, icalcomponent_kind kind); /* Iterate through components */ icalcomponent* icalcomponent_get_current_component (icalcomponent* component); icalcomponent* icalcomponent_get_first_component(icalcomponent* component, icalcomponent_kind kind); icalcomponent* icalcomponent_get_next_component(icalcomponent* component, icalcomponent_kind kind); /* Return a null-terminated array of icalproperties*/ icalproperty** icalcomponent_get_component(icalcomponent* component, icalproperty_kind kind); /* Working with embedded error properties */ int icalcomponent_count_errors(icalcomponent* component); void icalcomponent_strip_errors(icalcomponent* component); /* Internal operations. You don't see these... */ icalcomponent* icalcomponent_get_parent(icalcomponent* component); void icalcomponent_set_parent(icalcomponent* component, icalcomponent* parent); #endif /* !ICALCOMPONENT_H */ libical-1.0/src/libicalss/icalfilesetimpl.h0000664000076400007640000000300712132563133020005 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalfilesetimpl.h CREATOR: eric 23 December 1999 $Id: icalfilesetimpl.h,v 1.7 2008-01-02 20:07:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALFILESETIMPL_H #define ICALFILESETIMPL_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* This definition is in its own file so it can be kept out of the main header file, but used by "friend classes" like icaldirset*/ #define ICALFILESET_ID "fset" struct icalfileset_impl { icalset super; /**< parent class */ char *path; /**< pathname of file */ icalfileset_options options; /**< copy of options passed to icalset_new() */ icalcomponent* cluster; /**< cluster containing data */ icalgauge* gauge; /**< gauge for filtering out data */ int changed; /**< boolean flag, 1 if data has changed */ int fd; /**< file descriptor */ }; #endif libical-1.0/src/libicalss/icalssyacc.c0000664000076400007640000014412112132563133016753 0ustar allenallen/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse ssparse #define yylex sslex #define yyerror sserror #define yylval sslval #define yychar sschar #define yydebug ssdebug #define yynerrs ssnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { STRING = 258, SELECT = 259, FROM = 260, WHERE = 261, COMMA = 262, QUOTE = 263, EQUALS = 264, NOTEQUALS = 265, LESS = 266, GREATER = 267, LESSEQUALS = 268, GREATEREQUALS = 269, AND = 270, OR = 271, EOL = 272, END = 273, IS = 274, NOT = 275, SQLNULL = 276 }; #endif /* Tokens. */ #define STRING 258 #define SELECT 259 #define FROM 260 #define WHERE 261 #define COMMA 262 #define QUOTE 263 #define EQUALS 264 #define NOTEQUALS 265 #define LESS 266 #define GREATER 267 #define LESSEQUALS 268 #define GREATEREQUALS 269 #define AND 270 #define OR 271 #define EOL 272 #define END 273 #define IS 274 #define NOT 275 #define SQLNULL 276 /* Copy the first part of user declarations. */ /* -*- Mode: C -*- */ /* ====================================================================== */ /* FILE: icalssyacc.y */ /* CREATOR: eric 08 Aug 2000 */ /* */ /* DESCRIPTION: */ /* */ /* $Id: icalssyacc.y,v 1.10 2008-01-14 00:35:26 dothebart Exp $ */ /* $Locker: $ */ /* */ /* (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org */ /* */ /* This program is free software; you can redistribute it and/or modify */ /* it under the terms of either: */ /* */ /* The LGPL as published by the Free Software Foundation, version */ /* 2.1, available at: http://www.fsf.org/copyleft/lesser.html */ /* */ /* Or: */ /* */ /* The Mozilla Public License Version 1.0. You may obtain a copy of */ /* the License at http://www.mozilla.org/MPL/ */ /* */ /* The Original Code is eric. The Initial Developer of the Original */ /* Code is Eric Busboom */ /* */ /* ====================================================================== */ #define YYDEBUG 1 #include #include /* for strdup() */ #include /* for SHRT_MAX*/ #include #include "icalgauge.h" #include "icalgaugeimpl.h" extern struct icalgauge_impl *icalss_yy_gauge; #define YYPARSE_PARAM yy_globals #define YYLEX_PARAM yy_globals #define YY_EXTRA_TYPE icalgauge_impl* void sserror(char *s); static void ssyacc_add_where(struct icalgauge_impl* impl, char* prop, icalgaugecompare compare , char* value); static void ssyacc_add_select(struct icalgauge_impl* impl, char* str1); static void ssyacc_add_from(struct icalgauge_impl* impl, char* str1); static void set_logic(struct icalgauge_impl* impl,icalgaugelogic l); /* Don't know why I need this.... */ /* older flex version (such as included in OpenBSD) takes a different calling syntax */ #ifdef YYPARSE_PARAM int sslex(void *YYPARSE_PARAM); #else int sslex(void); #endif /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { char* v_string; } /* Line 187 of yacc.c. */ YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 6 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 31 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 22 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 6 /* YYNRULES -- Number of rules. */ #define YYNRULES 20 /* YYNRULES -- Number of states. */ #define YYNSTATES 38 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 276 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 10, 15, 17, 19, 23, 25, 29, 30, 34, 38, 43, 47, 51, 55, 59, 63, 65, 69 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 23, 0, -1, 4, 24, 5, 25, 6, 27, -1, 4, 24, 5, 25, -1, 1, -1, 3, -1, 24, 7, 3, -1, 3, -1, 25, 7, 3, -1, -1, 3, 9, 3, -1, 3, 19, 21, -1, 3, 19, 20, 21, -1, 3, 10, 3, -1, 3, 11, 3, -1, 3, 12, 3, -1, 3, 13, 3, -1, 3, 14, 3, -1, 26, -1, 27, 15, 26, -1, 27, 16, 26, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 73, 73, 74, 75, 82, 83, 88, 89, 92, 94, 95, 96, 97, 98, 99, 100, 101, 105, 106, 107 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "STRING", "SELECT", "FROM", "WHERE", "COMMA", "QUOTE", "EQUALS", "NOTEQUALS", "LESS", "GREATER", "LESSEQUALS", "GREATEREQUALS", "AND", "OR", "EOL", "END", "IS", "NOT", "SQLNULL", "$accept", "query_min", "select_list", "from_list", "where_clause", "where_list", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 22, 23, 23, 23, 24, 24, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 6, 4, 1, 1, 3, 1, 3, 0, 3, 3, 4, 3, 3, 3, 3, 3, 1, 3, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 4, 0, 0, 5, 0, 1, 0, 0, 7, 3, 6, 9, 0, 0, 18, 2, 8, 0, 0, 0, 0, 0, 0, 0, 9, 9, 10, 13, 14, 15, 16, 17, 0, 11, 19, 20, 12 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 3, 5, 10, 15, 16 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -10 static const yytype_int8 yypact[] = { 5, -10, 9, 20, -10, 6, -10, 18, 19, -10, 1, -10, 21, 22, -9, -10, -1, -10, 23, 24, 25, 26, 27, 28, -4, 21, 21, -10, -10, -10, -10, -10, -10, 2, -10, -10, -10, -10 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -10, -10, -10, -10, -7, -10 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 18, 19, 20, 21, 22, 23, 1, 12, 13, 2, 24, 7, 4, 8, 25, 26, 33, 34, 35, 36, 6, 9, 11, 37, 14, 17, 27, 28, 29, 30, 31, 32 }; static const yytype_uint8 yycheck[] = { 9, 10, 11, 12, 13, 14, 1, 6, 7, 4, 19, 5, 3, 7, 15, 16, 20, 21, 25, 26, 0, 3, 3, 21, 3, 3, 3, 3, 3, 3, 3, 3 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 1, 4, 23, 3, 24, 0, 5, 7, 3, 25, 3, 6, 7, 3, 26, 27, 3, 9, 10, 11, 12, 13, 14, 19, 15, 16, 3, 3, 3, 3, 3, 3, 20, 21, 26, 26, 21 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 4: { yyclearin; YYABORT; } break; case 5: {ssyacc_add_select(icalss_yy_gauge,(yyvsp[(1) - (1)].v_string));} break; case 6: {ssyacc_add_select(icalss_yy_gauge,(yyvsp[(3) - (3)].v_string));} break; case 7: {ssyacc_add_from(icalss_yy_gauge,(yyvsp[(1) - (1)].v_string));} break; case 8: {ssyacc_add_from(icalss_yy_gauge,(yyvsp[(3) - (3)].v_string));} break; case 10: {ssyacc_add_where(icalss_yy_gauge,(yyvsp[(1) - (3)].v_string),ICALGAUGECOMPARE_EQUAL,(yyvsp[(3) - (3)].v_string)); } break; case 11: {ssyacc_add_where(icalss_yy_gauge,(yyvsp[(1) - (3)].v_string),ICALGAUGECOMPARE_ISNULL,""); } break; case 12: {ssyacc_add_where(icalss_yy_gauge,(yyvsp[(1) - (4)].v_string),ICALGAUGECOMPARE_ISNOTNULL,""); } break; case 13: {ssyacc_add_where(icalss_yy_gauge,(yyvsp[(1) - (3)].v_string),ICALGAUGECOMPARE_NOTEQUAL,(yyvsp[(3) - (3)].v_string)); } break; case 14: {ssyacc_add_where(icalss_yy_gauge,(yyvsp[(1) - (3)].v_string),ICALGAUGECOMPARE_LESS,(yyvsp[(3) - (3)].v_string)); } break; case 15: {ssyacc_add_where(icalss_yy_gauge,(yyvsp[(1) - (3)].v_string),ICALGAUGECOMPARE_GREATER,(yyvsp[(3) - (3)].v_string)); } break; case 16: {ssyacc_add_where(icalss_yy_gauge,(yyvsp[(1) - (3)].v_string),ICALGAUGECOMPARE_LESSEQUAL,(yyvsp[(3) - (3)].v_string)); } break; case 17: {ssyacc_add_where(icalss_yy_gauge,(yyvsp[(1) - (3)].v_string),ICALGAUGECOMPARE_GREATEREQUAL,(yyvsp[(3) - (3)].v_string)); } break; case 18: {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_NONE);} break; case 19: {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_AND);} break; case 20: {set_logic(icalss_yy_gauge,ICALGAUGELOGIC_OR);} break; /* Line 1267 of yacc.c. */ default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } static void ssyacc_add_where(struct icalgauge_impl* impl, char* str1, icalgaugecompare compare , char* value_str) { struct icalgauge_where *where; char *compstr, *propstr, *c, *s,*l; if ( (where = malloc(sizeof(struct icalgauge_where))) ==0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } memset(where,0,sizeof(struct icalgauge_where)); where->logic = ICALGAUGELOGIC_NONE; where->compare = ICALGAUGECOMPARE_NONE; where->comp = ICAL_NO_COMPONENT; where->prop = ICAL_NO_PROPERTY; /* remove enclosing quotes */ s = value_str; if(*s == '\''){ s++; } l = s+strlen(s)-1; if(*l == '\''){ *l=0; } where->value = strdup(s); /* Is there a period in str1 ? If so, the string specified both a */ /* component and a property */ if( (c = strrchr(str1,'.')) != 0){ compstr = str1; propstr = c+1; *c = '\0'; } else { compstr = 0; propstr = str1; } /* Handle the case where a component was specified */ if(compstr != 0){ where->comp = icalenum_string_to_component_kind(compstr); } else { where->comp = ICAL_NO_COMPONENT; } where->prop = icalenum_string_to_property_kind(propstr); where->compare = compare; if(where->value == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); free(where->value); return; } pvl_push(impl->where,where); } static void set_logic(struct icalgauge_impl* impl,icalgaugelogic l) { pvl_elem e = pvl_tail(impl->where); struct icalgauge_where *where = pvl_data(e); where->logic = l; } static void ssyacc_add_select(struct icalgauge_impl* impl, char* str1) { char *c, *compstr, *propstr; struct icalgauge_where *where; /* Uses only the prop and comp fields of the where structure */ if ( (where = malloc(sizeof(struct icalgauge_where))) ==0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } memset(where,0,sizeof(struct icalgauge_where)); where->logic = ICALGAUGELOGIC_NONE; where->compare = ICALGAUGECOMPARE_NONE; where->comp = ICAL_NO_COMPONENT; where->prop = ICAL_NO_PROPERTY; /* Is there a period in str1 ? If so, the string specified both a */ /* component and a property */ if( (c = strrchr(str1,'.')) != 0){ compstr = str1; propstr = c+1; *c = '\0'; } else { compstr = 0; propstr = str1; } /* Handle the case where a component was specified */ if(compstr != 0){ where->comp = icalenum_string_to_component_kind(compstr); } else { where->comp = ICAL_NO_COMPONENT; } /* If the property was '*', then accept all properties */ if(strcmp("*",propstr) == 0) { where->prop = ICAL_ANY_PROPERTY; } else { where->prop = icalenum_string_to_property_kind(propstr); } if(where->prop == ICAL_NO_PROPERTY){ free(where); icalerror_set_errno(ICAL_BADARG_ERROR); return; } pvl_push(impl->select,where); } static void ssyacc_add_from(struct icalgauge_impl* impl, char* str1) { icalcomponent_kind ckind; ckind = icalenum_string_to_component_kind(str1); if(ckind == ICAL_NO_COMPONENT){ assert(0); } pvl_push(impl->from,(void*)ckind); } void sserror(char *s){ fprintf(stderr,"Parse error \'%s\'\n", s); icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); } libical-1.0/src/libicalss/icalmessage.h0000664000076400007640000000362312132563133017120 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalmessage.h CREATOR: eric 07 Nov 2000 $Id: icalmessage.h,v 1.3 2008-01-02 20:07:41 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ =========================================================================*/ #include #ifndef ICALMESSAGE_H #define ICALMESSAGE_H icalcomponent* icalmessage_new_accept_reply(icalcomponent* c, const char* user, const char* msg); icalcomponent* icalmessage_new_decline_reply(icalcomponent* c, const char* user, const char* msg); /* New is modified version of old */ icalcomponent* icalmessage_new_counterpropose_reply(icalcomponent* oldc, icalcomponent* newc, const char* user, const char* msg); icalcomponent* icalmessage_new_delegate_reply(icalcomponent* c, const char* user, const char* delegatee, const char* msg); icalcomponent* icalmessage_new_cancel_event(icalcomponent* c, const char* user, const char* msg); icalcomponent* icalmessage_new_cancel_instance(icalcomponent* c, const char* user, const char* msg); icalcomponent* icalmessage_new_cancel_all(icalcomponent* c, const char* user, const char* msg); icalcomponent* icalmessage_new_error_reply(icalcomponent* c, const char* user, const char* msg, const char* debug, icalrequeststatus rs); #endif /* ICALMESSAGE_H*/ libical-1.0/src/libicalss/icalbdbset.c0000664000076400007640000012216012132563133016730 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalbdbset.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalbdbset.h" #include "icalgauge.h" #include #include /* for stat */ #include #ifndef WIN32 #include /* for stat, getpid, unlink */ #include /* for fcntl */ #else #define S_IRUSR S_IREAD /* R for owner */ #define S_IWUSR S_IWRITE /* W for owner */ #endif #include #include #include "icalbdbsetimpl.h" #define STRBUF_LEN 255 #define MAX_RETRY 5 extern int errno; /* these are just stub functions */ icalerrorenum icalbdbset_read_database(icalbdbset* bset, char *(*pfunc)(const DBT *dbt)); icalerrorenum icalbdbset_create_cluster(const char *path); int icalbdbset_cget(DBC *dbcp, DBT *key, DBT *data, int access_method); static int _compare_keys(DB *dbp, const DBT *a, const DBT *b); /** Default options used when NULL is passed to icalset_new() **/ icalbdbset_options icalbdbset_options_default = {ICALBDB_EVENTS, DB_BTREE, 0644, 0, NULL, NULL}; static DB_ENV *ICAL_DB_ENV = 0; /** Initialize the db environment */ int icalbdbset_init_dbenv(char *db_env_dir, void (*logDbFunc)(const char*, char*)) { int ret; int flags; if (db_env_dir) { struct stat env_dir_sb; if (stat(db_env_dir, &env_dir_sb)) { fprintf(stderr, "The directory '%s' is missing, please create it.\n", db_env_dir); return EINVAL; } } ret = db_env_create(&ICAL_DB_ENV, 0); if (ret) { /* some kind of error... */ return ret; } /* Do deadlock detection internally */ if ((ret = ICAL_DB_ENV->set_lk_detect(ICAL_DB_ENV, DB_LOCK_DEFAULT)) != 0) { char * foo = db_strerror(ret); fprintf(stderr, "Could not initialize the database locking environment\n"); return ret; } flags = DB_INIT_LOCK | DB_INIT_TXN | DB_CREATE | DB_THREAD | \ DB_RECOVER | DB_INIT_LOG | DB_INIT_MPOOL; ret = ICAL_DB_ENV->open(ICAL_DB_ENV, db_env_dir, flags, S_IRUSR|S_IWUSR); if (ret) { char * foo = db_strerror(ret); ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "dbenv->open"); return ret; } /* display additional error messages */ if (logDbFunc != NULL) { ICAL_DB_ENV->set_errcall(ICAL_DB_ENV, logDbFunc); } return ret; } void icalbdbset_checkpoint(void) { int ret; char *err; switch (ret = ICAL_DB_ENV->txn_checkpoint(ICAL_DB_ENV, 0,0,0)) { case 0: case DB_INCOMPLETE: break; default: err = db_strerror(ret); ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "checkpoint failed"); abort(); } } void icalbdbset_rmdbLog(void) { int ret = 0; char** listp; /* remove log files that are archivable (ie. no longer needed) */ if (ICAL_DB_ENV->log_archive(ICAL_DB_ENV, &listp, DB_ARCH_ABS) == 0) { if (listp != NULL) { int ii = 0; while (listp[ii] != NULL) { ret = unlink(listp[ii]); ii++; } free(listp); } } } int icalbdbset_cleanup(void) { int ret = 0; /* one last checkpoint.. */ icalbdbset_checkpoint(); /* remove logs that are not needed anymore */ icalbdbset_rmdbLog(); if (ICAL_DB_ENV) ret = ICAL_DB_ENV->close(ICAL_DB_ENV, 0); return ret; } DB_ENV *icalbdbset_get_env(void) { return ICAL_DB_ENV; } /** Initialize an icalbdbset. Also attempts to populate from the * database (primary if only dbp is given, secondary if sdbp is * given) and creates an empty object if retrieval is unsuccessful. * pfunc is used to unpack data from the database. If not given, we * assume data is a string. */ icalset* icalbdbset_init(icalset* set, const char* dsn, void* options_in) { icalbdbset *bset = (icalbdbset*)set; icalbdbset_options *options = options_in; int ret; DB *cal_db; char *subdb_name; if (options == NULL) *options = icalbdbset_options_default; switch (options->subdb) { case ICALBDB_CALENDARS: subdb_name = "calendars"; break; case ICALBDB_EVENTS: subdb_name = "events"; break; case ICALBDB_TODOS: subdb_name = "todos"; break; case ICALBDB_REMINDERS: subdb_name = "reminders"; break; } cal_db = icalbdbset_bdb_open(set->dsn, subdb_name, options->dbtype, options->mode, options->flag); if (cal_db == NULL) return NULL; bset->dbp = cal_db; bset->sdbp = NULL; bset->gauge = 0; bset->cluster = 0; if ((ret = icalbdbset_read_database(bset, options->pfunc)) != ICAL_NO_ERROR) { return NULL; } return (icalset *)bset; } /** open a database and return a reference to it. Used only for opening the primary index. flag = set_flag() DUP | DUP_SORT */ icalset* icalbdbset_new(const char* database_filename, icalbdbset_subdb_type subdb_type, int dbtype, int flag) { icalbdbset_options options = icalbdbset_options_default; options.subdb = subdb_type; options.dbtype = dbtype; options.flag = flag; /* this will in turn call icalbdbset_init */ return icalset_new(ICAL_BDB_SET, database_filename, &options); } /** * Open a secondary database, used for accessing secondary indices. * The callback function tells icalbdbset how to associate secondary * key information with primary data. See the BerkeleyDB reference * guide for more information. */ DB * icalbdbset_bdb_open_secondary(DB *dbp, const char *database, const char *sub_database, int (*callback) (DB *db, const DBT *dbt1, const DBT *dbt2, DBT *dbt3), int type) { int ret; int flags; DB *sdbp = NULL; if (!sub_database) return NULL; if (!ICAL_DB_ENV) icalbdbset_init_dbenv(NULL, NULL); /* Open/create secondary */ if((ret = db_create(&sdbp, ICAL_DB_ENV, 0)) != 0) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "secondary index: %s", sub_database); return NULL; } if ((ret = sdbp->set_flags(sdbp, DB_DUP | DB_DUPSORT)) != 0) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "set_flags error for secondary index: %s", sub_database); return NULL; } flags = DB_CREATE | DB_THREAD; if ((ret = sdbp->open(sdbp, database, sub_database, type, (u_int32_t) flags, 0644)) != 0) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "failed to open secondary index: %s", sub_database); if (ret == DB_RUNRECOVERY) abort(); else return NULL; } /* Associate the primary index with a secondary */ if((ret = dbp->associate(dbp, sdbp, callback, 0)) != 0) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "failed to associate secondary index: %s", sub_database); return NULL; } return sdbp; } DB* icalbdbset_bdb_open(const char* path, const char *subdb, int dbtype, mode_t mode, int flag) { DB *dbp = NULL; int ret; int flags; /* Initialize the correct set of db subsystems (see capdb.c) */ flags = DB_CREATE | DB_THREAD; /* should just abort here instead of opening an env in the current dir.. */ if (!ICAL_DB_ENV) icalbdbset_init_dbenv(NULL, NULL); /* Create and initialize database object, open the database. */ if ((ret = db_create(&dbp, ICAL_DB_ENV, 0)) != 0) { return (NULL); } /* set comparison function, if BTREE */ if (dbtype == DB_BTREE) dbp->set_bt_compare(dbp, _compare_keys); /* set DUP, DUPSORT */ if (flag != 0) dbp->set_flags(dbp, flag); if ((ret = dbp->open(dbp, path, subdb, dbtype, flags, mode)) != 0) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "%s (database: %s): open failed.", path, subdb); if (ret == DB_RUNRECOVERY) abort(); else return NULL; } return (dbp); } /* icalbdbset_parse_data -- parses using pfunc to unpack data. */ char *icalbdbset_parse_data(DBT *dbt, char *(*pfunc)(const DBT *dbt)) { char *ret; if(pfunc) { ret = (char *)pfunc(dbt); } else { ret = (char *) dbt->data; } return (ret); } /* This populates a cluster with the entire contents of a database */ icalerrorenum icalbdbset_read_database(icalbdbset* bset, char *(*pfunc)(const DBT *dbt)) { DB *dbp; DBC *dbcp; DBT key, data; char *str, *szpstr; int ret; char keystore[256]; char datastore[1024]; char *more_mem = NULL; DB_TXN *tid; memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); if (bset->sdbp) { dbp = bset->sdbp; } else { dbp = bset->dbp; } if(!dbp) { goto err1; } bset->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT); if ((ret = ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, NULL, &tid, 0)) != 0) { char *foo = db_strerror(ret); abort(); } /* acquire a cursor for the database */ if ((ret = dbp->cursor(dbp, tid, &dbcp, 0)) != 0) { dbp->err(dbp, ret, "primary index"); goto err1; } key.flags = DB_DBT_USERMEM; key.data = keystore; key.ulen = sizeof(keystore); data.flags= DB_DBT_USERMEM; data.data = datastore; data.ulen = sizeof(datastore); /* fetch the key/data pair */ while (1) { ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT); if (ret == DB_NOTFOUND) { break; } else if (ret == ENOMEM) { if (more_mem) free (more_mem); more_mem = malloc(data.ulen+1024); data.data = more_mem; data.ulen = data.ulen+1024; } else if (ret == DB_LOCK_DEADLOCK) { char *foo = db_strerror(ret); abort(); /* should retry in case of DB_LOCK_DEADLOCK */ } else if (ret) { char *foo = db_strerror(ret); /* some other weird-ass error */ dbp->err(dbp, ret, "cursor"); abort(); } else { icalcomponent *cl; /* this prevents an array read bounds error */ if((str = (char *)calloc(data.size + 1, sizeof(char)))==NULL) goto err2; memcpy(str, (char *)data.data, data.size); cl = icalparser_parse_string(str); icalcomponent_add_component(bset->cluster, cl); free(str); } } if(ret != DB_NOTFOUND) { goto err2; } if (more_mem) { free(more_mem); more_mem = NULL; } if ((ret = dbcp->c_close(dbcp)) != 0) { char * foo = db_strerror(ret); abort(); /* should retry in case of DB_LOCK_DEADLOCK */ } if ((ret = tid->commit(tid, 0)) != 0) { char * foo = db_strerror(ret); abort(); } return ICAL_NO_ERROR; err2: if (more_mem) free(more_mem); dbcp->c_close(dbcp); abort(); /* should retry in case of DB_LOCK_DEADLOCK */ return ICAL_INTERNAL_ERROR; err1: dbp->err(dbp, ret, "cursor index"); abort(); return (ICAL_FILE_ERROR); } /* XXX add more to this */ void icalbdbset_free(icalset* set) { icalbdbset *bset = (icalbdbset*)set; int ret; icalerror_check_arg_rv((bset!=0),"bset"); if (bset->cluster != 0){ icalbdbset_commit(set); icalcomponent_free(bset->cluster); bset->cluster=0; } if(bset->gauge !=0){ icalgauge_free(bset->gauge); } if(bset->path != 0){ free((char *)bset->path); bset->path = 0; } if(bset->sindex != 0) { free((char *)bset->sindex); bset->sindex = 0; } if (bset->dbp && ((ret = bset->dbp->close(bset->dbp, 0)) != 0)) { } bset->dbp = NULL; } /* return cursor is in rdbcp */ int icalbdbset_acquire_cursor(DB *dbp, DB_TXN *tid, DBC **rdbcp) { int ret=0; if((ret = dbp->cursor(dbp, tid, rdbcp, 0)) != 0) { dbp->err(dbp, ret, "couldn't open cursor"); goto err1; } return ICAL_NO_ERROR; err1: return ICAL_FILE_ERROR; } /* returns key/data in arguments */ int icalbdbset_get_first(DBC *dbcp, DBT *key, DBT *data) { return icalbdbset_cget(dbcp, key, data, DB_FIRST); } int icalbdbset_get_next(DBC *dbcp, DBT *key, DBT *data) { return icalbdbset_cget(dbcp, key, data, DB_NEXT); } int icalbdbset_get_last(DBC *dbcp, DBT *key, DBT *data) { return icalbdbset_cget(dbcp, key, data, DB_LAST); } int icalbdbset_get_key(DBC *dbcp, DBT *key, DBT *data) { return icalbdbset_cget(dbcp, key, data, DB_SET); } int icalbdbset_delete(DB *dbp, DBT *key) { DB_TXN *tid; int ret; int done = 0; int retry = 0; while ((retry < MAX_RETRY) && !done) { if ((ret = ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, NULL, &tid, 0)) != 0) { if (ret == DB_LOCK_DEADLOCK) { retry++; continue; } else { char *foo = db_strerror(ret); abort(); } } if ((ret = dbp->del(dbp, tid, key, 0)) != 0) { if (ret == DB_NOTFOUND) { /* do nothing - not an error condition */ } else if (ret == DB_LOCK_DEADLOCK) { tid->abort(tid); retry++; continue; } else { char *strError = db_strerror(ret); icalerror_warn("icalbdbset_delete faild: "); icalerror_warn(strError); tid->abort(tid); return ICAL_FILE_ERROR; } } if ((ret = tid->commit(tid, 0)) != 0) { if (ret == DB_LOCK_DEADLOCK) { tid->abort(tid); retry++; continue; } else { char * foo = db_strerror(ret); abort(); } } done = 1; /* all is well */ } if (!done) { if (tid != NULL) tid->abort(tid); } return ret; } int icalbdbset_cget(DBC *dbcp, DBT *key, DBT *data, int access_method) { int ret=0; key->flags |= DB_DBT_MALLOC; /* change these to DB_DBT_USERMEM */ data->flags |= DB_DBT_MALLOC; /* fetch the key/data pair */ if((ret = dbcp->c_get(dbcp, key, data, access_method)) != 0) { goto err1; } return ICAL_NO_ERROR; err1: return ICAL_FILE_ERROR; } int icalbdbset_cput(DBC *dbcp, DBT *key, DBT *data, int access_method) { int ret=0; key->flags |= DB_DBT_MALLOC; /* change these to DB_DBT_USERMEM */ data->flags |= DB_DBT_MALLOC; /* fetch the key/data pair */ if((ret = dbcp->c_put(dbcp, key, data, 0)) != 0) { goto err1; } return ICAL_NO_ERROR; err1: return ICAL_FILE_ERROR; } int icalbdbset_put(DB *dbp, DBT *key, DBT *data, int access_method) { int ret = 0; DB_TXN *tid = NULL; int retry = 0; int done = 0; while ((retry < MAX_RETRY) && !done) { if ((ret = ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, NULL, &tid, 0)) != 0) { if (ret == DB_LOCK_DEADLOCK) { retry++; continue; } else { char *foo = db_strerror(ret); abort(); } } if ((ret = dbp->put(dbp, tid, key, data, access_method)) != 0) { if (ret == DB_LOCK_DEADLOCK) { tid->abort(tid); retry++; continue; } else { char *strError = db_strerror(ret); icalerror_warn("icalbdbset_put faild: "); icalerror_warn(strError); tid->abort(tid); return ICAL_FILE_ERROR; } } if ((ret = tid->commit(tid, 0)) != 0) { if (ret == DB_LOCK_DEADLOCK) { tid->abort(tid); retry++; continue; } else { char * foo = db_strerror(ret); abort(); } } done = 1; /* all is well */ } if (!done) { if (tid != NULL) tid->abort(tid); return ICAL_FILE_ERROR; } else return ICAL_NO_ERROR; } int icalbdbset_get(DB *dbp, DB_TXN *tid, DBT *key, DBT *data, int flags) { return (dbp->get(dbp, tid, key, data, flags)); } /** Return the path of the database file **/ const char* icalbdbset_path(icalset* set) { icalerror_check_arg_rz((set!=0),"set"); return set->dsn; } const char* icalbdbset_subdb(icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rz((bset!=0),"bset"); return bset->subdb; } /** Write changes out to the database file. */ icalerrorenum icalbdbset_commit(icalset *set) { DB *dbp; DBC *dbcp; DBT key, data; icalcomponent *c; char *str; int ret=0; int reterr = ICAL_NO_ERROR; char keystore[256]; char uidbuf[256]; char datastore[1024]; char *more_mem = NULL; DB_TXN *tid = NULL; icalbdbset *bset = (icalbdbset*)set; int bad_uid_counter = 0; int retry = 0, done = 0, completed = 0, deadlocked = 0; icalerror_check_arg_re((bset!=0),"bset",ICAL_BADARG_ERROR); dbp = bset->dbp; icalerror_check_arg_re((dbp!=0),"dbp is invalid",ICAL_BADARG_ERROR); if (bset->changed == 0) return ICAL_NO_ERROR; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); key.flags = DB_DBT_USERMEM; key.data = keystore; key.ulen = sizeof(keystore); data.flags = DB_DBT_USERMEM; data.data = datastore; data.ulen = sizeof(datastore); if (!ICAL_DB_ENV) icalbdbset_init_dbenv(NULL, NULL); while ((retry < MAX_RETRY) && !done) { if ((ret = ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, NULL, &tid, 0)) != 0) { if (ret == DB_LOCK_DEADLOCK) { retry++; continue; } else if (ret == DB_RUNRECOVERY) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "icalbdbset_commit: txn_begin failed"); abort(); } else { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "icalbdbset_commit"); return ICAL_INTERNAL_ERROR; } } /* first delete everything in the database, because there could be removed components */ if ((ret = dbp->cursor(dbp, tid, &dbcp, DB_DIRTY_READ)) != 0) { tid->abort(tid); if (ret == DB_LOCK_DEADLOCK) { retry++; continue; } else if (ret == DB_RUNRECOVERY) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "curor failed"); abort(); } else { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "curor failed"); /* leave bset->changed set to true */ return ICAL_INTERNAL_ERROR; } } /* fetch the key/data pair, then delete it */ completed = 0; while (!completed && !deadlocked) { ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT); if (ret == DB_NOTFOUND) { completed = 1; } else if (ret == ENOMEM) { if (more_mem) free(more_mem); more_mem = malloc(data.ulen+1024); data.data = more_mem; data.ulen = data.ulen+1024; } else if (ret == DB_LOCK_DEADLOCK) { deadlocked = 1; } else if (ret == DB_RUNRECOVERY) { tid->abort(tid); ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_get failed."); abort(); } else if (ret == 0) { if ((ret = dbcp->c_del(dbcp,0))!=0) { dbp->err(dbp, ret, "cursor"); if (ret == DB_KEYEMPTY) { /* never actually created, continue onward.. */ /* do nothing - break; */ } else if (ret == DB_LOCK_DEADLOCK) { deadlocked = 1; } else { char *foo = db_strerror(ret); abort(); } } } else { /* some other non-fatal error */ dbcp->c_close(dbcp); tid->abort(tid); if (more_mem) { free(more_mem); more_mem = NULL; } return ICAL_INTERNAL_ERROR; } } if (more_mem) { free(more_mem); more_mem = NULL; } if (deadlocked) { dbcp->c_close(dbcp); tid->abort(tid); retry++; continue; /* next retry */ } deadlocked = 0; for (c = icalcomponent_get_first_component(bset->cluster,ICAL_ANY_COMPONENT); c != 0 && !deadlocked; c = icalcomponent_get_next_component(bset->cluster,ICAL_ANY_COMPONENT)) { memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); /* Note that we're always inserting into a primary index. */ if (icalcomponent_isa(c) != ICAL_VAGENDA_COMPONENT) { char *uidstr = (char *)icalcomponent_get_uid(c); if (!uidstr) { /* this shouldn't happen */ /* no uid string, we need to add one */ snprintf(uidbuf, 256, "baduid%d-%d", getpid(), bad_uid_counter++); key.data = uidbuf; } else { key.data = uidstr; } } else { char *relcalid = NULL; relcalid = (char*)icalcomponent_get_relcalid(c); if (relcalid == NULL) { snprintf(uidbuf, 256, "baduid%d-%d", getpid(), bad_uid_counter++); key.data = uidbuf; } else { key.data = relcalid; } } key.size = strlen(key.data); str = icalcomponent_as_ical_string_r(c); data.data = str; data.size = strlen(str); if ((ret = dbcp->c_put(dbcp, &key, &data, DB_KEYLAST)) != 0) { if (ret == DB_LOCK_DEADLOCK) { deadlocked = 1; } else if (ret == DB_RUNRECOVERY) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_put failed."); abort(); } else { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_put failed %s.", str); /* continue to try to put as many icalcomponent as possible */ reterr = ICAL_INTERNAL_ERROR; } } } free(str); if (deadlocked) { dbcp->c_close(dbcp); tid->abort(tid); retry++; continue; } if ((ret = dbcp->c_close(dbcp)) != 0) { tid->abort(tid); if (ret == DB_LOCK_DEADLOCK) { retry++; continue; } else if (ret == DB_RUNRECOVERY) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_closed failed."); abort(); } else { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "c_closed failed."); reterr = ICAL_INTERNAL_ERROR; } } if ((ret = tid->commit(tid, 0)) != 0) { tid->abort(tid); if (ret == DB_LOCK_DEADLOCK) { retry++; continue; } else if (ret == DB_RUNRECOVERY) { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "commit failed."); abort(); } else { ICAL_DB_ENV->err(ICAL_DB_ENV, ret, "commit failed."); reterr = ICAL_INTERNAL_ERROR; } } done = 1; } bset->changed = 0; return reterr; } void icalbdbset_mark(icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rv((bset!=0),"bset"); bset->changed = 1; } icalcomponent* icalbdbset_get_component(icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rz((bset!=0),"bset"); return bset->cluster; } /* manipulate the components in the cluster */ icalerrorenum icalbdbset_add_component(icalset *set, icalcomponent* child) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_re((bset!=0),"bset", ICAL_BADARG_ERROR); icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR); icalcomponent_add_component(bset->cluster,child); icalbdbset_mark(set); return ICAL_NO_ERROR; } icalerrorenum icalbdbset_remove_component(icalset *set, icalcomponent* child) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_re((bset!=0),"bset", ICAL_BADARG_ERROR); icalerror_check_arg_re((child!=0),"child",ICAL_BADARG_ERROR); icalcomponent_remove_component(bset->cluster,child); icalbdbset_mark(set); return ICAL_NO_ERROR; } int icalbdbset_count_components(icalset *set, icalcomponent_kind kind) { icalbdbset *bset = (icalbdbset*)set; if(set == 0){ icalerror_set_errno(ICAL_BADARG_ERROR); return -1; } return icalcomponent_count_components(bset->cluster,kind); } /** Set the gauge **/ icalerrorenum icalbdbset_select(icalset* set, icalgauge* gauge) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_re((bset!=0),"bset", ICAL_BADARG_ERROR); icalerror_check_arg_re(gauge!=0,"gauge",ICAL_BADARG_ERROR); bset->gauge = gauge; return ICAL_NO_ERROR; } /** Clear the gauge **/ void icalbdbset_clear(icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rv((bset!=0),"bset"); bset->gauge = 0; } icalcomponent* icalbdbset_fetch(icalset* set, icalcomponent_kind kind, const char* uid) { icalcompiter i; icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rz((bset!=0),"bset"); for(i = icalcomponent_begin_component(bset->cluster, kind); icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){ icalcomponent *this = icalcompiter_deref(&i); icalproperty *p = NULL; const char *this_uid = NULL; if (this != 0){ if (kind == ICAL_VAGENDA_COMPONENT) { p = icalcomponent_get_first_property(this,ICAL_RELCALID_PROPERTY); if (p != NULL) this_uid = icalproperty_get_relcalid(p); } else { p = icalcomponent_get_first_property(this,ICAL_UID_PROPERTY); if (p != NULL) this_uid = icalproperty_get_uid(p); } if(this_uid==NULL){ icalerror_warn("icalbdbset_fetch found a component with no UID"); continue; } if (strcmp(uid,this_uid)==0){ return this; } } } return 0; } int icalbdbset_has_uid(icalset* store,const char* uid) { assert(0); /* HACK, not implemented */ return 0; } /******* support routines for icalbdbset_fetch_match *********/ struct icalbdbset_id { char* uid; char* recurrence_id; int sequence; }; void icalbdbset_id_free(struct icalbdbset_id *id) { if(id->recurrence_id != 0){ free(id->recurrence_id); } if(id->uid != 0){ free(id->uid); } } struct icalbdbset_id icalbdbset_get_id(icalcomponent* comp) { icalcomponent *inner; struct icalbdbset_id id; icalproperty *p; inner = icalcomponent_get_first_real_component(comp); p = icalcomponent_get_first_property(inner, ICAL_UID_PROPERTY); assert(p!= 0); id.uid = strdup(icalproperty_get_uid(p)); p = icalcomponent_get_first_property(inner, ICAL_SEQUENCE_PROPERTY); if(p == 0) { id.sequence = 0; } else { id.sequence = icalproperty_get_sequence(p); } p = icalcomponent_get_first_property(inner, ICAL_RECURRENCEID_PROPERTY); if (p == 0){ id.recurrence_id = 0; } else { icalvalue *v; v = icalproperty_get_value(p); id.recurrence_id = icalvalue_as_ical_string_r(v); assert(id.recurrence_id != 0); } return id; } /* Find the component that is related to the given component. Currently, it just matches based on UID and RECURRENCE-ID */ icalcomponent* icalbdbset_fetch_match(icalset* set, icalcomponent *comp) { icalbdbset *bset = (icalbdbset*)set; icalcompiter i; struct icalbdbset_id comp_id, match_id; icalerror_check_arg_rz((bset!=0),"bset"); comp_id = icalbdbset_get_id(comp); for(i = icalcomponent_begin_component(bset->cluster,ICAL_ANY_COMPONENT); icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){ icalcomponent *match = icalcompiter_deref(&i); match_id = icalbdbset_get_id(match); if(strcmp(comp_id.uid, match_id.uid) == 0 && ( comp_id.recurrence_id ==0 || strcmp(comp_id.recurrence_id, match_id.recurrence_id) ==0 )){ /* HACK. What to do with SEQUENCE? */ icalbdbset_id_free(&match_id); icalbdbset_id_free(&comp_id); return match; } icalbdbset_id_free(&match_id); } icalbdbset_id_free(&comp_id); return 0; } icalerrorenum icalbdbset_modify(icalset* set, icalcomponent *old, icalcomponent *newc) { assert(0); /* HACK, not implemented */ return ICAL_NO_ERROR; } /* caller is responsible to cal icalbdbset_free_cluster first */ icalerrorenum icalbdbset_set_cluster(icalset* set, icalcomponent* cluster) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rz((bset!=0),"bset"); bset->cluster = cluster; } icalerrorenum icalbdbset_free_cluster(icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rz((bset!=0),"bset"); if (bset->cluster != NULL) icalcomponent_free(bset->cluster); } icalcomponent* icalbdbset_get_cluster(icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rz((bset!=0),"bset"); return (bset->cluster); } /** Iterate through components. */ icalcomponent* icalbdbset_get_current_component (icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalerror_check_arg_rz((bset!=0),"bset"); return icalcomponent_get_current_component(bset->cluster); } icalcomponent* icalbdbset_get_first_component(icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalcomponent *c=0; icalerror_check_arg_rz((bset!=0),"bset"); do { if (c == 0) c = icalcomponent_get_first_component(bset->cluster, ICAL_ANY_COMPONENT); else c = icalcomponent_get_next_component(bset->cluster, ICAL_ANY_COMPONENT); if(c != 0 && (bset->gauge == 0 || icalgauge_compare(bset->gauge,c) == 1)){ return c; } } while (c!=0); return 0; } icalsetiter icalbdbset_begin_component(icalset* set, icalcomponent_kind kind, icalgauge* gauge, const char* tzid) { icalsetiter itr = icalsetiter_null; icalcomponent* comp = NULL; icalcompiter citr; icalbdbset *bset = (icalbdbset*) set; struct icaltimetype start, next, end; icalproperty *dtstart, *rrule, *prop, *due; struct icalrecurrencetype recur; icaltimezone *u_zone; int g = 0; int orig_time_was_utc = 0; icalerror_check_arg_re((set!=0), "set", icalsetiter_null); itr.gauge = gauge; itr.tzid = tzid; citr = icalcomponent_begin_component(bset->cluster, kind); comp = icalcompiter_deref(&citr); if (gauge == 0) { itr.iter = citr; return itr; } /* if there is a gauge, the first matched component is returned */ while (comp != 0) { /* check if it is a recurring component and with guage expand, if so * we need to add recurrence-id property to the given component */ rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY); g = icalgauge_get_expand(gauge); if (rrule != 0 && g == 1) { /* it is a recurring event */ u_zone = icaltimezone_get_builtin_timezone(itr.tzid); /* use UTC, if that's all we have. */ if (!u_zone) u_zone = icaltimezone_get_utc_timezone(); recur = icalproperty_get_rrule(rrule); if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) { dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY); if (dtstart) start = icalproperty_get_dtstart(dtstart); } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) { due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY); if (due) start = icalproperty_get_due(due); } /* Convert to the user's timezone in order to be able to compare * the results from the rrule iterator. */ if (icaltime_is_utc(start)) { start = icaltime_convert_to_zone(start, u_zone); orig_time_was_utc = 1; } if (itr.last_component == NULL) { itr.ritr = icalrecur_iterator_new(recur, start); next = icalrecur_iterator_next(itr.ritr); itr.last_component = comp; } else { next = icalrecur_iterator_next(itr.ritr); if (icaltime_is_null_time(next)){ itr.last_component = NULL; icalrecur_iterator_free(itr.ritr); itr.ritr = NULL; /* no matched occurence */ goto getNextComp; } else { itr.last_component = comp; } } /* if it is excluded, do next one */ if (icalproperty_recurrence_is_excluded(comp, &start, &next)) { icalrecur_iterator_decrement_count(itr.ritr); continue; } /* add recurrence-id value to the property if the property already exist; * add the recurrence id property and the value if the property does not exist */ prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY); if (prop == 0) icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next)); else icalproperty_set_recurrenceid(prop, next); /* convert the next recurrence time into the user's timezone */ if (orig_time_was_utc) next = icaltime_convert_to_zone(next, icaltimezone_get_utc_timezone()); } /* end of a recurring event */ if (gauge == 0 || icalgauge_compare(itr.gauge, comp) == 1) { /* find a matched and return it */ itr.iter = citr; return itr; } /* if it is a recurring but no matched occurrence has been found OR * it is not a recurring and no matched component has been found, * read the next component to find out */ getNextComp: if ((rrule != NULL && itr.last_component == NULL) || (rrule == NULL)) { comp = icalcompiter_next(&citr); comp = icalcompiter_deref(&citr); } } /* while */ /* no matched component has found */ return icalsetiter_null; } icalcomponent* icalbdbset_form_a_matched_recurrence_component(icalsetiter* itr) { icalcomponent* comp = NULL; struct icaltimetype start, next, end; icalproperty *dtstart, *rrule, *prop, *due; struct icalrecurrencetype recur; icaltimezone *u_zone; int g = 0; int orig_time_was_utc = 0; comp = itr->last_component; if (comp == NULL || itr->gauge == NULL) { return NULL; } rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY); /* if there is no RRULE, simply return to the caller */ if (rrule == NULL) return NULL; u_zone = icaltimezone_get_builtin_timezone(itr->tzid); /* use UTC, if that's all we have. */ if (!u_zone) u_zone = icaltimezone_get_utc_timezone(); recur = icalproperty_get_rrule(rrule); if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) { dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY); if (dtstart) start = icalproperty_get_dtstart(dtstart); } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) { due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY); if (due) start = icalproperty_get_due(due); } /* Convert to the user's timezone in order to be able to compare the results * from the rrule iterator. */ if (icaltime_is_utc(start)) { start = icaltime_convert_to_zone(start, u_zone); orig_time_was_utc = 1; } if (itr->ritr == NULL) { itr->ritr = icalrecur_iterator_new(recur, start); next = icalrecur_iterator_next(itr->ritr); itr->last_component = comp; } else { next = icalrecur_iterator_next(itr->ritr); if (icaltime_is_null_time(next)){ /* no more recurrence, returns */ itr->last_component = NULL; icalrecur_iterator_free(itr->ritr); itr->ritr = NULL; /* no more pending matched occurence, * all the pending matched occurences have been returned */ return NULL; } else { itr->last_component = comp; } } /* if it is excluded, return NULL to the caller */ if (icalproperty_recurrence_is_excluded(comp, &start, &next)) { icalrecur_iterator_decrement_count(itr->ritr); return NULL; } /* set recurrence-id value to the property if the property already exist; * add the recurrence id property and the value if the property does not exist */ prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY); if (prop == 0) icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next)); else icalproperty_set_recurrenceid(prop, next); if (orig_time_was_utc) { next = icaltime_convert_to_zone(next, icaltimezone_get_utc_timezone()); } if (itr->gauge == 0 || icalgauge_compare(itr->gauge, comp) == 1) { /* find a matched and return it */ return comp; } /* not matched */ return NULL; } icalcomponent* icalbdbsetiter_to_next(icalset *set, icalsetiter* i) { icalcomponent* comp = NULL; icalbdbset *bset = (icalbdbset*) set; struct icaltimetype start, next, end; icalproperty *dtstart, *rrule, *prop, *due; struct icalrecurrencetype recur; icaltimezone *u_zone; int g = 0; int orig_time_was_utc = 0; do { /* no pending occurence, read the next component */ if (i->last_component == NULL) { comp = icalcompiter_next(&(i->iter)); } else { comp = i->last_component; } /* no next component, simply return */ if (comp == 0) return NULL; if (i->gauge == 0) return comp; /* finding the next matched component and return it to the caller */ rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY); g = icalgauge_get_expand(i->gauge); /* a recurring component with expand query */ if (rrule != 0 && g == 1) { u_zone = icaltimezone_get_builtin_timezone(i->tzid); /* use UTC, if that's all we have. */ if (!u_zone) u_zone = icaltimezone_get_utc_timezone(); recur = icalproperty_get_rrule(rrule); if (icalcomponent_isa(comp) == ICAL_VEVENT_COMPONENT) { dtstart = icalcomponent_get_first_property(comp, ICAL_DTSTART_PROPERTY); if (dtstart) start = icalproperty_get_dtstart(dtstart); } else if (icalcomponent_isa(comp) == ICAL_VTODO_COMPONENT) { due = icalcomponent_get_first_property(comp, ICAL_DUE_PROPERTY); if (due) start = icalproperty_get_due(due); } /* Convert to the user's timezone in order to be able to compare * the results from the rrule iterator. */ if (icaltime_is_utc(start)) { start = icaltime_convert_to_zone(start, u_zone); orig_time_was_utc = 1; } if (i->ritr == NULL) { i->ritr = icalrecur_iterator_new(recur, start); next = icalrecur_iterator_next(i->ritr); i->last_component = comp; } else { next = icalrecur_iterator_next(i->ritr); if (icaltime_is_null_time(next)) { i->last_component = NULL; icalrecur_iterator_free(i->ritr); i->ritr = NULL; /* no more occurence, should go to get next component */ continue; } else { i->last_component = comp; } } /* if it is excluded, do next one */ if (icalproperty_recurrence_is_excluded(comp, &start, &next)) { icalrecur_iterator_decrement_count(i->ritr); continue; } /* set recurrence-id value to the property if the property already exist; * add the recurrence id property and the value if the property does not exist */ prop = icalcomponent_get_first_property(comp, ICAL_RECURRENCEID_PROPERTY); if (prop == 0) icalcomponent_add_property(comp, icalproperty_new_recurrenceid(next)); else icalproperty_set_recurrenceid(prop, next); if (orig_time_was_utc) { next = icaltime_convert_to_zone(next, icaltimezone_get_utc_timezone()); } } /* end of recurring event with expand query */ if(comp != 0 && (i->gauge == 0 || icalgauge_compare(i->gauge, comp) == 1)){ /* found a matched, return it */ return comp; } } while (comp != 0); return 0; } icalcomponent* icalbdbset_get_next_component(icalset* set) { icalbdbset *bset = (icalbdbset*)set; icalcomponent *c=0; struct icaltimetype start, next; icalproperty *dtstart, *rrule, *prop, *due; struct icalrecurrencetype recur; int g = 0; icalerror_check_arg_rz((bset!=0),"bset"); do { c = icalcomponent_get_next_component(bset->cluster, ICAL_ANY_COMPONENT); if(c != 0 && (bset->gauge == 0 || icalgauge_compare(bset->gauge,c) == 1)){ return c; } } while(c != 0); return 0; } int icalbdbset_begin_transaction(DB_TXN* parent_tid, DB_TXN** tid) { return (ICAL_DB_ENV->txn_begin(ICAL_DB_ENV, parent_tid, tid, 0)); } int icalbdbset_commit_transaction(DB_TXN* txnid) { return (txnid->commit(txnid, 0)); } static int _compare_keys(DB *dbp, const DBT *a, const DBT *b) { /* * Returns: * < 0 if a < b * = 0 if a = b * > 0 if a > b */ char* ac = (char*)a->data; char* bc = (char*)b->data; return (strncmp(ac, bc, a->size)); } libical-1.0/src/ical.h0000664000076400007640000000136012132563130013577 0ustar allenallen/************************************************************************ FILE: ical.h CREATOR: ajc 2008-sep-01 (C) COPYRIGHT 2008 by Art Cancro http://freeassociation.sourceforge.net This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1 Or: The Mozilla Public License Version 1.0. ************************************************************************/ #ifdef _MSC_VER #pragma message("WARNING: #include is deprecated. Please #include instead.") #else #warning "#include is deprecated. Please #include instead." #endif #include libical-1.0/src/libical.dsw0000664000076400007640000000340512132563130014636 0ustar allenallenMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "libical"=.\libical\libical.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "libicalss"=.\libicalss\libicalss.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "libicalvcal"=.\libicalvcal\libicalvcal.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "recur"=.\test\recur.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name libical End Project Dependency Begin Project Dependency Project_Dep_Name libicalvcal End Project Dependency }}} ############################################################################### Project: "regression"=.\test\regression.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name libical End Project Dependency Begin Project Dependency Project_Dep_Name libicalvcal End Project Dependency Begin Project Dependency Project_Dep_Name libicalss End Project Dependency }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### libical-1.0/src/php/0000775000076400007640000000000012132563130013305 5ustar allenallenlibical-1.0/src/php/README0000664000076400007640000000141312132563130014164 0ustar allenallenArnout Engelen pointed out, that you could create a php libical wrapper: PHP currently seems to lack proper iCalendar libraries. Since there already is a LibicalWrap.i for the Python bindings, it's not very hard to make a libical .so that can be accessed from PHP. Would be a valuable building block in the practical adoption of the iCalendar standard (imho). I'm attaching a Makefile how I whipped together the .so, and a small example of how to use the resulting library. Obviously this is not good enough for in the official distribution, but it'll probably give you an idea of how to make a PHP binding. However, it's here for documentation purposes, until s.b. comes around the corner with the demand and a Patch how to implement it clean. Feeling addressed? Send Diffs! libical-1.0/src/php/test.php0000664000076400007640000000102312132563130014771 0ustar allenallen libical-1.0/src/php/Makefile0000664000076400007640000000073512132563130014752 0ustar allenallenall: LibicalWrap.so LibicalWrap.so: LibicalWrap.o gcc -shared -L/usr/lib -rdynamic LibicalWrap.o ../libical/.libs/libical.a ../libicalss/.libs/libicalss.a -o LibicalWrap.so LibicalWrap.o: LibicalWrap.c gcc -fpic -I/usr/include/php4/TSRM/ -I/usr/include/php4/ -I/usr/include/php4/Zend -I/usr/include/php4/main -c LibicalWrap.c -o LibicalWrap.o LibicalWrap.c: LibicalWrap.i swig -php -o LibicalWrap.c LibicalWrap.i clean: rm LibicalWrap.so LibicalWrap.o LibicalWrap.c libical-1.0/src/test/0000775000076400007640000000000012141277614013506 5ustar allenallenlibical-1.0/src/test/recur.c0000664000076400007640000000753112132563126014774 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: recur.c CREATOR: ebusboom 8jun00 DESCRIPTION: Test program for expanding recurrences. Run as: ./recur ../../test-data/recur.txt (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. ======================================================================*/ #include #include /* for strdup */ #include /* for malloc */ #include /* for printf */ #include /* for time() */ #include /* for signal */ #ifndef WIN32 #include /* for alarm */ #endif #include #include #ifdef WIN32 #define snprintf _snprintf #endif #ifdef _MSC_VER #define strcasecmp stricmp #endif static void sig_alrm(int i){ fprintf(stderr,"Could not get lock on file\n"); exit(1); } static void recur_callback(icalcomponent *comp, struct icaltime_span *span, void *data) { printf("cb: %s", ctime(&span->start)); printf(" %s\n", ctime(&span->end)); } int main(int argc, char *argv[]) { icalset *cin; struct icaltimetype next; icalcomponent *itr; icalproperty *desc, *dtstart, *rrule; struct icalrecurrencetype recur; icalrecur_iterator* ritr; time_t tt; char* file; icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL); #ifndef WIN32 signal(SIGALRM,sig_alrm); #endif if (argc <= 1){ file = "../../test-data/recur.txt"; } else if (argc == 2){ file = argv[1]; } else { fprintf(stderr,"usage: recur [input file]\n"); exit(1); } #ifndef WIN32 alarm(300); /* to get file lock */ #endif cin = icalfileset_new(file); #ifndef WIN32 alarm(0); #endif if(cin == 0){ fprintf(stderr,"recur: can't open file %s\n",file); exit(1); } for (itr = icalfileset_get_first_component(cin); itr != 0; itr = icalfileset_get_next_component(cin)){ struct icaltimetype start = icaltime_from_timet(1,0); struct icaltimetype end = icaltime_today(); desc = icalcomponent_get_first_property(itr,ICAL_DESCRIPTION_PROPERTY); dtstart = icalcomponent_get_first_property(itr,ICAL_DTSTART_PROPERTY); rrule = icalcomponent_get_first_property(itr,ICAL_RRULE_PROPERTY); if (desc == 0 || dtstart == 0 || rrule == 0){ printf("\n******** Error in input component ********\n"); printf("The following component is malformed:\n %s\n", icalcomponent_as_ical_string(itr)); continue; } printf("\n\n#### %s\n",icalproperty_get_description(desc)); printf("#### %s\n",icalvalue_as_ical_string(icalproperty_get_value(rrule))); recur = icalproperty_get_rrule(rrule); start = icalproperty_get_dtstart(dtstart); ritr = icalrecur_iterator_new(recur,start); tt = icaltime_as_timet(start); printf("#### %s\n",ctime(&tt )); icalrecur_iterator_free(ritr); for(ritr = icalrecur_iterator_new(recur,start), next = icalrecur_iterator_next(ritr); !icaltime_is_null_time(next); next = icalrecur_iterator_next(ritr)){ tt = icaltime_as_timet(next); printf(" %s",ctime(&tt )); } icalrecur_iterator_free(ritr); icalcomponent_foreach_recurrence(itr, start, end, recur_callback, NULL); } icalset_free(cin); icaltimezone_free_builtin_timezones(); icalmemory_free_ring(); free_zone_directory(); return 0; } libical-1.0/src/test/testclassify.c0000664000076400007640000001015112132563126016361 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: testclassify.c CREATOR: eric 11 February 2000 $Id: testclassify.c,v 1.6 2008-01-02 20:07:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #include /* for printf */ #include #include #include /* For strerror */ #include /* Get a note about the purpose of the property*/ const char* get_note(icalcomponent *c) { icalproperty *p; const char* note = 0; if(c != 0){ for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY); p!= 0; p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){ if(strcmp(icalproperty_get_x_name(p),"X-LIC-NOTE")==0){ note = icalproperty_get_x(p); } } } if(note == 0){ note = "None"; } return note; } int main(int argc, char* argv[]) { icalcomponent *c; int i=0; /* Open up the two storage files, one for the incomming components, one for the calendar */ icalfileset_options options = {O_RDONLY, 0644, 0}; icalset* incoming = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/incoming.ics", &options); icalset* cal = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/calendar.ics", &options); assert(incoming!= 0); assert(cal!=0); /* Iterate through all of the incoming components */ for(c=icalset_get_first_component(incoming);c!=0; c=icalset_get_next_component(incoming)){ icalproperty_xlicclass class; icalcomponent *match = 0; const char* this_uid; i++; /* Check this component against the restrictions imposed by iTIP. An errors will be inserted as X-LIC-ERROR properties in the component. The Parser will also insert errors if it cannot parse the component */ icalcomponent_check_restrictions(c); /* If there are any errors, print out the component */ if(icalcomponent_count_errors(c) != 0){ printf("----- Component has errors ------- \n%s-----------------\n", icalcomponent_as_ical_string(c)); } /* Use one of the icalcomponent convenience routines to get the UID. This routine will save you from having to use icalcomponent_get_inner(), icalcomponent_get_first_property(), checking the return value, and then calling icalproperty_get_uid. There are several other convenience routines for DTSTART, DTEND, DURATION, SUMMARY, METHOD, and COMMENT */ this_uid = icalcomponent_get_uid(c); if(this_uid != 0){ /* Look in the calendar for a component with the same UID as the incomming component. We should reall also be checking the RECURRENCE-ID. Another way to do this operation is to us icalset_find_match(), which does use the RECURRENCE-ID. */ match = icalset_fetch(cal,this_uid); } /* Classify the incoming component. The third argument is the calid of the user who owns the calendar. In a real program, you would probably switch() on the class.*/ class = icalclassify(c,match,"A@example.com"); printf("Test %d\n\ Incoming: %s\n\ Matched: %s\n\ Classification: %s\n\n", i,get_note(c),get_note(match), icalproperty_enum_to_string(class)); } return 0; } libical-1.0/src/test/stow.c0000664000076400007640000005124512132563126014651 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: stow.c CREATOR: eric 29 April 2000 $Id: stow.c,v 1.10 2008-01-02 20:07:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include /* for PATH_MAX */ #include #include #include /* for uname */ #include /* for stat */ #if defined(HAVE_UNISTD_H) #include /* for stat, getpid, getopt */ #endif #include /* For getpwent */ #include /* For getpwent */ #include /* for tolower */ #include #include char* program_name; #define TMPSIZE 2048 #define SENDMAIL "/usr/lib/sendmail -t" void usage(char *message); #ifndef PATH_MAX #define PATH_MAX 256 /* HACK */ #endif enum options { STORE_IN_FILE, STORE_IN_DB, INPUT_IS_MIME, INPUT_IS_ICAL, INPUT_FROM_STDIN, INPUT_FROM_FILE, ERRORS_TO_STDOUT, ERRORS_TO_ORGANIZER }; struct options_struct { enum options storage; enum options input_type; enum options input_source; enum options errors; char* input_file; char* calid; char* output_file; }; enum file_type { ERROR, NO_FILE, DIRECTORY, REGULAR, OTHER }; enum file_type test_file(char *path) { struct stat sbuf; enum file_type type; errno = 0; /* Check if the path already exists and if it is a directory*/ if (stat(path,&sbuf) != 0){ /* A file by the given name does not exist, or there was another error */ if(errno == ENOENT) { type = NO_FILE; } else { type = ERROR; } } else { /* A file by the given name exists, but is it a directory? */ if (S_ISDIR(sbuf.st_mode)){ type = DIRECTORY; } else if(S_ISREG(sbuf.st_mode)){ type = REGULAR; } else { type = OTHER; } } return type; } char* lowercase(const char* str) { char* p = 0; char* new = strdup(str); if(str ==0){ return 0; } for(p = new; *p!=0; p++){ *p = tolower(*p); } return new; } #if 0 char* get_local_attendee(struct options_struct *opt) { char attendee[PATH_MAX]; if(opt->calid){ strncpy(attendee,opt->calid,PATH_MAX); } else { char* user = getenv("USER"); struct utsname uts; uname(&utget_option); /* HACK nodename may not be a fully qualified domain name */ snprintf(attendee,PATH_MAX,"%s@%s",user,uts.nodename); } return lowercase(attendee); } #endif icalcomponent* get_first_real_component(icalcomponent *comp) { icalcomponent *c; for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); c != 0; c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ if (icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT || icalcomponent_isa(c) == ICAL_VTODO_COMPONENT || icalcomponent_isa(c) == ICAL_VJOURNAL_COMPONENT ) { return c; } } return 0; } char* make_mime(const char* to, const char* from, const char* subject, const char* text_message, const char* method, const char* ical_message) { size_t size = strlen(to)+strlen(from)+strlen(subject)+ strlen(text_message)+ strlen(ical_message)+TMPSIZE; char mime_part_1[TMPSIZE]; char mime_part_2[TMPSIZE]; char content_id[TMPSIZE]; char boundary[TMPSIZE]; struct utsname uts; char* m; if ((m = malloc(sizeof(char)*size)) == 0){ fprintf(stderr,"%s: Can't allocate memory: %s\n",program_name,strerror(errno)); exit(1); } uname(&uts); srand(time(0)<calid; FILE* p; const char *org_addr; icalcomponent *inner = get_first_real_component(comp); icalproperty *organizer_prop = icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY); const char *organizer = icalproperty_get_organizer(organizer_prop); org_addr = strchr(organizer,':'); if(org_addr != 0){ org_addr++; /* Skip the ';' */ } else { org_addr = organizer; } if (opt->errors == ERRORS_TO_ORGANIZER){ p = popen(SENDMAIL,"w"); } else { p = stdout; } if(p == 0){ fprintf(stderr, "%s: fatal. Could not open pipe to sendmail (\"%s\") \n", program_name,SENDMAIL); exit(1); } fputs(make_mime(org_addr, local_attendee, "iMIP error", message, "reply", icalcomponent_as_ical_string(comp)),p); if (opt->errors == ERRORS_TO_ORGANIZER){ pclose(p); } } /* The program had a fatal error and could not process the incoming component*/ void return_error(icalcomponent* comp, char* message, struct options_struct *opt) { fputs(make_mime("Dest", "Source", "iMIP system failure", message, 0,0),stdout); } icalcomponent* make_reply(icalcomponent *comp, icalproperty *return_status, struct options_struct *opt) { icalcomponent *reply, *rinner; icalcomponent *inner = get_first_real_component(comp); icalproperty *p=0; char* local_attendee = opt->calid; char attendee[TMPSIZE]; char prodid[TMPSIZE]; snprintf(attendee,TMPSIZE,"mailto:%s",local_attendee); snprintf(prodid,TMPSIZE,"-//Softwarestudio.org//%s version %s//EN",ICAL_PACKAGE,ICAL_VERSION); /* Create the base component */ reply = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version(strdup("2.0")), icalproperty_new_prodid(strdup(prodid)), icalproperty_new_method(ICAL_METHOD_REPLY), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_clone( icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY)), icalproperty_new_clone( icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY)), icalproperty_new_clone( icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY)), icalproperty_new_attendee(attendee), 0), 0); /* Convert errors into request-status properties and transfers them to the reply component */ icalcomponent_convert_errors(comp); rinner = get_first_real_component(reply); for(p = icalcomponent_get_first_property(inner, ICAL_REQUESTSTATUS_PROPERTY); p != 0; p = icalcomponent_get_next_property(inner, ICAL_REQUESTSTATUS_PROPERTY)){ icalcomponent_add_property(rinner,icalproperty_new_clone(p)); } if(return_status != 0){ icalcomponent_add_property(rinner, return_status); } return reply; } int check_attendee(icalproperty *p, struct options_struct *opt){ const char* s = icalproperty_get_attendee(p); char* lower_attendee = lowercase(s); char* local_attendee = opt->calid; /* Check that attendee begins with "mailto:" */ if (strncmp(lower_attendee,"mailto:",7) == 0){ /* skip over the mailto: part */ lower_attendee += 7; if(strcmp(lower_attendee,local_attendee) == 0){ return 1; } lower_attendee -= 7; free(lower_attendee); } return 0; } char static_component_error_str[PATH_MAX]; char* check_component(icalcomponent* comp, icalproperty **return_status, struct options_struct *opt) { char* component_error_str=0; icalcomponent* inner; int errors = 0; icalproperty *p; int found_attendee = 0; struct icalreqstattype rs; rs.code = ICAL_UNKNOWN_STATUS; rs.desc = 0; rs.debug = 0; /*{ icalrequeststatus code; const char* desc; const char* debug; };*/ *return_status = 0; /* This do/while loop only executes once because it is being used to fake exceptions */ do { /* Check that we actually got a component */ if(comp == 0){ strcpy(static_component_error_str, "Did not find a component"); component_error_str = static_component_error_str; break; } /* Check that the root component is a VCALENDAR */ if(icalcomponent_isa(comp) != ICAL_VCALENDAR_COMPONENT){ strcpy(static_component_error_str, "Root component is not a VCALENDAR"); component_error_str = static_component_error_str; rs.code = ICAL_3_11_MISSREQCOMP_STATUS; break; } /* Check that the component has a METHOD */ if (icalcomponent_get_first_property(comp,ICAL_METHOD_PROPERTY) == 0) { strcpy(static_component_error_str, "The component you sent did not have a METHOD property"); component_error_str = static_component_error_str; rs.code = ICAL_3_11_MISSREQCOMP_STATUS; break; } inner = get_first_real_component(comp); /* Check that the compopnent has an organizer */ if(icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY) == 0){ fprintf(stderr,"%s: fatal. Component does not have an ORGANIZER property\n",program_name); rs.code = ICAL_3_11_MISSREQCOMP_STATUS; break; } /* Check for this user as an attendee or organizer */ for(p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(inner,ICAL_ATTENDEE_PROPERTY)){ found_attendee += check_attendee(p,opt); } for(p = icalcomponent_get_first_property(inner,ICAL_ORGANIZER_PROPERTY); p != 0; p = icalcomponent_get_next_property(inner,ICAL_ORGANIZER_PROPERTY)){ found_attendee += check_attendee(p,opt); } if (found_attendee == 0){ struct icalreqstattype rs; memset(static_component_error_str,0,PATH_MAX); snprintf(static_component_error_str,PATH_MAX, "This target user (%s) is not listed as an attendee or organizer", opt->calid ); component_error_str = static_component_error_str; rs.code = ICAL_3_7_INVCU_STATUS; break; } /* Check that the component passes iTIP restrictions */ errors = icalcomponent_count_errors(comp); icalrestriction_check(comp); if(errors != icalcomponent_count_errors(comp)){ snprintf(static_component_error_str,PATH_MAX, "The component does not conform to iTIP restrictions.\n Here is the original component; look at the X-LIC-ERROR properties\nfor details\n\n%s",icalcomponent_as_ical_string(comp)); component_error_str = static_component_error_str; break; } } while(0); if(rs.code != ICAL_UNKNOWN_STATUS){ *return_status = icalproperty_new_requeststatus(rs); } return component_error_str; } void usage(char *message) { fprintf(stderr,"Usage: %s [-emdcn] [-i inputfile] [-o outputfile] [-u calid]\n",program_name); fprintf(stderr,"-e\tInput data is encapsulated in a MIME Message \n\ -m\tInput is raw iCal \n\ -i\tSpecify input file. Otherwise, input comes from stdin\n\ -o\tSpecify file to save incoming message to\n\ -d\tSpecify database to send data to\n\ -u\tSet the calid to store the data to\n\ -n\tSend errors to stdout instead of organizer\n\ "); } void get_options(int argc, char* argv[], struct options_struct *opt) { int c; #if !defined(HAVE_UNISTD_H) extern char *optarg; extern int optind, optopt; #endif int errflg=0; opt->storage = STORE_IN_FILE; opt->input_source = INPUT_FROM_STDIN; opt->input_type = INPUT_IS_ICAL; opt->input_file = 0; opt->errors = ERRORS_TO_ORGANIZER; opt->calid = 0; opt->output_file = 0; while ((c = getopt(argc, argv, "nemu:o:d:b:c:i:")) != -1) { switch (c) { case 'e': { /* Input data is MIME encapsulated */ opt->input_type = INPUT_IS_MIME; break; } case 'm': { /* Input is iCal. Default*/ opt->input_type = INPUT_IS_ICAL; break; } case 'i': { /* Input comes from named file */ opt->input_source = INPUT_FROM_FILE; opt->input_file = strdup(optarg); break; } case 'o': { /* Output goes to named file. Default*/ opt->output_file = strdup(optarg); opt->storage = STORE_IN_FILE; break; } case 'd': { /* Output goes to database */ fprintf(stderr,"%s: option -d is unimplmented\n",program_name); opt->storage = STORE_IN_DB; errflg++; break; } case 'c': { break; } case 'u': { /* Set the calid for the output database or file. Default is user name of user running program */ opt->calid = strdup(optarg); break; } case 'n': { /* Dump error to stdout. Default is to send error to the organizer specified in the iCal data */ opt->errors = ERRORS_TO_STDOUT; break; } case ':': {/* Option given without an operand */ fprintf(stderr, "%s: Option -%c requires an operand\n", program_name,optopt); errflg++; break; } case '?': { errflg++; } } if (errflg >0){ usage(""); exit(1); } } if(opt->calid == 0){ /* If no calid specified, use username */ char attendee[PATH_MAX]; char* user = getenv("USER"); struct utsname uts; uname(&uts); /* HACK nodename may not be a fully qualified domain name */ snprintf(attendee,PATH_MAX,"%s@%s",user,uts.nodename); opt->calid = lowercase(attendee); } if(opt->storage == STORE_IN_FILE && opt->output_file ==0){ char file[PATH_MAX]; char* user = getenv("USER"); struct passwd *pw; if(!user){ fprintf(stderr,"%s: Can't get username. Try explicitly specifing the output file with -o", program_name); exit(1); } /* Find password entry for user */ while( (pw = getpwent())!=0){ if(strcmp(user,pw->pw_name)==0){ break; } } if(pw==0){ fprintf(stderr,"%s: Can't get get password entry for user \"%s\" Try explicitly specifing the output file with -o", program_name,user); exit(1); } if(pw->pw_dir==0){ fprintf(stderr,"%s: User \"%s\" has no home directory. Try explicitly specifing the output file with -o", program_name, user); exit(1); } snprintf(file,PATH_MAX,"%s/.facs/%s",pw->pw_dir,opt->calid); opt->output_file = strdup(file); } /* Now try to create the calendar directory if it does not exist */ if(opt->storage == STORE_IN_FILE ) { char * p; char* facspath = strdup(opt->output_file); enum file_type type; /* Cut off the last slash to make it just a directoy */ p = strrchr(facspath,'/'); if (p != 0){ /* Use some other directory */ *p='\0'; type = test_file(facspath); errno = 0; if (type == NO_FILE){ if(mkdir(facspath,0775) != 0){ fprintf(stderr, "%s: Failed to create calendar directory %s: %s\n", program_name,facspath, strerror(errno)); exit(1); } else { fprintf(stderr,"%s: Creating calendar directory %s\n", program_name,facspath); } } else if(type==REGULAR || type == ERROR){ fprintf(stderr,"%s: Cannot create calendar directory %s\n", program_name,facspath); exit(1); } } } } char* check_options(struct options_struct *opt) { return 0; } void store_component(icalcomponent *comp, struct options_struct *opt) { icalerrorenum error; if(opt->storage == STORE_IN_FILE){ icalset *fs = icalfileset_new(opt->output_file); if (fs == 0){ fprintf(stderr, "%s: Failed to get incoming component directory: %s\n", program_name, icalerror_strerror(icalerrno)); exit(1); } error = icalfileset_add_component(fs,comp); if (error != ICAL_NO_ERROR){ fprintf(stderr,"%s: Failed to write incoming component: %s\n", program_name, icalerror_strerror(icalerrno)); exit(1); } error = icalfileset_commit(fs); if (error != ICAL_NO_ERROR){ fprintf(stderr,"%s: Failed to commit incoming cluster: %s\n", program_name, icalerror_strerror(icalerrno)); exit(1); } icalset_free(fs); return; } else { assert(0); } } char* read_stream(char *s, size_t size, void *d) { char *c = fgets(s,size, (FILE*)d); return c; } icalcomponent* read_nonmime_component(struct options_struct *opt) { FILE *stream; icalcomponent *comp; icalparser* parser = icalparser_new(); icalerrorstate es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); char* line; if(opt->input_source == INPUT_FROM_FILE){ stream = fopen(opt->input_file,"r"); if (stream == 0){ perror("Can't open input file"); exit(1); } } else { stream = stdin; } assert(stream != 0); icalparser_set_gen_data(parser,stream); do { line = icalparser_get_line(parser,read_stream); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); comp = icalparser_add_line(parser,line); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); if (comp != 0){ return comp; } } while ( line != 0); if(opt->input_source == INPUT_FROM_FILE){ fclose(stream); } return comp; } icalcomponent* find_vcalendar(icalcomponent* comp) { icalcomponent *c,*rtrn; for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); c != 0; c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ if(icalcomponent_isa(c) == ICAL_VCALENDAR_COMPONENT){ icalcomponent_remove_component(comp,c); return c; } if((rtrn=find_vcalendar(c)) != 0){ return rtrn; } } return 0; } icalcomponent* read_mime_component(struct options_struct *opt) { icalcomponent *comp,*mimecomp; FILE* stream; if(opt->input_source == INPUT_FROM_FILE){ stream = fopen(opt->input_file,"r"); if (stream == 0){ perror("Can't open input file"); exit(1); } } else { stream = stdin; } assert(stream != 0); mimecomp = icalmime_parse(read_stream,(void*)stream); /* now find the iCal component embedded within the mime component */ comp = find_vcalendar(mimecomp); if(comp == 0){ return 0; } return comp; } icalcomponent* read_component(struct options_struct *opt) { if(opt->input_type == INPUT_IS_MIME){ return read_mime_component(opt); } else if (opt->input_type == INPUT_IS_ICAL){ return read_nonmime_component(opt); } else { fprintf(stderr,"%s: Internal Error; unknown option for input_type\n", program_name); exit(1); } } int main(int argc, char* argv[] ) { char* options_error_str; char* component_error_str; icalcomponent* comp, *reply; struct options_struct opt; icalproperty *return_status; program_name = strrchr(argv[0],'/'); get_options(argc, argv, &opt); if ( (options_error_str = check_options(&opt)) != 0 ){ usage(options_error_str); exit(1); } comp = read_component(&opt); /* If the component had any fatal errors, return an error message to the organizer */ if ( (component_error_str = check_component(comp,&return_status,&opt)) != 0){ reply = make_reply(comp,return_status,&opt); return_failure(reply, component_error_str, &opt); icalcomponent_free(reply); exit(0); } store_component(comp,&opt); /* Don't free the component comp, since it is now part of the store, and will be freed there */ exit(0); } libical-1.0/src/test/outgoing.ics0000664000076400007640000002147212132563126016043 0ustar allenallenBEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T170735Z UID :calsrv.example.com-873970198738703@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY : Overlap 1 SEQUENCE :0 COMMENT :I can make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=ACCEPTED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T170735Z UID :calsrv.example.com-873970198738704@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY :Overlap 2 SEQUENCE :0 COMMENT :I can make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=ACCEPTED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T170735Z UID :calsrv.example.com-873970198738705@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY :Overlap 3 SEQUENCE :0 COMMENT :I can make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=ACCEPTED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T170953Z UID :calsrv.example.com-873970198738703@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY : Overlap 1 SEQUENCE :0 COMMENT :I can make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=ACCEPTED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T170953Z UID :calsrv.example.com-873970198738704@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY :Overlap 2 SEQUENCE :0 COMMENT :I can make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=ACCEPTED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T170953Z UID :calsrv.example.com-873970198738705@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY :Overlap 3 SEQUENCE :0 COMMENT :I can make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=ACCEPTED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T171147Z UID :calsrv.example.com-873970198738703@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY : Overlap 1 SEQUENCE :0 COMMENT :Unfortunately\, I have another commitment that conflicts with this meeting. I am delegating my attendance to Bob. ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=DELEGATED ;DELEGATED-TO=bob@cal.softwarestudio.org :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR X-LIC-NOTE : Overlap with Slot 2\, 1300 to 1400\, should be counterproposed METHOD :REQUEST VERSION :2.0 BEGIN:VEVENT ORGANIZER :Mailto:bob@cal.softwarestudio.org ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice :Mailto:alice@cal.softwarestudio.org ATTENDEE ;RSVP=TRUE ;CUTYPE=INDIVIDUAL ;CN=B :Mailto:B@example.com DTSTAMP :19970611T040000Z DTSTART :19970701T070000 DTEND :19970701T080000 SUMMARY :Overlap 2 UID :calsrv.example.com-873970198738704@example.com SEQUENCE :0 STATUS :CONFIRMED END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T171147Z UID :calsrv.example.com-873970198738705@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY :Overlap 3 SEQUENCE :0 COMMENT :I can't make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=DECLINED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T171154Z UID :calsrv.example.com-873970198738703@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY : Overlap 1 SEQUENCE :0 COMMENT :Unfortunately\, I have another commitment that conflicts with this meeting. I am delegating my attendance to Bob. ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=DELEGATED ;DELEGATED-TO=bob@cal.softwarestudio.org :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR X-LIC-NOTE : Overlap with Slot 2\, 1300 to 1400\, should be counterproposed METHOD :REQUEST VERSION :2.0 BEGIN:VEVENT ORGANIZER :Mailto:bob@cal.softwarestudio.org ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice :Mailto:alice@cal.softwarestudio.org ATTENDEE ;RSVP=TRUE ;CUTYPE=INDIVIDUAL ;CN=B :Mailto:B@example.com DTSTAMP :19970611T040000Z DTSTART :19970701T070000 DTEND :19970701T080000 SUMMARY :Overlap 2 UID :calsrv.example.com-873970198738704@example.com SEQUENCE :0 STATUS :CONFIRMED END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T171154Z UID :calsrv.example.com-873970198738705@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY :Overlap 3 SEQUENCE :0 COMMENT :I can't make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=DECLINED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T144324Z UID :calsrv.example.com-873970198738703@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY : Overlap 1 SEQUENCE :0 COMMENT :Unfortunately\, I have another commitment that conflicts with this meeting. I am delegating my attendance to Bob. ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=DELEGATED ;DELEGATED-TO=bob@cal.softwarestudio.org :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR X-LIC-NOTE : Overlap with Slot 2\, 1300 to 1400\, should be counterproposed METHOD :REQUEST VERSION :2.0 BEGIN:VEVENT ORGANIZER :Mailto:bob@cal.softwarestudio.org ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice :Mailto:alice@cal.softwarestudio.org ATTENDEE ;RSVP=TRUE ;CUTYPE=INDIVIDUAL ;CN=B :Mailto:B@example.com DTSTAMP :19970611T040000Z DTSTART :19970701T230000 DTEND :19970702T000000 SUMMARY :Overlap 2 UID :calsrv.example.com-873970198738704@example.com SEQUENCE :0 STATUS :CONFIRMED END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T144324Z UID :calsrv.example.com-873970198738705@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY :Overlap 3 SEQUENCE :0 COMMENT :I can't make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=DECLINED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T144412Z UID :calsrv.example.com-873970198738703@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY : Overlap 1 SEQUENCE :0 COMMENT :Unfortunately\, I have another commitment that conflicts with this meeting. I am delegating my attendance to Bob. ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=DELEGATED ;DELEGATED-TO=bob@cal.softwarestudio.org :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR BEGIN:VCALENDAR X-LIC-NOTE : Overlap with Slot 2\, 1300 to 1400\, should be counterproposed METHOD :REQUEST VERSION :2.0 BEGIN:VEVENT ORGANIZER :Mailto:bob@cal.softwarestudio.org ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice :Mailto:alice@cal.softwarestudio.org ATTENDEE ;RSVP=TRUE ;CUTYPE=INDIVIDUAL ;CN=B :Mailto:B@example.com DTSTAMP :19970611T040000Z DTSTART :19970701T230000 DTEND :19970702T000000 SUMMARY :Overlap 2 UID :calsrv.example.com-873970198738704@example.com SEQUENCE :0 STATUS :CONFIRMED END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD :REPLY VERSION :2.0 PRODID :-//SoftwareStudio//NONSGML libical 0.21 //EN BEGIN:VEVENT DTSTAMP :20001121T144412Z UID :calsrv.example.com-873970198738705@example.com ORGANIZER :Mailto:bob@cal.softwarestudio.org SUMMARY :Overlap 3 SEQUENCE :0 COMMENT :I can't make it to this meeting ATTENDEE ;ROLE=CHAIR ;CUTYPE=INDIVIDUAL ;CN=Alice ;PARTSTAT=DECLINED :Mailto:alice@cal.softwarestudio.org END:VEVENT END:VCALENDAR libical-1.0/src/test/storage.c0000664000076400007640000005101312132563126015312 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: storage.c CREATOR: eric 03 April 1999 DESCRIPTION: $Id: storage.c,v 1.6 2008-01-02 20:07:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The original author is Eric Busboom The original code is usecases.c ======================================================================*/ #include #include #include /* for strdup */ #include /* for malloc */ #include /* for printf */ #include /* for time() */ #include "icalmemory.h" #include "icaldirset.h" #include "icalfileset.h" #ifdef WITH_BDB4 #include "icalbdbset.h" #endif #include "icalerror.h" #include "icalrestriction.h" #include "icalcalendar.h" #define OUTPUT_FILE "filesetout.ics" #define DATABASE "calendar.db" /* define sample calendar struct */ struct calendar { int ID; int total_size; /* offsets */ int total_size_offset; int vcalendar_size_offset; int vcalendar_offset; int title_size_offset; int title_offset; /* data */ int vcalendar_size; char *vcalendar; int title_size; char *title; }; int vcalendar_init(struct calendar **cal, char *vcalendar, char *title); #ifdef WITH_BDB4 int get_title(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey); char * parse_vcalendar(const DBT *dbt) ; #endif char * pack_calendar(struct calendar *cal, int size); struct calendar * unpack_calendar(char *str, int size); char str[] = "BEGIN:VCALENDAR\n\ PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\ VERSION:2.0\n\ BEGIN:VTIMEZONE\n\ TZID:US-Eastern\n\ BEGIN:STANDARD\n\ DTSTART:19981025T020000\n\ RDATE:19981025T020000\n\ TZOFFSETFROM:-0400\n\ TZOFFSETTO:-0500\n\ TZNAME:EST\n\ END:STANDARD\n\ BEGIN:DAYLIGHT\n\ DTSTART:19990404T020000\n\ RDATE:19990404T020000\n\ TZOFFSETFROM:-0500\n\ TZOFFSETTO:-0400\n\ TZNAME:EDT\n\ END:DAYLIGHT\n\ END:VTIMEZONE\n\ BEGIN:VEVENT\n\ DTSTAMP:19980309T231000Z\n\ UID:guid-1.host1.com\n\ ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\ ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\ DESCRIPTION:Project XYZ Review Meeting\n\ CATEGORIES:MEETING\n\ CLASS:PUBLIC\n\ CREATED:19980309T130000Z\n\ SUMMARY:XYZ Project Review\n\ DTSTART;TZID=US-Eastern:19980312T083000\n\ DTEND;TZID=US-Eastern:19980312T093000\n\ LOCATION:1CP Conference Room 4350\n\ END:VEVENT\n\ BEGIN:BOOGA\n\ DTSTAMP:19980309T231000Z\n\ X-LIC-FOO:Booga\n\ DTSTOMP:19980309T231000Z\n\ UID:guid-1.host1.com\n\ END:BOOGA\n\ END:VCALENDAR"; char str2[] = "BEGIN:VCALENDAR\n\ PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\ VERSION:2.0\n\ BEGIN:VEVENT\n\ DTSTAMP:19980309T231000Z\n\ UID:guid-1.host1.com\n\ ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\ ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\ DESCRIPTION:Project XYZ Review Meeting\n\ CATEGORIES:MEETING\n\ CLASS:PUBLIC\n\ CREATED:19980309T130000Z\n\ SUMMARY:XYZ Project Review\n\ DTSTART;TZID=US-Eastern:19980312T083000\n\ DTEND;TZID=US-Eastern:19980312T093000\n\ LOCATION:1CP Conference Room 4350\n\ END:VEVENT\n\ END:VCALENDAR\n\ "; void test_fileset() { icalfileset *cout; int month = 0; int count=0; struct icaltimetype start, end; icalcomponent *c,*clone, *itr; start = icaltime_from_timet( time(0),0); end = start; end.hour++; cout = icalfileset_new(OUTPUT_FILE); assert(cout != 0); c = icalparser_parse_string(str2); assert(c != 0); /* Add data to the file */ for(month = 1; month < 10; month++){ icalcomponent *event; icalproperty *dtstart, *dtend; cout = icalfileset_new(OUTPUT_FILE); assert(cout != 0); start.month = month; end.month = month; clone = icalcomponent_new_clone(c); assert(clone !=0); event = icalcomponent_get_first_component(clone,ICAL_VEVENT_COMPONENT); assert(event != 0); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); assert(dtstart!=0); icalproperty_set_dtstart(dtstart,start); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); assert(dtend!=0); icalproperty_set_dtend(dtend,end); icalfileset_add_component(cout,clone); icalfileset_commit(cout); icalset_free(cout); } /* Print them out */ cout = icalfileset_new(OUTPUT_FILE); assert(cout != 0); for (itr = icalfileset_get_first_component(cout); itr != 0; itr = icalfileset_get_next_component(cout)){ icalcomponent *event; icalproperty *dtstart, *dtend; count++; event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), icalproperty_as_ical_string(dtend)); } /* Remove all of them */ icalset_free(cout); cout = icalfileset_new(OUTPUT_FILE); assert(cout != 0); for (itr = icalfileset_get_first_component(cout); itr != 0; itr = icalfileset_get_next_component(cout)){ icalfileset_remove_component(cout, itr); } icalset_free(cout); /* Print them out again */ cout = icalfileset_new(OUTPUT_FILE); assert(cout != 0); count =0; for (itr = icalfileset_get_first_component(cout); itr != 0; itr = icalfileset_get_next_component(cout)){ icalcomponent *event; icalproperty *dtstart, *dtend; count++; event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), icalproperty_as_ical_string(dtend)); } icalset_free(cout); } /* In this example, we're storing a calendar with several components under the reference id "calendar_7286" and retrieving records based on title, "month_1" through "month_10". We use a number of the "optional" arguments to specify secondary indices, sub-databases (i.e. having multiple databases residing within a single Berkeley DB file), and keys for storage and retrieval. */ #ifdef WITH_BDB4 void test_bdbset() { icalbdbset *cout; int month = 0; int count=0; int num_components=0; int szdata_len=0; int ret=0; char *subdb, *szdata, *szpacked_data; char uid[255]; struct icaltimetype start, end; icalcomponent *c,*clone, *itr; DB *dbp, *sdbp; DBT key, data; DBC *dbcp; struct calendar *cal; int cal_size; start = icaltime_from_timet( time(0),0); end = start; end.hour++; /* Note: as per the Berkeley DB ref pages: * * The database argument is optional, and allows applications to * have multiple databases in a single file. Although no database * argument needs to be specified, it is an error to attempt to * open a second database in a file that was not initially created * using a database name. * */ subdb = "calendar_id"; sdbp = 0; /* open database, using subdb */ dbp = icalbdbset_database_open(DATABASE, subdb, DB_HASH); sdbp = icalbdbset_secondary_open(dbp, DATABASE, "title", get_title, DB_HASH); c = icalparser_parse_string(str2); assert(c != 0); /* Add data to the file */ for(month = 1; month < 10; month++){ icalcomponent *event; icalproperty *dtstart, *dtend, *location; /* retrieve data */ cout = icalbdbset_new(dbp, sdbp, NULL); assert(cout != 0); start.month = month; end.month = month; clone = icalcomponent_new_clone(c); assert(clone !=0); event = icalcomponent_get_first_component(clone, ICAL_VEVENT_COMPONENT); assert(event != 0); dtstart = icalcomponent_get_first_property(event, ICAL_DTSTART_PROPERTY); assert(dtstart!=0); icalproperty_set_dtstart(dtstart,start); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); assert(dtend!=0); icalproperty_set_dtend(dtend,end); location = icalcomponent_get_first_property(event, ICAL_LOCATION_PROPERTY); assert(location!=0); #if 0 /* change the uid to include the month */ sprintf(uid, "%s_%d", icalcomponent_get_uid(clone), month); icalcomponent_set_uid(clone, uid); #endif icalbdbset_add_component(cout,clone); /* commit changes */ icalbdbset_commit(cout); num_components = icalcomponent_count_components(clone, ICAL_ANY_COMPONENT); icalset_free(cout); } /* try out the cursor operations */ memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); ret = icalbdbset_acquire_cursor(dbp, &dbcp); ret = icalbdbset_get_first(dbcp, &key, &data); ret = icalbdbset_get_next(dbcp, &key, &data); ret = icalbdbset_get_last(dbcp, &key, &data); /* Print them out */ for(month = 1, count=0; month < 10; month++){ char *title; icalcomponent *event; icalproperty *dtstart, *dtend; cout = icalbdbset_new(dbp, sdbp, NULL); assert(cout != 0); for (itr = icalbdbset_get_first_component(cout); itr != 0; itr = icalbdbset_get_next_component(cout)){ icalcomponent *event; icalproperty *dtstart, *dtend; count++; event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), icalproperty_as_ical_string(dtend)); } icalset_free(cout); } /* close database */ icalbdbset_database_close(dbp); icalbdbset_database_close(sdbp); /* open database */ dbp = icalbdbset_database_open(DATABASE, subdb, DB_HASH); sdbp = icalbdbset_secondary_open(dbp, DATABASE, "title", get_title, DB_HASH); /* Remove all of them */ for(month = 1; month < 10; month++){ cout = icalbdbset_new(dbp, sdbp, NULL); assert(cout != 0); for (itr = icalbdbset_get_first_component(cout); itr != 0; itr = icalbdbset_get_next_component(cout)){ icalbdbset_remove_component(cout, itr); } icalbdbset_commit(cout); icalset_free(cout); } /* Print them out again */ for(month = 1, count=0; month < 10; month++){ char *title; icalcomponent *event; icalproperty *dtstart, *dtend; cout = icalbdbset_new(dbp, sdbp, NULL); assert(cout != 0); for (itr = icalbdbset_get_first_component(cout); itr != 0; itr = icalbdbset_get_next_component(cout)){ icalcomponent *event; icalproperty *dtstart, *dtend; count++; event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), icalproperty_as_ical_string(dtend)); } icalset_free(cout); } } /* get_title -- extracts a secondary key (the vcalendar) * from a primary key/data pair */ /* just create a random title for now */ int get_title(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey) { icalcomponent *cl; char title[255]; memset(skey, 0, sizeof(DBT)); cl = icalparser_parse_string((char *)pdata->data); sprintf(title, "title_%s", icalcomponent_get_uid(cl)); skey->data = strdup(title); skey->size = strlen(skey->data); return (0); } char * parse_vcalendar(const DBT *dbt) { char *str; struct calendar *cal; str = (char *)dbt->data; cal = unpack_calendar(str, dbt->size); return cal->vcalendar; } #endif int vcalendar_init(struct calendar **rcal, char *vcalendar, char *title) { int vcalendar_size, title_size, total_size; struct calendar *cal; if(vcalendar) vcalendar_size = strlen(vcalendar); else { vcalendar = ""; vcalendar_size = strlen(vcalendar); } if(title) title_size = strlen(title); else { title = ""; title_size = strlen(title); } total_size = sizeof(struct calendar) + vcalendar_size + title_size; if((cal = (struct calendar *)malloc(total_size))==NULL) return 0; memset(cal, 0, total_size); /* offsets */ cal->total_size_offset = sizeof(int); cal->vcalendar_size_offset = (sizeof(int) * 7); cal->vcalendar_offset = cal->vcalendar_size_offset + sizeof(int); cal->title_size_offset = cal->vcalendar_offset + vcalendar_size; cal->title_offset = cal->title_size_offset + sizeof(int); /* sizes */ cal->total_size = total_size; cal->vcalendar_size = vcalendar_size; cal->title_size = title_size; if (vcalendar && *vcalendar) cal->vcalendar = strdup(vcalendar); if (title && *title) cal->title = strdup(title); *rcal = cal; return 0; } char * pack_calendar(struct calendar *cal, int size) { char *str; if((str = (char *)malloc(sizeof(char) * size))==NULL) return 0; /* ID */ memcpy(str, &cal->ID, sizeof(cal->ID)); /* total_size */ memcpy(str + cal->total_size_offset, &cal->total_size, sizeof(cal->total_size)); /* vcalendar_size */ memcpy(str + cal->vcalendar_size_offset, &cal->vcalendar_size, sizeof(cal->vcalendar_size)); /* vcalendar */ memcpy(str + cal->vcalendar_offset, cal->vcalendar, cal->vcalendar_size); /* title_size */ memcpy(str + cal->title_size_offset, &cal->title_size, sizeof(cal->title_size)); /* title */ memcpy(str + cal->title_offset, cal->title, cal->title_size); return str; } struct calendar * unpack_calendar(char *str, int size) { struct calendar *cal; if((cal = (struct calendar *) malloc(size))==NULL) return 0; memset(cal, 0, size); /* offsets */ cal->total_size_offset = sizeof(int); cal->vcalendar_size_offset = (sizeof(int) * 7); cal->vcalendar_offset = cal->vcalendar_size_offset + sizeof(int); /* ID */ memcpy(&cal->ID, str, sizeof(cal->ID)); /* total_size */ memcpy(&cal->total_size, str + cal->total_size_offset, sizeof(cal->total_size)); /* vcalendar_size */ memcpy(&cal->vcalendar_size, str + cal->vcalendar_size_offset, sizeof(cal->vcalendar_size)); if((cal->vcalendar = (char *)malloc(sizeof(char) * cal->vcalendar_size))==NULL) return 0; /* vcalendar */ memcpy(cal->vcalendar, (char *)(str + cal->vcalendar_offset), cal->vcalendar_size); cal->title_size_offset = cal->vcalendar_offset + cal->vcalendar_size; cal->title_offset = cal->title_size_offset + sizeof(int); /* title_size */ memcpy(&cal->title_size, str + cal->title_size_offset, sizeof(cal->title_size)); if((cal->title = (char *)malloc(sizeof(char) * cal->title_size))==NULL) return 0; /* title*/ memcpy(cal->title, (char *)(str + cal->title_offset), cal->title_size); return cal; } int test_dirset() { icalcomponent *c, *gauge; icalerrorenum error; icalcomponent *itr; icalfileset* cluster; struct icalperiodtype rtime; icaldirset *s = icaldirset_new("store"); int i; assert(s != 0); rtime.start = icaltime_from_timet( time(0),0); cluster = icalfileset_new(OUTPUT_FILE); assert(cluster != 0); #define NUMCOMP 4 /* Duplicate every component in the cluster NUMCOMP times */ icalerror_clear_errno(); for (i = 1; i #include "regression.h" #include extern int VERBOSE; void create_simple_component(void) { icalcomponent* calendar; icalproperty *version, *bogus; /* Create calendar and add properties */ calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); ok("create vcalendar component", (calendar!=NULL)); icalcomponent_add_property( calendar, icalproperty_new_version("2.0") ); version = icalcomponent_get_first_property(calendar,ICAL_VERSION_PROPERTY); ok("version property added", (version!=NULL)); bogus = icalcomponent_get_first_property(calendar,ICAL_DTSTART_PROPERTY); ok("bogus dtstart not found", (bogus == NULL)); if (VERBOSE && calendar) printf("%s\n",icalcomponent_as_ical_string(calendar)); icalcomponent_free(calendar); } static char* create_new_component_str = "BEGIN:VCALENDAR\r\n" "VERSION:2.0\r\n" "PRODID:-//RDU Software//NONSGML HandCal//EN\r\n" "BEGIN:VTIMEZONE\r\n" "TZID:America/New_York\r\n" "BEGIN:DAYLIGHT\r\n" "DTSTART:20020606T212449\r\n" "RDATE;VALUE=PERIOD:20020606T212449/20020607T012809\r\n" "TZOFFSETFROM:-0500\r\n" "TZOFFSETTO:-0400\r\n" "TZNAME:EST\r\n" "END:DAYLIGHT\r\n" "BEGIN:STANDARD\r\n" "DTSTART:20020606T212449\r\n" "RDATE;VALUE=PERIOD:20020606T212449/20020607T012809\r\n" "TZOFFSETFROM:-0400\r\n" "TZOFFSETTO:-0500\r\n" "TZNAME:EST\r\n" "END:STANDARD\r\n" "END:VTIMEZONE\r\n" "BEGIN:VEVENT\r\n" "DTSTAMP:20020606T212449\r\n" "UID:guid-1.host1.com\r\n" "ORGANIZER;ROLE=CHAIR:mrbig@host.com\r\n" "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CUTYPE=GROUP:employee-A@host.com\r\n" "DESCRIPTION:Project XYZ Review Meeting\r\n" "CATEGORIES:MEETING\r\n" "CLASS:PRIVATE\r\n" "CREATED:20020606T212449\r\n" "SUMMARY:XYZ Project Review\r\n" "DTSTART;TZID=America/New_York:20020606T212449\r\n" "DTEND;TZID=America/New_York:20020606T212449\r\n" "LOCATION:1CP Conference Room 4350\r\n" "END:VEVENT\r\n" "END:VCALENDAR\r\n"; /* Create a new component */ void create_new_component() { icalcomponent* calendar; icalcomponent* timezone; icalcomponent* tzc; icalcomponent* event; struct icaltimetype atime = icaltime_from_timet( 1023398689, 0); struct icaldatetimeperiodtype rtime; icalproperty* property; char *calendar_as_string; rtime.period.start = icaltime_from_timet( 1023398689,0); rtime.period.end = icaltime_from_timet( 1023409689,0); rtime.period.end.hour++; rtime.time = icaltime_null_time(); /* Create calendar and add properties */ calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); icalcomponent_add_property( calendar, icalproperty_new_version("2.0") ); icalcomponent_add_property( calendar, icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN") ); /* Create a timezone object and add it to the calendar */ timezone = icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); icalcomponent_add_property( timezone, icalproperty_new_tzid("America/New_York") ); /* Add a sub-component of the timezone */ tzc = icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT); icalcomponent_add_property( tzc, icalproperty_new_dtstart(atime) ); icalcomponent_add_property( tzc, icalproperty_new_rdate(rtime) ); icalcomponent_add_property( tzc, icalproperty_new_tzoffsetfrom(-5*3600) ); icalcomponent_add_property( tzc, icalproperty_new_tzoffsetto(-4*3600) ); icalcomponent_add_property( tzc, icalproperty_new_tzname("EST") ); icalcomponent_add_component(timezone,tzc); icalcomponent_add_component(calendar,timezone); /* Add a second subcomponent */ tzc = icalcomponent_new(ICAL_XSTANDARD_COMPONENT); icalcomponent_add_property( tzc, icalproperty_new_dtstart(atime) ); icalcomponent_add_property( tzc, icalproperty_new_rdate(rtime) ); icalcomponent_add_property( tzc, icalproperty_new_tzoffsetfrom(-4*3600) ); icalcomponent_add_property( tzc, icalproperty_new_tzoffsetto(-5*3600) ); icalcomponent_add_property( tzc, icalproperty_new_tzname("EST") ); icalcomponent_add_component(timezone,tzc); /* Add an event */ event = icalcomponent_new(ICAL_VEVENT_COMPONENT); icalcomponent_add_property( event, icalproperty_new_dtstamp(atime) ); icalcomponent_add_property( event, icalproperty_new_uid("guid-1.host1.com") ); /* add a property that has parameters */ property = icalproperty_new_organizer("mrbig@host.com"); icalproperty_add_parameter( property, icalparameter_new_role(ICAL_ROLE_CHAIR) ); icalcomponent_add_property(event,property); /* add another property that has parameters */ property = icalproperty_new_attendee("employee-A@host.com"); icalproperty_add_parameter( property, icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT) ); icalproperty_add_parameter( property, icalparameter_new_rsvp(ICAL_RSVP_TRUE) ); icalproperty_add_parameter( property, icalparameter_new_cutype(ICAL_CUTYPE_GROUP) ); icalcomponent_add_property(event,property); /* more properties */ icalcomponent_add_property( event, icalproperty_new_description("Project XYZ Review Meeting") ); icalcomponent_add_property( event, icalproperty_new_categories("MEETING") ); icalcomponent_add_property( event, icalproperty_new_class(ICAL_CLASS_PRIVATE) ); icalcomponent_add_property( event, icalproperty_new_created(atime) ); icalcomponent_add_property( event, icalproperty_new_summary("XYZ Project Review") ); property = icalproperty_new_dtstart(atime); icalproperty_add_parameter( property, icalparameter_new_tzid("America/New_York") ); icalcomponent_add_property(event,property); property = icalproperty_new_dtend(atime); icalproperty_add_parameter( property, icalparameter_new_tzid("America/New_York") ); icalcomponent_add_property(event,property); icalcomponent_add_property( event, icalproperty_new_location("1CP Conference Room 4350") ); icalcomponent_add_component(calendar,event); calendar_as_string = icalcomponent_as_ical_string(calendar); is("build large, complex component", calendar_as_string, create_new_component_str); if (VERBOSE && calendar) printf("%s\n",icalcomponent_as_ical_string(calendar)); if (calendar) icalcomponent_free(calendar); } /* Create a new component, using the va_args list */ void create_new_component_with_va_args() { icalcomponent* calendar; struct icaltimetype atime = icaltime_from_timet( time(0),0); struct icaldatetimeperiodtype rtime; rtime.period.start = icaltime_from_timet( time(0),0); rtime.period.end = icaltime_from_timet( time(0),0); rtime.period.end.hour++; rtime.time = icaltime_null_time(); calendar = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version("2.0"), icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), icalcomponent_vanew( ICAL_VTIMEZONE_COMPONENT, icalproperty_new_tzid("America/New_York"), icalcomponent_vanew( ICAL_XDAYLIGHT_COMPONENT, icalproperty_new_dtstart(atime), icalproperty_new_rdate(rtime), icalproperty_new_tzoffsetfrom(-4.0), icalproperty_new_tzoffsetto(-5.0), icalproperty_new_tzname("EST"), (void *)0), icalcomponent_vanew( ICAL_XSTANDARD_COMPONENT, icalproperty_new_dtstart(atime), icalproperty_new_rdate(rtime), icalproperty_new_tzoffsetfrom(-5.0), icalproperty_new_tzoffsetto(-4.0), icalproperty_new_tzname("EST"), (void *)0), (void *)0), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstamp(atime), icalproperty_new_uid("guid-1.host1.com"), icalproperty_vanew_organizer( "mrbig@host.com", icalparameter_new_role(ICAL_ROLE_CHAIR), (void *)0), icalproperty_vanew_attendee( "employee-A@host.com", icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), icalparameter_new_rsvp(ICAL_RSVP_TRUE), icalparameter_new_cutype(ICAL_CUTYPE_GROUP), (void *)0), icalproperty_new_description("Project XYZ Review Meeting"), icalproperty_new_categories("MEETING"), icalproperty_new_class(ICAL_CLASS_PUBLIC), icalproperty_new_created(atime), icalproperty_new_summary("XYZ Project Review"), icalproperty_vanew_dtstart( atime, icalparameter_new_tzid("America/New_York"), (void *)0), icalproperty_vanew_dtend( atime, icalparameter_new_tzid("America/New_York"), (void *)0), icalproperty_new_location("1CP Conference Room 4350"), (void *)0), (void *)0); ok("creating a complex vcalendar", (calendar != NULL)); if (VERBOSE && calendar) printf("%s\n",icalcomponent_as_ical_string(calendar)); icalcomponent_free(calendar); } static void print_span(int c, struct icaltime_span span ){ printf("span-->%d, %d\n", (int)span.start, (int)span.end); if (span.start == 0) printf("#%02d start: (empty)\n",c); else printf("#%02d start: %s\n",c,ical_timet_string(span.start)); if (span.end == 0) printf(" end : (empty)\n"); else printf(" end : %s\n",ical_timet_string(span.end)); } /** Test icalcomponent_get_span() * */ void test_icalcomponent_get_span() { time_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000, Sat Nov 4 15:00:00 PST 2000 */ time_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000 Sat Nov 4 16:00:00 PST 2000 */ struct icaldurationtype dur; struct icaltime_span span; icalcomponent *c; icaltimezone *azone, *bzone; int tnum = 0; /** test 0 * Direct assigning time_t means they will be interpreted as UTC */ span.start = tm1; span.end = tm2; if (VERBOSE) print_span(tnum++,span); /** test 1 * We specify times in a timezone, the returned span is in UTC */ azone = icaltimezone_get_builtin_timezone("America/Los_Angeles"); c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_vanew_dtstart( icaltime_from_timet_with_zone(tm1,0,azone), icalparameter_new_tzid("America/Los_Angeles"),0), icalproperty_vanew_dtend( icaltime_from_timet_with_zone(tm2,0,azone), icalparameter_new_tzid("America/Los_Angeles"),0), (void *)0); span = icalcomponent_get_span(c); if (VERBOSE) print_span(tnum++,span); #if ADD_TESTS_REQUIRING_INVESTIGATION int_is("America/Los_Angeles", span.start, 973407600); #endif icalcomponent_free(c); /** test 2 * We specify times as floating, the returned span is in UTC * with no conversion applied - so result should be as test 0 */ c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_vanew_dtstart(icaltime_from_timet(tm1,0),0), icalproperty_vanew_dtend(icaltime_from_timet(tm2,0),0), (void *)0); span = icalcomponent_get_span(c); if (VERBOSE) print_span(tnum++,span); int_is("floating time", span.start, tm1); icalcomponent_free(c); /** test 3 * We specify times in a timezone, the returned span is in UTC */ azone = icaltimezone_get_builtin_timezone("America/New_York"); c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_vanew_dtstart( icaltime_from_timet_with_zone(tm1,0,azone), icalparameter_new_tzid("America/New_York"),0), icalproperty_vanew_dtend( icaltime_from_timet_with_zone(tm2,0,azone), icalparameter_new_tzid("America/New_York"),0), (void *)0); span = icalcomponent_get_span(c); if (VERBOSE) print_span(tnum++,span); #if ADD_TESTS_REQUIRING_INVESTIGATION int_is("America/New_York", span.start, 973396800); #endif icalcomponent_free(c); /** test 4 * We specify times in two different timezones, the returned span * is in UTC */ azone = icaltimezone_get_builtin_timezone("America/New_York"); bzone = icaltimezone_get_builtin_timezone("America/Los_Angeles"); c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_vanew_dtstart( icaltime_from_timet_with_zone(tm1,0,azone), icalparameter_new_tzid("America/New_York"),0), icalproperty_vanew_dtend( icaltime_from_timet_with_zone(tm2,0,bzone), icalparameter_new_tzid("America/Los_Angeles"),0), (void *)0); span = icalcomponent_get_span(c); if (VERBOSE) print_span(tnum++,span); #if ADD_TESTS_REQUIRING_INVESTIGATION int_is("America/New_York", span.start, 973396800); #endif icalcomponent_free(c); /** test 5 * We specify start time in a timezone and a duration, the returned span * is in UTC */ azone = icaltimezone_get_builtin_timezone("America/Los_Angeles"); memset(&dur,0,sizeof(dur)); dur.minutes = 30; c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_vanew_dtstart( icaltime_from_timet_with_zone(tm1,0,azone), icalparameter_new_tzid("America/Los_Angeles"),0), icalproperty_new_duration(dur), (void *)0); span = icalcomponent_get_span(c); if (VERBOSE) print_span(tnum++,span); #if ADD_TESTS_REQUIRING_INVESTIGATION int_is("America/Los_Angeles w/ duration", span.end, 973409400); #endif icalcomponent_free(c); icalerror_errors_are_fatal = 0; /** test 6 * We specify only start time, should return a null span with no error */ c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(icaltime_from_timet(tm1,0)), (void *)0); span = icalcomponent_get_span(c); if (VERBOSE) print_span(tnum++,span); int_is("null span", span.start, 0); icalcomponent_free(c); /** test 7 * We specify start and end date */ c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(icaltime_from_timet(tm1,1)), icalproperty_new_dtend(icaltime_from_timet(tm1,1)), (void *)0); span = icalcomponent_get_span(c); if (VERBOSE) print_span(tnum++,span); int_is("UTC", span.start, 973296000); icalcomponent_free(c); /** test 8 * We specify start and end date */ c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(icaltime_from_timet(tm1,1)), icalproperty_new_dtend(icaltime_from_timet(tm2,1)), (void *)0); span = icalcomponent_get_span(c); int_is("UTC #2", span.start, 973296000); if (VERBOSE) print_span(tnum++,span); icalcomponent_free(c); /** test 9 * We specify start date */ c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(icaltime_from_timet(tm1,1)), (void *)0); span = icalcomponent_get_span(c); if (VERBOSE) print_span(tnum++,span); int_is("start date only", span.end, 973382399); icalcomponent_free(c); /* assert(icalerrno == ICAL_MALFORMEDDATA_ERROR); */ icalerror_errors_are_fatal = 1; } libical-1.0/src/test/2446.ics0000664000076400007640000000000012132563126014567 0ustar allenallenlibical-1.0/src/test/regression-classify.c0000664000076400007640000001346312132563126017650 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: regression-classify.c CREATOR: eric 11 February 2000 $Id: regression-classify.c,v 1.5 2008-01-02 20:07:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* for printf */ #include #include /* For strerror */ #include #include #include "regression.h" extern int VERBOSE; /* Get a note about the purpose of the property*/ static const char* get_note(icalcomponent *c) { icalproperty *p; const char* note = 0; if(c != 0){ for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY); p!= 0; p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){ if(strcmp(icalproperty_get_x_name(p),"X-LIC-NOTE")==0){ note = icalproperty_get_x(p); } } } if(note == 0){ note = "None"; } return note; } /* Get the expected result about the purpose of the property*/ static const char* get_expect(icalcomponent *c) { icalproperty *p; const char* note = 0; if(c != 0){ for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY); p!= 0; p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){ if(strcmp(icalproperty_get_x_name(p),"X-LIC-EXPECT")==0){ note = icalproperty_get_x(p); } } } if(note == 0){ note = "None"; } return note; } void test_classify(void) { icalcomponent *c,*match; int i=0; int error_count = 0; /* Open up the two storage files, one for the incomming components, one for the calendar */ icalfileset_options options = {O_RDONLY, 0644, 0}; icalset* incoming = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/incoming.ics", &options); icalset* cal = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/calendar.ics", &options); icalset* f = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/classify.ics", &options); ok("opening file classify.ics", (f!=0)); ok("opening file calendar.ics", (cal!=0)); ok("opening file incoming.ics", (incoming!=0)); /* some basic tests.. */ if (f) { c = icalset_get_first_component(f); match = icalset_get_next_component(f); ok("test two vcalendars for SEQUENCE with icalclassify()", (icalclassify(c,match,"A@example.com") == ICAL_XLICCLASS_REQUESTRESCHEDULE)); icalset_free(f); } assert(incoming!= 0); assert(cal!=0); /* Iterate through all of the incoming components */ for(c=icalset_get_first_component(incoming);c!=0; c=icalset_get_next_component(incoming)){ icalproperty_xlicclass class; icalcomponent *match = 0; const char* this_uid; const char* this_note = get_note(c); const char* expected_result = get_expect(c); const char* actual_result; const char* match_note; char msg[128]; i++; /* Check this component against the restrictions imposed by iTIP. An errors will be inserted as X-LIC-ERROR properties in the component. The Parser will also insert errors if it cannot parse the component */ icalcomponent_check_restrictions(c); /* If there are any errors, print out the component */ error_count = icalcomponent_count_errors(c); sprintf(msg, "%s - parsing", this_note); int_is(msg, error_count, 0); if (error_count !=0) { if (VERBOSE) printf("----- Component has errors ------- \n%s-----------------\n", icalcomponent_as_ical_string(c)); } /* Use one of the icalcomponent convenience routines to get the UID. This routine will save you from having to use icalcomponent_get_inner(), icalcomponent_get_first_property(), checking the return value, and then calling icalproperty_get_uid. There are several other convenience routines for DTSTART, DTEND, DURATION, SUMMARY, METHOD, and COMMENT */ this_uid = icalcomponent_get_uid(c); if(this_uid != 0){ /* Look in the calendar for a component with the same UID as the incomming component. We should reall also be checking the RECURRENCE-ID. Another way to do this operation is to us icalset_find_match(), which does use the RECURRENCE-ID. */ match = icalset_fetch(cal,this_uid); } /* Classify the incoming component. The third argument is the calid of the user who owns the calendar. In a real program, you would probably switch() on the class.*/ class = icalclassify(c,match,"A@example.com"); /** eventually test this too.. **/ match_note = get_note(match); actual_result = icalproperty_enum_to_string(class); sprintf(msg, "expecting %s", expected_result); is(msg, expected_result, actual_result); if (VERBOSE) printf("Test %d\n\ Incoming: %s\n\ Matched: %s\n\ Classification: %s\n\n", i,this_note,get_note(match), icalproperty_enum_to_string(class)); } icalset_free(incoming); icalset_free(cal); } libical-1.0/src/test/itip.ics0000664000076400007640000000050112132563126015143 0ustar allenallen BEGIN:VCALENDAR METHOD:REPLY PRODID:-//ACME/DesktopCalendar//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE:mailto:eric@agony.busboom.org DTSTART:19970701T200000Z DTSTAMP:19970611T190000Z SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES UID:0981234-1234234-23@example.com END:VEVENT END:VCALENDAR libical-1.0/src/test/testmime.c0000664000076400007640000001525712132563126015507 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: CREATOR: eric 25 June 2000 $Id: testmime.c,v 1.6 2008-02-03 16:10:48 dothebart Exp $ $Locker: $ The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Initial Developer of the Original Code is Eric Busboom (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include /* For rand */ #include /* for strrchr, strdup*/ #if defined(HAVE_UNISTD_H) #include /* for getopt */ #endif /*int sspm_parse_mime(struct sspm_part *parts, size_t max_parts, struct sspm_action_map *actions, char* (*get_string)(char *s, size_t size, void* data), void *get_string_data, struct sspm_header *first_header ); */ char* major_type_string[] = { "TEXT", "IMAGE", "AUDIO", "VIDEO", "APPLICATION", "MULTIPART", "MESSAGE", "UNKNOWN", "NO" }; char* minor_type_string[] = { "ANY", "PLAIN", "RFC822", "DIGEST", "CALENDAR", "MIXED", "RELATED", "ALTERNATIVE", "PARALLEL", "UNKNOWN", "NO" }; char* read_stream(char *s, size_t size, void *d) { char *c = fgets(s,size, (FILE*)d); return c; } int main(int argc, char* argv[]) { FILE *f; int c; #if !defined(HAVE_UNISTD_H) extern char *optarg; extern int optind, optopt; #endif int errflg=0; char* program_name; struct options{ int normal; int stress; int base64; int qp; int sleep; int count; char* input_file; } opt; memset(&opt,0,sizeof(opt)); program_name = (char*)strrchr((char*)argv[0],'/'); program_name++; while ((c = getopt(argc, argv, "nsbqi:S:c:")) != -1) { switch (c) { case 'i': { /* Input comes from named file */ opt.input_file = strdup(optarg); break; } case 'n':{ /* Normal */ if(opt.stress+opt.base64+opt.qp != 0){ fprintf(stderr, "%s: Use only one of n,s,b and q\n", program_name); } opt.normal = 1; break; } case 's':{ /* Stress-test*/ if(opt.base64+opt.normal+opt.qp != 0){ fprintf(stderr, "%s: Use only one of n,s,b and q\n", program_name); } opt.stress = 1; break; } case 'b':{ /* test base64 decoding*/ if(opt.stress+opt.normal+opt.qp != 0){ fprintf(stderr, "%s: Use only one of n,s,b and q\n", program_name); } opt.base64 = 1; break; } case 'q':{ /* test quoted-printable decoding*/ if(opt.stress+opt.base64+opt.normal != 0){ fprintf(stderr, "%s: Use only one of n,s,b and q\n", program_name); } opt.qp = 1; break; } case 'S':{ /* sleep at end of run */ opt.sleep = atoi(optarg); break; } case 'c':{ /* number of iterations of stress test */ opt.count = atoi(optarg); break; } case ':': {/* Option given without an operand */ fprintf(stderr, "%s: Option -%c requires an operand\n", program_name,optopt); errflg++; break; } case '?': { errflg++; } } } if (errflg >0){ fprintf(stderr,"Usage: %s [-n|-s|-b|-q] [-i input_file]\n", program_name); exit(1); } if(opt.stress+opt.base64+opt.normal+opt.qp == 0){ fprintf(stderr, "%s: Must have one of n,s,b or q\n", program_name); } if(opt.input_file){ f = fopen(opt.input_file,"r"); if (f == 0){ fprintf(stderr,"Could not open input file \"%s\"\n", opt.input_file); exit(1); } } else { f = stdin; } if(opt.normal == 1){ icalcomponent *c; c = icalmime_parse(read_stream,f); printf("%s\n",icalcomponent_as_ical_string(c)); icalcomponent_free(c); } else if (opt.stress==1 ){ /* Read file in by lines, then randomize the lines into a string buffer */ char *array[1024]; char temp[1024]; char *buf; int i,last; int size = 0; int non_rand; int rand_lines; int r; int j; icalcomponent *c; struct slg_data { char* pos; char* str; } d; for(i=0; !feof(f); i++){ fgets(temp,1024,f); array[i] = strdup(temp); size += strlen(temp); } last = i; buf = malloc(size*2); assert(buf != 0); for(j=0; j # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=regression - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "regression.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "regression.mak" CFG="regression - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "regression - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "regression - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "regression - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "../libical" /I "../libicalss" /I "../libicalvcal" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libical.lib libicalss.lib libicalvcal.lib /nologo /subsystem:console /machine:I386 /libpath:"../libical/Release" /libpath:"../libicalss/Release" /libpath:"../libicalvcal/Release" !ELSEIF "$(CFG)" == "regression - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../libical" /I "../libicalss" /I "../libicalvcal" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libical.lib libicalss.lib libicalvcal.lib /nologo /subsystem:console /profile /debug /machine:I386 /libpath:"../libical/Debug" /libpath:"../libicalss/Debug" /libpath:"../libicalvcal/Debug" !ENDIF # Begin Target # Name "regression - Win32 Release" # Name "regression - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=".\regression-classify.c" # End Source File # Begin Source File SOURCE=".\regression-component.c" # End Source File # Begin Source File SOURCE=".\regression-recur.c" # End Source File # Begin Source File SOURCE=".\regression-storage.c" # End Source File # Begin Source File SOURCE=".\regression-utils.c" # End Source File # Begin Source File SOURCE=.\regression.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\regression.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project libical-1.0/src/test/process.c0000664000076400007640000002426312132563126015333 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: process.c CREATOR: eric 11 February 2000 $Id: process.c,v 1.10 2008-02-03 16:10:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* for printf */ #include #include /* For strerror */ #include /* for free */ #if defined(_MSC_VER) #define snprintf _snprintf #endif #include #include void send_message(icalcomponent *reply,const char* this_user) { printf("From: %s\n\n%s\n",this_user,icalcomponent_as_ical_string(reply)); } int main(int argc, char* argv[]) { icalcomponent *c, *next_c = NULL; int i=0; const char *class_string; int dont_remove; icalfileset_options options = {O_RDONLY, 0644, 0}; icalset* f = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/process-incoming.ics", &options); icalset* trash = icalset_new_file("trash.ics"); icalset* cal = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/process-calendar.ics", &options); icalset* out = icalset_new_file("outgoing.ics"); const char* this_user = "alice@cal.softwarestudio.org"; assert(f!= 0); assert(cal!=0); assert(trash!=0); assert(out!=0); /* Foreach incoming message */ for(c=icalset_get_first_component(f);c!=0;c = next_c){ icalproperty_xlicclass class; icalcomponent *match; icalcomponent *inner; icalcomponent *reply = 0; assert(c!=0); inner = icalcomponent_get_first_real_component(c); i++; reply = 0; dont_remove = 0; if(inner == 0){ printf("Bad component, no inner\n %s\n", icalcomponent_as_ical_string(c)); continue; } /* Find a booked component that is matched to the incoming message, based on the incoming component's UID, SEQUENCE and RECURRENCE-ID*/ match = icalset_fetch_match(cal,c); class = icalclassify(c,match,this_user); class_string = icalproperty_enum_to_string(class); /* Print out the notes associated with the incoming component and the matched component in the */ { const char *c_note=0; const char *m_note=0; icalproperty *p; for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY); p!= 0; p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){ if(strcmp(icalproperty_get_x_name(p),"X-LIC-NOTE")==0){ c_note = icalproperty_get_x(p); } } if (match != 0){ for(p = icalcomponent_get_first_property(match, ICAL_X_PROPERTY); p!= 0; p = icalcomponent_get_next_property(match, ICAL_X_PROPERTY)){ if(strcmp(icalproperty_get_x_name(p),"X-LIC-NOTE")==0){ m_note = icalproperty_get_x(p); } } } if(c_note != 0){ printf("Incoming: %s\n",c_note); } if(m_note != 0){ printf("Match : %s\n",m_note); } } /* Main processing structure */ switch (class){ case ICAL_XLICCLASS_NONE: { char temp[1024]; /* Huh? Return an error to sender */ icalrestriction_check(c); icalcomponent_convert_errors(c); snprintf(temp,1024,"I can't understand the component you sent. \n Here is the component you sent, possibly with error messages:\n %s",icalcomponent_as_ical_string(c)); reply = icalmessage_new_error_reply( c, this_user, temp, "", ICAL_UNKNOWN_STATUS ); break; } case ICAL_XLICCLASS_PUBLISHNEW: { /* Don't accept published events from anyone but self. If self, fall through to ICAL_XLICCLASS_REQUESTNEW */ } case ICAL_XLICCLASS_REQUESTNEW: { /* Book the new component if it does not overlap anything. If the time is busy and the start time is an even modulo 4, delegate to bob@cal.softwarestudio.org. If the time is busy and is 1 modulo 4, counterpropose for the first available free time. Otherwise, deline the meeting */ icalcomponent *overlaps; overlaps = icalclassify_find_overlaps(cal,c); if(overlaps == 0){ /* No overlaps, book the meeting */ /* icalset_add_component(cal,icalcomponent_new_clone(c));*/ /* Return a reply */ reply = icalmessage_new_accept_reply(c,this_user, "I can make it to this meeting"); icalset_add_component(out,reply); } else { /* There was a conflict, so delegate, counterpropose or decline it */ struct icaltimetype dtstart = icalcomponent_get_dtstart(c); if(dtstart.hour%4 == 0){ /* Delegate the meeting */ reply = icalmessage_new_delegate_reply(c, this_user, "bob@cal.softwarestudio.org", "Unfortunately, I have another commitment that \ conflicts with this meeting. I am delegating my attendance to Bob. "); icalset_add_component(out,reply); } else if (dtstart.hour%4 == 1) { /* Counter propose to next available time */ icalcomponent *newc; struct icalperiodtype next_time; icalspanlist *spanl = icalspanlist_new(cal,dtstart, icaltime_null_time()); next_time = icalspanlist_next_free_time( spanl,icalcomponent_get_dtstart(c)); newc = icalcomponent_new_clone(c); icalcomponent_set_dtstart(newc,next_time.start); /* Hack, the duration of the counterproposed meeting may be longer than the free time available */ icalcomponent_set_duration(newc, icalcomponent_get_duration(c)); reply = icalmessage_new_counterpropose_reply(c, newc, this_user, "Unfortunately, I have another commitment that \ conflicts with this meeting. I am proposing a time that works better for me."); icalset_add_component(out,reply); } else { /* Decline the meeting */ reply = icalmessage_new_decline_reply(c, this_user, "I can't make it to this meeting"); icalset_add_component(out,reply); } } break; } case ICAL_XLICCLASS_PUBLISHFREEBUSY: { /* Store the busy time information in a file named after the sender */ break; } case ICAL_XLICCLASS_PUBLISHUPDATE: { /* Only accept publish updates from self. If self, fall throught to ICAL_XLICCLASS_REQUESTUPDATE */ } case ICAL_XLICCLASS_REQUESTUPDATE: { /* always accept the changes */ break; } case ICAL_XLICCLASS_REQUESTRESCHEDULE: { /* Use same rules as REQUEST_NEW */ icalcomponent *overlaps; overlaps = icalclassify_find_overlaps(cal,c); break; } case ICAL_XLICCLASS_REQUESTDELEGATE: { break; } case ICAL_XLICCLASS_REQUESTNEWORGANIZER: { break; } case ICAL_XLICCLASS_REQUESTFORWARD: { break; } case ICAL_XLICCLASS_REQUESTSTATUS: { break; } case ICAL_XLICCLASS_REQUESTFREEBUSY: { break; } case ICAL_XLICCLASS_REPLYACCEPT: { /* Change the PARTSTAT of the sender */ break; } case ICAL_XLICCLASS_REPLYDECLINE: { /* Change the PARTSTAT of the sender */ break; } case ICAL_XLICCLASS_REPLYCRASHERACCEPT: { /* Add the crasher to the ATTENDEE list with the appropriate PARTSTAT */ break; } case ICAL_XLICCLASS_REPLYCRASHERDECLINE: { /* Add the crasher to the ATTENDEE list with the appropriate PARTSTAT */ break; } case ICAL_XLICCLASS_ADDINSTANCE: { break; } case ICAL_XLICCLASS_CANCELEVENT: { /* Remove the component */ break; } case ICAL_XLICCLASS_CANCELINSTANCE: { break; } case ICAL_XLICCLASS_CANCELALL: { /* Remove the component */ break; } case ICAL_XLICCLASS_REFRESH: { /* Resend the latest copy of the request */ break; } case ICAL_XLICCLASS_COUNTER: { break; } case ICAL_XLICCLASS_DECLINECOUNTER: { break; } case ICAL_XLICCLASS_MALFORMED: { /* Send back an error */ break; } case ICAL_XLICCLASS_OBSOLETE: { printf(" ** Got an obsolete component:\n%s", icalcomponent_as_ical_string(c)); /* Send back an error */ break; } case ICAL_XLICCLASS_MISSEQUENCED: { printf(" ** Got a missequenced component:\n%s", icalcomponent_as_ical_string(c)); /* Send back an error */ break; } case ICAL_XLICCLASS_UNKNOWN: { printf(" ** Don't know what to do with this component:\n%s", icalcomponent_as_ical_string(c)); /* Send back an error */ break; } case ICAL_XLICCLASS_X: case ICAL_XLICCLASS_REPLYDELEGATE: default: { } } #if(0) if (reply != 0){ /* Don't send the reply if the RSVP parameter indicates not to*/ icalcomponent *reply_inner; icalproperty *attendee; icalparameter *rsvp; reply_inner = icalcomponent_get_first_real_component(reply); attendee = icalcomponent_get_first_property(reply_inner, ICAL_ATTENDEE_PROPERTY); rsvp = icalproperty_get_first_parameter(attendee, ICAL_RSVP_PARAMETER); if(rsvp == 0 || icalparameter_get_rsvp(rsvp) == 1){ icalrestriction_check(reply); send_message(reply,this_user); } icalcomponent_free(reply); } #endif if(reply !=0){ printf("%s\n",icalcomponent_as_ical_string(reply)); } next_c = icalset_get_next_component(f); if(dont_remove == 0){ /*icalset_remove_component(f,c); icalset_add_component(trash,c);*/ } } #if (0) for(c = icalset_get_first_component(out); c!=0; c = icalset_get_next_component(out)){ printf("%s",icalcomponent_as_ical_string(c)); } #endif icalset_free(f); icalset_free(trash); icalset_free(cal); icalset_free(out); return 0; } libical-1.0/src/test/Makefile.am0000664000076400007640000000252412132563126015541 0ustar allenallenregression_SOURCES = \ regression.c \ regression.h \ regression-component.c \ regression-classify.c \ regression-utils.c \ regression-recur.c \ regression-storage.c if WITH_CXX_BINDINGS cxx_inc=-DWITH_CXX_BINDINGS cxx_libs=../libical/libical_cxx.la regression_SOURCES += \ regression-cxx.cpp else cxx_inc= cxx_libs= endif if WITH_BDB4 bdb4_inc=-DWITH_BDB -I@BDB_DIR@/include bdb4_libs=@BDB_DIR_LIB@/@BDB_LIB@ else bdb4_inc= bdb4_libs= endif if OS_WIN32 else STOW = stow TIMEZONES = timezones endif check_PROGRAMS = copycluster regression parser $(STOW) recur testmime testvcal process $(TIMEZONES) LDADD = ../libicalss/libicalss.la ../libicalvcal/libicalvcal.la $(cxx_libs) ../libical/libical.la $(bdb4_libs) LIBS = @PTHREAD_LIBS@ INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ -I$(top_builddir)/src/libicalss \ -I$(top_srcdir)/src/libicalss \ -DTEST_DATADIR=\"$(top_srcdir)/test-data\" \ $(cxx_inc) $(bdb4_inc) TESTS=regression timezones parser_SOURCES = icaltestparser.c # clusterin.vcd should be a real file with data but it doesn't seem to be in cvs CLEANFILES = \ test_fileset.ics \ test_fileset_locktest.ics \ filesetout.ics \ clusterin.vcd clean-local: rm -rf calendar distclean: cleanlibical-1.0/src/test/recur.dsp0000664000076400007640000001050712132563126015335 0ustar allenallen# Microsoft Developer Studio Project File - Name="recur" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=recur - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "recur.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "recur.mak" CFG="recur - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "recur - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "recur - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "recur - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\libical" /I "..\libicalss" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "YY_NO_UNISTD_H" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 !ELSEIF "$(CFG)" == "recur - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\libical" /I "..\libicalss" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "YY_NO_UNISTD_H" /FR /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libical.lib libicalss.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\libical\Debug" /libpath:"..\libicalss\Debug" !ENDIF # Begin Target # Name "recur - Win32 Release" # Name "recur - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\recur.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project libical-1.0/src/test/Makefile.in0000664000076400007640000006610312141277614015561 0ustar allenallen# Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @WITH_CXX_BINDINGS_TRUE@am__append_1 = \ @WITH_CXX_BINDINGS_TRUE@regression-cxx.cpp check_PROGRAMS = copycluster$(EXEEXT) regression$(EXEEXT) \ parser$(EXEEXT) $(am__EXEEXT_1) recur$(EXEEXT) \ testmime$(EXEEXT) testvcal$(EXEEXT) process$(EXEEXT) \ $(am__EXEEXT_2) TESTS = regression$(EXEEXT) timezones$(EXEEXT) subdir = src/test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @OS_WIN32_FALSE@am__EXEEXT_1 = stow$(EXEEXT) @OS_WIN32_FALSE@am__EXEEXT_2 = timezones$(EXEEXT) copycluster_SOURCES = copycluster.c copycluster_OBJECTS = copycluster.$(OBJEXT) copycluster_LDADD = $(LDADD) @WITH_CXX_BINDINGS_TRUE@am__DEPENDENCIES_1 = \ @WITH_CXX_BINDINGS_TRUE@ ../libical/libical_cxx.la am__DEPENDENCIES_2 = copycluster_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) am_parser_OBJECTS = icaltestparser.$(OBJEXT) parser_OBJECTS = $(am_parser_OBJECTS) parser_LDADD = $(LDADD) parser_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) process_SOURCES = process.c process_OBJECTS = process.$(OBJEXT) process_LDADD = $(LDADD) process_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) recur_SOURCES = recur.c recur_OBJECTS = recur.$(OBJEXT) recur_LDADD = $(LDADD) recur_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) am__regression_SOURCES_DIST = regression.c regression.h \ regression-component.c regression-classify.c \ regression-utils.c regression-recur.c regression-storage.c \ regression-cxx.cpp @WITH_CXX_BINDINGS_TRUE@am__objects_1 = regression-cxx.$(OBJEXT) am_regression_OBJECTS = regression.$(OBJEXT) \ regression-component.$(OBJEXT) regression-classify.$(OBJEXT) \ regression-utils.$(OBJEXT) regression-recur.$(OBJEXT) \ regression-storage.$(OBJEXT) $(am__objects_1) regression_OBJECTS = $(am_regression_OBJECTS) regression_LDADD = $(LDADD) regression_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) stow_SOURCES = stow.c stow_OBJECTS = stow.$(OBJEXT) stow_LDADD = $(LDADD) stow_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) testmime_SOURCES = testmime.c testmime_OBJECTS = testmime.$(OBJEXT) testmime_LDADD = $(LDADD) testmime_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) testvcal_SOURCES = testvcal.c testvcal_OBJECTS = testvcal.$(OBJEXT) testvcal_LDADD = $(LDADD) testvcal_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) timezones_SOURCES = timezones.c timezones_OBJECTS = timezones.$(OBJEXT) timezones_LDADD = $(LDADD) timezones_DEPENDENCIES = ../libicalss/libicalss.la \ ../libicalvcal/libicalvcal.la $(am__DEPENDENCIES_1) \ ../libical/libical.la $(am__DEPENDENCIES_2) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = copycluster.c $(parser_SOURCES) process.c recur.c \ $(regression_SOURCES) stow.c testmime.c testvcal.c timezones.c DIST_SOURCES = copycluster.c $(parser_SOURCES) process.c recur.c \ $(am__regression_SOURCES_DIST) stow.c testmime.c testvcal.c \ timezones.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = $(am__tty_colors_dummy) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @PTHREAD_LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ regression_SOURCES = regression.c regression.h regression-component.c \ regression-classify.c regression-utils.c regression-recur.c \ regression-storage.c $(am__append_1) @WITH_CXX_BINDINGS_FALSE@cxx_inc = @WITH_CXX_BINDINGS_TRUE@cxx_inc = -DWITH_CXX_BINDINGS @WITH_CXX_BINDINGS_FALSE@cxx_libs = @WITH_CXX_BINDINGS_TRUE@cxx_libs = ../libical/libical_cxx.la @WITH_BDB4_FALSE@bdb4_inc = @WITH_BDB4_TRUE@bdb4_inc = -DWITH_BDB -I@BDB_DIR@/include @WITH_BDB4_FALSE@bdb4_libs = @WITH_BDB4_TRUE@bdb4_libs = @BDB_DIR_LIB@/@BDB_LIB@ @OS_WIN32_FALSE@STOW = stow @OS_WIN32_FALSE@TIMEZONES = timezones LDADD = ../libicalss/libicalss.la ../libicalvcal/libicalvcal.la $(cxx_libs) ../libical/libical.la $(bdb4_libs) INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ -I$(top_builddir)/src/libicalss \ -I$(top_srcdir)/src/libicalss \ -DTEST_DATADIR=\"$(top_srcdir)/test-data\" \ $(cxx_inc) $(bdb4_inc) parser_SOURCES = icaltestparser.c # clusterin.vcd should be a real file with data but it doesn't seem to be in cvs CLEANFILES = \ test_fileset.ics \ test_fileset_locktest.ics \ filesetout.ics \ clusterin.vcd all: all-am .SUFFIXES: .SUFFIXES: .c .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list copycluster$(EXEEXT): $(copycluster_OBJECTS) $(copycluster_DEPENDENCIES) $(EXTRA_copycluster_DEPENDENCIES) @rm -f copycluster$(EXEEXT) $(LINK) $(copycluster_OBJECTS) $(copycluster_LDADD) $(LIBS) parser$(EXEEXT): $(parser_OBJECTS) $(parser_DEPENDENCIES) $(EXTRA_parser_DEPENDENCIES) @rm -f parser$(EXEEXT) $(LINK) $(parser_OBJECTS) $(parser_LDADD) $(LIBS) process$(EXEEXT): $(process_OBJECTS) $(process_DEPENDENCIES) $(EXTRA_process_DEPENDENCIES) @rm -f process$(EXEEXT) $(LINK) $(process_OBJECTS) $(process_LDADD) $(LIBS) recur$(EXEEXT): $(recur_OBJECTS) $(recur_DEPENDENCIES) $(EXTRA_recur_DEPENDENCIES) @rm -f recur$(EXEEXT) $(LINK) $(recur_OBJECTS) $(recur_LDADD) $(LIBS) regression$(EXEEXT): $(regression_OBJECTS) $(regression_DEPENDENCIES) $(EXTRA_regression_DEPENDENCIES) @rm -f regression$(EXEEXT) $(CXXLINK) $(regression_OBJECTS) $(regression_LDADD) $(LIBS) stow$(EXEEXT): $(stow_OBJECTS) $(stow_DEPENDENCIES) $(EXTRA_stow_DEPENDENCIES) @rm -f stow$(EXEEXT) $(LINK) $(stow_OBJECTS) $(stow_LDADD) $(LIBS) testmime$(EXEEXT): $(testmime_OBJECTS) $(testmime_DEPENDENCIES) $(EXTRA_testmime_DEPENDENCIES) @rm -f testmime$(EXEEXT) $(LINK) $(testmime_OBJECTS) $(testmime_LDADD) $(LIBS) testvcal$(EXEEXT): $(testvcal_OBJECTS) $(testvcal_DEPENDENCIES) $(EXTRA_testvcal_DEPENDENCIES) @rm -f testvcal$(EXEEXT) $(LINK) $(testvcal_OBJECTS) $(testvcal_LDADD) $(LIBS) timezones$(EXEEXT): $(timezones_OBJECTS) $(timezones_DEPENDENCIES) $(EXTRA_timezones_DEPENDENCIES) @rm -f timezones$(EXEEXT) $(LINK) $(timezones_OBJECTS) $(timezones_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copycluster.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icaltestparser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recur.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regression-classify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regression-component.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regression-cxx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regression-recur.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regression-storage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regression-utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regression.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testmime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testvcal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timezones.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ mostlyclean-am distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool clean-local \ cscopelist ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am clean-local: rm -rf calendar distclean: clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/src/test/regression-cxx.cpp0000664000076400007640000001066212132563126017173 0ustar allenallen#include #include #include #include "icalparameter_cxx.h" #include "icalproperty_cxx.h" #include "vcomponent.h" #include "regression.h" char content[] = "BEGIN:VCALENDAR\n\ VERSION:2.1\n\ BEGIN:VEVENT\n\ UID:abcd12345\n\ DTSTART:20020307T180000Z\n\ DTEND:20020307T190000Z\n\ SUMMARY:Important Meeting\n\ END:VEVENT\n\ END:VCALENDAR"; void test_cxx(void) { ICalProperty *summProp = new ICalProperty(ICAL_SUMMARY_PROPERTY); ICalProperty *startProp = new ICalProperty(ICAL_DTSTART_PROPERTY); ICalProperty *endProp = new ICalProperty(ICAL_DTEND_PROPERTY); ICalProperty *locationProp = new ICalProperty(ICAL_LOCATION_PROPERTY); ICalProperty *descProp = new ICalProperty(ICAL_DESCRIPTION_PROPERTY); ok("Valid SUMMARY Property", (summProp != 0)); ok("Valid DTSTART Property", (startProp != 0)); ok("Valid DTEND Property", (endProp != 0)); ok("Valid LOCATION Property", (locationProp != 0)); ok("Valid DESCRIPTION Property", (descProp != 0)); struct icaltimetype starttime = icaltime_from_string("20011221T180000Z"); // UTC time ends in Z struct icaltimetype endtime = icaltime_from_string("20020101T080000Z"); // UTC time ends in Z summProp->set_summary("jon said: change dir to c:\\rest\\test\\nest to get the file called \nthis should be in the next line."); startProp->set_dtstart(starttime); endProp->set_dtend(endtime); locationProp->set_location("SF, California; Seattle, Washington"); descProp->set_description("The best cities on the west coast, hit 'NO' if you don't agree!\n"); VEvent *vEvent = new VEvent(); ok("Create a new VEvent", (vEvent!=0)); vEvent->add_property(summProp); vEvent->add_property(startProp); vEvent->add_property(endProp); vEvent->add_property(locationProp); vEvent->add_property(descProp); // is ("vEvent->get_summary()", vEvent->get_summary(), "jon said: change dir to c:\\rest\\test\\nest to get the file called \nthis should be in the next line."); is ("vEvent->get_dtstart()", icaltime_as_ical_string(vEvent->get_dtstart()), "20011221T180000Z"); is ("vEvent->get_dtend()", icaltime_as_ical_string(vEvent->get_dtend()), "20020101T080000Z"); ok ("vEvent->as_ical_string()", (vEvent->as_ical_string() != 0)); if (VERBOSE) { printf("Summary: %s\n", vEvent->get_summary()); printf("DTSTART: %s\n", icaltime_as_ical_string(vEvent->get_dtstart())); printf("DTEND: %s\n", icaltime_as_ical_string(vEvent->get_dtend())); printf("LOCATION: %s\n", vEvent->get_location()); printf("DESCRIPTION: %s\n", vEvent->get_description()); printf("vcomponent: %s", vEvent->as_ical_string()); } VComponent ic(icalparser_parse_string((const char*)content)); ok("Parsing component", (ic.is_valid())); if (VERBOSE) printf("%s\n", ic.as_ical_string()); // component is wrapped within BEGIN:VCALENDAR END:VCALENDAR // we need to unwrap it. VEvent* sub_ic = dynamic_cast(ic.get_first_component(ICAL_VEVENT_COMPONENT)); int_is("Getting VEvent subcomponent", sub_ic->isa(), ICAL_VEVENT_COMPONENT); while (sub_ic != NULL) { if (VERBOSE) printf("subcomponent: %s\n", sub_ic->as_ical_string()); sub_ic = dynamic_cast(ic.get_next_component(ICAL_VEVENT_COMPONENT)); } VCalendar* cal = new VCalendar(); VAgenda* vAgenda = new VAgenda(); ok("Create a new VCalendar object", (cal != 0)); ok("Create a new VAgenda object", (vAgenda != 0)); ICalProperty* prop = new ICalProperty(ICAL_OWNER_PROPERTY); prop->set_owner("fred@flintstone.net"); vAgenda->add_property(prop); prop = new ICalProperty(ICAL_SUMMARY_PROPERTY); prop->set_summary("CPMain"); vAgenda->add_property(prop); prop = new ICalProperty(ICAL_TZID_PROPERTY); prop->set_tzid("America/Los_Angeles"); vAgenda->add_property(prop); cal->add_component(vAgenda); ok("Complex VCALENDAR/VAGENDA", (cal->as_ical_string() != 0)); if (VERBOSE) printf("vAgenda: %s\n", cal->as_ical_string()); int caughtException = 0; try { string foo = "HFHFHFHF"; VComponent v = VComponent(foo); } catch (icalerrorenum err) { if (err == ICAL_BADARG_ERROR) { caughtException = 1; } } int_is("Testing exception handling", caughtException, 1); } libical-1.0/src/test/2445.ics0000664000076400007640000002001112132563126014572 0ustar allenallenBEGIN:VCALENDAR VERSION:2.0 PRODID:-//hacksw/handcal//NONSGML v1.0//EN BEGIN:VEVENT DTSTAMP:19970901T1300Z DTSTART:19970714T170000Z DTEND:19970715T035959Z SUMMARY:Bastille Day Party END:VEVENT END:VCALENDAR BEGIN:VEVENT UID:19970901T130000Z-123401@host.com DTSTAMP:19970901T1300Z DTSTART:19970903T163000Z DTEND:19970903T190000Z SUMMARY:Annual Employee Review CLASS:PRIVATE CATEGORIES:BUSINESS,HUMAN RESOURCES END:VEVENT BEGIN:VEVENT UID:19970901T130000Z-123402@host.com DTSTAMP:19970901T1300Z DTSTART:19970401T163000Z DTEND:19970402T010000Z SUMMARY:Laurel is in sensitivity awareness class. CLASS:PUBLIC CATEGORIES:BUSINESS,HUMAN RESOURCES TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT UID:19970901T130000Z-123403@host.com DTSTAMP:19970901T1300Z DTSTART:19971102 SUMMARY:Our Blissful Anniversary CLASS:CONFIDENTIAL CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION RRULE:FREQ=YEARLY END:VEVENT BEGIN:VTODO UID:19970901T130000Z-123404@host.com DTSTAMP:19970901T1300Z DTSTART:19970415T133000Z DUE:19970416T045959Z SUMMARY:1996 Income Tax Preparation CLASS:CONFIDENTIAL CATEGORIES:FAMILY,FINANCE PRIORITY:1 STATUS:NEEDS-ACTION END:VTODO BEGIN:VJOURNAL UID:19970901T130000Z-123405@host.com DTSTAMP:19970901T1300Z DTSTART;VALUE=DATE:19970317 SUMMARY:Staff meeting minutes DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa and Bob. Aurora project plans were reviewed. There is currently no budget reserves for this project. Lisa will escalate to management. Next meeting on Tuesday.\n 2. Telephone Conference: ABC Corp. sales representative called to discuss new printer. Promised to get us a demo by Friday.\n 3. Henry Miller (Handsoff Insurance): Car was totaled by tree. Is looking into a loaner car. 654-2323 (tel). END:VJOURNAL BEGIN:VFREEBUSY ORGANIZER:MAILTO:jane_doe@host1.com ATTENDEE:MAILTO:john_public@host2.com DTSTART:19971015T050000Z DTEND:19971016T050000Z DTSTAMP:19970901T083000Z END:VFREEBUSY BEGIN:VFREEBUSY ORGANIZER:MAILTO:jane_doe@host1.com ATTENDEE:MAILTO:john_public@host2.com DTSTAMP:19970901T100000Z FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M, 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M URL:http://host2.com/pub/busy/jpublic-01.ifb COMMENT:This iCalendar file contains busy time information for the next three months. END:VFREEBUSY BEGIN:VFREEBUSY ORGANIZER:jsmith@host.com DTSTART:19980313T141711Z DTEND:19980410T141711Z FREEBUSY:19980314T233000Z/19980315T003000Z FREEBUSY:19980316T153000Z/19980316T163000Z FREEBUSY:19980318T030000Z/19980318T040000Z URL:http://www.host.com/calendar/busytime/jsmith.ifb END:VFREEBUSY BEGIN:VTIMEZONE TZID:US-Eastern LAST-MODIFIED:19870101T000000Z BEGIN:STANDARD DTSTAMP:19970901T130000Z DTSTART:19971026T020000 RDATE:19971026T020000 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:19971026T020000 RDATE:19970406T020000 TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:US-Eastern LAST-MODIFIED:19870101T000000Z TZURL:http://zones.stds_r_us.net/tz/US-Eastern BEGIN:STANDARD DTSTART:19671029T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:19870405T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:US--Fictitious-Eastern LAST-MODIFIED:19870101T000000Z BEGIN:STANDARD DTSTART:19671029T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:19870405T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:US--Fictitious-Eastern LAST-MODIFIED:19870101T000000Z BEGIN:STANDARD DTSTART:19671029T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:19870405T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT END:DAYLIGHT BEGIN:DAYLIGHT DTSTART:19990424T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4 TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VALARM TRIGGER;VALUE=DATE-TIME:19970317T133000Z REPEAT:4 DURATION:PT15M ACTION:AUDIO ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud END:VALARM BEGIN:VALARM TRIGGER:-PT30M REPEAT:2 DURATION:PT15M ACTION:DISPLAY DESCRIPTION:Breakfast meeting with executive\n team at 8:30 AM EST. END:VALARM BEGIN:VALARM TRIGGER:-P2D ACTION:EMAIL ATTENDEE:MAILTO:john_doe@host.com SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING *** DESCRIPTION:A draft agenda needs to be sent out to the attendees to the weekly managers meeting (MGR-LIST). Attached is a pointer the document template for the agenda file. ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen da.doc END:VALARM BEGIN:VALARM TRIGGER;VALUE=DATE-TIME:19980101T050000Z REPEAT:23 DURATION:PT1H ACTION:PROCEDURE ATTACH;FMTTYPE=application/binary:ftp://host.com/novo- procs/felizano.exe END:VALARM BEGIN:VCALENDAR PRODID:-//RDU Software//NONSGML HandCal//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:US-Eastern BEGIN:STANDARD DTSTART:19981025T020000 RDATE:19981025T020000 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST END:STANDARD BEGIN:DAYLIGHT DTSTART:19990404T020000 RDATE:19990404T020000 TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DTSTAMP:19980309T231000Z UID:guid-1.host1.com ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: MAILTO:employee-A@host.com DESCRIPTION:Project XYZ Review Meeting CATEGORIES:MEETING CLASS:PUBLIC CREATED:19980309T130000Z SUMMARY:XYZ Project Review DTSTART;TZID=US-Eastern:19980312T083000 DTEND;TZID=US-Eastern:19980312T093000 LOCATION:1CP Conference Room 4350 END:VEVENT END:VCALENDAR BEGIN:VCALENDAR METHOD:PUBLISH VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT DTSTAMP:19970324T1200Z SEQUENCE:0 UID:uid3@host1.com ORGANIZER:MAILTO:jdoe@host1.com DTSTART:19970324T123000Z DTEND:19970324T210000Z CATEGORIES:MEETING,PROJECT CLASS:PUBLIC SUMMARY:Calendaring Interoperability Planning Meeting DESCRIPTION:Discuss how we can test c&s interoperability\n using iCalendar and other IETF standards. LOCATION:LDB Lobby ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/ conf/bkgrnd.ps END:VEVENT END:VCALENDAR BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VTODO DTSTAMP:19980130T134500Z SEQUENCE:2 UID:uid4@host1.com ORGANIZER:MAILTO:unclesam@us.gov ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com DUE:19980415T235959 STATUS:NEEDS-ACTION SUMMARY:Submit Income Taxes BEGIN:VALARM ACTION:AUDIO TRIGGER:19980403T120000 ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio- files/ssbanner.aud REPEAT:4 DURATION:PT1H END:VALARM END:VTODO END:VCALENDAR BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VJOURNAL DTSTAMP:19970324T120000Z UID:uid5@host1.com ORGANIZER:MAILTO:jsmith@host.com STATUS:DRAFT CLASS:PUBLIC CATEGORIES:Project Report, XYZ, Weekly Meeting DESCRIPTION:Project xyz Review Meeting Minutes\n Agenda\n1. Review of project version 1.0 requirements.\n2. Definition of project processes.\n3. Review of project schedule.\n Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was decided that the requirements need to be signed off by product marketing.\n-Project processes were accepted.\n -Project schedule needs to account for scheduled holidays and employee vacation time. Check with HR for specific dates.\n-New schedule will be distributed by Friday.\n- Next weeks meeting is cancelled. No meeting until 3/23. END:VJOURNAL END:VCALENDAR BEGIN:VCALENDAR VERSION:2.0 PRODID:-//RDU Software//NONSGML HandCal//EN BEGIN:VFREEBUSY ORGANIZER:MAILTO:jsmith@host.com DTSTART:19980313T141711Z DTEND:19980410T141711Z FREEBUSY:19980314T233000Z/19980315T003000Z FREEBUSY:19980316T153000Z/19980316T163000Z FREEBUSY:19980318T030000Z/19980318T040000Z URL:http://www.host.com/calendar/busytime/jsmith.ifb END:VFREEBUSY END:VCALENDAR libical-1.0/src/test/testvcal.c0000664000076400007640000000303012132563126015467 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: vcal.c CREATOR: eric 26 May 2000 $Id: testvcal.c,v 1.4 2008-01-02 20:07:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #include #include /* Given a vCal data file as its first argument, this program will print out an equivalent iCal component. For instance: ./testvcal ../../test-data/user-cal.vcf */ int main(int argc, char* argv[]) { VObject *vcal = 0; icalcomponent *comp; char* file; if (argc != 2){ file = "../../test-data/user-cal.vcf"; } else { file = argv[1]; } vcal = Parse_MIME_FromFileName(file); assert(vcal != 0); comp = icalvcal_convert(vcal); printf("%s\n",icalcomponent_as_ical_string(comp)); return 0; } libical-1.0/src/test/findobj.c0000664000076400007640000000334212132563126015263 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: findobj.c CREATOR: eric 11 February 2000 $Id: findobj.c,v 1.3 2008-01-02 20:07:45 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #include /* for printf */ #include #include /* For strerror */ #include #include /* This program finds an object stored in a calendar */ void usage(char* arg0) { printf("usage: %s calendar-dir uid\n",arg0); } int main(int c, char *argv[]){ icalcalendar *cal; icaldirset *booked; icalcomponent *itr; if(c < 2 || c > 3){ usage(argv[0]); exit(1); } cal = icalcalendar_new(argv[1]); if(cal == 0){ fprintf(stderr,"%s: error in opening calendar \"%s\": %s. errno is \"%s\"\n", argv[0],argv[1],icalerror_strerror(icalerrno), strerror(errno)); } booked = icalcalendar_get_booked(cal); itr = icaldirset_fetch(booked,argv[2]); if(itr != 0){ printf("%s",icalcomponent_as_ical_string(itr)); } return 0; } libical-1.0/src/test/regression.c0000664000076400007640000033602312132563126016035 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: regression.c CREATOR: eric 03 April 1999 DESCRIPTION: $Id: regression.c,v 1.67 2008-02-03 16:10:48 dothebart Exp $ $Locker: $ (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The original author is Eric Busboom The original code is regression.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include "regression.h" #include #include /* for strdup */ #include /* for malloc */ #include /* for printf */ #include /* for time() */ #ifndef WIN32 #include /* for unlink, fork */ #include /* For waitpid */ #include /* for select */ #else #include /* for mkdir */ #include #endif #include /* For wait pid */ /* For GNU libc, strcmp appears to be a macro, so using strcmp in assert results in incomprehansible assertion messages. This eliminates the problem */ int regrstrcmp(const char* a, const char* b){ return strcmp(a,b); } /* This example creates and minipulates the ical object that appears * in rfc 2445, page 137 */ /* static char str[] = "BEGIN:VCALENDAR\ PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ VERSION:2.0\ BEGIN:VTIMEZONE\ TZID:America/New_York\ BEGIN:STANDARD\ DTSTART:19981025T020000\ RDATE:19981025T020000\ TZOFFSETFROM:-0400\ TZOFFSETTO:-0500\ TZNAME:EST\ END:STANDARD\ BEGIN:DAYLIGHT\ DTSTART:19990404T020000\ RDATE:19990404T020000\ TZOFFSETFROM:-0500\ TZOFFSETTO:-0400\ TZNAME:EDT\ END:DAYLIGHT\ END:VTIMEZONE\ BEGIN:VEVENT\ DTSTAMP:19980309T231000Z\ UID:guid-1.host1.com\ ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\ ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\ DESCRIPTION:Project XYZ Review Meeting\ CATEGORIES:MEETING\ CLASS:PUBLIC\ CREATED:19980309T130000Z\ SUMMARY:XYZ Project Review\ DTSTART;TZID=America/New_York:19980312T083000\ DTEND;TZID=America/New_York:19980312T093000\ LOCATION:1CP Conference Room 4350\ END:VEVENT\ BEGIN:BOOGA\ DTSTAMP:19980309T231000Z\ X-LIC-FOO:Booga\ DTSTOMP:19980309T231000Z\ UID:guid-1.host1.com\ END:BOOGA\ END:VCALENDAR"; */ /* Return a list of all attendees who are required. */ /* static char** get_required_attendees(icalcomponent* event) { icalproperty* p; icalparameter* parameter; char **attendees; int max = 10; int c = 0; attendees = malloc(max * (sizeof (char *))); ok("event is non null", (event != 0)); int_is("event is a VEVENT", icalcomponent_isa(event), ICAL_VEVENT_COMPONENT); for( p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) ) { parameter = icalproperty_get_first_parameter(p,ICAL_ROLE_PARAMETER); if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT) { attendees[c++] = icalmemory_strdup(icalproperty_get_attendee(p)); if (c >= max) { max *= 2; attendees = realloc(attendees, max * (sizeof (char *))); } } } return attendees; } */ /* If an attendee has a PARTSTAT of NEEDSACTION or has no PARTSTAT parameter, change it to TENTATIVE. */ /* static void update_attendees(icalcomponent* event) { icalproperty* p; icalparameter* parameter; assert(event != 0); assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); for( p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); p != 0; p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) ) { parameter = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER); if (parameter == 0) { icalproperty_add_parameter( p, icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) ); } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) { icalproperty_remove_parameter_by_ref(p,parameter); icalparameter_free(parameter); icalproperty_add_parameter( p, icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) ); } } } */ void test_values() { icalvalue *v; icalvalue *copy; v = icalvalue_new_caladdress("cap://value/1"); is("icalvalue_new_caladdress()", icalvalue_get_caladdress(v), "cap://value/1"); icalvalue_set_caladdress(v,"cap://value/2"); is("icalvalue_set_caladdress()", icalvalue_get_caladdress(v), "cap://value/2"); is("icalvalue_as_ical_string()", icalvalue_as_ical_string(v), "cap://value/2"); copy = icalvalue_new_clone(v); is("icalvalue_new_clone()", icalvalue_as_ical_string(copy), "cap://value/2"); icalvalue_free(v); icalvalue_free(copy); v = icalvalue_new_boolean(1); int_is("icalvalue_new_boolean(1)", icalvalue_get_boolean(v), 1); icalvalue_set_boolean(v,2); ok("icalvalue_set_boolean(2)", (2 == icalvalue_get_boolean(v))); is("icalvalue_as_ical_string()", icalvalue_as_ical_string(v), "2"); copy = icalvalue_new_clone(v); is("icalvalue_new_clone()", icalvalue_as_ical_string(copy), "2"); icalvalue_free(v); icalvalue_free(copy); v = icalvalue_new_x("test"); is("icalvalue_new_x(test)", icalvalue_get_x(v), "test"); icalvalue_set_x(v, "test2"); is("icalvalue_set_x(test2)", icalvalue_get_x(v), "test2"); is("icalvalue_as_ical_string()", icalvalue_as_ical_string(v), "test2"); copy = icalvalue_new_clone(v); is("icalvalue_new_clone()", icalvalue_as_ical_string(copy), "test2"); icalvalue_free(v); icalvalue_free(copy); v = icalvalue_new_date(icaltime_from_timet( 1023404802,0)); is("icalvalue_new_date()", icalvalue_as_ical_string(v), "20020606T230642"); icalvalue_set_date(v,icaltime_from_timet( 1023404802-3600,0)); is("icalvalue_set_date()",icalvalue_as_ical_string(v), "20020606T220642"); copy = icalvalue_new_clone(v); is("icalvalue_new_clone()",icalvalue_as_ical_string(v), "20020606T220642"); icalvalue_free(v); icalvalue_free(copy); v = icalvalue_new(-1); ok("icalvalue_new(-1), Invalid type", (v == NULL)); if (v!=0) icalvalue_free(v); ok("ICAL_BOOLEAN_VALUE",(ICAL_BOOLEAN_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_BOOLEAN))); ok("ICAL_UTCOFFSET_VALUE",(ICAL_UTCOFFSET_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_UTCOFFSET))); ok("ICAL_RECUR_VALUE", (ICAL_RECUR_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_RECUR))); ok("ICAL_CALADDRESS_VALUE",(ICAL_CALADDRESS_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_CALADDRESS))); ok("ICAL_PERIOD_VALUE", (ICAL_PERIOD_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_PERIOD))); ok("ICAL_BINARY_VALUE",(ICAL_BINARY_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_BINARY))); ok("ICAL_TEXT_VALUE",(ICAL_TEXT_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_TEXT))); ok("ICAL_DURATION_VALUE",(ICAL_DURATION_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_DURATION))); ok("ICAL_INTEGER_VALUE", (ICAL_INTEGER_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_INTEGER))); ok("ICAL_URI_VALUE", (ICAL_URI_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_URI))); ok("ICAL_FLOAT_VALUE",(ICAL_FLOAT_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_FLOAT))); ok("ICAL_X_VALUE",(ICAL_X_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_X))); ok("ICAL_DATETIME_VALUE",(ICAL_DATETIME_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_DATETIME))); ok("ICAL_DATE_TIME",(ICAL_DATE_VALUE == icalparameter_value_to_value_kind(ICAL_VALUE_DATE))); /* v = icalvalue_new_caladdress(0); printf("Bad string: %p\n",v); if (v!=0) icalvalue_free(v); */ icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR, ICAL_ERROR_NONFATAL); v = icalvalue_new_from_string(ICAL_RECUR_VALUE,"D2 #0"); ok("illegal recur value", (v == 0)); v = icalvalue_new_from_string(ICAL_TRIGGER_VALUE,"Gonk"); ok("illegal trigger value", (v == 0)); v = icalvalue_new_from_string(ICAL_REQUESTSTATUS_VALUE,"Gonk"); ok("illegal requeststatus value", (v == 0)); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR, ICAL_ERROR_DEFAULT); } void test_properties() { icalproperty *prop; icalparameter *param; icalproperty *clone; char test_cn_str[128] = ""; char *test_cn_str_good = "A Common Name 1A Common Name 2A Common Name 3A Common Name 4"; char *test_ical_str_good = "COMMENT;CN=A Common Name 1;CN=A Common Name 2;CN=A Common Name 3;CN=A \r\n Common Name 4:Another Comment\r\n"; prop = icalproperty_vanew_comment( "Another Comment", icalparameter_new_cn("A Common Name 1"), icalparameter_new_cn("A Common Name 2"), icalparameter_new_cn("A Common Name 3"), icalparameter_new_cn("A Common Name 4"), (void *)0); for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); param != 0; param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { const char *str = icalparameter_get_cn(param); if (VERBOSE) printf("Prop parameter: %s\n",icalparameter_get_cn(param)); strcat(test_cn_str, str); } is("fetching parameters", test_cn_str, test_cn_str_good); if (VERBOSE) printf("Prop value: %s\n",icalproperty_get_comment(prop)); is("icalproperty_get_comment()", icalproperty_get_comment(prop), "Another Comment"); if (VERBOSE) printf("As iCAL string:\n %s\n",icalproperty_as_ical_string(prop)); is("icalproperty_as_ical_string()", icalproperty_as_ical_string(prop), test_ical_str_good); clone = icalproperty_new_clone(prop); if (VERBOSE) printf("Clone:\n %s\n",icalproperty_as_ical_string(prop)); is("icalproperty_new_clone()", icalproperty_as_ical_string(prop), test_ical_str_good); icalproperty_free(clone); icalproperty_free(prop); prop = icalproperty_new(-1); ok("test icalproperty_new() with invalid type (-1)", (prop == NULL)); if (prop!=0) icalproperty_free(prop); } void test_utf8() { icalproperty *prop; char *utf8text = "aáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaá"; char *test_ical_str_good = "DESCRIPTION:\r\n" " aáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaá\r\n" " óaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóaáóa\r\n" " áóaáóaáóaáóaáóaáóaáóaáóaáóaá\r\n"; prop = icalproperty_new_description(utf8text); is("icalproperty_as_ical_string()", icalproperty_as_ical_string(prop), test_ical_str_good); icalproperty_free(prop); } void test_parameters() { icalparameter *p; int i; int enums[] = {ICAL_CUTYPE_INDIVIDUAL,ICAL_CUTYPE_RESOURCE,ICAL_FBTYPE_BUSY,ICAL_PARTSTAT_NEEDSACTION,ICAL_ROLE_NONPARTICIPANT,ICAL_XLICCOMPARETYPE_LESSEQUAL,ICAL_XLICERRORTYPE_MIMEPARSEERROR,-1}; char* str1 = "A Common Name"; p = icalparameter_new_cn(str1); is("icalparameter_new_cn()", icalparameter_get_cn(p), str1); is("icalparameter_as_ical_string()" ,icalparameter_as_ical_string(p),"CN=A Common Name"); icalparameter_free(p); p = icalparameter_new_from_string("PARTSTAT=ACCEPTED"); ok("PARTSTAT_PARAMETER", (icalparameter_isa(p) == ICAL_PARTSTAT_PARAMETER)); ok("PARTSTAT_ACCEPTED", (icalparameter_get_partstat(p) == ICAL_PARTSTAT_ACCEPTED)); icalparameter_free(p); p = icalparameter_new_from_string("ROLE=CHAIR"); ok("ROLE_PARAMETER", (icalparameter_isa(p) == ICAL_ROLE_PARAMETER)); ok("ROLE_CHAIR", (icalparameter_get_partstat(p) == ICAL_ROLE_CHAIR)); icalparameter_free(p); p = icalparameter_new_from_string("PARTSTAT=X-FOO"); ok("PARTSTAT_PARAMETER", (icalparameter_isa(p) == ICAL_PARTSTAT_PARAMETER)); ok("PARTSTAT_X", (icalparameter_get_partstat(p) == ICAL_PARTSTAT_X)); icalparameter_free(p); p = icalparameter_new_from_string("X-PARAM=X-FOO"); ok("X_PARAMETER", (icalparameter_isa(p) == ICAL_X_PARAMETER)); icalparameter_free(p); for (i=0;enums[i] != -1; i++){ if (VERBOSE) printf("%s\n",icalparameter_enum_to_string(enums[i])); ok("test paramter enums", (icalparameter_string_to_enum(icalparameter_enum_to_string(enums[i]))==enums[i])); } } char *good_child = "BEGIN:VEVENT\r\n" "VERSION:2.0\r\n" "DESCRIPTION:This is an event\r\n" "COMMENT;CN=A Common Name 1;CN=A Common Name 2;CN=A Common Name 3;CN=A \r\n" " Common Name 4:Another Comment\r\n" "X-LIC-ERROR;X-LIC-ERRORTYPE=COMPONENT-PARSE-ERROR:This is only a test\r\n" "END:VEVENT\r\n"; void test_components() { icalcomponent* c; icalcomponent* child; c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version("2.0"), icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), icalproperty_vanew_comment( "A Comment", icalparameter_new_cn("A Common Name 1"), (void *)0), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_version("2.0"), icalproperty_new_description("This is an event"), icalproperty_vanew_comment( "Another Comment", icalparameter_new_cn("A Common Name 1"), icalparameter_new_cn("A Common Name 2"), icalparameter_new_cn("A Common Name 3"), icalparameter_new_cn("A Common Name 4"), (void *)0), icalproperty_vanew_xlicerror( "This is only a test", icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR), (void *)0), 0 ), 0 ); if (VERBOSE) printf("Original Component:\n%s\n\n",icalcomponent_as_ical_string(c)); child = icalcomponent_get_first_component(c,ICAL_VEVENT_COMPONENT); ok("test icalcomponent_get_first_component()", (child != NULL)); if (VERBOSE) printf("Child Component:\n%s\n\n",icalcomponent_as_ical_string(child)); is("test results of child component", icalcomponent_as_ical_string(child), good_child); icalcomponent_free(c); } void test_memory() { size_t bufsize = 256; int i; char *p; char S1[] = "1) When in the Course of human events, "; char S2[] = "2) it becomes necessary for one people to dissolve the political bands which have connected them with another, "; char S3[] = "3) and to assume among the powers of the earth, "; char S4[] = "4) the separate and equal station to which the Laws of Nature and of Nature's God entitle them, "; char S5[] = "5) a decent respect to the opinions of mankind requires that they "; char S6[] = "6) should declare the causes which impel them to the separation. "; char S7[] = "7) We hold these truths to be self-evident, "; char S8[] = "8) that all men are created equal, "; /* char S9[] = "9) that they are endowed by their Creator with certain unalienable Rights, "; char S10[] = "10) that among these are Life, Liberty, and the pursuit of Happiness. "; char S11[] = "11) That to secure these rights, Governments are instituted among Men, "; char S12[] = "12) deriving their just powers from the consent of the governed. "; */ char *f, *b1, *b2, *b3, *b4, *b5, *b6, *b7, *b8; #define BUFSIZE 1024 f = icalmemory_new_buffer(bufsize); p = f; b1 = icalmemory_tmp_buffer(BUFSIZE); strcpy(b1, S1); icalmemory_append_string(&f, &p, &bufsize, b1); b2 = icalmemory_tmp_buffer(BUFSIZE); strcpy(b2, S2); icalmemory_append_string(&f, &p, &bufsize, b2); b3 = icalmemory_tmp_buffer(BUFSIZE); strcpy(b3, S3); icalmemory_append_string(&f, &p, &bufsize, b3); b4 = icalmemory_tmp_buffer(BUFSIZE); strcpy(b4, S4); icalmemory_append_string(&f, &p, &bufsize, b4); b5 = icalmemory_tmp_buffer(BUFSIZE); strcpy(b5, S5); icalmemory_append_string(&f, &p, &bufsize, b5); b6 = icalmemory_tmp_buffer(BUFSIZE); strcpy(b6, S6); icalmemory_append_string(&f, &p, &bufsize, b6); b7 = icalmemory_tmp_buffer(BUFSIZE); strcpy(b7, S7); icalmemory_append_string(&f, &p, &bufsize, b7); b8 = icalmemory_tmp_buffer(BUFSIZE); strcpy(b8, S8); icalmemory_append_string(&f, &p, &bufsize, b8); if (VERBOSE) { printf("1: %p %s \n",b1,b1); printf("2: %p %s\n",b2,b2); printf("3: %p %s\n",b3,b3); printf("4: %p %s\n",b4,b4); printf("5: %p %s\n",b5,b5); printf("6: %p %s\n",b6,b6); printf("7: %p %s\n",b7,b7); printf("8: %p %s\n",b8,b8); printf("Final: %s\n", f); printf("Final buffer size: %zd\n",bufsize); } ok("final buffer size == 806", (bufsize == 806)); free(f); bufsize = 4; f = icalmemory_new_buffer(bufsize); memset(f,0,bufsize); p = f; icalmemory_append_char(&f, &p, &bufsize, 'a'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'b'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'c'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'd'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'e'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'f'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'g'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'h'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'i'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'j'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'a'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'b'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'c'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'd'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'e'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'f'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'g'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'h'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'i'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); icalmemory_append_char(&f, &p, &bufsize, 'j'); if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); free(f); for(i=0; i<100; i++){ f = icalmemory_tmp_buffer(bufsize); assert(f!=0); memset(f,0,bufsize); sprintf(f,"%d",i); } } void test_dirset() { icalcomponent *c; icalgauge *gauge; icalerrorenum error; icalcomponent *next, *itr; icalset* cluster; icalset *s, *s2; struct icalperiodtype rtime; int i; int count = 0; #ifndef _WIN32 mkdir("store", 0755); mkdir("store-new", 0755); #else mkdir("store"); mkdir("store-new"); #endif s = icaldirset_new("store"); s2 = icaldirset_new("store-new"); ok("opening 'store' dirset", s!=NULL); ok("opening 'store-new' dirset", s2!=NULL); rtime.start = icaltime_from_timet( time(0),0); cluster = icalfileset_new("clusterin.vcd"); if (cluster == 0){ printf("Failed to create cluster: %s\n",icalerror_strerror(icalerrno)); } #define NUMCOMP 4 /* Duplicate every component in the cluster NUMCOMP times */ icalerror_clear_errno(); for (i = 1; i */ void test_recur_parameter_bug(){ static const char test_icalcomp_str[] = "BEGIN:VEVENT\r\n" "RRULE;X-EVOLUTION-ENDDATE=20030209T081500:FREQ=DAILY;COUNT=10;INTERVAL=6\r\n" "END:VEVENT\r\n"; icalcomponent *icalcomp; icalproperty *prop; struct icalrecurrencetype recur; int n_errors; char *str; icalcomp = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string()",(icalcomp!=NULL)); assert(icalcomp!=NULL); str = icalcomponent_as_ical_string(icalcomp); is("parsed matches original", str, (char*)test_icalcomp_str); if (VERBOSE) printf("%s\n\n",str); n_errors = icalcomponent_count_errors (icalcomp); int_is("no parse errors", n_errors, 0); if (n_errors) { icalproperty *p; for (p = icalcomponent_get_first_property (icalcomp, ICAL_XLICERROR_PROPERTY); p; p = icalcomponent_get_next_property (icalcomp, ICAL_XLICERROR_PROPERTY)) { const char *str; str = icalproperty_as_ical_string (p); fprintf (stderr, "error: %s\n", str); } } prop = icalcomponent_get_first_property (icalcomp, ICAL_RRULE_PROPERTY); ok("get RRULE property", (prop!=NULL)); assert(prop!=NULL); recur = icalproperty_get_rrule (prop); if (VERBOSE) printf("%s\n",icalrecurrencetype_as_string(&recur)); icalcomponent_free(icalcomp); } void test_duration() { struct icaldurationtype d; d = icaldurationtype_from_string("PT8H30M"); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); int_is("PT8H30M", icaldurationtype_as_int(d), 30600); d = icaldurationtype_from_string("-PT8H30M"); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); int_is("-PT8H30M", icaldurationtype_as_int(d), -30600); d = icaldurationtype_from_string("PT10H10M10S"); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); int_is("PT10H10M10S", icaldurationtype_as_int(d), 36610); d = icaldurationtype_from_string("P7W"); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); int_is("P7W", icaldurationtype_as_int(d), 4233600); d = icaldurationtype_from_string("P2DT8H30M"); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); int_is("P2DT8H30M", icaldurationtype_as_int(d), 203400); d = icaldurationtype_from_string("P2W1DT5H"); if (VERBOSE) printf("%s %d\n",icaldurationtype_as_ical_string(d), icaldurationtype_as_int(d)); int_is("P2W1DT5H", icaldurationtype_as_int(d), 1314000); icalerror_errors_are_fatal = 0; /* Test conversion of bad input */ d = icaldurationtype_from_int(1314000); if (VERBOSE) printf("%s %d\n",icaldurationtype_as_ical_string(d), icaldurationtype_as_int(d)); is("1314000", icaldurationtype_as_ical_string(d), "P15DT5H"); d = icaldurationtype_from_string("P-2DT8H30M"); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); int_is("P-2DT8H30M", icaldurationtype_as_int(d), 0); d = icaldurationtype_from_string("P7W8H"); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); int_is("P7W8H", icaldurationtype_as_int(d), 0); d = icaldurationtype_from_string("T10H"); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); int_is("T10H", icaldurationtype_as_int(d), 0); icalerror_errors_are_fatal = 1; d = icaldurationtype_from_int(4233600); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); is("P7W", icaldurationtype_as_ical_string(d), "P7W"); d = icaldurationtype_from_int(4424400); if (VERBOSE) printf("%s\n",icaldurationtype_as_ical_string(d)); is("P51DT5H", icaldurationtype_as_ical_string(d), "P51DT5H"); } void test_period() { struct icalperiodtype p; icalvalue *v; char *str; str = "19971015T050000Z/PT8H30M"; p = icalperiodtype_from_string(str); is(str, icalperiodtype_as_ical_string(p),str); str = "19971015T050000Z/19971015T060000Z"; p = icalperiodtype_from_string(str); is(str, icalperiodtype_as_ical_string(p),str); str = "19970101T120000/PT3H"; v = icalvalue_new_from_string(ICAL_PERIOD_VALUE,str); is(str, icalvalue_as_ical_string(v), str); icalvalue_free(v); } void test_strings(){ icalvalue *v; v = icalvalue_new_text("foo;bar;bats"); if (VERBOSE) printf("%s\n",icalvalue_as_ical_string(v)); is("test encoding of 'foo;bar;bats'", "foo\\;bar\\;bats", icalvalue_as_ical_string(v)); icalvalue_free(v); v = icalvalue_new_text("foo\\;b\nar\\;ba\tts"); if (VERBOSE) printf("%s\n",icalvalue_as_ical_string(v)); is("test encoding of 'foo\\\\;b\\nar\\\\;ba\\tts'", "foo\\\\\\;b\\nar\\\\\\;ba\\tts", icalvalue_as_ical_string(v)); icalvalue_free(v); } #ifdef INVALID_TEST /* This test is invalid because parameters may not have control chars, such as '\n' */ void test_tzid_escape(){ icalparameter *tzid; icalproperty *prop; tzid = icalparameter_new_tzid("Timezone\nwith a newline"); prop = icalproperty_new_dtstart(icaltime_from_day_of_year(26, 2009)); icalproperty_add_parameter(prop, tzid); if (VERBOSE) printf("%s\n",icalproperty_as_ical_string(prop)); is("test encoding of 'Timezone\\nwith a newline'", icalproperty_as_ical_string(prop), "DTSTART;VALUE=DATE,TZID=Timezone\\nwith a newline:20090126"); icalproperty_free(prop); } #endif void test_requeststat() { icalcomponent *c; icalproperty *p; icalrequeststatus s; struct icalreqstattype st, st2; char temp[1024]; static const char test_icalcomp_str[] = "BEGIN:VEVENT\n" "REQUEST-STATUS:2.1;Success but fallback taken on one or more property values.;booga\n" "END:VEVENT\n"; s = icalenum_num_to_reqstat(2,1); ok("icalenum_num_to_reqstat(2,1)",(s == ICAL_2_1_FALLBACK_STATUS)); ok("icalenum_reqstat_major()",(icalenum_reqstat_major(s) == 2)); ok("icalenum_reqstat_minor()",(icalenum_reqstat_minor(s) == 1)); is ("icalenum_reqstat_desc() -> 2.1", icalenum_reqstat_desc(s), "Success but fallback taken on one or more property values."); st.code = s; st.debug = "booga"; st.desc = 0; is("icalreqstattype_as_string()", icalreqstattype_as_string(st), "2.1;Success but fallback taken on one or more property values.;booga"); st.desc = " A non-standard description"; is("icalreqstattype_as_string() w/ non standard description", icalreqstattype_as_string(st), "2.1; A non-standard description;booga"); st.desc = 0; sprintf(temp,"%s\n",icalreqstattype_as_string(st)); st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;booga"); /* printf("%d -- %d -- %s -- %s\n",*/ ok("icalenum_reqstat_major()",(icalenum_reqstat_major(st2.code) == 2)); ok("icalenum_reqstat_minor()",(icalenum_reqstat_minor(st2.code) == 1)); is("icalenum_reqstat_desc", icalenum_reqstat_desc(st2.code), "Success but fallback taken on one or more property values."); st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;booga"); if (VERBOSE) printf("%s\n",icalreqstattype_as_string(st2)); st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;"); if (VERBOSE) printf("%s\n",icalreqstattype_as_string(st2)); st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values."); if (VERBOSE) printf("%s\n",icalreqstattype_as_string(st2)); st2 = icalreqstattype_from_string("2.1;"); if (VERBOSE) printf("%s\n",icalreqstattype_as_string(st2)); is("st2 test again", icalreqstattype_as_string(st2), "2.1;Success but fallback taken on one or more property values."); st2 = icalreqstattype_from_string("2.1"); is("st2 test #3", icalreqstattype_as_string(st2), "2.1;Success but fallback taken on one or more property values."); c = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string()", (c != NULL)); if (!c) { exit (EXIT_FAILURE); } if (VERBOSE) printf("%s",icalcomponent_as_ical_string(c)); p = icalcomponent_get_first_property(c,ICAL_REQUESTSTATUS_PROPERTY); #if ADD_TESTS_REQUIRING_INVESTIGATION is("icalproperty_new_from_string()", icalproperty_as_ical_string(p), "REQUEST-STATUS:2.1;Success but fallback taken on one or more property \n values.;booga\n"); #endif icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); st2 = icalreqstattype_from_string("16.4"); ok("test unknown code", (st2.code == ICAL_UNKNOWN_STATUS)); st2 = icalreqstattype_from_string("1."); ok("test malformed code", (st2.code == ICAL_UNKNOWN_STATUS)); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_DEFAULT); icalproperty_free(p); } void test_dtstart(){ struct icaltimetype tt,tt2; icalproperty *p; tt = icaltime_from_string("19970101"); int_is("19970101 is a date", tt.is_date, 1); p = icalproperty_new_dtstart(tt); if (VERBOSE) printf("%s\n",icalvalue_kind_to_string(icalvalue_isa(icalproperty_get_value(p)))); ok("ICAL_DATE_VALUE", (icalvalue_isa(icalproperty_get_value(p))==ICAL_DATE_VALUE)); tt2 = icalproperty_get_dtstart(p); int_is("converted date is date", tt2.is_date, 1); if (VERBOSE) printf("%s\n",icalproperty_as_ical_string(p)); tt = icaltime_from_string("19970101T103000"); int_is("19970101T103000 is not a date", tt.is_date, 0); icalproperty_free(p); p = icalproperty_new_dtstart(tt); if (VERBOSE) printf("%s\n",icalvalue_kind_to_string(icalvalue_isa(icalproperty_get_value(p)))); ok("ICAL_DATETIME_VALUE", (icalvalue_isa(icalproperty_get_value(p))==ICAL_DATETIME_VALUE)); tt2 = icalproperty_get_dtstart(p); int_is("converted datetime is not date", tt2.is_date, 0); if (VERBOSE) printf("%s\n",icalproperty_as_ical_string(p)); icalproperty_free(p); } void do_test_time(char* zone) { struct icaltimetype ictt, icttutc, icttzone, icttdayl, icttla, icttny,icttphoenix, icttlocal, icttnorm; time_t tt,tt2, tt_p200; int offset_tz; icalvalue *v; short day_of_week,start_day_of_week, day_of_year; icaltimezone *azone, *utczone; char msg[256]; icalerror_errors_are_fatal = 0; azone = icaltimezone_get_builtin_timezone(zone); utczone = icaltimezone_get_utc_timezone(); /* Test new API */ if (VERBOSE) printf("\n---> From time_t \n"); tt = 1025127869; /* stick with a constant... */ if (VERBOSE) printf("Orig : %s\n",ical_timet_string(tt)); if (VERBOSE) printf("\nicaltime_from_timet(tt,0) (DEPRECATED)\n"); ictt = icaltime_from_timet(tt, 0); is("icaltime_from_timet(1025127869) as UTC", ictt_as_string(ictt), "2002-06-26 21:44:29 (floating)"); ictt = icaltime_from_timet_with_zone(tt, 0, NULL); is("Floating time from time_t", ictt_as_string(ictt), "2002-06-26 21:44:29 (floating)"); ictt = icaltime_from_timet_with_zone(tt, 0, azone); #if ADD_TESTS_REQUIRING_INVESTIGATION ok("icaltime_from_timet_with_zone(tt,0,zone) as zone", strncmp(ictt_as_string(ictt), "2002-06-26 21:44:29", 19)==0); #endif ictt = icaltime_from_timet_with_zone(tt, 0, utczone); is("icaltime_from_timet_with_zone(tt,0,utc)", ictt_as_string(ictt), "2002-06-26 21:44:29 Z UTC"); if (VERBOSE) printf("\n---> Convert from floating \n"); ictt = icaltime_from_timet_with_zone(tt, 0, NULL); icttutc = icaltime_convert_to_zone(ictt, utczone); is("Convert from floating to UTC", ictt_as_string(icttutc), "2002-06-26 21:44:29 Z UTC"); icttzone = icaltime_convert_to_zone(ictt, azone); ok("Convert from floating to zone", (strncmp(ictt_as_string(icttzone), "2002-06-26 21:44:29", 19)==0)); tt2 = icaltime_as_timet(icttzone); if (VERBOSE) printf("\n---> Convert from UTC \n"); ictt = icaltime_from_timet_with_zone(tt, 0, utczone); icttutc = icaltime_convert_to_zone(ictt, utczone); is("Convert from UTC to UTC", ictt_as_string(icttutc), "2002-06-26 21:44:29 Z UTC"); icttzone = icaltime_convert_to_zone(ictt, azone); ok("Convert from UTC to zone (test year/mon only..)", (strncmp(ictt_as_string(icttzone), "2002-06-26 21:44:29", 7)==0)); tt2 = icaltime_as_timet(icttzone); if (VERBOSE) printf("No conversion: %s\n", ical_timet_string(tt2)); ok("No conversion at all (test year/mon only)", (strncmp(ical_timet_string(tt2), "2002-06-26 21:44:29 Z",7) == 0)); tt2 = icaltime_as_timet_with_zone(icttzone, utczone); if (VERBOSE) printf("Back to UTC : %s\n", ical_timet_string(tt2)); ok("test time conversion routines",(tt==tt2)); if (VERBOSE) printf("\n---> Convert from zone \n"); ictt = icaltime_from_timet_with_zone(tt, 0, azone); icttzone = icaltime_convert_to_zone(ictt, azone); if (VERBOSE) printf("To zone : %s\n", ictt_as_string(icttzone)); icttutc = icaltime_convert_to_zone(ictt, utczone); if (VERBOSE) printf("To UTC : %s\n", ictt_as_string(icttutc)); tt2 = icaltime_as_timet(icttutc); if (VERBOSE) printf("No conversion: %s\n", ical_timet_string(tt2)); tt2 = icaltime_as_timet_with_zone(icttutc, azone); if (VERBOSE) printf("Back to zone : %s\n", ical_timet_string(tt2)); ok("test time conversion, round 2", (tt==tt2)); ictt = icaltime_from_string("20001103T183030Z"); tt = icaltime_as_timet(ictt); ok("test icaltime -> time_t for 20001103T183030Z", (tt==973276230)); /* Fri Nov 3 10:30:30 PST 2000 in PST Fri Nov 3 18:30:30 PST 2000 in UTC */ if (VERBOSE) { printf(" Normalize \n"); printf("Orig (ical) : %s\n", ictt_as_string(ictt)); } icttnorm = ictt; icttnorm.second -= 60 * 60 * 24 * 5; icttnorm = icaltime_normalize(icttnorm); if (VERBOSE) printf("-5d in sec : %s\n", ictt_as_string(icttnorm)); icttnorm.day += 60; icttnorm = icaltime_normalize(icttnorm); if (VERBOSE) printf("+60 d : %s\n", ictt_as_string(icttnorm)); /** add test case here.. **/ if (VERBOSE) printf("\n As time_t \n"); tt2 = icaltime_as_timet(ictt); if (VERBOSE) { printf("20001103T183030Z (timet): %s\n",ical_timet_string(tt2)); printf("20001103T183030Z : %s\n",ictt_as_string(ictt)); } /** this test is bogus **/ ok("test normalization", (tt2 == tt)); icttlocal = icaltime_convert_to_zone(ictt, azone); tt2 = icaltime_as_timet(icttlocal); if (VERBOSE) { printf("20001103T183030 (timet): %s\n",ical_timet_string(tt2)); printf("20001103T183030 : %s\n",ictt_as_string(icttlocal)); } offset_tz = -icaltimezone_get_utc_offset_of_utc_time(azone, &ictt, 0); /* FIXME */ if (VERBOSE) printf("offset_tz : %d\n",offset_tz); ok("test utc offset", (tt-tt2 == offset_tz)); /* FIXME with the new API, it's not very useful */ icttlocal = ictt; icaltimezone_convert_time(&icttlocal, icaltimezone_get_utc_timezone(), icaltimezone_get_builtin_timezone(zone)); if (VERBOSE) printf("As local : %s\n", ictt_as_string(icttlocal)); if (VERBOSE) printf("\n Convert to and from lib c \n"); if (VERBOSE) printf("System time is: %s\n",ical_timet_string(tt)); v = icalvalue_new_datetime(ictt); if (VERBOSE) printf("System time from libical: %s\n",icalvalue_as_ical_string(v)); icalvalue_free(v); tt2 = icaltime_as_timet(ictt); if (VERBOSE) printf("Converted back to libc: %s\n",ical_timet_string(tt2)); if (VERBOSE) printf("\n Incrementing time \n"); icttnorm = ictt; icttnorm.year++; tt2 = icaltime_as_timet(icttnorm); if (VERBOSE) printf("Add a year: %s\n",ical_timet_string(tt2)); icttnorm.month+=13; tt2 = icaltime_as_timet(icttnorm); if (VERBOSE) printf("Add 13 months: %s\n",ical_timet_string(tt2)); icttnorm.second+=90; tt2 = icaltime_as_timet(icttnorm); if (VERBOSE) printf("Add 90 seconds: %s\n",ical_timet_string(tt2)); if (VERBOSE) printf("\n Day Of week \n"); day_of_week = icaltime_day_of_week(ictt); start_day_of_week = icaltime_start_doy_of_week(ictt); day_of_year = icaltime_day_of_year(ictt); sprintf(msg, "Testing day of week %d", day_of_week); int_is(msg, day_of_week, 6); sprintf(msg, "Testing day of year %d",day_of_year); int_is(msg, day_of_year, 308); sprintf(msg, "Week started on doy of %d", start_day_of_week); int_is(msg, start_day_of_week , 303); if (VERBOSE) printf("\n TimeZone Conversions \n"); /* icttla = ictt; icaltimezone_convert_time(&icttla, icaltimezone_get_utc_timezone(), lazone); */ icttla = icaltime_convert_to_zone(ictt, icaltimezone_get_builtin_timezone("America/Los_Angeles")); #if ADD_TESTS_REQUIRING_INVESTIGATION int_is("Converted hour in America/Los_Angeles is 10", icttla.hour, 10); #endif icttutc = icaltime_convert_to_zone(icttla,icaltimezone_get_utc_timezone()); #if ADD_TESTS_REQUIRING_INVESTIGATION ok("America/Los_Angeles local time is 2000-11-03 10:30:30", (strncmp(ictt_as_string(icttla), "2000-11-03 10:30:30", 19)==0)); #endif ok("Test conversion back to UTC",(icaltime_compare(icttutc, ictt) == 0)); icttny = icaltime_convert_to_zone(ictt, icaltimezone_get_builtin_timezone("America/New_York")); icttphoenix = icaltime_convert_to_zone(ictt, icaltimezone_get_builtin_timezone("America/Phoenix")); if (VERBOSE) { printf("Orig (ctime): %s\n", ical_timet_string(tt) ); printf("Orig (ical) : %s\n", ictt_as_string(ictt)); printf("UTC : %s\n", ictt_as_string(icttutc)); printf("Los Angeles : %s\n", ictt_as_string(icttla)); printf("Phoenix : %s\n", ictt_as_string(icttphoenix)); printf("New York : %s\n", ictt_as_string(icttny)); } /** @todo Check results for Phoenix here?... **/ /* Daylight savings test for New York */ if (VERBOSE) { printf("\n Daylight Savings \n"); printf("Orig (ctime): %s\n", ical_timet_string(tt) ); printf("Orig (ical) : %s\n", ictt_as_string(ictt)); printf("NY : %s\n", ictt_as_string(icttny)); } #if ADD_TESTS_REQUIRING_INVESTIGATION ok("Converted time in zone America/New_York is 2000-11-03 13:30:30", (strncmp(ictt_as_string(icttny),"2000-11-03 13:30:30",19)==0)); #endif tt_p200 = tt + 200 * 24 * 60 * 60 ; /* Add 200 days */ icttdayl = icaltime_from_timet_with_zone(tt_p200,0, icaltimezone_get_utc_timezone()); icttny = icaltime_convert_to_zone(icttdayl, icaltimezone_get_builtin_timezone("America/New_York")); if (VERBOSE) { printf("Orig +200d : %s\n", ical_timet_string(tt_p200) ); printf("NY+200D : %s\n", ictt_as_string(icttny)); } #if ADD_TESTS_REQUIRING_INVESTIGATION ok("Converted time +200d in zone America/New_York is 2001-05-22 14:30:30", (strncmp(ictt_as_string(icttny),"2001-05-22 14:30:30",19)==0)); #endif /* Daylight savings test for Los Angeles */ icttla = icaltime_convert_to_zone(ictt, icaltimezone_get_builtin_timezone("America/Los_Angeles")); if (VERBOSE) { printf("\nOrig (ctime): %s\n", ical_timet_string(tt) ); printf("Orig (ical) : %s\n", ictt_as_string(ictt)); printf("LA : %s\n", ictt_as_string(icttla)); } #if ADD_TESTS_REQUIRING_INVESTIGATION ok("Converted time in zone America/Los_Angeles is 2000-11-03 10:30:30", (strncmp(ictt_as_string(icttla),"2000-11-03 10:30:30",19)==0)); #endif icttla = icaltime_convert_to_zone(icttdayl, icaltimezone_get_builtin_timezone("America/Los_Angeles")); if (VERBOSE) { printf("Orig +200d : %s\n", ical_timet_string(tt_p200) ); printf("LA+200D : %s\n", ictt_as_string(icttla)); } #if ADD_TESTS_REQUIRING_INVESTIGATION ok("Converted time +200d in zone America/Los_Angeles is 2001-05-22 11:30:30", (strncmp(ictt_as_string(icttla),"2001-05-22 11:30:30",19)==0)); #endif icalerror_errors_are_fatal = 1; } void test_iterators() { icalcomponent *c,*inner,*next; icalcompiter i; char vevent_list[64] = ""; char remaining_list[64] = ""; char *vevent_list_good = "12347"; char *remaining_list_good = "568910"; int nomore = 1; c= icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew(ICAL_VEVENT_COMPONENT, icalproperty_new_version("1"),(void *)0), icalcomponent_vanew(ICAL_VEVENT_COMPONENT, icalproperty_new_version("2"),(void *)0), icalcomponent_vanew(ICAL_VEVENT_COMPONENT, icalproperty_new_version("3"),(void *)0), icalcomponent_vanew(ICAL_VEVENT_COMPONENT, icalproperty_new_version("4"),(void *)0), icalcomponent_vanew(ICAL_VTODO_COMPONENT, icalproperty_new_version("5"),(void *)0), icalcomponent_vanew(ICAL_VJOURNAL_COMPONENT, icalproperty_new_version("6"),(void *)0), icalcomponent_vanew(ICAL_VEVENT_COMPONENT, icalproperty_new_version("7"),(void *)0), icalcomponent_vanew(ICAL_VJOURNAL_COMPONENT, icalproperty_new_version("8"),(void *)0), icalcomponent_vanew(ICAL_VJOURNAL_COMPONENT, icalproperty_new_version("9"),(void *)0), icalcomponent_vanew(ICAL_VJOURNAL_COMPONENT, icalproperty_new_version("10"),(void *)0), (void *)0); /* List all of the VEVENTS */ for(i = icalcomponent_begin_component(c,ICAL_VEVENT_COMPONENT); icalcompiter_deref(&i)!= 0; icalcompiter_next(&i)){ icalcomponent *this = icalcompiter_deref(&i); icalproperty *p = icalcomponent_get_first_property(this, ICAL_VERSION_PROPERTY); const char* s = icalproperty_get_version(p); strcat(vevent_list, s); } is("iterate through VEVENTS in a component", vevent_list, vevent_list_good); /* Delete all of the VEVENTS */ /* reset iterator */ icalcomponent_get_first_component(c,ICAL_VEVENT_COMPONENT); while((inner=icalcomponent_get_current_component(c)) != 0 ){ if(icalcomponent_isa(inner) == ICAL_VEVENT_COMPONENT){ icalcomponent_remove_component(c,inner); icalcomponent_free(inner); } else { icalcomponent_get_next_component(c,ICAL_VEVENT_COMPONENT); } } /* List all remaining components */ for(inner = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT); inner != 0; inner = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT)){ icalproperty *p = icalcomponent_get_first_property(inner,ICAL_VERSION_PROPERTY); const char* s = icalproperty_get_version(p); strcat(remaining_list, s); } is("iterate through remaining components", remaining_list, remaining_list_good); /* Remove all remaining components */ for(inner = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT); inner != 0; inner = next){ icalcomponent *this; icalproperty *p; const char* s; next = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT); p=icalcomponent_get_first_property(inner,ICAL_VERSION_PROPERTY); s = icalproperty_get_version(p); icalcomponent_remove_component(c,inner); this = icalcomponent_get_current_component(c); if(this != 0){ p=icalcomponent_get_first_property(this,ICAL_VERSION_PROPERTY); s = icalproperty_get_version(p); } icalcomponent_free(inner); } /* List all remaining components */ for(inner = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT); inner != 0; inner = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT)){ icalproperty *p = icalcomponent_get_first_property(inner,ICAL_VERSION_PROPERTY); const char* s = icalproperty_get_version(p); if (s) nomore = 0; } ok("test if any components remain after deleting the rest", nomore == 1); icalcomponent_free(c); } void test_time() { char *zones[6] = { "America/Los_Angeles","America/New_York","Europe/London","Asia/Shanghai", NULL}; int i; do_test_time(0); for(i = 0; zones[i] != NULL; i++){ if (VERBOSE) printf(" ######### Timezone: %s ############\n",zones[i]); do_test_time(zones[i]); } } void test_icalset() { icalcomponent *c; icalset* f = icalset_new_file("2446.ics"); icalset* d = icalset_new_dir("outdir"); assert(f!=0); assert(d!=0); for(c = icalset_get_first_component(f); c != 0; c = icalset_get_next_component(f)){ icalcomponent *clone; clone = icalcomponent_new_clone(c); icalset_add_component(d,clone); printf(" class %d\n",icalclassify(c,0,"user")); } icalset_free(f); icalset_free(d); } icalcomponent* icalclassify_find_overlaps(icalset* set, icalcomponent* comp); void test_overlaps() { icalcomponent *cset,*c; icalset *set; time_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000, Sat Nov 4 15:00:00 PST 2000 */ time_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000 Sat Nov 4 16:00:00 PST 2000 */ time_t hh = 1800; /* one half hour */ icalfileset_options options = {O_RDONLY, 0644, 0}; set = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/overlaps.ics", &options); c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_vanew_dtstart(icaltime_from_timet(tm1-hh,0),(void *)0), icalproperty_vanew_dtend(icaltime_from_timet(tm2-hh,0),(void *)0), 0 ); cset = icalclassify_find_overlaps(set,c); #if ADD_TESTS_REQUIRING_INVESTIGATION ok("TODO find overlaps 1", (cset != NULL)); #endif if (VERBOSE && cset) printf("%s\n",icalcomponent_as_ical_string(cset)); if (cset) icalcomponent_free(cset); if (c) icalcomponent_free(c); c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_vanew_dtstart(icaltime_from_timet(tm1-hh,0),(void *)0), icalproperty_vanew_dtend(icaltime_from_timet(tm2,0),(void *)0), 0 ); cset = icalclassify_find_overlaps(set,c); #if ADD_TESTS_REQUIRING_INVESTIGATION ok("TODO find overlaps 1", cset != NULL); #endif if (VERBOSE && cset) printf("%s\n",icalcomponent_as_ical_string(cset)); if (cset) icalcomponent_free(cset); if (c) icalcomponent_free(c); c = icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_vanew_dtstart(icaltime_from_timet(tm1+5*hh,0),(void *)0), icalproperty_vanew_dtend(icaltime_from_timet(tm2+5*hh,0),(void *)0), 0 ); cset = icalclassify_find_overlaps(set,c); #if ADD_TESTS_REQUIRING_INVESTIGATION ok("TODO find overlaps 1", cset != NULL); #endif if (VERBOSE && cset) printf("%s\n",icalcomponent_as_ical_string(cset)); if (set) icalset_free(set); if (cset) icalcomponent_free(cset); if (c) icalcomponent_free(c); } void test_fblist() { icalspanlist *sl, *new_sl; icalfileset_options options = {O_RDONLY, 0644, 0}; icalset *set = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/spanlist.ics", &options); struct icalperiodtype period; icalcomponent *comp; int * foo; int i; sl = icalspanlist_new(set, icaltime_from_string("19980101T000000Z"), icaltime_from_string("19980108T000000Z")); ok("open ../../test-data/spanlist.ics", (set!=NULL)); assert(set!=NULL); if (VERBOSE) printf("Restricted spanlist\n"); if (VERBOSE) icalspanlist_dump(sl); period= icalspanlist_next_free_time(sl, icaltime_from_string("19970801T120000")); is("Next Free time start 19970801T120000", icaltime_as_ical_string(period.start), "19970801T120000"); is("Next Free time end 19980101T000000", icaltime_as_ical_string(period.end), "19980101T000000"); period= icalspanlist_next_free_time(sl, period.end); is("Next Free time start 19980101T010000", icaltime_as_ical_string(period.start), "19980101T010000"); is("Next Free time end 19980102T010000", icaltime_as_ical_string(period.end), "19980102T010000"); if (VERBOSE) printf("%s\n", icalcomponent_as_ical_string(icalspanlist_as_vfreebusy(sl, "a@foo.com", "b@foo.com") )); foo = icalspanlist_as_freebusy_matrix(sl,3600); for (i=0; foo[i] != -1; i++); /* find number entries */ int_is("Calculating freebusy hourly matrix", i, (7*24)); if (VERBOSE) { for (i=0; foo[i] != -1; i++) { printf("%d", foo[i]); if ((i % 24) == 23) printf("\n"); } printf("\n\n"); } free(foo); foo = icalspanlist_as_freebusy_matrix(sl,3600*24); ok("Calculating daily freebusy matrix", (foo!=NULL)); { char out_str[80] = ""; char *strp = out_str; for (i=0; foo[i]!=-1; i++){ sprintf(strp, "%d", foo[i]); strp++; } is("Checking freebusy validity", out_str, "1121110"); } if (VERBOSE) { for (i=0; foo[i] != -1; i++) { printf("%d", foo[i]); if ((i % 7) == 6) printf("\n"); } printf("\n\n"); } free(foo); icalspanlist_free(sl); if (VERBOSE) printf("Unrestricted spanlist\n"); sl = icalspanlist_new(set, icaltime_from_string("19970324T120000Z"), icaltime_null_time()); ok("add 19970324T120000Z to spanlist", (sl!=NULL)); if (VERBOSE) printf("Restricted spanlist\n"); if (VERBOSE) icalspanlist_dump(sl); period= icalspanlist_next_free_time(sl, icaltime_from_string("19970801T120000Z")); is("Next Free time start 19980101T010000", icaltime_as_ical_string(period.start), "19980101T010000"); is("Next Free time end 19980102T010000", icaltime_as_ical_string(period.end), "19980102T010000"); comp = icalspanlist_as_vfreebusy(sl, "a@foo.com", "b@foo.com"); ok("Calculating VFREEBUSY component", (comp != NULL)); if (VERBOSE) printf("%s\n", icalcomponent_as_ical_string(comp)); new_sl = icalspanlist_from_vfreebusy(comp); ok("Calculating spanlist from generated VFREEBUSY component", (new_sl != NULL)); if (VERBOSE) icalspanlist_dump(new_sl); if (sl) icalspanlist_free(sl); if (new_sl) icalspanlist_free(new_sl); if (comp) icalcomponent_free(comp); icalset_free(set); } void test_convenience(){ icalcomponent *c; int duration; struct icaltimetype tt; c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(icaltime_from_string("19970801T120000")), icalproperty_new_dtend(icaltime_from_string("19970801T130000")), (void *)0), (void *)0); if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c)); duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60; is("Start is 1997-08-01 12:00:00 (floating)", ictt_as_string(icalcomponent_get_dtstart(c)), "1997-08-01 12:00:00 (floating)"); is("End is 1997-08-01 13:00:00 (floating)", ictt_as_string(icalcomponent_get_dtend(c)), "1997-08-01 13:00:00 (floating)"); ok("Duration is 60 m", (duration == 60)); icalcomponent_free(c); c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(icaltime_from_string("19970801T120000Z")), icalproperty_new_duration(icaldurationtype_from_string("PT1H30M")), (void *)0), (void *)0); if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c)); duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60; is("Start is 1997-08-01 12:00:00 Z UTC", ictt_as_string(icalcomponent_get_dtstart(c)), "1997-08-01 12:00:00 Z UTC"); is("End is 1997-08-01 13:30:00 Z UTC", ictt_as_string(icalcomponent_get_dtend(c)), "1997-08-01 13:30:00 Z UTC"); ok("Duration is 90 m", (duration == 90)); icalcomponent_free(c); icalerror_errors_are_fatal = 0; c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(icaltime_from_string("19970801T120000")), icalproperty_new_dtend(icaltime_from_string("19970801T130000")), (void *)0), (void *)0); icalcomponent_set_duration(c,icaldurationtype_from_string("PT1H30M")); if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c)); duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60; is("Start is 1997-08-01 12:00:00 (floating)", ictt_as_string(icalcomponent_get_dtstart(c)), "1997-08-01 12:00:00 (floating)"); is("End is 1997-08-01 13:00:00 (floating)", ictt_as_string(icalcomponent_get_dtend(c)), "1997-08-01 13:00:00 (floating)"); ok("Duration is 60 m", (duration == 60)); icalcomponent_free(c); c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(icaltime_from_string("19970801T120000Z")), icalproperty_new_duration(icaldurationtype_from_string("PT1H30M")), (void *)0), (void *)0); icalcomponent_set_dtend(c,icaltime_from_string("19970801T133000Z")); if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c)); duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60; ok("Start is 1997-08-01 12:00:00 Z UTC", (0 == strcmp("1997-08-01 12:00:00 Z UTC", ictt_as_string(icalcomponent_get_dtstart(c))))); ok("End is 1997-08-01 13:30:00 Z UTC", (0 == strcmp("1997-08-01 13:30:00 Z UTC", ictt_as_string(icalcomponent_get_dtend(c))))); ok("Duration is 90 m", (duration == 90)); icalerror_errors_are_fatal = 1; icalcomponent_free(c); c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew( ICAL_VEVENT_COMPONENT, (void *)0), (void *)0); icalcomponent_set_dtstart(c,icaltime_from_string("19970801T120000Z")); icalcomponent_set_dtend(c,icaltime_from_string("19970801T133000Z")); if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c)); duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60; ok("Start is 1997-08-01 12:00:00 Z UTC", (0 == strcmp("1997-08-01 12:00:00 Z UTC", ictt_as_string(icalcomponent_get_dtstart(c))))); ok("End is 1997-08-01 13:30:00 Z UTC", (0 == strcmp("1997-08-01 13:30:00 Z UTC", ictt_as_string(icalcomponent_get_dtend(c))))); ok("Duration is 90 m", (duration == 90)); icalcomponent_free(c); c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew( ICAL_VEVENT_COMPONENT, (void *)0), (void *)0); icalcomponent_set_dtstart(c,icaltime_from_string("19970801T120000Z")); icalcomponent_set_duration(c,icaldurationtype_from_string("PT1H30M")); if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c)); duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60; ok("Start is 1997-08-01 12:00:00 Z UTC", (0 == strcmp("1997-08-01 12:00:00 Z UTC", ictt_as_string(icalcomponent_get_dtstart(c))))); ok("End is 1997-08-01 13:30:00 Z UTC", (0 == strcmp("1997-08-01 13:30:00 Z UTC", ictt_as_string(icalcomponent_get_dtend(c))))); ok("Duration is 90 m", (duration == 90)); icalcomponent_free(c); c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew( ICAL_VEVENT_COMPONENT, (void *)0), (void *)0); tt = icaltime_from_string("19970801T120000"); icaltime_set_timezone(&tt, icaltimezone_get_builtin_timezone("Europe/Rome")); icalcomponent_set_dtstart(c,tt); if (VERBOSE) printf("\n%s\n", icalcomponent_as_ical_string(c)); icalcomponent_set_duration(c,icaldurationtype_from_string("PT1H30M")); duration = icaldurationtype_as_int(icalcomponent_get_duration(c))/60; #ifndef USE_BUILTIN_TZDATA ok("Start is 1997-08-01 12:00:00 Europe/Rome", (0 == strcmp("1997-08-01 12:00:00 /softwarestudio.org/Tzfile/Europe/Rome", ictt_as_string(icalcomponent_get_dtstart(c))))); ok("End is 1997-08-01 13:30:00 Europe/Rome", (0 == strcmp("1997-08-01 13:30:00 /softwarestudio.org/Tzfile/Europe/Rome", ictt_as_string(icalcomponent_get_dtend(c))))); #else ok("Start is 1997-08-01 12:00:00 Europe/Rome", (0 == strcmp("1997-08-01 12:00:00 /citadel.org/20070227_1/Europe/Rome", ictt_as_string(icalcomponent_get_dtstart(c))))); ok("End is 1997-08-01 13:30:00 Europe/Rome", (0 == strcmp("1997-08-01 13:30:00 /citadel.org/20070227_1/Europe/Rome", ictt_as_string(icalcomponent_get_dtend(c))))); #endif ok("Duration is 90 m", (duration == 90)); icalcomponent_free(c); } void test_time_parser() { struct icaltimetype tt; icalerror_errors_are_fatal = 0; tt = icaltime_from_string("19970101T1000"); ok("19970101T1000 is null time", icaltime_is_null_time(tt)); tt = icaltime_from_string("19970101X100000"); ok("19970101X100000 is null time", icaltime_is_null_time(tt)); tt = icaltime_from_string("19970101T100000"); ok("19970101T100000 is valid", !icaltime_is_null_time(tt)); if (VERBOSE) printf("%s\n",icaltime_as_ctime(tt)); tt = icaltime_from_string("19970101T100000Z"); ok("19970101T100000Z is valid" , !icaltime_is_null_time(tt)); if (VERBOSE) printf("%s\n",icaltime_as_ctime(tt)); tt = icaltime_from_string("19970101"); ok("19970101 is valid", (!icaltime_is_null_time(tt))); if (VERBOSE) printf("%s\n",icaltime_as_ctime(tt)); icalerror_errors_are_fatal = 1; } void test_recur_parser() { struct icalrecurrencetype rt; char *str; str = "FREQ=YEARLY;UNTIL=20000131T090000Z;INTERVAL=1;BYDAY=-1TU,3WE,-4FR,SA,SU;BYYEARDAY=34,65,76,78;BYMONTH=1,2,3,4,8"; rt = icalrecurrencetype_from_string(str); #if ADD_TESTS_REQUIRING_INVESTIGATION is(str, icalrecurrencetype_as_string(&rt), str); #endif str = "FREQ=DAILY;COUNT=3;INTERVAL=1;BYDAY=-1TU,3WE,-4FR,SA,SU;BYYEARDAY=34,65,76,78;BYMONTH=1,2,3,4,8"; rt = icalrecurrencetype_from_string(str); #if ADD_TESTS_REQUIRING_INVESTIGATION is(str, icalrecurrencetype_as_string(&rt), str); #endif } char* ical_strstr(const char *haystack, const char *needle){ return strstr(haystack,needle); } void test_start_of_week() { struct icaltimetype tt2; struct icaltimetype tt1 = icaltime_from_string("19900110"); int dow, doy,start_dow; do{ tt1 = icaltime_normalize(tt1); doy = icaltime_start_doy_of_week(tt1); dow = icaltime_day_of_week(tt1); tt2 = icaltime_from_day_of_year(doy,tt1.year); start_dow = icaltime_day_of_week(tt2); if(doy == 1){ char msg[128]; sprintf(msg, "%s", ictt_as_string(tt1)); int_is(msg, start_dow, 1); } if(start_dow != 1){ /* Sunday is 1 */ printf("failed: Start of week (%s) is not a Sunday \n for %s (doy=%d,dow=%d)\n",ictt_as_string(tt2), ictt_as_string(tt1),dow,start_dow); } assert(start_dow == 1); tt1.day+=1; } while(tt1.year < 2010); } void test_doy() { struct icaltimetype tt1, tt2; short doy,doy2; char msg[128]; doy = -1; tt1 = icaltime_from_string("19900101"); if (VERBOSE) printf("Test icaltime_day_of_year() agreement with mktime\n"); do{ struct tm stm; tt1 = icaltime_normalize(tt1); stm.tm_sec = tt1.second; stm.tm_min = tt1.minute; stm.tm_hour = tt1.hour; stm.tm_mday = tt1.day; stm.tm_mon = tt1.month-1; stm.tm_year = tt1.year-1900; stm.tm_isdst = -1; mktime(&stm); doy = icaltime_day_of_year(tt1); doy2 = stm.tm_yday+1; if (doy == 1) { /** show some test cases **/ sprintf(msg, "Year %d - mktime() compare", tt1.year); int_is(msg, doy,doy2); } if (doy != doy2){ printf("Failed for %s (%d,%d)\n",ictt_as_string(tt1),doy,doy2); } assert(doy == doy2); tt1.day+=1; } while(tt1.year < 2010); if (VERBOSE) printf("\nTest icaltime_day_of_year() agreement with icaltime_from_day_of_year()\n"); tt1 = icaltime_from_string("19900101"); do{ if(doy == 1){ /** show some test cases **/ sprintf(msg, "Year %d - icaltime_day_of_year() compare", tt1.year); int_is(msg, doy,doy2); } doy = icaltime_day_of_year(tt1); tt2 = icaltime_from_day_of_year(doy,tt1.year); doy2 = icaltime_day_of_year(tt2); assert(doy2 == doy); assert(icaltime_compare(tt1,tt2) == 0); tt1.day+=1; tt1 = icaltime_normalize(tt1); } while(tt1.year < 2010); tt1 = icaltime_from_string("19950301"); doy = icaltime_day_of_year(tt1); tt2 = icaltime_from_day_of_year(doy,1995); if(VERBOSE) printf("%d %s %s\n",doy, icaltime_as_ctime(tt1),icaltime_as_ctime(tt2)); ok("test 19950301", (tt2.day == 1 && tt2.month == 3)); ok("day of year == 60", (doy == 60)); tt1 = icaltime_from_string("19960301"); doy = icaltime_day_of_year(tt1); tt2 = icaltime_from_day_of_year(doy,1996); if (VERBOSE) printf("%d %s %s\n",doy, icaltime_as_ctime(tt1),icaltime_as_ctime(tt2)); ok("test 19960301", (tt2.day == 1 && tt2.month == 3)); ok("day of year == 61", (doy == 61)); tt1 = icaltime_from_string("19970301"); doy = icaltime_day_of_year(tt1); tt2 = icaltime_from_day_of_year(doy,1997); if (VERBOSE) printf("%d %s %s\n",doy, icaltime_as_ctime(tt1),icaltime_as_ctime(tt2)); ok("test 19970301", (tt2.day == 1 && tt2.month == 3)); ok("day of year == 60", (doy == 60)); } void test_x(){ static const char test_icalcomp_str[] = "BEGIN:VEVENT\r\n" "RRULE\r\n" " ;X-EVOLUTION-ENDDATE=20030209T081500\r\n" " :FREQ=DAILY;COUNT=10;INTERVAL=6\r\n" "X-COMMENT;X-FOO=BAR: Booga\r\n" "END:VEVENT\r\n"; icalcomponent *icalcomp; icalproperty *prop; struct icalrecurrencetype recur; int n_errors; icalcomp = icalparser_parse_string ((char *) test_icalcomp_str); assert(icalcomp!=NULL); if (VERBOSE) printf("%s\n\n",icalcomponent_as_ical_string(icalcomp)); n_errors = icalcomponent_count_errors (icalcomp); int_is("icalparser_parse_string()", n_errors,0); if (n_errors) { /** NOT USED **/ icalproperty *p; for (p = icalcomponent_get_first_property (icalcomp, ICAL_XLICERROR_PROPERTY); p; p = icalcomponent_get_next_property (icalcomp, ICAL_XLICERROR_PROPERTY)) { const char *str; str = icalproperty_as_ical_string (p); fprintf (stderr, "error: %s\n", str); } } prop = icalcomponent_get_first_property (icalcomp, ICAL_RRULE_PROPERTY); ok("get RRULE property", (prop != NULL)); assert(prop!=NULL); recur = icalproperty_get_rrule (prop); if (VERBOSE) printf("%s\n",icalrecurrencetype_as_string(&recur)); icalcomponent_free(icalcomp); } void test_gauge_sql() { icalgauge *g; char* str; str= "SELECT DTSTART,DTEND,COMMENT FROM VEVENT,VTODO WHERE VEVENT.SUMMARY = 'Bongoa' AND SEQUENCE < 5"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=NULL)); if (VERBOSE) icalgauge_dump(g); icalgauge_free(g); str="SELECT * FROM VEVENT,VTODO WHERE VEVENT.SUMMARY = 'Bongoa' AND SEQUENCE < 5 OR METHOD != 'CREATE'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=NULL)); if (VERBOSE) icalgauge_dump(g); icalgauge_free(g); str="SELECT * FROM VEVENT WHERE SUMMARY == 'BA301'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=NULL)); if (VERBOSE) icalgauge_dump(g); icalgauge_free(g); str="SELECT * FROM VEVENT WHERE SUMMARY == 'BA301'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=NULL)); if (VERBOSE) icalgauge_dump(g); icalgauge_free(g); str="SELECT * FROM VEVENT WHERE LOCATION == '104 Forum'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=NULL)); if (VERBOSE) icalgauge_dump(g); icalgauge_free(g); } void test_gauge_compare() { icalgauge *g; icalcomponent *c; char* str; /* Equality */ c = icalcomponent_vanew(ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew(ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart( icaltime_from_string("20000101T000002")),0),(void *)0); g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART = '20000101T000002'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART = '20000101T000002'", (c!=0 && g!=0)); assert(c!=0); assert(g!=0); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART = '20000101T000001'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART = '20000101T000001'\n", (g!=0)); assert(g!=0); int_is("compare",icalgauge_compare(g,c), 0); icalgauge_free(g); g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART != '20000101T000003'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART != '20000101T000003'\n", (c!=0 && g!=0)); assert(g!=0); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); /* Less than */ g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART < '20000101T000003'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART < '20000101T000003'", (c!=0 && g!=0)); int_is("compare",icalgauge_compare(g,c), 1); assert(g!=0); icalgauge_free(g); g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART < '20000101T000002'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART < '20000101T000002'\n", (g!=0)); assert(g!=0); int_is("compare",icalgauge_compare(g,c), 0); icalgauge_free(g); /* Greater than */ g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000001'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART > '20000101T000001'\n", (g!=0)); assert(g!=0); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000002'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART > '20000101T000002'\n", (g!=0)); assert(g!=0); int_is("compare",icalgauge_compare(g,c), 0); icalgauge_free(g); /* Greater than or Equal to */ g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART >= '20000101T000002'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART >= '20000101T000002'\n", (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART >= '20000101T000003'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART >= '20000101T000003'\n", (g!=0)); int_is("compare",icalgauge_compare(g,c), 0); icalgauge_free(g); /* Less than or Equal to */ g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART <= '20000101T000002'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART <= '20000101T000002'\n", (g!=0)); assert(g!=0); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART <= '20000101T000001'", 0); ok("SELECT * FROM VEVENT WHERE DTSTART <= '20000101T000001'\n", (g!=0)); int_is("compare",icalgauge_compare(g,c), 0); icalgauge_free(g); icalcomponent_free(c); /* Combinations */ c = icalcomponent_vanew(ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew(ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart( icaltime_from_string("20000102T000000")),0),(void *)0); str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' and DTSTART < '20000103T000000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' and DTSTART < '20000102T000000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 0); icalgauge_free(g); str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' or DTSTART < '20000102T000000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); icalcomponent_free(c); /* Combinations, non-cannonical component */ c = icalcomponent_vanew(ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart( icaltime_from_string("20000102T000000")),(void *)0); str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' and DTSTART < '20000103T000000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' and DTSTART < '20000102T000000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 0); icalgauge_free(g); str = "SELECT * FROM VEVENT WHERE DTSTART > '20000101T000000' or DTSTART < '20000102T000000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); icalcomponent_free(c); /* Complex comparisions */ c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_method(ICAL_METHOD_REQUEST), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart( icaltime_from_string("20000101T000002")), icalproperty_new_comment("foo"), icalcomponent_vanew( ICAL_VALARM_COMPONENT, icalproperty_new_dtstart( icaltime_from_string("20000101T120000")), (void *)0), (void *)0), (void *)0); str = "SELECT * FROM VEVENT WHERE VALARM.DTSTART = '20000101T120000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); str = "SELECT * FROM VEVENT WHERE COMMENT = 'foo'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); str = "SELECT * FROM VEVENT WHERE COMMENT = 'foo' AND VALARM.DTSTART = '20000101T120000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); str = "SELECT * FROM VEVENT WHERE COMMENT = 'bar' AND VALARM.DTSTART = '20000101T120000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 0); icalgauge_free(g); str = "SELECT * FROM VEVENT WHERE COMMENT = 'bar' or VALARM.DTSTART = '20000101T120000'"; g = icalgauge_new_from_sql(str, 0); ok(str, (g!=0)); int_is("compare",icalgauge_compare(g,c), 1); icalgauge_free(g); icalcomponent_free(c); } icalcomponent* make_component(int i){ icalcomponent *c; struct icaltimetype t = icaltime_from_string("20000101T120000Z"); t.day += i; icaltime_normalize(t); c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_method(ICAL_METHOD_REQUEST), icalcomponent_vanew( ICAL_VEVENT_COMPONENT, icalproperty_new_dtstart(t), (void *)0), (void *)0); assert(c != 0); return c; } void test_fileset() { icalset *fs; icalcomponent *c; int i; int comp_count = 0; char *path = "test_fileset.ics"; icalgauge *g = icalgauge_new_from_sql( "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND DTSTART <= '20000106T120000Z'", 0); ok("icalgauge_new_from_sql()", (g!=NULL)); unlink(path); fs = icalfileset_new(path); ok("icalfileset_new()", (fs!=NULL)); assert(fs != 0); for (i = 0; i!= 10; i++){ c = make_component(i); icalfileset_add_component(fs,c); } icalfileset_commit(fs); icalset_free(fs); /** reopen fileset.ics **/ fs = icalfileset_new(path); if (VERBOSE) printf("== No Selections \n"); comp_count = 0; for (c = icalfileset_get_first_component(fs); c != 0; c = icalfileset_get_next_component(fs)){ struct icaltimetype t = icalcomponent_get_dtstart(c); comp_count++; if (VERBOSE) printf("%s\n",icaltime_as_ctime(t)); } int_is("icalfileset get components",comp_count, 10); icalfileset_select(fs,g); if (VERBOSE) printf("\n== DTSTART > '20000103T120000Z' AND DTSTART <= '20000106T120000Z' \n"); comp_count = 0; for (c = icalfileset_get_first_component(fs); c != 0; c = icalfileset_get_next_component(fs)){ struct icaltimetype t = icalcomponent_get_dtstart(c); comp_count++; if (VERBOSE) printf("%s\n",icaltime_as_ctime(t)); } int_is("icalfileset get components with gauge",comp_count, 3); icalset_free(fs); /*icalgauge_free(g);*/ } void microsleep(int us) { #ifndef WIN32 struct timeval tv; tv.tv_sec = 0; tv.tv_usec = us; select(0,0,0,0,&tv); #else Sleep(us); #endif } void test_file_locks() { #ifndef WIN32 pid_t pid; char *path = "test_fileset_locktest.ics"; icalset *fs; icalcomponent *c, *c2; struct icaldurationtype d; int i; int final,sec = 0; icalerror_clear_errno(); unlink(path); fs = icalfileset_new(path); if(icalfileset_get_first_component(fs)==0){ c = make_component(0); d = icaldurationtype_from_int(1); icalcomponent_set_duration(c,d); icalfileset_add_component(fs,c); c2 = icalcomponent_new_clone(c); icalfileset_add_component(fs,c2); icalfileset_commit(fs); } icalset_free(fs); assert(icalerrno == ICAL_NO_ERROR); pid = fork(); assert(pid >= 0); if(pid == 0){ /*child*/ int i; microsleep(rand()/(RAND_MAX/100)); for(i = 0; i< 50; i++){ fs = icalfileset_new(path); assert(fs != 0); c = icalfileset_get_first_component(fs); assert(c!=0); d = icalcomponent_get_duration(c); d = icaldurationtype_from_int(icaldurationtype_as_int(d)+1); icalcomponent_set_duration(c,d); icalcomponent_set_summary(c,"Child"); c2 = icalcomponent_new_clone(c); icalcomponent_set_summary(c2,"Child"); icalfileset_add_component(fs,c2); icalfileset_mark(fs); icalfileset_commit(fs); icalset_free(fs); microsleep(rand()/(RAND_MAX/20)); } exit(0); } else { /* parent */ int i; for(i = 0; i< 50; i++){ fs = icalfileset_new(path); assert(fs != 0); c = icalfileset_get_first_component(fs); assert(c!=0); d = icalcomponent_get_duration(c); d = icaldurationtype_from_int(icaldurationtype_as_int(d)+1); icalcomponent_set_duration(c,d); icalcomponent_set_summary(c,"Parent"); c2 = icalcomponent_new_clone(c); icalcomponent_set_summary(c2,"Parent"); icalfileset_add_component(fs,c2); icalfileset_mark(fs); icalfileset_commit(fs); icalset_free(fs); putc('.',stdout); fflush(stdout); } } assert(waitpid(pid,0,0)==pid); fs = icalfileset_new(path); i=1; c = icalfileset_get_first_component(fs); final = icaldurationtype_as_int(icalcomponent_get_duration(c)); for (c = icalfileset_get_next_component(fs); c != 0; c = icalfileset_get_next_component(fs)){ struct icaldurationtype d = icalcomponent_get_duration(c); sec = icaldurationtype_as_int(d); /*printf("%d,%d ",i,sec);*/ assert(i == sec); i++; } printf("\nFinal: %d\n",final); assert(sec == final); #endif } void test_action() { icalcomponent *c; icalproperty *p; char *str; static const char test_icalcomp_str[] = "BEGIN:VEVENT\r\n" "ACTION:EMAIL\r\n" "ACTION:PROCEDURE\r\n" "ACTION:AUDIO\r\n" "ACTION:FUBAR\r\n" "END:VEVENT\r\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string(), ACTIONS", (c!=NULL)); assert(c!=0); str = icalcomponent_as_ical_string(c); is("icalcomponent_as_ical_string()", str, ((char*) test_icalcomp_str)); if (VERBOSE) printf("%s\n\n",str); p = icalcomponent_get_first_property(c,ICAL_ACTION_PROPERTY); ok("ICAL_ACTION_EMAIL", (icalproperty_get_action(p) == ICAL_ACTION_EMAIL)); p = icalcomponent_get_next_property(c,ICAL_ACTION_PROPERTY); ok("ICAL_ACTION_PROCEDURE", (icalproperty_get_action(p) == ICAL_ACTION_PROCEDURE)); p = icalcomponent_get_next_property(c,ICAL_ACTION_PROPERTY); ok("ICAL_ACTION_AUDIO", (icalproperty_get_action(p) == ICAL_ACTION_AUDIO)); p = icalcomponent_get_next_property(c,ICAL_ACTION_PROPERTY); ok("ICAL_ACTION_X", (icalproperty_get_action(p) == ICAL_ACTION_X)); is("ICAL_ACTION -> FUBAR", icalvalue_get_x(icalproperty_get_value(p)), "FUBAR"); icalcomponent_free(c); } void test_trigger() { struct icaltriggertype tr; icalcomponent *c; icalproperty *p; const char* str; static const char test_icalcomp_str[] = "BEGIN:VEVENT\r\n" "TRIGGER;VALUE=DATE-TIME:19980403T120000\r\n" "TRIGGER;VALUE=DURATION:-PT15M\r\n" "TRIGGER;VALUE=DATE-TIME:19980403T120000\r\n" "TRIGGER;VALUE=DURATION:-PT15M\r\n" "END:VEVENT\r\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string()", (c!= NULL)); assert(c!=NULL); is("parsed triggers", icalcomponent_as_ical_string(c), (char*)test_icalcomp_str); for(p = icalcomponent_get_first_property(c,ICAL_TRIGGER_PROPERTY); p != 0; p = icalcomponent_get_next_property(c,ICAL_TRIGGER_PROPERTY)){ tr = icalproperty_get_trigger(p); if(!icaltime_is_null_time(tr.time)){ if (VERBOSE) printf("value=DATE-TIME:%s\n", icaltime_as_ical_string(tr.time)); } else { if (VERBOSE) printf("value=DURATION:%s\n", icaldurationtype_as_ical_string(tr.duration)); } } icalcomponent_free(c); /* Trigger, as a DATETIME */ tr.duration = icaldurationtype_null_duration(); tr.time = icaltime_from_string("19970101T120000"); p = icalproperty_new_trigger(tr); str = icalproperty_as_ical_string(p); is("TRIGGER;VALUE=DATE-TIME:19970101T120000", str, "TRIGGER;VALUE=DATE-TIME:19970101T120000\r\n"); icalproperty_free(p); /* TRIGGER, as a DURATION */ tr.time = icaltime_null_time(); tr.duration = icaldurationtype_from_string("P3DT3H50M45S"); p = icalproperty_new_trigger(tr); str = icalproperty_as_ical_string(p); is("TRIGGER;VALUE=DURATION:P3DT3H50M45S", str, "TRIGGER;VALUE=DURATION:P3DT3H50M45S\r\n"); icalproperty_free(p); /* TRIGGER, as a DATETIME, VALUE=DATETIME*/ tr.duration = icaldurationtype_null_duration(); tr.time = icaltime_from_string("19970101T120000"); p = icalproperty_new_trigger(tr); icalproperty_add_parameter(p,icalparameter_new_value( ICAL_VALUE_DATETIME)); str = icalproperty_as_ical_string(p); is("TRIGGER;VALUE=DATE-TIME:19970101T120000", str, "TRIGGER;VALUE=DATE-TIME:19970101T120000\r\n"); icalproperty_free(p); /*TRIGGER, as a DURATION, VALUE=DATETIME */ tr.time = icaltime_null_time(); tr.duration = icaldurationtype_from_string("P3DT3H50M45S"); p = icalproperty_new_trigger(tr); icalproperty_add_parameter(p,icalparameter_new_value( ICAL_VALUE_DATETIME )); str = icalproperty_as_ical_string(p); #if ADD_TESTS_REQUIRING_INVESTIGATION is("TRIGGER;VALUE=DURATION:P3DT3H50M45S", str, "TRIGGER;VALUE=DURATION:P3DT3H50M45S\r\n"); #endif icalproperty_free(p); /* TRIGGER, as a DATETIME, VALUE=DURATION*/ tr.duration = icaldurationtype_null_duration(); tr.time = icaltime_from_string("19970101T120000"); p = icalproperty_new_trigger(tr); icalproperty_add_parameter(p,icalparameter_new_value( ICAL_VALUE_DURATION)); str = icalproperty_as_ical_string(p); #if ADD_TESTS_REQUIRING_INVESTIGATION is("TRIGGER;VALUE=DATE-TIME:19970101T120000", str, "TRIGGER;VALUE=DATE-TIME:19970101T120000\r\n"); #endif icalproperty_free(p); /*TRIGGER, as a DURATION, VALUE=DURATION */ tr.time = icaltime_null_time(); tr.duration = icaldurationtype_from_string("P3DT3H50M45S"); p = icalproperty_new_trigger(tr); icalproperty_add_parameter(p,icalparameter_new_value( ICAL_VALUE_DURATION)); str = icalproperty_as_ical_string(p); is("TRIGGER;VALUE=DURATION:P3DT3H50M45S", str, "TRIGGER;VALUE=DURATION:P3DT3H50M45S\r\n"); icalproperty_free(p); /* TRIGGER, as a DATETIME, VALUE=BINARY */ tr.duration = icaldurationtype_null_duration(); tr.time = icaltime_from_string("19970101T120000"); p = icalproperty_new_trigger(tr); icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY)); str = icalproperty_as_ical_string(p); #if ADD_TESTS_REQUIRING_INVESTIGATION is("TRIGGER;VALUE=DATE-TIME:19970101T120000", str, "TRIGGER;VALUE=DATE-TIME:19970101T120000\r\n"); #endif icalproperty_free(p); /*TRIGGER, as a DURATION, VALUE=BINARY */ tr.time = icaltime_null_time(); tr.duration = icaldurationtype_from_string("P3DT3H50M45S"); p = icalproperty_new_trigger(tr); icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY)); str = icalproperty_as_ical_string(p); #if ADD_TESTS_REQUIRING_INVESTIGATION is("TRIGGER;VALUE=DURATION:P3DT3H50M45S", str, "TRIGGER;VALUE=DURATION:P3DT3H50M45S\r\n"); #endif icalproperty_free(p); } void test_rdate() { struct icaldatetimeperiodtype dtp; icalproperty *p; const char* str; struct icalperiodtype period; period.start = icaltime_from_string("19970101T120000"); period.end = icaltime_null_time(); period.duration = icaldurationtype_from_string("PT3H10M15S"); /* RDATE, as DATE-TIME */ dtp.time = icaltime_from_string("19970101T120000"); dtp.period = icalperiodtype_null_period(); p = icalproperty_new_rdate(dtp); str = icalproperty_as_ical_string(p); is("RDATE as DATE-TIME", str, "RDATE;VALUE=DATE-TIME:19970101T120000\r\n"); icalproperty_free(p); /* RDATE, as PERIOD */ dtp.time = icaltime_null_time(); dtp.period = period; p = icalproperty_new_rdate(dtp); str = icalproperty_as_ical_string(p); is("RDATE, as PERIOD", str, "RDATE;VALUE=PERIOD:19970101T120000/PT3H10M15S\r\n"); icalproperty_free(p); /* RDATE, as DATE-TIME, VALUE=DATE-TIME */ dtp.time = icaltime_from_string("19970101T120000"); dtp.period = icalperiodtype_null_period(); p = icalproperty_new_rdate(dtp); icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_DATETIME)); str = icalproperty_as_ical_string(p); is("RDATE, as DATE-TIME, VALUE=DATE-TIME", str, "RDATE;VALUE=DATE-TIME:19970101T120000\r\n"); icalproperty_free(p); /* RDATE, as PERIOD, VALUE=DATE-TIME */ dtp.time = icaltime_null_time(); dtp.period = period; p = icalproperty_new_rdate(dtp); icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_DATETIME)); str = icalproperty_as_ical_string(p); #if ADD_TESTS_REQUIRING_INVESTIGATION is("RDATE, as PERIOD, VALUE=DATE-TIME", str, "RDATE;VALUE=PERIOD:19970101T120000/PT3H10M15S\r\n"); #endif icalproperty_free(p); /* RDATE, as DATE-TIME, VALUE=PERIOD */ dtp.time = icaltime_from_string("19970101T120000"); dtp.period = icalperiodtype_null_period(); p = icalproperty_new_rdate(dtp); icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_PERIOD)); str = icalproperty_as_ical_string(p); #if ADD_TESTS_REQUIRING_INVESTIGATION is("RDATE, as DATE-TIME, VALUE=PERIOD", str, "RDATE;VALUE=DATE-TIME:19970101T120000\r\n"); #endif icalproperty_free(p); /* RDATE, as PERIOD, VALUE=PERIOD */ dtp.time = icaltime_null_time(); dtp.period = period; p = icalproperty_new_rdate(dtp); icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_PERIOD)); str = icalproperty_as_ical_string(p); is("RDATE, as PERIOD, VALUE=PERIOD", str, "RDATE;VALUE=PERIOD:19970101T120000/PT3H10M15S\r\n"); icalproperty_free(p); /* RDATE, as DATE-TIME, VALUE=BINARY */ dtp.time = icaltime_from_string("19970101T120000"); dtp.period = icalperiodtype_null_period(); p = icalproperty_new_rdate(dtp); icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY)); str = icalproperty_as_ical_string(p); #if ADD_TESTS_REQUIRING_INVESTIGATION is("RDATE, as DATE-TIME, VALUE=BINARY", str, "RDATE;VALUE=DATE-TIME:19970101T120000\r\n"); #endif icalproperty_free(p); /* RDATE, as PERIOD, VALUE=BINARY */ dtp.time = icaltime_null_time(); dtp.period = period; p = icalproperty_new_rdate(dtp); icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY)); str = icalproperty_as_ical_string(p); #if ADD_TESTS_REQUIRING_INVESTIGATION is("RDATE, as PERIOD, VALUE=BINARY", str, "RDATE;VALUE=PERIOD:19970101T120000/PT3H10M15S\r\n"); #endif icalproperty_free(p); } void test_langbind() { icalcomponent *c, *inner; icalproperty *p; char *test_str_parsed; static const char test_str[] = "BEGIN:VEVENT\n" "ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n" "COMMENT: Comment that \n spans a line\n" "COMMENT: Comment with \"quotable\" \'characters\' and other \t bad magic \n things \f Yeah.\n" "DTSTART:19970101T120000\n" "DTSTART:19970101T120000Z\n" "DTSTART:19970101\n" "DURATION:P3DT4H25M\n" "FREEBUSY:19970101T120000/19970101T120000\n" "FREEBUSY:19970101T120000/P3DT4H25M\n" "END:VEVENT\n"; static const char *test_str_parsed_good = "BEGIN:VEVENT\r\n" "ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:\r\n" " employee-A@host.com\r\n" "COMMENT: Comment that spans a line\r\n" "COMMENT: Comment with \\\"quotable\\\" 'characters' and other \\t bad magic \r\n" " things \\f Yeah.\r\n" "DTSTART:19970101T120000\r\n" "DTSTART:19970101T120000Z\r\n" "DTSTART;VALUE=DATE:19970101\r\n" "DURATION:P3DT4H25M\r\n" "FREEBUSY:19970101T120000/19970101T120000\r\n" "FREEBUSY:19970101T120000/P3DT4H25M\r\n" "END:VEVENT\r\n"; if (VERBOSE) printf("%s\n",test_str); c = icalparser_parse_string(test_str); ok("icalparser_parse_string()", (c!=NULL)); assert(c != NULL); test_str_parsed = icalcomponent_as_ical_string(c); #if ADD_TESTS_REQUIRING_INVESTIGATION is("parsed version with bad chars, etc", test_str_parsed, test_str_parsed_good); #endif inner = icalcomponent_get_inner(c); for( p = icallangbind_get_first_property(inner,"ANY"); p != 0; p = icallangbind_get_next_property(inner,"ANY") ) { const char *str = icallangbind_property_eval_string(p,":"); /** TODO add tests **/ if (VERBOSE) printf("%s\n",str); } p = icalcomponent_get_first_property(inner,ICAL_ATTENDEE_PROPERTY); icalproperty_set_parameter_from_string(p,"CUTYPE","INDIVIDUAL"); is ("Set attendee parameter", icalproperty_as_ical_string(p), "ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL:MAILTO:\r\n" " employee-A@host.com\r\n"); icalproperty_set_value_from_string(p,"mary@foo.org","TEXT"); is ("Set attendee parameter value", icalproperty_as_ical_string(p), "ATTENDEE;VALUE=TEXT;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=INDIVIDUAL:\r\n" " mary@foo.org\r\n"); icalcomponent_free(c); } void test_property_parse() { icalcomponent *c; icalproperty *p; const char *str; static const char test_icalcomp_str[] = "BEGIN:VEVENT\n" "ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n" "DTSTART:19970101T120000Z\n" "END:VEVENT\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string()", (c != NULL)); if (!c) { exit (EXIT_FAILURE); } p = icalcomponent_get_first_property(c,ICAL_ATTENDEE_PROPERTY); ok("icalproperty_from_string(), ATTENDEE", (p != 0)); str = icalproperty_as_ical_string(p); if (VERBOSE) printf("%s\n",str); icalproperty_free(p); p = icalcomponent_get_first_property(c,ICAL_DTSTART_PROPERTY); ok("icalproperty_from_string(), simple DTSTART", (p != 0)); str = icalproperty_as_ical_string(p); if (VERBOSE) printf("%s\n",str); icalproperty_free(p); } void test_value_parameter() { icalcomponent *c; icalproperty *p; icalparameter *param; static const char test_icalcomp_str[] = "BEGIN:VEVENT\n" "DTSTART;VALUE=DATE-TIME:19971123T123000\n" "DTSTART;VALUE=DATE:19971123\n" "DTSTART;VALUE=FOO:19971123T123000\n" "END:VEVENT\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string()", (c != NULL)); if (!c) { exit (EXIT_FAILURE); } if (VERBOSE) printf("%s",icalcomponent_as_ical_string(c)); p = icalcomponent_get_first_property(c,ICAL_DTSTART_PROPERTY); param = icalproperty_get_first_parameter(p,ICAL_VALUE_PARAMETER); ok("icalproperty_get_value()", (icalparameter_get_value(param) == ICAL_VALUE_DATETIME)); p = icalcomponent_get_next_property(c,ICAL_DTSTART_PROPERTY); param = icalproperty_get_first_parameter(p,ICAL_VALUE_PARAMETER); ok("icalproperty_get_first_parameter()",(icalparameter_get_value(param) == ICAL_VALUE_DATE)); icalcomponent_free(c); } void test_x_parameter() { icalcomponent *c; icalproperty *p; static const char test_icalcomp_str[] = "BEGIN:VEVENT\n" "COMMENT;X-A=1;X-B=2:\\sThis is a note\n" "END:VEVENT\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string()", (c != NULL)); if (!c) { exit (EXIT_FAILURE); } if (VERBOSE) printf("%s",icalcomponent_as_ical_string(c)); p = icalcomponent_get_first_property(c,ICAL_COMMENT_PROPERTY); icalproperty_set_parameter_from_string(p,"X-LIES", "no"); icalproperty_set_parameter_from_string(p,"X-LAUGHS", "big"); icalproperty_set_parameter_from_string(p,"X-TRUTH", "yes"); icalproperty_set_parameter_from_string(p,"X-HUMOUR", "bad"); if (VERBOSE) printf("%s\n",icalproperty_as_ical_string(p)); is("COMMENT parses param", icalproperty_get_comment(p)," This is a note"); is("Check X-LIES", icalproperty_get_parameter_as_string(p, "X-LIES"), "no"); is("Check X-LAUGHS", icalproperty_get_parameter_as_string(p, "X-LAUGHS"), "big"); is("Check X-TRUTH", icalproperty_get_parameter_as_string(p, "X-TRUTH"), "yes"); is("Check X-HUMOUR", icalproperty_get_parameter_as_string(p, "X-HUMOUR"), "bad"); icalcomponent_free(c); } void test_x_property() { icalcomponent *c; icalproperty *p; static const char test_icalcomp_str[] = "BEGIN:VEVENT\n" "X-LIC-PROPERTY:\\sThis is a note\n" "END:VEVENT\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string()", (c != NULL)); if (!c) { exit (EXIT_FAILURE); } if (VERBOSE) printf("%s",icalcomponent_as_ical_string(c)); p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY); ok("x-property is correct kind",(icalproperty_isa(p) == ICAL_X_PROPERTY)); is("icalproperty_get_x_name() works", icalproperty_get_x_name(p),"X-LIC-PROPERTY"); is("icalproperty_get_x() works", icalproperty_get_x(p)," This is a note"); icalcomponent_free(c); } void test_utcoffset() { icalcomponent *c; static const char test_icalcomp_str[] = "BEGIN:VTIMEZONE\n" "TZOFFSETFROM:-001608\n" "END:VTIMEZONE\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("parse TZOFFSETFROM:-001608", (c!=NULL)); if (VERBOSE && c) printf("%s",icalcomponent_as_ical_string(c)); if (c) icalcomponent_free(c); } void test_attach() { icalcomponent *c; static const char test_icalcomp_str[] = "BEGIN:VEVENT\n" "ATTACH:CID:jsmith.part3.960817T083000.xyzMain@host1.com\n" "ATTACH:FMTTYPE=application/postscript;ftp://xyzCorp.com/pub/reports/r-960812.ps\n" "END:VEVENT\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("parse simple attachment", (c != NULL)); if (VERBOSE && c) printf("%s",icalcomponent_as_ical_string(c)); if (c) icalcomponent_free(c); } void test_vcal(void) { VObject *vcal = 0; icalcomponent *comp; char* file = TEST_DATADIR "/user-cal.vcf"; vcal = Parse_MIME_FromFileName(file); ok("Parsing " TEST_DATADIR "/user-cal.vcf", (vcal != 0)); comp = icalvcal_convert(vcal); ok("Converting to ical component", (comp != 0)); if (VERBOSE && comp) printf("%s\n",icalcomponent_as_ical_string(comp)); if (comp) icalcomponent_free(comp); if (vcal) deleteVObject(vcal); } /* * Test to see if recurrences are excluded in certain situations * See r961 for more information */ void test_recurrenceexcluded(void) { char funTime[2048]; icalcomponent * calendar = NULL; icalcomponent * event = NULL; struct icaltimetype dtstart; struct icaltimetype recurtime; funTime[0] = '\0'; strcat(funTime, "BEGIN:VCALENDAR\n"); strcat(funTime, "VERSION:2.0\n"); strcat(funTime, "BEGIN:VTIMEZONE\n"); strcat(funTime, "TZID:/mozilla.org/20071231_1/Europe/London\n"); strcat(funTime, "X-LIC-LOCATION:Europe/London\n"); strcat(funTime, "BEGIN:DAYLIGHT\n"); strcat(funTime, "TZOFFSETFROM:+0000\n"); strcat(funTime, "TZOFFSETTO:+0100\n"); strcat(funTime, "TZNAME:BST\n"); strcat(funTime, "DTSTART:19700328T230000\n"); strcat(funTime, "RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3\n"); strcat(funTime, "END:DAYLIGHT\n"); strcat(funTime, "BEGIN:STANDARD\n"); strcat(funTime, "TZOFFSETFROM:+0100\n"); strcat(funTime, "TZOFFSETTO:+0000\n"); strcat(funTime, "TZNAME:GMT\n"); strcat(funTime, "DTSTART:19701025T000000\n"); strcat(funTime, "RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10\n"); strcat(funTime, "END:STANDARD\n"); strcat(funTime, "END:VTIMEZONE\n"); strcat(funTime, "BEGIN:VEVENT\n"); strcat(funTime, "DTSTAMP:20080805T174443Z\n"); strcat(funTime, "UID:5fb6ccb8-9646-45ab-8c95-8d15e9de1280\n"); strcat(funTime, "SUMMARY:Exclude test\n"); strcat(funTime, "EXDATE;TZID=/mozilla.org/20071231_1/Europe/London:20080818T190000\n"); strcat(funTime, "EXDATE:20080819T180000Z\n"); strcat(funTime, "RRULE:FREQ=DAILY;COUNT=12;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR\n"); strcat(funTime, "DTSTART;TZID=/mozilla.org/20071231_1/Europe/London:20080811T190000\n"); strcat(funTime, "DTEND;TZID=/mozilla.org/20071231_1/Europe/London:20080811T200000\n"); strcat(funTime, "END:VEVENT\n"); strcat(funTime, "END:VCALENDAR\n"); calendar = icalparser_parse_string(funTime); dtstart = icalcomponent_get_dtstart(calendar); event = icalcomponent_get_first_component(calendar, ICAL_VEVENT_COMPONENT); recurtime = icaltime_from_string("20080818T180000Z"); ok("Recurrence is excluded as per r961", icalproperty_recurrence_is_excluded(event, &dtstart, &recurtime)); recurtime = icaltime_from_string("20080819T180000Z"); ok("Recurrence is excluded for UTC EXDATE", icalproperty_recurrence_is_excluded(event, &dtstart, &recurtime)); } void test_bad_dtstart_in_timezone(void) { icaltimezone *myTZ = NULL; icalcomponent *vtimezone = NULL; char *str = NULL; myTZ = icaltimezone_get_builtin_timezone("Europe/Zurich"); vtimezone = icaltimezone_get_component(myTZ); str = icalcomponent_as_ical_string(vtimezone); if(VERBOSE) printf("%s\n", str); #if ADD_TESTS_REQUIRING_INVESTIGATION ok("bad-dtstart-in-timezone.patch r960", (strstr(str, "DTSTART:19701025T030000") != NULL)); ok("bad-dtstart-in-timezone.patch r960", (strstr(str, "DTSTART:19700329T020000") != NULL)); #endif } void test_icalcomponent_new_from_string(void) { const char *item = "BEGIN:VCALENDAR\n" "PRODID:-//Ximian//NONSGML Evolution Calendar//EN\n" "VERSION:2.0\n" "BEGIN:VEVENT\n" "SUMMARY:phone meeting\n" "DTEND:20060406T163000Z\n" "DTSTART:20060406T160000Z\n" "UID:1234567890@dummy\n" "DTSTAMP:20110824T104144Z\n" "LAST-MODIFIED:20110824T104144Z\n" "CREATED:20060409T213201\n" "LOCATION:my office\n" "DESCRIPTION:let's talk\n" "CLASS:PUBLIC\n" "TRANSP:OPAQUE\n" "SEQUENCE:1\n" "END:VEVENT\n" "END:VCALENDAR\n"; // must succeed and not leak memory... icalcomponent *comp = icalcomponent_new_from_string(item); ok("parsed", (comp != NULL)); icalcomponent_free(comp); } void test_comma_in_quoted_value(void) { icalcomponent *c; icalproperty *p; static const char test_icalcomp_str[] = "BEGIN:VEVENT\n" "X-TEST;VALUE=URI:\"geo:10.123456,-70.123456\"\n" "END:VEVENT\n"; c = icalparser_parse_string ((char *) test_icalcomp_str); ok("icalparser_parse_string()", (c != NULL)); if (!c) { exit (EXIT_FAILURE); } if (VERBOSE) printf("%s",icalcomponent_as_ical_string(c)); p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY); ok("x-property is correct kind",(icalproperty_isa(p) == ICAL_X_PROPERTY)); is("icalproperty_get_x_name() works", icalproperty_get_x_name(p),"X-TEST"); is("icalproperty_get_value_as_string() works", icalproperty_get_value_as_string(p),"\"geo:10.123456,-70.123456\""); icalcomponent_free(c); } int main(int argc, char *argv[]) { #if !defined(HAVE_UNISTD_H) extern char *optarg; extern int optopt; #endif int errflg=0; /* char* program_name = strrchr(argv[0],'/'); */ int do_test = 0; int do_header = 0; set_zone_directory("../../zoneinfo"); icaltimezone_set_tzid_prefix("/softwarestudio.org/"); putenv("TZ="); test_start(0); #ifndef WIN32 int c; while ((c = getopt(argc, argv, "lvq")) != -1) { switch (c) { case 'v': { VERBOSE = 1; break; } case 'q': { QUIET = 1; break; } case 'l': { do_header = 1;; } case '?': { errflg++; } } } if (optind < argc) { do_test = atoi(argv[argc-1]); } #else if (argc>1) do_test = atoi(argv[1]); #endif test_run("Test time parser functions", test_time_parser, do_test, do_header); test_run("Test time", test_time, do_test, do_header); test_run("Test day of Year", test_doy, do_test, do_header); test_run("Test duration", test_duration, do_test, do_header); test_run("Test period", test_period, do_test, do_header); test_run("Test DTSTART", test_dtstart, do_test, do_header); test_run("Test day of year of week start", test_start_of_week, do_test, do_header); test_run("Test recur parser", test_recur_parser, do_test, do_header); test_run("Test recur", test_recur, do_test, do_header); test_run("Test Recurring Events File", test_recur_file, do_test, do_header); test_run("Test parameter bug", test_recur_parameter_bug, do_test, do_header); test_run("Test Array Expansion", test_expand_recurrence, do_test, do_header); test_run("Test Free/Busy lists", test_fblist, do_test, do_header); test_run("Test Overlaps", test_overlaps, do_test, do_header); test_run("Test Span", test_icalcomponent_get_span, do_test, do_header); test_run("Test Gauge SQL", test_gauge_sql, do_test, do_header); test_run("Test Gauge Compare", test_gauge_compare, do_test, do_header); test_run("Test File Set", test_fileset, do_test, do_header); test_run("Test File Set (Extended)", test_fileset_extended, do_test, do_header); test_run("Test Dir Set", test_dirset, do_test, do_header); test_run("Test Dir Set (Extended)", test_dirset_extended, do_test, do_header); /* test_file_locks is slow but should work ok -- uncomment to test it */ /* test_run("Test File Locks", test_file_locks, do_test, do_header);*/ test_run("Test X Props and Params", test_x, do_test, do_header); test_run("Test Trigger", test_trigger, do_test, do_header); test_run("Test Restriction", test_restriction, do_test, do_header); test_run("Test RDATE", test_rdate, do_test, do_header); test_run("Test language binding", test_langbind, do_test, do_header); test_run("Test property parser", test_property_parse, do_test, do_header); test_run("Test Action", test_action, do_test, do_header); test_run("Test Value Parameter", test_value_parameter, do_test, do_header); test_run("Test X property", test_x_property, do_test, do_header); test_run("Test X parameter", test_x_parameter, do_test, do_header); test_run("Test request status", test_requeststat, do_test, do_header); test_run("Test UTC-OFFSET", test_utcoffset, do_test, do_header); test_run("Test Values", test_values, do_test, do_header); test_run("Test Parameters", test_parameters, do_test, do_header); test_run("Test Properties", test_properties, do_test, do_header); test_run("Test Components", test_components, do_test, do_header); test_run("Test Convenience", test_convenience, do_test, do_header); test_run("Test classify ", test_classify, do_test, do_header); test_run("Test Iterators", test_iterators, do_test, do_header); test_run("Test strings", test_strings, do_test, do_header); #ifdef INVALID_TEST test_run("Test TZID escaping", test_tzid_escape, do_test, do_header); #endif test_run("Test Compare", test_compare, do_test, do_header); test_run("Create Simple Component", create_simple_component, do_test, do_header); test_run("Create Components", create_new_component, do_test, do_header); test_run("Create Components with vaargs", create_new_component_with_va_args, do_test, do_header); test_run("Test Memory", test_memory, do_test, do_header); test_run("Test Attachment", test_attach, do_test, do_header); test_run("Test icalcalendar", test_calendar, do_test, do_header); test_run("Test Dirset", test_dirset, do_test, do_header); test_run("Test vCal to iCal conversion", test_vcal, do_test, do_header); test_run("Test UTF-8 Handling", test_utf8, do_test, do_header); test_run("Test exclusion of recurrences as per r961", test_recurrenceexcluded, do_test, do_header); test_run("Test bad dtstart in timezone as per r960", test_bad_dtstart_in_timezone, do_test, do_header); test_run("Test icalcomponent_new_from_string()", test_icalcomponent_new_from_string, do_test, do_header); test_run("Test comma in quoted value of x property", test_comma_in_quoted_value, do_test, do_header); /** OPTIONAL TESTS go here... **/ #ifdef WITH_CXX_BINDINGS test_run("Test C++ API", test_cxx, do_test, do_header); #endif #ifdef WITH_BDB test_run("Test BDB Set", test_bdbset, do_test, do_header); #endif icaltimezone_free_builtin_timezones(); icalmemory_free_ring(); free_zone_directory(); test_end(); return 0; } libical-1.0/src/test/regression.h0000664000076400007640000000264412132563126016041 0ustar allenallen#ifdef __cplusplus extern "C" { #endif #define ADD_TESTS_REQUIRING_INVESTIGATION 0 extern int VERBOSE; extern int QUIET; /* regression-component.c */ void create_new_component(void); void create_new_component_with_va_args(void); void create_simple_component(void); void test_icalcomponent_get_span(void); void create_new_component_with_va_args(void); /* regression-classify.c */ void test_classify(void); /* regression-recur.c */ void test_recur_file(void); /* regression-cxx.c */ void test_cxx(void); /* regression-storage.c */ void test_fileset_extended(void); void test_dirset_extended(void); void test_bdbset(void); /* regression-utils.c */ const char* ical_timet_string(const time_t t); const char* ictt_as_string(struct icaltimetype t); char* icaltime_as_ctime(struct icaltimetype t); void _ok(char*name, int result, char*file, int linenum, char *test); void _is(char* test_name, const char* str1, const char* str2, char *file, int linenum); void _int_is(char* test_name, int i1, int i2, char *file, int linenum); #define ok(TEST, EX) (_ok(TEST, EX, __FILE__, __LINE__, #EX)) #define is(S1, S2, EX) (_is(S1, S2, EX, __FILE__, __LINE__)) #define int_is(I1, I2, EX) (_int_is(I1, I2, EX, __FILE__, __LINE__)) void test_header(char*title, int test_set); void test_start(int); void test_end(void); void test_run(char *test_name, void (*test_fcn)(void), int do_test, int headeronly); #ifdef __cplusplus } #endif libical-1.0/src/test/CMakeLists.txt0000664000076400007640000000420212132563126016240 0ustar allenalleninclude_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/src ) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}) set(TEST_DATADIR "\\\"${CMAKE_SOURCE_DIR}/test-data\\\"") add_definitions(-DTEST_DATADIR=${TEST_DATADIR}) ########### next target ############### set(copycluster_SRCS copycluster.c) add_executable(copycluster ${copycluster_SRCS}) target_link_libraries(copycluster ical icalss) ########### next target ############### set(regression_SRCS regression.c regression.h regression-component.c regression-classify.c regression-utils.c regression-recur.c regression-storage.c ) add_executable(regression ${regression_SRCS}) target_link_libraries(regression ical icalss icalvcal) add_test(NAME regression WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin COMMAND regression) ########### next target ############### set(parser_SRCS icaltestparser.c) add_executable(parser ${parser_SRCS}) target_link_libraries(parser ical icalss) ########### next target ############### if(NOT WIN32) set(STOW_SRCS stow.c) add_executable(stow ${STOW_SRCS}) target_link_libraries(stow ical icalss) endif(NOT WIN32) ########### next target ############### set(recur_SRCS recur.c) add_executable(recur ${recur_SRCS}) target_link_libraries(recur ical icalss) ########### next target ############### if(HAVE_UNISTD_H) set(testmime_SRCS testmime.c) add_executable(testmime ${testmime_SRCS}) target_link_libraries(testmime ical icalss) endif(HAVE_UNISTD_H) ########### next target ############### set(testvcal_SRCS testvcal.c) add_executable(testvcal ${testvcal_SRCS}) target_link_libraries(testvcal ical icalss icalvcal) ########### next target ############### set(process_SRCS process.c) add_executable(process ${process_SRCS}) target_link_libraries(process ical icalss) ########### next target ############### if(NOT WIN32) set(timezones_SRCS timezones.c) add_executable(timezones ${timezones_SRCS}) target_link_libraries(timezones ical icalss) add_test(NAME timezones WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin COMMAND timezones) endif(NOT WIN32) ########### install files ############### libical-1.0/src/test/regression-recur.c0000664000076400007640000001212212132563126017142 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: regression-recur.c CREATOR: ebusboom 8jun00 DESCRIPTION: (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. ======================================================================*/ #include #include /* for strdup */ #include /* for malloc */ #include /* for printf */ #include /* for time() */ #include /* for signal */ #ifndef WIN32 #include /* for alarm */ #endif #include #include #include "regression.h" extern int VERBOSE; #ifdef WIN32 #define snprintf _snprintf #endif #ifdef _MSC_VER #define strcasecmp stricmp #endif static void sig_alrm(int i){ fprintf(stderr,"Could not get lock on file\n"); exit(1); } /* Get the expected result about the purpose of the property*/ static int get_expected_numevents(icalcomponent *c) { icalproperty *p; const char* note = 0; int num_events = 0; if(c != 0){ for(p = icalcomponent_get_first_property(c,ICAL_X_PROPERTY); p!= 0; p = icalcomponent_get_next_property(c,ICAL_X_PROPERTY)){ if(strcmp(icalproperty_get_x_name(p),"X-EXPECT-NUMEVENTS")==0){ note = icalproperty_get_x(p); } } } if(note != 0){ num_events = atoi(note); } return num_events; } static void recur_callback(icalcomponent *comp, struct icaltime_span *span, void *data) { int *num_recurs = data; if (VERBOSE) { printf("recur: %s", ctime(&span->start)); printf(" %s", ctime(&span->end)); } *num_recurs = *num_recurs + 1; } void test_recur_file() { icalset *cin = 0; struct icaltimetype next; icalcomponent *itr; icalproperty *desc, *dtstart, *rrule; struct icalrecurrencetype recur; icalrecur_iterator* ritr; time_t tt; char* file; int num_recurs_found = 0; icalfileset_options options = {O_RDONLY, 0644, 0}; icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL); #ifndef WIN32 signal(SIGALRM,sig_alrm); #endif file = getenv("ICAL_RECUR_FILE"); if (!file) file = TEST_DATADIR "/recur.txt"; #ifndef WIN32 alarm(15); /* to get file lock */ #endif cin = icalset_new(ICAL_FILE_SET, file, &options); #ifndef WIN32 alarm(0); #endif ok("opening file with recurring events", (cin!=NULL)); assert(cin!=NULL); for (itr = icalfileset_get_first_component(cin); itr != 0; itr = icalfileset_get_next_component(cin)){ int badcomp = 0; int expected_events = 0; char msg[128]; struct icaltimetype start = icaltime_null_time(); struct icaltimetype startmin = icaltime_from_timet(1,0); struct icaltimetype endmax = icaltime_null_time(); const char *desc_str = "malformed component"; desc = icalcomponent_get_first_property(itr,ICAL_DESCRIPTION_PROPERTY); dtstart = icalcomponent_get_first_property(itr,ICAL_DTSTART_PROPERTY); rrule = icalcomponent_get_first_property(itr,ICAL_RRULE_PROPERTY); if (desc) { desc_str = icalproperty_get_description(desc); } ok((char*)desc_str, !(desc == 0 || dtstart == 0 || rrule == 0)); if (desc == 0 || dtstart == 0 || rrule == 0) { badcomp = 1; if (VERBOSE) { printf("\n******** Error in input component ********\n"); printf("The following component is malformed:\n %s\n", desc_str); } continue; } if (VERBOSE) { printf("\n\n#### %s\n",desc_str); printf("#### %s\n",icalvalue_as_ical_string(icalproperty_get_value(rrule))); } recur = icalproperty_get_rrule(rrule); start = icalproperty_get_dtstart(dtstart); ritr = icalrecur_iterator_new(recur,start); tt = icaltime_as_timet(start); if (VERBOSE) printf("#### %s\n",ctime(&tt )); icalrecur_iterator_free(ritr); for(ritr = icalrecur_iterator_new(recur,start), next = icalrecur_iterator_next(ritr); !icaltime_is_null_time(next); next = icalrecur_iterator_next(ritr)){ tt = icaltime_as_timet(next); if (VERBOSE) printf(" %s",ctime(&tt )); } icalrecur_iterator_free(ritr); num_recurs_found = 0; expected_events = get_expected_numevents(itr); icalcomponent_foreach_recurrence(itr, startmin, endmax, recur_callback, &num_recurs_found); sprintf(msg," expecting total of %d events", expected_events); #if ADD_TESTS_REQUIRING_INVESTIGATION int_is(msg, num_recurs_found, expected_events); #endif } icalset_free(cin); } libical-1.0/src/test/regression-storage.c0000664000076400007640000004767612132563126017514 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: regression-storage.c CREATOR: eric 03 April 1999 DESCRIPTION: $Id: regression-storage.c,v 1.6 2008-02-03 16:10:47 dothebart Exp $ $Locker: $ (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The original author is Eric Busboom The original code is usecases.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include /* for strdup */ #include /* for malloc */ #include /* for printf */ #include /* for time() */ #include #include #include "regression.h" #define OUTPUT_FILE "filesetout.ics" /* define sample calendar struct */ struct calendar { int ID; size_t total_size; /* offsets */ size_t total_size_offset; size_t vcalendar_size_offset; size_t vcalendar_offset; size_t title_size_offset; size_t title_offset; /* data */ size_t vcalendar_size; char *vcalendar; size_t title_size; char *title; }; int vcalendar_init(struct calendar **cal, char *vcalendar, char *title); #ifdef WITH_BDB #include int get_title(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey); char * parse_vcalendar(const DBT *dbt) ; char * pack_calendar(struct calendar *cal, int size); struct calendar * unpack_calendar(char *str, int size); #endif /* static char str[] = "BEGIN:VCALENDAR\n\ PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\ VERSION:2.0\n\ BEGIN:VTIMEZONE\n\ TZID:US-Eastern\n\ BEGIN:STANDARD\n\ DTSTART:19981025T020000\n\ RDATE:19981025T020000\n\ TZOFFSETFROM:-0400\n\ TZOFFSETTO:-0500\n\ TZNAME:EST\n\ END:STANDARD\n\ BEGIN:DAYLIGHT\n\ DTSTART:19990404T020000\n\ RDATE:19990404T020000\n\ TZOFFSETFROM:-0500\n\ TZOFFSETTO:-0400\n\ TZNAME:EDT\n\ END:DAYLIGHT\n\ END:VTIMEZONE\n\ BEGIN:VEVENT\n\ DTSTAMP:19980309T231000Z\n\ UID:guid-1.host1.com\n\ ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\ ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\ DESCRIPTION:Project XYZ Review Meeting\n\ CATEGORIES:MEETING\n\ CLASS:PUBLIC\n\ CREATED:19980309T130000Z\n\ SUMMARY:XYZ Project Review\n\ DTSTART;TZID=US-Eastern:19980312T083000\n\ DTEND;TZID=US-Eastern:19980312T093000\n\ LOCATION:1CP Conference Room 4350\n\ END:VEVENT\n\ BEGIN:BOOGA\n\ DTSTAMP:19980309T231000Z\n\ X-LIC-FOO:Booga\n\ DTSTOMP:19980309T231000Z\n\ UID:guid-1.host1.com\n\ END:BOOGA\n\ END:VCALENDAR"; */ char str2[] = "BEGIN:VCALENDAR\n\ PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\ VERSION:2.0\n\ BEGIN:VEVENT\n\ DTSTAMP:19980309T231000Z\n\ UID:guid-1.host1.com\n\ ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\ ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\ DESCRIPTION:Project XYZ Review Meeting\n\ CATEGORIES:MEETING\n\ CLASS:PUBLIC\n\ CREATED:19980309T130000Z\n\ SUMMARY:XYZ Project Review\n\ DTSTART;TZID=US-Eastern:19980312T083000\n\ DTEND;TZID=US-Eastern:19980312T093000\n\ LOCATION:1CP Conference Room 4350\n\ END:VEVENT\n\ END:VCALENDAR\n\ "; void test_fileset_extended(void) { icalset *cout; int month = 0; int count=0; struct icaltimetype start, end; icalcomponent *c,*clone, *itr; icalsetiter iter; start = icaltime_from_timet( time(0),0); end = start; end.hour++; cout = icalfileset_new(OUTPUT_FILE); ok("Opening output file", (cout != 0)); assert(cout!=0); c = icalparser_parse_string(str2); ok("Parsing str2", (c!=0)); assert(c != 0); icalset_free(cout); /* Add data to the file */ for(month = 1; month < 10; month++){ icalcomponent *event; icalproperty *dtstart, *dtend; cout = icalfileset_new(OUTPUT_FILE); ok("Opening output file", (cout != 0)); assert(cout != 0); start.month = month; end.month = month; clone = icalcomponent_new_clone(c); ok("Making clone of output file", (clone!=0)); assert(clone !=0); event = icalcomponent_get_first_component(clone,ICAL_VEVENT_COMPONENT); ok("Getting first event from clone", (event!=0)); assert(event != 0); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); ok("find DTSTART", (dtstart !=0)); assert(dtstart!=0); icalproperty_set_dtstart(dtstart,start); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); ok("find DTEND", (dtend !=0)); assert(dtend!=0); icalproperty_set_dtend(dtend,end); icalfileset_add_component(cout,clone); icalfileset_commit(cout); icalset_free(cout); } /* Print them out */ cout = icalfileset_new(OUTPUT_FILE); ok("Opening output file", (cout != 0)); assert(cout != 0); for (iter = icalfileset_begin_component(cout, ICAL_ANY_COMPONENT, 0); icalsetiter_deref(&iter) != 0; icalsetiter_next(&iter)) { icalcomponent *event; icalproperty *dtstart, *dtend; itr = icalsetiter_deref(&iter); count++; event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); if (VERBOSE) printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), icalproperty_as_ical_string(dtend)); } /* Remove all of them */ icalset_free(cout); cout = icalfileset_new(OUTPUT_FILE); ok("Opening output file", (cout!=0)); assert(cout != 0); /* need to advance the iterator first before calling remove_componenet() */ /* otherwise, iter will contain a "removed" component and icalsetiter_next(&iter) */ /* will fail. */ iter = icalfileset_begin_component(cout, ICAL_ANY_COMPONENT, 0); itr = icalsetiter_deref(&iter); while (itr != 0) { icalsetiter_next(&iter); icalfileset_remove_component(cout, itr); icalcomponent_free(itr); itr = icalsetiter_deref(&iter); } icalset_free(cout); /* Print them out again */ cout = icalfileset_new(OUTPUT_FILE); ok("Opening output file", (cout != 0)); assert(cout != 0); count =0; for (itr = icalfileset_get_first_component(cout); itr != 0; itr = icalfileset_get_next_component(cout)){ icalcomponent *event; icalproperty *dtstart, *dtend; count++; event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), icalproperty_as_ical_string(dtend)); } icalset_free(cout); icalcomponent_free(c); } #ifdef WITH_BDB /* In this example, we're storing a calendar with several components under the reference id "calendar_7286" and retrieving records based on title, "month_1" through "month_10". We use a number of the "optional" arguments to specify secondary indices, sub-databases (i.e. having multiple databases residing within a single Berkeley DB file), and keys for storage and retrieval. */ void test_bdbset() { icalset *cout; int month = 0; int count=0; int num_components=0; int szdata_len=0; int ret=0; char *subdb, *szdata, *szpacked_data; char uid[255]; struct icaltimetype start, end; icalcomponent *c,*clone, *itr; DBT key, data; DBC *dbcp; struct calendar *cal; int cal_size; return; // for now... TODO fix these broken tests.. start = icaltime_from_timet( time(0),0); end = start; end.hour++; /* Note: as per the Berkeley DB ref pages: * * The database argument is optional, and allows applications to * have multiple databases in a single file. Although no database * argument needs to be specified, it is an error to attempt to * open a second database in a file that was not initially created * using a database name. * */ subdb = "calendar_id"; /* open database, using subdb */ cout = icalbdbset_new("calendar.db", ICALBDB_EVENTS, DB_HASH, 0); /* sdbp = icalbdbset_secondary_open(dbp, DATABASE, "title", get_title, DB_HASH); */ c = icalparser_parse_string(str2); assert(c != 0); /* Add data to the file */ for(month = 1; month < 10; month++){ icalcomponent *event; icalproperty *dtstart, *dtend, *location; /* retrieve data */ // cout = icalbdbset_new(dbp, sdbp, NULL); // assert(cout != 0); start.month = month; end.month = month; clone = icalcomponent_new_clone(c); assert(clone !=0); event = icalcomponent_get_first_component(clone, ICAL_VEVENT_COMPONENT); assert(event != 0); dtstart = icalcomponent_get_first_property(event, ICAL_DTSTART_PROPERTY); assert(dtstart!=0); icalproperty_set_dtstart(dtstart,start); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); assert(dtend!=0); icalproperty_set_dtend(dtend,end); location = icalcomponent_get_first_property(event, ICAL_LOCATION_PROPERTY); assert(location!=0); #if 0 /* change the uid to include the month */ sprintf(uid, "%s_%d", icalcomponent_get_uid(clone), month); icalcomponent_set_uid(clone, uid); #endif icalbdbset_add_component(cout,clone); /* commit changes */ icalbdbset_commit(cout); num_components = icalcomponent_count_components(clone, ICAL_ANY_COMPONENT); icalset_free(cout); } /* try out the cursor operations */ memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); #if 0 ret = icalbdbset_acquire_cursor(dbp, &dbcp); ret = icalbdbset_get_first(dbcp, &key, &data); ret = icalbdbset_get_next(dbcp, &key, &data); ret = icalbdbset_get_last(dbcp, &key, &data); #endif /* Print them out */ for(month = 1, count=0; month < 10; month++){ char *title; icalcomponent *event; icalproperty *dtstart, *dtend; for (itr = icalbdbset_get_first_component(cout); itr != 0; itr = icalbdbset_get_next_component(cout)){ icalcomponent *event; icalproperty *dtstart, *dtend; count++; event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), icalproperty_as_ical_string(dtend)); } icalset_free(cout); } /* open database */ // cout = icalbdbset_bdb_open("calendar.db", "title", DB_HASH, 0644); /* sdbp = icalbdbset_secondary_open(dbp, DATABASE, "title", get_title, DB_HASH); */ /* Remove all of them */ for(month = 1; month < 10; month++){ for (itr = icalbdbset_get_first_component(cout); itr != 0; itr = icalbdbset_get_next_component(cout)){ icalbdbset_remove_component(cout, itr); } icalbdbset_commit(cout); icalset_free(cout); } /* Print them out again */ for(month = 1, count=0; month < 10; month++){ char *title; icalcomponent *event; icalproperty *dtstart, *dtend; for (itr = icalbdbset_get_first_component(cout); itr != 0; itr = icalbdbset_get_next_component(cout)){ icalcomponent *event; icalproperty *dtstart, *dtend; count++; event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), icalproperty_as_ical_string(dtend)); } icalset_free(cout); } } #endif int vcalendar_init(struct calendar **rcal, char *vcalendar, char *title) { size_t vcalendar_size, title_size, total_size; struct calendar *cal; if(vcalendar) vcalendar_size = strlen(vcalendar); else { vcalendar = ""; vcalendar_size = strlen(vcalendar); } if(title) title_size = strlen(title); else { title = ""; title_size = strlen(title); } total_size = sizeof(struct calendar) + vcalendar_size + title_size; if((cal = (struct calendar *)malloc(total_size))==NULL) return 0; memset(cal, 0, total_size); /* offsets */ cal->total_size_offset = sizeof(int); cal->vcalendar_size_offset = (sizeof(int) * 7); cal->vcalendar_offset = cal->vcalendar_size_offset + sizeof(int); cal->title_size_offset = cal->vcalendar_offset + vcalendar_size; cal->title_offset = cal->title_size_offset + sizeof(int); /* sizes */ cal->total_size = total_size; cal->vcalendar_size = vcalendar_size; cal->title_size = title_size; if (vcalendar && *vcalendar) cal->vcalendar = strdup(vcalendar); if (title && *title) cal->title = strdup(title); *rcal = cal; return 0; } /* get_title -- extracts a secondary key (the vcalendar) * from a primary key/data pair */ /* just create a random title for now */ #ifdef WITH_BDB int get_title(DB *dbp, const DBT *pkey, const DBT *pdata, DBT *skey) { icalcomponent *cl; char title[255]; memset(skey, 0, sizeof(DBT)); cl = icalparser_parse_string((char *)pdata->data); sprintf(title, "title_%s", icalcomponent_get_uid(cl)); skey->data = strdup(title); skey->size = strlen(skey->data); return (0); } char * pack_calendar(struct calendar *cal, int size) { char *str; if((str = (char *)malloc(sizeof(char) * size))==NULL) return 0; /* ID */ memcpy(str, &cal->ID, sizeof(cal->ID)); /* total_size */ memcpy(str + cal->total_size_offset, &cal->total_size, sizeof(cal->total_size)); /* vcalendar_size */ memcpy(str + cal->vcalendar_size_offset, &cal->vcalendar_size, sizeof(cal->vcalendar_size)); /* vcalendar */ memcpy(str + cal->vcalendar_offset, cal->vcalendar, cal->vcalendar_size); /* title_size */ memcpy(str + cal->title_size_offset, &cal->title_size, sizeof(cal->title_size)); /* title */ memcpy(str + cal->title_offset, cal->title, cal->title_size); return str; } struct calendar * unpack_calendar(char *str, int size) { struct calendar *cal; if((cal = (struct calendar *) malloc(size))==NULL) return 0; memset(cal, 0, size); /* offsets */ cal->total_size_offset = sizeof(int); cal->vcalendar_size_offset = (sizeof(int) * 7); cal->vcalendar_offset = cal->vcalendar_size_offset + sizeof(int); /* ID */ memcpy(&cal->ID, str, sizeof(cal->ID)); /* total_size */ memcpy(&cal->total_size, str + cal->total_size_offset, sizeof(cal->total_size)); /* vcalendar_size */ memcpy(&cal->vcalendar_size, str + cal->vcalendar_size_offset, sizeof(cal->vcalendar_size)); if((cal->vcalendar = (char *)malloc(sizeof(char) * cal->vcalendar_size))==NULL) return 0; /* vcalendar */ memcpy(cal->vcalendar, (char *)(str + cal->vcalendar_offset), cal->vcalendar_size); cal->title_size_offset = cal->vcalendar_offset + cal->vcalendar_size; cal->title_offset = cal->title_size_offset + sizeof(int); /* title_size */ memcpy(&cal->title_size, str + cal->title_size_offset, sizeof(cal->title_size)); if((cal->title = (char *)malloc(sizeof(char) * cal->title_size))==NULL) return 0; /* title*/ memcpy(cal->title, (char *)(str + cal->title_offset), cal->title_size); return cal; } char * parse_vcalendar(const DBT *dbt) { char *str; struct calendar *cal; str = (char *)dbt->data; cal = unpack_calendar(str, dbt->size); return cal->vcalendar; } #endif void test_dirset_extended(void) { icalcomponent *c; icalgauge *gauge; icalerrorenum error; icalcomponent *itr; icalset* cluster; struct icalperiodtype rtime; icalset *s = icaldirset_new("store"); icalset *s2 = icaldirset_new("store-new"); int i, count = 0; ok("Open dirset 'store'", (s!=0)); assert(s != 0); rtime.start = icaltime_from_timet( time(0),0); cluster = icalfileset_new(OUTPUT_FILE); ok("Open fileset to duplicate 4 times", (cluster != 0)); assert(cluster != 0); #define NUMCOMP 4 /* Duplicate every component in the cluster NUMCOMP times */ icalerror_clear_errno(); for (i = 1; i #include #include #include int main(int argc, char **argv) { icalarray *timezones = icaltimezone_get_builtin_timezones(); int i; int ret = 0; unsigned int total_failed = 0; unsigned int total_okay = 0; unsigned int percent_failed = 0; int verbose = 0; icaltimezone *utc_zone = icaltimezone_get_utc_timezone(); /* for all known time zones... */ for (i = 0; i < timezones->num_elements; i++) { icaltimezone *zone = icalarray_element_at(timezones, i); const char *zone_location = icaltimezone_get_location(zone); int day; time_t start_time; struct tm start_tm; time_t curr_time; struct tm curr_tm; struct icaltimetype curr_tt; int failed = 0; int curr_failed; int zonedef_printed = 0; /* * select this location for glibc: needs support for TZ= * which is not POSIX */ #if defined(HAVE_SETENV) setenv("TZ", zone_location, 1); #else static new_tz[256]; new_tz[0] = '\0'; strncat(new_tz, "TZ=", 255); strncat(new_tz, zone_location, 255); putenv(new_tz); #endif tzset(); /* * determine current local time and date: always use midday in * the current zone and first day of first month in the year */ start_time = time(NULL); localtime_r(&start_time, &start_tm); start_tm.tm_hour = 12; start_tm.tm_min = 0; start_tm.tm_sec = 0; start_tm.tm_mday = 1; start_tm.tm_mon = 0; start_time = mktime(&start_tm); /* check time conversion for the next 365 days */ for (day = 0, curr_time = start_time; day < 365; day++, curr_time += 24 * 60 * 60) { /* determine date/time with glibc */ localtime_r(&curr_time, &curr_tm); /* determine date/time with libical */ curr_tt = icaltime_from_timet_with_zone(curr_time, 0, utc_zone); curr_tt.zone = utc_zone; /* workaround: icaltime_from_timet_with_zone() should do this, but doesn't! */ curr_tt = icaltime_convert_to_zone(curr_tt, zone); /* compare... */ curr_failed = curr_tm.tm_year + 1900 != curr_tt.year || curr_tm.tm_mon + 1 != curr_tt.month || curr_tm.tm_mday != curr_tt.day || curr_tm.tm_hour != curr_tt.hour || curr_tm.tm_min != curr_tt.minute || curr_tm.tm_sec != curr_tt.second; /* only print first failed day and first day which is okay again */ if (verbose || curr_failed != failed) { struct tm utc_tm; gmtime_r(&curr_time, &utc_tm); printf("%s: day %03d: %s: %04d-%02d-%02d %02d:%02d:%02d UTC = libc %04d-%02d-%02d %02d:%02d:%02d dst %d", zone_location, day, verbose ? (curr_failed ? "failed" : "okay") : (curr_failed ? "first failed" : "okay again"), utc_tm.tm_year + 1900, utc_tm.tm_mon + 1, utc_tm.tm_mday, utc_tm.tm_hour, utc_tm.tm_min, utc_tm.tm_sec, curr_tm.tm_year + 1900, curr_tm.tm_mon + 1, curr_tm.tm_mday, curr_tm.tm_hour, curr_tm.tm_min, curr_tm.tm_sec, curr_tm.tm_isdst); if (curr_failed) { printf(" != libical %04d-%02d-%02d %02d:%02d:%02d dst %d", curr_tt.year, curr_tt.month, curr_tt.day, curr_tt.hour, curr_tt.minute, curr_tt.second, curr_tt.is_daylight); ret = 1; } printf("\n"); failed = curr_failed; if (!zonedef_printed) { icalcomponent *comp = icaltimezone_get_component(zone); if (comp) { printf("%s\n", icalcomponent_as_ical_string(comp)); } zonedef_printed = 1; } } if (curr_failed) { total_failed++; } else { total_okay++; } } } if (total_failed || total_okay) { percent_failed = total_failed * 100 / (total_failed + total_okay); printf(" *** Summary: %d zones tested, %u days failed, %u okay => %u%% failed ***\n", timezones->num_elements, total_failed, total_okay, percent_failed); } return ret; } libical-1.0/src/test/copycluster.c0000664000076400007640000000623712132563126016232 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: copycluster.c CREATOR: eric 15 January 2000 $Id: copycluster.c,v 1.18 2008-02-03 16:10:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* for printf */ #include #include /* For strerror */ #include /* for signal */ #if defined(HAVE_UNISTD_H) #include /* for alarm */ #endif #include /* for exit */ #include #include #ifdef SIGALRM static void sig_alrm(int i){ fprintf(stderr,"Could not get lock on file\n"); exit(1); } #endif /* This program copies a file that holds iCal components to an other file. */ void usage(char* arg0) { printf("usage: %s cluster-file1 cluster-file2\n",arg0); } int main(int c, char *argv[]){ icalset *clusterin, *clusterout = NULL; icalcomponent *itr; int count=0; int tostdout = 0; if(c < 2 || c > 3){ usage(argv[0]); exit(1); } if (c == 2){ tostdout = 1; } /*icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL);*/ #ifdef SIGALRM signal(SIGALRM,sig_alrm); alarm(10); #endif clusterin = icalfileset_new(argv[1]); #ifdef SIGALRM alarm(0); #endif if (clusterin == 0){ printf("Could not open input cluster \"%s\"\n",argv[1]); if(icalerrno!= ICAL_NO_ERROR){ printf("Error: %s\n",icalerror_strerror(icalerrno)); } exit(1); } if (!tostdout){ #ifdef SIGALRM alarm(10); #endif clusterout = icalfileset_new(argv[2]); #ifdef SIGALRM alarm(0); #endif if (clusterout == 0){ printf("Could not open output cluster \"%s\"\n",argv[2]); exit(1); } } for (itr = icalset_get_first_component(clusterin); itr != 0; itr = icalset_get_next_component(clusterin)){ icalerror_set_error_state(ICAL_BADARG_ERROR, ICAL_ERROR_NONFATAL); icalrestriction_check(itr); icalerror_set_error_state(ICAL_BADARG_ERROR, ICAL_ERROR_DEFAULT); if (itr != 0){ if(tostdout){ printf("--------------\n%s\n",icalcomponent_as_ical_string(itr)); } else { icalfileset_add_component(clusterout, icalcomponent_new_clone(itr)); } count++; } else { printf("Got NULL component"); } } printf("Transfered %d components\n",count); icalset_free(clusterin); if (!tostdout){ icalfileset_mark(clusterout); icalset_free(clusterout); } return 0; } libical-1.0/src/test/regression-utils.c0000664000076400007640000000755512132563126017200 0ustar allenallen#include #include /* abort() */ #include /* strcmp() */ static char ictt_str[1024]; int VERBOSE = 1; int QUIET = 0; const char* ical_timet_string(const time_t t) { struct tm stm; struct tm *tmp = gmtime(&t); if (tmp) stm = *tmp; else memset(&stm, 0, sizeof(stm)); sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d Z",stm.tm_year+1900, stm.tm_mon+1,stm.tm_mday,stm.tm_hour,stm.tm_min,stm.tm_sec); return ictt_str; } const char* ictt_as_string(struct icaltimetype t) { const char *zone = icaltimezone_get_tzid((icaltimezone *)t.zone); if (icaltime_is_utc(t)) sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d Z UTC", t.year,t.month,t.day, t.hour,t.minute,t.second); else sprintf(ictt_str,"%02d-%02d-%02d %02d:%02d:%02d %s", t.year,t.month,t.day, t.hour,t.minute,t.second, zone == NULL? "(floating)": zone); return ictt_str; } char* icaltime_as_ctime(struct icaltimetype t) { time_t tt; tt = icaltime_as_timet(t); sprintf(ictt_str,"%s",ctime(&tt)); return ictt_str; } /** This variable is used to control whether we core dump on errors **/ static int die_on_errors = 0; static int testnumber = 0; static int failed = 0; static int current_set = 0; static struct {int set; int test;} failed_tests[1024]; void die_on_errors_set(int val) { die_on_errors = 1; } void _ok(char* test_name, int success, char *file, int linenum, char *test) { testnumber++; if (!QUIET || (QUIET && !success)) printf("%sok %d - %s\n", (success)?"" : "not ", testnumber, test_name); if (!success) { failed_tests[failed].set = current_set; failed_tests[failed].test = testnumber; failed++; printf("# test failed: \"%s\"\n", test); printf("# at: %s:%-d\n", file, linenum); } if (die_on_errors == 1 && !success) { abort(); } } void _is(char* test_name, const char* str1, const char* str2, char *file, int linenum) { int diff; if (str1 == NULL || str2 == NULL) { diff = 1; } else { diff = strcmp(str1, str2); } if (!test_name) test_name = "()"; _ok(test_name, (diff==0), file, linenum, ""); if (diff) { printf("# got: %s\n", str1 ? str1 : "(null)"); printf("# expected: %s\n", str2 ? str2 : "(null)"); } } void _int_is(char* test_name, int i1, int i2, char *file, int linenum) { _ok(test_name, (i1==i2), file, linenum, ""); if (i1!=i2) { printf("# got: %d\n", i1); printf("# expected: %d\n", i2); } } void verbose(int newval) { VERBOSE = newval; } void test_start(int numtests) { if (numtests) { if (!QUIET) printf("1..%-d\n", numtests); } else { if (!QUIET) printf("1..\n"); } } void test_header(char *header, int set) { if (!QUIET) printf("########## %-40s (%d) ##########\n", header, set); current_set = set; } void test_end(void) { int pct; if (testnumber < 1) { printf("\n No Tests Run.\n"); return; } if (failed) { int i, oldset = 0; pct = ((testnumber - failed)*100)/testnumber; printf("\n Failed %d/%d tests, %2d%% okay\n", failed, testnumber, pct); printf("\n Failed tests:\n "); for (i = 0; i < failed; i++) { int this_set = failed_tests[i].set; char *prefix = ""; if (this_set != oldset) { prefix = "\n "; oldset = this_set; } printf("%s%d/%d ", prefix, this_set, failed_tests[i].test); } printf("\n"); } else { printf("\n All Tests Successful.\n"); } } void test_run(char *test_name, void (*test_fcn)(void), int do_test, int headeronly) { static int test_set = 1; if (headeronly || do_test == 0 || do_test == test_set) test_header(test_name, test_set); if (!headeronly && (do_test==0 || do_test == test_set)) { (*test_fcn)(); if (!QUIET) printf("\n"); } test_set++; } libical-1.0/src/test/icaltestparser.c0000664000076400007640000000521612132563126016677 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icaltestparser.c CREATOR: eric 20 June 1999 $Id: icaltestparser.c,v 1.4 2008-01-02 20:07:45 dothebart Exp $ $Locker: $ The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The original author is Eric Busboom The original code is icaltestparser.c (C) COPYRIGHT 1999 The Software Studio. http://www.softwarestudio.org ======================================================================*/ #include #include #include #include #include #include char str[] = "BEGIN:VCALENDAR\ PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ VERSION:2.0\ BEGIN:VTIMEZONE\ TZID:US-Eastern\ BEGIN:STANDARD\ DTSTART:19990404T020000\ RDATE:19990u404xT020000\ TZOFFSETFROM:-0500\ TZOFFSETTO:-0400\ END:STANDARD\ BEGIN:DAYLIGHT\ DTSTART:19990404T020000\ RDATE:19990404T020000\ TZOFFSETFROM:-0500\ TZOFFSETTO:-0400\ TZNAME:EDT\ Dkjhgri:derhvnv;\ BEGIN:dfkjh\ END:dfdfkjh\ END:DAYLIGHT\ END:VTIMEZONE\ BEGIN:VEVENT\ GEO:Bongo\ DTSTAMP:19980309T231000Z\ UID:guid-1.host1.com\ ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\ ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP\ :MAILTO:employee-A@host.com\ DESCRIPTION:Project XYZ Review Meeting\ CATEGORIES:MEETING\ CLASS:PUBLIC\ CREATED:19980309T130000Z\ SUMMARY:XYZ Project Review\ DTSTART;TZID=US-Eastern:19980312T083000\ DTEND;TZID=US-Eastern:19980312T093000\ LOCATION:1CP Conference Room 4350\ END:VEVENT\ END:VCALENDAR\ "; extern int yydebug; /* Have the parser fetch data from stdin */ char* read_stream(char *s, size_t size, void *d) { char *c = fgets(s,size, (FILE*)d); return c; } int main(int argc, char* argv[]) { char* line; FILE* stream; icalcomponent *c; icalparser *parser = icalparser_new(); stream = fopen(argv[1],"r"); assert(stream != 0); icalparser_set_gen_data(parser,stream); do{ line = icalparser_get_line(parser,read_stream); c = icalparser_add_line(parser,line); if (c != 0){ /*icalcomponent_convert_errors(c);*/ printf("%s",icalcomponent_as_ical_string(c)); printf("\n---------------\n"); icalcomponent_free(c); } } while ( line != 0); return 0; } libical-1.0/src/java/0000775000076400007640000000000012132563127013445 5ustar allenallenlibical-1.0/src/java/net_cp_jlibical_VComponent_cxx.h0000664000076400007640000002240112132563127021750 0ustar allenallen /*====================================================================== FILE: net_cp_jlibical_VComponent_cxx.h CREATOR: javah 1/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef _Included_net_cp_jlibical_VComponent #define _Included_net_cp_jlibical_VComponent #ifndef JNI_H #include #endif #ifdef __cplusplus extern "C" { #endif /* * Class: net_cp_jlibical_VComponent * Method: as_ical_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_as_1ical_1string (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: isa * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_isa (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: isa_component * Signature: (Ljava/lang/Object;)Z */ JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_VComponent_isa_1component (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: add_property * Signature: (Lnet/cp/jlibical/ICalProperty;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_add_1property (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: remove_property * Signature: (Lnet/cp/jlibical/ICalProperty;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_remove_1property (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: count_properties * Signature: (I)I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_count_1properties (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_VComponent * Method: get_current_property * Signature: ()Lnet/cp/jlibical/ICalProperty; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1current_1property (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: get_first_property * Signature: (I)Lnet/cp/jlibical/ICalProperty; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1property (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_VComponent * Method: get_next_property * Signature: (I)Lnet/cp/jlibical/ICalProperty; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1next_1property (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_VComponent * Method: get_inner * Signature: ()Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1inner (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: add_component * Signature: (Lnet/cp/jlibical/VComponent;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_add_1component (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: remove_component * Signature: (Lnet/cp/jlibical/VComponent;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_remove_1component (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: count_components * Signature: (I)I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_count_1components (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_VComponent * Method: get_current_component * Signature: ()Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1current_1component (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: get_first_component * Signature: (I)Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1component (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_VComponent * Method: get_next_component * Signature: (I)Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1next_1component (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_VComponent * Method: get_dtstart * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtstart (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_dtstart * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtstart (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: get_dtend * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtend (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_dtend * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtend (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: get_duration * Signature: ()Lnet/cp/jlibical/ICalDurationType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1duration (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_duration * Signature: (Lnet/cp/jlibical/ICalDurationType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1duration (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: get_method * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_get_1method (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_method * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1method (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_VComponent * Method: get_summary * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1summary (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_summary * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1summary (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_VComponent * Method: get_dtstamp * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtstamp (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_dtstamp * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtstamp (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_VComponent * Method: get_location * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1location (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_location * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1location (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_VComponent * Method: get_description * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1description (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_description * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1description (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_VComponent * Method: get_uid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1uid (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_uid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1uid (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_VComponent * Method: get_first_real_component * Signature: ()Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1real_1component (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__ (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: init * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__Ljava_lang_String_2 (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_VComponent * Method: init * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__I (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_VComponent * Method: get_relcalid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1relcalid (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_relcalid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1relcalid (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_VComponent * Method: get_recurrenceid * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1recurrenceid (JNIEnv *, jobject); /* * Class: net_cp_jlibical_VComponent * Method: set_recurrenceid * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1recurrenceid (JNIEnv *, jobject, jobject); #ifdef __cplusplus } #endif #endif libical-1.0/src/java/net_cp_jlibical_ICalParameter_cxx.cpp0000664000076400007640000001551412132563127022673 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: net_cp_jlibical_ICalParameter_cxx.cpp CREATOR: gnorman 1/10/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef NET_CP_JLIBICAL_ICALPARAMETER_CXX_H #include "net_cp_jlibical_ICalParameter_cxx.h" #endif #ifndef JLIBICAL_CONSTS_CXX_H #include "jlibical_consts_cxx.h" #endif #ifndef JLIBICAL_UTILS_CXX_H #include "jlibical_utils_cxx.h" #endif #ifndef ICALPARAMETER_CXX_H #include "icalparameter_cxx.h" #endif /* * Class: net_cp_jlibical_ICalParameter * Method: as_ical_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalParameter_as_1ical_1string (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->as_ical_string(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalParameter * Method: isa * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_isa (JNIEnv *env, jobject jobj) { jint result = 0; ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->isa(); } return(result); } /* * Class: net_cp_jlibical_ICalParameter * Method: isa_parameter * Signature: (Ljava/lang/Object;)Z */ JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalParameter_isa_1parameter (JNIEnv *env, jobject jobj, jobject arg) { jboolean result = 0; // get the c++ object from the jobj ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the c++ object from the arg void* argObjPtr = 0; if (arg != NULL) { argObjPtr = getCObjectPtr(env,arg); } // get the result from the c++ object (candidateValue can be 0, it's cObj's responsibility to handle this if an error). result = cObj->isa_parameter(argObjPtr) != 0; } return(result); } /* * Class: net_cp_jlibical_ICalParameter * Method: get_language * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalParameter_get_1language (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_language(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalParameter * Method: set_language * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1language (JNIEnv *env, jobject jobj, jstring str) { ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_language((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalParameter * Method: get_encoding * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1encoding (JNIEnv *env, jobject jobj) { jint result = 0; ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_encoding(); } return(result); } /* * Class: net_cp_jlibical_ICalParameter * Method: set_encoding * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1encoding (JNIEnv *env, jobject jobj, jint value) { ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_encoding((icalparameter_encoding)value); } } /* * Class: net_cp_jlibical_ICalParameter * Method: get_role * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1role (JNIEnv *env, jobject jobj) { jint result = 0; ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_role(); } return(result); } /* * Class: net_cp_jlibical_ICalParameter * Method: set_role * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1role (JNIEnv *env, jobject jobj, jint value) { ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_role((icalparameter_role)value); } } /* * Class: net_cp_jlibical_ICalParameter * Method: get_partstat * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1partstat (JNIEnv *env, jobject jobj) { jint result = 0; ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_partstat(); } return(result); } /* * Class: net_cp_jlibical_ICalParameter * Method: set_partstat * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1partstat (JNIEnv *env, jobject jobj, jint value) { ICalParameter* cObj = getSubjectAsICalParameter(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_partstat((icalparameter_partstat)value); } } /* * Class: net_cp_jlibical_ICalParameter * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__ (JNIEnv *env, jobject jobj) { setCObjectPtr(env,jobj,new ICalParameter()); } /* * Class: net_cp_jlibical_ICalParameter * Method: init * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__Ljava_lang_String_2 (JNIEnv *env, jobject jobj, jstring str) { if (str != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); setCObjectPtr(env,jobj,new ICalParameter((char*)szTemp)); env->ReleaseStringUTFChars(str,szTemp); } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } } /* * Class: net_cp_jlibical_ICalParameter * Method: init * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__ILjava_lang_String_2 (JNIEnv *env, jobject jobj, jint kind, jstring str) { if (str != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); setCObjectPtr(env,jobj,new ICalParameter((icalparameter_kind)kind,(char*)szTemp)); env->ReleaseStringUTFChars(str,szTemp); } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } } /* * Class: net_cp_jlibical_ICalParameter * Method: init * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__I (JNIEnv *env, jobject jobj, jint kind) { setCObjectPtr(env,jobj,new ICalParameter((icalparameter_kind)kind)); } libical-1.0/src/java/jniICalRecurrenceType_cxx.h0000664000076400007640000001152712132563127020677 0ustar allenallen /*====================================================================== FILE: jniICalRecurrenceType_cxx.h CREATOR: structConverter ======================================================================*/ #ifndef _jni_ICalRecurrenceType_H_ #define _jni_ICalRecurrenceType_H_ #include #define ICalRecurrenceType icalrecurrencetype #ifdef __cplusplus extern "C" { #endif #include "ical.h" static void initICalRecurrenceTypeFieldIDs(JNIEnv* env, jclass clazz); void jni_SetUntil_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetUntil_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetFreq_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetFreq_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetWeek_start_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetWeek_start_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetCount_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetCount_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetInterval_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetInterval_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_second_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_second_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_minute_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_minute_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_hour_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_hour_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_month_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_month_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_year_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_year_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_week_no_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_week_no_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_month_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_month_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetBy_set_pos_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_GetBy_set_pos_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType); void jni_SetAll_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv* env, jobject thisICalRecurrenceType); void jni_GetAll_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv* env, jobject thisICalRecurrenceType); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_init__J(JNIEnv* env, jobject thisICalRecurrenceType, jlong data); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_initFIDs(JNIEnv *env, jclass clazz); #ifdef __cplusplus } #endif #endif libical-1.0/src/java/jniICalDurationType_cxx.h0000664000076400007640000000510512132563127020362 0ustar allenallen /*====================================================================== FILE: jniICalDurationType_cxx.h CREATOR: structConverter (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef _jni_ICalDurationType_H #define _jni_ICalDurationType_H #include // I forgot how to do this using a typedef in c++!!!! #define ICalDurationType icaldurationtype #ifdef __cplusplus extern "C" { #endif #include "ical.h" static void initICalDurationTypeFieldIDs(JNIEnv* env, jclass clazz); void jni_SetIs_neg_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_GetIs_neg_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_SetDays_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_GetDays_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_SetWeeks_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_GetWeeks_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_SetHours_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_GetHours_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_SetMinutes_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_GetMinutes_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_SetSeconds_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_GetSeconds_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType); void jni_SetAll_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv* env, jobject thisICalDurationType); void jni_GetAll_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv* env, jobject thisICalDurationType); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_initFIDs(JNIEnv *env, jclass clazz); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_init__J(JNIEnv *env, jobject thisICalDurationType, jlong data); #ifdef __cplusplus } #endif #endif libical-1.0/src/java/VCalendar.java0000664000076400007640000000074112132563127016151 0ustar allenallen/*====================================================================== FILE: VCalendar.java CREATOR: echoi 01/28/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class VCalendar extends VComponent { public VCalendar() { super(ICalComponentKind.ICAL_VCALENDAR_COMPONENT); } public VCalendar(long obj) { super(obj); } public VCalendar(String str) { super(str); } } libical-1.0/src/java/testjni.java0000664000076400007640000004365312132563127016003 0ustar allenallenpackage net.cp.jlibical; import java.lang.String; public class testjni { static final String content = "BEGIN:VCALENDAR\nVERSION:2.1\nBEGIN:VEVENT\nUID:abcd12345\nDTSTART:20020307T180000Z\nDTEND:20020307T190000Z\nSUMMARY:Important Meeting\nEND:VEVENT\nEND:VCALENDAR"; public static void main(String[] args) { // VAGENDA test case ICalProperty calidProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_RELCALID_PROPERTY); ICalProperty ownerProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_OWNER_PROPERTY); calidProp.set_relcalid("1212"); ownerProp.set_owner("Bill Smith"); VAgenda vAgenda = new VAgenda(); vAgenda.add_property(calidProp); vAgenda.add_property(ownerProp); System.out.println("VAgenda:\n" + vAgenda.as_ical_string()); // VEVENT test case ICalProperty summProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_SUMMARY_PROPERTY); ICalProperty startProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DTSTART_PROPERTY); ICalProperty endProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DTEND_PROPERTY); ICalProperty locationProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_LOCATION_PROPERTY); ICalProperty descProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DESCRIPTION_PROPERTY); ICalTimeType starttime = new ICalTimeType(); starttime.setYear(2001); starttime.setMonth(12); starttime.setDay(21); starttime.setHour(18); starttime.setMinute(0); starttime.setSecond(0); starttime.setIs_utc(true); System.out.println("done creating starttime"); ICalTimeType endtime = new ICalTimeType(); endtime.setYear(2002); endtime.setMonth(1); endtime.setDay(1); endtime.setHour(8); endtime.setMinute(0); endtime.setSecond(0); endtime.setIs_utc(true); System.out.println("done creating endtime"); // START - get, set_exdate ICalProperty property_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_EXDATE_PROPERTY); property_tma.set_exdate(starttime); ICalTimeType starttime_return = property_tma.get_exdate(); System.out.println("****** property - exdate ******"); System.out.println("setYear=" + starttime_return.getYear()); System.out.println("setMonth=" + starttime_return.getMonth()); System.out.println("setDay=" + starttime_return.getDay()); System.out.println("setHour=" + starttime_return.getHour()); System.out.println("setMinute=" + starttime_return.getMinute()); System.out.println("setSecond=" + starttime_return.getSecond()); System.out.println("******* property - exdate *****"); // END - get, set exdate // START - get, set exrule ICalProperty property_exrule_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_EXRULE_PROPERTY); ICalRecurrenceType exrule_tma = new ICalRecurrenceType(); exrule_tma.setUntil(starttime); exrule_tma.setFreq(ICalRecurrenceType.ICalRecurrenceTypeFrequency.ICAL_MINUTELY_RECURRENCE); exrule_tma.setWeek_start(ICalRecurrenceType.ICalRecurrenceTypeWeekday.ICAL_SUNDAY_WEEKDAY); short test_tma[] = {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}; exrule_tma.setBy_second(test_tma); exrule_tma.setBy_minute(test_tma); property_exrule_tma.set_exrule(exrule_tma); ICalRecurrenceType recurence_tma_return = property_exrule_tma.get_exrule(); System.out.println("****** property - exrule ******"); System.out.println("setFreq=" + recurence_tma_return.getFreq()); System.out.println("setWeek_start=" + recurence_tma_return.getWeek_start()); System.out.println("setBy_second[30]=" + recurence_tma_return.getBy_secondIndexed(30)); System.out.println("setBy_minute[28]=" + recurence_tma_return.getBy_minuteIndexed(28)); System.out.println("****** property - exrule ******"); // END - get, set exrule // START - get, set recurrenceid ICalProperty property_recurrenceid_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_RECURRENCEID_PROPERTY); property_recurrenceid_tma.set_recurrenceid(starttime); ICalTimeType recurrenceid_return = property_recurrenceid_tma.get_recurrenceid(); System.out.println("****** property - recurrenceid ******"); System.out.println("setYear=" + recurrenceid_return.getYear()); System.out.println("setMonth=" + recurrenceid_return.getMonth()); System.out.println("setDay=" + recurrenceid_return.getDay()); System.out.println("setHour=" + recurrenceid_return.getHour()); System.out.println("setMinute=" + recurrenceid_return.getMinute()); System.out.println("setSecond=" + recurrenceid_return.getSecond()); System.out.println("******* property - recurrenceid *****"); // END - get, set recurrenceid // START - get, set rrule ICalProperty property_rrule_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_RRULE_PROPERTY); ICalRecurrenceType rrule_tma = new ICalRecurrenceType(); rrule_tma.setUntil(starttime); rrule_tma.setFreq(ICalRecurrenceType.ICalRecurrenceTypeFrequency.ICAL_MINUTELY_RECURRENCE); rrule_tma.setWeek_start(ICalRecurrenceType.ICalRecurrenceTypeWeekday.ICAL_SUNDAY_WEEKDAY); short test_hour_tma[] = {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}; rrule_tma.setBy_hour(test_hour_tma); property_rrule_tma.set_rrule(rrule_tma); ICalRecurrenceType rrule_tma_return = property_rrule_tma.get_rrule(); System.out.println("****** property - rrule ******"); System.out.println("setFreq=" + rrule_tma_return.getFreq()); System.out.println("setWeek_start=" + rrule_tma_return.getWeek_start()); System.out.println("setBy_hour[11]=" + rrule_tma_return.getBy_hourIndexed(11)); System.out.println("****** property - rrule ******"); // END - get, set rrule // START - get, set freebusy ICalProperty property_freebusy_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_FREEBUSY_PROPERTY); ICalPeriodType period_tma = new ICalPeriodType(); ICalDurationType duration_tma = new ICalDurationType(); duration_tma.setDays((long) 0); duration_tma.setHours((long) 10); duration_tma.setMinutes((long) 15); period_tma.setStart(starttime); period_tma.setEnd(endtime); period_tma.setDuration(duration_tma); property_freebusy_tma.set_freebusy(period_tma); ICalPeriodType period_tma_return = property_freebusy_tma.get_freebusy(); ICalTimeType start_tma_return = period_tma_return.getStart(); ICalTimeType end_tma_return = period_tma_return.getEnd(); ICalDurationType duration_tma_return = period_tma_return.getDuration(); System.out.println("****** property - freebusy - start ******"); System.out.println("setYear=" + start_tma_return.getYear()); System.out.println("setMonth=" + start_tma_return.getMonth()); System.out.println("setDay=" + start_tma_return.getDay()); System.out.println("setHour=" + start_tma_return.getHour()); System.out.println("setMinute=" + start_tma_return.getMinute()); System.out.println("setSecond=" + start_tma_return.getSecond()); System.out.println("******* property - freebusy - start *****"); System.out.println("****** property - freebusy - end ******"); System.out.println("setYear=" + end_tma_return.getYear()); System.out.println("setMonth=" + end_tma_return.getMonth()); System.out.println("setDay=" + end_tma_return.getDay()); System.out.println("setHour=" + end_tma_return.getHour()); System.out.println("setMinute=" + end_tma_return.getMinute()); System.out.println("setSecond=" + end_tma_return.getSecond()); System.out.println("******* property - freebusy - end *****"); System.out.println("****** property - freebusy - duration ******"); System.out.println("setYear=" + duration_tma_return.getDays()); System.out.println("setMonth=" + duration_tma_return.getHours()); System.out.println("setDay=" + duration_tma_return.getMinutes()); System.out.println("******* property - freebusy - duration *****"); // END - get, set freebusy // START - get, set dtstamp ICalProperty property_dtstamp_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DTSTAMP_PROPERTY); property_dtstamp_tma.set_dtstamp(starttime); ICalTimeType dtstamp_tma_return = property_dtstamp_tma.get_dtstamp(); System.out.println("****** property - dtstamp ******"); System.out.println("setYear=" + dtstamp_tma_return.getYear()); System.out.println("setMonth=" + dtstamp_tma_return.getMonth()); System.out.println("setDay=" + dtstamp_tma_return.getDay()); System.out.println("setHour=" + dtstamp_tma_return.getHour()); System.out.println("setMinute=" + dtstamp_tma_return.getMinute()); System.out.println("setSecond=" + dtstamp_tma_return.getSecond()); System.out.println("******* property - dtstamp *****"); // END - get, set dtstamp // START - get, set attendee ICalProperty property_attendee_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_ATTENDEE_PROPERTY); property_attendee_tma.set_attendee("John"); String attendee_tma_return = property_attendee_tma.get_attendee(); System.out.println("****** property - attendee ******"); System.out.println("setAttendee=" + attendee_tma_return); System.out.println("****** property - attendee ******"); // END - get, set attendee // START - get, set comment ICalProperty property_comment_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_COMMENT_PROPERTY); property_comment_tma.set_comment("John"); String comment_tma_return = property_comment_tma.get_comment(); System.out.println("****** property - comment ******"); System.out.println("setComment=" + comment_tma_return); System.out.println("****** property - comment ******"); // END - get, set comment // START - get, set organizer ICalProperty property_organizer_tma = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_ORGANIZER_PROPERTY); property_organizer_tma.set_organizer("John"); String organizer_tma_return = property_organizer_tma.get_organizer(); System.out.println("****** property - organizer ******"); System.out.println("setOrganizer=" + organizer_tma_return); System.out.println("****** property - organizer ******"); // END - get, set organizer summProp.set_summary("New Year's Eve Party, and more"); System.out.println("done setting summProp"); startProp.set_dtstart(starttime); System.out.println("done setting startProp"); endProp.set_dtend(endtime); System.out.println("done setting endProp"); locationProp.set_location("Bothin, Marin County, CA, USA"); System.out.println("done setting locationProp\n"); descProp.set_description("Drive carefully; come to have fun!"); System.out.println("done setting descProp\n"); VEvent vEvent = new VEvent(); vEvent.add_property(summProp); vEvent.add_property(startProp); vEvent.add_property(endProp); vEvent.add_property(locationProp); vEvent.add_property(descProp); ICalTimeType sTime = vEvent.get_dtstart(); ICalTimeType eTime = vEvent.get_dtend(); //System.out.println("VEvent:\n" + vEvent.as_ical_string()); System.out.println("Summary: \n" + vEvent.get_summary()); System.out.println("DTSTART: \n" + sTime.getYear() + sTime.getMonth() + sTime.getDay() + sTime.getHour() + sTime.getMinute() + sTime.getSecond()); System.out.println("DTEND: \n" + eTime.getYear() + eTime.getMonth() + eTime.getDay() + eTime.getHour() + eTime.getMinute() + eTime.getSecond()); System.out.println("Location: \n" + vEvent.get_location()); System.out.println("Description: \n" +vEvent.get_description()); VComponent ic = new VComponent(content); if (ic == null) System.err.println("Failed to parse component"); System.out.println("VComponent:\n" + ic.as_ical_string()); // component is wrapped within BEGIN:VCALENDAR END:VCALENDAR // we need to unwrap it. VEvent sub_ic = (VEvent)ic.get_first_component(VComponent.ICalComponentKind.ICAL_VEVENT_COMPONENT); if (sub_ic == null) System.out.println("Failed to get subcomponent"); while (sub_ic != null) { System.out.println("subcomponent:\n" + sub_ic.as_ical_string()); sub_ic = (VEvent)ic.get_next_component(VComponent.ICalComponentKind.ICAL_VEVENT_COMPONENT); } // START - get, set recurrenceid ICalTimeType time_tma = new ICalTimeType(); time_tma.setYear(2002); time_tma.setMonth(2); time_tma.setDay(2); time_tma.setHour(2); time_tma.setMinute(2); time_tma.setSecond(2); time_tma.setIs_utc(true); ic.set_recurrenceid(time_tma); ICalTimeType time_tma_return = new ICalTimeType(); time_tma_return = ic.get_recurrenceid(); System.out.println("****** vcomponent - recurrenceid ******"); System.out.println("setYear=" + time_tma_return.getYear()); System.out.println("setMonth=" + time_tma_return.getMonth()); System.out.println("setDay=" + time_tma_return.getDay()); System.out.println("setHour=" + time_tma_return.getHour()); System.out.println("setMinute=" + time_tma_return.getMinute()); System.out.println("setSecond=" + time_tma_return.getSecond()); System.out.println("****** vcomponent - recurrenceid ******"); // END - get, set recurrenceid // START - get, set dtstamp ic.set_dtstamp(time_tma); ICalTimeType vcomponent_dtstamp_tma_return = ic.get_dtstamp(); System.out.println("****** vcomponent - dtstamp ******"); System.out.println("setYear=" + vcomponent_dtstamp_tma_return.getYear()); System.out.println("setMonth=" + vcomponent_dtstamp_tma_return.getMonth()); System.out.println("setDay=" + vcomponent_dtstamp_tma_return.getDay()); System.out.println("setHour=" + vcomponent_dtstamp_tma_return.getHour()); System.out.println("setMinute=" + vcomponent_dtstamp_tma_return.getMinute()); System.out.println("setSecond=" + vcomponent_dtstamp_tma_return.getSecond()); System.out.println("****** vcomponent - dtstamp ******"); // END - get, set dtstamp // VTODO test cases ICalProperty statusProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_STATUS_PROPERTY); ICalProperty dueProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_DUE_PROPERTY); ICalTimeType duetime = new ICalTimeType(); duetime.setYear(2002); duetime.setMonth(12); duetime.setDay(21); duetime.setHour(18); duetime.setMinute(0); duetime.setSecond(0); duetime.setIs_utc(true); System.out.println("done creating duetime"); statusProp.set_status(ICalProperty.ICalPropertyStatus.ICAL_STATUS_COMPLETED); dueProp.set_due(duetime); VToDo vtodo = new VToDo(); vtodo.add_property(statusProp); vtodo.add_property(dueProp); System.out.println("VToDo:\n" + vtodo.as_ical_string()); // VALARM test cases VAlarm valarm = new VAlarm(); System.out.println("created valarm"); // 1. Create a ICAL_DURATION_PROPERTY using the TimePeriod. ICalDurationType duration = new ICalDurationType(); duration.setDays((long) 0); duration.setHours((long) 0); duration.setMinutes((long) 15); System.out.println("created duration object"); // Since we want to trigger before the event or task, // we always want to set this to 1. If we say this is not // a negative duration, that means the alarm will trigger // AFTER the event or task start or due date, which is useless. duration.setIs_neg(1); // 2. Create a ICalTriggerType oject and set the duration on it. ICalTriggerType trigger = new ICalTriggerType(); trigger.setDuration(duration); System.out.println("set trigger to duration object"); // 3. Create a trigger ICalProperty and set the trigger on it. ICalProperty triggerProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_TRIGGER_PROPERTY); System.out.println("created trigger property"); triggerProp.set_trigger(trigger); System.out.println("set trigger property"); trigger = triggerProp.get_trigger(); System.out.println("get trigger property"); // 4. set the trigger property on the Valarm object. valarm.add_property(triggerProp); System.out.println("VAlarm:\n" + valarm.as_ical_string()); // 5. create attendee property String userEmail = "userid@domain"; ICalProperty attendeeProp = new ICalProperty(ICalProperty.ICalPropertyKind.ICAL_ATTENDEE_PROPERTY); attendeeProp.set_attendee("MAILTO:" + userEmail); System.out.println("set attendee property"); userEmail = attendeeProp.get_attendee(); System.out.println("get attendee property"); valarm.add_property(attendeeProp); System.out.println("VAlarm:\n" + valarm.as_ical_string()); // START - get, set_role ICalParameter parameter_role_tma = new ICalParameter(ICalParameter.ICalParameterKind.ICAL_ROLE_PARAMETER); parameter_role_tma.set_role(ICalParameter.ICalParameterRole.ICAL_ROLE_REQPARTICIPANT); int role_tma_return = parameter_role_tma.get_role(); System.out.println("******* parameter - role *****"); System.out.println("setRole=" + role_tma_return); System.out.println("******* parameter - role *****"); // END - get, set_role // START - get, set_partstat ICalParameter parameter_partstat_tma = new ICalParameter(ICalParameter.ICalParameterKind.ICAL_PARTSTAT_PARAMETER); parameter_partstat_tma.set_partstat(ICalParameter.ICalParameterPartStat.ICAL_PARTSTAT_DECLINED); int partstat_tma_return = parameter_partstat_tma.get_partstat(); System.out.println("******* parameter - partstat *****"); System.out.println("setPartstat=" + partstat_tma_return); System.out.println("******* parameter - partstat *****"); // END - get, set_partstat } } libical-1.0/src/java/jniICalTimeType_cxx.h0000664000076400007640000000574112132563127017501 0ustar allenallen /*====================================================================== FILE: jniICalTimeType_cxx.h CREATOR: structConverter (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef _jni_ICalTimeType_H #define _jni_ICalTimeType_H #include // I forgot how to do this using a typedef in c++!!!! #define ICalTimeType icaltimetype #ifdef __cplusplus extern "C" { #endif #include "ical.h" static void initICalTimeTypeFieldIDs(JNIEnv* env, jclass clazz); void jni_SetYear_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetYear_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetMonth_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetMonth_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetDay_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetDay_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetHour_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetHour_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetMinute_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetMinute_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetSecond_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetSecond_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetIs_utc_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetIs_utc_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetIs_date_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetIs_date_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetZone_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_GetZone_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType); void jni_SetAll_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* env, jobject thisICalTimeType); void jni_GetAll_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* env, jobject thisICalTimeType); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_initFIDs(JNIEnv *env, jclass clazz); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_init__J(JNIEnv* env, jobject thisICalTimeType, jlong data); #ifdef __cplusplus } #endif #endif libical-1.0/src/java/VAgenda.java0000664000076400007640000000072712132563127015623 0ustar allenallen/*====================================================================== FILE: VAgenda.java CREATOR: fnguyen 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class VAgenda extends VComponent { public VAgenda() { super(ICalComponentKind.ICAL_VAGENDA_COMPONENT); } public VAgenda(long obj) { super(obj); } public VAgenda(String str) { super(str); } } libical-1.0/src/java/jniICalPeriodType_cxx.cpp0000664000076400007640000001667512132563127020370 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: jniICalPeriodType_cxx.cpp CREATOR: structConverter ======================================================================*/ #include #include "jniICalPeriodType_cxx.h" #include "jniICalTimeType_cxx.h" #include "jniICalDurationType_cxx.h" static jfieldID ICalPeriodType_Start_FID; static jfieldID ICalPeriodType_End_FID; static jfieldID ICalPeriodType_Duration_FID; void initICalPeriodTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalPeriodType_Start_FID = env->GetFieldID(clazz, "start", "Lnet/cp/jlibical/ICalTimeType;"); ICalPeriodType_End_FID = env->GetFieldID(clazz, "end", "Lnet/cp/jlibical/ICalTimeType;"); ICalPeriodType_Duration_FID = env->GetFieldID(clazz, "duration", "Lnet/cp/jlibical/ICalDurationType;"); } void jni_SetStart_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_Start_FID); jni_SetYear_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_SetMonth_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_SetDay_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_SetHour_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_SetMinute_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_SetSecond_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_SetIs_utc_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_SetIs_date_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_SetZone_in_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); } void jni_GetStart_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_Start_FID); jni_GetYear_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_GetMonth_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_GetDay_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_GetHour_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_GetMinute_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_GetSecond_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_GetIs_utc_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_GetIs_date_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); jni_GetZone_from_ICalTimeType(&(__ICalPeriodType_->start), env, lcl_jobj0); } void jni_SetEnd_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_End_FID); jni_SetYear_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_SetMonth_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_SetDay_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_SetHour_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_SetMinute_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_SetSecond_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_SetIs_utc_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_SetIs_date_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_SetZone_in_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); } void jni_GetEnd_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_End_FID); jni_GetYear_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_GetMonth_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_GetDay_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_GetHour_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_GetMinute_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_GetSecond_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_GetIs_utc_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_GetIs_date_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); jni_GetZone_from_ICalTimeType(&(__ICalPeriodType_->end), env, lcl_jobj0); } void jni_SetDuration_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_Duration_FID); jni_SetIs_neg_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_SetDays_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_SetWeeks_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_SetHours_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_SetMinutes_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_SetSeconds_in_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); } void jni_GetDuration_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalPeriodType, ICalPeriodType_Duration_FID); jni_GetIs_neg_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_GetDays_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_GetWeeks_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_GetHours_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_GetMinutes_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); jni_GetSeconds_from_ICalDurationType(&(__ICalPeriodType_->duration), env, lcl_jobj0); } // copy all fields from the c struct (__ICalPeriodType_) to the java object (thisICalPeriodType). void jni_SetAll_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv* env, jobject thisICalPeriodType) { jni_SetStart_in_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType); jni_SetEnd_in_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType); jni_SetDuration_in_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType); } // copy all fields from the java object (thisICalPeriodType) to the c struct (__ICalPeriodType_). void jni_GetAll_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv* env, jobject thisICalPeriodType) { jni_GetStart_from_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType); jni_GetEnd_from_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType); jni_GetDuration_from_ICalPeriodType(__ICalPeriodType_, env, thisICalPeriodType); } /* * Class: net_cp_jlibical_ICalPeriodType * Method: init * Signature: (J)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_init__J (JNIEnv* env, jobject thisICalPeriodType, jlong data) { // copy all fields from the c struct (data) to the java object (thisICalTimeType). jni_SetAll_in_ICalPeriodType((ICalPeriodType*)data,env,thisICalPeriodType); } /* * Class: net_cp_jlibical_ICalPeriodType * Method: initFIDs * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_initFIDs(JNIEnv *env, jclass clazz) { initICalPeriodTypeFieldIDs(env, clazz); } libical-1.0/src/java/net_cp_jlibical_ICalParameter_cxx.h0000664000076400007640000000663112132563127022340 0ustar allenallen /*====================================================================== FILE: net_cp_jlibical_ICalParameter_cxx.h CREATOR: javah 1/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef _Included_net_cp_jlibical_ICalParameter #define _Included_net_cp_jlibical_ICalParameter #ifndef JNI_H #include #endif #ifdef __cplusplus extern "C" { #endif /* * Class: net_cp_jlibical_ICalParameter * Method: as_ical_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalParameter_as_1ical_1string (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalParameter * Method: isa * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_isa (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalParameter * Method: isa_parameter * Signature: (Ljava/lang/Object;)Z */ JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalParameter_isa_1parameter (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalParameter * Method: get_language * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalParameter_get_1language (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalParameter * Method: set_language * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1language (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalParameter * Method: get_encoding * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1encoding (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalParameter * Method: set_encoding * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1encoding (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalParameter * Method: get_role * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1role (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalParameter * Method: set_role * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1role (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalParameter * Method: get_partstat * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalParameter_get_1partstat (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalParameter * Method: set_partstat * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_set_1partstat (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalParameter * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__ (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalParameter * Method: init * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__Ljava_lang_String_2 (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalParameter * Method: init * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__ILjava_lang_String_2 (JNIEnv *, jobject, jint, jstring); /* * Class: net_cp_jlibical_ICalParameter * Method: init * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalParameter_init__I (JNIEnv *, jobject, jint); #ifdef __cplusplus } #endif #endif libical-1.0/src/java/ICalTriggerType.java0000664000076400007640000000352112132563127017307 0ustar allenallen/*====================================================================== FILE: ICalTriggerType.java CREATOR: structConverter 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; /** struct icaltriggertype */ public class ICalTriggerType { /** * Constructor for pre-existing native icaltriggertype * @param obj c++ pointer */ ICalTriggerType(long obj) { init(obj); } /** * Constructor for pre-existing native icaltriggertype * @param aTime c++ pointer * @param aDuration c++ pointer */ ICalTriggerType(long aTime, long aDuration) { init(aTime, aDuration); } /** * Constructor for default ICalTriggerType */ public ICalTriggerType() { } public void setTime(ICalTimeType lcl_arg0) { time = lcl_arg0; } public ICalTimeType getTime() { return time; } public void setDuration(ICalDurationType lcl_arg0) { duration = lcl_arg0; } public ICalDurationType getDuration() { return duration; } // -------------------------------------------------------- // Initialization // -------------------------------------------------------- /** * init with a native object */ private void init(long aTime, long aDuration) { time = new ICalTimeType(aTime); duration = new ICalDurationType(aDuration); } /** * copy data from an existing struct. */ private native void init(long obj); /** * optimization: init field id cache, */ private native static void initFIDs(); /** * load the jni library for this class */ static { System.loadLibrary("ical_jni"); initFIDs(); } // -------------------------------------------------------- // Fields // -------------------------------------------------------- private ICalTimeType time = new ICalTimeType(); private ICalDurationType duration = new ICalDurationType(); } libical-1.0/src/java/VEvent.java0000664000076400007640000000072112132563127015517 0ustar allenallen/*====================================================================== FILE: VEvent.java CREATOR: fnguyen 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class VEvent extends VComponent { public VEvent() { super(ICalComponentKind.ICAL_VEVENT_COMPONENT); } public VEvent(long obj) { super(obj); } public VEvent(String str) { super(str); } } libical-1.0/src/java/Makefile.am0000664000076400007640000000321412132563127015501 0ustar allenallenlib_LTLIBRARIES = libical_jni.la INCLUDES = -I../libical -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(JAVA_PLATFORM) libical_jni_la_LDFLAGS = -no-defined -version-info 48:0:48 libical_jni_la_LIBADD = \ ../libical/libical_cxx.la libical_jni_la_SOURCES = \ jlibical_consts_cxx.h \ jlibical_utils_cxx.cpp \ jlibical_utils_cxx.h \ jniICalDurationType_cxx.cpp \ jniICalDurationType_cxx.h \ jniICalPeriodType_cxx.cpp \ jniICalPeriodType_cxx.h \ jniICalRecurrenceType_cxx.cpp \ jniICalRecurrenceType_cxx.h \ jniICalTimeType_cxx.cpp \ jniICalTimeType_cxx.h \ jniICalTriggerType_cxx.cpp \ jniICalTriggerType_cxx.h \ net_cp_jlibical_ICalParameter_cxx.cpp \ net_cp_jlibical_ICalParameter_cxx.h \ net_cp_jlibical_ICalProperty_cxx.cpp \ net_cp_jlibical_ICalProperty_cxx.h \ net_cp_jlibical_ICalValue_cxx.cpp \ net_cp_jlibical_ICalValue_cxx.h \ net_cp_jlibical_VComponent_cxx.cpp \ net_cp_jlibical_VComponent_cxx.h java_JAVA=\ ICalDurationType.java ICalTriggerType.java VEvent.java\ ICalParameter.java ICalValue.java VFreeBusy.java\ ICalPeriodType.java VAgenda.java VQuery.java\ ICalProperty.java VAlarm.java VToDo.java\ ICalRecurrenceType.java VCalendar.java \ ICalTimeType.java VComponent.java data_DATA = libical.jar libical.jar: classjava.stamp (cd $(top_builddir); $(JAR) cf src/java/libical.jar net) jlibical_jniincludedir = $(includedir) TESTS = testjni.sh testjni.sh: echo "$(JAVA) -Djava.library.path=@prefix@/lib -classpath $(JAVA_HOME)/lib/classes.zip:@prefix@/lib/libical.jar net.cp.jlibical.testjni" > testjni.sh && chmod a+x testjni.sh libical-1.0/src/java/ICalDurationType.java0000664000076400007640000000374412132563127017500 0ustar allenallen/*====================================================================== FILE: ICalDurationType.java CREATOR: structConverter 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; /** struct icaldurationtype */ public class ICalDurationType { /** * Constructor for pre-existing native icaldurationtype. * @param obj c++ pointer */ ICalDurationType(long obj) { init(obj); } /** * Constructor for default ICalDurationType */ public ICalDurationType() { } public void setIs_neg(int lcl_arg0) { is_neg = lcl_arg0; } public int getIs_neg() { return is_neg; } public void setDays(long lcl_arg0) { days = lcl_arg0; } public long getDays() { return days; } public void setWeeks(long lcl_arg0) { weeks = lcl_arg0; } public long getWeeks() { return weeks; } public void setHours(long lcl_arg0) { hours = lcl_arg0; } public long getHours() { return hours; } public void setMinutes(long lcl_arg0) { minutes = lcl_arg0; } public long getMinutes() { return minutes; } public void setSeconds(long lcl_arg0) { seconds = lcl_arg0; } public long getSeconds() { return seconds; } // -------------------------------------------------------- // Initialization // -------------------------------------------------------- /** * native code inits from an existing struct. */ private native void init(long aDuration); /** * optimization: init field id cache, */ private native static void initFIDs(); /** * load the jni library for this class */ static { System.loadLibrary("ical_jni"); initFIDs(); } // -------------------------------------------------------- // Fields // -------------------------------------------------------- private int is_neg; private long days; // unsigned int private long weeks; // unsigned int private long hours; // unsigned int private long minutes; // unsigned int private long seconds; // unsigned int } libical-1.0/src/java/VComponent.java0000664000076400007640000001430112132563127016377 0ustar allenallen/*====================================================================== FILE: VComponent.java CREATOR: gnorman 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class VComponent { /** It's not typesafe, but it's simple to understand! */ public interface ICalComponentKind { // icalcomponent_kind int ICAL_NO_COMPONENT = 0; int ICAL_ANY_COMPONENT = 1; int ICAL_XROOT_COMPONENT = 2; int ICAL_XATTACH_COMPONENT = 3; int ICAL_VEVENT_COMPONENT = 4; int ICAL_VTODO_COMPONENT = 5; int ICAL_VJOURNAL_COMPONENT = 6; int ICAL_VCALENDAR_COMPONENT = 7; int ICAL_VAGENDA_COMPONENT = 8; int ICAL_VFREEBUSY_COMPONENT = 9; int ICAL_VALARM_COMPONENT = 10; int ICAL_XAUDIOALARM_COMPONENT = 11; int ICAL_XDISPLAYALARM_COMPONENT = 12; int ICAL_XEMAILALARM_COMPONENT = 13; int ICAL_XPROCEDUREALARM_COMPONENT = 14; int ICAL_VTIMEZONE_COMPONENT = 15; int ICAL_XSTANDARD_COMPONENT = 16; int ICAL_XDAYLIGHT_COMPONENT = 17; int ICAL_X_COMPONENT = 18; int ICAL_VSCHEDULE_COMPONENT = 19; int ICAL_VQUERY_COMPONENT = 20; int ICAL_VCOMMAND_COMPONENT = 21; int ICAL_XLICINVALID_COMPONENT = 22; int ICAL_XLICMIMEPART_COMPONENT = 23; int ICAL_XPREFERENCES_COMPONENT = 24; } /** * Constructor for VComponent * @param obj c++ pointer */ protected VComponent(long obj) { init(obj); } public VComponent() { init(); } public VComponent(/* ICalComponentKind */ int kind) { init(kind); } public VComponent(String str) { init(str); } public native String as_ical_string(); //public native boolean is_valid(); public native /* ICalComponentKind */ int isa(); public native boolean isa_component(Object component); /* Working with properties */ public native void add_property(ICalProperty property); public native void remove_property(ICalProperty property); public native int count_properties(/* ICalPropertyKind */ int kind); /* Iterate through the properties */ public native ICalProperty get_current_property(); public native ICalProperty get_first_property(/* ICalPropertyKind */ int kind); public native ICalProperty get_next_property(/* ICalPropertyKind */ int kind); /* Working with components */ /* Return the first VEVENT, VTODO or VJOURNAL sub-component if it is one of those types */ public native VComponent get_inner(); public native void add_component(VComponent child); public native void remove_component(VComponent child); public native int count_components(/* ICalComponentKind */ int kind); /* Iteration Routines. There are two forms of iterators, internal and external. The internal ones came first, and are almost completely sufficient, but they fail badly when you want to construct a loop that removes components from the container. */ /* Iterate through components */ public native VComponent get_current_component(); public native VComponent get_first_component(/* ICalComponentKind */ int kind); public native VComponent get_next_component(/* ICalComponentKind */ int kind); /* Using external iterators */ //public native icalcompiter begin_component(/* ICalComponentKind */ int kind); //public native icalcompiter end_component(/* ICalComponentKind */ int kind); //public native VComponent next(icalcompiter i); //public native VComponent prev(icalcompiter i); //public native VComponent current(icalcompiter i); /* Working with embedded error properties */ //public native int count_errors(); /* Remove all X-LIC-ERROR properties*/ //public native void strip_errors(); /* Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/ //public native void convert_errors(); /* Kind conversion routines */ //public native static /* ICalComponentKind */ int string_to_kind(String str); //public native static String kind_to_string(/* ICalComponentKind */ int kind); public native ICalTimeType get_dtstart(); public native void set_dtstart(ICalTimeType v); /* For the icalcomponent routines only, dtend and duration are tied together. If you call the set routine for one and the other exists, the routine will calculate the change to the other. That is, if there is a DTEND and you call set_duration, the routine will modify DTEND to be the sum of DTSTART and the duration. If you call a get routine for one and the other exists, the routine will calculate the return value. If you call a set routine and neither exists, the routine will create the apcompriate comperty */ public native ICalTimeType get_dtend(); public native void set_dtend(ICalTimeType v); public native ICalDurationType get_duration(); public native void set_duration(ICalDurationType v); public native /* ICalPropertyMethod */ int get_method(); public native void set_method(/* ICalPropertyMethod */ int method); public native ICalTimeType get_dtstamp(); public native void set_dtstamp(ICalTimeType v); public native String get_summary(); public native void set_summary(String v); public native String get_location(); public native void set_location(String v); public native String get_description(); public native void set_description(String v); //public native String get_comment(); //public native void set_comment(String v); public native String get_uid(); public native void set_uid(String v); public native String get_relcalid(); public native void set_relcalid(String v); public native ICalTimeType get_recurrenceid(); public native void set_recurrenceid(ICalTimeType v); /* For VCOMPONENT: Return a reference to the first VEVENT, VTODO, or VJOURNAL */ public native VComponent get_first_real_component(); /* For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the start and end times of an event in UTC */ //public native virtual struct icaltime_span get_span(); /** * init the native class */ private void init(long obj) { m_Obj = obj; } private native void init(); private native void init(String str); private native void init(/* ICalComponentKind */ int kind); /** * load the jni library for this class */ static { System.loadLibrary("ical_jni"); } public static void main(String[] args) { System.out.println("*** VComponent main called ok."); } /** pointer to C++ object */ private long m_Obj = 0; } libical-1.0/src/java/VQuery.java0000664000076400007640000000072112132563127015543 0ustar allenallen/*====================================================================== FILE: VQuery.java CREATOR: fnguyen 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class VQuery extends VComponent { public VQuery() { super(ICalComponentKind.ICAL_VQUERY_COMPONENT); } public VQuery(long obj) { super(obj); } public VQuery(String str) { super(str); } } libical-1.0/src/java/ICalTimeType.java0000664000076400007640000000477212132563127016613 0ustar allenallen/*====================================================================== FILE: ICalTimeType.java CREATOR: structConverter 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; /** struct icaltimetype */ public class ICalTimeType { /** * Constructor for pre-existing native icaltimetype * @param obj c++ pointer */ ICalTimeType(long obj) { init(obj); } /** * Constructor for default ICalTimeType */ public ICalTimeType() { } public void setYear(int lcl_arg0) { year = lcl_arg0; } public int getYear() { return year; } public void setMonth(int lcl_arg0) { month = lcl_arg0; } public int getMonth() { return month; } public void setDay(int lcl_arg0) { day = lcl_arg0; } public int getDay() { return day; } public void setHour(int lcl_arg0) { hour = lcl_arg0; } public int getHour() { return hour; } public void setMinute(int lcl_arg0) { minute = lcl_arg0; } public int getMinute() { return minute; } public void setSecond(int lcl_arg0) { second = lcl_arg0; } public int getSecond() { return second; } public void setIs_utc(boolean lcl_arg0) { is_utc = lcl_arg0 ? 1 : 0; } public boolean getIs_utc() { return is_utc == 0 ? false : true; } public void setIs_date(boolean lcl_arg0) { is_date = lcl_arg0 ? 1 : 0; } public boolean getIs_date() { return is_date == 0 ? false : true; } public void setZone(String lcl_arg0) { zone = lcl_arg0; } public String getZone() { return zone; } // -------------------------------------------------------- // Initialization // -------------------------------------------------------- /** * copy data from an existing struct. */ private native void init(long obj); /** * optimization: init field id cache, */ private native static void initFIDs(); /** * load the jni library for this class */ static { System.loadLibrary("ical_jni"); initFIDs(); } // -------------------------------------------------------- // Fields // -------------------------------------------------------- private int month; private int day; private int year; private int hour; private int minute; private int second; private int is_utc; private int is_date; private String zone = new String(); // Converted from char* } libical-1.0/src/java/net_cp_jlibical_ICalValue_cxx.h0000664000076400007640000001056012132563127021470 0ustar allenallen /*====================================================================== FILE: net_cp_jlibical_ICalValue_cxx.h CREATOR: javah 1/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef _Included_net_cp_jlibical_ICalValue #define _Included_net_cp_jlibical_ICalValue #ifndef JNI_H #include #endif #ifdef __cplusplus extern "C" { #endif /* * Class: net_cp_jlibical_ICalValue * Method: as_ical_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_as_1ical_1string (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: isa * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_isa (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: isa_value * Signature: (Ljava/lang/Object;)Z */ JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalValue_isa_1value (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: set_trigger * Signature: (Lnet/cp/jlibical/ICalTriggerType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1trigger (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: get_trigger * Signature: ()Lnet/cp/jlibical/ICalTriggerType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1trigger (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: get_method * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_get_1method (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: set_method * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1method (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalValue * Method: get_text * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_get_1text (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: set_text * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1text (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalValue * Method: get_duration * Signature: ()Lnet/cp/jlibical/ICalDurationType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1duration (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: set_duration * Signature: (Lnet/cp/jlibical/ICalDurationType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1duration (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: get_query * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_get_1query (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: set_query * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1query (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalValue * Method: get_datetime * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1datetime (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: set_datetime * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1datetime (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: get_action * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_get_1action (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: set_action * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1action (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalValue * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__ (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalValue * Method: init * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__ILjava_lang_String_2 (JNIEnv *, jobject, jint, jstring); /* * Class: net_cp_jlibical_ICalValue * Method: init * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__I (JNIEnv *, jobject, jint); #ifdef __cplusplus } #endif #endif libical-1.0/src/java/ICalParameter.java0000664000076400007640000001516512132563127016771 0ustar allenallen/*====================================================================== FILE: ICalParameter.java CREATOR: gnorman 01/09/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class ICalParameter { /** It's not typesafe, but it's simple to understand! */ public interface ICalParameterKind { // icalparameter_kind int ICAL_ANY_PARAMETER = 0; int ICAL_ALTREP_PARAMETER = 1; int ICAL_CN_PARAMETER = 2; int ICAL_CUTYPE_PARAMETER = 3; int ICAL_DELEGATEDFROM_PARAMETER = 4; int ICAL_DELEGATEDTO_PARAMETER = 5; int ICAL_DIR_PARAMETER = 6; int ICAL_ENCODING_PARAMETER = 7; int ICAL_FBTYPE_PARAMETER = 8; int ICAL_FMTTYPE_PARAMETER = 9; int ICAL_LANGUAGE_PARAMETER = 10; int ICAL_MEMBER_PARAMETER = 11; int ICAL_PARTSTAT_PARAMETER = 12; int ICAL_RANGE_PARAMETER = 13; int ICAL_RELATED_PARAMETER = 14; int ICAL_RELTYPE_PARAMETER = 15; int ICAL_RIGHTREF_PARAMETER = 16; int ICAL_ROLE_PARAMETER = 17; int ICAL_RSVP_PARAMETER = 18; int ICAL_SENTBY_PARAMETER = 19; int ICAL_TZID_PARAMETER = 20; int ICAL_VALUE_PARAMETER = 21; int ICAL_WKST_PARAMETER = 22; int ICAL_X_PARAMETER = 23; int ICAL_XLICCOMPARETYPE_PARAMETER = 24; int ICAL_XLICERRORTYPE_PARAMETER = 25; int ICAL_NO_PARAMETER = 26; } /** It's not typesafe, but it's simple to understand! */ public interface ICalParameterEncoding { // icalparameter_encoding int ICAL_ENCODING_X = 20007; int ICAL_ENCODING_8BIT = 20008; int ICAL_ENCODING_BASE64 = 20009; int ICAL_ENCODING_NONE = 20010; } public interface ICalParameterPartStat { int ICAL_PARTSTAT_X = 20017; int ICAL_PARTSTAT_NEEDSACTION = 20018; int ICAL_PARTSTAT_ACCEPTED = 20019; int ICAL_PARTSTAT_DECLINED = 20020; int ICAL_PARTSTAT_TENTATIVE = 20021; int ICAL_PARTSTAT_DELEGATED = 20022; int ICAL_PARTSTAT_COMPLETED = 20023; int ICAL_PARTSTAT_INPROCESS = 20024; int ICAL_PARTSTAT_NONE = 20025; } public interface ICalParameterRole { int ICAL_ROLE_X = 20047; int ICAL_ROLE_CHAIR = 20048; int ICAL_ROLE_REQPARTICIPANT = 20049; int ICAL_ROLE_OPTPARTICIPANT = 20050; int ICAL_ROLE_NONPARTICIPANT = 20051; int ICAL_ROLE_NONE = 20052; } /** * Constructor for ICalParameter * @param obj c++ pointer */ private ICalParameter(long obj) { init(obj); } /** * Constructor for ICalParameter */ public ICalParameter() { init(); } /** * Create instance from a string of form "PARAMNAME=VALUE" */ public ICalParameter(String str) { init(str); } /** * Create from just the value, the part after the "=" */ public ICalParameter(/* ICalParameterKind */ int kind, String str) { init(kind,str); } /** * Create empty value for specified kind */ public ICalParameter(/* ICalParameterKind */ int kind) { init(kind); } /** * Return ical String representation */ public native String as_ical_string(); /** * Return true if this instance is valid */ //public native boolean is_valid(); /** * Return what kind of parameter this instance represents */ public native /* ICalParameterKind */ int isa(); /** * Return true if this is a parameter */ public native boolean isa_parameter(Object parameter); /* Convert enumerations */ //public native static String kind_to_string(/* ICalParameterKind */ int kind); //public native static /* ICalParameterKind */ int string_to_kind(String str); /* DELEGATED-FROM */ //public native String get_delegatedfrom(); //public native void set_delegatedfrom(String v); /* RELATED */ //public native icalparameter_related get_related(); //public native void set_related(icalparameter_related v); /* SENT-BY */ //public native String get_sentby(); //public native void set_sentby(String v); /* LANGUAGE */ public native String get_language(); public native void set_language(String v); /* RELTYPE */ //public native icalparameter_reltype get_reltype(); //public native void set_reltype(icalparameter_reltype v); /* ENCODING */ public native /* ICalParameterEncoding */ int get_encoding(); public native void set_encoding(/* ICalParameterEncoding */ int v); /* ALTREP */ //public native String get_altrep(); //public native void set_altrep(String v); /* FMTTYPE */ //public native String get_fmttype(); //public native void set_fmttype(String v); /* FBTYPE */ //public native icalparameter_fbtype get_fbtype(); //public native void set_fbtype(icalparameter_fbtype v); /* RSVP */ //public native icalparameter_rsvp get_rsvp(); //public native void set_rsvp(icalparameter_rsvp v); /* RANGE */ //public native icalparameter_range get_range(); //public native void set_range(icalparameter_range v); /* DELEGATED-TO */ //public native String get_delegatedto(); //public native void set_delegatedto(String v); /* CN */ //public native String get_cn(); //public native void set_cn(String v); /* ROLE */ public native /* ICalParameterRole */ int get_role(); public native void set_role(/* ICalParameterRole */ int v); /* X-LIC-COMPARETYPE */ //public native icalparameter_xliccomparetype get_xliccomparetype(); //public native void set_xliccomparetype(icalparameter_xliccomparetype v); /* PARTSTAT */ public native /* ICalParameterPartStat */ int get_partstat(); public native void set_partstat(/* ICalParameterPartStat */ int v); /* X-LIC-ERRORTYPE */ //public native icalparameter_xlicerrortype get_xlicerrortype(); //public native void set_xlicerrortype(icalparameter_xlicerrortype v); /* MEMBER */ //public native String get_member(); //public native void set_member(String v); /* X */ //public native String get_x(); //public native void set_x(String v); /* CUTYPE */ //public native icalparameter_cutype get_cutype(); //public native void set_cutype(icalparameter_cutype v); /* TZID */ //public native String get_tzid(); //public native void set_tzid(String v); /* VALUE */ //public native /* ICalParameterValue */ int get_value(); //public native void set_value(/* ICalParameterValue */ int v); /* DIR */ //public native String get_dir(); //public native void set_dir(String v); /** * init the native class */ private void init(long obj) { m_Obj = obj; } private native void init(); private native void init(String str); private native void init(/* ICalParameterKind */ int kind, String str); private native void init(/* ICalParameterKind */ int kind); /** * load the jni library for this class */ static { System.loadLibrary("ical_jni"); } public static void main(String[] args) { System.out.println("*** ICalParameter main called ok."); } /** pointer to C++ object */ private long m_Obj = 0; } libical-1.0/src/java/jlibical_consts_cxx.h0000664000076400007640000000423012132563127017641 0ustar allenallen /*====================================================================== FILE: jlibical_consts_cxx/h CREATOR: Srinivasa Boppana/George Norman (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef JLIBICAL_CONSTS_CXX_H #define JLIBICAL_CONSTS_CXX_H /* * Error code constants. */ #define JLIBICAL_OK 0 /* good return code */ /* system/API errors */ #define JLIBICAL_ERR_NETWORK 100 /* general network error */ #define JLIBICAL_ERR_SERVER_INTERNAL 101 /* internal server error (database, file system, etc.) */ #define JLIBICAL_ERR_CLIENT_INTERNAL 102 /* internal error in client API (memory, parsing errors, etc.)*/ #define JLIBICAL_ERR_ILLEGAL_ARGUMENT 103 /* incorrect API use */ #define JLIBICAL_ERR_API_NOT_INITED 104 /* either the InitModule API call was called prior to use of the API or it failed to initialize correctly */ #define JLIBICAL_ERR_HOST_INVALID 105 /* the host name specified cannot be resolved */ /* Java classes */ #define JLIBICAL_CLASS_ICALVALUE "net/cp/jlibical/ICalValue" #define JLIBICAL_CLASS_VCOMPONENT "net/cp/jlibical/VComponent" #define JLIBICAL_CLASS_VALARM "net/cp/jlibical/VAlarm" #define JLIBICAL_CLASS_VCALENDAR "net/cp/jlibical/VCalendar" #define JLIBICAL_CLASS_VAGENDA "net/cp/jlibical/VAgenda" #define JLIBICAL_CLASS_VEVENT "net/cp/jlibical/VEvent" #define JLIBICAL_CLASS_VQUERY "net/cp/jlibical/VQuery" #define JLIBICAL_CLASS_VTODO "net/cp/jlibical/VToDo" #define JLIBICAL_CLASS_ICALPARAMETER "net/cp/jlibical/ICalParameter" #define JLIBICAL_CLASS_ICALPROPERTY "net/cp/jlibical/ICalProperty" #define JLIBICAL_CLASS_ICALDURATIONTYPE "net/cp/jlibical/ICalDurationType" #define JLIBICAL_CLASS_ICALTIMETYPE "net/cp/jlibical/ICalTimeType" #define JLIBICAL_CLASS_ICALTRIGGERTYPE "net/cp/jlibical/ICalTriggerType" #define JLIBICAL_CLASS_ICALRECURRENCETYPE "net/cp/jlibical/ICalRecurrenceType" #define JLIBICAL_CLASS_ICALPERIODTYPE "net/cp/jlibical/ICalPeriodType" #endif /* JLIBICAL_CONSTS_CXX_H */ libical-1.0/src/java/jniICalTimeType_cxx.cpp0000664000076400007640000001653512132563127020037 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: jniICalTimeType_cxx.cpp CREATOR: structConverter (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #include #ifndef _jni_ICalTimeType_H #include "jniICalTimeType_cxx.h" #endif static jfieldID ICalTimeType_Year_FID; static jfieldID ICalTimeType_Month_FID; static jfieldID ICalTimeType_Day_FID; static jfieldID ICalTimeType_Hour_FID; static jfieldID ICalTimeType_Minute_FID; static jfieldID ICalTimeType_Second_FID; static jfieldID ICalTimeType_Is_utc_FID; static jfieldID ICalTimeType_Is_date_FID; static jfieldID ICalTimeType_Zone_FID; void initICalTimeTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalTimeType_Year_FID = env->GetFieldID(clazz, "year", "I"); ICalTimeType_Month_FID = env->GetFieldID(clazz, "month", "I"); ICalTimeType_Day_FID = env->GetFieldID(clazz, "day", "I"); ICalTimeType_Hour_FID = env->GetFieldID(clazz, "hour", "I"); ICalTimeType_Minute_FID = env->GetFieldID(clazz, "minute", "I"); ICalTimeType_Second_FID = env->GetFieldID(clazz, "second", "I"); ICalTimeType_Is_utc_FID = env->GetFieldID(clazz, "is_utc", "I"); ICalTimeType_Is_date_FID = env->GetFieldID(clazz, "is_date", "I"); ICalTimeType_Zone_FID = env->GetFieldID(clazz, "zone", "Ljava/lang/String;"); } void jni_SetYear_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetIntField(thisICalTimeType, ICalTimeType_Year_FID, (jint) __ICalTimeType_->year); } void jni_GetYear_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->year = env->GetIntField(thisICalTimeType, ICalTimeType_Year_FID); } void jni_SetMonth_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetIntField(thisICalTimeType, ICalTimeType_Month_FID, (jint) __ICalTimeType_->month); } void jni_GetMonth_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->month = env->GetIntField(thisICalTimeType, ICalTimeType_Month_FID); } void jni_SetDay_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetIntField(thisICalTimeType, ICalTimeType_Day_FID, (jint) __ICalTimeType_->day); } void jni_GetDay_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->day = env->GetIntField(thisICalTimeType, ICalTimeType_Day_FID); } void jni_SetHour_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetIntField(thisICalTimeType, ICalTimeType_Hour_FID, (jint) __ICalTimeType_->hour); } void jni_GetHour_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->hour = env->GetIntField(thisICalTimeType, ICalTimeType_Hour_FID); } void jni_SetMinute_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetIntField(thisICalTimeType, ICalTimeType_Minute_FID, (jint) __ICalTimeType_->minute); } void jni_GetMinute_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->minute = env->GetIntField(thisICalTimeType, ICalTimeType_Minute_FID); } void jni_SetSecond_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetIntField(thisICalTimeType, ICalTimeType_Second_FID, (jint) __ICalTimeType_->second); } void jni_GetSecond_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->second = env->GetIntField(thisICalTimeType, ICalTimeType_Second_FID); } void jni_SetIs_utc_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetIntField(thisICalTimeType, ICalTimeType_Is_utc_FID, (jint) __ICalTimeType_->is_utc); } void jni_GetIs_utc_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->is_utc = env->GetIntField(thisICalTimeType, ICalTimeType_Is_utc_FID); } void jni_SetIs_date_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetIntField(thisICalTimeType, ICalTimeType_Is_date_FID, (jint) __ICalTimeType_->is_date); } void jni_GetIs_date_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->is_date = env->GetIntField(thisICalTimeType, ICalTimeType_Is_date_FID); } void jni_SetZone_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { env->SetObjectField(thisICalTimeType, ICalTimeType_Zone_FID, env->NewStringUTF(icaltime_get_tzid(*__ICalTimeType_))); } void jni_GetZone_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv *env, jobject thisICalTimeType) { __ICalTimeType_->zone = icaltimezone_get_builtin_timezone_from_tzid((char*) env->GetStringUTFChars((jstring) env->GetObjectField(thisICalTimeType, ICalTimeType_Zone_FID), NULL)); } // copy all fields from the c struct (__ICalTimeType_) to the java object (thisICalTimeType). void jni_SetAll_in_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* env, jobject thisICalTimeType) { jni_SetYear_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_SetMonth_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_SetDay_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_SetHour_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_SetMinute_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_SetSecond_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_SetIs_utc_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_SetIs_date_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_SetZone_in_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); } // copy all fields from the java object (thisICalTimeType) to the c struct (__ICalTimeType_). void jni_GetAll_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* env, jobject thisICalTimeType) { jni_GetYear_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_GetMonth_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_GetDay_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_GetHour_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_GetMinute_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_GetSecond_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_GetIs_utc_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_GetIs_date_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); jni_GetZone_from_ICalTimeType(__ICalTimeType_, env, thisICalTimeType); } /* * Class: net_cp_jlibical_ICalTimeType * Method: init * Signature: (J)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_init__J (JNIEnv* env, jobject thisICalTimeType, jlong data) { // copy all fields from the c struct (data) to the java object (thisICalTimeType). jni_SetAll_in_ICalTimeType((ICalTimeType*)data,env,thisICalTimeType); } /* * Class: net_cp_jlibical_ICalTimeType * Method: initFIDs * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_initFIDs(JNIEnv *env, jclass clazz) { initICalTimeTypeFieldIDs(env, clazz); } libical-1.0/src/java/jniICalTriggerType_cxx.h0000664000076400007640000000302412132563127020176 0ustar allenallen /*====================================================================== FILE: jniICalTriggerType_cxx.h CREATOR: structConverter (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef _jni_ICalTriggerType_H #define _jni_ICalTriggerType_H #include // I forgot how to do this using a typedef in c++!!!! #define ICalTriggerType icaltriggertype #ifdef __cplusplus extern "C" { #endif #include "ical.h" static void initICalTriggerTypeFieldIDs(JNIEnv* env, jclass clazz); void jni_SetTime_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType); void jni_GetTime_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType); void jni_SetDuration_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType); void jni_GetDuration_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType); void jni_SetAll_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv* env, jobject thisICalTriggerType); void jni_GetAll_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv* env, jobject thisICalTriggerType); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_init__J(JNIEnv* env, jobject thisICalTriggerType, jlong data); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_initFIDs(JNIEnv *env, jclass clazz); #ifdef __cplusplus } #endif #endif libical-1.0/src/java/jniICalRecurrenceType_cxx.cpp0000664000076400007640000004164012132563127021231 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: jniICalRecurrenceType_cxx.cpp CREATOR: structConverter ======================================================================*/ #include #include "jniICalRecurrenceType_cxx.h" #include "jniICalTimeType_cxx.h" static jfieldID ICalRecurrenceType_Until_FID; static jfieldID ICalRecurrenceType_Freq_FID; static jfieldID ICalRecurrenceType_Week_start_FID; static jfieldID ICalRecurrenceType_Count_FID; static jfieldID ICalRecurrenceType_Interval_FID; static jfieldID ICalRecurrenceType_By_second_FID; static jfieldID ICalRecurrenceType_By_minute_FID; static jfieldID ICalRecurrenceType_By_hour_FID; static jfieldID ICalRecurrenceType_By_day_FID; static jfieldID ICalRecurrenceType_By_month_day_FID; static jfieldID ICalRecurrenceType_By_year_day_FID; static jfieldID ICalRecurrenceType_By_week_no_FID; static jfieldID ICalRecurrenceType_By_month_FID; static jfieldID ICalRecurrenceType_By_set_pos_FID; void initICalRecurrenceTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalRecurrenceType_Until_FID = env->GetFieldID(clazz, "until", "Lnet/cp/jlibical/ICalTimeType;"); ICalRecurrenceType_Freq_FID = env->GetFieldID(clazz, "freq", "I"); ICalRecurrenceType_Week_start_FID = env->GetFieldID(clazz, "week_start", "I"); ICalRecurrenceType_Count_FID = env->GetFieldID(clazz, "count", "I"); ICalRecurrenceType_Interval_FID = env->GetFieldID(clazz, "interval", "S"); ICalRecurrenceType_By_second_FID = env->GetFieldID(clazz, "by_second", "[S"); ICalRecurrenceType_By_minute_FID = env->GetFieldID(clazz, "by_minute", "[S"); ICalRecurrenceType_By_hour_FID = env->GetFieldID(clazz, "by_hour", "[S"); ICalRecurrenceType_By_day_FID = env->GetFieldID(clazz, "by_day", "[S"); ICalRecurrenceType_By_month_day_FID = env->GetFieldID(clazz, "by_month_day", "[S"); ICalRecurrenceType_By_year_day_FID = env->GetFieldID(clazz, "by_year_day", "[S"); ICalRecurrenceType_By_week_no_FID = env->GetFieldID(clazz, "by_week_no", "[S"); ICalRecurrenceType_By_month_FID = env->GetFieldID(clazz, "by_month", "[S"); ICalRecurrenceType_By_set_pos_FID = env->GetFieldID(clazz, "by_set_pos", "[S"); } void jni_SetUntil_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_Until_FID); jni_SetYear_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_SetMonth_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_SetDay_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_SetHour_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_SetMinute_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_SetSecond_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_SetIs_utc_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_SetIs_date_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_SetZone_in_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); } void jni_GetUntil_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_Until_FID); jni_GetYear_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_GetMonth_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_GetDay_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_GetHour_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_GetMinute_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_GetSecond_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_GetIs_utc_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_GetIs_date_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); jni_GetZone_from_ICalTimeType(&(__ICalRecurrenceType_->until), env, lcl_jobj0); } void jni_SetFreq_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { env->SetIntField(thisICalRecurrenceType, ICalRecurrenceType_Freq_FID, (jint) __ICalRecurrenceType_->freq); } void jni_GetFreq_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { __ICalRecurrenceType_->freq = (icalrecurrencetype_frequency) env->GetIntField(thisICalRecurrenceType, ICalRecurrenceType_Freq_FID); } void jni_SetWeek_start_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { env->SetIntField(thisICalRecurrenceType, ICalRecurrenceType_Week_start_FID, (jint) __ICalRecurrenceType_->week_start); } void jni_GetWeek_start_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { __ICalRecurrenceType_->week_start = (icalrecurrencetype_weekday) env->GetIntField(thisICalRecurrenceType, ICalRecurrenceType_Week_start_FID); } void jni_SetCount_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { env->SetIntField(thisICalRecurrenceType, ICalRecurrenceType_Count_FID, (jint) __ICalRecurrenceType_->count); } void jni_GetCount_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { __ICalRecurrenceType_->count = env->GetIntField(thisICalRecurrenceType, ICalRecurrenceType_Count_FID); } void jni_SetInterval_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { env->SetShortField(thisICalRecurrenceType, ICalRecurrenceType_Interval_FID, (jshort) __ICalRecurrenceType_->interval); } void jni_GetInterval_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { __ICalRecurrenceType_->interval = env->GetShortField(thisICalRecurrenceType, ICalRecurrenceType_Interval_FID); } void jni_SetBy_second_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_second_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,61, (jshort*)&(__ICalRecurrenceType_->by_second[0])); } void jni_GetBy_second_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_second_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,61, (jshort*)&(__ICalRecurrenceType_->by_second[0])); } void jni_SetBy_minute_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_minute_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,61, (jshort*)&(__ICalRecurrenceType_->by_minute[0])); } void jni_GetBy_minute_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_minute_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,61, (jshort*)&(__ICalRecurrenceType_->by_minute[0])); } void jni_SetBy_hour_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_hour_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,25, (jshort*)&(__ICalRecurrenceType_->by_hour[0])); } void jni_GetBy_hour_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_hour_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,25, (jshort*)&(__ICalRecurrenceType_->by_hour[0])); } void jni_SetBy_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_day_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,364, (jshort*)&(__ICalRecurrenceType_->by_day[0])); } void jni_GetBy_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_day_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,364, (jshort*)&(__ICalRecurrenceType_->by_day[0])); } void jni_SetBy_month_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_month_day_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,32, (jshort*)&(__ICalRecurrenceType_->by_month_day[0])); } void jni_GetBy_month_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_month_day_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,32, (jshort*)&(__ICalRecurrenceType_->by_month_day[0])); } void jni_SetBy_year_day_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_year_day_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,367, (jshort*)&(__ICalRecurrenceType_->by_year_day[0])); } void jni_GetBy_year_day_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_year_day_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,367, (jshort*)&(__ICalRecurrenceType_->by_year_day[0])); } void jni_SetBy_week_no_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_week_no_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,54, (jshort*)&(__ICalRecurrenceType_->by_week_no[0])); } void jni_GetBy_week_no_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_week_no_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,54, (jshort*)&(__ICalRecurrenceType_->by_week_no[0])); } void jni_SetBy_month_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_month_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,13, (jshort*)&(__ICalRecurrenceType_->by_month[0])); } void jni_GetBy_month_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_month_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,13, (jshort*)&(__ICalRecurrenceType_->by_month[0])); } void jni_SetBy_set_pos_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_set_pos_FID); env->SetShortArrayRegion((jshortArray)lcl_jobjA0, 0,367, (jshort*)&(__ICalRecurrenceType_->by_set_pos[0])); } void jni_GetBy_set_pos_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv *env, jobject thisICalRecurrenceType) { jclass elem_clazz; jboolean isCopy; int ix0; jobject lcl_jobj0; jarray lcl_jobjA0; lcl_jobjA0 = (jarray) env->GetObjectField(thisICalRecurrenceType, ICalRecurrenceType_By_set_pos_FID); env->GetShortArrayRegion((jshortArray)lcl_jobjA0, 0,367, (jshort*)&(__ICalRecurrenceType_->by_set_pos[0])); } void jni_SetAll_in_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv* env, jobject thisICalRecurrenceType) { jni_SetUntil_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetFreq_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetWeek_start_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetCount_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetInterval_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_second_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_minute_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_hour_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_day_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_month_day_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_year_day_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_week_no_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_month_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_SetBy_set_pos_in_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); } void jni_GetAll_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurrenceType_, JNIEnv* env, jobject thisICalRecurrenceType) { jni_GetUntil_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetFreq_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetWeek_start_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetCount_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetInterval_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_second_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_minute_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_hour_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_day_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_month_day_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_year_day_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_week_no_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_month_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_set_pos_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); } JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_init__J(JNIEnv* env, jobject thisICalRecurrenceType, jlong data) { jni_SetAll_in_ICalRecurrenceType((ICalRecurrenceType*)data,env,thisICalRecurrenceType); } JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_initFIDs(JNIEnv *env, jclass clazz) { initICalRecurrenceTypeFieldIDs(env, clazz); } libical-1.0/src/java/jlibical_utils_cxx.h0000664000076400007640000000440712132563127017476 0ustar allenallen /*====================================================================== FILE: jlibical_utils_cxx.h CREATOR: Srinivasa Boppana/George Norman (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef TEST_CXX_H #define TEST_CXX_H #ifndef JNI_H #include #endif class VComponent; class ICalProperty; class ICalValue; class ICalParameter; struct icaltimetype; struct icaltriggertype; struct icaldurationtype; struct icalrecurrencetype; struct icalperiodtype; // get & set void* getCObjectPtr(JNIEnv *env, jobject anObj); void setCObjectPtr(JNIEnv *env, jobject anObj, void* val); // type-safe getters VComponent* getSubjectAsVComponent(JNIEnv *env, jobject surrogateComponent, int exceptionType); ICalProperty* getSubjectAsICalProperty(JNIEnv *env, jobject surrogateProperty, int exceptionType); ICalValue* getSubjectAsICalValue(JNIEnv *env, jobject surrogateValue, int exceptionType); ICalParameter* getSubjectAsICalParameter(JNIEnv *env, jobject surrogateParameter, int exceptionType); bool copyObjToicaltimetype(JNIEnv *env, jobject src, icaltimetype* dest); bool copyObjToicaltriggertype(JNIEnv *env, jobject src, icaltriggertype* dest); bool copyObjToicaldurationtype(JNIEnv *env, jobject src, icaldurationtype* dest); bool copyObjToicalrecurrencetype(JNIEnv *env, jobject src, icalrecurrencetype* dest); bool copyObjToicalperiodtype(JNIEnv *env, jobject src, icalperiodtype* dest); // exception handling void throwException( JNIEnv *env, int cpErr ); // create objects jobject createNewVComponentSurrogate(JNIEnv *env, VComponent* subject); jobject createNewICalPropertySurrogate(JNIEnv *env, ICalProperty* subject); jobject createNewICalValueSurrogate(JNIEnv *env, ICalValue* subject); jobject createNewICalParameterSurrogate(JNIEnv *env, ICalParameter* subject); jobject createNewICalTimeType(JNIEnv *env, icaltimetype* source); jobject createNewICalTriggerType(JNIEnv *env, icaltriggertype* source); jobject createNewICalDurationType(JNIEnv *env, icaldurationtype* source); jobject createNewICalRecurrenceType(JNIEnv *env, icalrecurrencetype* source); jobject createNewICalPeriodType(JNIEnv *env, icalperiodtype* source); jobject doCreateNewSurrogate(JNIEnv *env, jclass surrogateClass, jlong subject); #endif /*TEST_CXX_H*/ libical-1.0/src/java/ICalRecurrenceType.java0000664000076400007640000001413112132563127020000 0ustar allenallen/*====================================================================== FILE: ICalRecurrenceType.java CREATOR: structConverter 01/11/02 ======================================================================*/ package net.cp.jlibical; public class ICalRecurrenceType { public interface ICalRecurrenceTypeFrequency { int ICAL_SECONDLY_RECURRENCE=0; int ICAL_MINUTELY_RECURRENCE=1; int ICAL_HOURLY_RECURRENCE=2; int ICAL_DAILY_RECURRENCE=3; int ICAL_WEEKLY_RECURRENCE=4; int ICAL_MONTHLY_RECURRENCE=5; int ICAL_YEARLY_RECURRENCE=6; int ICAL_NO_RECURRENCE=7; } public interface ICalRecurrenceTypeWeekday { int ICAL_NO_WEEKDAY=0; int ICAL_SUNDAY_WEEKDAY=1; int ICAL_MONDAY_WEEKDAY=2; int ICAL_TUESDAY_WEEKDAY=3; int ICAL_WEDNESDAY_WEEKDAY=4; int ICAL_THURSDAY_WEEKDAY=5; int ICAL_FRIDAY_WEEKDAY=6; int ICAL_SATURDAY_WEEKDAY=7; } ICalRecurrenceType(long obj) { init(obj); } public ICalRecurrenceType() { } public void setUntil(ICalTimeType lcl_arg0) { until = lcl_arg0; } public ICalTimeType getUntil() { return until; } public void setFreq(int lcl_arg0) { freq = lcl_arg0; } public int getFreq() { return freq; } public void setWeek_start(int lcl_arg0) { week_start = lcl_arg0; } public int getWeek_start() { return week_start; } public void setCount(int lcl_arg0) { count = lcl_arg0; } public int getCount() { return count; } public void setInterval(short lcl_arg0) { interval = lcl_arg0; } public short getInterval() { return interval; } public void setBy_second(short[] lcl_arg0) { by_second = lcl_arg0; } public void setBy_secondIndexed(int ix,short lcl_arg0) { by_second[ix] = lcl_arg0; } public short[] getBy_second() { return by_second; } public short getBy_secondIndexed(int ix) { return by_second[ix]; } public void setBy_minute(short[] lcl_arg0) { by_minute = lcl_arg0; } public void setBy_minuteIndexed(int ix,short lcl_arg0) { by_minute[ix] = lcl_arg0; } public short[] getBy_minute() { return by_minute; } public short getBy_minuteIndexed(int ix) { return by_minute[ix]; } public void setBy_hour(short[] lcl_arg0) { by_hour = lcl_arg0; } public void setBy_hourIndexed(int ix,short lcl_arg0) { by_hour[ix] = lcl_arg0; } public short[] getBy_hour() { return by_hour; } public short getBy_hourIndexed(int ix) { return by_hour[ix]; } public void setBy_day(short[] lcl_arg0) { by_day = lcl_arg0; } public void setBy_dayIndexed(int ix,short lcl_arg0) { by_day[ix] = lcl_arg0; } public short[] getBy_day() { return by_day; } public short getBy_dayIndexed(int ix) { return by_day[ix]; } public void setBy_month_day(short[] lcl_arg0) { by_month_day = lcl_arg0; } public void setBy_month_dayIndexed(int ix,short lcl_arg0) { by_month_day[ix] = lcl_arg0; } public short[] getBy_month_day() { return by_month_day; } public short getBy_month_dayIndexed(int ix) { return by_month_day[ix]; } public void setBy_year_day(short[] lcl_arg0) { by_year_day = lcl_arg0; } public void setBy_year_dayIndexed(int ix,short lcl_arg0) { by_year_day[ix] = lcl_arg0; } public short[] getBy_year_day() { return by_year_day; } public short getBy_year_dayIndexed(int ix) { return by_year_day[ix]; } public void setBy_week_no(short[] lcl_arg0) { by_week_no = lcl_arg0; } public void setBy_week_noIndexed(int ix,short lcl_arg0) { by_week_no[ix] = lcl_arg0; } public short[] getBy_week_no() { return by_week_no; } public short getBy_week_noIndexed(int ix) { return by_week_no[ix]; } public void setBy_month(short[] lcl_arg0) { by_month = lcl_arg0; } public void setBy_monthIndexed(int ix,short lcl_arg0) { by_month[ix] = lcl_arg0; } public short[] getBy_month() { return by_month; } public short getBy_monthIndexed(int ix) { return by_month[ix]; } public void setBy_set_pos(short[] lcl_arg0) { by_set_pos = lcl_arg0; } public void setBy_set_posIndexed(int ix,short lcl_arg0) { by_set_pos[ix] = lcl_arg0; } public short[] getBy_set_pos() { return by_set_pos; } public short getBy_set_posIndexed(int ix) { return by_set_pos[ix]; } private native void init(long obj); private native static void initFIDs(); static { System.loadLibrary("ical_jni"); initFIDs(); } private /* ICalRecurrenceTypeFrequency */ int freq; private /* ICalRecurrenceTypeWeekday */ int week_start; private int count; private short interval; private short[] by_second = new short[ICAL_BY_SECOND_SIZE]; // Converted from short[61] private short[] by_minute = new short[ICAL_BY_MINUTE_SIZE]; // Converted from short[61] private short[] by_hour = new short[ICAL_BY_HOUR_SIZE]; // Converted from short[25] private short[] by_day = new short[ICAL_BY_DAY_SIZE]; // Converted from short[364] private short[] by_month_day = new short[ICAL_BY_MONTHDAY_SIZE]; // Converted from short[32] private short[] by_year_day = new short[ICAL_BY_YEARDAY_SIZE]; // Converted from short[367] private short[] by_week_no = new short[ICAL_BY_WEEKNO_SIZE]; // Converted from short[54] private short[] by_month = new short[ICAL_BY_MONTH_SIZE]; // Converted from short[13] private short[] by_set_pos = new short[ICAL_BY_SETPOS_SIZE]; // Converted from short[367] private ICalTimeType until = new ICalTimeType(); public static final int ICAL_BY_SECOND_SIZE = 61; public static final int ICAL_BY_MINUTE_SIZE = 61; public static final int ICAL_BY_HOUR_SIZE = 25; public static final int ICAL_BY_DAY_SIZE = 364; public static final int ICAL_BY_MONTHDAY_SIZE = 32; public static final int ICAL_BY_YEARDAY_SIZE = 367; public static final int ICAL_BY_WEEKNO_SIZE = 54; public static final int ICAL_BY_MONTH_SIZE = 13; public static final int ICAL_BY_SETPOS_SIZE = 367; } libical-1.0/src/java/jlibical_utils_cxx.cpp0000664000076400007640000003511212132563127020026 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: jlibical_utils_cxx.cpp CREATOR: Srinivasa Boppana/George Norman (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef JLIBICAL_UTILS_CXX_H #include "jlibical_utils_cxx.h" #endif #ifndef JLIBICAL_CONSTS_CXX_H #include "jlibical_consts_cxx.h" #endif #ifndef ICALPARAMETER_CXX_H #include "icalparameter_cxx.h" #endif #ifndef VCOMPONENT_CXX_H #include "vcomponent.h" #endif #ifndef ICALPROPERTY_CXX_H #include "icalproperty_cxx.h" #endif #ifndef ICALVALUE_CXX_H #include "icalvalue_cxx.h" #endif #ifndef _jni_ICalTimeType_H #include "jniICalTimeType_cxx.h" #endif #ifndef _jni_ICalTriggerType_H #include "jniICalTriggerType_cxx.h" #endif #ifndef _jni_ICalDurationType_H #include "jniICalDurationType_cxx.h" #endif #ifndef _jni_ICalRecurrenceType_H #include "jniICalRecurrenceType_cxx.h" #endif #ifndef _jni_ICalPeriodType_H #include "jniICalPeriodType_cxx.h" #endif //------------------------------------------------------- // Returns a pointer to the subject (a c++ object) for the given surrogate (a java object) //------------------------------------------------------- void* getCObjectPtr(JNIEnv *env, jobject surrogate) { void* result = 0; jclass jcls = env->GetObjectClass(surrogate); jfieldID fid = env->GetFieldID(jcls,"m_Obj","J"); if (fid == NULL) { // this should never happen. throwException( env, JLIBICAL_ERR_CLIENT_INTERNAL ); return(NULL); } result = (void*)env->GetLongField(surrogate,fid); if (result == NULL) { // the proxy object (java) has no subject (c++ object) throwException( env, JLIBICAL_ERR_CLIENT_INTERNAL ); return(NULL); } return(result); } //------------------------------------------------------- // Set the subject (a c++ object) for the given surrogate (a java object). // Throws exception if the m_Obj field can not be found. //------------------------------------------------------- void setCObjectPtr(JNIEnv *env, jobject surrogate, void* subject) { jclass jcls = env->GetObjectClass(surrogate); jfieldID fid = env->GetFieldID(jcls,"m_Obj","J"); if (fid == NULL) { throwException( env, JLIBICAL_ERR_CLIENT_INTERNAL ); return; } env->SetLongField(surrogate,fid,(long)subject); } //------------------------------------------------------- // Return the pointer to the subject (as an VComponent*) from the given surrogate. // If the subject is not an VComponent type, or if the subject is NULL, then return NULL. //------------------------------------------------------- VComponent* getSubjectAsVComponent(JNIEnv *env, jobject surrogateComponent, int exceptionType) { VComponent* result = (VComponent*)(getCObjectPtr(env,surrogateComponent)); if (result == NULL) { throwException(env, exceptionType ); } return(result); } //------------------------------------------------------- // Return the pointer to the subject (as an ICalProperty*) from the given surrogate. // If the subject is not an ICalProperty type, or if the subject is NULL, then return NULL. //------------------------------------------------------- ICalProperty* getSubjectAsICalProperty(JNIEnv *env, jobject surrogateProperty, int exceptionType) { ICalProperty* result = (ICalProperty*)(getCObjectPtr(env,surrogateProperty)); if (result == NULL) { throwException(env, exceptionType ); } return(result); } //------------------------------------------------------- // Return the pointer to the subject (as an ICalValue*) from the given surrogate. // If the subject is not an ICalValue type, or if the subject is NULL, then return NULL. //------------------------------------------------------- ICalValue* getSubjectAsICalValue(JNIEnv *env, jobject surrogateValue, int exceptionType) { ICalValue* result = (ICalValue*)(getCObjectPtr(env,surrogateValue)); if (result == NULL) { throwException( env, exceptionType ); } return(result); } //------------------------------------------------------- // Return the pointer to the subject (as an ICalParameter*) from the given surrogate. // If the subject is not an ICalParameter type, or if the subject is NULL, then return NULL. //------------------------------------------------------- ICalParameter* getSubjectAsICalParameter(JNIEnv *env, jobject surrogateParameter, int exceptionType) { ICalParameter* result = (ICalParameter*)(getCObjectPtr(env,surrogateParameter)); if (result == NULL) { throwException( env, exceptionType ); } return(result); } //------------------------------------------------------- // Copy the data from the src (a java ICalTimeType object) // to the dest (a c struct icaltimetype*). // Returns true if success. False if exception is thrown: // - the src java object is not an ICalTimeType type // - the dest c struct is null. //------------------------------------------------------- bool copyObjToicaltimetype(JNIEnv *env, jobject src, icaltimetype* dest) { bool result = false; if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALTIMETYPE))) { jni_GetAll_from_ICalTimeType(dest, env, src); result = true; } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } return(result); } //------------------------------------------------------- // Copy the data from the src (a java ICalTriggerType object) // to the dest (a c struct icaltriggertype*). // Returns true if success. False if exception is thrown: // - the src java object is not an ICalTriggerType type // - the dest c struct is null. //------------------------------------------------------- bool copyObjToicaltriggertype(JNIEnv *env, jobject src, icaltriggertype* dest) { bool result = false; if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALTRIGGERTYPE))) { jni_GetAll_from_ICalTriggerType(dest, env, src); result = true; } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } return(result); } //------------------------------------------------------- // Copy the data from the src (a java ICalDurationType object) // to the dest (a c struct icaldurationtype*). // Returns true if success. False if exception is thrown: // - the src java object is not an ICalDurationType type // - the dest c struct is null. //------------------------------------------------------- bool copyObjToicaldurationtype(JNIEnv *env, jobject src, icaldurationtype* dest) { bool result = false; if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALDURATIONTYPE))) { jni_GetAll_from_ICalDurationType(dest, env, src); result = true; } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } return(result); } //------------------------------------------------------- // Copy the data from the src (a java ICalRecurrenceType object) // to the dest (a c struct icalrecurrencetype*). // Returns true if success. False if exception is thrown: // - the src java object is not an ICalRecurrenceType type // - the dest c struct is null. //------------------------------------------------------- bool copyObjToicalrecurrencetype(JNIEnv *env, jobject src, icalrecurrencetype* dest) { bool result = false; if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALRECURRENCETYPE))) { jni_GetAll_from_ICalRecurrenceType(dest, env, src); result = true; } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } return(result); } //------------------------------------------------------- // Copy the data from the src (a java ICalPeriodType object) // to the dest (a c struct icalperiodtype*). // Returns true if success. False if exception is thrown: // - the src java object is not an ICalPeriodType type // - the dest c struct is null. //------------------------------------------------------- bool copyObjToicalperiodtype(JNIEnv *env, jobject src, icalperiodtype* dest) { bool result = false; if (dest != NULL && env->IsInstanceOf(src,env->FindClass(JLIBICAL_CLASS_ICALPERIODTYPE))) { jni_GetAll_from_ICalPeriodType(dest, env, src); result = true; } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } return(result); } //------------------------------------------------------- // Create a new VComponent surrogate for given subject. // If subject is NULL, then returns NULL (will not create a // surrogate to a NULL subject); //------------------------------------------------------- jobject createNewVComponentSurrogate(JNIEnv *env, VComponent* subject) { char* classname = JLIBICAL_CLASS_VCOMPONENT; if (dynamic_cast(subject)) classname = JLIBICAL_CLASS_VALARM; else if (dynamic_cast(subject)) classname = JLIBICAL_CLASS_VCALENDAR; else if (dynamic_cast(subject)) classname = JLIBICAL_CLASS_VEVENT; else if (dynamic_cast(subject)) classname = JLIBICAL_CLASS_VQUERY; else if (dynamic_cast(subject)) classname = JLIBICAL_CLASS_VTODO; else if (dynamic_cast(subject)) classname = JLIBICAL_CLASS_VAGENDA; return(doCreateNewSurrogate(env,env->FindClass(classname),(jlong)subject)); } //------------------------------------------------------- // Create a new ICalProperty surrogate for given subject. // If subject is NULL, then returns NULL (will not create a // surrogate to a NULL subject); //------------------------------------------------------- jobject createNewICalPropertySurrogate(JNIEnv *env, ICalProperty* subject) { return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALPROPERTY),(jlong)subject)); } //------------------------------------------------------- // Create a new ICalValue surrogate for given subject. // If subject is NULL, then returns NULL (will not create a // surrogate to a NULL subject); //------------------------------------------------------- jobject createNewICalValueSurrogate(JNIEnv *env, ICalValue* subject) { return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALVALUE),(jlong)subject)); } //------------------------------------------------------- // Create a new ICalParameter surrogate for given subject. // If subject is NULL, then returns NULL (will not create a // surrogate to a NULL subject); //------------------------------------------------------- jobject createNewICalParameterSurrogate(JNIEnv *env, ICalParameter* subject) { return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALPARAMETER),(jlong)subject)); } //------------------------------------------------------- // Create a new ICalTimeType object from the given source struct. // A copy is made, . // If source is NULL, then returns NULL (will not create an // object to a NULL source); //------------------------------------------------------- jobject createNewICalTimeType(JNIEnv *env, icaltimetype* source) { return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALTIMETYPE),(jlong)source)); } //------------------------------------------------------- // Create a new ICalTriggerType object from the given source struct. // A copy is made, . // If source is NULL, then returns NULL (will not create an // object to a NULL source); //------------------------------------------------------- jobject createNewICalTriggerType(JNIEnv *env, icaltriggertype* source) { return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALTRIGGERTYPE),(jlong)source)); } //------------------------------------------------------- // Create a new ICalDurationType object from the given source struct. // A copy is made, . // If source is NULL, then returns NULL (will not create an // object to a NULL source); //------------------------------------------------------- jobject createNewICalDurationType(JNIEnv *env, icaldurationtype* source) { return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALDURATIONTYPE),(jlong)source)); } //------------------------------------------------------- // Create a new ICalRecurrenceType object from the given source struct. // A copy is made, . // If source is NULL, then returns NULL (will not create an // object to a NULL source); //------------------------------------------------------- jobject createNewICalRecurrenceType(JNIEnv *env, icalrecurrencetype* source) { return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALRECURRENCETYPE),(jlong)source)); } //------------------------------------------------------- // Create a new ICalPeriodType object from the given source struct. // A copy is made, . // If source is NULL, then returns NULL (will not create an // object to a NULL source); //------------------------------------------------------- jobject createNewICalPeriodType(JNIEnv *env, icalperiodtype* source) { return(doCreateNewSurrogate(env,env->FindClass(JLIBICAL_CLASS_ICALPERIODTYPE),(jlong)source)); } //------------------------------------------------------- // Creat a new surrogate of the given type for the given subject. //------------------------------------------------------- jobject doCreateNewSurrogate(JNIEnv *env, jclass surrogateClass, jlong subject) { jobject result = NULL; if (subject != NULL) { jmethodID jconstructorID = env->GetMethodID(surrogateClass, "", "(J)V"); result = env->NewObject(surrogateClass, jconstructorID, subject); } return(result); } //------------------------------------------------------- // For the given cpErr, create a new Exception and send it to env. // Note: Throw does not throw anything. It only sets the state. // The JVM will check this and throw an exception later. //------------------------------------------------------- void throwException(JNIEnv *env, int cpErr) { jclass jexceptionClass; jthrowable jexceptionObj; jmethodID jconstructorID; const char* exClassName; if (env->ExceptionOccurred()) { return; } switch ( cpErr ) { case JLIBICAL_ERR_NETWORK: exClassName = "net.cp.jlibical/JLCNetworkException"; break; case JLIBICAL_ERR_SERVER_INTERNAL: exClassName = "net.cp.jlibical/JLCServerInternalException"; break; case JLIBICAL_ERR_CLIENT_INTERNAL: exClassName = "net.cp.jlibical/JLCClientInternalException"; break; case JLIBICAL_ERR_ILLEGAL_ARGUMENT: exClassName = "net.cp.jlibical/JLCIllegalArgumentException"; break; case JLIBICAL_ERR_API_NOT_INITED: exClassName = "net.cp.jlibical/JLCNotInitedException"; break; case JLIBICAL_ERR_HOST_INVALID: exClassName = "net.cp.jlibical/JLCHostInvalidException"; break; default: exClassName = "net.cp.jlibical/JLCClientInternalException"; printf("*** JLIBICAL JNI throwException: unknown error code: %d\n", cpErr ); break; } env->ThrowNew(env->FindClass(exClassName),""); } libical-1.0/src/java/CMakeLists.txt0000664000076400007640000000212612132563127016206 0ustar allenallen ########### next target ############### set(ical_jni_LIB_SRCS jlibical_consts_cxx.h jlibical_utils_cxx.cpp jlibical_utils_cxx.h jniICalDurationType_cxx.cpp jniICalDurationType_cxx.h jniICalPeriodType_cxx.cpp jniICalPeriodType_cxx.h jniICalRecurrenceType_cxx.cpp jniICalRecurrenceType_cxx.h jniICalTimeType_cxx.cpp jniICalTimeType_cxx.h jniICalTriggerType_cxx.cpp jniICalTriggerType_cxx.h net_cp_jlibical_ICalParameter_cxx.cpp net_cp_jlibical_ICalParameter_cxx.h net_cp_jlibical_ICalProperty_cxx.cpp net_cp_jlibical_ICalProperty_cxx.h net_cp_jlibical_ICalValue_cxx.cpp net_cp_jlibical_ICalValue_cxx.h net_cp_jlibical_VComponent_cxx.cpp net_cp_jlibical_VComponent_cxx.h ) add_library(ical_jni ${LIBRARY_TYPE} ${ical_jni_LIB_SRCS}) target_link_libraries(ical_jni ical_cxx) set_target_properties(ical_jni PROPERTIES VERSION ${LIBICAL_LIB_VERSION_STRING} SOVERSION ${LIBICAL_LIB_MAJOR_VERSION} ) install(TARGETS ical_jni DESTINATION lib) ########### install files ############### install(FILES DESTINATION /include) install(FILES libical.jar DESTINATION /share) libical-1.0/src/java/ICalPeriodType.java0000664000076400007640000000247112132563127017131 0ustar allenallen/*====================================================================== FILE: ICalPeriodType.java CREATOR: structConverter 01/11/02 ======================================================================*/ package net.cp.jlibical; public class ICalPeriodType { public ICalPeriodType(long obj) { init(obj); } public ICalPeriodType() { } public ICalPeriodType(long aStart, long aEnd, long aDuration) { init(aStart, aEnd, aDuration); } public void setStart(ICalTimeType lcl_arg0) { start = lcl_arg0; } public ICalTimeType getStart() { return start; } public void setEnd(ICalTimeType lcl_arg0) { end = lcl_arg0; } public ICalTimeType getEnd() { return end; } public void setDuration(ICalDurationType lcl_arg0) { duration = lcl_arg0; } public ICalDurationType getDuration() { return duration; } private void init(long aStart, long aEnd, long aDuration) { start = new ICalTimeType(aStart); end = new ICalTimeType(aEnd); duration = new ICalDurationType(aDuration); } private native void init(long obj); private native static void initFIDs(); static { System.loadLibrary("ical_jni"); initFIDs(); } private ICalTimeType start = new ICalTimeType(); private ICalTimeType end = new ICalTimeType(); private ICalDurationType duration = new ICalDurationType(); } libical-1.0/src/java/net_cp_jlibical_ICalValue_cxx.cpp0000664000076400007640000002307212132563127022025 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: net_cp_jlibical_ICalValue_cxx.cpp CREATOR: gnorman 1/10/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef NET_CP_JLIBICAL_ICALVALUE_CXX_H #include "net_cp_jlibical_ICalValue_cxx.h" #endif #ifndef JLIBICAL_CONSTS_CXX_H #include "jlibical_consts_cxx.h" #endif #ifndef JLIBICAL_UTILS_CXX_H #include "jlibical_utils_cxx.h" #endif #ifndef ICALVALUE_CXX_H #include "icalvalue_cxx.h" #endif /* * Class: net_cp_jlibical_ICalValue * Method: as_ical_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_as_1ical_1string (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->as_ical_string(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalValue * Method: isa * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_isa (JNIEnv *env, jobject jobj) { jint result = 0; ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->isa(); } return(result); } /* * Class: net_cp_jlibical_ICalValue * Method: isa_value * Signature: (Ljava/lang/Object;)Z */ JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalValue_isa_1value (JNIEnv *env, jobject jobj, jobject arg) { jboolean result = 0; // get the c++ object from the jobj ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the c++ object from arg void* argObjPtr = 0; if (arg != NULL) { argObjPtr = getCObjectPtr(env,jobj); } // get the result from the c++ object result = cObj->isa_value(argObjPtr) != 0; } return(result); } /* * Class: net_cp_jlibical_ICalValue * Method: set_trigger * Signature: (Lnet/cp/jlibical/ICalTriggerType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1trigger (JNIEnv *env, jobject jobj, jobject arg) { // get the c++ object from the jobj ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltriggertype aTrigger; if (copyObjToicaltriggertype(env,arg,&aTrigger)) { cObj->set_trigger(aTrigger); } } } /* * Class: net_cp_jlibical_ICalValue * Method: get_trigger * Signature: ()Lnet/cp/jlibical/ICalTriggerType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1trigger (JNIEnv *env, jobject jobj) { jobject result = 0; // get the c++ object from the jobj ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the trigger from CObj icaltriggertype aTrigger = cObj->get_trigger(); // create a new surrogate, using aTrigger as the subject. result = createNewICalTriggerType(env,&aTrigger); } return (result); } /* * Class: net_cp_jlibical_ICalValue * Method: get_method * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_get_1method (JNIEnv *env, jobject jobj) { jint result = 0; ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_method(); } return(result); } /* * Class: net_cp_jlibical_ICalValue * Method: set_method * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1method (JNIEnv *env, jobject jobj, jint value) { ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_method((icalproperty_method)value); } } /* * Class: net_cp_jlibical_ICalValue * Method: get_text * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_get_1text (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_text(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalValue * Method: set_text * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1text (JNIEnv *env, jobject jobj, jstring str) { ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_text((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalValue * Method: get_duration * Signature: ()Lnet/cp/jlibical/ICalDurationType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1duration (JNIEnv *env, jobject jobj) { jobject result = 0; // get the c++ object from the jobj ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the duration from CObj icaldurationtype aDuration = cObj->get_duration(); // create a new surrogate, using aDuration as the subject. result = createNewICalDurationType(env,&aDuration); } return (result); } /* * Class: net_cp_jlibical_ICalValue * Method: set_duration * Signature: (Lnet/cp/jlibical/ICalDurationType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1duration (JNIEnv *env, jobject jobj, jobject arg) { // get the c++ object from the jobj ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaldurationtype aDuration; if (copyObjToicaldurationtype(env,arg,&aDuration)) { cObj->set_duration(aDuration); } } } /* * Class: net_cp_jlibical_ICalValue * Method: get_query * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalValue_get_1query (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_query(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalValue * Method: set_query * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1query (JNIEnv *env, jobject jobj, jstring str) { ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_query((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalValue * Method: get_datetime * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalValue_get_1datetime (JNIEnv *env, jobject jobj) { jobject result = NULL; // get the c++ object from the jobj ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aTime = cObj->get_datetime(); result = createNewICalTimeType(env,&aTime); } return (result); } /* * Class: net_cp_jlibical_ICalValue * Method: set_datetime * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1datetime (JNIEnv *env, jobject jobj, jobject arg) { // get the c++ object from the jobj ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aTime; if (copyObjToicaltimetype(env,arg,&aTime)) { cObj->set_datetime(aTime); } } } /* * Class: net_cp_jlibical_ICalValue * Method: get_action * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalValue_get_1action (JNIEnv *env, jobject jobj) { jint result = 0; ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_action(); } return(result); } /* * Class: net_cp_jlibical_ICalValue * Method: set_action * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_set_1action (JNIEnv *env, jobject jobj, jint value) { ICalValue* cObj = getSubjectAsICalValue(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_action((icalproperty_action)value); } } /* * Class: net_cp_jlibical_ICalValue * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__ (JNIEnv *env, jobject jobj) { setCObjectPtr(env,jobj,new ICalValue()); } /* * Class: net_cp_jlibical_ICalValue * Method: init * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__ILjava_lang_String_2 (JNIEnv *env, jobject jobj, jint kind, jstring str) { if (str != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); setCObjectPtr(env,jobj,new ICalValue((icalvalue_kind)kind,(char*)szTemp)); env->ReleaseStringUTFChars(str,szTemp); } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } } /* * Class: net_cp_jlibical_ICalValue * Method: init * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalValue_init__I (JNIEnv *env, jobject jobj, jint kind) { setCObjectPtr(env,jobj,new ICalValue((icalvalue_kind)kind)); } libical-1.0/src/java/VFreeBusy.java0000664000076400007640000000037412132563127016166 0ustar allenallenpackage net.cp.jlibical; public class VFreeBusy extends VComponent { public VFreeBusy() { super(ICalComponentKind.ICAL_VFREEBUSY_COMPONENT); } public VFreeBusy(long obj) { super(obj); } public VFreeBusy(String str) { super(str); } } libical-1.0/src/java/VAlarm.java0000664000076400007640000000072112132563127015472 0ustar allenallen/*====================================================================== FILE: VAlarm.java CREATOR: fnguyen 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class VAlarm extends VComponent { public VAlarm() { super(ICalComponentKind.ICAL_VALARM_COMPONENT); } public VAlarm(long obj) { super(obj); } public VAlarm(String str) { super(str); } } libical-1.0/src/java/net_cp_jlibical_ICalProperty_cxx.cpp0000664000076400007640000011460312132563127022576 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: net_cp_jlibical_ICalProperty_cxx.cpp CREATOR: gnorman 1/10/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef NET_CP_JLIBICAL_ICALPROPERTY_CXX_H #include "net_cp_jlibical_ICalProperty_cxx.h" #endif #ifndef JLIBICAL_CONSTS_CXX_H #include "jlibical_consts_cxx.h" #endif #ifndef JLIBICAL_UTILS_CXX_H #include "jlibical_utils_cxx.h" #endif #ifndef ICALPROPERTY_CXX_H #include "icalproperty_cxx.h" #endif /* * Class: net_cp_jlibical_ICalProperty * Method: as_ical_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_as_1ical_1string (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->as_ical_string(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: isa * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_isa (JNIEnv *env, jobject jobj) { jint result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->isa(); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: isa_property * Signature: (Ljava/lang/Object;)I */ JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalProperty_isa_1property (JNIEnv *env, jobject jobj, jobject arg) { jboolean result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { void* argObjPtr = 0; if (arg != NULL) { argObjPtr = getCObjectPtr(env,arg); } // get the result from the c++ object (argObjPtr can be 0, it's cObj's responsibility to handle this if an error). result = cObj->isa_property(argObjPtr) != 0; } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: add_parameter * Signature: (Lnet/cp/jlibical/ICalParameter;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_add_1parameter (JNIEnv *env, jobject jobj, jobject arg) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { ICalParameter* icalparameter = getSubjectAsICalParameter(env,arg,JLIBICAL_ERR_ILLEGAL_ARGUMENT); if (icalparameter != NULL) { cObj->add_parameter(*icalparameter); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: set_parameter * Signature: (Lnet/cp/jlibical/ICalParameter;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1parameter (JNIEnv *env, jobject jobj, jobject arg) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { ICalParameter* icalparameter = getSubjectAsICalParameter(env,arg,JLIBICAL_ERR_ILLEGAL_ARGUMENT); if (icalparameter != NULL) { cObj->set_parameter(*icalparameter); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: set_parameter_from_string * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1parameter_1from_1string (JNIEnv *env, jobject jobj, jstring name, jstring value) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szName = env->GetStringUTFChars(name,NULL); const char* szValue = env->GetStringUTFChars(value,NULL); if (szName != NULL && szValue != NULL) { cObj->set_parameter_from_string((string)szName, (string)szValue); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_parameter_as_string * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1parameter_1as_1string (JNIEnv *env, jobject jobj, jstring name) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szName = env->GetStringUTFChars(name,NULL); if (szName != NULL) { char* szValue = cObj->get_parameter_as_string((string)szName); if (szValue == NULL) { szValue = ""; } result = env->NewStringUTF(szValue); } } return (result); } /* * Class: net_cp_jlibical_ICalProperty * Method: remove_parameter * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_remove_1parameter (JNIEnv *env, jobject jobj, jint kind) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->remove_parameter((icalparameter_kind)kind); } } /* * Class: net_cp_jlibical_ICalProperty * Method: count_parameters * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_count_1parameters (JNIEnv *env, jobject jobj) { jint result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->count_parameters(); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: get_first_parameter * Signature: (I)Lnet/cp/jlibical/ICalParameter; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1first_1parameter (JNIEnv *env, jobject jobj, jint kind) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the first parameter from CObj ICalParameter* aParameter = cObj->get_first_parameter((icalparameter_kind)kind); // create a new surrogate, using aParameter as the subject (returns NULL if subject is NULL). result = createNewICalParameterSurrogate(env,aParameter); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: get_next_parameter * Signature: (I)Lnet/cp/jlibical/ICalParameter; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1next_1parameter (JNIEnv *env, jobject jobj, jint kind) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the first parameter from CObj ICalParameter* aParameter = cObj->get_next_parameter((icalparameter_kind)kind); // create a new surrogate, using aParameter as the subject (returns NULL if subject is NULL). result = createNewICalParameterSurrogate(env,aParameter); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_value * Signature: (Lnet/cp/jlibical/ICalValue;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1value (JNIEnv *env, jobject jobj, jobject arg) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { ICalValue* aValue = getSubjectAsICalValue(env,arg,JLIBICAL_ERR_ILLEGAL_ARGUMENT); cObj->set_value(*aValue); } } /* * Class: net_cp_jlibical_ICalProperty * Method: set_value_from_string * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1value_1from_1string (JNIEnv *env, jobject jobj, jstring name, jstring value) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szName = env->GetStringUTFChars(name,NULL); const char* szValue = env->GetStringUTFChars(value,NULL); if (szName != NULL && szValue != NULL) { cObj->set_value_from_string((string)szName, (string)szValue); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_value * Signature: ()Lnet/cp/jlibical/ICalValue; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1value (JNIEnv *env, jobject jobj) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the first value from CObj ICalValue* aValue = cObj->get_value(); // create a new surrogate, using aValue as the subject (returns NULL if subject is NULL). result = createNewICalValueSurrogate(env,aValue); } return (result); } /* * Class: net_cp_jlibical_ICalProperty * Method: get_value_as_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1value_1as_1string (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_value_as_string(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: get_name * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1name (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_name(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_action * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1action (JNIEnv *env, jobject jobj, jint value) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_action((icalproperty_action)value); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_action * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1action (JNIEnv *env, jobject jobj) { jint result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_action(); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_attendee * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1attendee (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_attendee((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_attendee * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1attendee (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_attendee(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_comment * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1comment (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_comment((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_comment * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1comment (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* commentStr = cObj->get_comment(); if (commentStr == NULL) { commentStr = ""; } result = env->NewStringUTF(commentStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_description * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1description (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_description((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_description * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1description (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_description(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_dtend * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtend (JNIEnv *env, jobject jobj, jobject arg) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aTime; if (copyObjToicaltimetype(env,arg,&aTime)) { cObj->set_dtend(aTime); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_dtend * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtend (JNIEnv *env, jobject jobj) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the dtend time from CObj icaltimetype aTime = cObj->get_dtend(); // create a new surrogate, using aTime as the subject. result = createNewICalTimeType(env,&aTime); } return (result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_dtstamp * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtstamp (JNIEnv *env, jobject jobj, jobject dtstamp) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aDTStamp; if (copyObjToicaltimetype(env,dtstamp,&aDTStamp)) { cObj->set_dtstamp(aDTStamp); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_dtstamp * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtstamp (JNIEnv *env, jobject jobj) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the dtstamp time from CObj icaltimetype aDTStamp = cObj->get_dtstamp(); // create a new surrogate, using aDTStamp as the subject. result = createNewICalTimeType(env,&aDTStamp); } return (result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_dtstart * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtstart (JNIEnv *env, jobject jobj, jobject arg) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aTime; if (copyObjToicaltimetype(env,arg,&aTime)) { cObj->set_dtstart(aTime); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_dtstart * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtstart (JNIEnv *env, jobject jobj) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the dtend time from CObj icaltimetype aTime = cObj->get_dtstart(); // create a new surrogate, using aTime as the subject. result = createNewICalTimeType(env,&aTime); } return (result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_due * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1due (JNIEnv *env, jobject jobj, jobject arg) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aTime; if (copyObjToicaltimetype(env,arg,&aTime)) { cObj->set_due(aTime); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_due * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1due (JNIEnv *env, jobject jobj) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the dtend time from CObj icaltimetype aTime = cObj->get_due(); // create a new surrogate, using aTime as the subject. result = createNewICalTimeType(env,&aTime); } return (result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_duration * Signature: (Lnet/cp/jlibical/ICalDurationType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1duration (JNIEnv *env, jobject jobj, jobject arg) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaldurationtype aDuration; if (copyObjToicaldurationtype(env,arg,&aDuration)) { cObj->set_duration(aDuration); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_duration * Signature: ()Lnet/cp/jlibical/ICalDurationType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1duration (JNIEnv *env, jobject jobj) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the dtend time from CObj icaldurationtype aDuration = cObj->get_duration(); // create a new surrogate, using aTime as the subject. result = createNewICalDurationType(env,&aDuration); } return (result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_location * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1location (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_location((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_location * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1location (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_location(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_method * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1method (JNIEnv *env, jobject jobj, jint value) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_method((icalproperty_method)value); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_method * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1method (JNIEnv *env, jobject jobj) { jint result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_method(); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_organizer * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1organizer (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_organizer((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_organizer * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1organizer (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* organizerStr = cObj->get_organizer(); if (organizerStr == NULL) { organizerStr = ""; } result = env->NewStringUTF(organizerStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_owner * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1owner (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_owner((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_owner * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1owner (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_owner(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_prodid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1prodid (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_prodid((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_prodid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1prodid (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_prodid(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_query * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1query (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_query((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_query * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1query (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_query(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_queryname * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1queryname (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_queryname((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_queryname * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1queryname (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_queryname(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_repeat * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1repeat (JNIEnv *env, jobject jobj, jint value) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_repeat(value); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_repeat * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1repeat (JNIEnv *env, jobject jobj) { jint result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_repeat(); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_summary * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1summary (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_summary((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_summary * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1summary (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_summary(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_target * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1target (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_target((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_target * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1target (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_target(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_trigger * Signature: (Lnet/cp/jlibical/ICalTriggerType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1trigger (JNIEnv *env, jobject jobj, jobject arg) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltriggertype aTrigger; if (copyObjToicaltriggertype(env,arg,&aTrigger)) { cObj->set_trigger(aTrigger); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_trigger * Signature: ()Lnet/cp/jlibical/ICalTriggerType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1trigger (JNIEnv *env, jobject jobj) { jobject result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the dtend time from CObj icaltriggertype aTrigger = cObj->get_trigger(); // create a new surrogate, using aTime as the subject. result = createNewICalTriggerType(env,&aTrigger); } return (result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_tzid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1tzid (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_tzid((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_tzid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1tzid (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_tzid(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_uid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1uid (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_uid((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_uid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1uid (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_uid(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__ (JNIEnv *env, jobject jobj) { setCObjectPtr(env,jobj,new ICalProperty()); } /* * Class: net_cp_jlibical_ICalProperty * Method: init * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__Ljava_lang_String_2 (JNIEnv *env, jobject jobj, jstring str) { if (str != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); setCObjectPtr(env,jobj,new ICalProperty((char*)szTemp)); env->ReleaseStringUTFChars(str,szTemp); } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } } /* * Class: net_cp_jlibical_ICalProperty * Method: init * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__I (JNIEnv *env, jobject jobj, jint kind) { setCObjectPtr(env,jobj,new ICalProperty((icalproperty_kind)kind)); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_status * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1status (JNIEnv *env, jobject jobj, jint value) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_status((icalproperty_status)value); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_status * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1status (JNIEnv *env, jobject jobj) { jint result = 0; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_status(); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_relcalid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1relcalid (JNIEnv *env, jobject jobj, jstring str) { ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_relcalid((char *)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_relcalid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1relcalid (JNIEnv *env, jobject jobj) { jstring result = NULL; ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_relcalid(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_exdate * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1exdate (JNIEnv *env, jobject jobj, jobject exdate) { // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aExDate; if (copyObjToicaltimetype(env,exdate,&aExDate)) { cObj->set_exdate(aExDate); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_exdate * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1exdate (JNIEnv *env, jobject jobj) { jobject result = 0; // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the exdate from CObj icaltimetype aExDate = cObj->get_exdate(); // create a new surrogate, using aRecurrenceId as the subject. result = createNewICalTimeType(env,&aExDate); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_exrule * Signature: (Lnet/cp/jlibical/ICalRecurrenceType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1exrule (JNIEnv *env, jobject jobj, jobject exrule) { // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icalrecurrencetype aExRule; if (copyObjToicalrecurrencetype(env,exrule,&aExRule)) { cObj->set_exrule(aExRule); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_exrule * Signature: ()Lnet/cp/jlibical/ICalRecurrenceType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1exrule (JNIEnv *env, jobject jobj) { jobject result = 0; // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the exrule from CObj icalrecurrencetype aExRule = cObj->get_exrule(); // create a new surrogate, using aExRule as the subject. result = createNewICalRecurrenceType(env,&aExRule); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_freebusy * Signature: (Lnet/cp/jlibical/ICalPeriodType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1freebusy (JNIEnv *env, jobject jobj, jobject period) { // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icalperiodtype aPeriod; if (copyObjToicalperiodtype(env,period,&aPeriod)) { cObj->set_freebusy(aPeriod); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_freebusy * Signature: ()Lnet/cp/jlibical/ICalPeriodType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1freebusy (JNIEnv *env, jobject jobj) { jobject result = 0; // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the period from CObj icalperiodtype aPeriod = cObj->get_freebusy(); // create a new surrogate, using aPeriod as the subject. result = createNewICalPeriodType(env,&aPeriod); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_recurrenceid * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1recurrenceid (JNIEnv *env, jobject jobj, jobject recurrenceid) { // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aRecurrenceId; if (copyObjToicaltimetype(env,recurrenceid,&aRecurrenceId)) { cObj->set_recurrenceid(aRecurrenceId); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_recurrenceid * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1recurrenceid (JNIEnv *env, jobject jobj) { jobject result = 0; // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the exdate from CObj icaltimetype aRecurrenceId = cObj->get_recurrenceid(); // create a new surrogate, using aRecurrenceId as the subject. result = createNewICalTimeType(env,&aRecurrenceId); } return(result); } /* * Class: net_cp_jlibical_ICalProperty * Method: set_rrule * Signature: (Lnet/cp/jlibical/ICalRecurrenceType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1rrule (JNIEnv *env, jobject jobj, jobject rrule) { // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icalrecurrencetype aRRule; if (copyObjToicalrecurrencetype(env,rrule,&aRRule)) { cObj->set_rrule(aRRule); } } } /* * Class: net_cp_jlibical_ICalProperty * Method: get_rrule * Signature: ()Lnet/cp/jlibical/ICalRecurrenceType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1rrule (JNIEnv *env, jobject jobj) { jobject result = 0; // get the ICalProperty c++ object from jobj ICalProperty* cObj = getSubjectAsICalProperty(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the rrule from CObj icalrecurrencetype aRRule = cObj->get_rrule(); // create a new surrogate, using aExRule as the subject. result = createNewICalRecurrenceType(env,&aRRule); } return(result); } libical-1.0/src/java/VToDo.java0000664000076400007640000000071312132563127015304 0ustar allenallen/*====================================================================== FILE: VToDo.java CREATOR: fnguyen 01/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class VToDo extends VComponent { public VToDo() { super(ICalComponentKind.ICAL_VTODO_COMPONENT); } public VToDo(long obj) { super(obj); } public VToDo(String str) { super(str); } } libical-1.0/src/java/ICalProperty.java0000664000076400007640000003375412132563127016701 0ustar allenallen/*====================================================================== FILE: ICalProperty.java CREATOR: gnorman 01/09/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class ICalProperty { /** It's not typesafe, but it's simple to understand! */ public interface ICalPropertyMethod { // icalproperty_method int ICAL_METHOD_X = 10011; int ICAL_METHOD_PUBLISH = 10012; int ICAL_METHOD_REQUEST = 10013; int ICAL_METHOD_REPLY = 10014; int ICAL_METHOD_ADD = 10015; int ICAL_METHOD_CANCEL = 10016; int ICAL_METHOD_REFRESH = 10017; int ICAL_METHOD_COUNTER = 10018; int ICAL_METHOD_DECLINECOUNTER = 10019; int ICAL_METHOD_CREATE = 10020; int ICAL_METHOD_READ = 10021; int ICAL_METHOD_RESPONSE = 10022; int ICAL_METHOD_MOVE = 10023; int ICAL_METHOD_MODIFY = 10024; int ICAL_METHOD_GENERATEUID = 10025; int ICAL_METHOD_DELETE = 10026; int ICAL_METHOD_NONE = 10027; } /** It's not typesafe, but it's simple to understand! */ public interface ICalPropertyAction { // icalproperty_action int ICAL_ACTION_X = 10000; int ICAL_ACTION_AUDIO = 10001; int ICAL_ACTION_DISPLAY = 10002; int ICAL_ACTION_EMAIL = 10003; int ICAL_ACTION_PROCEDURE = 10004; int ICAL_ACTION_NONE = 10005; } /** It's not typesafe, but it's simple to understand! */ public interface ICalPropertyKind { // icalproperty_kind int ICAL_ANY_PROPERTY = 0; int ICAL_ACTION_PROPERTY=1; int ICAL_ALLOWCONFLICT_PROPERTY=2; int ICAL_ATTACH_PROPERTY=3; int ICAL_ATTENDEE_PROPERTY=4; int ICAL_CALID_PROPERTY=5; int ICAL_CALMASTER_PROPERTY=6; int ICAL_CALSCALE_PROPERTY=7; int ICAL_CARID_PROPERTY=8; int ICAL_CATEGORIES_PROPERTY=9; int ICAL_CLASS_PROPERTY=10; int ICAL_COMMENT_PROPERTY=11; int ICAL_COMPLETED_PROPERTY=12; int ICAL_CONTACT_PROPERTY=13; int ICAL_CREATED_PROPERTY=14; int ICAL_DATEFORMAT_PROPERTY=15; int ICAL_DECREED_PROPERTY=16; int ICAL_DEFAULTCHARSET_PROPERTY=17; int ICAL_DEFAULTLOCALE_PROPERTY=18; int ICAL_DEFAULTTZID_PROPERTY=19; int ICAL_DESCRIPTION_PROPERTY=20; int ICAL_DTEND_PROPERTY=21; int ICAL_DTSTAMP_PROPERTY=22; int ICAL_DTSTART_PROPERTY=23; int ICAL_DUE_PROPERTY=24; int ICAL_DURATION_PROPERTY=25; int ICAL_EXDATE_PROPERTY=26; int ICAL_EXPAND_PROPERTY=27; int ICAL_EXRULE_PROPERTY=28; int ICAL_FREEBUSY_PROPERTY=29; int ICAL_GEO_PROPERTY=30; int ICAL_GRANT_PROPERTY=31; int ICAL_LASTMODIFIED_PROPERTY=32; int ICAL_LOCATION_PROPERTY=33; int ICAL_MAXRESULTS_PROPERTY=34; int ICAL_MAXRESULTSSIZE_PROPERTY=35; int ICAL_METHOD_PROPERTY=36; int ICAL_ORGANIZER_PROPERTY=37; int ICAL_OWNER_PROPERTY=38; int ICAL_PERCENTCOMPLETE_PROPERTY=39; int ICAL_PRIORITY_PROPERTY=40; int ICAL_PRODID_PROPERTY=41; int ICAL_QUERY_PROPERTY=42; int ICAL_QUERYNAME_PROPERTY=43; int ICAL_RDATE_PROPERTY=44; int ICAL_RECURRENCEID_PROPERTY=45; int ICAL_RELATEDTO_PROPERTY=46; int ICAL_RELCALID_PROPERTY=47; int ICAL_REPEAT_PROPERTY=48; int ICAL_REQUESTSTATUS_PROPERTY=49; int ICAL_RESOURCES_PROPERTY=50; int ICAL_RRULE_PROPERTY=51; int ICAL_SCOPE_PROPERTY=52; int ICAL_SEQUENCE_PROPERTY=53; int ICAL_STATUS_PROPERTY=54; int ICAL_SUMMARY_PROPERTY=55; int ICAL_TARGET_PROPERTY=56; int ICAL_TIMEFORMAT_PROPERTY=57; int ICAL_TRANSP_PROPERTY=58; int ICAL_TRIGGER_PROPERTY=59; int ICAL_TZID_PROPERTY=60; int ICAL_TZNAME_PROPERTY=61; int ICAL_TZOFFSETFROM_PROPERTY=62; int ICAL_TZOFFSETTO_PROPERTY=63; int ICAL_TZURL_PROPERTY=64; int ICAL_UID_PROPERTY=65; int ICAL_URL_PROPERTY=66; int ICAL_VERSION_PROPERTY=67; int ICAL_X_PROPERTY=68; int ICAL_XLICCLASS_PROPERTY=69; int ICAL_XLICCLUSTERCOUNT_PROPERTY=70; int ICAL_XLICERROR_PROPERTY=71; int ICAL_XLICMIMECHARSET_PROPERTY=72; int ICAL_XLICMIMECID_PROPERTY=73; int ICAL_XLICMIMECONTENTTYPE_PROPERTY=74; int ICAL_XLICMIMEENCODING_PROPERTY=75; int ICAL_XLICMIMEFILENAME_PROPERTY=76; int ICAL_XLICMIMEOPTINFO_PROPERTY=77; int ICAL_NO_PROPERTY=78; } public interface ICalPropertyStatus { // icalproperty_status int ICAL_STATUS_X = 10028; int ICAL_STATUS_TENTATIVE = 10029; int ICAL_STATUS_CONFIRMED = 10030; int ICAL_STATUS_COMPLETED = 10031; int ICAL_STATUS_NEEDSACTION = 10032; int ICAL_STATUS_CANCELLED = 10033; int ICAL_STATUS_INPROCESS = 10034; int ICAL_STATUS_DRAFT = 10035; int ICAL_STATUS_FINAL = 10036; int ICAL_STATUS_NONE = 10037; } /** * Constructor for ICalProperty * @param obj c++ pointer */ private ICalProperty(long obj) { init(obj); } public ICalProperty() { init(); } public ICalProperty(String str) { init(str); } public ICalProperty(/* ICalPropertyKind */ int kind) { init(kind); } public native String as_ical_string(); public native /* ICalPropertyKind */ int isa(); public native boolean isa_property(Object property); public native void add_parameter(ICalParameter parameter); public native void set_parameter(ICalParameter parameter); public native void set_parameter_from_string(String name, String val); public native String get_parameter_as_string(String name); public native void remove_parameter(/* ICalParameterKind */ int kind); public native int count_parameters(); /* Iterate through the parameters */ public native ICalParameter get_first_parameter(/* ICalParameterKind */ int kind); public native ICalParameter get_next_parameter(/* ICalParameterKind */ int kind); /* Access the value of the property */ public native void set_value(ICalValue val); public native void set_value_from_string(String val, String kind); public native ICalValue get_value(); public native String get_value_as_string(); /* Return the name of the property -- the type name converted to a String, or the value of get_x_name if the type is X property */ public native String get_name(); /* Deal with X properties */ //static void set_x_name(ICalProperty prop, String name); //static String get_x_name(ICalProperty prop); //public native static /* ICalValueKind */ int icalparameter_value_to_value_kind(/* ICalParameterValue */ int val); /* Convert kinds to String and get default value type */ //public native static /* ICalValueKind */ int kind_to_value_kind(/* ICalPropertyKind */ int kind); //public native static /* ICalValueKind */ int value_kind_to_kind(/* ICalValueKind */ int kind); //public native static String kind_to_string(/* ICalPropertyKind */ int kind); //public native static /* ICalPropertyKind */ int string_to_kind(String str); //public native static /* ICalPropertyMethod */ int string_to_method(String str); //public native static String method_to_string(/* ICalPropertyMethod */ int method); //public native static String enum_to_string(int e); //public native static int string_to_enum(String str); //public native static String status_to_string(/* ICalPropertyStatus */ int status); //public native static /* ICalPropertyStatus */ int string_to_status(String str); //public native static int enum_belongs_to_property(/* ICalPropertyKind */ int kind, int e); /* ACTION */ public native void set_action(/* ICalPropertyAction */ int v); public native /* ICalPropertyAction */ int get_action(); /* ATTACH */ //void set_attach(struct icalattachtype v); //struct icalattachtype get_attach(); /* ATTENDEE */ public native void set_attendee(String val); public native String get_attendee(); /* CALSCALE */ //public native void set_calscale(String val); //public native String get_calscale(); /* CATEGORIES */ //public native void set_categories(String val); //public native String get_categories(); /* CLASS */ //public native void set_class(String val); //public native String get_class(); /* COMMENT */ public native void set_comment(String val); public native String get_comment(); /* COMPLETED */ //void set_completed(ICalTimeType val); //ICalTimeType get_completed(); /* CONTACT */ //public native void set_contact(String val); //public native String get_contact(); /* CREATED */ //void set_created(ICalTimeType val); //ICalTimeType get_created(); /* DESCRIPTION */ public native void set_description(String val); public native String get_description(); /* DTEND */ public native void set_dtend(ICalTimeType val); public native ICalTimeType get_dtend(); /* DTSTAMP */ public native void set_dtstamp(ICalTimeType val); public native ICalTimeType get_dtstamp(); /* DTSTART */ public native void set_dtstart(ICalTimeType val); public native ICalTimeType get_dtstart(); /* DUE */ public native void set_due(ICalTimeType val); public native ICalTimeType get_due(); /* DURATION */ public native void set_duration(ICalDurationType val); public native ICalDurationType get_duration(); /* EXDATE */ public native void set_exdate(ICalTimeType val); public native ICalTimeType get_exdate(); /* EXRULE */ public native void set_exrule(ICalRecurrenceType val); public native ICalRecurrenceType get_exrule(); /* EXPAND */ public void set_expand(int val) {} // @-@:p0 TMA TODO public int get_expand() {return 0;} // @-@:p0 TMA TODO /* FREEBUSY */ public native void set_freebusy(ICalPeriodType val); public native ICalPeriodType get_freebusy(); /* GEO */ //void set_geo(struct icalgeotype val); //struct icalgeotype get_geo(); /* LAST-MODIFIED */ //void set_lastmodified(ICalTimeType val); //ICalTimeType get_lastmodified(); /* LOCATION */ public native void set_location(String val); public native String get_location(); /* MAXRESULTS */ //public native void set_maxresults(int val); //public native int get_maxresults(); /* MAXRESULTSSIZE */ //public native void set_maxresultsize(int val); //public native int get_maxresultsize(); /* METHOD */ public native void set_method(/* ICalPropertyMethod */ int val); public native /* ICalPropertyMethod */ int get_method(); /* ORGANIZER */ public native void set_organizer(String val); public native String get_organizer(); /* OWNER */ public native void set_owner(String val); public native String get_owner(); /* PERCENT-COMPLETE */ //void set_percentcomplete(int val); //int get_percentcomplete(); /* PRIORITY */ //void set_priority(int val); //int get_priority(); /* PRODID */ public native void set_prodid(String val); public native String get_prodid(); /* QUERY */ public native void set_query(String val); public native String get_query(); /* QUERYNAME */ public native void set_queryname(String val); public native String get_queryname(); /* RDATE */ //void set_rdate(struct icaldatetimeperiodtype val); //struct icaldatetimeperiodtype get_rdate(); /* RECURRENCE-ID */ public native void set_recurrenceid(ICalTimeType val); public native ICalTimeType get_recurrenceid(); /* RELATED-TO */ //public native void set_relatedto(String val); //public native String get_relatedto(); /* RELCALID */ public native void set_relcalid(String val); public native String get_relcalid(); /* REPEAT */ public native void set_repeat(int val); public native int get_repeat(); /* REQUEST-STATUS */ //public native void set_requeststatus(String val); //public native String get_requeststatus(); /* RESOURCES */ //public native void set_resources(String val); //public native String get_resources(); /* RRULE */ public native void set_rrule(ICalRecurrenceType val); public native ICalRecurrenceType get_rrule(); /* SCOPE */ //public native void set_scope(String val); //public native String get_scope(); /* SEQUENCE */ //public native void set_sequence(int val); //public native int get_sequence(); /* STATUS */ public native void set_status(/* ICalPropertyStatus */ int val); public native /* ICalPropertyStatus */ int get_status(); /* SUMMARY */ public native void set_summary(String val); public native String get_summary(); /* TARGET */ public native void set_target(String val); public native String get_target(); /* TRANSP */ //public native void set_transp(String val); //public native String get_transp(); /* TRIGGER */ public native void set_trigger(ICalTriggerType val); public native ICalTriggerType get_trigger(); /* TZID */ public native void set_tzid(String val); public native String get_tzid(); /* TZNAME */ //public native void set_tzname(String val); //public native String get_tzname(); /* TZOFFSETFROM */ //public native void set_tzoffsetfrom(int val); //public native int get_tzoffsetfrom(); /* TZOFFSETTO */ //public native void set_tzoffsetto(int val); //public native int get_tzoffsetto(); /* TZURL */ //public native void set_tzurl(String val); //public native String get_tzurl(); /* UID */ public native void set_uid(String val); public native String get_uid(); /* URL */ //public native void set_url(String val); //public native String get_url(); /* VERSION */ //public native void set_version(String val); //public native String get_version(); /* X */ //void set_x(String val); //String get_x(); /* X-LIC-CLUSTERCOUNT */ //void set_xlicclustercount(String val); //String get_xlicclustercount(); /* X-LIC-ERROR */ //void set_xlicerror(String val); //String get_xlicerror(); /* X-LIC-MIMECHARSET */ //void set_xlicmimecharset(String val); //String get_xlicmimecharset(); /* X-LIC-MIMECID */ //void set_xlicmimecid(String val); //String get_xlicmimecid(); /* X-LIC-MIMECONTENTTYPE */ //void set_xlicmimecontenttype(String val); //String get_xlicmimecontenttype(); /* X-LIC-MIMEENCODING */ //void set_xlicmimeencoding(String val); //String get_xlicmimeencoding(); /* X-LIC-MIMEFILENAME */ //void set_xlicmimefilename(String val); //String get_xlicmimefilename(); /* X-LIC-MIMEOPTINFO */ //void set_xlicmimeoptinfo(String val); //String get_xlicmimeoptinfo(); /** * init the native class */ private void init(long obj) { m_Obj = obj; } private native void init(); private native void init(String str); private native void init(/* ICalPropertyKind */ int kind); /** * load the jni library for this class */ static { System.loadLibrary("ical_jni"); } public static void main(String[] args) { System.out.println("*** ICalProperty main called ok."); } /** pointer to C++ object */ private long m_Obj = 0; } libical-1.0/src/java/jniICalTriggerType_cxx.cpp0000664000076400007640000001257012132563127020537 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: jniICalTriggerType_cxx.cpp CREATOR: structConverter (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #include #include "jniICalTriggerType_cxx.h" #include "jniICalTimeType_cxx.h" #include "jniICalDurationType_cxx.h" static jfieldID ICalTriggerType_Time_FID; static jfieldID ICalTriggerType_Duration_FID; void initICalTriggerTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalTriggerType_Time_FID = env->GetFieldID(clazz, "time", "Lnet/cp/jlibical/ICalTimeType;"); ICalTriggerType_Duration_FID = env->GetFieldID(clazz, "duration", "Lnet/cp/jlibical/ICalDurationType;"); } void jni_SetTime_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalTriggerType, ICalTriggerType_Time_FID); jni_SetYear_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_SetMonth_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_SetDay_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_SetHour_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_SetMinute_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_SetSecond_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_SetIs_utc_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_SetIs_date_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_SetZone_in_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); } void jni_GetTime_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalTriggerType, ICalTriggerType_Time_FID); jni_GetYear_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_GetMonth_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_GetDay_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_GetHour_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_GetMinute_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_GetSecond_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_GetIs_utc_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_GetIs_date_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); jni_GetZone_from_ICalTimeType(&(__ICalTriggerType_->time), env, lcl_jobj0); } void jni_SetDuration_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalTriggerType, ICalTriggerType_Duration_FID); jni_SetIs_neg_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_SetDays_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_SetWeeks_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_SetHours_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_SetMinutes_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_SetSeconds_in_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); } void jni_GetDuration_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv *env, jobject thisICalTriggerType) { jobject lcl_jobj0; lcl_jobj0 = env->GetObjectField(thisICalTriggerType, ICalTriggerType_Duration_FID); jni_GetIs_neg_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_GetDays_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_GetWeeks_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_GetHours_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_GetMinutes_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); jni_GetSeconds_from_ICalDurationType(&(__ICalTriggerType_->duration), env, lcl_jobj0); } // copy all fields from the c struct (__ICalTriggerType_) to the java object (thisICalTriggerType). void jni_SetAll_in_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv* env, jobject thisICalTriggerType) { jni_SetTime_in_ICalTriggerType(__ICalTriggerType_, env, thisICalTriggerType); jni_SetDuration_in_ICalTriggerType(__ICalTriggerType_, env, thisICalTriggerType); } // copy all fields from the java object (thisICalTriggerType) to the c struct (__ICalTriggerType_). void jni_GetAll_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEnv* env, jobject thisICalTriggerType) { jni_GetTime_from_ICalTriggerType(__ICalTriggerType_, env, thisICalTriggerType); jni_GetDuration_from_ICalTriggerType(__ICalTriggerType_, env, thisICalTriggerType); } /* * Class: net_cp_jlibical_ICalTriggerType * Method: init * Signature: (J)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_init__J (JNIEnv* env, jobject thisICalTriggerType, jlong data) { // copy all fields from the c struct (data) to the java object (thisICalTimeType). jni_SetAll_in_ICalTriggerType((ICalTriggerType*)data,env,thisICalTriggerType); } /* * Class: net_cp_jlibical_ICalTriggerType * Method: initFIDs * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_initFIDs(JNIEnv *env, jclass clazz) { initICalTriggerTypeFieldIDs(env, clazz); } libical-1.0/src/java/jniICalDurationType_cxx.cpp0000664000076400007640000001362712132563127020725 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: jniICalDurationType_cxx.cpp CREATOR: structConverter (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #include #include "jniICalDurationType_cxx.h" static jfieldID ICalDurationType_Is_neg_FID; static jfieldID ICalDurationType_Days_FID; static jfieldID ICalDurationType_Weeks_FID; static jfieldID ICalDurationType_Hours_FID; static jfieldID ICalDurationType_Minutes_FID; static jfieldID ICalDurationType_Seconds_FID; void initICalDurationTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalDurationType_Is_neg_FID = env->GetFieldID(clazz, "is_neg", "I"); ICalDurationType_Days_FID = env->GetFieldID(clazz, "days", "J"); ICalDurationType_Weeks_FID = env->GetFieldID(clazz, "weeks", "J"); ICalDurationType_Hours_FID = env->GetFieldID(clazz, "hours", "J"); ICalDurationType_Minutes_FID = env->GetFieldID(clazz, "minutes", "J"); ICalDurationType_Seconds_FID = env->GetFieldID(clazz, "seconds", "J"); } void jni_SetIs_neg_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { env->SetIntField(thisICalDurationType, ICalDurationType_Is_neg_FID, (jint) __ICalDurationType_->is_neg); } void jni_GetIs_neg_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { __ICalDurationType_->is_neg = env->GetIntField(thisICalDurationType, ICalDurationType_Is_neg_FID); } void jni_SetDays_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { env->SetLongField(thisICalDurationType, ICalDurationType_Days_FID, (jlong) __ICalDurationType_->days); } void jni_GetDays_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { __ICalDurationType_->days = env->GetLongField(thisICalDurationType, ICalDurationType_Days_FID); } void jni_SetWeeks_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { env->SetLongField(thisICalDurationType, ICalDurationType_Weeks_FID, (jlong) __ICalDurationType_->weeks); } void jni_GetWeeks_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { __ICalDurationType_->weeks = env->GetLongField(thisICalDurationType, ICalDurationType_Weeks_FID); } void jni_SetHours_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { env->SetLongField(thisICalDurationType, ICalDurationType_Hours_FID, (jlong) __ICalDurationType_->hours); } void jni_GetHours_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { __ICalDurationType_->hours = env->GetLongField(thisICalDurationType, ICalDurationType_Hours_FID); } void jni_SetMinutes_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { env->SetLongField(thisICalDurationType, ICalDurationType_Minutes_FID, (jlong) __ICalDurationType_->minutes); } void jni_GetMinutes_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { __ICalDurationType_->minutes = env->GetLongField(thisICalDurationType, ICalDurationType_Minutes_FID); } void jni_SetSeconds_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { env->SetLongField(thisICalDurationType, ICalDurationType_Seconds_FID, (jlong) __ICalDurationType_->seconds); } void jni_GetSeconds_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv *env, jobject thisICalDurationType) { __ICalDurationType_->seconds = env->GetLongField(thisICalDurationType, ICalDurationType_Seconds_FID); } // copy all fields from the c struct (ICalDurationType) to the java object (thisICalDurationType). void jni_SetAll_in_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv* env, jobject thisICalDurationType) { jni_SetIs_neg_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_SetDays_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_SetWeeks_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_SetHours_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_SetMinutes_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_SetSeconds_in_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); } // copy all fields from the java object (thisICalDurationType) to the c struct (__ICalDurationType_). void jni_GetAll_from_ICalDurationType(struct ICalDurationType* __ICalDurationType_, JNIEnv* env, jobject thisICalDurationType) { jni_GetIs_neg_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_GetDays_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_GetWeeks_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_GetHours_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_GetMinutes_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); jni_GetSeconds_from_ICalDurationType(__ICalDurationType_, env, thisICalDurationType); } /* * Class: net_cp_jlibical_ICalDurationType * Method: init * Signature: (J)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_init__J (JNIEnv *env, jobject thisICalDurationType, jlong data) { // copy all fields from the c struct (data) to the java object (thisICalDurationType). jni_SetAll_in_ICalDurationType((ICalDurationType*)data,env,thisICalDurationType); } /* * Class: net_cp_jlibical_ICalDurationType * Method: initFIDs * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_initFIDs(JNIEnv *env, jclass clazz) { initICalDurationTypeFieldIDs(env, clazz); } libical-1.0/src/java/jniICalPeriodType_cxx.h0000664000076400007640000000341712132563127020023 0ustar allenallen /*====================================================================== FILE: jniICalPeriodType_cxx.h CREATOR: structConverter (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef _jni_ICalPeriodType_H #define _jni_ICalPeriodType_H #include // I forgot how to do this using a typedef in c++!!!! #define ICalPeriodType icalperiodtype #ifdef __cplusplus extern "C" { #endif #include "ical.h" static void initICalPeriodTypeFieldIDs(JNIEnv* env, jclass clazz); void jni_SetStart_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType); void jni_GetStart_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType); void jni_SetEnd_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType); void jni_GetEnd_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType); void jni_SetDuration_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType); void jni_GetDuration_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv *env, jobject thisICalPeriodType); void jni_SetAll_in_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv* env, jobject thisICalPeriodType); void jni_GetAll_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JNIEnv* env, jobject thisICalPeriodType); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_init__J(JNIEnv* env, jobject thisICalPeriodType, jlong data); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_initFIDs(JNIEnv *env, jclass clazz); #ifdef __cplusplus } #endif #endif libical-1.0/src/java/ICalValue.java0000664000076400007640000001225412132563127016121 0ustar allenallen/*====================================================================== FILE: ICalValue.java CREATOR: gnorman 01/10/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ package net.cp.jlibical; public class ICalValue { /** It's not typesafe, but it's simple to understand! */ public interface ICalValueKind { // icalvalue_kind int ICAL_ANY_VALUE=5000; int ICAL_BOOLEAN_VALUE=5001; int ICAL_UTCOFFSET_VALUE=5002; int ICAL_RECUR_VALUE=5003; int ICAL_METHOD_VALUE=5004; int ICAL_CALADDRESS_VALUE=5005; int ICAL_PERIOD_VALUE=5006; int ICAL_STATUS_VALUE=5007; int ICAL_BINARY_VALUE=5008; int ICAL_TEXT_VALUE=5009; int ICAL_DATETIMEDATE_VALUE=5010; int ICAL_DURATION_VALUE=5011; int ICAL_DATETIMEPERIOD_VALUE=5012; int ICAL_INTEGER_VALUE=5013; int ICAL_TIME_VALUE=5014; int ICAL_URI_VALUE=5015; int ICAL_TRIGGER_VALUE=5016; int ICAL_ATTACH_VALUE=5017; int ICAL_CLASS_VALUE=5018; int ICAL_FLOAT_VALUE=5019; int ICAL_QUERY_VALUE=5020; int ICAL_STRING_VALUE=5021; int ICAL_TRANSP_VALUE=5022; int ICAL_X_VALUE=5023; int ICAL_DATETIME_VALUE=5024; int ICAL_GEO_VALUE=5025; int ICAL_DATE_VALUE=5026; int ICAL_ACTION_VALUE=5027; int ICAL_NO_VALUE=5028; } /** * Constructor for ICalValue * @param obj c++ pointer */ private ICalValue(long obj) { init(obj); } public ICalValue() { init(); } public ICalValue(/* ICalValueKind */ int kind) { init(kind); } public ICalValue(/* ICalValueKind */ int kind, String str) { init(kind,str); } public native String as_ical_string(); //public native boolean is_valid(); public native /* ICalValueKind */ int isa(); public native boolean isa_value(Object value); /* Special, non autogenerated value accessors */ //void set_recur(struct icalrecurrencetype v); //struct icalrecurrencetype get_recur(); public native void set_trigger(ICalTriggerType v); public native ICalTriggerType get_trigger(); //void set_datetimeperiod(struct icaldatetimeperiodtype v); //struct icaldatetimeperiodtype get_datetimeperiod(); //public native static /* ICalParameterXLicCompareType */ int compare(ICalValue a, ICalValue b); /* Convert enumerations */ //public native static /* ICalValueKind */ int string_to_kind(String str); //public native String kind_to_string(/* ICalValueKind */ int kind); /* BOOLEAN */ //public native int get_boolean(); //public native void set_boolean(int v); /* UTC-OFFSET */ //public native int get_utcoffset(); //public native void set_utcoffset(int v); /* METHOD */ public native /* ICalPropertyMethod */ int get_method(); public native void set_method(/* ICalPropertyMethod */ int v); /* CAL-ADDRESS */ //public native String get_caladdress(); //public native void set_caladdress(String v); /* PERIOD */ //struct icalperiodtype get_period(); //void set_period(struct icalperiodtype v); /* STATUS */ //public native /* ICalPropertyStatus */ int get_status(); //public native void set_status(/* ICalPropertyStatus */ int v); /* BINARY */ //public native String get_binary(); //public native void set_binary(String v); /* TEXT */ public native String get_text(); public native void set_text(String v); /* DATE-TIME-DATE */ //ICalTimeType get_datetimedate(); //void set_datetimedate(ICalTimeType v); /* DURATION */ public native ICalDurationType get_duration(); public native void set_duration(ICalDurationType v); /* INTEGER */ //public native int get_integer(); //public native void set_integer(int v); /* TIME */ //ICalTimeType get_time(); //void set_time(ICalTimeType v); /* URI */ //public native String get_uri(); //public native void set_uri(String v); /* ATTACH */ //struct icalattachtype get_attach(); //void set_attach(struct icalattachtype v); /* CLASS */ //public native /* ICalPropertyClass */ int get_class(); //public native void set_class(/* ICalPropertyClass */ int v); /* FLOAT */ //public native float get_float(); //public native void set_float(float v); /* QUERY */ public native String get_query(); public native void set_query(String v); /* STRING */ //public native String get_string(); //public native void set_string(String v); /* TRANSP */ //public native /* ICalPropertyTransp */ int get_transp(); //public native void set_transp(/* ICalPropertyTransp */ int v); /* DATE-TIME */ public native ICalTimeType get_datetime(); public native void set_datetime(ICalTimeType v); /* GEO */ //struct icalgeotype get_geo(); //void set_geo(struct icalgeotype v); /* DATE */ //ICalTimeType get_date(); //void set_date(ICalTimeType v); /* ACTION */ public native /* ICalPropertyAction */ int get_action(); public native void set_action(/* ICalPropertyAction */ int v); /** * init the native class */ private void init(long obj) { m_Obj = obj; } private native void init(); private native void init(/* ICalValueKind */ int kind, String str); private native void init(/* ICalValueKind */ int kind); /** * load the jni library for this class */ static { System.loadLibrary("ical_jni"); } public static void main(String[] args) { System.out.println("*** ICalValue main called ok."); } /** pointer to C++ object */ private long m_Obj = 0; } libical-1.0/src/java/net_cp_jlibical_VComponent_cxx.cpp0000664000076400007640000005711412132563127022314 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: net_cp_jlibical_VComponent_cxx.cpp CREATOR: gnorman 1/10/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef NET_CP_JLIBICAL_VCOMPONENT_CXX_H #include "net_cp_jlibical_VComponent_cxx.h" #endif #ifndef JLIBICAL_CONSTS_CXX_H #include "jlibical_consts_cxx.h" #endif #ifndef JLIBICAL_UTILS_CXX_H #include "jlibical_utils_cxx.h" #endif #ifndef VCOMPONENT_CXX_H #include "vcomponent.h" #endif #ifndef ICALPROPERTY_CXX_H #include "icalproperty_cxx.h" #endif /* * Class: net_cp_jlibical_VComponent * Method: as_ical_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_as_1ical_1string (JNIEnv *env, jobject jobj) { jstring result = NULL; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->as_ical_string(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: isa * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_isa (JNIEnv *env, jobject jobj) { jint result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->isa(); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: isa_component * Signature: (Ljava/lang/Object;)Z */ JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_VComponent_isa_1component (JNIEnv *env, jobject jobj, jobject candidateObj) { jboolean result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { void* candidateValue = 0; if (candidateObj != NULL) { // get the c++ object from candidateObj (as long) candidateValue = getCObjectPtr(env,candidateObj); } // get the result from the c++ object (candidateValue can be 0, it's cObj's responsibility to handle this if an error). result = cObj->isa_component(candidateValue) != 0; } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: add_property * Signature: (Lnet/cp/jlibical/ICalProperty;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_add_1property (JNIEnv *env, jobject jobj, jobject jprop) { // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the ICalProperty c++ object from jprop ICalProperty* icalProperty = getSubjectAsICalProperty(env,jprop,JLIBICAL_ERR_ILLEGAL_ARGUMENT); if (icalProperty != NULL) { cObj->add_property(icalProperty); } } } /* * Class: net_cp_jlibical_VComponent * Method: remove_property * Signature: (Lnet/cp/jlibical/ICalProperty;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_remove_1property (JNIEnv *env, jobject jobj, jobject jprop) { // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the ICalProperty c++ object from jprop ICalProperty* icalProperty = getSubjectAsICalProperty(env,jprop,JLIBICAL_ERR_ILLEGAL_ARGUMENT); if (icalProperty != NULL) { cObj->remove_property(icalProperty); } } } /* * Class: net_cp_jlibical_VComponent * Method: count_properties * Signature: (I)I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_count_1properties (JNIEnv *env, jobject jobj, jint kind) { jint result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->count_properties((icalproperty_kind)kind); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_current_property * Signature: ()Lnet/cp/jlibical/ICalProperty; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1current_1property (JNIEnv *env, jobject jobj) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the current property from CObj ICalProperty* aProperty = cObj->get_current_property(); // create a new surrogate, using aProperty as the subject (returns NULL if subject is NULL). result = createNewICalPropertySurrogate(env,aProperty); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_first_property * Signature: (I)Lnet/cp/jlibical/ICalProperty; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1property (JNIEnv *env, jobject jobj, jint kind) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the first property from CObj ICalProperty* aProperty = cObj->get_first_property((icalproperty_kind)kind); // create a new surrogate, using aProperty as the subject (returns NULL if subject is NULL). result = createNewICalPropertySurrogate(env,aProperty); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_next_property * Signature: (I)Lnet/cp/jlibical/ICalProperty; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1next_1property (JNIEnv *env, jobject jobj, jint kind) { jobject result = 0; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the next property from CObj ICalProperty* aProperty = cObj->get_next_property((icalproperty_kind)kind); // create a new surrogate, using aProperty as the subject (returns NULL if subject is NULL). result = createNewICalPropertySurrogate(env,aProperty); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_inner * Signature: ()Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1inner (JNIEnv *env, jobject jobj) { jobject result = 0; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the next property from CObj VComponent* inner = cObj->get_inner(); // create a new surrogate, using inner as the subject (returns NULL if subject is NULL). result = createNewVComponentSurrogate(env,inner); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: add_component * Signature: (Lnet/cp/jlibical/VComponent;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_add_1component (JNIEnv *env, jobject jobj, jobject jcomp) { // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the VComponent c++ object from jcomp VComponent* aComponent = getSubjectAsVComponent(env,jcomp,JLIBICAL_ERR_ILLEGAL_ARGUMENT); if (aComponent != NULL) { cObj->add_component(aComponent); } } } /* * Class: net_cp_jlibical_VComponent * Method: remove_component * Signature: (Lnet/cp/jlibical/VComponent;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_remove_1component (JNIEnv *env, jobject jobj, jobject jcomp) { // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the VComponent c++ object from jcomp VComponent* aComponent = getSubjectAsVComponent(env,jcomp,JLIBICAL_ERR_ILLEGAL_ARGUMENT); if (aComponent != NULL) { cObj->remove_component(aComponent); } } } /* * Class: net_cp_jlibical_VComponent * Method: count_components * Signature: (I)I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_count_1components (JNIEnv *env, jobject jobj, jint kind) { jint result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->count_components((icalcomponent_kind)kind); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_current_component * Signature: ()Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1current_1component (JNIEnv *env, jobject jobj) { jobject result = 0; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the next property from CObj VComponent* aComponent = cObj->get_current_component(); // create a new surrogate, using aComponent as the subject (returns NULL if subject is NULL). result = createNewVComponentSurrogate(env,aComponent); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_first_component * Signature: (I)Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1component (JNIEnv *env, jobject jobj, jint kind) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the first component from CObj VComponent* aComponent = cObj->get_first_component((icalcomponent_kind)kind); // create a new surrogate, using aComponent as the subject (returns NULL if subject is NULL). result = createNewVComponentSurrogate(env,aComponent); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_next_component * Signature: (I)Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1next_1component (JNIEnv *env, jobject jobj, jint kind) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the first component from CObj VComponent* aComponent = cObj->get_next_component((icalcomponent_kind)kind); // create a new surrogate, using aComponent as the subject (returns NULL if subject is NULL). result = createNewVComponentSurrogate(env,aComponent); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_dtstart * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtstart (JNIEnv *env, jobject jobj) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the dtstart time from CObj icaltimetype aTime = cObj->get_dtstart(); // create a new surrogate, using aTime as the subject. result = createNewICalTimeType(env,&aTime); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_dtstart * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtstart (JNIEnv *env, jobject jobj, jobject dtstart) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aStartTime; if (copyObjToicaltimetype(env,dtstart,&aStartTime)) { cObj->set_dtstart(aStartTime); } } } /* * Class: net_cp_jlibical_VComponent * Method: get_dtend * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtend (JNIEnv *env, jobject jobj) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the dtend time from CObj icaltimetype aTime = cObj->get_dtend(); // create a new surrogate, using aTime as the subject. result = createNewICalTimeType(env,&aTime); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_dtend * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtend (JNIEnv *env, jobject jobj, jobject dtend) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype anEndTime; if (copyObjToicaltimetype(env,dtend,&anEndTime)) { cObj->set_dtend(anEndTime); } } } /* * Class: net_cp_jlibical_VComponent * Method: get_duration * Signature: ()Lnet/cp/jlibical/ICalDurationType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1duration (JNIEnv *env, jobject jobj) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the duration time from CObj icaldurationtype aDuration = cObj->get_duration(); // create a new surrogate, using aDuration as the subject. result = createNewICalDurationType(env,&aDuration); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_duration * Signature: (Lnet/cp/jlibical/ICalDurationType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1duration (JNIEnv *env, jobject jobj, jobject duration) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaldurationtype aDuration; if (copyObjToicaldurationtype(env,duration,&aDuration)) { cObj->set_duration(aDuration); } } } /* * Class: net_cp_jlibical_VComponent * Method: get_method * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_VComponent_get_1method (JNIEnv *env, jobject jobj) { jint result = 0; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { result = cObj->get_method(); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_method * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1method (JNIEnv *env, jobject jobj, jint value) { VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { cObj->set_method((icalproperty_method)value); } } /* * Class: net_cp_jlibical_VComponent * Method: get_summary * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1summary (JNIEnv *env, jobject jobj) { jstring result = NULL; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_summary(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_summary * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1summary (JNIEnv *env, jobject jobj, jstring str) { VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_summary((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_VComponent * Method: get_dtstamp * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtstamp (JNIEnv *env, jobject jobj) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the recurrenceid from CObj icaltimetype aDTStamp = cObj->get_dtstamp(); // create a new surrogate, using aRecurrenceId as the subject. result = createNewICalTimeType(env,&aDTStamp); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_dtstamp * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1dtstamp (JNIEnv *env, jobject jobj, jobject dtstamp) { // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aDTStamp; if (copyObjToicaltimetype(env,dtstamp,&aDTStamp)) { cObj->set_dtstamp(aDTStamp); } } } /* * Class: net_cp_jlibical_VComponent * Method: get_location * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1location (JNIEnv *env, jobject jobj) { jstring result = NULL; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_location(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_location * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1location (JNIEnv *env, jobject jobj, jstring str) { VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_summary((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_VComponent * Method: get_description * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1description (JNIEnv *env, jobject jobj) { jstring result = NULL; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_description(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_description * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1description (JNIEnv *env, jobject jobj, jstring str) { VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_summary((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_VComponent * Method: get_uid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1uid (JNIEnv *env, jobject jobj) { jstring result = NULL; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_uid(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_uid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1uid (JNIEnv *env, jobject jobj, jstring str) { VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_uid((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_VComponent * Method: get_first_real_component * Signature: ()Lnet/cp/jlibical/VComponent; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1first_1real_1component (JNIEnv *env, jobject jobj) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the first component from CObj VComponent* aComponent = cObj->get_first_real_component(); // create a new surrogate, using aComponent as the subject (returns NULL if subject is NULL). result = createNewVComponentSurrogate(env,aComponent); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__ (JNIEnv *env, jobject jobj) { setCObjectPtr(env,jobj,new VComponent()); } /* * Class: net_cp_jlibical_VComponent * Method: init * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__Ljava_lang_String_2 (JNIEnv *env, jobject jobj, jstring str) { if (str != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); setCObjectPtr(env,jobj,new VComponent((char*)szTemp)); env->ReleaseStringUTFChars(str,szTemp); } else { throwException( env, JLIBICAL_ERR_ILLEGAL_ARGUMENT ); } } /* * Class: net_cp_jlibical_VComponent * Method: init * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_init__I (JNIEnv *env, jobject jobj, jint kind) { setCObjectPtr(env,jobj,new VComponent((icalcomponent_kind)kind)); } /* * Class: net_cp_jlibical_VComponent * Method: set_relcalid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1relcalid (JNIEnv *env, jobject jobj, jstring str) { VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { const char* szTemp = env->GetStringUTFChars(str,NULL); cObj->set_relcalid((char*)szTemp); env->ReleaseStringUTFChars(str,szTemp); } } /* * Class: net_cp_jlibical_VComponent * Method: get_relcalid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_VComponent_get_1relcalid (JNIEnv *env, jobject jobj) { jstring result = NULL; VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { char* icalStr = cObj->get_relcalid(); if (icalStr == NULL) { icalStr = ""; } result = env->NewStringUTF(icalStr); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: get_recurrenceid * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1recurrenceid (JNIEnv *env, jobject jobj) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { // get the recurrenceid from CObj icaltimetype aRecurrenceId = cObj->get_recurrenceid(); // create a new surrogate, using aRecurrenceId as the subject. result = createNewICalTimeType(env,&aRecurrenceId); } return(result); } /* * Class: net_cp_jlibical_VComponent * Method: set_recurrenceid * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_VComponent_set_1recurrenceid (JNIEnv *env, jobject jobj, jobject recurrenceid) { jobject result = 0; // get the VComponent c++ object from jobj VComponent* cObj = getSubjectAsVComponent(env,jobj,JLIBICAL_ERR_CLIENT_INTERNAL); if (cObj != NULL) { icaltimetype aRecurrenceId; if (copyObjToicaltimetype(env,recurrenceid,&aRecurrenceId)) { cObj->set_recurrenceid(aRecurrenceId); } } } libical-1.0/src/java/net_cp_jlibical_ICalProperty_cxx.h0000664000076400007640000004214012132563127022237 0ustar allenallen /*====================================================================== FILE: net_cp_jlibical_ICalProperty_cxx.h CREATOR: javah 1/11/02 (C) COPYRIGHT 2002, Critical Path ======================================================================*/ #ifndef _Included_net_cp_jlibical_ICalProperty #define _Included_net_cp_jlibical_ICalProperty #ifndef JNI_H #include #endif #ifdef __cplusplus extern "C" { #endif /* * Class: net_cp_jlibical_ICalProperty * Method: as_ical_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_as_1ical_1string (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: isa * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_isa (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: isa_property * Signature: (Ljava/lang/Object;)I */ JNIEXPORT jboolean JNICALL Java_net_cp_jlibical_ICalProperty_isa_1property (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: add_parameter * Signature: (Lnet/cp/jlibical/ICalParameter;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_add_1parameter (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_parameter * Signature: (Lnet/cp/jlibical/ICalParameter;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1parameter (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_parameter_from_string * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1parameter_1from_1string (JNIEnv *, jobject, jstring, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_parameter_as_string * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1parameter_1as_1string (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: remove_parameter * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_remove_1parameter (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: count_parameters * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_count_1parameters (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_first_parameter * Signature: (I)Lnet/cp/jlibical/ICalParameter; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1first_1parameter (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: get_next_parameter * Signature: (I)Lnet/cp/jlibical/ICalParameter; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1next_1parameter (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: set_value * Signature: (Lnet/cp/jlibical/ICalValue;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1value (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_value_from_string * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1value_1from_1string (JNIEnv *, jobject, jstring, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_value * Signature: ()Lnet/cp/jlibical/ICalValue; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1value (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_value_as_string * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1value_1as_1string (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_name * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1name (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: icalparameter_value_to_value_kind * Signature: (I)I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_icalparameter_1value_1to_1value_1kind (JNIEnv *, jclass, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: set_action * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1action (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: get_action * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1action (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_attendee * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1attendee (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_attendee * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1attendee (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_comment * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1comment (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_comment * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1comment (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_description * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1description (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_description * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1description (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_dtend * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtend (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_dtend * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtend (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_dtstamp * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtstamp (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_dtstamp * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtstamp (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_dtstart * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1dtstart (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_dtstart * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1dtstart (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_due * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1due (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_due * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1due (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_duration * Signature: (Lnet/cp/jlibical/ICalDurationType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1duration (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_duration * Signature: ()Lnet/cp/jlibical/ICalDurationType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1duration (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_location * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1location (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_location * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1location (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_method * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1method (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: get_method * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1method (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_organizer * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1organizer (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_organizer * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1organizer (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_owner * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1owner (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_owner * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1owner (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_prodid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1prodid (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_prodid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1prodid (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_query * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1query (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_query * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1query (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_queryname * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1queryname (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_queryname * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1queryname (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_repeat * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1repeat (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: get_repeat * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1repeat (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_summary * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1summary (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_summary * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1summary (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_target * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1target (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_target * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1target (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_trigger * Signature: (Lnet/cp/jlibical/ICalTriggerType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1trigger (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_trigger * Signature: ()Lnet/cp/jlibical/ICalTriggerType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1trigger (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_tzid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1tzid (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_tzid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1tzid (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_uid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1uid (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_uid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1uid (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: init * Signature: ()V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__ (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: init * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__Ljava_lang_String_2 (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: init * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__ILjava_lang_String_2 (JNIEnv *, jobject, jint, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: init * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__I (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: set_status * Signature: (I)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1status (JNIEnv *, jobject, jint); /* * Class: net_cp_jlibical_ICalProperty * Method: get_status * Signature: ()I */ JNIEXPORT jint JNICALL Java_net_cp_jlibical_ICalProperty_get_1status (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_relcalid * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1relcalid (JNIEnv *, jobject, jstring); /* * Class: net_cp_jlibical_ICalProperty * Method: get_relcalid * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_net_cp_jlibical_ICalProperty_get_1relcalid (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_exdate * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1exdate (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_exdate * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1exdate (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_exrule * Signature: (Lnet/cp/jlibical/ICalRecurrenceType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1exrule (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_exrule * Signature: ()Lnet/cp/jlibical/ICalRecurrenceType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1exrule (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_freebusy * Signature: (Lnet/cp/jlibical/ICalPeriodType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1freebusy (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_freebusy * Signature: ()Lnet/cp/jlibical/ICalPeriodType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1freebusy (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_recurrenceid * Signature: (Lnet/cp/jlibical/ICalTimeType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1recurrenceid (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_recurrenceid * Signature: ()Lnet/cp/jlibical/ICalTimeType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1recurrenceid (JNIEnv *, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: set_rrule * Signature: (Lnet/cp/jlibical/ICalRecurrenceType;)V */ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_set_1rrule (JNIEnv *, jobject, jobject); /* * Class: net_cp_jlibical_ICalProperty * Method: get_rrule * Signature: ()Lnet/cp/jlibical/ICalRecurrenceType; */ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_ICalProperty_get_1rrule (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif libical-1.0/src/python/0000775000076400007640000000000012141277614014050 5ustar allenallenlibical-1.0/src/python/ChangeLog0000664000076400007640000000737612132563127015634 0ustar allenallen2001-04-04 Eric Busboom * Component.py Added Calendar class. * Componeny.py Changed all component constructor so they cannot take string arguments. Now, only NewComponent() can turn an iCal string into a component. 2001-04-02 Eric Busboom * Component.py removed arguments from the Event constructor, since I presume that the Component derived classes will always be constructed with no arguments. * Property.py Split out Attendee, Organizer, Time, Duration and Period into their own files. Moved remaining classes to Derived Properties.pm 2001-03-13 Eric Busboom * Component.py Added Component.property() 2001-03-10 Patrick Lewis * Added __str__ method to Collection.Collection * Component.Component can now be initialized without arguments * Made _singular_property and _multiple_properties (in Component) useful for nearly all the specific component interfaces * Changed Property.Attendee and Property.Organizer to allow creation with no arguments * Filled in Todo skeleton * Added test function for an Event 2001-03-05 Eric Busboom * Property.py Added a lot of exception code to signal failure to create a Property. * DerivedProperties.py Added derived property classes for RDATE and TRIGGER, two properties that can have one of two value types. 2001-03-04 Eric Busboom * Property.pm Added Property.ConstructorFailedError exception * Component.pm fixed bug in Collection.__setslice__. "," used instead of ":" 2001-03-04 Patrick Lewis * Split Libical.py file into Component.py, Property.py, Collection.py, and Store.py * Added test_* functions to test.py * Changed component bindings to return a Collection when objects can have multiple values * Changed Component object to allow for creation of an object without an initial string * Added Todo and Journal events 2001-02-28 Eric Busboom * Property Remove most internal data. The property now work alsmost entirely off of the icalproperty that it holds a reference to. Made changes in all derived Properties to accomodate the change. * Property Added __del__ * Component Component.properties() now caches properties that it constructs, so two calls to properties() to that get the same icalproperty will also get the same Property. * Property Added Property.__cmp__ to test equality of properties based on ical string values 2001-02-27 Eric Busboom * Property Added Property.ref() to set/get the reference to the Property's internal icalproperty * Property Property._update_value now changes the icalproperty value if a reference has been set. * Component re-instituted Component.properties(). The routine now adds a 'ref' key to the dict that holds the python pointer string. The C hex value of the pointer is in the 'pid' key 2001-02-27 Patrick Lewis * Backed out changes to Component removing comp_p; Component.comp_p should be restored 2001-02-26 Eric Busboom * Period Added test routine,test_period() * Period implemented methods in period * Time Addedd addition and subtraction operators 2001-02-25 Eric Busboom * Libical.py Added test routine for time, time_test() * Libical.py Remove end of line chars ('\r\n" ) from Property._str__. Caller should add these lines itself * Liical.py CHanges Time._update_values to set time VALUE type based on use of is_date, rather than length of string. * Libical.py Removed call to _update_value in TIme::timezone * Libical.py changed update_value to _update_value libical-1.0/src/python/Error.py0000664000076400007640000000033512132563127015511 0ustar allenallen class LibicalError(Exception): "Libical Error" def __init__(self,str): Exception.__init__(self,str) def __str__(self): return Exception.__str__(self)+"\nLibical errno: "+icalerror_perror() libical-1.0/src/python/test.py0000664000076400007640000003167412132563127015411 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: test.py # CREATOR: eric # # DESCRIPTION: # # # $Id: test.py,v 1.24 2002-10-24 13:44:31 acampi Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== import LibicalWrap from Libical import * def error_type(): error = icalerror_perror() return error[:index(error,':')] comp_str = """ BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN METHOD:REQUEST BEGIN:VEVENT ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com COMMENT: When in the course of writting comments and nonsense text\, it becomes necessary to insert a newline DTSTART:19972512T120000 DTSTART:19970101T120000Z DTSTART:19970101 DURATION:P3DT4H25M FREEBUSY:19970101T120000/19970101T120000 FREEBUSY:19970101T120000/PT3H FREEBUSY:19970101T120000/PT3H END:VEVENT END:VCALENDAR""" def test_property(): print "--------------------------- Test Property ----------------------" liw = LibicalWrap icalprop = liw.icalproperty_new_from_string("ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com") print liw.icalproperty_as_ical_string(icalprop) p = Property(ref=icalprop) print p.name() print print "Parameters:" for param in p.parameters(): print " ", param, " = ", p[param] print print p['ROLE'] p['ROLE'] = 'INDIVIDUAL' print p['ROLE'] p['ROLE'] = 'GROFROMBLATZ' print p['ROLE'] print p['X-MAN-FAVOURITE'] = 'Wolverine' p['X-FILES-FAVOURITE'] = 'Mulder' print p['X-MAN-FAVOURITE'] assert(p['X-MAN-FAVOURITE'] == 'Wolverine') assert(p['X-FILES-FAVOURITE'] == 'Mulder') assert(p['X-FILES-FAVOURITE'] != 'Scully') print p.value() p.value("mailto:Bob@bob.com") print p.value() print p.as_ical_string() del p['ROLE'] del p['X-MAN-FAVOURITE'] print p.as_ical_string() try: p = Property() except Property.ConstructorFailedError: pass else: assert(0) # X Property p = Property("X-COMMENT") p.value("This is a sentence, with punctuation; indeed: it is") print p p.value("This is not approved by the Ministry of Silly Walks") print p assert(test_enum('METHOD','PUBLISH')) assert(not test_enum('METHOD','FOO')) assert(test_enum('ACTION','AUDIO')) assert(not test_enum('ACTION','OPAQUE')) def test_time(): "Test routine" print"-------------------Test Time --------------------------------" t = Time("19970325T123010Z",'DTSTART') assert(t.year == 1997) assert(t.month == 3) assert(t.day == 25) assert(t.hour == 12) assert(t.minute == 30) assert(t.second == 10) assert(t.is_utc()) assert(not t.is_date()) print t t.timezone("America/Los_Angeles") print str(t) print t.timezone() #assert(str(t)=='DTSTART;TZID=America/Los_Angeles:19970325T123010') assert(str(t)=='DTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/America/Los_Angeles:19970325T053010') t.second = t.second+80 t.timezone("UTC") print t.minute, t.second assert(t.minute == 31) assert(t.second == 30) d = Duration(3600,"DURATION") t2 = t + d print t2 assert(t2.hour == 13) t2 = t - d print t2 assert(isinstance(t2,Time)) assert(t2.hour == 11) # test int args t = Time(2) print t # test float args t = Time(2.5) print t def test_period(): print"-------------------Test Period--------------------------------" p = Period("19970101T180000Z/19970101T233000Z") print p assert(str(p) == 'FREEBUSY:19970101T180000Z/19970101T233000Z') print p.start() assert(str(p.start()) == 'DTSTART:19970101T180000Z') print p.end() assert(str(p.end()) == 'DTEND:19970101T233000Z') print p.duration() assert(str(p.duration()) == 'DURATION:PT5H30M') p = None p = Period("19970101T180000Z/PT5H30M") print p print p.start() assert(str(p.start()) == 'DTSTART:19970101T180000Z') print p.end() assert(str(p.end()) == 'DTEND:19970101T233000Z') print p.duration() assert(str(p.duration()) == 'DURATION:PT5H30M') def test_duration(): print "-------------- Test Duration ----------------" # Ical string d = Duration("P3DT4H25M") print str(d) assert(str(d) == "DURATION:P3DT4H25M") print d.seconds() assert(d.seconds() == 275100) # seconds d = Duration(-275100) print str(d) assert(str(d) == "DURATION:-P3DT4H25M") print d.seconds() assert(d.seconds() == -275100) #error try: d = Duration("P10WT7M") print str(d) assert(0) except: pass try: d = Duration("Pgiberish") print str(d) assert(0) except: pass def test_attach(): file = open('littlefile.txt') attachProp = Attach(file) file.close() attachProp.fmttype('text/ascii') print "\n" + attachProp.name() print attachProp.value_type() print attachProp.fmttype() attachProp['fmttype']=None print "Calling value()" print attachProp.value() print "Calling asIcalString()" print attachProp.as_ical_string() def test_component(): print "------------------- Test Component ----------------------" c = NewComponent(comp_str); props = c.properties() for p in props: print p.as_ical_string() inner = c.components()[0] print inner print type(inner) props = inner.properties() for p in props: print p.as_ical_string() dtstart = inner.properties('DTSTART')[0] print dtstart print "\n Orig hour: ", dtstart.hour assert(dtstart.hour == 12) dtstart.hour = dtstart.hour + 5 print "\n New hour: ", dtstart.hour assert(dtstart.hour == 17) attendee = inner.properties('ATTENDEE')[0] print attendee t = Time("20011111T123030") t.name('DTEND') inner.add_property(t) print c dtstart1 = inner.properties('DTSTART')[0] dtstart2 = inner.properties('DTSTART')[0] dtstart3 = inner.property('DTSTART') assert(dtstart1 is dtstart2) assert(dtstart1 == dtstart2) assert(dtstart1 is dtstart3) assert(dtstart1 == dtstart3) p = Property(type="SUMMARY"); p.value("This is a summary") inner.properties().append(p) print inner.as_ical_string() p = inner.properties("SUMMARY")[0] assert(p!=None); print str(p) assert(str(p) == "SUMMARY:This is a summary") inner.properties()[:] = [p] print inner.as_ical_string() # test sequence event = Event() try: event.sequence("foo") except TypeError: pass event.sequence(-1) print event.sequence() event.sequence(1) event.sequence(88) print event.sequence() def test_event(): print "------------ Event Class ----------------------" event = Event() event.method('REQUEST') event.version('2.0') event.created("20010313T123000Z") print "created =", event.created() assert (event.created() == Time("20010313T123000Z")) event.organizer("MAILTO:j_doe@nowhere.com") org = event.organizer() print org.cn() org.cn('Jane Doe') assert (isinstance(org, Organizer)) print "organizer =", event.organizer() assert (event.organizer().value() == "MAILTO:j_doe@nowhere.com") event.dtstart("20010401T183000Z") print "dtstart =", event.dtstart() assert (event.dtstart()== Time("20010401T183000Z")) dtend = Time('20010401T190000Z', 'DTEND') event.dtend(dtend) assert (event.dtend() ==dtend ) assert (event.dtend() == Time('20010401T190000Z')) att = Attendee() att.value('jsmith@nothere.com') event.attendees(('ef_hutton@listenup.com', att)) event.x_properties('X-TEST',('foo', 'bar')) event.x_properties('X-TEST2',('foo, biz', 'bar, biz')) inner = event.components()[0] for e in inner.properties('X-TEST'): print " ", e.as_ical_string() assert(len(event.x_properties('X-TEST'))==2) event.description("A short description. Longer ones break things. Really. What does it break. The code is supposed to handle realy long lines, longer, in fact, than any sane person would create except by writting a random text generator or by excerpting text from a less sane person. Actually, it did \"break\" and I had to remove an \n assert to fix it.") event.status('TeNtAtIvE') print event.as_ical_string() def test_derivedprop(): print "------------ Derived Properties -----------------" p = RDate("20011111T123030") print str(p) p = RDate("19970101T120000/19970101T123000") print str(p) try: p = RDate("P3DT4H25M") print str(p) assert(0) except: pass p = Trigger("P3DT4H25M") print str(p) p = Trigger("20011111T123030") print str(p) try: p = Trigger("19970101T120000/19970101T123000") print str(p) assert(0) except: pass def test_gauge(): print "------------ Gauge -----------------" event = Event() event.method('REQUEST') event.version('2.0') event.created("20010313T123000Z") event.organizer("MAILTO:j_doe@nowhere.com") org = event.organizer() org.cn('Jane Doe') event.dtstart("20010401T183000Z") dtend = Time('20010401T190000Z', 'DTEND') event.dtend(dtend) event.description("A short description.") event.status('TeNtAtIvE') print event.as_ical_string() gauge = Gauge(sql="SELECT * FROM VEVENT WHERE DTSTART > '20010401T180000Z'") assert(gauge.compare(event) == 1) gauge = Gauge(sql="SELECT * FROM VEVENT WHERE DTSTART > '20010401T190000Z'") assert(gauge.compare(event) == 0) def do_test_store(storeobj=None, *args): assert(storeobj != None) store = storeobj(*args) assert(store != None) print ">------------ ", print store.__class__, print "Store -----------------" # create fileset event = Event() event.method('REQUEST') event.version('2.0') event.created("20010313T123000Z") event.organizer("MAILTO:j_doe@nowhere.com") event.dtstart("20010401T183000Z") event.duration('PT3H') event.description("A short description.") # for i = 1 to 10 # copy event # munge uid and increment month for i in range(1,11): newevent = event.clone() newevent.uid("%d@localhost" % (i,)) newevent.dtstart().month = newevent.dtstart().month + i #print ne store.add_component(newevent) # commit store.commit() assert(store.count_components("VCALENDAR") == 10) # free del(store) # open again store = storeobj(*args) # assert count of components = 10 assert(store.count_components("VCALENDAR") == 10) # print them out # fetch by uid n7 = store.fetch("7@localhost") print n7 # fetch by match n7m = store.fetchMatch(n7) assert(str(n7) == str(n7m)) # modify in memory n7.uid("42@localhost") del(store) del(n7) store = storeobj(*args) assert(store.fetch("42@localhost") == None) n7 = store.fetch("7@localhost") n7.uid("42@localhost") store.mark() store.commit() del(store) store = storeobj(*args) assert(store.fetch("7@localhost") == None) # fetch by gauge gauge = Gauge(sql="SELECT * FROM VEVENT WHERE DTSTART > '20010601T000000Z' AND DTSTART < '20010901T000000Z'") store.select(gauge) count = 0 c = store.first_component() while c != None: print c.uid() print c.dtstart() print count = count + 1 c = store.next_component() store.clearSelect() assert(count == 3) # remove all of them c = store.first_component() while c != None: print c.uid() store.remove_component(c) c = store.first_component() assert(store.count_components("VCALENDAR") == 0) store.commit() assert(store.count_components("VCALENDAR") == 0) # print them out # assert count of components = 0 def test_store(): print "------------ Store -----------------" do_test_store(FileStore,"filesetout.ics") def run_tests(): print "Running unit tests for:", ICAL_PACKAGE, ICAL_VERSION test_property() test_time() test_period() test_component() test_duration() test_derivedprop() test_event() #test_attach() test_gauge() test_store() if __name__ == "__main__": run_tests() libical-1.0/src/python/Period.py0000664000076400007640000001417612132563127015652 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Period.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Period.py,v 1.1 2001-04-03 15:18:42 ebusboom Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #=========================================================== from LibicalWrap import * from Property import Property from types import DictType, StringType, IntType from Time import Time from Duration import Duration class Period(Property): """Represent a span of time""" def __init__(self,arg,name='FREEBUSY'): """ """ Property.__init__(self, type = name) self.pt=None #icalerror_clear_errno() e1=icalerror_supress("MALFORMEDDATA") e2=icalerror_supress("BADARG") if isinstance(arg, DictType): es=icalerror_supress("MALFORMEDDATA") self.pt = icalperiodtype_from_string(arg['value']) icalerror_restore("MALFORMEDDATA",es) Property.__init__(self, ref=arg['ref']) else: if isinstance(arg, StringType): self.pt = icalperiodtype_from_string(arg) else: self.pt = icalperiodtype_null_period() Property.__init__(self,type=name) icalerror_restore("MALFORMEDDATA",e1) icalerror_restore("BADARG",e2) if self.pt == None or icalperiodtype_is_null_period(self.pt): raise Property.ConstructorFailedError("Failed to construct Period") try: self._update_value() except Property.UpdateFailedError: raise Property.ConstructorFailedError("Failed to construct Period") def _end_is_duration(self): dur = self.pt.duration if not icaldurationtype_is_null_duration(dur): return 1 return 0 def _end_is_time(self): end = self.pt.end if not icaltime_is_null_time(end): return 1 return 0 def _update_value(self): self.value(icalperiodtype_as_ical_string(self.pt),"PERIOD") def valid(self): "Return true if this is a valid period" return not icalperiodtype_is_null_period(self.dur) def start(self,v=None): """ Return or set start time of the period. The start time may be expressed as an RFC2445 format string or an instance of Time. The return value is an instance of Time """ if(v != None): if isinstance(t,Time): t = v elif isinstance(t,StringType) or isinstance(t,IntType): t = Time(v,"DTSTART") else: raise TypeError self.pt.start = t.tt self._update_value() return Time(self.pt.start.as_timet(), "DTSTART") def end(self,v=None): """ Return or set end time of the period. The end time may be expressed as an RFC2445 format string or an instance of Time. The return value is an instance of Time. If the Period has a duration set, but not an end time, this method will caluculate the end time from the duration. """ if(v != None): if isinstance(t,Time): t = v elif isinstance(t,StringType) or isinstance(t,IntType): t = Time(v) else: raise TypeError if(self._end_is_duration()): start = self.pt.start.as_timet() dur = t.utc_seconds()-start; self.pt.duration = icaldurationtype_from_int(dur) else: self.pt.end = t.tt self._update_value() if(self._end_is_time()): rt = Time(self.pt.end.as_timet(), 'DTEND') rt.timezone(self.timezone()) return rt elif(self._end_is_duration()): start = self.pt.start.as_timet() dur = icaldurationtype_as_int(self.pt.duration) rt = Time(start+dur,'DTEND') rt.timezone(self.timezone()) return rt else: return Time({},'DTEND') def duration(self,v=None): """ Return or set the duration of the period. The duration may be expressed as an RFC2445 format string or an instance of Duration. The return value is an instance of Duration. If the period has an end time set, but not a duration, this method will calculate the duration from the end time. """ if(v != None): if isinstance(t,Duration): d = v elif isinstance(t,StringType) or isinstance(t,IntType): d = Duration(v) else: raise TypeError if(self._end_is_time()): start = self.pt.start.as_timet() end = start + d.seconds() self.pt.end = icaltimetype.from_timet(end) else: self.pt.duration = d.dur if(self._end_is_time()): start = self.pt.start.as_timet() end = self.pt.end.as_timet() print "End is time " + str(end-start) return Duration(end-start,"DURATION") elif(self._end_is_duration()): dur = icaldurationtype_as_int(self.pt.duration) return Duration(dur,"DURATION") else: return Duration(0,"DURATION") def timezone(self,v=None): """ Return or set the timezone string for this time """ if (v != None): self['TZID'] = v return self['TZID'] libical-1.0/src/python/__init__.py0000664000076400007640000000137512132563127016164 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: __init__.py # CREATOR: glenn # # DESCRIPTION: # # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from Libical import * libical-1.0/src/python/LibicalWrap_icaltimezone.i0000664000076400007640000001515412132563127021161 0ustar allenallen /*====================================================================== FILE: LibicalWrap_icaltimezone.i (C) COPYRIGHT 2010 Glenn Washburn The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The original author is Glenn Washburn (crass@berlios.de) Contributions from: ======================================================================*/ %rename(icaltimezone) _icaltimezone; %inline %{ #include "libical/icaltimezone.h" #include "libical/icaltimezoneimpl.h" %} %include "libical/icaltimezone.h" %include "libical/icaltimezoneimpl.h" %pythoncode %{ import time, datetime ##### Support datetime.tzinfo API ##### # This is a "good enough" implementation right now. Make better # later, if needed. class icaltzinfo(datetime.tzinfo): def __init__(self, icaltimezone): self.tz = icaltimezone def __cmp__(self, tzinfo): return cmp(self.tz, self.tz) def utcoffset(self, dt): timet = time.mktime(dt.timetuple()) tt = icaltimetype.from_timet(int(timet),0,None) utcoffset = _LibicalWrap.icaltimezone_get_utc_offset(self.tz, tt, None) return datetime.timedelta(utcoffset) def dst(self, dt): # FIXME: Since icaltimezone_get_utc_offset does all the # calc for dst internally and there is not function which # returns what we need here, we'll probably need to partly # reimplement icaltimezone_get_utc_offset return datetime.timedelta(0) def tzname(self, dt): return _LibicalWrap.icaltimezone_get_tzid(self.tz) # def fromutc(self, dt): pass %} #if 0 /** Sets the prefix to be used for tzid's generated from system tzdata. Must be globally unique (such as a domain name owned by the developer of the calling application), and begin and end with forward slashes. Do not change or de-allocate the string buffer after calling this. */ void icaltimezone_set_tzid_prefix(const char *new_prefix); /** * @par Accessing timezones. */ /** Free any builtin timezone information **/ void icaltimezone_free_builtin_timezones(void); /** Returns the array of builtin icaltimezones. */ icalarray* icaltimezone_get_builtin_timezones (void); /** * @par Converting times between timezones. */ void icaltimezone_convert_time (struct icaltimetype *tt, icaltimezone *from_zone, icaltimezone *to_zone); /** * @par Getting offsets from UTC. */ /** Calculates the UTC offset of a given local time in the given timezone. It is the number of seconds to add to UTC to get local time. The is_daylight flag is set to 1 if the time is in daylight-savings time. */ int icaltimezone_get_utc_offset (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight); /** Calculates the UTC offset of a given UTC time in the given timezone. It is the number of seconds to add to UTC to get local time. The is_daylight flag is set to 1 if the time is in daylight-savings time. */ int icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight); /* * @par Handling the default location the timezone files */ /** Set the directory to look for the zonefiles */ void set_zone_directory(char *path); /** Free memory dedicated to the zonefile directory */ void free_zone_directory(void); void icaltimezone_release_zone_tab(void); /* * @par Debugging Output. */ /** Dumps information about changes in the timezone up to and including max_year. */ int icaltimezone_dump_changes (icaltimezone *zone, int max_year, FILE *fp); #endif // Add some methods to the icaltimetype struct %extend _icaltimezone { /* Might want to change this to somethingmore reasonable, like longitude or utc offset. */ int __cmp__(icaltimezone *zone) { return strcmp(icaltimezone_get_tzid($self), icaltimezone_get_tzid(zone)); } } %pythoncode %{ # Remove accessors to private structure members, which is all of them _swig_remove_private_properties(icaltimezone) def _icaltimezone_set_component_wrap(self, comp): ret = _LibicalWrap.icaltimezone_set_component(self, comp) if not ret: # Not successful, raise an exception because setting a property # has not return value to be checked. raise Error.LibicalError("Failed to set component to timezone") # Set/Overwrite icaltimezone properties icaltimezone_props = { "tzid": (_LibicalWrap.icaltimezone_get_tzid, ), "location": (_LibicalWrap.icaltimezone_get_location, ), "tznames": (_LibicalWrap.icaltimezone_get_tznames, ), "latitude": (_LibicalWrap.icaltimezone_get_latitude, ), "longitude": (_LibicalWrap.icaltimezone_get_longitude, ), "display_name": (_LibicalWrap.icaltimezone_get_display_name, ), "component": (_LibicalWrap.icaltimezone_get_component, _icaltimezone_set_component_wrap, ), } _swig_set_properties(icaltimezone, icaltimezone_props) # UTC = _LibicalWrap.icaltimezone_get_utc_timezone() def icaltimezone_copy(self): tz = _LibicalWrap.icaltimezone_copy(self) tz.this.acquire() return tz def icaltimezone_new(self): # Hand off the underlying pointer by setting the this attribute print "newing icaltimezone" obj = _LibicalWrap.icaltimezone_new() obj.this.acquire() try: self.this.append(obj.this) except: self.this = obj.this def icaltimezone_delete(self): # do not delete the struct because swig will do this if self.this.own(): _LibicalWrap.icaltimezone_free(self, 0) icaltimezone_methods = { 'as_tzinfo': icaltzinfo, 'copy': icaltimezone_copy, '__init__': icaltimezone_new, '__del__': icaltimezone_delete, } _swig_add_instance_methods(icaltimezone, icaltimezone_methods) icaltimezone.get_builtin_timezone = staticmethod(_LibicalWrap.icaltimezone_get_builtin_timezone) icaltimezone.get_builtin_timezone_from_offset = staticmethod(_LibicalWrap.icaltimezone_get_builtin_timezone_from_offset) icaltimezone.get_builtin_timezone_from_tzid = staticmethod(_LibicalWrap.icaltimezone_get_builtin_timezone_from_tzid) #icaltimezone.free_builtin_timezones = staticmethod(_LibicalWrap.icaltimezone_free_builtin_timezones) #icaltimezone.get_builtin_timezones = staticmethod(_LibicalWrap.icaltimezone_get_builtin_timezones) %} libical-1.0/src/python/Makefile.am0000664000076400007640000000265112132563127016105 0ustar allenallen# See xapian-bindings for an example of integrating autotools, swig and python BUILT_SOURCES = _LibicalWrap.c pyexec_LTLIBRARIES = _LibicalWrap.la common_FILES = \ __init__.py \ Libical.py \ test.py \ Attendee.py \ Collection.py \ Component.py \ DerivedProperties.py \ Duration.py \ Error.py \ Gauge.py \ Period.py \ Property.py \ Store.py \ Time.py # Install as python source so the code gets byte-compiled at install time. pkgpython_PYTHON = \ $(common_FILES) \ LibicalWrap.py # To allow non-standard library names (ie those not prefixed by "lib") see: # http://sources.redhat.com/automake/automake.html#Libtool-Modules _LibicalWrap_la_SOURCES = _LibicalWrap.c _LibicalWrap_la_LDFLAGS = -avoid-version -module -lc _LibicalWrap_la_LIBADD = $(top_builddir)/src/libical/libical.la \ $(top_builddir)/src/libicalss/libicalss.la AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ -I$(top_srcdir)/src/libicalss \ $(PY_CFLAGS) _LibicalWrap.c: $(srcdir)/LibicalWrap.i $(srcdir)/*.i $(top_builddir)/src/libical/ical.h $(top_builddir)/src/libicalss/icalss.h swig -python -Wall $(AM_CPPFLAGS) -o _LibicalWrap.c $(srcdir)/LibicalWrap.i CLEANFILES = _LibicalWrap.c _LibicalWrap_wrap.doc Libical.pyc LibicalWrap.py _LibicalWrap.so EXTRA_DIST = \ $(common_FILES) \ LibicalWrap.i \ python-binding.txt \ ChangeLog libical-1.0/src/python/Time.py0000664000076400007640000001612512132563127015322 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Time.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Time.py,v 1.3 2002-07-12 08:02:46 acampi Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * from Property import Property from types import DictType, StringType, IntType, FloatType from Duration import Duration UTC = icaltimezone_get_utc_timezone() class Time(Property): """ Represent iCalendar DATE, TIME and DATE-TIME """ def __init__(self, arg, name="DTSTART", zone=None): """ Create a new Time from a string or number of seconds past the POSIX epoch Time("19970325T123000Z") Construct from an iCalendar string Time(8349873494) Construct from seconds past POSIX epoch """ e1=icalerror_supress("MALFORMEDDATA") e2=icalerror_supress("BADARG") if isinstance(arg, DictType): # Dictionary -- used for creating from Component self.tt = icaltime_from_string(arg['value']) Property.__init__(self, ref=arg['ref']) else: if isinstance(arg, StringType): # Create from an iCal string self.tt = icaltime_from_string(arg) elif isinstance(arg, IntType) or \ isinstance(arg, FloatType): # Create from seconds past the POSIX epoch if zone: self.tt = icaltime_from_timet_with_zone(int(arg),0,icaltimezone_get_builtin_timezone(zone)) else: self.tt = icaltime_from_timet_with_zone(int(arg),0,icaltimezone_get_utc_timezone()) elif isinstance(arg, Time): # Copy an instance self.tt = arg.tt else: self.tt = icaltime_null_time() Property.__init__(self,type=name) icalerror_restore("MALFORMEDDATA",e1) icalerror_restore("BADARG",e2) if icaltime_is_null_time(self.tt): raise Property.ConstructorFailedError("Failed to construct a Time") try: self._update_value() except Property.UpdateFailedError: raise Property.ConstructorFailedError("Failed to construct a Time") def _update_value(self): self.normalize() self.value(icaltime_as_ical_string(self.tt),"DATE-TIME") def valid(self): " Return true if this is a valid time " return not icaltime_is_null_time(self.tt) def utc_seconds(self,v=None): """ Return or set time in seconds past POSIX epoch""" tz = icaltimezone_get_builtin_timezone(self.timezone()) if (v!=None): self.tt = icaltime_from_timet_with_zone(v,0,tz) self._update_value() return icaltime_as_timet_with_zone(self.tt, tz) def is_utc(self): """ Return a boolean indicating if time is in UTC """ return icaltime_is_utc(self.tt) def is_date(self): """ Return a boolean indicating if time is actually a date """ return icaltime_is_date(self.tt) def timezone(self,v=None): """ Return, set (if none) or alter the timezone for this time """ origtz = icaltime_get_tzid(self.tt) if (v != None): assert(isinstance(v,StringType) ) if (v == "UTC"): tz = icaltimezone_get_utc_timezone() del self['TZID'] else: tz = icaltimezone_get_builtin_timezone(v) if not origtz: self.tt = icaltime_set_timezone(self.tt, tz) else: self.tt = icaltime_convert_to_zone(self.tt,tz) if (icaltime_get_tzid(self.tt) != "UTC"): self['TZID'] = icaltime_get_tzid(self.tt) self._update_value() return icaltime_get_tzid(self.tt) def normalize(self): self.tt = icaltime_normalize(self.tt) def __second_property(self,v=None): """ Get or set the seconds component of this time """ if(v != None): self.tt.second = v self._update_value() return self.tt.second second = property(__second_property, __second_property) def __minute_property(self,v=None): """ Get or set the minute component of this time """ if(v != None): self.tt.minute = v self._update_value() return self.tt.minute minute = property(__minute_property, __minute_property) def __hour_property(self,v=None): """ Get or set the hour component of this time """ if(v != None): self.tt.hour = v self._update_value() return self.tt.hour hour = property(__hour_property, __hour_property) def __day_property(self,v=None): """ Get or set the month day component of this time """ if(v != None): self.tt.day = v self._update_value() return self.tt.day day = property(__day_property, __day_property) def __month_property(self,v=None): """ Get or set the month component of this time. January is month 1 """ if(v != None): self.tt.month = v self._update_value() return self.tt.month month = property(__month_property, __month_property) def __year_property(self,v=None): """ Get or set the year component of this time """ if(v != None): self.tt.year = v self._update_value() return self.tt.year year = property(__year_property, __year_property) def __cmp__(self,other): if other == None: return cmp(self.utc_seconds(),None) return cmp(self.utc_seconds(),other.utc_seconds()) def __add__(self,o): other = Duration(o,"DURATION") if not other.valid(): return Duration(0,"DURATION") print self.utc_seconds(), other.seconds() seconds = self.utc_seconds() + other.seconds() new = Time(seconds,self.name(),self.timezone()) return new def __radd_(self,o): return self.__add__(o) def __sub__(self,o): if isinstance(o,Time): # Subtract a time from this time and return a duration seconds = self.utc_seconds() - other.utc_seconds() return Duration(seconds) elif isinstance(o,Duration): # Subtract a duration from this time and return a time other = Duration(o) if(not other.valid()): return Time() seconds = self.utc_seconds() - other.seconds() return Time(seconds) else: raise TypeError, "subtraction with Time reqires Time or Duration" libical-1.0/src/python/Duration.py0000664000076400007640000000567212132563127016216 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Duration.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Duration.py,v 1.1 2001-04-03 15:18:42 ebusboom Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #=============================================================== from LibicalWrap import * from Property import Property from types import DictType, StringType, IntType class Duration(Property): """ Represent a length of time, like 3 minutes, or 6 days, 20 seconds. """ def __init__(self, arg, name="DURATION"): """ Create a new duration from an RFC2445 string or number of seconds. Construct the duration from an iCalendar string or a number of seconds. Duration("P3DT2H34M45S") Construct from an iCalendar string Duration(3660) Construct from seconds """ self.dur = None e=icalerror_supress("MALFORMEDDATA") if isinstance(arg, DictType): self.dur = icaldurationtype_from_string(arg['value']) Property.__init__(self,ref=arg['ref']) else: if isinstance(arg, StringType): self.dur = icaldurationtype_from_string(arg) elif isinstance(arg, IntType): self.dur = icaldurationtype_from_int(arg) elif isinstance(arg,Duration): self.dur = arg.dur else: self.dur = icaldurationtype_null_duration() Property.__init__(self,type=name) icalerror_restore("MALFORMEDDATA",e) if self.dur == None or icaldurationtype_is_null_duration(self.dur): raise Property.ConstructorFailedError("Failed to construct Duration from " +str(arg)) try: self._update_value() except Property.UpdateFailedError: raise Property.ConstructorFailedError("Failed to construct Duration from " + str(arg)) def _update_value(self): self.value(icaldurationtype_as_ical_string(self.dur),"DURATION") def valid(self): "Return true if this is a valid duration" return not icaldurationtype_is_null_duration(self.dur) def seconds(self,v=None): """Return or set duration in seconds""" if(v != None): self.dur = icaldurationtype_from_int(v); self.dict['value'] = icaltimedurationtype_as_ical_string(self.dur) return icaldurationtype_as_int(self.dur) libical-1.0/src/python/Makefile.in0000664000076400007640000005335612141277614016131 0ustar allenallen# Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # See xapian-bindings for an example of integrating autotools, swig and python VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/python DIST_COMMON = $(pkgpython_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/py-compile ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pyexecdir)" "$(DESTDIR)$(pkgpythondir)" LTLIBRARIES = $(pyexec_LTLIBRARIES) _LibicalWrap_la_DEPENDENCIES = $(top_builddir)/src/libical/libical.la \ $(top_builddir)/src/libicalss/libicalss.la am__LibicalWrap_la_OBJECTS = _LibicalWrap.lo _LibicalWrap_la_OBJECTS = $(am__LibicalWrap_la_OBJECTS) _LibicalWrap_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(_LibicalWrap_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(_LibicalWrap_la_SOURCES) DIST_SOURCES = $(_LibicalWrap_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) py_compile = $(top_srcdir)/py-compile ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ BUILT_SOURCES = _LibicalWrap.c pyexec_LTLIBRARIES = _LibicalWrap.la common_FILES = \ __init__.py \ Libical.py \ test.py \ Attendee.py \ Collection.py \ Component.py \ DerivedProperties.py \ Duration.py \ Error.py \ Gauge.py \ Period.py \ Property.py \ Store.py \ Time.py # Install as python source so the code gets byte-compiled at install time. pkgpython_PYTHON = \ $(common_FILES) \ LibicalWrap.py # To allow non-standard library names (ie those not prefixed by "lib") see: # http://sources.redhat.com/automake/automake.html#Libtool-Modules _LibicalWrap_la_SOURCES = _LibicalWrap.c _LibicalWrap_la_LDFLAGS = -avoid-version -module -lc _LibicalWrap_la_LIBADD = $(top_builddir)/src/libical/libical.la \ $(top_builddir)/src/libicalss/libicalss.la AM_CPPFLAGS = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ -I$(top_srcdir)/src/libicalss \ $(PY_CFLAGS) CLEANFILES = _LibicalWrap.c _LibicalWrap_wrap.doc Libical.pyc LibicalWrap.py _LibicalWrap.so EXTRA_DIST = \ $(common_FILES) \ LibicalWrap.i \ python-binding.txt \ ChangeLog all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/python/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/python/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pyexecLTLIBRARIES: $(pyexec_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pyexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pyexecdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pyexecdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pyexecdir)"; \ } uninstall-pyexecLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pyexec_LTLIBRARIES)'; test -n "$(pyexecdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pyexecdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pyexecdir)/$$f"; \ done clean-pyexecLTLIBRARIES: -test -z "$(pyexec_LTLIBRARIES)" || rm -f $(pyexec_LTLIBRARIES) @list='$(pyexec_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } _LibicalWrap.la: $(_LibicalWrap_la_OBJECTS) $(_LibicalWrap_la_DEPENDENCIES) $(EXTRA__LibicalWrap_la_DEPENDENCIES) $(_LibicalWrap_la_LINK) -rpath $(pyexecdir) $(_LibicalWrap_la_OBJECTS) $(_LibicalWrap_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_LibicalWrap.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgpythonPYTHON: $(pkgpython_PYTHON) @$(NORMAL_INSTALL) @list='$(pkgpython_PYTHON)'; dlist=; list2=; test -n "$(pkgpythondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgpythondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgpythondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgpythondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgpythondir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ $(am__py_compile) --destdir "$(DESTDIR)" \ --basedir "$(pkgpythondir)" $$dlist; \ else :; fi uninstall-pkgpythonPYTHON: @$(NORMAL_UNINSTALL) @list='$(pkgpython_PYTHON)'; test -n "$(pkgpythondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ dir='$(DESTDIR)$(pkgpythondir)'; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ st=0; \ for files in "$$files" "$$filesc" "$$fileso"; do \ $(am__uninstall_files_from_dir) || st=$$?; \ done; \ exit $$st ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pyexecdir)" "$(DESTDIR)$(pkgpythondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool clean-pyexecLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgpythonPYTHON install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pyexecLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgpythonPYTHON uninstall-pyexecLTLIBRARIES .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-pyexecLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgpythonPYTHON install-ps install-ps-am \ install-pyexecLTLIBRARIES install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-pkgpythonPYTHON \ uninstall-pyexecLTLIBRARIES _LibicalWrap.c: $(srcdir)/LibicalWrap.i $(srcdir)/*.i $(top_builddir)/src/libical/ical.h $(top_builddir)/src/libicalss/icalss.h swig -python -Wall $(AM_CPPFLAGS) -o _LibicalWrap.c $(srcdir)/LibicalWrap.i # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/src/python/LibicalWrap.i0000664000076400007640000001544512132563127016421 0ustar allenallen/* -*- Mode: C -*-*/ /*====================================================================== FILE: ical.i (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The original author is Eric Busboom Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ %module LibicalWrap %{ #include "libical/ical.h" #include "libicalss/icalss.h" #include /* for size_t */ #include %} %pythoncode %{ import Error %} %feature("autodoc", "1"); typedef int time_t; // This is declared as an extern, but never used in the library. %ignore icalfileset_safe_saves; // Ignore these declarations because there does not exist a definition for them %ignore _icalerror_set_errno(icalerrorenum); %ignore icalattachtype_add_reference(struct icalattachtype* v); %ignore icalattachtype_get_binary(struct icalattachtype* v); %ignore icalattachtype_set_binary(struct icalattachtype* v, char* binary, int owns); %ignore icalattachtype_get_url(struct icalattachtype* v); %ignore icalattachtype_set_url(struct icalattachtype* v, char* url); %ignore icalattachtype_free(struct icalattachtype* v); %ignore icalattachtype_get_base64(struct icalattachtype* v); %ignore icalattachtype_new(void); %ignore icalattachtype_set_base64(struct icalattachtype* v, char* base64, int owns); %ignore icalclassify_class_to_string(icalproperty_xlicclass c); %ignore icalfileset_new_from_cluster(const char* path, icalcluster *cluster); %ignore icalgauge_as_sql(icalcomponent* gauge); %ignore icalgauge_new_clone(icalgauge* g, icalcomponent* comp); %ignore icallangbind_get_component(icalcomponent *c, const char* comp); %ignore icallangbind_get_parameter(icalproperty *p, const char* parameter); %ignore icallangbind_get_property(icalcomponent *c, int n, const char* prop); %ignore icallangbind_get_property_val(icalproperty* p); %ignore icalmessage_new_cancel_all(icalcomponent* c, const char* user, const char* msg); %ignore icalmessage_new_cancel_event(icalcomponent* c, const char* user, const char* msg); %ignore icalmessage_new_cancel_instance(icalcomponent* c, const char* user, const char* msg); %ignore icalmime_as_mime_string(char* icalcomponent); %ignore icalparameter_is_valid(icalparameter* parameter); %ignore icalparser_parse_value(icalvalue_kind kind, const char* str, icalcomponent** errors); %ignore icalrecur_iterator_decrement_count(icalrecur_iterator*); %ignore icalrestriction_is_parameter_allowed(icalproperty_kind property, icalparameter_kind parameter); %ignore icalset_clear_select(icalset* set); %ignore icalspanlist_make_free_list(icalspanlist* sl); %ignore icalspanlist_make_busy_list(icalspanlist* sl); %ignore icalspanlist_next_busy_time(icalspanlist* sl, struct icaltimetype t); %ignore icaltime_compare_with_zone(const struct icaltimetype a, const struct icaltimetype b); %ignore icaltime_days_in_year (const int year); %ignore icaltime_from_string_with_zone(const char* str, const icaltimezone *zone); %ignore icaltime_from_week_number(const int week_number, const int year); %ignore icaltime_is_floating(const struct icaltimetype t); %ignore icaltimezonetype_free(struct icaltimezonetype tzt); // Remove depreciated functions %ignore icalproperty_string_to_enum(const char* str); %ignore icaltimezone_get_utc_offset(icaltimezone *zone, struct icaltimetype *tt, int *is_daylight); %ignore icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight); %ignore icaltime_start_doy_of_week(const struct icaltimetype t); %ignore icalcomponent_get_span(icalcomponent* comp); %ignore icalproperty_remove_parameter(icalproperty* prop, icalparameter_kind kind); // Can't wrap va_list %ignore icalproperty_add_parameters(struct icalproperty_impl *prop, va_list args); #ifndef _DLOPEN_TEST %ignore icalset_register_class(icalset *set); #endif //#include "fcntl.h" /* For Open flags */ %include "libical/ical.h" %include "libicalss/icalss.h" %inline %{ /* declare some internal functions which are not in the header file. */ void icalproperty_set_parent(icalproperty* property, icalcomponent* component); icalcomponent* icalproperty_get_parent(const icalproperty* property); void icalvalue_set_parent(icalvalue* value, icalproperty* property); icalproperty* icalvalue_get_parent(icalvalue* value); void icalparameter_set_parent(icalparameter* param, icalproperty* property); icalproperty* icalparameter_get_parent(icalparameter* value); %} %pythoncode %{ # Helper functions for overriding default swig property methods def _swig_set_properties(cls, properties={}): for propname, props in properties.items(): if len(props) > 0: cls.__swig_getmethods__[propname] = props[0] if len(props) > 1: cls.__swig_setmethods__[propname] = props[1] # Currently not used by swig if len(props) > 2: cls.__swig_delmethods__[propname] = props[2] if _newclass: setattr(cls, propname, _swig_property(*props)) def _swig_remove_private_properties(cls, properties=tuple()): # By default remove all properties if not properties: props = cls.__swig_getmethods__.copy() props.update(cls.__swig_setmethods__) #props.update(cls.__swig_delmethods__) properties = props.keys() for propname in properties: if cls.__swig_getmethods__.has_key(propname): del cls.__swig_getmethods__[propname] if cls.__swig_setmethods__.has_key(propname): del cls.__swig_setmethods__[propname] # Currently not used by swig #if cls.__swig_delmethods__.has_key(propname): # del cls.__swig_delmethods__[propname] if _newclass and hasattr(cls, propname): delattr(cls, propname) import new def _swig_add_instance_methods(klass, meth_dict={}): for methname, func in meth_dict.items(): meth = new.instancemethod(func, None, klass) if not methname: methname = func.__name__ func.__name__ = methname setattr(klass, methname, meth) %} %include "LibicalWrap_icaltimezone.i" %include "LibicalWrap_icaltime.i" libical-1.0/src/python/python-binding.txt0000664000076400007640000002536712132563127017554 0ustar allenallen Classes for python binding to libical (Indentation indicates inheritance) Component Event JournalEntry Todo FreeBusy Timezone Alarm AudioAlarm EmailAlarm ProcedureAlarm DisplayAlarm Property Attendee Organizer Status Error Time Period Date RecurrenceSet Timezone TimezonePhase Store FileStore DirStore CAPStore HeapStore MySQLStore Component is the central class in the design. The component can be though of as a container for child components and properties, or as representation of a specific kind of iCal object. The first interface offers general property and component accessors, and the second treats some types of objects in a special way. The general interface offers simple manipulators for child property and components, and it only works with immediate children. So, given the Component: BEGIN:VCALENDAR METHOD:PUBLISH BEGIN:VEVENT BEGIN:VALARM COMMENT: An Alarm END:VALARM END:VEVENT END:VCALENDAR A caller would have to descend three levels to access the COMMENT property in the alarm, but only one to access the METHOD property. Libical is almost entirely dedicated to the general interface; it includes all of the *get_first_*, *_next_next_*, *_add_* and *_remove_* routines. The specific interface works with derived classes of Property and Component. In this interface, the caller could get the COMMENT in the alarm in the example in two steps. First the caller would ask the Event object for its alarms, then then the caller would ask the first Alarm object for its comment. The Specific interface is part of the derived classes of Component. This interface names all of the types of properties and components that can be accessed from the derived component type. In libical, the specific interface is primarily the "convenience routines in icalcomponent.h, such as: struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp); void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v); void icalcomponent_set_duration(icalcomponent* comp, struct icaldurationtype v); struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp); These routines are smarter and do more work than the general interface. From the general interface, you can set the DTEND property of a component by creating the property and adding it to a component. But, if the component already has a DURATION property, then this is an error -- a component can't have both. icalcomponent_set_dtend determines if the component already has a DURATION. If it does, it substracts the dtstart time from the new dtend time and sets the duration to that. Otherwise, it creates aor changes the DTEND. Also, icalcomponent_set_duration works the same regardless if the component is a VCALENDAR or a VEVENT. If it is a VCALENDAR, the routine descends into the VEVENT before making any changes. If it is allready a VEVENT ( or VTODO or VJOURNAL ) the routine just makes the changes. With icalcomponent_add_property, you need to do this check yourself. ( There should probably be a class between Component and Event ,JournalEntry and Todo that names all of the properties and components. Then Event, JournalEntry and Todo would remove the accessors that did not apply to them. ) Parameters are accessed as dictionaries from Property or as attributes of a derived class of Property. Both the names and the values of the parameters are strings. The Store hierarchy is a interface to various ways to store iCal components. Each of these has the same interface as its corresponding libical module: FileStore icalfileset Store iCal components in a single file DirStore icaldirset Use multiple files, one per month of DTSTART CAPStore Access components in a CAP server HeapStore Components stored in memory MySQLStore Components stored in a MySQL database. The only iCal value objects that will be implemented as Python classes are Time, Duration and Period. RecurrenceSet handles recurrence rules. It replaces the properties RRULE, RDATE, EXRULE and EXDATE. (Not all of the libical modules are implemented ) How to Use the library ---------------------- The most common usecases will be something like this: 1)Caller opens a Store object on a file, server or database. The caller retrieves one or more component. Some of the components will be booked on the user's calendar. Other components will be messages that other users have sent, like requests for meetings. 2) The caller will use the Specific interface ( using methods specific to each property ) to example the component and decide what to do with it. 3) Rarely, the caller will access the general interface to do things that the specific interface has not implemented or cannot manage well. 4) Caller may create a new component, using a combination of the general and specific interfaces. The caller may send the message to another user via mail, or may submit it to the user's CAP server with the CAPStore class. Following are the methods in each of the classes. Component Construct from string Output string in ical form Get a Property by type Get a set of Properties by type Remove a Property by reference Get a Component by type Get a set of Components by type Remove a Component by reference Validate the component ( insert properties for errors ) Count error properties Remove error properties Convert error properties into REQUEST-STATUS properties Event, JournalEntry, Todo Construct from string Output string in ical form There are get/set accessors for every property. These are listed in a later section FreeBusy Construct from string Construct from arguments Output string in ical form Accessors for the following properties. See below for return types for these properties: method prodid attendee dtstamp dtstart freebusy organizer uid comment contact request-status url duration sequence TimezonePhase Construct from string Construct from arguments Output string in ical form Accessors for the following properties. See below for return types for these properties: tzname offsetto offsetfrom rrule rdate comment TimeZone Construct from string Construct from arguments Output string in ical form Accessors for the following properties. See below for return types for these properties: tzid last-modified tzurl standard (returns TimezonePhase) daylight (returns TimezonePhase) Property Construct from string Construct from arguments Output string in ical form Dictionary access to parameters Get/set value Attendee Construct from string Construct from arguments Output string in ical form Access to the following properties and parameters: cuid cutype member role rsvp delto delfrom sentby cn dir language Organizer Access to the following properties: common_name dir sentby language Time Date Period Same interfaces as libical modules. RecurenceSet I don't know -- need to think about it more. Store Similar methods to the icalset modules. RFC2445 Properties This is a list of all of the RFC2445 properties and their associated VALUE type. Property Value ---------------------------- CALSCALE TEXT METHOD TEXT PRODID TEXT VERSION TEXT CATEGORIES TEXT CLASS TEXT COMMENT TEXT DESCRIPTION TEXT LOCATION TEXT PERCENT-COMPLETE INTEGER PRIORITY INTEGER RESOURCES TEXT STATUS STATUS SUMMARY TEXT COMPLETED DATE-TIME FREEBUSY PERIOD TRANSP TEXT TZNAME TEXT TZOFFSETFROM UTC-OFFSET TZOFFSETTO UTC-OFFSET TZURL URI TZID TEXT ATTENDEE CAL-ADDRESS CONTACT TEXT ORGANIZER CAL-ADDRESS RELATED-TO TEXT URL URI UID TEXT EXRULE RECUR RRULE RECUR ACTION TEXT REPEAT INTEGER CREATED DATE-TIME DTSTAMP DATE-TIME LAST-MODIFIED DATE-TIME SEQUENCE INTEGER X TEXT REQUEST-STATUS STRING ATTACH URL, BINARY GEO FLOAT DTEND DATE-TIME DUE DATE-TIME DTSTART DATE-TIME RECURRENCE-ID DATE-TIME EXDATE DATE-TIME RDATE DATE-TIME, PERIOD TRIGGER DATE-TIME, DURATION DURATION DURATION Some of the properties can appear multiple times in a component, other can appear only once. For a particular component, the number of times a property can apper may also change with the METHOD property associated with the component. This list shows which properties can appear multiple times for some ( but not all ) combinations of component type and METHOD value: ATTACH ATTENDEE CATEGORIES COMMENT CONTACT EXDATE EXRULE FREEBUSY NONE RDATE RELATEDTO REQUESTSTATUS RESOURCES RRULE TZNAME TZURL X This is a list of the value types and their associated python return types. A lowercased return type is a python builtin, and an uppercase-first-letter is a class in the library: Value Return Type ----------------------------------- BINARY file BOOLEAN number CAL-ADDRESS string DATE Time DATE-TIME Time DURATION Duration FLOAT number GEO tuple INTEGER number METHOD string PERIOD Period RECUR RecurrenceSet TEXT string TIME Time URI string UTC-OFFSET number STATUS string X string I suspect that the Component class should use the three previous tables to create the property accessor methods on the fly. If the method generation system is general enough, we could also use it for other classes, such as Alarm, Timezone, Attendee, Organizer and Freebusy. Memory Handling --------------- One of the things that made the perl binding to libcal difficult was that if a Component (in perl) returns a reference to a child Component (in perl), the child Component (in perl) will contain a reference to a libical component. When the caller is done with the child component in perl, the caller just drops it and lets perl reclaim the memory. The destructor for Component needs to free the libical component that it holds a reference to, but the child's libical component is still being used by libical. So perl frees the libical component and later, libical tries to reference freed memory. The situation is actually a little better than that, because libical will throw an error when you try to free a component that is still attached to a parent. So, the perl library has to be able to determine when the destructor should free a libical component or not. The perl library calls icalcomponent_get_parent(), and if is it non-zero, it does not free the component. It is not hard, just more code, and something to watch out for. libical-1.0/src/python/Component.py0000664000076400007640000006636312132563127016377 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Component.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Component.py,v 1.15 2002-10-24 13:41:17 acampi Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * from types import DictType, StringType, IntType from Property import Property from Collection import * from Attendee import Attendee, Organizer from Time import Time from Duration import Duration from Period import Period import string WrapperNULL = None # Swig objects are natively unhashable, so we hash on the pointer val. class SwigRefHash(dict): def __getitem__(self, k): return dict.__getitem__(self, int(k)) def __setitem__(self, k, v): return dict.__setitem__(self, int(k), v) def __delitem__(self, k): dict.__delitem__(self, int(k)) def has_key(self, k): return dict.has_key(self, int(k)) class Component(object): def __init__(self,ref=None,kind=None): self._ref = None if ref != None: self._ref = ref elif kind != None: self._ref = icalcomponent_new( icalcomponent_string_to_kind("VCALENDAR")) _kind = icalcomponent_string_to_kind(kind) inner = icalcomponent_new(_kind) icalcomponent_add_component(self._ref,inner); else: raise "Could not construct component of kind" + kind self.cached_props = SwigRefHash() self.cached_comps = SwigRefHash() def __del__(self): if self._ref != None and icalcomponent_get_parent(self._ref) != WrapperNULL: for k in self.cached_props.keys(): del self.cached_props[k] icalcomponent_free(self._ref) self._ref = None def _prop_from_ref(self,p): if(p == None or p== WrapperNULL): return None; d = {} d['value'] = icalproperty_get_value_as_string(p) d['name'] = icalproperty_get_property_name(p) propkind = icalproperty_string_to_kind(d['name']) kind = icalproperty_kind_to_value_kind(propkind) d['value_type'] = icalvalue_kind_to_string(kind) d['ref'] = p #~ print p, Property(ref=p).name() if not self.cached_props.has_key(p): if d['value_type'] == 'DATE-TIME' or d['value_type'] == 'DATE': prop = Time(d,) elif d['value_type'] == 'PERIOD': prop = Period(d) elif d['value_type'] == 'DURATION': prop = Duration(d) elif d['name'] == 'ATTACH': prop = Attach(d) elif d['name'] == 'ATTENDEE': prop = Attendee(d) elif d['name'] == 'ORGANIZER': prop = Organizer(d) else: prop=Property(ref=p) self.cached_props[p] = prop def property(self, type): p = icallangbind_get_first_property(self._ref,type) if p !=WrapperNULL: self._prop_from_ref(p) prop = self.cached_props[p] return prop else : return None def properties(self,type='ANY'): """ Return a list of Property instances, each representing a property of the type 'type.' """ props = [] p = icallangbind_get_first_property(self._ref,type) while p !=WrapperNULL and p != None: self._prop_from_ref(p) # Puts property in self.cached_props prop = self.cached_props[p] props.append(prop) p = icallangbind_get_next_property(self._ref,type) return Collection(self,props) def add_property(self, prop): "Adds the property object to the component." if not isinstance(prop,Property): raise TypeError prop_p = prop.ref() if not prop_p: s = str(prop) prop_p = icalproperty_new_from_string(s) if prop_p == WrapperNULL: raise "Bad property string: " + s prop.ref(prop_p) if icalproperty_get_parent(prop_p)==WrapperNULL: icalcomponent_add_property(self._ref, prop_p) elif icalproperty_get_parent(prop_p) != self._ref: raise "Property is already a child of another component" def remove_property(self,prop): if prop.ref() and self.cached_props.has_key(prop.ref()): del self.cached_props[prop.ref()] icalcomponent_remove_property(self._ref,prop.ref()) def components(self,type='ANY'): comps = [] kind = icalcomponent_string_to_kind(type) c = icalcomponent_get_first_component(self._ref,kind); while c != WrapperNULL and c != None: if not self.cached_comps.has_key(c): self.cached_comps[c] = Component(c) comp = self.cached_comps[c] comps.append(comp) c = icalcomponent_get_next_component(self._ref,kind); return ComponentCollection(self, comps) def inner_component(self): inner = icalcomponent_get_inner(self._ref) if inner == WrapperNULL and inner != None: return None return NewComponent(inner) def add_component(self, comp): "Adds a child component." if not isinstance(comp,Component): raise ValueError("Expected a Component") if icalcomponent_get_parent(comp._ref) != WrapperNULL: raise "Failed to add child component. Child already has a parent"; icalcomponent_add_component(self._ref,comp._ref) def remove_component(self, comp): "Removes a child component" if not isinstance(comp,Component): raise ValueError("Expected a Component") icalcomponent_remove_component(self._ref,comp._ref) def as_ical_string(self): return self.__str__() def __str__(self): return icalcomponent_as_ical_string(self._ref) def name(self): k = icalcomponent_isa(self._ref) return icalcomponent_kind_to_string(k) def ref(self): """ Return the internal reference to the libical icalproperty """ return self._ref def CloneComponent(c): "Clones a string or C icalcomponent into the right component object." wasStr=0 # Were we passed a string or an icalcomponent? if isinstance(c, Component): comp = icalparser_parse_string(c.as_ical_string()) elif isinstance (c, StringType) and string.find(c,"icalcomponent") == -1: comp = icalparser_parse_string(c) else: comp = c if comp == None or comp == WrapperNULL: raise ValueError("Expected a libical reference or an iCal string") kind = icalcomponent_isa(comp) kindStr = icalcomponent_kind_to_string(kind) if kindStr == 'VCALENDAR': inner = icalcomponent_get_inner(comp) kind = icalcomponent_isa(inner) kindStr = icalcomponent_kind_to_string(kind) if kindStr == 'VEVENT': newComp = Event(comp) elif kindStr == 'VTODO': newComp = Todo(comp) elif kindStr == 'VJOURNAL': newComp = Journal(comp) else: newComp = Component(comp) # I don't think I need to free the component created when passed a string, # as it wasn't created with a _new function. return newComp def NewComponent(c): "Converts a string or C icalcomponent into the right component object." wasStr=0 # Were we passed a string or an icalcomponent? if isinstance (c, StringType) and string.find(c,"icalcomponent") == -1: comp = icalparser_parse_string(c) else: comp = c if comp == None or comp == WrapperNULL: raise ValueError("Expected a libical reference or an iCal string") kind = icalcomponent_isa(comp) kindStr = icalcomponent_kind_to_string(kind) if kindStr == 'VEVENT': newComp = Event(comp) elif kindStr == 'VTODO': newComp = Todo(comp) elif kindStr == 'VJOURNAL': newComp = Journal(comp) else: newComp = Component(comp) # I don't think I need to free the component created when passed a string, # as it wasn't created with a _new function. return newComp class GenericComponent(Component): def __init__(self,ref=None,kind=None): if ref != None: Component.__init__(self, ref=ref) # Call from subclasses elif type != None: Component.__init__(self, kind=kind) # Call from subclasses else: raise ValueError("Expected either a icalcomponent reference or a kind string") self._recurrence_set=None def _singular_property(self, name, value_type, value=None, property_obj=None, enumerated_values=None): """Sets or gets the value of a method which exists once per Component. This is a constructor method for properties without a strictly defined object.""" # Depending on the property name, this routine will either # operate on the VCALENDAR container or on the inner VEVENT, # VTODO, or VJOURNAL if name in ['METHOD','PRODID','CALSCALE','VERSION']: comp = self else: comp = self.inner_component() curr_properties = comp.properties(name) # Get the value if value==None: if len(curr_properties) == 0: return None elif len(curr_properties) == 1: return curr_properties[0] else: raise ValueError, "too many properties of type %s" % propType # Set the value else: # Check if value is in enumerated_values if enumerated_values: value = string.upper(value) if value not in enumerated_values: raise ValueError, "%s is not one of %s" \ % (value, enumerated_values) # Create the new property if property_obj: if not isinstance(value, property_obj): # Create a special property_obj property if property_obj == Time: p = Time(value, name) ## p.value_type(value_type) elif property_obj == Duration: p = Duration(value) else: p = property_obj() ## p.value_type(value_type) p.value(value) else: p = value # value is already a property_obj else: # Create a generic property p = Property(name) ## p.value_type(value_type) p.value(value) if len(curr_properties) == 1: comp.remove_property(curr_properties[0]) elif len(curr_properties) > 1: raise ValueError, "too many properties of type %s" % propType comp.add_property(p) # METHOD, PRODID, CALSCALE and VERSION are properties of the # VCALENDAR, not the inner component def method(self, v=None): "Sets or returns the value of the METHOD property." return self._singular_property("METHOD", "TEXT", v) def prodid(self, v=None): "Sets or returns the value of the PRODID property." return self._singular_property("PRODID", "TEXT", v) def calscale(self, v=None): "Sets or returns the value of the CALSCALE property." return self._singular_property("CALSCALE", "TEXT", v) def version(self, v=None): "Sets or returns the value of the Version property." return self._singular_property("VERSION", "TEXT", v) # The remaining properties are all in the inner component def clone(self): "Returns a copy of the object." return CloneComponent(self) def class_prop(self, v=None): # Class is a reserved word "Sets or returns the value of the CLASS property." if v!=None: v = string.upper(v) return self._singular_property('CLASS', 'TEXT', v) def created(self, v=None): """Sets or returns the value of the CREATED property. Usage: created(time_obj) # Set the value using a Time object created('19970101T123000Z') # Set using an iCalendar string created(982362522) # Set using seconds created() # Return an iCalendar string """ return self._singular_property("CREATED", "DATE-TIME", v, Time) def description(self, v=None): "Sets or returns the value of the DESCRIPTION property." return self._singular_property("DESCRIPTION", "TEXT", v) def dtstamp(self, v=None): """Sets or returns the value of the DTSTAMP property. Usage: dtstamp(time_obj) # Set the value using a Time object dtstamp('19970101T123000Z')# Set using an iCalendar string dtstamp(982362522) # Set using seconds dtstamp() # Return an iCalendar string """ return self._singular_property("DTSTAMP", "DATE-TIME", v, Time) def dtstart(self, v=None): """Sets or returns the value of the DTSTART property. Usage: dtstart(time_obj) # Set the value using a Time object dtstart('19970101T123000Z') # Set the value as an iCalendar string dtstart(982362522) # Set the value using seconds (time_t) dtstart() # Return the time as an iCalendar string """ return self._singular_property("DTSTART", "DATE-TIME", v, Time) def last_modified(self, v=None): """Sets or returns the value of the LAST-MODIFIED property. Usage: last_modified(time_obj) # Set the value using a Time object last_modified('19970101T123000Z')# Set using an iCalendar string last_modified(982362522) # Set using seconds last_modified() # Return an iCalendar string """ return self._singular_property("LAST-MODIFIED", "DATE-TIME", v, Time) def organizer(self, v=None): """Sets or gets the value of the ORGANIZER property. Usage: organizer(orgObj) # Set value using an organizer object organizer('MAILTO:jd@not.com') # Set value using a CAL-ADDRESS string organizer() # Return a CAL-ADDRESS string """ return self._singular_property('ORGANIZER', 'CAL-ADDRESS', v, Organizer) def recurrence_id(self, v=None): """Sets or gets the value for the RECURRENCE-ID property. Usage: recurrence_id(recIdObj) # Set using a Recurrence_Id object recurrence_id("19700801T133000") # Set using an iCalendar string recurrence_id(8349873494) # Set using seconds from epoch recurrence_id() # Return an iCalendar string """ return self._singular_property('RECURRENCE-ID', 'DATE-TIME', v, Recurrence_Id) def sequence(self, v=None): """Sets or gets the SEQUENCE value of the Event. Usage: sequence(1) # Set the value using an integer sequence('2') # Set the value using a string containing an integer sequence() # Return an integer """ if isinstance(v, StringType): v = int(str) return self._singular_property('SEQUENCE', 'INTEGER', v) def summary(self, v=None): "Sets or gets the SUMMARY value of the Event." return self._singular_property('SUMMARY', 'TEXT', v) def uid(self, v=None): "Sets or gets the UID of the Event." return self._singular_property('UID', 'TEXT', v) def url(self, v=None): """Sets or returns the URL property.""" return self._singular_property('URL', 'URI', v) #### # Not quite sure if this is how we want to handle recurrence rules, but # this is a start. def recurrence_set(self): "Returns the Events RecurrenceSet object." if self._recurrence_set == None: # i.e haven't initialized one self._recurrence_set = RecurrenceSet() return self._recurrence_set ### # Alarm interface. Returns an ComponentCollection. def alarms(self, values=None): """Sets or returns ALARM components. Examples: alarms((alarm1,)) # Set using Alarm component alarms() # Returns an ComponentCollection of all Alarms """ if values!=None: for alarm in values: self.add_component(alarm) else: return self.components('VALARM') #### # Methods that deal with Properties that can occur multiple times are # below. They use the Collection class to return their Properties. def _multiple_properties(self, name, value_type, values, property_obj=None): "Processes set/get for Properties that can have multiple instances." comp = self.inner_component() # Set value if values!=None: if not isinstance(values, TupleType) \ and not isinstance(values, ListType): raise TypeError, "%s is not a tuple or list." # Delete old properties for p in comp.properties(name): comp.remove_property(p) for v in values: if property_obj: # Specialized properties if not isinstance(v, property_obj): # Make new object new_prop = property_obj() new_prop.value(v) else: # Use existing object new_prop = v else: # Generic properties new_prop=Property(name) # new_prop.value_type(value_type) new_prop.value(v) comp.add_property(new_prop) # Get value else: return Collection(self, comp.properties(name)) def attachments(self, values=None): """Sets or returns a Collection of Attach properties. 'values' can be a sequence containing URLs (strings) and/or file-ish objects. """ return self._multiple_properties("ATTACH", "", value, Attach) def attendees(self, value=None): """Sets attendees or returns a Collection of Attendee objects. If setting the attendees, pass a sequence as the argument. Examples: # Set using Attendee objects attendees((attObj1, attObj2)) # Set using a CAL-ADDRESS string attendees(['MAILTO:jdoe@somewhere.com']) # Set using a combination of Attendee objects and strings attendees(['MAILTO:jdoe@somewhere.com', attObj1]) # Returns a list of Attendee objects attendees() When setting the attendees, any previous Attendee objects in the Event are overwritten. If you want to add to the Attendees, one way to do it is: attendees().append(Attendee('MAILTO:jdoe@nothere.com')) """ return self._multiple_properties("ATTENDEE", "", value, Attendee) def categories(self, value=None): """Sets categories or returns a Collection of CATEGORIES properties. If setting the categories, pass a sequence as the argument. Examples: # Set using string[s] categories(('APPOINTMENT', 'EDUCATION')) # Returns a list of Category properites categories() When setting the attendees, any previous category Properties in the Event are overwritten. If you want to add to the categories, one way to do it is: new_cat=Property('CATEGORIES') new_cat.value_type('TEXT') new_cat.value('PERSONAL') categories().append(new_cat) """ return self._multiple_properties("CATEGORIES", "TEXT", value) def comments(self, value=None): "Sets or returns a Collection of COMMENT properties." return self._multiple_properties('COMMENT', 'TEXT', value) def contacts(self, value=None): "Sets or returns a Collection of CONTACT properties." return self._multiple_properties('CONTACT', 'TEXT', value) def related_tos(self, value=None): "Sets or returns a Collection of RELATED-TO properties." return self._multiple_properties('RELATED-TO', 'TEXT', value) def x_properties(self, name, value=None): "Sets or returns a Collection of X- properties." return self._multiple_properties(name, 'TEXT', value) class Event(GenericComponent): "The iCalendar Event object." def __init__(self,ref=None): if ref != None: GenericComponent.__init__(self, ref=ref) else: GenericComponent.__init__(self, kind='VEVENT') def component_type(self): "Returns the type of component for the object." return "VEVENT" def dtend(self, v=None): """Sets or returns the value of the DTEND property. Usage: dtend(time_obj) # Set the value using a Time object dtend('19970101T123000Z') # Set the value as an iCalendar string dtend(982362522) # Set the value using seconds (time_t) dtend() # Return the time as an iCalendar string If the dtend value is being set and duration() has a value, the duration property will be removed. """ if v != None: duration = self.properties('DURATION') for d in duration: # Clear DURATION properties self.remove_property(d) return self._singular_property("DTEND", "DATE-TIME", v, Time) def duration(self, v=None): """Sets or returns the value of the duration property. Usage: duration(dur_obj) # Set the value using a Duration object duration("P3DT12H") # Set value as an iCalendar string duration(3600) # Set duration using seconds duration() # Return duration as an iCalendar string If the duration value is being set and dtend() has a value, the dtend property will be removed. """ if v != None: dtend = self.properties('DTEND') for d in dtend: self.remove_property(d) # Clear DTEND properties return self._singular_property("DURATION", "DURATION", v, Duration) def status(self, v=None): "Sets or returns the value of the STATUS property." # These values are only good for VEVENT components (i.e. don't copy # & paste into VTODO or VJOURNAL valid_values=('TENTATIVE', 'CONFIRMED', 'CANCELLED') return self._singular_property("STATUS", "TEXT", v, enumerated_values=valid_values) def geo(self, v=None): """Sets or returns the value of the GEO property. Usage: geo(value) or geo() # Returns the icalendar string 'value' is either a icalendar GEO string or a sequence with two 'float' numbers. Examples: geo('40.232;-115.9531') # Set value using string geo((40.232, -115.9531)) # Set value using a sequence geo() # Returns "40.232;-115.9531" To get the GEO property represented as a tuple and numbers instead of the iCalendar string, use geo_get_tuple(). """ if isinstance(v, ListType) or isinstance(v, TupleType): v = "%s;%s" % (float(v[0]), float(v[1])) return self._singular_property("GEO", "FLOAT", v) def geo_get_tuple(self): """Returns the GEO property as a tuple.""" geo = self.geo() geo = split(geo, ';') return float(geo[0]), float(geo[1]) def location(self, v=None): """Sets or returns the LOCATION property.""" return self._singular_property("LOCATION", "TEXT", v) def transp(self, v=None): """Sets or returns the TRANSP property.""" ok_values = ('OPAQUE', 'TRANSPARENT') return self._singular_property('TRANSP', 'TEXT', v, enumerated_values=ok_values) def resources(self, v=None): pass class Todo(GenericComponent): "The iCalendar TODO component." def __init__(self,ref=None): if ref != None: GenericComponent.__init__(self, ref=ref) else: GenericComponent.__init__(self, kind='VTODO') def component_type(self): "Returns the type of component for the object." return "VTODO" def completed(self, value=None): return self._singular_property('COMPLETED', 'DATE-TIME', value, Time) def geo(self, value=None): if isinstance(v, ListType) or isinstance(v, TupleType): v = "%s;%s" % (float(v[0]), float(v[1])) return self._singular_property("GEO", "FLOAT", value) def location(self, value=None): return self._singular_property('LOCATION', 'TEXT', value) def percent(self, value=None): if value!=None: value = str(int(value)) return self._singular_property('PERCENT', 'INTEGER', value) def status(self, value=None): if value!=None: value=string.upper(value) ok_values = ('NEEDS-ACTION', 'COMPLETED', 'IN-PROCESS', 'CANCELLED') return self._singular_property('STATUS', 'TEXT', value, enumerated_values=ok_values) def due(self, value=None): if value != None: duration = self.properties('DURATION') for d in duration: self.remove_property(d) # Clear DURATION properties return self._singular_property('DUE', 'DATE-TIME', value, Time) def duration(self, value=None): if value != None: due = self.properites('DUE') for d in due: self.remove_property(d) # Clear DUE properties return self._singular_property("DURATION", "DURATION", value, Duration) def resources(): pass class Journal(GenericComponent): "The iCalendar JOURNAL component." def __init__(self): if ref != None: GenericComponent.__init__(self, ref=ref) else: GenericComponent.__init__(self, kind='VJOURNAL') def component_type(self): "Returns the type of component for the object." return "VJOURNAL" def status(self, v=None): if v!=None: v = string.upper(v) ok_values=('DRAFT', 'FINAL', 'CANCELLED') return self._singular_property('STATUS', 'TEXT', v, enumerated_values=ok_values) libical-1.0/src/python/Libical.py0000664000076400007640000000236412132563127015763 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Libical.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Libical.py,v 1.19 2002-06-03 13:25:28 acampi Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import ICAL_PACKAGE, ICAL_VERSION from Component import Component, NewComponent, Event, Todo, Journal from Property import Property, RecurrenceSet, test_enum from Time import Time, UTC from Period import Period from Duration import Duration from Attendee import Attendee, Organizer from DerivedProperties import RDate, Trigger,Recurrence_Id, Attach from Store import Store, FileStore from Gauge import Gauge version = ICAL_VERSION libical-1.0/src/python/littlefile.txt0000664000076400007640000000012012132563127016734 0ustar allenallenThis is just a small file to test mime encoding. There isn't much here at all. libical-1.0/src/python/Collection.py0000664000076400007640000000735612132563127016525 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Collection.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Collection.py,v 1.3 2001-03-11 00:46:57 plewis Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from types import * class Collection: """A group of components that can be modified somewhat like a list. Usage: Collection(componet, propSequence) component is a Component object propSequence is a list or tuple of Property (or subclass of Property) of objects already in component """ def __init__(self, component, propSequence): self._properties = list(propSequence[:]) self._component = component def __getslice__(self, beg, end): return Collection(self._component, self._properties[beg:end]) def __setslice__(self, beg, end, sequence): if not isinstance(sequence,ListType): raise TypeError, "must assign list (not instance) to slice" oldProps = self._properties[beg:end] for p in oldProps: self._component.remove_property(p) self._properties[beg:end] = sequence for p in sequence: self._component.add_property(p) def __getitem__(self, i): return self._properties[i] def __setitem__(self, i, prop): self._component.remove_property(self._properties[i]) self._component.add_property(prop) self._properties[i]=prop def __delitem__(self, i): self._component.remove_property(self._properties[i]) del self._properties[i] def __len__(self): return len(self._properties) def __str__(self): s = "[ " if len(self._properties) > 0: s = s + str(self._properties[0]) for p in self._properties[1:]: s = "%s, %s" % (s, p) s = s + " ]" return s def append(self, property): self._properties.append(property) self._component.add_property(property) class ComponentCollection: def __init__(self, parent, componentSequence): self._parent = parent self._components = list(componentSequence[:]) def __getslice__(self, beg, end): return ComponentCollection(self._parent, self._components[beg:end]) def __setslice__(self, beg, end, sequence): oldComps = self._components[beg:end] self._components.__setslice__(beg, end, sequence) for c in sequence: self._parent.add_component(c) for c in oldComps: self._parent.remove_component(c) def __getitem__(self, i): return self._components[i] def __setitem__(self, i, prop): self._parent.remove_component(self._components[i]) self._parent.add_property(prop) self._components[i]=prop def __delitem__(self, i): self._parent.remove_componet(self._components[i]) del self._components[i] def __len__(self): return len(self._components) def __add__(self, iterable): for i in iterable: self.append(i) def append(self, property): self._components.append(property) self._parent.add_component(property) libical-1.0/src/python/CMakeLists.txt0000664000076400007640000000101412132563127016601 0ustar allenalleninclude_directories( ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/libical ${CMAKE_SOURCE_DIR}/src/libicalss ) ########### next target ############### set(LibicalWrap_LIB_SRCS LibicalWrap.c ) add_library(LibicalWrap ${LIBRARY_TYPE} ${LibicalWrap_LIB_SRCS}) target_link_libraries(LibicalWrap) set_target_properties(LibicalWrap PROPERTIES VERSION ${LIBICAL_LIB_VERSION_STRING} SOVERSION ${LIBICAL_LIB_MAJOR_VERSION} ) install(TARGETS LibicalWrap DESTINATION lib) ########### install files ############### libical-1.0/src/python/DerivedProperties.py0000664000076400007640000001167612132563127020071 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: DerivedProperties.py # CREATOR: eric # # DESCRIPTION: # # # $Id: DerivedProperties.py,v 1.4 2001-04-03 15:18:42 ebusboom Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from Property import Property from Time import Time from Period import Period from Duration import Duration def RDate(arg): class RDate_Time(Time): def __init__(self,arg): Time.__init__(self,arg,"RDATE") class RDate_Period(Period): def __init__(self,arg): Period.__init__(self,arg,"RDATE") p = None for c in [RDate_Time, RDate_Period]: try: return c(arg) except Property.ConstructorFailedError, d: pass raise Property.ConstructorFailedError("Failed to construct RDATE from "+str(arg)) def Trigger(arg): class Trigger_Time(Time): def __init__(self,arg): Time.__init__(self,arg,"TRIGGER") class Trigger_Duration(Duration): def __init__(self,arg): Duration.__init__(self,arg,"TRIGGER") p = None for c in [Trigger_Duration, Trigger_Time]: try: return c(arg) except Property.ConstructorFailedError, d: pass raise Property.ConstructorFailedError("Failed to construct TRIGGER from "+str(arg)) class Recurrence_Id(Time): """Class for RECURRENCE-ID property. Usage: Reccurence_Id(dict) # A normal property dictionary Reccurence_Id("19960401") # An iCalendar string Reccurence_Id(8349873494) # Seconds from epoch If the 'dict' constructor is used, 'name' and 'value_type' entries in dict are ignored and automatically set with the appropriate values. """ def __init__(self, dict={}): Time.__init__(self, dict) Property.name(self, 'RECURRENCE-ID') def name(self): return Property.name(self) def _doParam(self, parameter, v): if v!=None: self[parameter]=v return self[parameter] # Enumerated parameters def value_parameter(self, v=None): """Sets or gets the VALUE parameter value. The value passed should be either "DATE-TIME" or "DATE". Setting this parameter has no impact on the property's value_type. Doing something like: rid=Recurrence_Id("19960401") # Sets value & makes value_type="DATE" rid.value_parameter("DATE-TIME") # Sets the parameter VALUE=DATE-TIME Would be allowed (even though it is wrong), so pay attention. Verifying the component will reveal the error. """ if v!=None and v!="DATE" and v!="DATE-TIME": raise ValueError, "%s is an invalid VALUE parameter value" % str(v) self._doParam("VALUE", v) def tzid(self, v=None): "Sets or gets the TZID parameter value." self._doParam("TZID", v) def range_parameter(self, v=None): # 'range' is a builtin function "Sets or gets the RANGE parameter value." if v!=None and v!="THISANDPRIOR" and v!= "THISANDFUTURE": raise ValueError, "%s is an invalid RANGE parameter value" % str(v) self._doParam("RANGE", v) class Attach(Property): """A class representing an ATTACH property. Usage: Attach(uriString [, parameter_dict]) Attach(fileObj [, parameter_dict]) """ def __init__(self, value=None, parameter_dict={}): Property.__init__(self, parameter_dict) Property.name(self, 'ATTACH') self.value(value) def value(self, v=None): "Returns or sets the value of the property." if v != None: if isinstance(v, StringType): # Is a URI self._desc['value']=v Property.value_type(self, 'URI') else: try: tempStr = v.read() except: raise TypeError,"%s must be a URL string or file-ish type"\ % str(v) self._desc['value'] = base64.encodestring(tempStr) Property.value_type(self, 'BINARY') else: return self._desc['value'] def name(self): "Returns the name of the property." return Property.name(self) def value_type(self): return Property.value_type(self) def fmttype(self, v=None): "Gets or sets the FMTYPE parameter." if v!= None: self['FMTTYPE']=v else: return self['FMTTYPE'] libical-1.0/src/python/Store.py0000664000076400007640000001026412132563127015516 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Store.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Store.py,v 1.4 2002-07-08 17:56:11 acampi Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * from Error import LibicalError from Component import Component, CloneComponent from Gauge import Gauge class Store: """ Base class for several component storage methods """ class AddFailedError(LibicalError): "Failed to add a property to the file store" class ConstructorFailedError(LibicalError): "Failed to create a Store " def __init__(self): pass def path(self): pass def mark(self): pass def commit(self): pass def add_component(self, comp): pass def remove_component(self, comp): pass def count_components(self, kind): pass def select(self, gauge): pass def clearSelect(self): pass def fetch(self, uid): pass def fetchMatch(self, comp): pass def modify(self, oldc, newc): pass def current_component(self): pass def first_component(self): pass def next_component(self): pass class FileStore(Store): def __init__(self, file): e1=icalerror_supress("FILE") self._ref = icalfileset_new(file) icalerror_restore("FILE",e1) if self._ref == None or self._ref == 'NULL': raise Store.ConstructorFailedError(file) def __del__(self): icalfileset_free(self._ref) def path(self): return icalfileset_path(self._ref) def mark(self): icalfileset_mark(self._ref) def commit(self): icalfileset_commit(self._ref) def add_component(self, comp): if not isinstance(comp,Component): raise Store.AddFailedError("Argument is not a component") error = icalfileset_add_component(self._ref,comp.ref()) def remove_component(self, comp): if not isinstance(comp,Component): raise Store.AddFailedError("Argument is not a component") error = icalfileset_remove_component(self._ref,comp.ref()) def count_components(self, kind): _kind = icalcomponent_string_to_kind(kind) return icalfileset_count_components(self._ref, _kind) def select(self, gauge): error = icalfileset_select(self._ref, gauge.ref()) def clearSelect(self): icalfileset_clear(self._ref) def fetch(self, uid): comp_ref = icalfileset_fetch(self._ref, uid) if comp_ref == None: return None return CloneComponent(comp_ref) def fetchMatch(self, comp): if not isinstance(comp,Component): raise Store.AddFailedError("Argument is not a component") comp_ref = icalfileset_fetch_match(self._ref,comp.ref()) if comp_ref == None: return None return CloneComponent(comp_ref) def modify(self, oldc, newc): pass def current_component(self): comp_ref = icalfileset_get_current_component(self._ref) if comp_ref == None: return None return CloneComponent(comp_ref) def first_component(self): comp_ref = icalfileset_get_first_component(self._ref) if comp_ref == None: return None return CloneComponent(comp_ref) def next_component(self): comp_ref = icalfileset_get_next_component(self._ref) if comp_ref == None: return None return CloneComponent(comp_ref) libical-1.0/src/python/Gauge.py0000664000076400007640000000442712132563127015456 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Gauge.py # CREATOR: mtearle # # DESCRIPTION: # # # $Id: Gauge.py,v 1.2 2002-07-08 17:56:11 acampi Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * from Error import LibicalError from Component import Component class Gauge: """ Base class for gauge """ class ConstructorFailedError(LibicalError): "Failed to create a Guage " class CloneFailedError(LibicalError): "Failed to clone a component given Gauge " class CompareFailedError(LibicalError): "Failed to compare a component given Gauge " def __init__(self,ref=None,sql=None,expand=0): if ref != None: self._ref = ref elif sql != None: s = str(sql) self._ref = icalgauge_new_from_sql(s,expand) else: Gauge.ConstructorFailedError("No SQL Specified") def __del__(self): if self._ref != None: icalgauge_free(self._ref) self._ref = None def ref(self): return self._ref def compare(self, comp): if not isinstance(comp,Component): raise Gauge.CompareFailedError("Argument is not a component") if comp.ref() == None: raise Gauge.CompareFailedError("Argument is not a component") return icalgauge_compare(self._ref, comp.ref()) # Pending Implementation #def as_sql_string(self): # return self.__str__() #def __str__(self): # return icalgauge_as_sql(self._ref) #def clone(self, comp): # if not isinstance(comp,Component): # raise Gauge.CloneFailedError("Argument is not a component") # # comp_ref = icalgauge_new_clone(self._ref, comp) # # if comp_ref == None: # return None # # return Component(ref=comp_ref) libical-1.0/src/python/LibicalWrap_icaltime.i0000664000076400007640000001624612132563127020270 0ustar allenallen /*====================================================================== FILE: LibicalWrap_icaltime.i (C) COPYRIGHT 2010 Glenn Washburn The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The original author is Glenn Washburn (crass@berlios.de) Contributions from: ======================================================================*/ // Add some methods to the icaltimetype struct %extend icaltimetype { /* ***** Special methods ***** */ int __cmp__(const icaltimetype b) { return icaltime_compare(*($self), b); } /* ***** Conversion methods ***** */ const char* as_ical_string() { return icaltime_as_ical_string(*($self)); } time_t as_timet(const icaltimezone *zone=NULL) { return icaltime_as_timet_with_zone(*($self), zone); } /* ***** Accessor methods ***** */ const char *get_tzid() { return icaltime_get_tzid(*($self)); } int day_of_year() { return icaltime_day_of_year(*($self)); } int day_of_week() { return icaltime_day_of_week(*($self)); } /** Return the day of the year for the Sunday of the week that the given time is within. */ /* int start_doy_of_week() { return icaltime_start_doy_of_week(*($self)); } */ /** Return the day of the year for the first day of the week that the given time is within. */ int start_doy_week(int fdow) { return icaltime_start_doy_week(*($self), fdow); } /** Return the week number for the week the given time is within */ int week_number() { return icaltime_week_number(*($self)); } /* ***** Query methods ***** */ int is_null_time() { return icaltime_is_null_time(*($self)); } /** Returns false if the time is clearly invalid, but is not null. This is usually the result of creating a new time type buy not clearing it, or setting one of the flags to an illegal value. */ int is_valid_time() { return icaltime_is_valid_time(*($self)); } /* is_date and is_utc are both over shadowed by the struct accessors, but they do the same thing. */ int is_date() { return icaltime_is_date(*($self)); } int is_utc() { return icaltime_is_utc(*($self)); } /* int is_floating() { return icaltime_is_floating(*($self)); } */ /* ***** Modify, compare and utility methods ***** */ /** Return -1, 0, or 1 to indicate that ab */ int compare(const icaltimetype b) { return icaltime_compare(*($self), b); } /** like icaltime_compare, but only use the date parts. */ int compare_date_only(const icaltimetype b, icaltimezone *tz=NULL) { if (tz == NULL) tz = icaltimezone_get_utc_timezone(); return icaltime_compare_date_only_tz(*($self), b, tz); } /** Adds or subtracts a number of days, hours, minutes and seconds. */ void adjust(const int days, const int hours, const int minutes, const int seconds) { return icaltime_adjust($self, days, hours, minutes, seconds); } /** Normalize the icaltime, so that all fields are within the normal range. */ icaltimetype normalize() { return icaltime_normalize(*($self)); } icaltimetype convert_to_zone(icaltimezone *zone) { return icaltime_convert_to_zone(*($self), zone); } /* ***** Static methods ***** */ static icaltimetype from_timet(const time_t tm, const int is_date=0, const icaltimezone *zone=NULL) { return icaltime_from_timet_with_zone(tm, is_date, zone); } static icaltimetype null_time(void) { return icaltime_null_time(); } static icaltimetype null_date(void) { return icaltime_null_date(); } static icaltimetype current_time(const icaltimezone *zone=NULL) { return icaltime_current_time_with_zone(zone); } static icaltimetype today(void) { return icaltime_today(); } #if 0 static icaltimetype from_string(const char* str, const icaltimezone *zone=NULL) { /* return _with_zone(str, zone); */ (void)zone; return icaltime_from_string(str); } #else /* For the time being do not allow specifying a timezone because this is unimplemented as of yet. */ static icaltimetype from_string(const char* str) { return icaltime_from_string(str); } #endif /** Return the number of days in the given month */ static int days_in_month(const int month, const int year) { return icaltime_days_in_month(month, year); } /** Return whether you've specified a leapyear or not. */ static int is_leap_year (const int year) { return icaltime_is_leap_year(year); } /** Return the number of days in this year */ /* static int days_in_year (const int year) { return icaltime_days_in_year(year); } */ } // This is a hackish way to support adding the __str__ method to // a class in python. Its much easier than writing in C (that // I've figured out). %pythoncode %{ def __icaltimetype_str__(self): return "" % ( self.year, self.month, self.day, self.hour, self.minute, self.second, self.is_date, self.is_daylight) icaltimetype.__str__ = __icaltimetype_str__ import datetime def icaltimetype_as_datetime(self): "as_datetime() -> returns datetime object" return datetime.datetime(self.year, self.month, self.day, self.hour, self.minute, self.second, 0, self.timezone) icaltimetype.as_datetime = icaltimetype_as_datetime def icaltimetype_from_datetime(dt): "from_datetime() -> returns icaltimetype object" tt = icaltimetype() tt.year = dt.year tt.month = dt.month tt.day = dt.day tt.hour = dt.hour tt.minute = dt.minute tt.second = dt.second if dt.tzinfo: # TODO: convert to the right timezone, assume for now we are UTC tt.zone = 0 tt.is_utc = True tt.is_date = False tt.isdaylight = False return tt icaltimetype.from_datetime = staticmethod(icaltimetype_from_datetime) # Remove accessors to private structure members icaltimetype_delprops = ["is_date", "is_utc", "zone"] _swig_remove_private_properties(icaltimetype, icaltimetype_delprops) # Set/Overwrite icaltimetype properties icaltimetype_props = { "zone": (_LibicalWrap.icaltime_get_timezone, _LibicalWrap.icaltime_set_timezone, ), "is_null_time": (_LibicalWrap.icaltime_is_null_time, ), "is_valid_time": (_LibicalWrap.icaltime_is_valid_time, ), # These do essentially the same thing as the default swig generated # accessors is_date and is_utc, but by not defining the setter, we # make them immutable from python "is_date": (_LibicalWrap.icaltime_is_date, ), "is_utc": (_LibicalWrap.icaltime_is_utc, ), # "is_floating": (_LibicalWrap.icaltime_is_floating, ), } _swig_set_properties(icaltimetype, icaltimetype_props) %} // TODO: Add icaltime_span_* to icaltime_spantype libical-1.0/src/python/Attendee.py0000664000076400007640000000664612132563127016164 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Property.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Attendee.py,v 1.1 2001-04-03 15:18:42 ebusboom Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * from Property import Property from types import DictType, StringType, IntType class Attendee(Property): """Class for Attendee properties. Usage: Attendee([dict]) Attendee([address]) Where: dict is an optional dictionary with keys of 'value': CAL-ADDRESS string and any parameter: parameter_value entries. 'name' and 'value_type' entries in dict are ignored and automatically set with the appropriate values. address is the CAL-ADDRESS (string) of the Attendee """ def __init__(self, arg={}): assert(isinstance(arg,DictType)) ref = None if arg!={}: ref = arg['ref'] Property.__init__(self,type='ATTENDEE',ref=ref) def _doParam(self, parameter, v): if v!=None: self[parameter]=v return self[parameter] # Methods for accessing enumerated parameters def cn(self, v=None): self._doParam('CN', v) def cutype(self, v=None): self._doParam('CUTYPE', v) def dir(self, v=None): self._doParam('DIR', v) def delegated_from(self, v=None): self._doParam('DELEGATED-FROM', v) def delegated_to(self, v=None): self._doParam('DELEGATED-TO', v) def language(self, v=None): self._doParam('LANGUAGE', v) def member(self, v=None): self._doParam('MEMBER', v) def partstat(self, v=None): self._doParam('PARTSTAT', v) def role(self, v=None): self._doParam('ROLE', v) def rsvp(self, v=None): self._doParam('RSVP', v) def sent_by(self, v=None): self._doParam('SENT-BY', v) class Organizer(Property): """Class for Organizer property. """ def __init__(self, arg={}): assert(isinstance(arg, DictType)) ref = None if arg != {}: ref = arg['ref'] Property.__init__(self, type='ORGANIZER', ref=ref) ## param_t = ( 'CN', 'DIR', 'SENT-BY', 'LANGUAGE' ) ## for param in param_t: ## self[param] = None ## if value != None: ## self.value(value) def _doParam(self, parameter, v): if v!=None: self[parameter]=v return self[parameter] def name(self): "Return the name of the property." return Property.name(self) def value_type(self): "Return the value type of the property." return self._desc['value_type'] # Methods for accessing enumerated parameters def cn(self, v=None): self._doParam('CN', v) def dir(self, v=None): self._doParam('DIR', v) def language(self, v=None): self._doParam('LANGUAGE', v) def sent_by(self, v=None): self._doParam('SENT-BY', v) libical-1.0/src/python/Property.py0000664000076400007640000001604712132563127016253 0ustar allenallen#!/usr/bin/env python # -*- Mode: python -*- #====================================================================== # FILE: Property.py # CREATOR: eric # # DESCRIPTION: # # # $Id: Property.py,v 1.13 2002-10-24 13:44:30 acampi Exp $ # $Locker: $ # # (C) COPYRIGHT 2001, Eric Busboom # (C) COPYRIGHT 2001, Patrick Lewis # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * import re import base64 from string import index, upper, split from types import StringType #def icalerror_supress(arg): # pass #def icalerror_restore(a,b): # pass def error_type(): error = icalerror_perror() return error[:index(error,':')] def test_enum(prop,enum): vkind = icalvalue_string_to_kind(prop) e = icalproperty_kind_and_string_to_enum(vkind, enum) if e != 0: return 1 return None class Property(object): """ Represent any iCalendar Property. Usage: Property(dict) Where: dict is a dictionary with keys of 'name', 'value_type', and 'value'. In addition, parameter:parameter value entries may be included. """ class ConstructorFailedError(Exception): "Failed to construct a property" class UpdateFailedError(Exception): "Failed to update the value of a property" def __init__(self, type = None, ref = None): #~ assert(ref == None or isinstance(ref,StringType)) #~ assert(type == None or isinstance(type,StringType)) self._ref = None if ref != None: self._ref = ref elif type != None: kind = icalproperty_string_to_kind(type) self._ref = icalproperty_new(kind) if type.find("X-") == 0: icalproperty_set_x_name(self._ref, type) if self._ref == None or self._ref == 'NULL': raise Property.ConstructorFailedError("Failed to construct Property: %s (%s)"%(type, ref)) self._deleted = 0; # Initialize all of the required keys def __del__(self): self._deleted = 1; if not self._deleted and \ self.ref() and \ icalproperty_get_parent(self.ref()) == 'NULL': icalproperty_free(self.ref()) def name(self,v=None): """ Return the name of the property """ return icalproperty_get_property_name(self._ref) def ref(self,v=None): """ Return the internal reference to the libical icalproperty """ if(v != None): if not self._deleted and self._ref and \ icalproperty_get_parent(self._ref) == 'NULL': icalproperty_free(self._ref) self._ref = v return self._ref def value(self,v=None, kind = None): """ Return the RFC2445 representation of the value """ if(v != None): if kind != None: # Get the default kind of value for this property default_kind = icalvalue_kind_to_string( icalproperty_kind_to_value_kind( icalproperty_string_to_kind(self.name()))) if(kind != default_kind): self.__setitem__('VALUE',kind) vt = kind elif self.__getitem__('VALUE'): vt = self.__getitem__('VALUE') print "###########", self else: vt = 'NO' # Use the kind of the existing value icalerror_clear_errno() #e1=icalerror_supress("MALFORMEDDATA") if (self.name() == None or self.name().find("X-") == 0) and type(v) is StringType: v = icallangbind_quote_as_ical(v) if isinstance(v, unicode): v = v.encode('utf8') icalproperty_set_value_from_string(self._ref,str(v),vt) #icalerror_restore("MALFORMEDDATA",e1) if error_type() != "NO": raise Property.UpdateFailedError(error_type()) s = icalproperty_get_value_as_string(self._ref) return icalproperty_get_value_as_string(self._ref) def parameters(self): """ Return a list of parameters """ params = [] p = icallangbind_get_first_parameter(self._ref) while p != None: kv = split(icalparameter_as_ical_string(p),'=',2) params.append(kv[0]) p = icallangbind_get_next_parameter(self._ref) return params def as_ical_string(self): "Return the property in iCalendar text format." return icalproperty_as_ical_string(self._ref) def __getitem__(self,key): """ Return property values by name """ key = upper(key) str = icalproperty_get_parameter_as_string(self._ref,key) if(str == 'NULL'): return None return str def __setitem__(self,key,value): """ Set Property Values by Name """ key = upper(key) icalproperty_set_parameter_from_string(self._ref,key,value) return self.__getitem__(key) def __delitem__(self,key): """ Remove Property Values by Name """ key = upper(key) if self.__getitem__(key): icalproperty_remove_parameter_by_name(self._ref,key) def __str__(self): str = self.as_ical_string() return re.sub('\r?\n ?','',str) def __cmp__(self, other): s_str = str(self) o_str = str(other) return cmp(s_str,o_str) class RecurrenceSet: """ Represents a set of event occurrences. This class controls a component's RRULE, EXRULE, RDATE and EXDATE properties and can produce from them a set of occurrences. """ def __init__(self): pass def include(self, **params): """ Include a date or rule to the set. Use date= or pass in a Time instance to include a date. Included dates will add an RDATE property or will remove an EXDATE property of the same date. Use rule= or pass in a string to include a rule. Included rules with either add a RRULE property or remove an EXRULE property. """ pass def exclude(self, **params): """ Exclude date or rule to the set. Use date= or pass in a Time instance to exclude a date. Excluded dates will add an EXDATE property or will remove an RDATE property of the same date. Use rule= or pass in a string to exclude a rule. Excluded rules with either add an EXRULE property or remove an RRULE property. """ pass def occurrences(self, count=None): """ Return 'count' occurrences as a tuple of Time instances. """ pass libical-1.0/src/icalss.def0000664000076400007640000001037612132563133014466 0ustar allenallenLIBRARY EXPORTS icalcalendar_create icalcalendar_free icalcalendar_get_booked icalcalendar_get_freebusy icalcalendar_get_incoming icalcalendar_get_properties icalcalendar_islocked icalcalendar_lock icalcalendar_new icalcalendar_new_impl icalcalendar_ownlock icalcalendar_unlock icalclassify icalclassify_add_instance icalclassify_cancel_all icalclassify_cancel_event icalclassify_cancel_instance icalclassify_counter icalclassify_delinecounter icalclassify_find_attendee icalclassify_find_overlaps icalclassify_lowercase icalclassify_publish_freebusy icalclassify_publish_new icalclassify_publish_update icalclassify_refesh icalclassify_reply_accept icalclassify_reply_crasher_accept icalclassify_reply_crasher_decline icalclassify_reply_decline icalclassify_reply_delegate icalclassify_request_delegate icalclassify_request_forward icalclassify_request_freebusy icalclassify_request_new icalclassify_request_new_organizer icalclassify_request_reschedule icalclassify_request_status icalclassify_request_update icalcluster_add_component icalcluster_commit icalcluster_count_components icalcluster_free icalcluster_get_component icalcluster_get_current_component icalcluster_get_first_component icalcluster_get_next_component icalcluster_is_changed icalcluster_key icalcluster_mark icalcluster_new icalcluster_new_clone icalcluster_new_impl icalcluster_remove_component icaldirset_add_component icaldirset_begin_component icaldirset_clear icaldirset_commit icaldirset_count_components icaldirset_fetch icaldirset_fetch_match icaldirset_free icaldirset_get_current_component icaldirset_get_first_component icaldirset_get_next_component icaldirset_has_uid icaldirset_init icaldirset_lock icaldirset_mark icaldirset_modify icaldirset_new icaldirset_new_reader icaldirset_new_writer icaldirset_next_cluster icaldirset_next_uid_number icaldirset_options_default DATA icaldirset_path icaldirset_read_directory icaldirset_remove_component icaldirset_select icaldirset_unlock icaldirsetiter_to_next icaldirsetiter_to_prior icalfileset_add_component icalfileset_begin_component icalfileset_clear icalfileset_commit icalfileset_count_components icalfileset_fetch icalfileset_fetch_match icalfileset_filesize icalfileset_form_a_matched_recurrence_component icalfileset_free icalfileset_get_component icalfileset_get_current_component icalfileset_get_first_component icalfileset_get_id icalfileset_get_next_component icalfileset_has_uid icalfileset_id_free icalfileset_init icalfileset_lock icalfileset_mark icalfileset_modify icalfileset_new icalfileset_new_reader icalfileset_new_writer icalfileset_options_default DATA icalfileset_path icalfileset_produce_icalcluster icalfileset_read_file icalfileset_read_from_file icalfileset_remove_component icalfileset_select icalfileset_unlock icalfilesetiter_to_next icalgauge_compare icalgauge_compare_recurse icalgauge_dump icalgauge_free icalgauge_get_expand icalgauge_new_from_sql icalmessage_copy_properties icalmessage_find_attendee icalmessage_get_inner icalmessage_new_accept_reply icalmessage_new_counterpropose_reply icalmessage_new_decline_reply icalmessage_new_delegate_reply icalmessage_new_delegate_request icalmessage_new_error_reply icalmessage_new_reply_base icalset_add_component icalset_begin_component icalset_clear icalset_commit icalset_count_components icalset_fetch icalset_fetch_match icalset_free icalset_get_current_component icalset_get_first_component icalset_get_next_component icalset_has_uid icalset_mark icalset_modify icalset_new icalset_new_dir icalset_new_dir_reader icalset_new_dir_writer icalset_new_file icalset_new_file_reader icalset_new_file_writer icalset_path icalset_remove_component icalset_select icalsetiter_deref icalsetiter_next icalsetiter_null DATA icalsetiter_prior icalsetiter_to_next icalsetiter_to_prior icalspanlist_as_freebusy_matrix icalspanlist_as_vfreebusy icalspanlist_dump icalspanlist_free icalspanlist_from_vfreebusy icalspanlist_new icalspanlist_next_free_time icalss_input icalss_yy_gauge DATA icalssutil_free_parts icalssutil_get_parts icalssutil_is_rescheduled input_buffer DATA input_buffer_p DATA ss_create_buffer ss_delete_buffer ss_flush_buffer ss_scan_buffer ss_scan_bytes ss_scan_string ss_switch_to_buffer sschar DATA sserror ssin DATA ssleng DATA sslex sslval DATA ssnerrs DATA ssout DATA ssparse ssrestart sstext DATA sswrap yytext_ptr DATA libical-1.0/src/Makefile.am0000664000076400007640000000022412132563133014553 0ustar allenallenif HAVE_PYTHON if HAVE_SWIG python_dir = python endif endif SUBDIRS = libical libicalss libicalvcal test $(python_dir) include_HEADERS = ical.h libical-1.0/src/Makefile.in0000664000076400007640000005020112141277613014571 0ustar allenallen# Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(includedir)" HEADERS = $(include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = libical libicalss libicalvcal test python DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @HAVE_PYTHON_TRUE@@HAVE_SWIG_TRUE@python_dir = python SUBDIRS = libical libicalss libicalvcal test $(python_dir) include_HEADERS = ical.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-includeHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ cscopelist cscopelist-recursive ctags ctags-recursive \ distclean distclean-generic distclean-libtool distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-includeHEADERS install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/src/ical.def0000664000076400007640000006342412132563133014122 0ustar allenallenLIBRARY EXPORTS caldat compare_map DATA decode_base64 decode_quoted_printable free_zone_directory ical_bt icalarray_append icalarray_element_at icalarray_free icalarray_new icalarray_remove_element_at icalarray_sort icalattach_get_data icalattach_get_is_url icalattach_get_url icalattach_new_from_data icalattach_new_from_url icalattach_ref icalattach_unref icalcompiter_deref icalcompiter_next icalcompiter_null DATA icalcompiter_prior icalcomponent_add_children icalcomponent_add_component icalcomponent_add_property icalcomponent_as_ical_string icalcomponent_as_ical_string_r icalcomponent_begin_component icalcomponent_check_restrictions icalcomponent_convert_errors icalcomponent_count_components icalcomponent_count_errors icalcomponent_count_properties icalcomponent_end_component icalcomponent_foreach_recurrence icalcomponent_foreach_tzid icalcomponent_free icalcomponent_get_comment icalcomponent_get_current_component icalcomponent_get_current_property icalcomponent_get_description icalcomponent_get_dtend icalcomponent_get_dtstamp icalcomponent_get_dtstart icalcomponent_get_due icalcomponent_get_duration icalcomponent_get_first_component icalcomponent_get_first_property icalcomponent_get_first_real_component icalcomponent_get_inner icalcomponent_get_location icalcomponent_get_method icalcomponent_get_next_component icalcomponent_get_next_property icalcomponent_get_parent icalcomponent_get_recurrenceid icalcomponent_get_relcalid icalcomponent_get_sequence icalcomponent_get_span icalcomponent_get_status icalcomponent_get_summary icalcomponent_get_timezone icalcomponent_get_uid icalcomponent_is_valid icalcomponent_isa icalcomponent_isa_component icalcomponent_kind_is_valid icalcomponent_kind_to_string icalcomponent_merge_component icalcomponent_new icalcomponent_new_clone icalcomponent_new_from_string icalcomponent_new_vagenda icalcomponent_new_valarm icalcomponent_new_vcalendar icalcomponent_new_vevent icalcomponent_new_vfreebusy icalcomponent_new_vjournal icalcomponent_new_vquery icalcomponent_new_vreply icalcomponent_new_vtimezone icalcomponent_new_vtodo icalcomponent_new_x icalcomponent_new_xdaylight icalcomponent_new_xstandard icalcomponent_remove_component icalcomponent_remove_property icalcomponent_set_comment icalcomponent_set_description icalcomponent_set_dtend icalcomponent_set_dtstamp icalcomponent_set_dtstart icalcomponent_set_due icalcomponent_set_duration icalcomponent_set_location icalcomponent_set_method icalcomponent_set_parent icalcomponent_set_recurrenceid icalcomponent_set_relcalid icalcomponent_set_sequence icalcomponent_set_status icalcomponent_set_summary icalcomponent_set_uid icalcomponent_string_to_kind icalcomponent_strip_errors icalcomponent_vanew icaldurationtype_as_ical_string icaldurationtype_as_ical_string_r icaldurationtype_as_int icaldurationtype_bad_duration icaldurationtype_from_int icaldurationtype_from_string icaldurationtype_is_bad_duration icaldurationtype_is_null_duration icaldurationtype_null_duration icalenum_num_to_reqstat icalenum_reqstat_code icalenum_reqstat_code_r icalenum_reqstat_desc icalenum_reqstat_major icalenum_reqstat_minor icalerrno_return icalerror_clear_errno icalerror_crash_here icalerror_error_from_string icalerror_get_error_state icalerror_perror icalerror_restore icalerror_set_errno icalerror_set_error_state icalerror_stop_here icalerror_strerror icalerror_supress icallangbind_access_array icallangbind_free_array icallangbind_get_first_component icallangbind_get_first_parameter icallangbind_get_first_property icallangbind_get_next_component icallangbind_get_next_parameter icallangbind_get_next_property icallangbind_new_array icallangbind_property_eval_string icallangbind_property_eval_string_r icallangbind_quote_as_ical icallangbind_quote_as_ical_r icallangbind_string_to_open_flag icalmemory_add_tmp_buffer icalmemory_append_char icalmemory_append_string icalmemory_free_buffer icalmemory_free_ring icalmemory_free_ring_byval icalmemory_free_tmp_buffer icalmemory_new_buffer icalmemory_resize_buffer icalmemory_strdup icalmemory_tmp_buffer icalmemory_tmp_copy icalmime_attachment_add_line icalmime_attachment_end_part icalmime_attachment_free_part icalmime_attachment_new_part icalmime_make_part icalmime_parse icalmime_test icalmime_text_add_line icalmime_text_end_part icalmime_text_end_part_r icalmime_text_free_part icalmime_text_new_part icalmime_textcalendar_end_part icalparameter_as_ical_string icalparameter_as_ical_string_r icalparameter_enum_to_string icalparameter_free icalparameter_get_actionparam icalparameter_get_altrep icalparameter_get_charset icalparameter_get_cn icalparameter_get_cutype icalparameter_get_delegatedfrom icalparameter_get_delegatedto icalparameter_get_dir icalparameter_get_enable icalparameter_get_encoding icalparameter_get_fbtype icalparameter_get_fmttype icalparameter_get_id icalparameter_get_language icalparameter_get_latency icalparameter_get_local icalparameter_get_localize icalparameter_get_member icalparameter_get_options icalparameter_get_parent icalparameter_get_partstat icalparameter_get_range icalparameter_get_related icalparameter_get_reltype icalparameter_get_role icalparameter_get_rsvp icalparameter_get_sentby icalparameter_get_tzid icalparameter_get_value icalparameter_get_x icalparameter_get_xliccomparetype icalparameter_get_xlicerrortype icalparameter_get_xname icalparameter_get_xvalue icalparameter_isa icalparameter_isa_parameter icalparameter_kind_to_string icalparameter_new icalparameter_new_actionparam icalparameter_new_altrep icalparameter_new_charset icalparameter_new_clone icalparameter_new_cn icalparameter_new_cutype icalparameter_new_delegatedfrom icalparameter_new_delegatedto icalparameter_new_dir icalparameter_new_enable icalparameter_new_encoding icalparameter_new_fbtype icalparameter_new_fmttype icalparameter_new_from_string icalparameter_new_from_value_string icalparameter_new_id icalparameter_new_impl icalparameter_new_language icalparameter_new_latency icalparameter_new_local icalparameter_new_localize icalparameter_new_member icalparameter_new_options icalparameter_new_partstat icalparameter_new_range icalparameter_new_related icalparameter_new_reltype icalparameter_new_role icalparameter_new_rsvp icalparameter_new_sentby icalparameter_new_tzid icalparameter_new_value icalparameter_new_x icalparameter_new_xliccomparetype icalparameter_new_xlicerrortype icalparameter_set_actionparam icalparameter_set_altrep icalparameter_set_charset icalparameter_set_cn icalparameter_set_cutype icalparameter_set_delegatedfrom icalparameter_set_delegatedto icalparameter_set_dir icalparameter_set_enable icalparameter_set_encoding icalparameter_set_fbtype icalparameter_set_fmttype icalparameter_set_id icalparameter_set_language icalparameter_set_latency icalparameter_set_local icalparameter_set_localize icalparameter_set_member icalparameter_set_options icalparameter_set_parent icalparameter_set_partstat icalparameter_set_range icalparameter_set_related icalparameter_set_reltype icalparameter_set_role icalparameter_set_rsvp icalparameter_set_sentby icalparameter_set_tzid icalparameter_set_value icalparameter_set_x icalparameter_set_xliccomparetype icalparameter_set_xlicerrortype icalparameter_set_xname icalparameter_set_xvalue icalparameter_string_to_enum icalparameter_string_to_kind icalparameter_value_to_value_kind icalparser_add_line icalparser_clean icalparser_free icalparser_get_line icalparser_get_state icalparser_get_value icalparser_new icalparser_parse icalparser_parse_string icalparser_set_gen_data icalparser_string_line_generator icalperiodtype_as_ical_string icalperiodtype_as_ical_string_r icalperiodtype_from_string icalperiodtype_is_null_period icalperiodtype_is_valid_period icalperiodtype_null_period icalproperty_add_parameter icalproperty_add_parameters icalproperty_as_ical_string icalproperty_as_ical_string_r icalproperty_count_parameters icalproperty_enum_belongs_to_property icalproperty_enum_to_string icalproperty_enum_to_string_r icalproperty_free icalproperty_get_action icalproperty_get_allowconflict icalproperty_get_attach icalproperty_get_attendee icalproperty_get_calid icalproperty_get_calmaster icalproperty_get_calscale icalproperty_get_capversion icalproperty_get_carid icalproperty_get_carlevel icalproperty_get_categories icalproperty_get_class icalproperty_get_cmd icalproperty_get_comment icalproperty_get_completed icalproperty_get_components icalproperty_get_contact icalproperty_get_created icalproperty_get_csid icalproperty_get_datemax icalproperty_get_datemin icalproperty_get_decreed icalproperty_get_defaultcharset icalproperty_get_defaultlocale icalproperty_get_defaulttzid icalproperty_get_defaultvcars icalproperty_get_deny icalproperty_get_description icalproperty_get_dtend icalproperty_get_dtstamp icalproperty_get_dtstart icalproperty_get_due icalproperty_get_duration icalproperty_get_exdate icalproperty_get_expand icalproperty_get_exrule icalproperty_get_first_parameter icalproperty_get_freebusy icalproperty_get_geo icalproperty_get_grant icalproperty_get_itipversion icalproperty_get_lastmodified icalproperty_get_location icalproperty_get_maxcomponentsize icalproperty_get_maxdate icalproperty_get_maxresults icalproperty_get_maxresultssize icalproperty_get_method icalproperty_get_mindate icalproperty_get_multipart icalproperty_get_name icalproperty_get_next_parameter icalproperty_get_organizer icalproperty_get_owner icalproperty_get_parameter_as_string icalproperty_get_parameter_as_string_r icalproperty_get_parent icalproperty_get_percentcomplete icalproperty_get_permission icalproperty_get_priority icalproperty_get_prodid icalproperty_get_property_name icalproperty_get_property_name_r icalproperty_get_query icalproperty_get_queryid icalproperty_get_querylevel icalproperty_get_queryname icalproperty_get_rdate icalproperty_get_recuraccepted icalproperty_get_recurexpand icalproperty_get_recurlimit icalproperty_get_recurrenceid icalproperty_get_relatedto icalproperty_get_relcalid icalproperty_get_repeat icalproperty_get_requeststatus icalproperty_get_resources icalproperty_get_restriction icalproperty_get_rrule icalproperty_get_scope icalproperty_get_sequence icalproperty_get_status icalproperty_get_storesexpanded icalproperty_get_summary icalproperty_get_target icalproperty_get_transp icalproperty_get_trigger icalproperty_get_tzid icalproperty_get_tzname icalproperty_get_tzoffsetfrom icalproperty_get_tzoffsetto icalproperty_get_tzurl icalproperty_get_uid icalproperty_get_url icalproperty_get_value icalproperty_get_value_as_string icalproperty_get_value_as_string_r icalproperty_get_version icalproperty_get_x icalproperty_get_x_name icalproperty_get_xlicclass icalproperty_get_xlicclustercount icalproperty_get_xlicerror icalproperty_get_xlicmimecharset icalproperty_get_xlicmimecid icalproperty_get_xlicmimecontenttype icalproperty_get_xlicmimeencoding icalproperty_get_xlicmimefilename icalproperty_get_xlicmimeoptinfo icalproperty_isa icalproperty_isa_property icalproperty_kind_and_string_to_enum icalproperty_kind_is_valid icalproperty_kind_to_string icalproperty_kind_to_value_kind icalproperty_method_to_string icalproperty_new icalproperty_new_action icalproperty_new_allowconflict icalproperty_new_attach icalproperty_new_attendee icalproperty_new_calid icalproperty_new_calmaster icalproperty_new_calscale icalproperty_new_capversion icalproperty_new_carid icalproperty_new_carlevel icalproperty_new_categories icalproperty_new_class icalproperty_new_clone icalproperty_new_cmd icalproperty_new_comment icalproperty_new_completed icalproperty_new_components icalproperty_new_contact icalproperty_new_created icalproperty_new_csid icalproperty_new_datemax icalproperty_new_datemin icalproperty_new_decreed icalproperty_new_defaultcharset icalproperty_new_defaultlocale icalproperty_new_defaulttzid icalproperty_new_defaultvcars icalproperty_new_deny icalproperty_new_description icalproperty_new_dtend icalproperty_new_dtstamp icalproperty_new_dtstart icalproperty_new_due icalproperty_new_duration icalproperty_new_exdate icalproperty_new_expand icalproperty_new_exrule icalproperty_new_freebusy icalproperty_new_from_string icalproperty_new_geo icalproperty_new_grant icalproperty_new_impl icalproperty_new_itipversion icalproperty_new_lastmodified icalproperty_new_location icalproperty_new_maxcomponentsize icalproperty_new_maxdate icalproperty_new_maxresults icalproperty_new_maxresultssize icalproperty_new_method icalproperty_new_mindate icalproperty_new_multipart icalproperty_new_name icalproperty_new_organizer icalproperty_new_owner icalproperty_new_percentcomplete icalproperty_new_permission icalproperty_new_priority icalproperty_new_prodid icalproperty_new_query icalproperty_new_queryid icalproperty_new_querylevel icalproperty_new_queryname icalproperty_new_rdate icalproperty_new_recuraccepted icalproperty_new_recurexpand icalproperty_new_recurlimit icalproperty_new_recurrenceid icalproperty_new_relatedto icalproperty_new_relcalid icalproperty_new_repeat icalproperty_new_requeststatus icalproperty_new_resources icalproperty_new_restriction icalproperty_new_rrule icalproperty_new_scope icalproperty_new_sequence icalproperty_new_status icalproperty_new_storesexpanded icalproperty_new_summary icalproperty_new_target icalproperty_new_transp icalproperty_new_trigger icalproperty_new_tzid icalproperty_new_tzname icalproperty_new_tzoffsetfrom icalproperty_new_tzoffsetto icalproperty_new_tzurl icalproperty_new_uid icalproperty_new_url icalproperty_new_version icalproperty_new_x icalproperty_new_xlicclass icalproperty_new_xlicclustercount icalproperty_new_xlicerror icalproperty_new_xlicmimecharset icalproperty_new_xlicmimecid icalproperty_new_xlicmimecontenttype icalproperty_new_xlicmimeencoding icalproperty_new_xlicmimefilename icalproperty_new_xlicmimeoptinfo icalproperty_recurrence_is_excluded icalproperty_remove_parameter icalproperty_remove_parameter_by_kind icalproperty_remove_parameter_by_name icalproperty_remove_parameter_by_ref icalproperty_set_action icalproperty_set_allowconflict icalproperty_set_attach icalproperty_set_attendee icalproperty_set_calid icalproperty_set_calmaster icalproperty_set_calscale icalproperty_set_capversion icalproperty_set_carid icalproperty_set_carlevel icalproperty_set_categories icalproperty_set_class icalproperty_set_cmd icalproperty_set_comment icalproperty_set_completed icalproperty_set_components icalproperty_set_contact icalproperty_set_created icalproperty_set_csid icalproperty_set_datemax icalproperty_set_datemin icalproperty_set_decreed icalproperty_set_defaultcharset icalproperty_set_defaultlocale icalproperty_set_defaulttzid icalproperty_set_defaultvcars icalproperty_set_deny icalproperty_set_description icalproperty_set_dtend icalproperty_set_dtstamp icalproperty_set_dtstart icalproperty_set_due icalproperty_set_duration icalproperty_set_exdate icalproperty_set_expand icalproperty_set_exrule icalproperty_set_freebusy icalproperty_set_geo icalproperty_set_grant icalproperty_set_itipversion icalproperty_set_lastmodified icalproperty_set_location icalproperty_set_maxcomponentsize icalproperty_set_maxdate icalproperty_set_maxresults icalproperty_set_maxresultssize icalproperty_set_method icalproperty_set_mindate icalproperty_set_multipart icalproperty_set_name icalproperty_set_organizer icalproperty_set_owner icalproperty_set_parameter icalproperty_set_parameter_from_string icalproperty_set_parent icalproperty_set_percentcomplete icalproperty_set_permission icalproperty_set_priority icalproperty_set_prodid icalproperty_set_query icalproperty_set_queryid icalproperty_set_querylevel icalproperty_set_queryname icalproperty_set_rdate icalproperty_set_recuraccepted icalproperty_set_recurexpand icalproperty_set_recurlimit icalproperty_set_recurrenceid icalproperty_set_relatedto icalproperty_set_relcalid icalproperty_set_repeat icalproperty_set_requeststatus icalproperty_set_resources icalproperty_set_restriction icalproperty_set_rrule icalproperty_set_scope icalproperty_set_sequence icalproperty_set_status icalproperty_set_storesexpanded icalproperty_set_summary icalproperty_set_target icalproperty_set_transp icalproperty_set_trigger icalproperty_set_tzid icalproperty_set_tzname icalproperty_set_tzoffsetfrom icalproperty_set_tzoffsetto icalproperty_set_tzurl icalproperty_set_uid icalproperty_set_url icalproperty_set_value icalproperty_set_value_from_string icalproperty_set_version icalproperty_set_x icalproperty_set_x_name icalproperty_set_xlicclass icalproperty_set_xlicclustercount icalproperty_set_xlicerror icalproperty_set_xlicmimecharset icalproperty_set_xlicmimecid icalproperty_set_xlicmimecontenttype icalproperty_set_xlicmimeencoding icalproperty_set_xlicmimefilename icalproperty_set_xlicmimeoptinfo icalproperty_status_to_string icalproperty_string_to_enum icalproperty_string_to_kind icalproperty_string_to_method icalproperty_string_to_status icalproperty_value_kind_to_kind icalproperty_vanew_action icalproperty_vanew_allowconflict icalproperty_vanew_attach icalproperty_vanew_attendee icalproperty_vanew_calid icalproperty_vanew_calmaster icalproperty_vanew_calscale icalproperty_vanew_capversion icalproperty_vanew_carid icalproperty_vanew_carlevel icalproperty_vanew_categories icalproperty_vanew_class icalproperty_vanew_cmd icalproperty_vanew_comment icalproperty_vanew_completed icalproperty_vanew_components icalproperty_vanew_contact icalproperty_vanew_created icalproperty_vanew_csid icalproperty_vanew_datemax icalproperty_vanew_datemin icalproperty_vanew_decreed icalproperty_vanew_defaultcharset icalproperty_vanew_defaultlocale icalproperty_vanew_defaulttzid icalproperty_vanew_defaultvcars icalproperty_vanew_deny icalproperty_vanew_description icalproperty_vanew_dtend icalproperty_vanew_dtstamp icalproperty_vanew_dtstart icalproperty_vanew_due icalproperty_vanew_duration icalproperty_vanew_exdate icalproperty_vanew_expand icalproperty_vanew_exrule icalproperty_vanew_freebusy icalproperty_vanew_geo icalproperty_vanew_grant icalproperty_vanew_itipversion icalproperty_vanew_lastmodified icalproperty_vanew_location icalproperty_vanew_maxcomponentsize icalproperty_vanew_maxdate icalproperty_vanew_maxresults icalproperty_vanew_maxresultssize icalproperty_vanew_method icalproperty_vanew_mindate icalproperty_vanew_multipart icalproperty_vanew_name icalproperty_vanew_organizer icalproperty_vanew_owner icalproperty_vanew_percentcomplete icalproperty_vanew_permission icalproperty_vanew_priority icalproperty_vanew_prodid icalproperty_vanew_query icalproperty_vanew_queryid icalproperty_vanew_querylevel icalproperty_vanew_queryname icalproperty_vanew_rdate icalproperty_vanew_recuraccepted icalproperty_vanew_recurexpand icalproperty_vanew_recurlimit icalproperty_vanew_recurrenceid icalproperty_vanew_relatedto icalproperty_vanew_relcalid icalproperty_vanew_repeat icalproperty_vanew_requeststatus icalproperty_vanew_resources icalproperty_vanew_restriction icalproperty_vanew_rrule icalproperty_vanew_scope icalproperty_vanew_sequence icalproperty_vanew_status icalproperty_vanew_storesexpanded icalproperty_vanew_summary icalproperty_vanew_target icalproperty_vanew_transp icalproperty_vanew_trigger icalproperty_vanew_tzid icalproperty_vanew_tzname icalproperty_vanew_tzoffsetfrom icalproperty_vanew_tzoffsetto icalproperty_vanew_tzurl icalproperty_vanew_uid icalproperty_vanew_url icalproperty_vanew_version icalproperty_vanew_x icalproperty_vanew_xlicclass icalproperty_vanew_xlicclustercount icalproperty_vanew_xlicerror icalproperty_vanew_xlicmimecharset icalproperty_vanew_xlicmimecid icalproperty_vanew_xlicmimecontenttype icalproperty_vanew_xlicmimeencoding icalproperty_vanew_xlicmimefilename icalproperty_vanew_xlicmimeoptinfo icalrecur_add_bydayrules icalrecur_add_byrules icalrecur_check_rulepart icalrecur_clause_name_and_value icalrecur_expand_recurrence icalrecur_first_clause icalrecur_freq_to_string icalrecur_iterator_free icalrecur_iterator_new icalrecur_iterator_next icalrecur_iterator_sizeof_byarray icalrecur_next_clause icalrecur_string_to_freq icalrecur_string_to_weekday icalrecur_weekday_to_string icalrecurrencetype_as_string icalrecurrencetype_as_string_r icalrecurrencetype_clear icalrecurrencetype_day_day_of_week icalrecurrencetype_day_position icalrecurrencetype_from_string icalreqstattype_as_string icalreqstattype_as_string_r icalreqstattype_from_string icalrestriction_check icalrestriction_check_component icalrestriction_compare icalrestriction_may_be_comp_need_process icalrestriction_may_be_draft_final_canceled icalrestriction_may_be_tent_conf icalrestriction_may_be_tent_conf_cancel icalrestriction_must_be_cancel_if_present icalrestriction_must_be_canceled_no_attendee icalrestriction_must_be_email icalrestriction_must_be_recurring icalrestriction_must_have_duration icalrestriction_must_have_repeat icalrestriction_must_if_tz_ref icalrestriction_no_dtend icalrestriction_no_duration icaltime_add icaltime_adjust icaltime_as_ical_string icaltime_as_ical_string_r icaltime_as_timet icaltime_as_timet_with_zone icaltime_compare icaltime_compare_date_only icaltime_compare_date_only_tz icaltime_convert_to_zone icaltime_current_time_with_zone icaltime_day_of_week icaltime_day_of_year icaltime_days_in_month icaltime_from_day_of_year icaltime_from_string icaltime_from_timet icaltime_from_timet_with_zone icaltime_get_timezone icaltime_get_tzid icaltime_is_date icaltime_is_leap_year icaltime_is_null_time icaltime_is_utc icaltime_is_valid_time icaltime_normalize icaltime_null_date icaltime_null_time icaltime_set_timezone icaltime_span_contains icaltime_span_new icaltime_span_overlaps icaltime_start_doy_of_week icaltime_start_doy_week icaltime_subtract icaltime_today icaltime_week_number icaltimezone_array_append_from_vtimezone icaltimezone_array_free icaltimezone_array_new icaltimezone_convert_time icaltimezone_copy icaltimezone_dump_changes icaltimezone_free icaltimezone_free_builtin_timezones icaltimezone_get_builtin_timezone icaltimezone_get_builtin_timezone_from_offset icaltimezone_get_builtin_timezone_from_tzid icaltimezone_get_builtin_timezones icaltimezone_get_component icaltimezone_get_display_name icaltimezone_get_latitude icaltimezone_get_location icaltimezone_get_longitude icaltimezone_get_tzid icaltimezone_get_tznames icaltimezone_get_utc_offset icaltimezone_get_utc_offset_of_utc_time icaltimezone_get_utc_timezone icaltimezone_new icaltimezone_release_zone_tab icaltimezone_set_component icaltimezone_set_tzid_prefix icaltriggertype_from_int icaltriggertype_from_string icaltriggertype_is_bad_trigger icaltriggertype_is_null_trigger icaltzutil_fetch_timezone icaltzutil_get_zone_directory icalvalue_as_ical_string icalvalue_as_ical_string_r icalvalue_compare icalvalue_decode_ical_string icalvalue_encode_ical_string icalvalue_free icalvalue_get_action icalvalue_get_attach icalvalue_get_binary icalvalue_get_boolean icalvalue_get_caladdress icalvalue_get_carlevel icalvalue_get_class icalvalue_get_cmd icalvalue_get_date icalvalue_get_datetime icalvalue_get_datetimeperiod icalvalue_get_duration icalvalue_get_float icalvalue_get_geo icalvalue_get_integer icalvalue_get_method icalvalue_get_parent icalvalue_get_period icalvalue_get_query icalvalue_get_querylevel icalvalue_get_recur icalvalue_get_requeststatus icalvalue_get_status icalvalue_get_string icalvalue_get_text icalvalue_get_transp icalvalue_get_trigger icalvalue_get_uri icalvalue_get_utcoffset icalvalue_get_x icalvalue_get_xlicclass icalvalue_is_valid icalvalue_isa icalvalue_isa_value icalvalue_kind_is_valid icalvalue_kind_to_string icalvalue_new icalvalue_new_action icalvalue_new_attach icalvalue_new_binary icalvalue_new_boolean icalvalue_new_caladdress icalvalue_new_carlevel icalvalue_new_class icalvalue_new_clone icalvalue_new_cmd icalvalue_new_date icalvalue_new_datetime icalvalue_new_datetimeperiod icalvalue_new_duration icalvalue_new_float icalvalue_new_from_string icalvalue_new_from_string_with_error icalvalue_new_geo icalvalue_new_impl icalvalue_new_integer icalvalue_new_method icalvalue_new_period icalvalue_new_query icalvalue_new_querylevel icalvalue_new_recur icalvalue_new_requeststatus icalvalue_new_status icalvalue_new_string icalvalue_new_text icalvalue_new_transp icalvalue_new_trigger icalvalue_new_uri icalvalue_new_utcoffset icalvalue_new_x icalvalue_new_xlicclass icalvalue_reset_kind icalvalue_set_action icalvalue_set_attach icalvalue_set_binary icalvalue_set_boolean icalvalue_set_caladdress icalvalue_set_carlevel icalvalue_set_class icalvalue_set_cmd icalvalue_set_date icalvalue_set_datetime icalvalue_set_datetimeperiod icalvalue_set_duration icalvalue_set_float icalvalue_set_geo icalvalue_set_integer icalvalue_set_method icalvalue_set_parent icalvalue_set_period icalvalue_set_query icalvalue_set_querylevel icalvalue_set_recur icalvalue_set_requeststatus icalvalue_set_status icalvalue_set_string icalvalue_set_text icalvalue_set_transp icalvalue_set_trigger icalvalue_set_uri icalvalue_set_utcoffset icalvalue_set_x icalvalue_set_xlicclass icalvalue_string_to_kind juldat null_comp_record DATA null_prop_record DATA print_date_to_string print_datetime_to_string print_time_to_string pvl_apply pvl_clear pvl_count pvl_data pvl_elem_count DATA pvl_find pvl_find_next pvl_free pvl_head pvl_insert_after pvl_insert_before pvl_insert_ordered pvl_list_count DATA pvl_new_element pvl_newlist pvl_next pvl_pop pvl_prior pvl_push pvl_remove pvl_shift pvl_tail pvl_unshift restr_string_map DATA set_tz set_zone_directory sspm_action_map DATA sspm_append_char sspm_append_hex sspm_append_string sspm_build_header sspm_default_add_line sspm_default_end_part sspm_default_free_part sspm_default_new_part sspm_encode_base64 sspm_encode_quoted_printable sspm_encoding_map DATA sspm_encoding_string sspm_find_major_content_type sspm_find_minor_content_type sspm_free_header sspm_free_parts sspm_get_next_line sspm_get_parameter sspm_is_blank sspm_is_continuation_line sspm_is_mail_header sspm_is_mime_boundary sspm_is_mime_header sspm_is_mime_terminating_boundary sspm_lowercase sspm_major_type_string sspm_make_multipart_part sspm_make_multipart_subpart sspm_make_part sspm_minor_type_string sspm_parse_mime sspm_property_name sspm_read_header sspm_set_error sspm_store_part sspm_strdup sspm_value sspm_write_base64 sspm_write_header sspm_write_mime sspm_write_multipart_part sspm_write_part strstriplt unset_tz ycaltime_days_in_year libical-1.0/src/libical/0000775000076400007640000000000012141277614014126 5ustar allenallenlibical-1.0/src/libical/icaltimezone.c0000664000076400007640000016542212132563132016760 0ustar allenallen/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /*====================================================================== FILE: icaltimezone.c CREATOR: Damon Chaplin 15 March 2001 $Id: icaltimezone.c,v 1.44 2008-02-03 16:10:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2001, Damon Chaplin This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ /** @file icaltimezone.c * @brief implementation of timezone handling routines **/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "icalproperty.h" #include "icalarray.h" #include "icalerror.h" #include "icalparser.h" #include "icaltimezone.h" #include "icaltimezoneimpl.h" #include "icaltz-util.h" #include #ifdef HAVE_PTHREAD #include static pthread_mutex_t builtin_mutex = PTHREAD_MUTEX_INITIALIZER; #endif #ifdef WIN32 #ifndef _WIN32_WCE #include #endif #include /* Undef the similar macro from pthread.h, it doesn't check if * gmtime() returns NULL. */ #undef gmtime_r /* The gmtime() in Microsoft's C library is MT-safe */ #define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0) // MSVC lacks the POSIX macro S_ISDIR, however it's a trivial one: #ifndef S_ISDIR #define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) #endif #endif #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif /** This is the toplevel directory where the timezone data is installed in. */ #define ZONEINFO_DIRECTORY PACKAGE_DATA_DIR "/zoneinfo" /** The prefix we use to uniquely identify TZIDs. It must begin and end with forward slashes. */ const char *ical_tzid_prefix = "/freeassociation.sourceforge.net/"; /** This is the filename of the file containing the city names and coordinates of all the builtin timezones. */ #define ZONES_TAB_FILENAME "zones.tab" /** This is the number of years of extra coverage we do when expanding the timezone changes. */ #define ICALTIMEZONE_EXTRA_COVERAGE 5 /** This is the maximum year we will expand to. time_t values only go up to somewhere around 2037. */ #define ICALTIMEZONE_MAX_YEAR 2035 typedef struct _icaltimezonechange icaltimezonechange; struct _icaltimezonechange { int utc_offset; /**< The offset to add to UTC to get local time, in seconds. */ int prev_utc_offset; /**< The offset to add to UTC, before this change, in seconds. */ int year; /**< Actual year, e.g. 2001. */ int month; /**< 1 (Jan) to 12 (Dec). */ int day; int hour; int minute; int second; /**< The time that the change came into effect, in UTC. Note that the prev_utc_offset applies to this local time, since we haven't changed to the new offset yet. */ int is_daylight; /**< Whether this is STANDARD or DAYLIGHT time. */ }; /** An array of icaltimezones for the builtin timezones. */ static icalarray *builtin_timezones = NULL; /** This is the special UTC timezone, which isn't in builtin_timezones. */ static icaltimezone utc_timezone = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static char* zone_files_directory = NULL; static void icaltimezone_reset (icaltimezone *zone); static char* icaltimezone_get_location_from_vtimezone (icalcomponent *component); static char* icaltimezone_get_tznames_from_vtimezone (icalcomponent *component); static void icaltimezone_expand_changes (icaltimezone *zone, int end_year); static void icaltimezone_expand_vtimezone (icalcomponent *comp, int end_year, icalarray *changes); static int icaltimezone_compare_change_fn (const void *elem1, const void *elem2); static int icaltimezone_find_nearby_change (icaltimezone *zone, icaltimezonechange *change); static void icaltimezone_adjust_change (icaltimezonechange *tt, int days, int hours, int minutes, int seconds); static void icaltimezone_init (icaltimezone *zone); /** Gets the TZID, LOCATION/X-LIC-LOCATION, and TZNAME properties from the VTIMEZONE component and places them in the icaltimezone. It returns 1 on success, or 0 if the TZID can't be found. */ static int icaltimezone_get_vtimezone_properties (icaltimezone *zone, icalcomponent *component); static void icaltimezone_load_builtin_timezone (icaltimezone *zone); static void icaltimezone_ensure_coverage (icaltimezone *zone, int end_year); static void icaltimezone_init_builtin_timezones(void); static void icaltimezone_parse_zone_tab (void); #ifdef USE_BUILTIN_TZDATA static char* icaltimezone_load_get_line_fn (char *s, size_t size, void *data); #endif static void format_utc_offset (int utc_offset, char *buffer); static const char* get_zone_directory(void); /** Creates a new icaltimezone. */ icaltimezone* icaltimezone_new (void) { icaltimezone *zone; zone = (icaltimezone*) malloc (sizeof (icaltimezone)); if (!zone) { icalerror_set_errno (ICAL_NEWFAILED_ERROR); return NULL; } icaltimezone_init (zone); return zone; } icaltimezone * icaltimezone_copy (icaltimezone *originalzone) { icaltimezone *zone; zone = (icaltimezone*) malloc (sizeof (icaltimezone)); if (!zone) { icalerror_set_errno (ICAL_NEWFAILED_ERROR); return NULL; } memcpy (zone, originalzone, sizeof (icaltimezone)); if (zone->tzid != NULL) zone->tzid = strdup (zone->tzid); if (zone->location != NULL) zone->location = strdup (zone->location); if (zone->tznames != NULL) zone->tznames = strdup (zone->tznames); if (zone->changes != NULL) zone->changes = icalarray_copy(zone->changes); /* Let the caller set the component because then they will know to be careful not to free this reference twice. */ zone->component = NULL; return zone; } /** Frees all memory used for the icaltimezone. */ void icaltimezone_free (icaltimezone *zone, int free_struct) { icaltimezone_reset (zone); if (free_struct) free (zone); } /** Resets the icaltimezone to the initial state, freeing most of the fields. */ static void icaltimezone_reset (icaltimezone *zone) { if (zone->tzid) free (zone->tzid); if (zone->location) free (zone->location); if (zone->tznames) free (zone->tznames); if (zone->component) icalcomponent_free (zone->component); if (zone->changes) icalarray_free (zone->changes); icaltimezone_init (zone); } /** Initializes an icaltimezone. */ static void icaltimezone_init (icaltimezone *zone) { zone->tzid = NULL; zone->location = NULL; zone->tznames = NULL; zone->latitude = 0.0; zone->longitude = 0.0; zone->component = NULL; zone->builtin_timezone = NULL; zone->end_year = 0; zone->changes = NULL; } /** Gets the TZID, LOCATION/X-LIC-LOCATION and TZNAME properties of the VTIMEZONE component and stores them in the icaltimezone. It returns 1 on success, or 0 if the TZID can't be found. Note that it expects the zone to be initialized or reset - it doesn't free any old values. */ static int icaltimezone_get_vtimezone_properties (icaltimezone *zone, icalcomponent *component) { icalproperty *prop; const char *tzid; prop = icalcomponent_get_first_property (component, ICAL_TZID_PROPERTY); if (!prop) return 0; /* A VTIMEZONE MUST have a TZID, or a lot of our code won't work. */ tzid = icalproperty_get_tzid (prop); if (!tzid) return 0; if (zone->tzid) free(zone->tzid); zone->tzid = strdup (tzid); if (zone->component) icalcomponent_free(zone->component); zone->component = component; if (zone->location) free(zone->location); zone->location = icaltimezone_get_location_from_vtimezone (component); if (zone->tznames) free(zone->tznames); zone->tznames = icaltimezone_get_tznames_from_vtimezone (component); return 1; } /** Gets the LOCATION or X-LIC-LOCATION property from a VTIMEZONE. */ static char* icaltimezone_get_location_from_vtimezone (icalcomponent *component) { icalproperty *prop; const char *location; const char *name; prop = icalcomponent_get_first_property (component, ICAL_LOCATION_PROPERTY); if (prop) { location = icalproperty_get_location (prop); if (location) return strdup (location); } prop = icalcomponent_get_first_property (component, ICAL_X_PROPERTY); while (prop) { name = icalproperty_get_x_name (prop); if (name && !strcasecmp (name, "X-LIC-LOCATION")) { location = icalproperty_get_x (prop); if (location) return strdup (location); } prop = icalcomponent_get_next_property (component, ICAL_X_PROPERTY); } return NULL; } /** Gets the TZNAMEs used for the last STANDARD & DAYLIGHT components in a VTIMEZONE. If both STANDARD and DAYLIGHT components use the same TZNAME, it returns that. If they use different TZNAMEs, it formats them like "EST/EDT". The returned string should be freed by the caller. */ static char* icaltimezone_get_tznames_from_vtimezone (icalcomponent *component) { icalcomponent *comp; icalcomponent_kind type; icalproperty *prop; struct icaltimetype dtstart; struct icaldatetimeperiodtype rdate; const char *current_tzname; const char *standard_tzname = NULL, *daylight_tzname = NULL; struct icaltimetype standard_max_date, daylight_max_date; struct icaltimetype current_max_date; standard_max_date = icaltime_null_time(); daylight_max_date = icaltime_null_time(); /* Step through the STANDARD & DAYLIGHT subcomponents. */ comp = icalcomponent_get_first_component (component, ICAL_ANY_COMPONENT); while (comp) { type = icalcomponent_isa (comp); if (type == ICAL_XSTANDARD_COMPONENT || type == ICAL_XDAYLIGHT_COMPONENT) { current_max_date = icaltime_null_time (); current_tzname = NULL; /* Step through the properties. We want to find the TZNAME, and the largest DTSTART or RDATE. */ prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); while (prop) { switch (icalproperty_isa (prop)) { case ICAL_TZNAME_PROPERTY: current_tzname = icalproperty_get_tzname (prop); break; case ICAL_DTSTART_PROPERTY: dtstart = icalproperty_get_dtstart (prop); if (icaltime_compare (dtstart, current_max_date) > 0) current_max_date = dtstart; break; case ICAL_RDATE_PROPERTY: rdate = icalproperty_get_rdate (prop); if (icaltime_compare (rdate.time, current_max_date) > 0) current_max_date = rdate.time; break; default: break; } prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY); } if (current_tzname) { if (type == ICAL_XSTANDARD_COMPONENT) { if (!standard_tzname || icaltime_compare (current_max_date, standard_max_date) > 0) { standard_max_date = current_max_date; standard_tzname = current_tzname; } } else { if (!daylight_tzname || icaltime_compare (current_max_date, daylight_max_date) > 0) { daylight_max_date = current_max_date; daylight_tzname = current_tzname; } } } } comp = icalcomponent_get_next_component (component, ICAL_ANY_COMPONENT); } /* Outlook (2000) places "Standard Time" and "Daylight Time" in the TZNAME strings, which is totally useless. So we return NULL in that case. */ if (standard_tzname && !strcmp (standard_tzname, "Standard Time")) return NULL; /* If both standard and daylight TZNAMEs were found, if they are the same we return just one, else we format them like "EST/EDT". */ if (standard_tzname && daylight_tzname) { size_t standard_len, daylight_len; char *tznames; if (!strcmp (standard_tzname, daylight_tzname)) return strdup (standard_tzname); standard_len = strlen (standard_tzname); daylight_len = strlen (daylight_tzname); tznames = malloc (standard_len + daylight_len + 2); strcpy (tznames, standard_tzname); tznames[standard_len] = '/'; strcpy (tznames + standard_len + 1, daylight_tzname); return tznames; } else { const char *tznames; /* If either of the TZNAMEs was found just return that, else NULL. */ tznames = standard_tzname ? standard_tzname : daylight_tzname; return tznames ? strdup (tznames) : NULL; } } static void icaltimezone_ensure_coverage (icaltimezone *zone, int end_year) { /* When we expand timezone changes we always expand at least up to this year, plus ICALTIMEZONE_EXTRA_COVERAGE. */ static int icaltimezone_minimum_expansion_year = -1; int changes_end_year; icaltimezone_load_builtin_timezone (zone); if (icaltimezone_minimum_expansion_year == -1) { struct icaltimetype today = icaltime_today(); icaltimezone_minimum_expansion_year = today.year; } changes_end_year = end_year; if (changes_end_year < icaltimezone_minimum_expansion_year) changes_end_year = icaltimezone_minimum_expansion_year; changes_end_year += ICALTIMEZONE_EXTRA_COVERAGE; if (changes_end_year > ICALTIMEZONE_MAX_YEAR) changes_end_year = ICALTIMEZONE_MAX_YEAR; if (!zone->changes || zone->end_year < end_year) icaltimezone_expand_changes (zone, changes_end_year); } static void icaltimezone_expand_changes (icaltimezone *zone, int end_year) { icalarray *changes; icalcomponent *comp; #if 0 printf ("\nExpanding changes for: %s to year: %i\n", zone->tzid, end_year); #endif changes = icalarray_new (sizeof (icaltimezonechange), 32); if (!changes) return; /* Scan the STANDARD and DAYLIGHT subcomponents. */ comp = icalcomponent_get_first_component (zone->component, ICAL_ANY_COMPONENT); while (comp) { icaltimezone_expand_vtimezone (comp, end_year, changes); comp = icalcomponent_get_next_component (zone->component, ICAL_ANY_COMPONENT); } /* Sort the changes. We may have duplicates but I don't think it will matter. */ icalarray_sort (changes, icaltimezone_compare_change_fn); if (zone->changes) icalarray_free (zone->changes); zone->changes = changes; zone->end_year = end_year; } static void icaltimezone_expand_vtimezone (icalcomponent *comp, int end_year, icalarray *changes) { icaltimezonechange change; icalproperty *prop; struct icaltimetype dtstart, occ; struct icalrecurrencetype rrule; icalrecur_iterator* rrule_iterator; struct icaldatetimeperiodtype rdate; int found_dtstart = 0, found_tzoffsetto = 0, found_tzoffsetfrom = 0; int has_rdate = 0, has_rrule = 0; /* First we check if it is a STANDARD or DAYLIGHT component, and just return if it isn't. */ if (icalcomponent_isa (comp) == ICAL_XSTANDARD_COMPONENT) change.is_daylight = 0; else if (icalcomponent_isa (comp) == ICAL_XDAYLIGHT_COMPONENT) change.is_daylight = 1; else return; /* Step through each of the properties to find the DTSTART, TZOFFSETFROM and TZOFFSETTO. We can't expand recurrences here since we need these properties before we can do that. */ prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); while (prop) { switch (icalproperty_isa (prop)) { case ICAL_DTSTART_PROPERTY: dtstart = icalproperty_get_dtstart (prop); found_dtstart = 1; break; case ICAL_TZOFFSETTO_PROPERTY: change.utc_offset = icalproperty_get_tzoffsetto (prop); /*printf ("Found TZOFFSETTO: %i\n", change.utc_offset);*/ found_tzoffsetto = 1; break; case ICAL_TZOFFSETFROM_PROPERTY: change.prev_utc_offset = icalproperty_get_tzoffsetfrom (prop); /*printf ("Found TZOFFSETFROM: %i\n", change.prev_utc_offset);*/ found_tzoffsetfrom = 1; break; case ICAL_RDATE_PROPERTY: has_rdate = 1; break; case ICAL_RRULE_PROPERTY: has_rrule = 1; break; default: /* Just ignore any other properties. */ break; } prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY); } /* Microsoft Outlook for Mac (and possibly other versions) will create timezones without a tzoffsetfrom property if it's a timezone that doesn't change for DST. */ if (found_tzoffsetto && !found_tzoffsetfrom) { change.prev_utc_offset = change.utc_offset; found_tzoffsetfrom = 1; } /* If we didn't find a DTSTART, TZOFFSETTO and TZOFFSETFROM we have to ignore the component. FIXME: Add an error property? */ if (!found_dtstart || !found_tzoffsetto || !found_tzoffsetfrom) return; #if 0 printf ("\n Expanding component DTSTART (Y/M/D): %i/%i/%i %i:%02i:%02i\n", dtstart.year, dtstart.month, dtstart.day, dtstart.hour, dtstart.minute, dtstart.second); #endif /* If the STANDARD/DAYLIGHT component has no recurrence rule, we add a single change for the DTSTART. */ if (!has_rrule) { change.year = dtstart.year; change.month = dtstart.month; change.day = dtstart.day; change.hour = dtstart.hour; change.minute = dtstart.minute; change.second = dtstart.second; /* Convert to UTC. */ icaltimezone_adjust_change (&change, 0, 0, 0, -change.prev_utc_offset); #if 0 printf (" Appending single DTSTART (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n", change.year, change.month, change.day, change.hour, change.minute, change.second); #endif /* Add the change to the array. */ icalarray_append (changes, &change); } /* The component has recurrence data, so we expand that now. */ prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); while (prop && (has_rdate || has_rrule)) { #if 0 printf ("Expanding property...\n"); #endif switch (icalproperty_isa (prop)) { case ICAL_RDATE_PROPERTY: rdate = icalproperty_get_rdate (prop); change.year = rdate.time.year; change.month = rdate.time.month; change.day = rdate.time.day; /* RDATEs with a DATE value inherit the time from the DTSTART. */ if (icaltime_is_date(rdate.time)) { change.hour = dtstart.hour; change.minute = dtstart.minute; change.second = dtstart.second; } else { change.hour = rdate.time.hour; change.minute = rdate.time.minute; change.second = rdate.time.second; /* The spec was a bit vague about whether RDATEs were in local time or UTC so we support both to be safe. So if it is in UTC we have to add the UTC offset to get a local time. */ if (!icaltime_is_utc(rdate.time)) icaltimezone_adjust_change (&change, 0, 0, 0, -change.prev_utc_offset); } #if 0 printf (" Appending RDATE element (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n", change.year, change.month, change.day, change.hour, change.minute, change.second); #endif icalarray_append (changes, &change); break; case ICAL_RRULE_PROPERTY: rrule = icalproperty_get_rrule (prop); /* If the rrule UNTIL value is set and is in UTC, we convert it to a local time, since the recurrence code has no way to convert it itself. */ if (!icaltime_is_null_time (rrule.until) && rrule.until.is_utc) { #if 0 printf (" Found RRULE UNTIL in UTC.\n"); #endif /* To convert from UTC to a local time, we use the TZOFFSETFROM since that is the offset from UTC that will be in effect when each of the RRULE occurrences happens. */ icaltime_adjust (&rrule.until, 0, 0, 0, change.prev_utc_offset); rrule.until.is_utc = 0; } /* Add the dtstart to changes, otherwise some oddly-defined VTIMEZONE components can cause the first year to get skipped. */ change.year = dtstart.year; change.month = dtstart.month; change.day = dtstart.day; change.hour = dtstart.hour; change.minute = dtstart.minute; change.second = dtstart.second; #if 0 printf (" Appending RRULE element (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n", change.year, change.month, change.day, change.hour, change.minute, change.second); #endif icaltimezone_adjust_change (&change, 0, 0, 0, -change.prev_utc_offset); icalarray_append (changes, &change); rrule_iterator = icalrecur_iterator_new (rrule, dtstart); for (;rrule_iterator;) { occ = icalrecur_iterator_next (rrule_iterator); /* Skip dtstart since we just added it */ if (icaltime_compare(dtstart, occ) == 0) continue; if (occ.year > end_year || icaltime_is_null_time (occ)) break; change.year = occ.year; change.month = occ.month; change.day = occ.day; change.hour = occ.hour; change.minute = occ.minute; change.second = occ.second; #if 0 printf (" Appending RRULE element (Y/M/D): %i/%02i/%02i %i:%02i:%02i\n", change.year, change.month, change.day, change.hour, change.minute, change.second); #endif icaltimezone_adjust_change (&change, 0, 0, 0, -change.prev_utc_offset); icalarray_append (changes, &change); } icalrecur_iterator_free (rrule_iterator); break; default: break; } prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY); } } /** A function to compare 2 icaltimezonechange elements, used for qsort(). */ static int icaltimezone_compare_change_fn (const void *elem1, const void *elem2) { const icaltimezonechange *change1, *change2; int retval; change1 = (const icaltimezonechange *)elem1; change2 = (const icaltimezonechange *)elem2; if (change1->year < change2->year) retval = -1; else if (change1->year > change2->year) retval = 1; else if (change1->month < change2->month) retval = -1; else if (change1->month > change2->month) retval = 1; else if (change1->day < change2->day) retval = -1; else if (change1->day > change2->day) retval = 1; else if (change1->hour < change2->hour) retval = -1; else if (change1->hour > change2->hour) retval = 1; else if (change1->minute < change2->minute) retval = -1; else if (change1->minute > change2->minute) retval = 1; else if (change1->second < change2->second) retval = -1; else if (change1->second > change2->second) retval = 1; else retval = 0; return retval; } void icaltimezone_convert_time (struct icaltimetype *tt, icaltimezone *from_zone, icaltimezone *to_zone) { int utc_offset, is_daylight; /* If the time is a DATE value or both timezones are the same, or we are converting a floating time, we don't need to do anything. */ if (icaltime_is_date(*tt) || from_zone == to_zone || from_zone == NULL) return; /* Convert the time to UTC by getting the UTC offset and subtracting it. */ utc_offset = icaltimezone_get_utc_offset (from_zone, tt, NULL); icaltime_adjust (tt, 0, 0, 0, -utc_offset); /* Now we convert the time to the new timezone by getting the UTC offset of our UTC time and adding it. */ utc_offset = icaltimezone_get_utc_offset_of_utc_time (to_zone, tt, &is_daylight); tt->is_daylight = is_daylight; icaltime_adjust (tt, 0, 0, 0, utc_offset); } /** @deprecated This API wasn't updated when we changed icaltimetype to contain its own timezone. Also, this takes a pointer instead of the struct. */ /* Calculates the UTC offset of a given local time in the given timezone. It is the number of seconds to add to UTC to get local time. The is_daylight flag is set to 1 if the time is in daylight-savings time. */ int icaltimezone_get_utc_offset (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight) { icaltimezonechange *zone_change, *prev_zone_change, tt_change, tmp_change; int change_num, step, utc_offset_change, cmp; int change_num_to_use; int want_daylight; if (tt == NULL) return 0; if (is_daylight) *is_daylight = 0; /* For local times and UTC return 0. */ if (zone == NULL || zone == &utc_timezone) return 0; /* Use the builtin icaltimezone if possible. */ if (zone->builtin_timezone) zone = zone->builtin_timezone; /* Make sure the changes array is expanded up to the given time. */ icaltimezone_ensure_coverage (zone, tt->year); if (!zone->changes || zone->changes->num_elements == 0) return 0; /* Copy the time parts of the icaltimetype to an icaltimezonechange so we can use our comparison function on it. */ tt_change.year = tt->year; tt_change.month = tt->month; tt_change.day = tt->day; tt_change.hour = tt->hour; tt_change.minute = tt->minute; tt_change.second = tt->second; /* This should find a change close to the time, either the change before it or the change after it. */ change_num = icaltimezone_find_nearby_change (zone, &tt_change); /* Sanity check. */ icalerror_assert (change_num >= 0, "Negative timezone change index"); icalerror_assert (change_num < zone->changes->num_elements, "Timezone change index out of bounds"); /* Now move backwards or forwards to find the timezone change that applies to tt. It should only have to do 1 or 2 steps. */ zone_change = icalarray_element_at (zone->changes, change_num); step = 1; change_num_to_use = -1; for (;;) { /* Copy the change, so we can adjust it. */ tmp_change = *zone_change; /* If the clock is going backward, check if it is in the region of time that is used twice. If it is, use the change with the daylight setting which matches tt, or use standard if we don't know. */ if (tmp_change.utc_offset < tmp_change.prev_utc_offset) { /* If the time change is at 2:00AM local time and the clock is going back to 1:00AM we adjust the change to 1:00AM. We may have the wrong change but we'll figure that out later. */ icaltimezone_adjust_change (&tmp_change, 0, 0, 0, tmp_change.utc_offset); } else { icaltimezone_adjust_change (&tmp_change, 0, 0, 0, tmp_change.prev_utc_offset); } cmp = icaltimezone_compare_change_fn (&tt_change, &tmp_change); /* If the given time is on or after this change, then this change may apply, but we continue as a later change may be the right one. If the given time is before this change, then if we have already found a change which applies we can use that, else we need to step backwards. */ if (cmp >= 0) change_num_to_use = change_num; else step = -1; /* If we are stepping backwards through the changes and we have found a change that applies, then we know this is the change to use so we exit the loop. */ if (step == -1 && change_num_to_use != -1) break; change_num += step; /* If we go past the start of the changes array, then we have no data for this time so we return the prev UTC offset. */ if (change_num < 0) { if (is_daylight) *is_daylight = ! tmp_change.is_daylight; return tmp_change.prev_utc_offset; } if ((unsigned int)change_num >= zone->changes->num_elements) break; zone_change = icalarray_element_at (zone->changes, change_num); } /* If we didn't find a change to use, then we have a bug! */ icalerror_assert (change_num_to_use != -1, "No applicable timezone change found"); /* Now we just need to check if the time is in the overlapped region of time when clocks go back. */ zone_change = icalarray_element_at (zone->changes, change_num_to_use); utc_offset_change = zone_change->utc_offset - zone_change->prev_utc_offset; if (utc_offset_change < 0 && change_num_to_use > 0) { tmp_change = *zone_change; icaltimezone_adjust_change (&tmp_change, 0, 0, 0, tmp_change.prev_utc_offset); if (icaltimezone_compare_change_fn (&tt_change, &tmp_change) < 0) { /* The time is in the overlapped region, so we may need to use either the current zone_change or the previous one. If the time has the is_daylight field set we use the matching change, else we use the change with standard time. */ prev_zone_change = icalarray_element_at (zone->changes, change_num_to_use - 1); /* I was going to add an is_daylight flag to struct icaltimetype, but iCalendar doesn't let us distinguish between standard and daylight time anyway, so there's no point. So we just use the standard time instead. */ want_daylight = (tt->is_daylight == 1) ? 1 : 0; #if 0 if (zone_change->is_daylight == prev_zone_change->is_daylight) printf (" **** Same is_daylight setting\n"); #endif if (zone_change->is_daylight != want_daylight && prev_zone_change->is_daylight == want_daylight) zone_change = prev_zone_change; } } /* Now we know exactly which timezone change applies to the time, so we can return the UTC offset and whether it is a daylight time. */ if (is_daylight) *is_daylight = zone_change->is_daylight; return zone_change->utc_offset; } /** @deprecated This API wasn't updated when we changed icaltimetype to contain its own timezone. Also, this takes a pointer instead of the struct. */ /** Calculates the UTC offset of a given UTC time in the given timezone. It is the number of seconds to add to UTC to get local time. The is_daylight flag is set to 1 if the time is in daylight-savings time. */ int icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight) { icaltimezonechange *zone_change, tt_change, tmp_change; int change_num, step, change_num_to_use; if (is_daylight) *is_daylight = 0; /* For local times and UTC return 0. */ if (zone == NULL || zone == &utc_timezone) return 0; /* Use the builtin icaltimezone if possible. */ if (zone->builtin_timezone) zone = zone->builtin_timezone; /* Make sure the changes array is expanded up to the given time. */ icaltimezone_ensure_coverage (zone, tt->year); if (!zone->changes || zone->changes->num_elements == 0) return 0; /* Copy the time parts of the icaltimetype to an icaltimezonechange so we can use our comparison function on it. */ tt_change.year = tt->year; tt_change.month = tt->month; tt_change.day = tt->day; tt_change.hour = tt->hour; tt_change.minute = tt->minute; tt_change.second = tt->second; /* This should find a change close to the time, either the change before it or the change after it. */ change_num = icaltimezone_find_nearby_change (zone, &tt_change); /* Sanity check. */ icalerror_assert (change_num >= 0, "Negative timezone change index"); icalerror_assert (change_num < zone->changes->num_elements, "Timezone change index out of bounds"); /* Now move backwards or forwards to find the timezone change that applies to tt. It should only have to do 1 or 2 steps. */ zone_change = icalarray_element_at (zone->changes, change_num); step = 1; change_num_to_use = -1; for (;;) { /* Copy the change and adjust it to UTC. */ tmp_change = *zone_change; /* If the given time is on or after this change, then this change may apply, but we continue as a later change may be the right one. If the given time is before this change, then if we have already found a change which applies we can use that, else we need to step backwards. */ if (icaltimezone_compare_change_fn (&tt_change, &tmp_change) >= 0) change_num_to_use = change_num; else step = -1; /* If we are stepping backwards through the changes and we have found a change that applies, then we know this is the change to use so we exit the loop. */ if (step == -1 && change_num_to_use != -1) break; change_num += step; /* If we go past the start of the changes array, then we have no data for this time so we return a UTC offset of 0. */ if (change_num < 0) return 0; if ((unsigned int)change_num >= zone->changes->num_elements) break; zone_change = icalarray_element_at (zone->changes, change_num); } /* If we didn't find a change to use, then we have a bug! */ icalerror_assert (change_num_to_use != -1, "No applicable timezone change found"); /* Now we know exactly which timezone change applies to the time, so we can return the UTC offset and whether it is a daylight time. */ zone_change = icalarray_element_at (zone->changes, change_num_to_use); if (is_daylight) *is_daylight = zone_change->is_daylight; return zone_change->utc_offset; } /** Returns the index of a timezone change which is close to the time given in change. */ static int icaltimezone_find_nearby_change (icaltimezone *zone, icaltimezonechange *change) { icaltimezonechange *zone_change; int lower, upper, middle, cmp; /* Do a simple binary search. */ lower = middle = 0; upper = zone->changes->num_elements; while (lower < upper) { middle = (lower + upper) / 2; zone_change = icalarray_element_at (zone->changes, middle); cmp = icaltimezone_compare_change_fn (change, zone_change); if (cmp == 0) break; else if (cmp < 0) upper = middle; else lower = middle + 1; } return middle; } /** Adds (or subtracts) a time from a icaltimezonechange. NOTE: This function is exactly the same as icaltime_adjust() except for the type of the first parameter. */ static void icaltimezone_adjust_change (icaltimezonechange *tt, int days, int hours, int minutes, int seconds) { int second, minute, hour, day; int minutes_overflow, hours_overflow, days_overflow; int days_in_month; /* Add on the seconds. */ second = tt->second + seconds; tt->second = second % 60; minutes_overflow = second / 60; if (tt->second < 0) { tt->second += 60; minutes_overflow--; } /* Add on the minutes. */ minute = tt->minute + minutes + minutes_overflow; tt->minute = minute % 60; hours_overflow = minute / 60; if (tt->minute < 0) { tt->minute += 60; hours_overflow--; } /* Add on the hours. */ hour = tt->hour + hours + hours_overflow; tt->hour = hour % 24; days_overflow = hour / 24; if (tt->hour < 0) { tt->hour += 24; days_overflow--; } /* Add on the days. */ day = tt->day + days + days_overflow; if (day > 0) { for (;;) { days_in_month = icaltime_days_in_month (tt->month, tt->year); if (day <= days_in_month) break; tt->month++; if (tt->month >= 13) { tt->year++; tt->month = 1; } day -= days_in_month; } } else { while (day <= 0) { if (tt->month == 1) { tt->year--; tt->month = 12; } else { tt->month--; } day += icaltime_days_in_month (tt->month, tt->year); } } tt->day = day; } const char* icaltimezone_get_tzid (icaltimezone *zone) { /* If this is a floating time, without a timezone, return NULL. */ if (!zone) return NULL; icaltimezone_load_builtin_timezone (zone); return zone->tzid; } const char* icaltimezone_get_location (icaltimezone *zone) { /* If this is a floating time, without a timezone, return NULL. */ if (!zone) return NULL; /* Note that for builtin timezones this comes from zones.tab so we don't need to check the timezone is loaded here. */ return zone->location; } const char* icaltimezone_get_tznames (icaltimezone *zone) { /* If this is a floating time, without a timezone, return NULL. */ if (!zone) return NULL; icaltimezone_load_builtin_timezone (zone); return zone->tznames; } /** Returns the latitude of a builtin timezone. */ double icaltimezone_get_latitude (icaltimezone *zone) { /* If this is a floating time, without a timezone, return 0. */ if (!zone) return 0.0; /* Note that for builtin timezones this comes from zones.tab so we don't need to check the timezone is loaded here. */ return zone->latitude; } /** Returns the longitude of a builtin timezone. */ double icaltimezone_get_longitude (icaltimezone *zone) { /* If this is a floating time, without a timezone, return 0. */ if (!zone) return 0.0; /* Note that for builtin timezones this comes from zones.tab so we don't need to check the timezone is loaded here. */ return zone->longitude; } /** Returns the VTIMEZONE component of a timezone. */ icalcomponent* icaltimezone_get_component (icaltimezone *zone) { /* If this is a floating time, without a timezone, return NULL. */ if (!zone) return NULL; icaltimezone_load_builtin_timezone (zone); return zone->component; } /** Sets the VTIMEZONE component of an icaltimezone, initializing the tzid, location & tzname fields. It returns 1 on success or 0 on failure, i.e. no TZID was found. */ int icaltimezone_set_component (icaltimezone *zone, icalcomponent *comp) { icaltimezone_reset (zone); return icaltimezone_get_vtimezone_properties (zone, comp); } /* Returns the timezone name to display to the user. We prefer to use the Olson city name, but fall back on the TZNAME, or finally the TZID. We don't want to use "" as it may be wrongly interpreted as a floating time. Do not free the returned string. */ const char* icaltimezone_get_display_name (icaltimezone *zone) { const char *display_name; display_name = icaltimezone_get_location (zone); if (!display_name) display_name = icaltimezone_get_tznames (zone); if (!display_name) { display_name = icaltimezone_get_tzid (zone); /* Outlook will strip out X-LIC-LOCATION property and so all we get back in the iTIP replies is the TZID. So we see if this is one of our TZIDs and if so we jump to the city name at the end of it. */ if (display_name && !strncmp (display_name, ical_tzid_prefix, strlen(ical_tzid_prefix))) { /* Get the location, which is after the 3rd '/' char. */ const char *p; int num_slashes = 0; for (p = display_name; *p; p++) { if (*p == '/') { num_slashes++; if (num_slashes == 3) return p + 1; } } } } return display_name; } icalarray* icaltimezone_array_new (void) { return icalarray_new (sizeof (icaltimezone), 16); } void icaltimezone_array_append_from_vtimezone (icalarray *timezones, icalcomponent *child) { icaltimezone zone; icaltimezone_init (&zone); if (icaltimezone_get_vtimezone_properties (&zone, child)) icalarray_append (timezones, &zone); } void icaltimezone_array_free (icalarray *timezones) { icaltimezone *zone; int i; if ( timezones ) { for (i = 0; (unsigned int)i < timezones->num_elements; i++) { zone = icalarray_element_at (timezones, i); icaltimezone_free (zone, 0); } icalarray_free (timezones); } } /* * BUILTIN TIMEZONE HANDLING */ /** Returns an icalarray of icaltimezone structs, one for each builtin timezone. This will load and parse the zones.tab file to get the timezone names and their coordinates. It will not load the VTIMEZONE data for any timezones. */ icalarray* icaltimezone_get_builtin_timezones (void) { if (!builtin_timezones) icaltimezone_init_builtin_timezones (); return builtin_timezones; } /** Release builtin timezone memory */ void icaltimezone_free_builtin_timezones(void) { icaltimezone_array_free(builtin_timezones); builtin_timezones = 0; } /** Returns a single builtin timezone, given its Olson city name. */ icaltimezone* icaltimezone_get_builtin_timezone (const char *location) { icalcomponent *comp; icaltimezone *zone; unsigned int lower; const char *zone_location; if (!location || !location[0]) return NULL; if (!builtin_timezones) icaltimezone_init_builtin_timezones (); if (strcmp (location, "UTC") == 0 || strcmp (location, "GMT") == 0) return &utc_timezone; #if 0 /* Do a simple binary search. */ lower = middle = 0; upper = builtin_timezones->num_elements; while (lower < upper) { middle = (lower + upper) / 2; zone = icalarray_element_at (builtin_timezones, middle); zone_location = icaltimezone_get_location (zone); cmp = strcmp (location, zone_location); if (cmp == 0) return zone; else if (cmp < 0) upper = middle; else lower = middle + 1; } #endif /* The zones from the system are not stored in alphabetical order, so we just do a sequential search */ for (lower = 0; lower < builtin_timezones->num_elements; lower++) { zone = icalarray_element_at (builtin_timezones, lower); zone_location = icaltimezone_get_location (zone); if (strcmp (location, zone_location) == 0) return zone; } /* Check whether file exists, but is not mentioned in zone.tab. It means it's a deprecated timezone, but still available. */ comp = icaltzutil_fetch_timezone (location); if (comp) { icaltimezone tz; icaltimezone_init (&tz); if (icaltimezone_set_component (&tz, comp)) { icalarray_append (builtin_timezones, &tz); return icalarray_element_at (builtin_timezones, builtin_timezones->num_elements - 1); } else { icalcomponent_free (comp); } } return NULL; } static struct icaltimetype tm_to_icaltimetype (struct tm *tm) { struct icaltimetype itt; memset (&itt, 0, sizeof (struct icaltimetype)); itt.second = tm->tm_sec; itt.minute = tm->tm_min; itt.hour = tm->tm_hour; itt.day = tm->tm_mday; itt.month = tm->tm_mon + 1; itt.year = tm->tm_year+ 1900; itt.is_utc = 0; itt.is_date = 0; return itt; } static int get_offset (icaltimezone *zone) { struct tm local; struct icaltimetype tt; int offset; time_t now = time(NULL); gmtime_r ((const time_t *) &now, &local); tt = tm_to_icaltimetype (&local); offset = icaltimezone_get_utc_offset(zone, &tt, NULL); return offset; } /** Returns a single builtin timezone, given its offset from UTC */ icaltimezone* icaltimezone_get_builtin_timezone_from_offset (int offset, const char *tzname) { icaltimezone *zone=NULL; int count, i; if (!builtin_timezones) icaltimezone_init_builtin_timezones (); if (offset==0) return &utc_timezone; if (!tzname) return NULL; count = builtin_timezones->num_elements; for (i=0; itznames && !strcmp(tzname, zone->tznames)) return zone; } return NULL; } /** Returns a single builtin timezone, given its TZID. */ icaltimezone* icaltimezone_get_builtin_timezone_from_tzid (const char *tzid) { int num_slashes = 0; const char *p, *zone_tzid; icaltimezone *zone; if (!tzid || !tzid[0]) return NULL; if (strcmp (tzid, "UTC") == 0 || strcmp (tzid, "GMT") == 0) { return icaltimezone_get_builtin_timezone(tzid); } /* Check that the TZID starts with our unique prefix. */ if (strncmp (tzid, ical_tzid_prefix, strlen(ical_tzid_prefix))) return NULL; /* Get the location, which is after the 3rd '/' character. */ for (p = tzid; *p; p++) { if (*p == '/') { num_slashes++; if (num_slashes == 3) break; } } if (num_slashes != 3) return NULL; p++; /* Now we can use the function to get the builtin timezone from the location string. */ zone = icaltimezone_get_builtin_timezone (p); if (!zone) return NULL; /* Check that the builtin TZID matches exactly. We don't want to return a different version of the VTIMEZONE. */ zone_tzid = icaltimezone_get_tzid (zone); if (!strcmp (zone_tzid, tzid)) return zone; else return NULL; } /** Returns the special UTC timezone. */ icaltimezone* icaltimezone_get_utc_timezone (void) { if (!builtin_timezones) icaltimezone_init_builtin_timezones (); return &utc_timezone; } /** This initializes the builtin timezone data, i.e. the builtin_timezones array and the special UTC timezone. It should be called before any code that uses the timezone functions. */ static void icaltimezone_init_builtin_timezones (void) { /* Initialize the special UTC timezone. */ utc_timezone.tzid = (char *)"UTC"; #ifdef HAVE_PTHREAD pthread_mutex_lock(&builtin_mutex); #endif if (!builtin_timezones) icaltimezone_parse_zone_tab (); #ifdef HAVE_PTHREAD pthread_mutex_unlock(&builtin_mutex); #endif } static int parse_coord (char *coord, int len, int *degrees, int *minutes, int *seconds) { if (len == 5) sscanf (coord + 1, "%2d%2d", degrees, minutes); else if (len == 6) sscanf (coord + 1, "%3d%2d", degrees, minutes); else if (len == 7) sscanf (coord + 1, "%2d%2d%2d", degrees, minutes, seconds); else if (len == 8) sscanf (coord + 1, "%3d%2d%2d", degrees, minutes, seconds); else { fprintf (stderr, "Invalid coordinate: %s\n", coord); return 1; } if (coord [0] == '-') *degrees = -*degrees; return 0; } static int fetch_lat_long_from_string (const char *str, int *latitude_degrees, int *latitude_minutes, int *latitude_seconds, int *longitude_degrees, int *longitude_minutes, int *longitude_seconds, char *location) { size_t len; char *sptr, *lat, *lon, *loc, *temp; /* We need to parse the latitude/longitude co-ordinates and location fields */ sptr = (char *) str; while (*sptr != '\t') sptr++; temp = ++sptr; while (*sptr != '\t') sptr++; len = sptr-temp; lat = (char *) malloc (len + 1); lat = strncpy (lat, temp, len); lat [len] = '\0'; while (*sptr != '\t') sptr++; loc = ++sptr; while (!isspace (*sptr)) sptr++; len = sptr - loc; location = strncpy (location, loc, len); location [len] = '\0'; #if defined(sun) && defined(__SVR4) /* Handle EET, MET and WET in zone_sun.tab. */ if (!strcmp (location, "Europe/")) { while (*sptr != '\t') sptr++; loc = ++sptr; while (!isspace (*sptr)) sptr++; len = sptr - loc; location = strncpy (location, loc, len); location [len] = '\0'; } #endif lon = lat + 1; while (*lon != '+' && *lon != '-') lon++; if (parse_coord (lat, (int)(lon - lat), latitude_degrees, latitude_minutes, latitude_seconds) == 1 || parse_coord (lon, (int)strlen(lon), longitude_degrees, longitude_minutes, longitude_seconds) == 1) { free(lat); return 1; } free (lat); return 0; } /** This parses the zones.tab file containing the names and locations of the builtin timezones. It creates the builtin_timezones array which is an icalarray of icaltimezone structs. It only fills in the location, latitude and longtude fields; the rest are left blank. The VTIMEZONE component is loaded later if it is needed. The timezones in the zones.tab file are sorted by their name, which is useful for binary searches. */ static void icaltimezone_parse_zone_tab (void) { char *filename; FILE *fp; char buf[1024]; /* Used to store each line of zones.tab as it is read. */ char location[1024]; /* Stores the city name when parsing buf. */ size_t filename_len; int latitude_degrees = 0, latitude_minutes = 0, latitude_seconds = 0; int longitude_degrees = 0, longitude_minutes = 0, longitude_seconds = 0; icaltimezone zone; icalerror_assert (builtin_timezones == NULL, "Parsing zones.tab file multiple times"); builtin_timezones = icalarray_new (sizeof (icaltimezone), 32); #ifndef USE_BUILTIN_TZDATA filename_len = strlen ((char *) icaltzutil_get_zone_directory()) + strlen (ZONES_TAB_SYSTEM_FILENAME) + 2; #else filename_len = strlen (get_zone_directory()) + strlen (ZONES_TAB_FILENAME) + 2; #endif filename = (char*) malloc (filename_len); if (!filename) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } #ifndef USE_BUILTIN_TZDATA snprintf (filename, filename_len, "%s/%s", icaltzutil_get_zone_directory (), ZONES_TAB_SYSTEM_FILENAME); #else snprintf (filename, filename_len, "%s/%s", get_zone_directory(), ZONES_TAB_FILENAME); #endif fp = fopen (filename, "r"); free (filename); if (!fp) { icalerror_set_errno(ICAL_FILE_ERROR); return; } while (fgets (buf, sizeof(buf), fp)) { if (*buf == '#') continue; #ifdef USE_BUILTIN_TZDATA /* The format of each line is: "latitude longitude location". */ if (sscanf (buf, "%4d%2d%2d %4d%2d%2d %s", &latitude_degrees, &latitude_minutes, &latitude_seconds, &longitude_degrees, &longitude_minutes, &longitude_seconds, location) != 7) { fprintf (stderr, "Invalid timezone description line: %s\n", buf); continue; } #else if (fetch_lat_long_from_string (buf, &latitude_degrees, &latitude_minutes, &latitude_seconds, &longitude_degrees, &longitude_minutes, &longitude_seconds, location)) { fprintf (stderr, "Invalid timezone description line: %s\n", buf); continue; } #endif icaltimezone_init (&zone); zone.location = strdup (location); if (latitude_degrees >= 0) zone.latitude = (double) latitude_degrees + (double) latitude_minutes / 60 + (double) latitude_seconds / 3600; else zone.latitude = (double) latitude_degrees - (double) latitude_minutes / 60 - (double) latitude_seconds / 3600; if (longitude_degrees >= 0) zone.longitude = (double) longitude_degrees + (double) longitude_minutes / 60 + (double) longitude_seconds / 3600; else zone.longitude = (double) longitude_degrees - (double) longitude_minutes / 60 - (double) longitude_seconds / 3600; icalarray_append (builtin_timezones, &zone); #if 0 printf ("Found zone: %s %f %f\n", location, zone.latitude, zone.longitude); #endif } fclose (fp); } void icaltimezone_release_zone_tab (void) { unsigned int i; icalarray *mybuiltin_timezones = builtin_timezones; if (builtin_timezones == NULL) return; builtin_timezones = NULL; for (i = 0; i < mybuiltin_timezones->num_elements; i++) free ( ((icaltimezone*)icalarray_element_at(mybuiltin_timezones, i))->location); icalarray_free (mybuiltin_timezones); } /** Loads the builtin VTIMEZONE data for the given timezone. */ static void icaltimezone_load_builtin_timezone (icaltimezone *zone) { icalcomponent *subcomp; /* If the location isn't set, it isn't a builtin timezone. */ if (!zone->location || !zone->location[0]) return; #ifdef HAVE_PTHREAD pthread_mutex_lock(&builtin_mutex); if (zone->component) goto out; #else #ifdef USE_BUILTIN_TZDATA if (zone->component) return; #endif #endif #ifdef USE_BUILTIN_TZDATA { char *filename; icalcomponent *comp; unsigned int filename_len; FILE *fp; icalparser *parser; filename_len = strlen (get_zone_directory()) + strlen (zone->location) + 6; filename = (char*) malloc (filename_len); if (!filename) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto out; } snprintf (filename, filename_len, "%s/%s.ics", get_zone_directory(), zone->location); fp = fopen (filename, "r"); free (filename); if (!fp) { icalerror_set_errno(ICAL_FILE_ERROR); goto out; } /* ##### B.# Sun, 11 Nov 2001 04:04:29 +1100 this is where the MALFORMEDDATA error is being set, after the call to 'icalparser_parse' fprintf(stderr, "** WARNING ** %s: %d %s\n", __FILE__, __LINE__, icalerror_strerror(icalerrno)); */ parser = icalparser_new (); icalparser_set_gen_data (parser, fp); comp = icalparser_parse (parser, icaltimezone_load_get_line_fn); icalparser_free (parser); fclose (fp); /* Find the VTIMEZONE component inside the VCALENDAR. There should be 1. */ subcomp = icalcomponent_get_first_component (comp, ICAL_VTIMEZONE_COMPONENT); #else subcomp = icaltzutil_fetch_timezone (zone->location); #endif if (!subcomp) { icalerror_set_errno(ICAL_PARSE_ERROR); goto out; } icaltimezone_get_vtimezone_properties (zone, subcomp); #ifdef USE_BUILTIN_TZDATA icalcomponent_remove_component(comp,subcomp); icalcomponent_free(comp); } #endif out: #ifdef HAVE_PTHREAD pthread_mutex_unlock(&builtin_mutex); #endif return; } #ifdef USE_BUILTIN_TZDATA /** Callback used from icalparser_parse() */ static char * icaltimezone_load_get_line_fn (char *s, size_t size, void *data) { return fgets (s, (int)size, (FILE*) data); } #endif /* * DEBUGGING */ /** * This outputs a list of timezone changes for the given timezone to the * given file, up to the maximum year given. We compare this output with the * output from 'vzic --dump-changes' to make sure that we are consistent. * (vzic is the Olson timezone database to VTIMEZONE converter.) * * The output format is: * * Zone-Name [tab] Date [tab] Time [tab] UTC-Offset * * The Date and Time fields specify the time change in UTC. * * The UTC Offset is for local (wall-clock) time. It is the amount of time * to add to UTC to get local time. */ int icaltimezone_dump_changes (icaltimezone *zone, int max_year, FILE *fp) { static const char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; icaltimezonechange *zone_change; int change_num; char buffer[8]; /* Make sure the changes array is expanded up to the given time. */ icaltimezone_ensure_coverage (zone, max_year); #if 0 printf ("Num changes: %i\n", zone->changes->num_elements); #endif for (change_num = 0; (unsigned int)change_num < zone->changes->num_elements; change_num++) { zone_change = icalarray_element_at (zone->changes, change_num); if (zone_change->year > max_year) break; fprintf (fp, "%s\t%2i %s %04i\t%2i:%02i:%02i", zone->location, zone_change->day, months[zone_change->month - 1], zone_change->year, zone_change->hour, zone_change->minute, zone_change->second); /* Wall Clock Time offset from UTC. */ format_utc_offset (zone_change->utc_offset, buffer); fprintf (fp, "\t%s", buffer); fprintf (fp, "\n"); } return 1; } /** This formats a UTC offset as "+HHMM" or "+HHMMSS". buffer should have space for 8 characters. */ static void format_utc_offset (int utc_offset, char *buffer) { const char *sign = "+"; int hours, minutes, seconds; if (utc_offset < 0) { utc_offset = -utc_offset; sign = "-"; } hours = utc_offset / 3600; minutes = (utc_offset % 3600) / 60; seconds = utc_offset % 60; /* Sanity check. Standard timezone offsets shouldn't be much more than 12 hours, and daylight saving shouldn't change it by more than a few hours. (The maximum offset is 15 hours 56 minutes at present.) */ if (hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60 || seconds < 0 || seconds >= 60) { fprintf (stderr, "Warning: Strange timezone offset: H:%i M:%i S:%i\n", hours, minutes, seconds); } if (seconds == 0) snprintf (buffer, sizeof(buffer), "%s%02i%02i", sign, hours, minutes); else snprintf (buffer, sizeof(buffer), "%s%02i%02i%02i", sign, hours, minutes, seconds); } static const char* get_zone_directory(void) { #ifndef WIN32 return zone_files_directory == NULL ? ZONEINFO_DIRECTORY : zone_files_directory; #else wchar_t wbuffer[1000]; #ifndef _WIN32_WCE char buffer[1000], zoneinfodir[1000], dirname[1000]; #else wchar_t zoneinfodir[1000], dirname[1000]; #endif int used_default; static char *cache = NULL; #ifndef _WIN32_WCE char *dirslash, *zislash; #else wchar_t *dirslash, *zislash; #endif struct stat st; if (zone_files_directory) return zone_files_directory; if (cache) return cache; /* Get the filename of the application */ if (!GetModuleFileNameW (NULL, wbuffer, sizeof (wbuffer) / sizeof (wbuffer[0]))) return ZONEINFO_DIRECTORY; /*wince supports only unicode*/ #ifndef _WIN32_WCE /* Convert to system codepage */ if (!WideCharToMultiByte (CP_ACP, 0, wbuffer, -1, buffer, sizeof (buffer), NULL, &used_default) || used_default) { /* Failed, try 8.3 format */ if (!GetShortPathNameW (wbuffer, wbuffer, sizeof (wbuffer) / sizeof (wbuffer[0])) || !WideCharToMultiByte (CP_ACP, 0, wbuffer, -1, buffer, sizeof (buffer), NULL, &used_default) || used_default) return ZONEINFO_DIRECTORY; } #endif /* Look for the zoneinfo directory somewhere in the path where * the app is installed. If the path to the app is * * C:\opt\evo-2.6\bin\evolution-2.6.exe * * and the compile-time ZONEINFO_DIRECTORY is * * C:/devel/target/evo/share/evolution-data-server-1.6/zoneinfo, * * we check the pathnames: * * C:\opt\evo-2.6/devel/target/evo/share/evolution-data-server-1.6/zoneinfo * C:\opt\evo-2.6/target/evo/share/evolution-data-server-1.6/zoneinfo * C:\opt\evo-2.6/evo/share/evolution-data-server-1.6/zoneinfo * C:\opt\evo-2.6/share/evolution-data-server-1.6/zoneinfo <=== * C:\opt\evo-2.6/evolution-data-server-1.6/zoneinfo * C:\opt\evo-2.6/zoneinfo * C:\opt/devel/target/evo/share/evolution-data-server-1.6/zoneinfo * C:\opt/target/evo/share/evolution-data-server-1.6/zoneinfo * C:\opt/evo/share/evolution-data-server-1.6/zoneinfo * C:\opt/share/evolution-data-server-1.6/zoneinfo * C:\opt/evolution-data-server-1.6/zoneinfo * C:\opt/zoneinfo * C:/devel/target/evo/share/evolution-data-server-1.6/zoneinfo * C:/target/evo/share/evolution-data-server-1.6/zoneinfo * C:/evo/share/evolution-data-server-1.6/zoneinfo * C:/share/evolution-data-server-1.6/zoneinfo * C:/evolution-data-server-1.6/zoneinfo * C:/zoneinfo * * In Evolution's case, we would get a match already at the * fourth pathname check. */ /* Strip away basename of app .exe first */ #ifndef _WIN32_WCE dirslash = _mbsrchr (buffer, '\\'); #else dirslash = wcsrchr (wbuffer, L'\\'); #endif if (dirslash) #ifndef _WIN32_WCE *dirslash = '\0'; #else *dirslash = L'\0'; #endif #ifdef _WIN32_WCE while ((dirslash = wcsrchr (wbuffer, '\\'))) { /* Strip one more directory from app .exe location */ *dirslash = L'\0'; MultiByteToWideChar(CP_ACP,0,ZONEINFO_DIRECTORY,-1,zoneinfodir,1000); while ((zislash = wcschr (zoneinfodir, L'/'))) { *zislash = L'.'; wcscpy (dirname, wbuffer); wcscat (dirname, "/"); wcscat (dirname, zislash + 1); if (stat (dirname, &st) == 0 && S_ISDIR (st.st_mode)) { cache = wce_wctomb (dirname); return cache; } } } #else while ((dirslash = _mbsrchr (buffer, '\\'))) { /* Strip one more directory from app .exe location */ *dirslash = '\0'; strcpy (zoneinfodir, ZONEINFO_DIRECTORY); while ((zislash = _mbschr (zoneinfodir, '/'))) { *zislash = '.'; strcpy (dirname, buffer); strcat (dirname, "/"); strcat (dirname, zislash + 1); if (stat (dirname, &st) == 0 && S_ISDIR (st.st_mode)) { cache = strdup (dirname); return cache; } } } #endif return ZONEINFO_DIRECTORY; #endif } void set_zone_directory(char *path) { if (zone_files_directory) free_zone_directory(); zone_files_directory = malloc(strlen(path)+1); if ( zone_files_directory != NULL ) { strcpy(zone_files_directory,path); } } void free_zone_directory(void) { if ( zone_files_directory != NULL ) { free(zone_files_directory); zone_files_directory = NULL; } } void icaltimezone_set_tzid_prefix(const char *new_prefix) { if (new_prefix) { ical_tzid_prefix = new_prefix; } } libical-1.0/src/libical/icalderivedproperty.h.in0000664000076400007640000000170112132563132020754 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalderivedproperties.{c,h} CREATOR: eric 09 May 1999 $Id: icalderivedproperty.h.in,v 1.7 2007-04-30 13:57:48 artcancro Exp $ This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ #ifndef ICALDERIVEDPROPERTY_H #define ICALDERIVEDPROPERTY_H #include #include "icalparameter.h" #include "icalderivedvalue.h" #include "icalrecur.h" typedef struct icalproperty_impl icalproperty; libical-1.0/src/libical/icalderivedvalue.h.in0000664000076400007640000000514412132563132020211 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue.h CREATOR: eric 20 March 1999 $Id: icalderivedvalue.h.in,v 1.10 2007-04-30 13:57:48 artcancro Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.h ======================================================================*/ #ifndef ICALDERIVEDVALUE_H #define ICALDERIVEDVALUE_H #include "icaltypes.h" #include "icalrecur.h" #include "icaltime.h" #include "icalduration.h" #include "icalperiod.h" #include "icalattach.h" typedef struct icalvalue_impl icalvalue; void icalvalue_set_x(icalvalue* value, const char* v); icalvalue* icalvalue_new_x(const char* v); const char* icalvalue_get_x(const icalvalue* value); icalvalue* icalvalue_new_recur (struct icalrecurrencetype v); void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value); icalvalue* icalvalue_new_trigger (struct icaltriggertype v); void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v); struct icaltriggertype icalvalue_get_trigger(const icalvalue* value); icalvalue* icalvalue_new_datetime(struct icaltimetype v); struct icaltimetype icalvalue_get_datetime(const icalvalue* value); void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v); void icalvalue_set_datetimeperiod(icalvalue* value, struct icaldatetimeperiodtype v); struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value); /* GEO */ icalvalue* icalvalue_new_geo(struct icalgeotype v); struct icalgeotype icalvalue_get_geo(const icalvalue* value); void icalvalue_set_geo(icalvalue* value, struct icalgeotype v); icalvalue *icalvalue_new_attach (icalattach *attach); void icalvalue_set_attach (icalvalue *value, icalattach *attach); icalattach *icalvalue_get_attach (const icalvalue *value); void icalvalue_reset_kind(icalvalue* value); icalvalue* icalvalue_new_class(enum icalproperty_class v); enum icalproperty_class icalvalue_get_class(const icalvalue* value); void icalvalue_set_class(icalvalue* value, enum icalproperty_class v); libical-1.0/src/libical/icalproperty_cxx.cpp0000664000076400007640000004371312132563132020232 0ustar allenallen/* -*- Mode: C++ -*- */ /** * @file icalproperty_cxx.cpp * @author fnguyen (12/10/01) * @brief Implementation of C++ Wrapper for icalproperty.c * * (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ #ifndef ICALPROPERTY_CXX_H #include "icalproperty_cxx.h" #endif #ifndef ICALPARAMETER_CXX_H #include "icalparameter_cxx.h" #endif #ifndef ICALVALUE_CXX_H #include "icalvalue_cxx.h" #endif ICalProperty::ICalProperty() : imp(icalproperty_new(ICAL_ANY_PROPERTY)){ } ICalProperty::ICalProperty(const ICalProperty& v) throw(icalerrorenum){ imp = icalproperty_new_clone(v.imp); if (!imp) throw icalerrno; } ICalProperty& ICalProperty::operator=(const ICalProperty& v) throw(icalerrorenum) { if (this == &v) return *this; if (imp != NULL) { icalproperty_free(imp); imp = icalproperty_new_clone(v.imp); if (!imp) throw icalerrno; } return *this; } ICalProperty::~ICalProperty(){ if (imp != NULL) icalproperty_free(imp); } ICalProperty::ICalProperty(icalproperty* v) : imp(v) { } ICalProperty::ICalProperty(string str){ imp = icalproperty_new_from_string(str); } ICalProperty::ICalProperty(icalproperty_kind kind){ imp = icalproperty_new(kind); } string ICalProperty::as_ical_string(){ return (string)icalproperty_as_ical_string(imp); } icalproperty_kind ICalProperty::isa(){ return icalproperty_isa(imp); } int ICalProperty::isa_property(void* property){ return icalproperty_isa_property(property); } int ICalProperty::operator==(ICalProperty& rhs){ icalparameter_xliccomparetype result; ICalValue* thisPropValue = this->get_value(); ICalValue* rhsPropValue = rhs.get_value(); result = icalvalue_compare((icalvalue*)*thisPropValue, (icalvalue*)*rhsPropValue); return (result == ICAL_XLICCOMPARETYPE_EQUAL); } void ICalProperty::add_parameter(ICalParameter& parameter){ icalproperty_add_parameter(imp, parameter); } void ICalProperty::set_parameter(ICalParameter ¶meter){ icalproperty_set_parameter(imp, parameter); } void ICalProperty::set_parameter_from_string(string name, string val){ icalproperty_set_parameter_from_string(imp, name, val); } string ICalProperty::get_parameter_as_string(string name){ return (string)icalproperty_get_parameter_as_string(imp, name); } void ICalProperty::remove_parameter(icalparameter_kind kind){ icalproperty_remove_parameter(imp, kind); } int ICalProperty::count_parameters(){ return icalproperty_count_parameters(imp); } /** Iterate through the parameters */ ICalParameter* ICalProperty::get_first_parameter(icalparameter_kind kind){ icalparameter* p = icalproperty_get_first_parameter(imp, kind); return (p != NULL)? new ICalParameter(p): NULL; } ICalParameter* ICalProperty::get_next_parameter(icalparameter_kind kind){ icalparameter* p = icalproperty_get_next_parameter(imp, kind); return (p != NULL)? new ICalParameter(p): NULL; } /** Access the value of the property */ void ICalProperty::set_value(const ICalValue& val){ icalproperty_set_value(imp, (ICalValue&)val); } void ICalProperty::set_value_from_string(string val, string kind){ icalproperty_set_value_from_string(imp, val, kind); } ICalValue* ICalProperty::get_value(){ return new ICalValue(icalproperty_get_value(imp)); } string ICalProperty::get_value_as_string(){ return (string)icalproperty_get_value_as_string(imp); } /** Return the name of the property -- the type name converted to a * string, or the value of get_x_name if the type is X property */ string ICalProperty::get_name(){ return (string)icalproperty_get_property_name(imp); } /* Deal with X properties */ void ICalProperty::set_x_name(ICalProperty &prop, string name){ icalproperty_set_x_name(prop, name); } string ICalProperty::get_x_name(ICalProperty &prop){ return (string)icalproperty_get_x_name(prop); } icalvalue_kind ICalProperty::icalparameter_value_to_value_kind(icalparameter_value val){ return icalparameter_value_to_value_kind(val); } /* Convert kinds to string and get default value type */ icalvalue_kind ICalProperty::kind_to_value_kind(icalproperty_kind kind){ return icalproperty_kind_to_value_kind(kind); } icalproperty_kind ICalProperty::value_kind_to_kind(icalvalue_kind kind){ return icalproperty_value_kind_to_kind(kind); } string ICalProperty::kind_to_string(icalproperty_kind kind){ return (string)icalproperty_kind_to_string(kind); } icalproperty_kind ICalProperty::string_to_kind(string str){ return icalproperty_string_to_kind(str); } string ICalProperty::method_to_string(icalproperty_method method){ return (string)icalproperty_method_to_string(method); } icalproperty_method ICalProperty::string_to_method(string str){ return icalproperty_string_to_method(str); } string ICalProperty::enum_to_string(int e){ return (string)icalproperty_enum_to_string(e); } int ICalProperty::string_to_enum(string str){ return icalproperty_string_to_enum(str); } string ICalProperty::status_to_string(icalproperty_status s){ return (string)icalproperty_status_to_string(s); } icalproperty_status ICalProperty::string_to_status(string str){ return icalproperty_string_to_status(str); } int ICalProperty::enum_belongs_to_property(icalproperty_kind kind, int e){ return icalproperty_enum_belongs_to_property(kind, e); } /* ACTION */ void ICalProperty::set_action(enum icalproperty_action val){ icalproperty_set_action(imp, val); } enum icalproperty_action ICalProperty::get_action(){ return icalproperty_get_action(imp); } /* ATTACH */ void ICalProperty::set_attach(icalattach *val){ icalproperty_set_attach(imp, val); } icalattach * ICalProperty::get_attach(){ return icalproperty_get_attach(imp); } /* ATTENDEE */ void ICalProperty::set_attendee(string val){ icalproperty_set_attendee(imp, val); } string ICalProperty::get_attendee(){ return (string)icalproperty_get_attendee(imp); } /* CALSCALE */ void ICalProperty::set_calscale(string val){ icalproperty_set_calscale(imp, val); } string ICalProperty::get_calscale(){ return (string)icalproperty_get_calscale(imp); } /* CATEGORIES */ void ICalProperty::set_categories(string val){ icalproperty_set_categories(imp, val); } string ICalProperty::get_categories(){ return (string)icalproperty_get_categories(imp); } /* CLASS */ void ICalProperty::set_class(enum icalproperty_class val){ icalproperty_set_class(imp, val); } enum icalproperty_class ICalProperty::get_class(){ return (enum icalproperty_class)icalproperty_get_class(imp); } /* COMMENT */ void ICalProperty::set_comment(string val){ icalproperty_set_comment(imp, val); } string ICalProperty::get_comment(){ return (string)icalproperty_get_comment(imp); } /* COMPLETED */ void ICalProperty::set_completed(struct icaltimetype val){ icalproperty_set_completed(imp, val); } struct icaltimetype ICalProperty::get_completed(){ return icalproperty_get_completed(imp); } /* CONTACT */ void ICalProperty::set_contact(string val){ icalproperty_set_contact(imp, val); } string ICalProperty::get_contact(){ return (string)icalproperty_get_contact(imp); } /* CREATED */ void ICalProperty::set_created(struct icaltimetype val){ icalproperty_set_created(imp, val); } struct icaltimetype ICalProperty::get_created(){ return icalproperty_get_created(imp); } /* DESCRIPTION */ void ICalProperty::set_description(string val){ icalproperty_set_description(imp, val); } string ICalProperty::get_description(){ return (string)icalproperty_get_description(imp); } /* DTEND */ void ICalProperty::set_dtend(struct icaltimetype val){ icalproperty_set_dtend(imp, val); } struct icaltimetype ICalProperty::get_dtend(){ return icalproperty_get_dtend(imp); } /* DTSTAMP */ void ICalProperty::set_dtstamp(struct icaltimetype val){ icalproperty_set_dtstamp(imp, val); } struct icaltimetype ICalProperty::get_dtstamp(){ return icalproperty_get_dtstamp(imp); } /* DTSTART */ void ICalProperty::set_dtstart(struct icaltimetype val){ icalproperty_set_dtstart(imp, val); } struct icaltimetype ICalProperty::get_dtstart(){ return icalproperty_get_dtstart(imp); } /* DUE */ void ICalProperty::set_due(struct icaltimetype val){ icalproperty_set_due(imp, val); } struct icaltimetype ICalProperty::get_due(){ return icalproperty_get_due(imp); } /* DURATION */ void ICalProperty::set_duration(struct icaldurationtype val){ icalproperty_set_duration(imp, val); } struct icaldurationtype ICalProperty::get_duration(){ return icalproperty_get_duration(imp); } /* EXDATE */ void ICalProperty::set_exdate(struct icaltimetype val){ icalproperty_set_exdate(imp, val); } struct icaltimetype ICalProperty::get_exdate(){ return icalproperty_get_exdate(imp); } /* EXPAND */ void ICalProperty::set_expand(int val){ icalproperty_set_expand(imp, val); } int ICalProperty::get_expand(){ return icalproperty_get_expand(imp); } /* EXRULE */ void ICalProperty::set_exrule(struct icalrecurrencetype val){ icalproperty_set_exrule(imp, val); } struct icalrecurrencetype ICalProperty::get_exrule(){ return icalproperty_get_exrule(imp); } /* FREEBUSY */ void ICalProperty::set_freebusy(struct icalperiodtype val){ icalproperty_set_freebusy(imp, val); } struct icalperiodtype ICalProperty::get_freebusy(){ return icalproperty_get_freebusy(imp); } /* GEO */ void ICalProperty::set_geo(struct icalgeotype val){ icalproperty_set_geo(imp, val); } struct icalgeotype ICalProperty::get_geo(){ return icalproperty_get_geo(imp); } /* LAST-MODIFIED */ void ICalProperty::set_lastmodified(struct icaltimetype val){ icalproperty_set_lastmodified(imp, val); } struct icaltimetype ICalProperty::get_lastmodified(){ return icalproperty_get_lastmodified(imp); } /* LOCATION */ void ICalProperty::set_location(string val){ icalproperty_set_location(imp, val); } string ICalProperty::get_location(){ return (string)icalproperty_get_location(imp); } /* MAXRESULTS */ void ICalProperty::set_maxresults(int val){ icalproperty_set_maxresults(imp, val); } int ICalProperty::get_maxresults(){ return icalproperty_get_maxresults(imp); } /* MAXRESULTSSIZE */ void ICalProperty::set_maxresultsize(int val){ icalproperty_set_maxresultssize(imp, val); } int ICalProperty::get_maxresultsize(){ return icalproperty_get_maxresultssize(imp); } /* METHOD */ void ICalProperty::set_method(enum icalproperty_method val){ icalproperty_set_method(imp, val); } enum icalproperty_method ICalProperty::get_method(){ return icalproperty_get_method(imp); } /* ORGANIZER */ void ICalProperty::set_organizer(string val){ icalproperty_set_organizer(imp, val); } string ICalProperty::get_organizer(){ return (string)icalproperty_get_organizer(imp); } /* OWNER */ void ICalProperty::set_owner(string val){ icalproperty_set_owner(imp, val); } string ICalProperty::get_owner(){ return (string)icalproperty_get_owner(imp); } /* PERCENT-COMPLETE */ void ICalProperty::set_percentcomplete(int val){ icalproperty_set_percentcomplete(imp, val); } int ICalProperty::get_percentcomplete(){ return icalproperty_get_percentcomplete(imp); } /* PRIORITY */ void ICalProperty::set_priority(int val){ icalproperty_set_priority(imp, val); } int ICalProperty::get_priority(){ return icalproperty_get_priority(imp); } /* PRODID */ void ICalProperty::set_prodid(string val){ icalproperty_set_prodid(imp, val); } string ICalProperty::get_prodid(){ return (string)icalproperty_get_prodid(imp); } /* QUERY */ void ICalProperty::set_query(string val){ icalproperty_set_query(imp, val); } string ICalProperty::get_query(){ return (string)icalproperty_get_query(imp); } /* QUERYNAME */ void ICalProperty::set_queryname(string val){ icalproperty_set_queryname(imp, val); } string ICalProperty::get_queryname(){ return (string)icalproperty_get_queryname(imp); } /* RDATE */ void ICalProperty::set_rdate(struct icaldatetimeperiodtype val){ icalproperty_set_rdate(imp, val); } struct icaldatetimeperiodtype ICalProperty::get_rdate(){ return icalproperty_get_rdate(imp); } /* RECURRENCE-ID */ void ICalProperty::set_recurrenceid(struct icaltimetype val){ icalproperty_set_recurrenceid(imp, val); } struct icaltimetype ICalProperty::get_recurrenceid(){ return icalproperty_get_recurrenceid(imp); } /* RELATED-TO */ void ICalProperty::set_relatedto(string val){ icalproperty_set_relatedto(imp, val); } string ICalProperty::get_relatedto(){ return (string)icalproperty_get_relatedto(imp); } /* RELCALID */ void ICalProperty::set_relcalid(string val){ icalproperty_set_relcalid(imp, val); } string ICalProperty::get_relcalid(){ return (string)icalproperty_get_relcalid(imp); } /* REPEAT */ void ICalProperty::set_repeat(int val){ icalproperty_set_repeat(imp, val); } int ICalProperty::get_repeat(){ return icalproperty_get_repeat(imp); } /* REQUEST-STATUS */ void ICalProperty::set_requeststatus(string val){ icalreqstattype v; v = icalreqstattype_from_string((char*)val); icalproperty_set_requeststatus(imp, v); } string ICalProperty::get_requeststatus(){ icalreqstattype v; v = icalproperty_get_requeststatus(imp); return (string)(icalreqstattype_as_string(v)); } /* RESOURCES */ void ICalProperty::set_resources(string val){ icalproperty_set_resources(imp, val); } string ICalProperty::get_resources(){ return (string)icalproperty_get_resources(imp); } /* RRULE */ void ICalProperty::set_rrule(struct icalrecurrencetype val){ icalproperty_set_rrule(imp, val); } struct icalrecurrencetype ICalProperty::get_rrule(){ return icalproperty_get_rrule(imp); } /* SCOPE */ void ICalProperty::set_scope(string val){ icalproperty_set_scope(imp, val); } string ICalProperty::get_scope(){ return (string)icalproperty_get_scope(imp); } /* SEQUENCE */ void ICalProperty::set_sequence(int val){ icalproperty_set_sequence(imp, val); } int ICalProperty::get_sequence(){ return icalproperty_get_sequence(imp); } /* STATUS */ void ICalProperty::set_status(enum icalproperty_status val){ icalproperty_set_status(imp, val); } enum icalproperty_status ICalProperty::get_status(){ return icalproperty_get_status(imp); } /* SUMMARY */ void ICalProperty::set_summary(string val){ icalproperty_set_summary(imp, val); } string ICalProperty::get_summary(){ return (string)icalproperty_get_summary(imp); } /* TARGET */ void ICalProperty::set_target(string val){ icalproperty_set_target(imp, val); } string ICalProperty::get_target(){ return (string)icalproperty_get_target(imp); } /* TRANSP */ void ICalProperty::set_transp(enum icalproperty_transp val){ icalproperty_set_transp(imp, val); } enum icalproperty_transp ICalProperty::get_transp(){ return icalproperty_get_transp(imp); } /* TRIGGER */ void ICalProperty::set_trigger(struct icaltriggertype val){ icalproperty_set_trigger(imp, val); } struct icaltriggertype ICalProperty::get_trigger(){ return icalproperty_get_trigger(imp); } /* TZID */ void ICalProperty::set_tzid(string val){ icalproperty_set_tzid(imp, val); } string ICalProperty::get_tzid(){ return (string)icalproperty_get_tzid(imp); } /* TZNAME */ void ICalProperty::set_tzname(string val){ icalproperty_set_tzname(imp, val); } string ICalProperty::get_tzname(){ return (string)icalproperty_get_tzname(imp); } /* TZOFFSETFROM */ void ICalProperty::set_tzoffsetfrom(int val){ icalproperty_set_tzoffsetfrom(imp, val); } int ICalProperty::get_tzoffsetfrom(){ return icalproperty_get_tzoffsetfrom(imp); } /* TZOFFSETTO */ void ICalProperty::set_tzoffsetto(int val){ icalproperty_set_tzoffsetto(imp, val); } int ICalProperty::get_tzoffsetto(){ return icalproperty_get_tzoffsetto(imp); } /* TZURL */ void ICalProperty::set_tzurl(string val){ icalproperty_set_tzurl(imp, val); } string ICalProperty::get_tzurl(){ return (string)icalproperty_get_tzurl(imp); } /* UID */ void ICalProperty::set_uid(string val){ icalproperty_set_uid(imp, val); } string ICalProperty::get_uid(){ return (string)icalproperty_get_uid(imp); } /* URL */ void ICalProperty::set_url(string val){ icalproperty_set_url(imp, val); } string ICalProperty::get_url(){ return (string)icalproperty_get_url(imp); } /* VERSION */ void ICalProperty::set_version(string val){ icalproperty_set_version(imp, val); } string ICalProperty::get_version(){ return (string)icalproperty_get_version(imp); } /* X */ void ICalProperty::set_x(string val){ icalproperty_set_x(imp, val); } string ICalProperty::get_x(){ return (string)icalproperty_get_x(imp); } /* X-LIC-CLUSTERCOUNT */ void ICalProperty::set_xlicclustercount(string val){ icalproperty_set_xlicclustercount(imp, val); } string ICalProperty::get_xlicclustercount(){ return (string)icalproperty_get_xlicclustercount(imp); } /* X-LIC-ERROR */ void ICalProperty::set_xlicerror(string val){ icalproperty_set_xlicerror(imp, val); } string ICalProperty::get_xlicerror(){ return (string)icalproperty_get_xlicerror(imp); } /* X-LIC-MIMECHARSET */ void ICalProperty::set_xlicmimecharset(string val){ icalproperty_set_xlicmimecharset(imp, val); } string ICalProperty::get_xlicmimecharset(){ return (string)icalproperty_get_xlicmimecharset(imp); } /* X-LIC-MIMECID */ void ICalProperty::set_xlicmimecid(string val){ icalproperty_set_xlicmimecid(imp, val); } string ICalProperty::get_xlicmimecid(){ return (string)icalproperty_get_xlicmimecid(imp); } /* X-LIC-MIMECONTENTTYPE */ void ICalProperty::set_xlicmimecontenttype(string val){ icalproperty_set_xlicmimecontenttype(imp, val); } string ICalProperty::get_xlicmimecontenttype(){ return (string)icalproperty_get_xlicmimecontenttype(imp); } /* X-LIC-MIMEENCODING */ void ICalProperty::set_xlicmimeencoding(string val){ icalproperty_set_xlicmimeencoding(imp, val); } string ICalProperty::get_xlicmimeencoding(){ return (string)icalproperty_get_xlicmimeencoding(imp); } /* X-LIC-MIMEFILENAME */ void ICalProperty::set_xlicmimefilename(string val){ icalproperty_set_xlicmimefilename(imp, val); } string ICalProperty::get_xlicmimefilename(){ return (string)icalproperty_get_xlicmimefilename(imp); } /* X-LIC-MIMEOPTINFO */ void ICalProperty::set_xlicmimeoptinfo(string val){ icalproperty_set_xlicmimeoptinfo(imp, val); } string ICalProperty::get_xlicmimeoptinfo(){ return (string)icalproperty_get_xlicmimeoptinfo(imp); } libical-1.0/src/libical/icalrecur.h0000664000076400007640000001323012132563132016240 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalrecur.h CREATOR: eric 20 March 2000 (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ /** @file icalrecur.h @brief Routines for dealing with recurring time How to use: 1) Get a rule and a start time from a component @code icalproperty rrule; struct icalrecurrencetype recur; struct icaltimetype dtstart; rrule = icalcomponent_get_first_property(comp,ICAL_RRULE_PROPERTY); recur = icalproperty_get_rrule(rrule); start = icalproperty_get_dtstart(dtstart); @endcode Or, just make them up: @code recur = icalrecurrencetype_from_string("FREQ=YEARLY;BYDAY=SU,WE"); dtstart = icaltime_from_string("19970101T123000") @endcode 2) Create an iterator @code icalrecur_iterator* ritr; ritr = icalrecur_iterator_new(recur,start); @endcode 3) Iterator over the occurrences @code struct icaltimetype next; while (next = icalrecur_iterator_next(ritr) && !icaltime_is_null_time(next){ Do something with next } @endcode Note that that the time returned by icalrecur_iterator_next is in whatever timezone that dtstart is in. */ #ifndef ICALRECUR_H #define ICALRECUR_H #include #include "icaltime.h" /* * Recurrance enumerations */ typedef enum icalrecurrencetype_frequency { /* These enums are used to index an array, so don't change the order or the integers */ ICAL_SECONDLY_RECURRENCE=0, ICAL_MINUTELY_RECURRENCE=1, ICAL_HOURLY_RECURRENCE=2, ICAL_DAILY_RECURRENCE=3, ICAL_WEEKLY_RECURRENCE=4, ICAL_MONTHLY_RECURRENCE=5, ICAL_YEARLY_RECURRENCE=6, ICAL_NO_RECURRENCE=7 } icalrecurrencetype_frequency; typedef enum icalrecurrencetype_weekday { ICAL_NO_WEEKDAY, ICAL_SUNDAY_WEEKDAY, ICAL_MONDAY_WEEKDAY, ICAL_TUESDAY_WEEKDAY, ICAL_WEDNESDAY_WEEKDAY, ICAL_THURSDAY_WEEKDAY, ICAL_FRIDAY_WEEKDAY, ICAL_SATURDAY_WEEKDAY } icalrecurrencetype_weekday; enum { ICAL_RECURRENCE_ARRAY_MAX = 0x7f7f, ICAL_RECURRENCE_ARRAY_MAX_BYTE = 0x7f }; /** * Recurrence type routines */ /* See RFC 2445 Section 4.3.10, RECUR Value, for an explaination of the values and fields in struct icalrecurrencetype */ #define ICAL_BY_SECOND_SIZE 61 #define ICAL_BY_MINUTE_SIZE 61 #define ICAL_BY_HOUR_SIZE 25 #define ICAL_BY_DAY_SIZE 364 /* 7 days * 52 weeks */ #define ICAL_BY_MONTHDAY_SIZE 32 #define ICAL_BY_YEARDAY_SIZE 367 #define ICAL_BY_WEEKNO_SIZE 54 #define ICAL_BY_MONTH_SIZE 13 #define ICAL_BY_SETPOS_SIZE 367 /** Main struct for holding digested recurrence rules */ struct icalrecurrencetype { icalrecurrencetype_frequency freq; /* until and count are mutually exclusive. */ struct icaltimetype until; int count; short interval; icalrecurrencetype_weekday week_start; /* The BY* parameters can each take a list of values. Here I * assume that the list of values will not be larger than the * range of the value -- that is, the client will not name a * value more than once. * Each of the lists is terminated with the value * ICAL_RECURRENCE_ARRAY_MAX unless the the list is full. */ short by_second[ICAL_BY_SECOND_SIZE]; short by_minute[ICAL_BY_MINUTE_SIZE]; short by_hour[ICAL_BY_HOUR_SIZE]; short by_day[ICAL_BY_DAY_SIZE]; /* Encoded value, see below */ short by_month_day[ICAL_BY_MONTHDAY_SIZE]; short by_year_day[ ICAL_BY_YEARDAY_SIZE]; short by_week_no[ICAL_BY_WEEKNO_SIZE]; short by_month[ICAL_BY_MONTH_SIZE]; short by_set_pos[ICAL_BY_SETPOS_SIZE]; }; void icalrecurrencetype_clear(struct icalrecurrencetype *r); /** * Array Encoding * * The 'day' element of the by_day array is encoded to allow * representation of both the day of the week ( Monday, Tueday), but also * the Nth day of the week ( First tuesday of the month, last thursday of * the year) These routines decode the day values */ /** 1 == Monday, etc. */ enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day); /** 0 == any of day of week. 1 == first, 2 = second, -2 == second to last, etc */ int icalrecurrencetype_day_position(short day); icalrecurrencetype_weekday icalrecur_string_to_weekday(const char* str); /** Recurrance rule parser */ /** Convert between strings and recurrencetype structures. */ struct icalrecurrencetype icalrecurrencetype_from_string(const char* str); char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur); char* icalrecurrencetype_as_string_r(struct icalrecurrencetype *recur); /** Recurrence iteration routines */ typedef struct icalrecur_iterator_impl icalrecur_iterator; /** Create a new recurrence rule iterator */ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, struct icaltimetype dtstart); /** Get the next occurrence from an iterator */ struct icaltimetype icalrecur_iterator_next(icalrecur_iterator*); void icalrecur_iterator_decrement_count(icalrecur_iterator*); /** Free the iterator */ void icalrecur_iterator_free(icalrecur_iterator*); /** * Fills array up with at most 'count' time_t values, each * representing an occurrence time in seconds past the POSIX epoch */ int icalrecur_expand_recurrence(char* rule, time_t start, int count, time_t* array); #endif libical-1.0/src/libical/icalparameter.h0000664000076400007640000000511512132563132017103 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalparam.h CREATOR: eric 20 March 1999 $Id: icalparameter.h,v 1.5 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparam.h ======================================================================*/ #ifndef ICALPARAM_H #define ICALPARAM_H #include "icalderivedparameter.h" /* Declared in icalderivedparameter.h */ /*typedef struct icalparameter_impl icalparameter;*/ icalparameter* icalparameter_new(icalparameter_kind kind); icalparameter* icalparameter_new_clone(icalparameter* p); /* Create from string of form "PARAMNAME=VALUE" */ icalparameter* icalparameter_new_from_string(const char* value); /* Create from just the value, the part after the "=" */ icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind, const char* value); void icalparameter_free(icalparameter* parameter); char* icalparameter_as_ical_string(icalparameter* parameter); char* icalparameter_as_ical_string_r(icalparameter* parameter); int icalparameter_is_valid(icalparameter* parameter); icalparameter_kind icalparameter_isa(icalparameter* parameter); int icalparameter_isa_parameter(void* param); /* Access the name of an X parameter */ void icalparameter_set_xname (icalparameter* param, const char* v); const char* icalparameter_get_xname(icalparameter* param); void icalparameter_set_xvalue (icalparameter* param, const char* v); const char* icalparameter_get_xvalue(icalparameter* param); /* Access the name of an IANA parameter */ void icalparameter_set_iana_name (icalparameter* param, const char* v); const char* icalparameter_get_iana_name(icalparameter* param); void icalparameter_set_iana_value (icalparameter* param, const char* v); const char* icalparameter_get_iana_value(icalparameter* param); /* returns 1 if parameters have same name in ICAL, otherwise 0 */ int icalparameter_has_same_name(icalparameter* param1, icalparameter* param2); /* Convert enumerations */ const char* icalparameter_kind_to_string(icalparameter_kind kind); icalparameter_kind icalparameter_string_to_kind(const char* string); #endif libical-1.0/src/libical/icaltime.h0000664000076400007640000002350612132563132016065 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icaltime.h CREATOR: eric 02 June 2000 $Id: icaltime.h,v 1.28 2008-01-15 23:17:42 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ /** @file icaltime.h * @brief struct icaltimetype is a pseudo-object that abstracts time * handling. * * It can represent either a DATE or a DATE-TIME (floating, UTC or in a * given timezone), and it keeps track internally of its native timezone. * * The typical usage is to call the correct constructor specifying the * desired timezone. If this is not known until a later time, the * correct behavior is to specify a NULL timezone and call * icaltime_convert_to_zone() at a later time. * * There are several ways to create a new icaltimetype: * * - icaltime_null_time() * - icaltime_null_date() * - icaltime_current_time_with_zone() * - icaltime_today() * - icaltime_from_timet_with_zone(time_t tm, int is_date, * icaltimezone *zone) * - icaltime_from_string_with_zone(const char* str, icaltimezone *zone) * - icaltime_from_day_of_year(int doy, int year) * - icaltime_from_week_number(int week_number, int year) * * italtimetype objects can be converted to different formats: * * - icaltime_as_timet(struct icaltimetype tt) * - icaltime_as_timet_with_zone(struct icaltimetype tt, * icaltimezone *zone) * - icaltime_as_ical_string(struct icaltimetype tt) * * Accessor methods include: * * - icaltime_get_timezone(struct icaltimetype t) * - icaltime_get_tzid(struct icaltimetype t) * - icaltime_set_timezone(struct icaltimetype t, const icaltimezone *zone) * - icaltime_day_of_year(struct icaltimetype t) * - icaltime_day_of_week(struct icaltimetype t) * - icaltime_start_doy_of_week(struct icaltimetype t, int fdow) * - icaltime_week_number(struct icaltimetype t) * * Query methods include: * * - icaltime_is_null_time(struct icaltimetype t) * - icaltime_is_valid_time(struct icaltimetype t) * - icaltime_is_date(struct icaltimetype t) * - icaltime_is_utc(struct icaltimetype t) * - icaltime_is_floating(struct icaltimetype t) * * Modify, compare and utility methods include: * * - icaltime_add(struct icaltimetype t, struct icaldurationtype d) * - icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2) * - icaltime_compare_with_zone(struct icaltimetype a,struct icaltimetype b) * - icaltime_compare(struct icaltimetype a,struct icaltimetype b) * - icaltime_compare_date_only(struct icaltimetype a, * struct icaltimetype b) * - icaltime_adjust(struct icaltimetype *tt, int days, int hours, * int minutes, int seconds); * - icaltime_normalize(struct icaltimetype t); * - icaltime_convert_to_zone(const struct icaltimetype tt, * icaltimezone *zone); */ #ifndef ICALTIME_H #define ICALTIME_H #include /* An opaque struct representing a timezone. We declare this here to avoid a circular dependancy. */ #ifndef ICALTIMEZONE_DEFINED #define ICALTIMEZONE_DEFINED typedef struct _icaltimezone icaltimezone; #endif /** icaltime_span is returned by icalcomponent_get_span() */ struct icaltime_span { time_t start; /**< in UTC */ time_t end; /**< in UTC */ int is_busy; /**< 1->busy time, 0-> free time */ }; typedef struct icaltime_span icaltime_span; /* * FIXME * * is_utc is redundant, and might be considered a minor optimization. * It might be deprecated, so you should use icaltime_is_utc() instead. */ struct icaltimetype { int year; /**< Actual year, e.g. 2001. */ int month; /**< 1 (Jan) to 12 (Dec). */ int day; int hour; int minute; int second; int is_utc; /**< 1-> time is in UTC timezone */ int is_date; /**< 1 -> interpret this as date. */ int is_daylight; /**< 1 -> time is in daylight savings time. */ const icaltimezone *zone; /**< timezone */ }; typedef struct icaltimetype icaltimetype; /** Return a null time, which indicates no time has been set. This time represent the beginning of the epoch */ struct icaltimetype icaltime_null_time(void); /** Return a null date */ struct icaltimetype icaltime_null_date(void); /** Returns the current time in the given timezone, as an icaltimetype. */ struct icaltimetype icaltime_current_time_with_zone(const icaltimezone *zone); /** Returns the current day as an icaltimetype, with is_date set. */ struct icaltimetype icaltime_today(void); /** Convert seconds past UNIX epoch to a timetype*/ struct icaltimetype icaltime_from_timet(const time_t v, const int is_date); /** Convert seconds past UNIX epoch to a timetype, using timezones. */ struct icaltimetype icaltime_from_timet_with_zone(const time_t tm, const int is_date, const icaltimezone *zone); /** create a time from an ISO format string */ struct icaltimetype icaltime_from_string(const char* str); /** create a time from an ISO format string */ struct icaltimetype icaltime_from_string_with_zone(const char* str, const icaltimezone *zone); /** Create a new time, given a day of year and a year. */ struct icaltimetype icaltime_from_day_of_year(const int doy, const int year); /** @brief Contructor (TODO). * Create a new time from a weeknumber and a year. */ struct icaltimetype icaltime_from_week_number(const int week_number, const int year); /** Return the time as seconds past the UNIX epoch */ time_t icaltime_as_timet(const struct icaltimetype); /** Return the time as seconds past the UNIX epoch, using timezones. */ time_t icaltime_as_timet_with_zone(const struct icaltimetype tt, const icaltimezone *zone); /** Return a string represention of the time, in RFC2445 format. */ const char* icaltime_as_ical_string(const struct icaltimetype tt); char* icaltime_as_ical_string_r(const struct icaltimetype tt); /** @brief Return the timezone */ const icaltimezone *icaltime_get_timezone(const struct icaltimetype t); /** @brief Return the tzid, or NULL for a floating time */ const char *icaltime_get_tzid(const struct icaltimetype t); /** @brief Set the timezone */ struct icaltimetype icaltime_set_timezone(struct icaltimetype *t, const icaltimezone *zone); /** Return the day of the year of the given time */ int icaltime_day_of_year(const struct icaltimetype t); /** Return the day of the week of the given time. Sunday is 1 */ int icaltime_day_of_week(const struct icaltimetype t); /** Return the day of the year for the Sunday of the week that the given time is within. */ int icaltime_start_doy_of_week(const struct icaltimetype t); /** Return the day of the year for the first day of the week that the given time is within. */ int icaltime_start_doy_week(const struct icaltimetype t, int fdow); /** Return the week number for the week the given time is within */ int icaltime_week_number(const struct icaltimetype t); /** Return true of the time is null. */ int icaltime_is_null_time(const struct icaltimetype t); /** Returns false if the time is clearly invalid, but is not null. This is usually the result of creating a new time type buy not clearing it, or setting one of the flags to an illegal value. */ int icaltime_is_valid_time(const struct icaltimetype t); /** @brief Returns true if time is of DATE type, false if DATE-TIME */ int icaltime_is_date(const struct icaltimetype t); /** @brief Returns true if time is relative to UTC zone */ int icaltime_is_utc(const struct icaltimetype t); /** @brief Returns true if time is a floating time */ int icaltime_is_floating(const struct icaltimetype t); /** Return -1, 0, or 1 to indicate that ab */ int icaltime_compare_with_zone(const struct icaltimetype a, const struct icaltimetype b); /** Return -1, 0, or 1 to indicate that ab */ int icaltime_compare(const struct icaltimetype a, const struct icaltimetype b); /** like icaltime_compare, but only use the date parts. */ int icaltime_compare_date_only(const struct icaltimetype a, const struct icaltimetype b); /** like icaltime_compare, but only use the date parts. */ int icaltime_compare_date_only_tz(const struct icaltimetype a, const struct icaltimetype b, icaltimezone *tz); /** Adds or subtracts a number of days, hours, minutes and seconds. */ void icaltime_adjust(struct icaltimetype *tt, const int days, const int hours, const int minutes, const int seconds); /** Normalize the icaltime, so that all fields are within the normal range. */ struct icaltimetype icaltime_normalize(const struct icaltimetype t); /** convert tt, of timezone tzid, into a utc time. Does nothing if the time is already UTC. */ struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt, icaltimezone *zone); /** Return the number of days in the given month */ int icaltime_days_in_month(const int month, const int year); /** Return whether you've specified a leapyear or not. */ int icaltime_is_leap_year (const int year); /** Return the number of days in this year */ int icaltime_days_in_year (const int year); /** @brief calculate an icaltimespan given a start and end time. */ struct icaltime_span icaltime_span_new(struct icaltimetype dtstart, struct icaltimetype dtend, int is_busy); /** @brief Returns true if the two spans overlap **/ int icaltime_span_overlaps(icaltime_span *s1, icaltime_span *s2); /** @brief Returns true if the span is totally within the containing * span */ int icaltime_span_contains(icaltime_span *s, icaltime_span *container); #endif /* !ICALTIME_H */ libical-1.0/src/libical/icalerror.h.cmake0000664000076400007640000001252012132563130017327 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalerror.h CREATOR: eric 09 May 1999 $Id: icalerror.h,v 1.17 2008-01-15 23:17:40 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalerror.h ======================================================================*/ #ifndef ICALERROR_H #define ICALERROR_H #include #include /* For icalerror_warn() */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define ICAL_SETERROR_ISFUNC /** This routine is called before any error is triggered. It is called by icalerror_set_errno, so it does not appear in all of the macros below */ void icalerror_stop_here(void); void icalerror_crash_here(void); typedef enum icalerrorenum { ICAL_NO_ERROR, /* icalerrno may not be initialized - put it first so and pray that the compiler initialize things to zero */ ICAL_BADARG_ERROR, ICAL_NEWFAILED_ERROR, ICAL_ALLOCATION_ERROR, ICAL_MALFORMEDDATA_ERROR, ICAL_PARSE_ERROR, ICAL_INTERNAL_ERROR, /* Like assert --internal consist. prob */ ICAL_FILE_ERROR, ICAL_USAGE_ERROR, ICAL_UNIMPLEMENTED_ERROR, ICAL_UNKNOWN_ERROR /* Used for problems in input to icalerror_strerror()*/ } icalerrorenum; icalerrorenum * icalerrno_return(void); #define icalerrno (*(icalerrno_return())) #cmakedefine LIBICAL_STATIC 1 /** If true, libicl aborts after a call to icalerror_set_error * * @warning NOT THREAD SAFE -- recommended that you do not change * this in a multithreaded program. */ #ifdef _MSC_VER #if defined(LIBICAL_STATIC) #define LIBICAL_EXPORT extern #elif defined(BUILD_LIBICALDLL) #define LIBICAL_EXPORT __declspec(dllexport) #else #define LIBICAL_EXPORT __declspec(dllimport) #endif #else #define LIBICAL_EXPORT extern #endif LIBICAL_EXPORT int icalerror_errors_are_fatal; /* Warning messages */ #ifdef __GNUC__ca #define icalerror_warn(message) {fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);} #else /* __GNU_C__ */ #define icalerror_warn(message) {fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);} #endif /* __GNU_C__ */ void icalerror_clear_errno(void); void _icalerror_set_errno(icalerrorenum); /* Make an individual error fatal or non-fatal. */ typedef enum icalerrorstate { ICAL_ERROR_FATAL, /* Not fata */ ICAL_ERROR_NONFATAL, /* Fatal */ ICAL_ERROR_DEFAULT, /* Use the value of icalerror_errors_are_fatal*/ ICAL_ERROR_UNKNOWN /* Asked state for an unknown error type */ } icalerrorstate ; const char* icalerror_strerror(icalerrorenum e); const char* icalerror_perror(void); void ical_bt(void); void icalerror_set_error_state( icalerrorenum error, icalerrorstate); icalerrorstate icalerror_get_error_state( icalerrorenum error); #ifndef ICAL_SETERROR_ISFUNC #define icalerror_set_errno(x) \ icalerrno = x; \ if(icalerror_get_error_state(x)==ICAL_ERROR_FATAL || \ (icalerror_get_error_state(x)==ICAL_ERROR_DEFAULT && \ icalerror_errors_are_fatal == 1 )){ \ icalerror_warn(icalerror_strerror(x)); \ ical_bt(); \ assert(0); \ } } #else void icalerror_set_errno(icalerrorenum x); #endif #if !defined(ICAL_ERRORS_ARE_FATAL) #define ICAL_ERRORS_ARE_FATAL 0 #endif #if ICAL_ERRORS_ARE_FATAL == 1 #undef NDEBUG #endif #define icalerror_check_value_type(value,type); #define icalerror_check_property_type(value,type); #define icalerror_check_parameter_type(value,type); #define icalerror_check_component_type(value,type); /* Assert with a message */ #if ICAL_ERRORS_ARE_FATAL == 1 #ifdef __GNUC__ #define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);icalerror_stop_here(); abort();} #else /*__GNUC__*/ #define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);icalerror_stop_here(); abort();} #endif /*__GNUC__*/ #else /* ICAL_ERRORS_ARE_FATAL */ #define icalerror_assert(test,message) #endif /* ICAL_ERRORS_ARE_FATAL */ /* Check & abort if check fails */ #define icalerror_check_arg(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); } /* Check & return void if check fails*/ #define icalerror_check_arg_rv(test,arg) if(!(test)) {icalerror_set_errno(ICAL_BADARG_ERROR); return; } /* Check & return 0 if check fails*/ #define icalerror_check_arg_rz(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return 0;} /* Check & return an error if check fails*/ #define icalerror_check_arg_re(test,arg,error) if(!(test)) { icalerror_stop_here(); assert(0); return error;} /* Check & return something*/ #define icalerror_check_arg_rx(test,arg,x) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return x;} /* String interfaces to set an error to NONFATAL and restore it to its original value */ icalerrorstate icalerror_supress(const char* error); void icalerror_restore(const char* error, icalerrorstate es); #endif /* !ICALERROR_H */ libical-1.0/src/libical/icalversion.h.in0000664000076400007640000000017112132563132017212 0ustar allenallen#ifndef ICAL_VERSION_H #define ICAL_VERSION_H #define ICAL_PACKAGE "@PACKAGE@" #define ICAL_VERSION "@VERSION@" #endif libical-1.0/src/libical/icalperiod.c0000664000076400007640000000753512132563132016410 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalperiod.c CREATOR: eric 02 June 2000 $Id: icalperiod.c,v 1.13 2008-01-15 23:17:41 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalperiod.h" #include #include #include #include #include "icalerror.h" #include "icalmemory.h" struct icalperiodtype icalperiodtype_from_string (const char* str) { struct icalperiodtype p, null_p; char *s = icalmemory_strdup(str); char *start, *end; icalerrorstate es; /* Errors are normally generated in the following code, so save the error state for resoration later */ icalerrorenum e = icalerrno; p.start = p.end = icaltime_null_time(); p.duration = icaldurationtype_from_int(0); null_p = p; if(s == 0) goto error; start = s; end = strchr(s, '/'); if(end == 0) goto error; *end = 0; end++; p.start = icaltime_from_string(start); if (icaltime_is_null_time(p.start)) goto error; es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); p.end = icaltime_from_string(end); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); if (icaltime_is_null_time(p.end)){ p.duration = icaldurationtype_from_string(end); if(icaldurationtype_as_int(p.duration) == 0) goto error; } icalerrno = e; icalmemory_free_buffer(s); return p; error: icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); if (s) icalmemory_free_buffer (s); return null_p; } const char* icalperiodtype_as_ical_string(struct icalperiodtype p) { char *buf; buf = icalperiodtype_as_ical_string_r(p); icalmemory_add_tmp_buffer(buf); return buf; } char* icalperiodtype_as_ical_string_r(struct icalperiodtype p) { const char* start; const char* end; char *buf; size_t buf_size = 40; char* buf_ptr = 0; buf = (char*)icalmemory_new_buffer(buf_size); buf_ptr = buf; start = icaltime_as_ical_string_r(p.start); icalmemory_append_string(&buf, &buf_ptr, &buf_size, start); icalmemory_free_buffer((void*)start); if(!icaltime_is_null_time(p.end)){ end = icaltime_as_ical_string_r(p.end); } else { end = icaldurationtype_as_ical_string_r(p.duration); } icalmemory_append_char(&buf, &buf_ptr, &buf_size, '/'); icalmemory_append_string(&buf, &buf_ptr, &buf_size, end); icalmemory_free_buffer((void*)end); return buf; } struct icalperiodtype icalperiodtype_null_period(void) { struct icalperiodtype p; p.start = icaltime_null_time(); p.end = icaltime_null_time(); p.duration = icaldurationtype_null_duration(); return p; } int icalperiodtype_is_null_period(struct icalperiodtype p){ if(icaltime_is_null_time(p.start) && icaltime_is_null_time(p.end) && icaldurationtype_is_null_duration(p.duration)){ return 1; } else { return 0; } } int icalperiodtype_is_valid_period(struct icalperiodtype p){ if(icaltime_is_valid_time(p.start) && (icaltime_is_valid_time(p.end) || icaltime_is_null_time(p.end)) ) { return 1; } return 0; } libical-1.0/src/libical/icalvalue.c0000664000076400007640000010742312132563132016237 0ustar allenallen/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* vi:set ts=4 sts=4 sw=4 expandtab : */ /*====================================================================== FILE: icalvalue.c CREATOR: eric 02 May 1999 $Id: icalvalue.c,v 1.44 2008-01-15 23:17:43 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.c Contributions from: Graham Davison ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalerror.h" #include "icalmemory.h" #include "icalparser.h" #include "icalenums.h" #include "icalvalueimpl.h" #include /* for malloc */ #include /* for snprintf */ #include /* For memset, others */ #include /* For offsetof() macro */ #include #include /* for mktime */ #include /* for atoi and atof */ #include /* for SHRT_MAX */ #include #include /* for isspace and isdigit */ #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif #if _MAC_OS_ #include "icalmemory_strdup.h" #endif #define TMP_BUF_SIZE 1024 void print_datetime_to_string(char* str, const struct icaltimetype *data); void print_date_to_string(char* str, const struct icaltimetype *data); void print_time_to_string(char* str, const struct icaltimetype *data); struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind){ struct icalvalue_impl* v; if (!icalvalue_kind_is_valid(kind)) return NULL; if ( ( v = (struct icalvalue_impl*) malloc(sizeof(struct icalvalue_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } strcpy(v->id,"val"); v->kind = kind; v->size = 0; v->parent = 0; v->x_value = 0; memset(&(v->data),0,sizeof(v->data)); return v; } icalvalue* icalvalue_new (icalvalue_kind kind) { return (icalvalue*)icalvalue_new_impl(kind); } icalvalue* icalvalue_new_clone(const icalvalue* old) { struct icalvalue_impl* new; new = icalvalue_new_impl(old->kind); if (new == 0){ return 0; } strcpy(new->id, old->id); new->kind = old->kind; new->size = old->size; switch (new->kind){ case ICAL_ATTACH_VALUE: case ICAL_BINARY_VALUE: { /* Hmm. We just ref the attach value, which may not be the right * thing to do. We cannot quite copy the data, anyways, since we * don't know how long it is. */ new->data.v_attach = old->data.v_attach; if (new->data.v_attach) icalattach_ref (new->data.v_attach); break; } case ICAL_QUERY_VALUE: case ICAL_STRING_VALUE: case ICAL_TEXT_VALUE: case ICAL_CALADDRESS_VALUE: case ICAL_URI_VALUE: { if (old->data.v_string != 0) { new->data.v_string=icalmemory_strdup(old->data.v_string); if ( new->data.v_string == 0 ) { icalvalue_free(new); return 0; } } break; } case ICAL_ACTION_VALUE: { new->data = old->data; if (old->data.v_enum == ICAL_ACTION_X) { //preserve the custom action string if (old->x_value != 0) { new->x_value = icalmemory_strdup(old->x_value); if (new->x_value == 0) { icalvalue_free(new); return 0; } } } break; } case ICAL_RECUR_VALUE: { if(old->data.v_recur != 0){ new->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); if(new->data.v_recur == 0){ icalvalue_free(new); return 0; } memcpy( new->data.v_recur, old->data.v_recur, sizeof(struct icalrecurrencetype)); } break; } case ICAL_X_VALUE: { if (old->x_value != 0) { new->x_value=icalmemory_strdup(old->x_value); if (new->x_value == 0) { icalvalue_free(new); return 0; } } break; } default: { /* all of the other types are stored as values, not pointers, so we can just copy the whole structure. */ new->data = old->data; } } return new; } static char* icalmemory_strdup_and_dequote(const char* str) { const char* p; char* out = (char*)malloc(sizeof(char) * strlen(str) +1); char* pout; int wroteNull = 0; if (out == 0){ return 0; } pout = out; /* Stop the loop when encountering a terminator in the source string or if a null has been written to the destination. This prevents reading past the end of the source string if the last character is a backslash. */ for (p = str; !wroteNull && *p!=0; p++){ if( *p == '\\') { p++; switch(*p){ case 0: { wroteNull = 1; //stops iteration so p isn't incremented past the end of str *pout = '\0'; break; } case 'n': case 'N': { *pout = '\n'; break; } case 't': case 'T': { *pout = '\t'; break; } case 'r': case 'R': { *pout = '\r'; break; } case 'b': case 'B': { *pout = '\b'; break; } case 'f': case 'F': { *pout = '\f'; break; } case ';': case ',': case '"': case '\\': { *pout = *p; break; } default: { *pout = ' '; } } } else { *pout = *p; } pout++; } *pout = '\0'; return out; } /* * Returns a quoted copy of a string * @todo This is not RFC2445 compliant. * The RFC only allows: * TSAFE-CHAR = %x20-21 / %x23-2B / %x2D-39 / %x3C-5B / %x5D-7E / NON-US-ASCII * As such, \t\r\b\f are not allowed, not even escaped */ static char* icalmemory_strdup_and_quote(const icalvalue* value, const char* unquoted_str) { char *str; char *str_p; const char *p; size_t buf_sz; buf_sz = strlen(unquoted_str)+1; str_p = str = (char*)icalmemory_new_buffer(buf_sz); if (str_p == 0){ return 0; } for(p=unquoted_str; *p!=0; p++){ switch(*p){ case '\n': { icalmemory_append_string(&str,&str_p,&buf_sz,"\\n"); break; } case '\t': { icalmemory_append_string(&str,&str_p,&buf_sz,"\\t"); break; } case '\r': { icalmemory_append_string(&str,&str_p,&buf_sz,"\\r"); break; } case '\b': { icalmemory_append_string(&str,&str_p,&buf_sz,"\\b"); break; } case '\f': { icalmemory_append_string(&str,&str_p,&buf_sz,"\\f"); break; } case ';': case ',': /* unescaped COMMA is allowed in CATEGORIES property as its considered a list delimiter here, see: http://tools.ietf.org/html/rfc2445#section-4.3.11 */ if (icalproperty_isa(value->parent) == ICAL_CATEGORIES_PROPERTY) { icalmemory_append_char(&str,&str_p,&buf_sz,*p); break; } case '"': case '\\': { icalmemory_append_char(&str,&str_p,&buf_sz,'\\'); icalmemory_append_char(&str,&str_p,&buf_sz,*p); break; } default: { icalmemory_append_char(&str,&str_p,&buf_sz,*p); } } } /* Assume the last character is not a '\0' and add one. We could check *str_p != 0, but that would be an uninitialized memory read. */ icalmemory_append_char(&str,&str_p,&buf_sz,'\0'); return str; } /* * FIXME * * This is a bad API, as it forces callers to specify their own X type. * This function should take care of this by itself. */ static icalvalue* icalvalue_new_enum(icalvalue_kind kind, int x_type, const char* str) { int e = icalproperty_kind_and_string_to_enum(kind, str); struct icalvalue_impl *value; if(e != 0 && icalproperty_enum_belongs_to_property( icalproperty_value_kind_to_kind(kind),e)) { value = icalvalue_new_impl(kind); value->data.v_enum = e; } else { /* Make it an X value */ value = icalvalue_new_impl(kind); value->data.v_enum = x_type; icalvalue_set_x(value,str); } return value; } /** * Transforms a simple float number string into a double. * The decimal separator (if any) of the double has to be '.' * The code is locale *independant* and does *not* change the locale. * It should be thread safe. * If you want a code that that does the same job with a decimal separator * dependant on the current locale, then use strtof() from libc. */ int simple_str_to_double(const char* from, double *result, char** to) { #define TMP_NUM_SIZE 100 char *start=NULL, *end=NULL, *cur=(char*)from ; char tmp_buf[TMP_NUM_SIZE+1] ; /*hack*/ #ifndef _WIN32_WCE struct lconv *loc_data = localeconv () ; #endif int i=0 ; /*sanity checks*/ if (!from || !result) { return 1 ; } /*skip the white spaces at the beginning*/ while (cur && isspace (*cur)) cur++ ; start = cur ; /* * copy the part that looks like a double into tmp_buf * so that we can call strtof() on it. * during the copy, we give ourselves a chance to convert the '.' * into the decimal separator of the current locale. */ while (cur && (isdigit (*cur) || *cur == '.' || *cur == '+' || *cur == '-')){ ++cur ; } end = cur ; if (end - start + 1> 100) { /*huh hoh, number is too big. getting out*/ return 1 ; } memset(tmp_buf, 0, TMP_NUM_SIZE+1) ; /* * copy the float number string into tmp_buf, and take * care to have the (optional) decimal separator be the one * of the current locale. */ #ifndef _WIN32_WCE for (i=0 ; i < end - from ;++i) { if (start[i] == '.' && loc_data && loc_data->decimal_point && loc_data->decimal_point[0] && loc_data->decimal_point[0] != '.') { /*replace '.' by the digit separator of the current locale*/ tmp_buf[i] = loc_data->decimal_point[0] ; } else { tmp_buf[i] = start[i] ; } } #else GetNumberFormat(LOCALE_SYSTEM_DEFAULT,0,start, NULL, tmp_buf,TMP_NUM_SIZE); #endif if (to) *to = end ; *result = atof(tmp_buf) ; return 0 ; } icalvalue* icalvalue_new_from_string_with_error(icalvalue_kind kind,const char* str,icalproperty** error) { struct icalvalue_impl *value = 0; icalerror_check_arg_rz(str!=0,"str"); if (error != 0){ *error = 0; } switch (kind){ case ICAL_ATTACH_VALUE: { icalattach *attach; attach = icalattach_new_from_url (str); if (!attach) break; value = icalvalue_new_attach (attach); icalattach_unref (attach); break; } case ICAL_BINARY_VALUE: { icalattach *attach; attach = icalattach_new_from_data (str, 0, 0); if ( !attach ) break; value = icalvalue_new_attach (attach); icalattach_unref (attach); break; } case ICAL_BOOLEAN_VALUE: { /* HACK */ value = 0; if (error != 0){ char temp[TMP_BUF_SIZE]; snprintf(temp,sizeof(temp),"%s Values are not implemented", icalvalue_kind_to_string(kind)); *error = icalproperty_vanew_xlicerror( temp, icalparameter_new_xlicerrortype( ICAL_XLICERRORTYPE_VALUEPARSEERROR), 0); } break; } case ICAL_TRANSP_VALUE: value = icalvalue_new_enum(kind, (int)ICAL_TRANSP_X,str); break; case ICAL_METHOD_VALUE: value = icalvalue_new_enum(kind, (int)ICAL_METHOD_X,str); break; case ICAL_STATUS_VALUE: value = icalvalue_new_enum(kind, (int)ICAL_STATUS_X,str); break; case ICAL_ACTION_VALUE: value = icalvalue_new_enum(kind, (int)ICAL_ACTION_X,str); break; case ICAL_QUERY_VALUE: value = icalvalue_new_query(str); break; case ICAL_CLASS_VALUE: value = icalvalue_new_enum(kind, (int)ICAL_CLASS_X,str); break; case ICAL_CMD_VALUE: value = icalvalue_new_enum(kind, ICAL_CMD_X,str); break; case ICAL_QUERYLEVEL_VALUE: value = icalvalue_new_enum(kind, ICAL_QUERYLEVEL_X,str); break; case ICAL_CARLEVEL_VALUE: value = icalvalue_new_enum(kind, ICAL_CARLEVEL_X,str); break; case ICAL_INTEGER_VALUE: value = icalvalue_new_integer(atoi(str)); break; case ICAL_FLOAT_VALUE: value = icalvalue_new_float((float)atof(str)); break; case ICAL_UTCOFFSET_VALUE: { int t,utcoffset, hours, minutes, seconds; /* treat the UTCOFSET string a a decimal number, disassemble its digits and reconstruct it as sections */ t = strtol(str,0,10); /* add phantom seconds field */ if(abs(t)<9999){t *= 100; } hours = (t/10000); minutes = (t-hours*10000)/100; seconds = (t-hours*10000-minutes*100); utcoffset = hours*3600+minutes*60+seconds; value = icalvalue_new_utcoffset(utcoffset); break; } case ICAL_TEXT_VALUE: { char* dequoted_str = icalmemory_strdup_and_dequote(str); value = icalvalue_new_text(dequoted_str); free(dequoted_str); break; } case ICAL_STRING_VALUE: value = icalvalue_new_string(str); break; case ICAL_CALADDRESS_VALUE: value = icalvalue_new_caladdress(str); break; case ICAL_URI_VALUE: value = icalvalue_new_uri(str); break; case ICAL_GEO_VALUE: { char *cur=NULL ; struct icalgeotype geo = {0.0, 0.0}; if (simple_str_to_double (str, &geo.lat, &cur)) { goto geo_parsing_error ; } /*skip white spaces*/ while (cur && isspace (*cur)) { ++cur ; } /*there is a ';' between the latitude and longitude parts*/ if (!cur || *cur != ';') { goto geo_parsing_error ; } ++cur ; if (!cur) goto geo_parsing_error ; /*skip white spaces*/ while (cur && isspace (*cur)) { ++cur ; } if (simple_str_to_double (cur, &geo.lon, &cur)) { goto geo_parsing_error ; } value = icalvalue_new_geo (geo) ; break ; geo_parsing_error: if (error != 0){ char temp[TMP_BUF_SIZE]; sprintf(temp, "Could not parse %s as a %s property", str, icalvalue_kind_to_string(kind)); *error = icalproperty_vanew_xlicerror( temp, icalparameter_new_xlicerrortype( ICAL_XLICERRORTYPE_VALUEPARSEERROR), 0); } } break; case ICAL_RECUR_VALUE: { struct icalrecurrencetype rt; rt = icalrecurrencetype_from_string(str); if(rt.freq != ICAL_NO_RECURRENCE){ value = icalvalue_new_recur(rt); } break; } case ICAL_DATE_VALUE: case ICAL_DATETIME_VALUE: { struct icaltimetype tt; tt = icaltime_from_string(str); if(!icaltime_is_null_time(tt)){ value = icalvalue_new_impl(kind); value->data.v_time = tt; icalvalue_reset_kind(value); } break; } case ICAL_DATETIMEPERIOD_VALUE: { struct icaltimetype tt; struct icalperiodtype p; tt = icaltime_from_string(str); if(!icaltime_is_null_time(tt)){ value = icalvalue_new_datetime(tt); break; } p = icalperiodtype_from_string(str); if (!icalperiodtype_is_null_period(p)){ value = icalvalue_new_period(p); } break; } case ICAL_DURATION_VALUE: { struct icaldurationtype dur = icaldurationtype_from_string(str); if (!icaldurationtype_is_bad_duration(dur)) { /* failed to parse */ value = icalvalue_new_duration(dur); } break; } case ICAL_PERIOD_VALUE: { struct icalperiodtype p; p = icalperiodtype_from_string(str); if(!icalperiodtype_is_null_period(p)){ value = icalvalue_new_period(p); } break; } case ICAL_TRIGGER_VALUE: { struct icaltriggertype tr = icaltriggertype_from_string(str); if (!icaltriggertype_is_bad_trigger(tr)) { value = icalvalue_new_trigger(tr); } break; } case ICAL_REQUESTSTATUS_VALUE: { struct icalreqstattype rst = icalreqstattype_from_string(str); if(rst.code != ICAL_UNKNOWN_STATUS){ value = icalvalue_new_requeststatus(rst); } break; } case ICAL_X_VALUE: { char* dequoted_str = icalmemory_strdup_and_dequote(str); value = icalvalue_new_x(dequoted_str); free(dequoted_str); } break; default: { if (error != 0 ){ char temp[TMP_BUF_SIZE]; snprintf(temp,TMP_BUF_SIZE,"Unknown type for \'%s\'",str); *error = icalproperty_vanew_xlicerror( temp, icalparameter_new_xlicerrortype( ICAL_XLICERRORTYPE_VALUEPARSEERROR), 0); } icalerror_warn("icalvalue_new_from_string got an unknown value type"); value=0; } } if (error != 0 && *error == 0 && value == 0){ char temp[TMP_BUF_SIZE]; snprintf(temp,TMP_BUF_SIZE,"Failed to parse value: \'%s\'",str); *error = icalproperty_vanew_xlicerror( temp, icalparameter_new_xlicerrortype( ICAL_XLICERRORTYPE_VALUEPARSEERROR), 0); } return value; } icalvalue* icalvalue_new_from_string(icalvalue_kind kind,const char* str) { return icalvalue_new_from_string_with_error(kind,str,(icalproperty**)0); } void icalvalue_free (icalvalue* v) { icalerror_check_arg_rv((v != 0),"value"); #ifdef ICAL_FREE_ON_LIST_IS_ERROR icalerror_assert( (v->parent ==0),"This value is still attached to a property"); #else if(v->parent !=0){ return; } #endif if(v->x_value != 0){ free(v->x_value); } switch (v->kind){ case ICAL_BINARY_VALUE: case ICAL_ATTACH_VALUE: { if (v->data.v_attach) { icalattach_unref (v->data.v_attach); v->data.v_attach = NULL; } break; } case ICAL_TEXT_VALUE: case ICAL_CALADDRESS_VALUE: case ICAL_URI_VALUE: case ICAL_STRING_VALUE: case ICAL_QUERY_VALUE: { if (v->data.v_string != 0) { free((void*)v->data.v_string); v->data.v_string = 0; } break; } case ICAL_RECUR_VALUE: { if(v->data.v_recur != 0){ free((void*)v->data.v_recur); v->data.v_recur = 0; } break; } default: { /* Nothing to do */ } } v->kind = ICAL_NO_VALUE; v->size = 0; v->parent = 0; memset(&(v->data),0,sizeof(v->data)); v->id[0] = 'X'; free(v); } int icalvalue_is_valid (const icalvalue* value) { if(value == 0){ return 0; } return 1; } static char* icalvalue_binary_as_ical_string_r(const icalvalue* value) { const char* data; char* str; icalerror_check_arg_rz( (value!=0),"value"); data = icalvalue_get_binary(value); str = (char*)icalmemory_new_buffer(60); snprintf(str, 60,"icalvalue_binary_as_ical_string is not implemented yet"); return str; } #define MAX_INT_DIGITS 12 /* Enough for 2^32 + sign*/ static char* icalvalue_int_as_ical_string_r(const icalvalue* value) { int data; char* str; icalerror_check_arg_rz( (value!=0),"value"); str = (char*)icalmemory_new_buffer(MAX_INT_DIGITS); data = icalvalue_get_integer(value); snprintf(str,MAX_INT_DIGITS,"%d",data); return str; } static char* icalvalue_utcoffset_as_ical_string_r(const icalvalue* value) { int data,h,m,s; char sign; char* str; icalerror_check_arg_rz( (value!=0),"value"); str = (char*)icalmemory_new_buffer(9); data = icalvalue_get_utcoffset(value); if (abs(data) == data){ sign = '+'; } else { sign = '-'; } h = data/3600; m = (data - (h*3600))/ 60; s = (data - (h*3600) - (m*60)); if (s > 0) snprintf(str,9,"%c%02d%02d%02d",sign,abs(h),abs(m),abs(s)); else snprintf(str,9,"%c%02d%02d",sign,abs(h),abs(m)); return str; } static char* icalvalue_string_as_ical_string_r(const icalvalue* value) { const char* data; char* str = 0; icalerror_check_arg_rz( (value!=0),"value"); data = value->data.v_string; str = (char*)icalmemory_new_buffer(strlen(data)+1); strcpy(str,data); return str; } static char* icalvalue_recur_as_ical_string_r(const icalvalue* value) { struct icalrecurrencetype *recur = value->data.v_recur; return icalrecurrencetype_as_string_r(recur); } static char* icalvalue_text_as_ical_string_r(const icalvalue* value) { return icalmemory_strdup_and_quote(value, value->data.v_string); } static char* icalvalue_attach_as_ical_string_r(const icalvalue* value) { icalattach *a; char * str; icalerror_check_arg_rz( (value!=0),"value"); a = icalvalue_get_attach(value); if (icalattach_get_is_url (a)) { const char *url; url = icalattach_get_url (a); str = icalmemory_new_buffer (strlen (url) + 1); strcpy (str, url); return str; } else { const char *data = 0; data = (const char*)icalattach_get_data(a); str = icalmemory_new_buffer (strlen (data) + 1); strcpy (str, data); return str; } } static char* icalvalue_duration_as_ical_string_r(const icalvalue* value) { struct icaldurationtype data; icalerror_check_arg_rz( (value!=0),"value"); data = icalvalue_get_duration(value); return icaldurationtype_as_ical_string_r(data); } void print_time_to_string(char* str, const struct icaltimetype *data) { char temp[20]; str[0] = '\0'; if (data != 0) { if (icaltime_is_utc(*data)){ snprintf(temp,sizeof(temp),"%02d%02d%02dZ",data->hour,data->minute,data->second); strncat(str,temp,7); } else { snprintf(temp,sizeof(temp),"%02d%02d%02d",data->hour,data->minute,data->second); strncat(str,temp,6); } } } void print_date_to_string(char* str, const struct icaltimetype *data) { char temp[20]; str[0] = '\0'; if (data != 0) { snprintf(temp,sizeof(temp),"%04d%02d%02d",data->year,data->month,data->day); strncat(str,temp,8); } } static char* icalvalue_date_as_ical_string_r(const icalvalue* value) { struct icaltimetype data; char* str; icalerror_check_arg_rz( (value!=0),"value"); data = icalvalue_get_date(value); str = (char*)icalmemory_new_buffer(9); str[0] = '\0'; print_date_to_string(str,&data); return str; } void print_datetime_to_string(char* str, const struct icaltimetype *data) { char temp[20]; str[0] = '\0'; if (data != 0) { print_date_to_string(str,data); if ( !data->is_date ) { strncat(str,"T",19); temp[0] = '\0'; print_time_to_string(temp,data); strncat(str,temp,19); } } } static char* icalvalue_datetime_as_ical_string_r(const icalvalue* value) { struct icaltimetype data; char* str; icalvalue_kind kind = icalvalue_isa(value); icalerror_check_arg_rz( (value!=0),"value"); if( !(kind == ICAL_DATE_VALUE || kind == ICAL_DATETIME_VALUE )) { icalerror_set_errno(ICAL_BADARG_ERROR); return 0; } data = icalvalue_get_datetime(value); str = (char*)icalmemory_new_buffer(20); str[0] = 0; print_datetime_to_string(str,&data); return str; } static char* icalvalue_float_as_ical_string_r(const icalvalue* value) { float data; char* str; char* old_locale; icalerror_check_arg_rz( (value!=0),"value"); data = icalvalue_get_float(value); /* bypass current locale in order to make sure snprintf uses a '.' as a separator set locate to 'C' and keep old locale */ old_locale = strdup (setlocale (LC_NUMERIC,NULL)); setlocale (LC_NUMERIC,"C"); str = (char*)icalmemory_new_buffer(40); snprintf(str,40,"%f",data); /* restore saved locale */ setlocale (LC_NUMERIC,old_locale); free (old_locale); return str; } static char* icalvalue_geo_as_ical_string_r(const icalvalue* value) { struct icalgeotype data; char* str; char* old_locale; icalerror_check_arg_rz( (value!=0),"value"); data = icalvalue_get_geo(value); /* bypass current locale in order to make * sure snprintf uses a '.' as a separator * set locate to 'C' and keep old locale */ old_locale = strdup (setlocale (LC_NUMERIC,NULL)); setlocale (LC_NUMERIC,"C"); str = (char*)icalmemory_new_buffer(80); snprintf(str,80,"%f;%f",data.lat,data.lon); /* restore saved locale */ setlocale (LC_NUMERIC,old_locale); free (old_locale); return str; } static char* icalvalue_datetimeperiod_as_ical_string_r(const icalvalue* value) { struct icaldatetimeperiodtype dtp = icalvalue_get_datetimeperiod(value); icalerror_check_arg_rz( (value!=0),"value"); if(!icaltime_is_null_time(dtp.time)){ return icaltime_as_ical_string_r(dtp.time); } else { return icalperiodtype_as_ical_string_r(dtp.period); } } static char* icalvalue_period_as_ical_string_r(const icalvalue* value) { struct icalperiodtype data; icalerror_check_arg_rz( (value!=0),"value"); data = icalvalue_get_period(value); return icalperiodtype_as_ical_string_r(data); } static char* icalvalue_trigger_as_ical_string_r(const icalvalue* value) { struct icaltriggertype data; icalerror_check_arg_rz( (value!=0),"value"); data = icalvalue_get_trigger(value); if(!icaltime_is_null_time(data.time)){ return icaltime_as_ical_string_r(data.time); } else { return icaldurationtype_as_ical_string_r(data.duration); } } const char* icalvalue_as_ical_string(const icalvalue* value) { char *buf; buf = icalvalue_as_ical_string_r(value); icalmemory_add_tmp_buffer(buf); return buf; } char* icalvalue_as_ical_string_r(const icalvalue* value) { if(value == 0){ return 0; } switch (value->kind){ case ICAL_ATTACH_VALUE: return icalvalue_attach_as_ical_string_r(value); case ICAL_BINARY_VALUE: return icalvalue_binary_as_ical_string_r(value); case ICAL_BOOLEAN_VALUE: case ICAL_INTEGER_VALUE: return icalvalue_int_as_ical_string_r(value); case ICAL_UTCOFFSET_VALUE: return icalvalue_utcoffset_as_ical_string_r(value); case ICAL_TEXT_VALUE: return icalvalue_text_as_ical_string_r(value); case ICAL_QUERY_VALUE: return icalvalue_string_as_ical_string_r(value); case ICAL_STRING_VALUE: case ICAL_URI_VALUE: case ICAL_CALADDRESS_VALUE: return icalvalue_string_as_ical_string_r(value); case ICAL_DATE_VALUE: return icalvalue_date_as_ical_string_r(value); case ICAL_DATETIME_VALUE: return icalvalue_datetime_as_ical_string_r(value); case ICAL_DURATION_VALUE: return icalvalue_duration_as_ical_string_r(value); case ICAL_PERIOD_VALUE: return icalvalue_period_as_ical_string_r(value); case ICAL_DATETIMEPERIOD_VALUE: return icalvalue_datetimeperiod_as_ical_string_r(value); case ICAL_FLOAT_VALUE: return icalvalue_float_as_ical_string_r(value); case ICAL_GEO_VALUE: return icalvalue_geo_as_ical_string_r(value); case ICAL_RECUR_VALUE: return icalvalue_recur_as_ical_string_r(value); case ICAL_TRIGGER_VALUE: return icalvalue_trigger_as_ical_string_r(value); case ICAL_REQUESTSTATUS_VALUE: return icalreqstattype_as_string_r(value->data.v_requeststatus); case ICAL_ACTION_VALUE: case ICAL_CMD_VALUE: case ICAL_QUERYLEVEL_VALUE: case ICAL_CARLEVEL_VALUE: case ICAL_METHOD_VALUE: case ICAL_STATUS_VALUE: case ICAL_TRANSP_VALUE: case ICAL_CLASS_VALUE: if(value->x_value !=0){ return icalmemory_strdup(value->x_value); } return icalproperty_enum_to_string_r(value->data.v_enum); case ICAL_X_VALUE: if (value->x_value != 0) return icalmemory_strdup_and_quote(value,value->x_value); /* FALLTHRU */ case ICAL_NO_VALUE: default: { return 0; } } } icalvalue_kind icalvalue_isa (const icalvalue* value) { if(value == 0){ return ICAL_NO_VALUE; } return value->kind; } int icalvalue_isa_value (void* value) { struct icalvalue_impl *impl = (struct icalvalue_impl *)value; icalerror_check_arg_rz( (value!=0), "value"); if (strcmp(impl->id,"val") == 0) { return 1; } else { return 0; } } static int icalvalue_is_time(const icalvalue* a) { icalvalue_kind kind = icalvalue_isa(a); if(kind == ICAL_DATETIME_VALUE || kind == ICAL_DATE_VALUE ){ return 1; } return 0; } /* * In case of error, this function returns 0. This is partly bogus, as 0 is * not part of the returned enum. * FIXME We should probably add an error value to the enum. */ icalparameter_xliccomparetype icalvalue_compare(const icalvalue* a, const icalvalue *b) { icalerror_check_arg_rz( (a!=0), "a"); icalerror_check_arg_rz( (b!=0), "b"); /* Not the same type; they can only be unequal */ if( ! (icalvalue_is_time(a) && icalvalue_is_time(b)) && icalvalue_isa(a) != icalvalue_isa(b)){ return ICAL_XLICCOMPARETYPE_NOTEQUAL; } switch (icalvalue_isa(a)){ case ICAL_ATTACH_VALUE: { if (icalattach_get_is_url(a->data.v_attach) && icalattach_get_is_url(b->data.v_attach)) { if (strcasecmp(icalattach_get_url(a->data.v_attach), icalattach_get_url(b->data.v_attach)) == 0) return ICAL_XLICCOMPARETYPE_EQUAL; else return ICAL_XLICCOMPARETYPE_NOTEQUAL; } else { if (a->data.v_attach == b->data.v_attach) return ICAL_XLICCOMPARETYPE_EQUAL; else return ICAL_XLICCOMPARETYPE_NOTEQUAL; } } case ICAL_BINARY_VALUE: { if (a->data.v_attach == b->data.v_attach) return ICAL_XLICCOMPARETYPE_EQUAL; else return ICAL_XLICCOMPARETYPE_NOTEQUAL; } case ICAL_BOOLEAN_VALUE: { if (icalvalue_get_boolean(a) == icalvalue_get_boolean(b)){ return ICAL_XLICCOMPARETYPE_EQUAL; } else { return ICAL_XLICCOMPARETYPE_NOTEQUAL; } } case ICAL_FLOAT_VALUE: { if (a->data.v_float > b->data.v_float){ return ICAL_XLICCOMPARETYPE_GREATER; } else if (a->data.v_float < b->data.v_float){ return ICAL_XLICCOMPARETYPE_LESS; } else { return ICAL_XLICCOMPARETYPE_EQUAL; } } case ICAL_INTEGER_VALUE: case ICAL_UTCOFFSET_VALUE: { if (a->data.v_int > b->data.v_int){ return ICAL_XLICCOMPARETYPE_GREATER; } else if (a->data.v_int < b->data.v_int){ return ICAL_XLICCOMPARETYPE_LESS; } else { return ICAL_XLICCOMPARETYPE_EQUAL; } } case ICAL_DURATION_VALUE: { int dur_a = icaldurationtype_as_int(a->data.v_duration); int dur_b = icaldurationtype_as_int(b->data.v_duration); if (dur_a > dur_b){ return ICAL_XLICCOMPARETYPE_GREATER; } else if (dur_a < dur_b){ return ICAL_XLICCOMPARETYPE_LESS; } else { return ICAL_XLICCOMPARETYPE_EQUAL; } } case ICAL_TEXT_VALUE: case ICAL_URI_VALUE: case ICAL_CALADDRESS_VALUE: case ICAL_TRIGGER_VALUE: case ICAL_DATE_VALUE: case ICAL_DATETIME_VALUE: case ICAL_DATETIMEPERIOD_VALUE: case ICAL_QUERY_VALUE: case ICAL_RECUR_VALUE: { int r; char *temp1, *temp2; temp1 = icalvalue_as_ical_string_r(a); temp2 = icalvalue_as_ical_string_r(b); r = strcmp(temp1, temp2); free(temp1); free(temp2); if (r > 0) { return ICAL_XLICCOMPARETYPE_GREATER; } else if (r < 0){ return ICAL_XLICCOMPARETYPE_LESS; } else { return ICAL_XLICCOMPARETYPE_EQUAL; } } case ICAL_METHOD_VALUE: { if (icalvalue_get_method(a) == icalvalue_get_method(b)){ return ICAL_XLICCOMPARETYPE_EQUAL; } else { return ICAL_XLICCOMPARETYPE_NOTEQUAL; } } case ICAL_STATUS_VALUE: { if (icalvalue_get_status(a) == icalvalue_get_status(b)){ return ICAL_XLICCOMPARETYPE_EQUAL; } else { return ICAL_XLICCOMPARETYPE_NOTEQUAL; } } case ICAL_TRANSP_VALUE: { if (icalvalue_get_transp(a) == icalvalue_get_transp(b)){ return ICAL_XLICCOMPARETYPE_EQUAL; } else { return ICAL_XLICCOMPARETYPE_NOTEQUAL; } } case ICAL_ACTION_VALUE: { if (icalvalue_get_action(a) == icalvalue_get_action(b)){ return ICAL_XLICCOMPARETYPE_EQUAL; } else { return ICAL_XLICCOMPARETYPE_NOTEQUAL; } } case ICAL_PERIOD_VALUE: case ICAL_GEO_VALUE: case ICAL_NO_VALUE: default: { icalerror_warn("Comparison not implemented for value type"); return 0; } } } /** Examine the value and possibly change the kind to agree with the * value */ void icalvalue_reset_kind(icalvalue* value) { if( (value->kind==ICAL_DATETIME_VALUE || value->kind==ICAL_DATE_VALUE )&& !icaltime_is_null_time(value->data.v_time) ) { if(icaltime_is_date(value->data.v_time)){ value->kind = ICAL_DATE_VALUE; } else { value->kind = ICAL_DATETIME_VALUE; } } } void icalvalue_set_parent(icalvalue* value, icalproperty* property) { value->parent = property; } icalproperty* icalvalue_get_parent(icalvalue* value) { return value->parent; } int icalvalue_encode_ical_string(const char *szText, char *szEncText, int nMaxBufferLen) { char *ptr; icalvalue *value = 0; if ((szText == 0) || (szEncText == 0)) return 0; value = icalvalue_new_from_string(ICAL_STRING_VALUE, szText); if (value == 0) return 0; ptr = icalvalue_text_as_ical_string_r(value); if (ptr == 0) return 0; if ((int)strlen(ptr) >= nMaxBufferLen) { icalvalue_free (value); free(ptr); return 0; } strcpy(szEncText, ptr); free(ptr); icalvalue_free ((icalvalue*)value); return 1; } int icalvalue_decode_ical_string(const char *szText, char *szDecText, int nMaxBufferLen) { char *str, *str_p; const char *p; size_t buf_sz; if ((szText == 0) || (szDecText == 0)) return 0; buf_sz = strlen(szText); str_p = str = (char*)icalmemory_new_buffer(buf_sz + 1); if (str_p == 0){ return 0; } for (p=szText; *p!=0; p++) { if (*p == '\\') { icalmemory_append_char (&str,&str_p,&buf_sz,*(p+1)); p++; } else icalmemory_append_char (&str,&str_p,&buf_sz,*p); } icalmemory_append_char(&str,&str_p,&buf_sz,'\0'); if ((int)strlen(str) > nMaxBufferLen) { icalmemory_free_buffer(str); return 0; } strcpy(szDecText, str); icalmemory_free_buffer(str); return 1; } /* The remaining interfaces are 'new', 'set' and 'get' for each of the value types */ libical-1.0/src/libical/icalvalue_cxx.h0000664000076400007640000000746012132563132017126 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue_cxx.h CREATOR: fnguyen 12/13/01 (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef CP_ICALVALUE_H #define CP_ICALVALUE_H extern "C" { #include "ical.h" }; #include "icptrholder.h" typedef char* string; // Will use the string library from STL class ICalValue { public: ICalValue() throw(icalerrorenum); ICalValue(const ICalValue&) throw(icalerrorenum); ICalValue& operator=(const ICalValue&) throw(icalerrorenum); ~ICalValue(); ICalValue(icalvalue*) throw(icalerrorenum); ICalValue(icalvalue_kind kind) throw(icalerrorenum); ICalValue(icalvalue_kind kind, string str) throw(icalerrorenum); operator icalvalue* () { return imp; } void detach() { imp = NULL; } public: string as_ical_string(); bool is_valid(); icalvalue_kind isa(); int isa_value(void*); /* Special, non autogenerated value accessors */ void set_recur(struct icalrecurrencetype v); struct icalrecurrencetype get_recur(); void set_trigger(struct icaltriggertype v); struct icaltriggertype get_trigger(); void set_datetimeperiod(struct icaldatetimeperiodtype v); struct icaldatetimeperiodtype get_datetimeperiod(); public: static icalparameter_xliccomparetype compare(ICalValue& a, ICalValue& b); /* Convert enumerations */ static icalvalue_kind string_to_kind(string str); string kind_to_string(icalvalue_kind kind); public: /* BOOLEAN */ int get_boolean(); void set_boolean(int v); /* UTC-OFFSET */ int get_utcoffset(); void set_utcoffset(int v); /* METHOD */ enum icalproperty_method get_method(); void set_method(enum icalproperty_method v); /* CAL-ADDRESS */ string get_caladdress(); void set_caladdress(string v); /* PERIOD */ struct icalperiodtype get_period(); void set_period(struct icalperiodtype v); /* STATUS */ enum icalproperty_status get_status(); void set_status(enum icalproperty_status v); /* BINARY */ string get_binary(); void set_binary(string v); /* TEXT */ string get_text(); void set_text(string v); /* DURATION */ struct icaldurationtype get_duration(); void set_duration(struct icaldurationtype v); /* INTEGER */ int get_integer(); void set_integer(int v); /* URI */ string get_uri(); void set_uri(string v); /* ATTACH */ icalattach *get_attach(); void set_attach(icalattach *v); /* CLASS */ enum icalproperty_class get_class(); void set_class(enum icalproperty_class v); /* FLOAT */ float get_float(); void set_float(float v); /* QUERY */ string get_query(); void set_query(string v); /* STRING */ string get_string(); void set_string(string v); /* TRANSP */ enum icalproperty_transp get_transp(); void set_transp(enum icalproperty_transp v); /* DATE-TIME */ struct icaltimetype get_datetime(); void set_datetime(struct icaltimetype v); /* GEO */ struct icalgeotype get_geo(); void set_geo(struct icalgeotype v); /* DATE */ struct icaltimetype get_date(); void set_date(struct icaltimetype v); /* ACTION */ enum icalproperty_action get_action(); void set_action(enum icalproperty_action v); private: icalvalue* imp; }; typedef ICPointerHolder ICalValueTmpPtr; /* see icptrholder.h for comments */ #endif /*ICALVALUE_H*/ libical-1.0/src/libical/icalduration.h0000664000076400007640000000351112132563132016746 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalduration.h CREATOR: eric 26 Jan 2001 $Id: icalduration.h,v 1.5 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALDURATION_H #define ICALDURATION_H #include "icaltime.h" struct icaldurationtype { int is_neg; unsigned int days; unsigned int weeks; unsigned int hours; unsigned int minutes; unsigned int seconds; }; struct icaldurationtype icaldurationtype_from_int(int t); struct icaldurationtype icaldurationtype_from_string(const char*); int icaldurationtype_as_int(struct icaldurationtype duration); char* icaldurationtype_as_ical_string(struct icaldurationtype d); char* icaldurationtype_as_ical_string_r(struct icaldurationtype d); struct icaldurationtype icaldurationtype_null_duration(void); struct icaldurationtype icaldurationtype_bad_duration(void); int icaldurationtype_is_null_duration(struct icaldurationtype d); int icaldurationtype_is_bad_duration(struct icaldurationtype d); struct icaltimetype icaltime_add(struct icaltimetype t, struct icaldurationtype d); struct icaldurationtype icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2); #endif /* !ICALDURATION_H */ libical-1.0/src/libical/icalparameter_cxx.h0000664000076400007640000000752412132563132017773 0ustar allenallen/* -*- Mode: C++ -*- */ /** * @file icalparameter_cxx.h * @author fnguyen (12/10/01) * @brief Definition of C++ Wrapper for icalparameter.c * * (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ #ifndef ICALPARAMETER_CXX_H #define ICALPARAMETER_CXX_H extern "C" { #include "ical.h" }; #include "icptrholder.h" typedef char* string; // Will use the string library from STL class ICalParameter { public: ICalParameter() throw(icalerrorenum); ICalParameter(const ICalParameter&) throw(icalerrorenum); ICalParameter& operator=(const ICalParameter&) throw(icalerrorenum); ~ICalParameter(); ICalParameter(icalparameter* v) throw(icalerrorenum); // Create from string of form "PARAMNAME=VALUE" ICalParameter(string str) throw(icalerrorenum); // Create from just the value, the part after the "=" ICalParameter(icalparameter_kind kind, string str) throw(icalerrorenum); ICalParameter(icalparameter_kind kind) throw(icalerrorenum); operator icalparameter*() { return imp; } void detach() { imp = NULL; } public: string as_ical_string() throw(icalerrorenum); bool is_valid(); icalparameter_kind isa( ); int isa_parameter(void* param); public: /* Acess the name of an X parameer */ static void set_xname (ICalParameter ¶m, string v); static string get_xname(ICalParameter ¶m); static void set_xvalue (ICalParameter ¶m, string v); static string get_xvalue(ICalParameter ¶m); /* Convert enumerations */ static string kind_to_string(icalparameter_kind kind); static icalparameter_kind string_to_kind(string str); public: /* DELEGATED-FROM */ string get_delegatedfrom(); void set_delegatedfrom(string v); /* RELATED */ icalparameter_related get_related(); void set_related(icalparameter_related v); /* SENT-BY */ string get_sentby(); void set_sentby(string v); /* LANGUAGE */ string get_language(); void set_language(string v); /* RELTYPE */ icalparameter_reltype get_reltype(); void set_reltype(icalparameter_reltype v); /* ENCODING */ icalparameter_encoding get_encoding(); void set_encoding(icalparameter_encoding v); /* ALTREP */ string get_altrep(); void set_altrep(string v); /* FMTTYPE */ string get_fmttype(); void set_fmttype(string v); /* FBTYPE */ icalparameter_fbtype get_fbtype(); void set_fbtype(icalparameter_fbtype v); /* RSVP */ icalparameter_rsvp get_rsvp(); void set_rsvp(icalparameter_rsvp v); /* RANGE */ icalparameter_range get_range(); void set_range(icalparameter_range v); /* DELEGATED-TO */ string get_delegatedto(); void set_delegatedto(string v); /* CN */ string get_cn(); void set_cn(string v); /* ROLE */ icalparameter_role get_role(); void set_role(icalparameter_role v); /* X-LIC-COMPARETYPE */ icalparameter_xliccomparetype get_xliccomparetype(); void set_xliccomparetype(icalparameter_xliccomparetype v); /* PARTSTAT */ icalparameter_partstat get_partstat(); void set_partstat(icalparameter_partstat v); /* X-LIC-ERRORTYPE */ icalparameter_xlicerrortype get_xlicerrortype(); void set_xlicerrortype(icalparameter_xlicerrortype v); /* MEMBER */ string get_member(); void set_member(string v); /* X */ string get_x(); void set_x(string v); /* CUTYPE */ icalparameter_cutype get_cutype(); void set_cutype(icalparameter_cutype v); /* TZID */ string get_tzid(); void set_tzid(string v); /* VALUE */ icalparameter_value get_value(); void set_value(icalparameter_value v); /* DIR */ string get_dir(); void set_dir(string v); private: icalparameter* imp; }; #endif libical-1.0/src/libical/icalattachimpl.h0000664000076400007640000000233612132563132017253 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalattachimpl.h CREATOR: acampi 28 May 02 $Id: icalattachimpl.h,v 1.3 2008-01-15 23:17:40 dothebart Exp $ (C) COPYRIGHT 2000, Andrea Campi This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalattachimpl.h ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #ifndef ICALATTACHIMPL_H #define ICALATTACHIMPL_H #include "icalattach.h" /* Private structure for ATTACH values */ struct icalattach_impl { /* Reference count */ int refcount; union { /* URL attachment data */ struct { char *url; } url; /* Inline data */ struct { char *data; icalattach_free_fn_t free_fn; void *free_fn_data; } data; } u; /* TRUE if URL, FALSE if inline data */ unsigned int is_url : 1; }; #endif libical-1.0/src/libical/icalenums.c0000664000076400007640000001360312132563132016246 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalenum.c CREATOR: eric 29 April 1999 $Id: icalenums.c,v 1.16 2008-01-15 23:17:40 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalenum.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalenums.h" #include /* For fprintf */ #include /* For stderr */ #include /* For strncmp */ #include #include "icalmemory.h" #if defined(_MSC_VER) #define snprintf _snprintf #endif /*** @brief Allowed request status values */ static const struct { enum icalrequeststatus kind; int major; int minor; const char* str; } request_status_map[] = { {ICAL_2_0_SUCCESS_STATUS, 2,0,"Success."}, {ICAL_2_1_FALLBACK_STATUS, 2,1,"Success but fallback taken on one or more property values."}, {ICAL_2_2_IGPROP_STATUS, 2,2,"Success, invalid property ignored."}, {ICAL_2_3_IGPARAM_STATUS, 2,3,"Success, invalid property parameter ignored."}, {ICAL_2_4_IGXPROP_STATUS, 2,4,"Success, unknown non-standard property ignored."}, {ICAL_2_5_IGXPARAM_STATUS, 2,5,"Success, unknown non standard property value ignored."}, {ICAL_2_6_IGCOMP_STATUS, 2,6,"Success, invalid calendar component ignored."}, {ICAL_2_7_FORWARD_STATUS, 2,7,"Success, request forwarded to Calendar User."}, {ICAL_2_8_ONEEVENT_STATUS, 2,8,"Success, repeating event ignored. Scheduled as a single component."}, {ICAL_2_9_TRUNC_STATUS, 2,9,"Success, truncated end date time to date boundary."}, {ICAL_2_10_ONETODO_STATUS, 2,10,"Success, repeating VTODO ignored. Scheduled as a single VTODO."}, {ICAL_2_11_TRUNCRRULE_STATUS, 2,11,"Success, unbounded RRULE clipped at some finite number of instances "}, {ICAL_3_0_INVPROPNAME_STATUS, 3,0,"Invalid property name."}, {ICAL_3_1_INVPROPVAL_STATUS, 3,1,"Invalid property value."}, {ICAL_3_2_INVPARAM_STATUS, 3,2,"Invalid property parameter."}, {ICAL_3_3_INVPARAMVAL_STATUS, 3,3,"Invalid property parameter value."}, {ICAL_3_4_INVCOMP_STATUS, 3,4,"Invalid calendar component."}, {ICAL_3_5_INVTIME_STATUS, 3,5,"Invalid date or time."}, {ICAL_3_6_INVRULE_STATUS, 3,6,"Invalid rule."}, {ICAL_3_7_INVCU_STATUS, 3,7,"Invalid Calendar User."}, {ICAL_3_8_NOAUTH_STATUS, 3,8,"No authority."}, {ICAL_3_9_BADVERSION_STATUS, 3,9,"Unsupported version."}, {ICAL_3_10_TOOBIG_STATUS, 3,10,"Request entity too large."}, {ICAL_3_11_MISSREQCOMP_STATUS, 3,11,"Required component or property missing."}, {ICAL_3_12_UNKCOMP_STATUS, 3,12,"Unknown component or property found."}, {ICAL_3_13_BADCOMP_STATUS, 3,13,"Unsupported component or property found"}, {ICAL_3_14_NOCAP_STATUS, 3,14,"Unsupported capability."}, {ICAL_3_15_INVCOMMAND, 3,15,"Invalid command."}, {ICAL_4_0_BUSY_STATUS, 4,0,"Event conflict. Date/time is busy."}, {ICAL_4_1_STORE_ACCESS_DENIED, 4,1,"Store Access Denied."}, {ICAL_4_2_STORE_FAILED, 4,2,"Store Failed."}, {ICAL_4_3_STORE_NOT_FOUND, 4,3,"Store not found."}, {ICAL_5_0_MAYBE_STATUS, 5,0,"Request MAY supported."}, {ICAL_5_1_UNAVAIL_STATUS, 5,1,"Service unavailable."}, {ICAL_5_2_NOSERVICE_STATUS, 5,2,"Invalid calendar service."}, {ICAL_5_3_NOSCHED_STATUS, 5,3,"No scheduling support for user."}, {ICAL_6_1_CONTAINER_NOT_FOUND, 6,1,"Container not found."}, {ICAL_9_0_UNRECOGNIZED_COMMAND, 9,0,"An unrecognized command was received."}, {ICAL_UNKNOWN_STATUS, 0,0,"Error: Unknown request status"} }; /*** @brief Return the descriptive text for a request status */ const char* icalenum_reqstat_desc(icalrequeststatus stat) { int i; for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if ( request_status_map[i].kind == stat) { return request_status_map[i].str; } } return 0; } char* icalenum_reqstat_code(icalrequeststatus stat) { char *buf; buf = icalenum_reqstat_code_r(stat); icalmemory_add_tmp_buffer(buf); return buf; } /*** @brief Return the code for a request status */ char* icalenum_reqstat_code_r(icalrequeststatus stat) { int i, major, minor; char tmpbuf[36]; for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if ( request_status_map[i].kind == stat) { major = request_status_map[i].major; minor = request_status_map[i].minor; snprintf(tmpbuf, sizeof(tmpbuf), "%i.%i", major, minor); return icalmemory_strdup(tmpbuf); } } return NULL; } /*** @brief Return the major number for a request status */ short icalenum_reqstat_major(icalrequeststatus stat) { int i; for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if ( request_status_map[i].kind == stat) { return request_status_map[i].major; } } return -1; } /*** @brief Return the minor number for a request status */ short icalenum_reqstat_minor(icalrequeststatus stat) { int i; for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if ( request_status_map[i].kind == stat) { return request_status_map[i].minor; } } return -1; } /*** @brief Return a request status for major/minor status numbers */ icalrequeststatus icalenum_num_to_reqstat(short major, short minor) { int i; for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if ( request_status_map[i].major == major && request_status_map[i].minor == minor) { return request_status_map[i].kind; } } return 0; } libical-1.0/src/libical/icalarray.h0000664000076400007640000000320012132563132016232 0ustar allenallen/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /*====================================================================== FILE: icalarray.h CREATOR: Damon Chaplin 07 March 2001 $Id: icalarray.h,v 1.5 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2001, Ximian, Inc. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALARRAY_H #define ICALARRAY_H /** @file icalarray.h * * @brief An array of arbitrarily-sized elements which grows * dynamically as elements are added. */ typedef struct _icalarray icalarray; struct _icalarray { unsigned int element_size; unsigned int increment_size; unsigned int num_elements; unsigned int space_allocated; void **chunks; }; icalarray *icalarray_new (int element_size, int increment_size); icalarray *icalarray_copy (icalarray *array); void icalarray_free (icalarray *array); void icalarray_append (icalarray *array, const void *element); void icalarray_remove_element_at (icalarray *array, int position); void *icalarray_element_at (icalarray *array, int position); void icalarray_sort (icalarray *array, int (*compare) (const void *, const void *)); #endif /* ICALARRAY_H */ libical-1.0/src/libical/icaltypes.h0000664000076400007640000000647112132563130016273 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icaltypes.h CREATOR: eric 20 March 1999 (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icaltypes.h ======================================================================*/ #ifndef ICALTYPES_H #define ICALTYPES_H #include #include "icalenums.h" #include "icaltime.h" #include "icalduration.h" #include "icalperiod.h" struct icalgeotype { double lat; double lon; }; struct icaldatetimeperiodtype { struct icaltimetype time; struct icalperiodtype period; }; struct icaltriggertype { struct icaltimetype time; struct icaldurationtype duration; }; struct icaltriggertype icaltriggertype_from_int(const int reltime); struct icaltriggertype icaltriggertype_from_string(const char* str); int icaltriggertype_is_null_trigger(struct icaltriggertype tr); int icaltriggertype_is_bad_trigger(struct icaltriggertype tr); /* struct icalreqstattype. This struct contains two string pointers, but don't try to free either of them. The "desc" string is a pointer to a static table inside the library. Don't try to free it. The "debug" string is a pointer into the string that the called passed into to icalreqstattype_from_string. Don't try to free it either, and don't use it after the original string has been freed. BTW, you would get that original string from *icalproperty_get_requeststatus() or icalvalue_get_text(), when operating on the value of a request_status property. */ struct icalreqstattype { icalrequeststatus code; const char* desc; const char* debug; }; struct icalreqstattype icalreqstattype_from_string(const char* str); const char* icalreqstattype_as_string(struct icalreqstattype); char* icalreqstattype_as_string_r(struct icalreqstattype); struct icaltimezonephase { const char* tzname; int is_stdandard; /* 1 = standard tme, 0 = daylight savings time */ struct icaltimetype dtstart; int offsetto; int tzoffsetfrom; const char* comment; struct icaldatetimeperiodtype rdate; const char* rrule; }; struct icaltimezonetype { const char* tzid; struct icaltimetype last_mod; const char* tzurl; /* Array of phases. The end of the array is a phase with tzname == 0 */ struct icaltimezonephase *phases; }; void icaltimezonetype_free(struct icaltimezonetype tzt); /* ical_unknown_token_handling : * How should the ICAL library handle components, properties and parameters with * unknown names? * FIXME: Currently only affects parameters. Extend to components and properties. */ typedef enum ical_unknown_token_handling { ICAL_ASSUME_IANA_TOKEN = 1, ICAL_DISCARD_TOKEN = 2, ICAL_TREAT_AS_ERROR = 3 } ical_unknown_token_handling; ical_unknown_token_handling ical_get_unknown_token_handling_setting(void); void ical_set_unknown_token_handling_setting(ical_unknown_token_handling newSetting); #endif /* !ICALTYPES_H */ libical-1.0/src/libical/sspm.h0000664000076400007640000000741112132563132015255 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: sspm.h Mime Parser CREATOR: eric 25 June 2000 $Id: sspm.h,v 1.5 2008-01-15 23:17:43 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Initial Developer of the Original Code is Eric Busboom (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ #ifndef SSPM_H #define SSPM_H enum sspm_major_type { SSPM_NO_MAJOR_TYPE, SSPM_TEXT_MAJOR_TYPE, SSPM_IMAGE_MAJOR_TYPE, SSPM_AUDIO_MAJOR_TYPE, SSPM_VIDEO_MAJOR_TYPE, SSPM_APPLICATION_MAJOR_TYPE, SSPM_MULTIPART_MAJOR_TYPE, SSPM_MESSAGE_MAJOR_TYPE, SSPM_UNKNOWN_MAJOR_TYPE }; enum sspm_minor_type { SSPM_NO_MINOR_TYPE, SSPM_ANY_MINOR_TYPE, SSPM_PLAIN_MINOR_TYPE, SSPM_RFC822_MINOR_TYPE, SSPM_DIGEST_MINOR_TYPE, SSPM_CALENDAR_MINOR_TYPE, SSPM_MIXED_MINOR_TYPE, SSPM_RELATED_MINOR_TYPE, SSPM_ALTERNATIVE_MINOR_TYPE, SSPM_PARALLEL_MINOR_TYPE, SSPM_UNKNOWN_MINOR_TYPE }; enum sspm_encoding { SSPM_NO_ENCODING, SSPM_QUOTED_PRINTABLE_ENCODING, SSPM_8BIT_ENCODING, SSPM_7BIT_ENCODING, SSPM_BINARY_ENCODING, SSPM_BASE64_ENCODING, SSPM_UNKNOWN_ENCODING }; enum sspm_error{ SSPM_NO_ERROR, SSPM_UNEXPECTED_BOUNDARY_ERROR, SSPM_WRONG_BOUNDARY_ERROR, SSPM_NO_BOUNDARY_ERROR, SSPM_NO_HEADER_ERROR, SSPM_MALFORMED_HEADER_ERROR }; struct sspm_header { int def; char* boundary; enum sspm_major_type major; enum sspm_minor_type minor; char *minor_text; char ** content_type_params; char* charset; enum sspm_encoding encoding; char* filename; char* content_id; enum sspm_error error; char* error_text; }; struct sspm_part { struct sspm_header header; int level; size_t data_size; void *data; }; struct sspm_action_map { enum sspm_major_type major; enum sspm_minor_type minor; void* (*new_part)(void); void (*add_line)(void *part, struct sspm_header *header, const char* line, size_t size); void* (*end_part)(void* part); void (*free_part)(void *part); }; const char* sspm_major_type_string(enum sspm_major_type type); const char* sspm_minor_type_string(enum sspm_minor_type type); const char* sspm_encoding_string(enum sspm_encoding type); int sspm_parse_mime(struct sspm_part *parts, size_t max_parts, const struct sspm_action_map *actions, char* (*get_string)(char *s, size_t size, void* data), void *get_string_data, struct sspm_header *first_header ); void sspm_free_parts(struct sspm_part *parts, size_t max_parts); char *decode_quoted_printable(char *dest, char *src, size_t *size); char *decode_base64(char *dest, char *src, size_t *size); int sspm_write_mime(struct sspm_part *parts,size_t num_parts, char **output_string, const char* header); #endif /*SSPM_H*/ libical-1.0/src/libical/icalcomponent.c0000664000076400007640000020704212132563132017123 0ustar allenallen/*====================================================================== FILE: icalcomponent.c CREATOR: eric 28 April 1999 $Id: icalcomponent.c,v 1.64 2008-01-30 20:28:42 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalcomponent.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalcomponent.h" #include "pvl.h" /* "Pointer-to-void list" */ #include "icalerror.h" #include "icalmemory.h" #include "icalenums.h" #include "icaltime.h" #include "icalarray.h" #include "icaltimezone.h" #include "icalduration.h" #include "icalperiod.h" #include "icalparser.h" #include "icalrestriction.h" #include /* for malloc */ #include /* for va_list, etc */ #include #include #include /* for fprintf */ #include /* for strdup */ #include /* for INT_MAX */ #ifdef _MSC_VER #define snprintf _snprintf #define strncasecmp strnicmp #endif struct icalcomponent_impl { char id[5]; icalcomponent_kind kind; char* x_name; pvl_list properties; pvl_elem property_iterator; pvl_list components; pvl_elem component_iterator; icalcomponent* parent; /** An array of icaltimezone structs. We use this so we can do fast lookup of timezones using binary searches. timezones_sorted is set to 0 whenever we add a timezone, so we remember to sort the array before doing a binary search. */ icalarray* timezones; int timezones_sorted; }; /* icalproperty functions that only components get to use */ void icalproperty_set_parent(icalproperty* property, icalcomponent* component); icalcomponent* icalproperty_get_parent(icalproperty* property); void icalcomponent_add_children(icalcomponent *impl,va_list args); static icalcomponent* icalcomponent_new_impl (icalcomponent_kind kind); static void icalcomponent_merge_vtimezone (icalcomponent *comp, icalcomponent *vtimezone, icalarray *tzids_to_rename); static void icalcomponent_handle_conflicting_vtimezones (icalcomponent *comp, icalcomponent *vtimezone, icalproperty *tzid_prop, const char *tzid, icalarray *tzids_to_rename); static size_t icalcomponent_get_tzid_prefix_len (const char *tzid); static void icalcomponent_rename_tzids(icalcomponent* comp, icalarray* rename_table); static void icalcomponent_rename_tzids_callback(icalparameter *param, void *data); static int icalcomponent_compare_vtimezones (icalcomponent *vtimezone1, icalcomponent *vtimezone2); static int icalcomponent_compare_timezone_fn (const void *elem1, const void *elem2); static struct icaltimetype icalcomponent_get_datetime(icalcomponent *comp, icalproperty *prop); void icalcomponent_add_children(icalcomponent *impl, va_list args) { void* vp; while((vp = va_arg(args, void*)) != 0) { assert (icalcomponent_isa_component(vp) != 0 || icalproperty_isa_property(vp) != 0 ) ; if (icalcomponent_isa_component(vp) != 0 ){ icalcomponent_add_component(impl, (icalcomponent*)vp); } else if (icalproperty_isa_property(vp) != 0 ){ icalcomponent_add_property(impl, (icalproperty*)vp); } } } static icalcomponent* icalcomponent_new_impl (icalcomponent_kind kind) { icalcomponent* comp; if (!icalcomponent_kind_is_valid(kind)) return NULL; if ( ( comp = (icalcomponent*) malloc(sizeof(icalcomponent))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } strcpy(comp->id,"comp"); comp->kind = kind; comp->properties = pvl_newlist(); comp->property_iterator = 0; comp->components = pvl_newlist(); comp->component_iterator = 0; comp->x_name = 0; comp->parent = 0; comp->timezones = NULL; comp->timezones_sorted = 1; return comp; } /** @brief Constructor */ icalcomponent* icalcomponent_new (icalcomponent_kind kind) { return icalcomponent_new_impl(kind); } /** @brief Constructor */ icalcomponent* icalcomponent_vanew (icalcomponent_kind kind, ...) { va_list args; icalcomponent *impl = icalcomponent_new_impl(kind); if (impl == 0){ return 0; } va_start(args,kind); icalcomponent_add_children(impl, args); va_end(args); return impl; } /** @brief Constructor */ icalcomponent* icalcomponent_new_from_string(const char* str) { return icalparser_parse_string(str); } /** @brief Constructor */ icalcomponent* icalcomponent_new_clone(icalcomponent* old) { icalcomponent *new; icalproperty *p; icalcomponent *c; pvl_elem itr; icalerror_check_arg_rz( (old!=0), "component"); new = icalcomponent_new_impl(old->kind); if (new == 0){ return 0; } for( itr = pvl_head(old->properties); itr != 0; itr = pvl_next(itr)) { p = (icalproperty*)pvl_data(itr); icalcomponent_add_property(new,icalproperty_new_clone(p)); } for( itr = pvl_head(old->components); itr != 0; itr = pvl_next(itr)) { c = (icalcomponent*)pvl_data(itr); icalcomponent_add_component(new,icalcomponent_new_clone(c)); } return new; } /** @brief Constructor */ icalcomponent* icalcomponent_new_x (const char* x_name) { icalcomponent* comp = icalcomponent_new_impl(ICAL_X_COMPONENT); if (!comp) { return 0; } comp->x_name = icalmemory_strdup(x_name); return comp; } /*** @brief Destructor */ void icalcomponent_free (icalcomponent* c) { icalproperty* prop; icalcomponent* comp; icalerror_check_arg_rv( (c!=0), "component"); #ifdef ICAL_FREE_ON_LIST_IS_ERROR icalerror_assert( (c->parent ==0),"Tried to free a component that is still attached to a parent component"); #else if(c->parent != 0){ return; } #endif if(c != 0 ){ if ( c->properties != 0 ) { while( (prop=pvl_pop(c->properties)) != 0){ icalproperty_set_parent(prop,0); icalproperty_free(prop); } pvl_free(c->properties); } while( (comp=pvl_data(pvl_head(c->components))) != 0){ icalcomponent_remove_component(c,comp); icalcomponent_free(comp); } pvl_free(c->components); if (c->x_name != 0) { free(c->x_name); } if (c->timezones) icaltimezone_array_free (c->timezones); c->kind = ICAL_NO_COMPONENT; c->properties = 0; c->property_iterator = 0; c->components = 0; c->component_iterator = 0; c->x_name = 0; c->id[0] = 'X'; c->timezones = NULL; free(c); } } char* icalcomponent_as_ical_string (icalcomponent* impl) { char *buf; buf = icalcomponent_as_ical_string_r(impl); icalmemory_add_tmp_buffer(buf); return buf; } char* icalcomponent_as_ical_string_r (icalcomponent* impl) { char* buf; char* tmp_buf; size_t buf_size = 1024; char* buf_ptr = 0; pvl_elem itr; /* RFC 2445 explicitly says that the newline is *ALWAYS* a \r\n (CRLF)!!!! */ const char newline[] = "\r\n"; icalcomponent *c; icalproperty *p; icalcomponent_kind kind = icalcomponent_isa(impl); const char* kind_string; icalerror_check_arg_rz( (impl!=0), "component"); icalerror_check_arg_rz( (kind!=ICAL_NO_COMPONENT), "component kind is ICAL_NO_COMPONENT"); if (kind != ICAL_X_COMPONENT) { kind_string = icalcomponent_kind_to_string(kind); } else { kind_string = impl->x_name; } icalerror_check_arg_rz( (kind_string!=0),"Unknown kind of component"); buf = icalmemory_new_buffer(buf_size); buf_ptr = buf; icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:"); icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); for( itr = pvl_head(impl->properties); itr != 0; itr = pvl_next(itr)) { p = (icalproperty*)pvl_data(itr); icalerror_assert((p!=0),"Got a null property"); tmp_buf = icalproperty_as_ical_string_r(p); icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); free(tmp_buf); } for( itr = pvl_head(impl->components); itr != 0; itr = pvl_next(itr)) { c = (icalcomponent*)pvl_data(itr); tmp_buf = icalcomponent_as_ical_string_r(c); icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); free(tmp_buf); } icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:"); icalmemory_append_string(&buf, &buf_ptr, &buf_size, icalcomponent_kind_to_string(kind)); icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); return buf; } int icalcomponent_is_valid (icalcomponent* component) { if ( (strcmp(component->id,"comp") == 0) && component->kind != ICAL_NO_COMPONENT){ return 1; } else { return 0; } } icalcomponent_kind icalcomponent_isa (const icalcomponent* component) { icalerror_check_arg_rx( (component!=0), "component", ICAL_NO_COMPONENT); if(component != 0) { return component->kind; } return ICAL_NO_COMPONENT; } int icalcomponent_isa_component (void* component) { icalcomponent *impl = component; icalerror_check_arg_rz( (component!=0), "component"); if (strcmp(impl->id,"comp") == 0) { return 1; } else { return 0; } } void icalcomponent_add_property (icalcomponent* component, icalproperty* property) { icalerror_check_arg_rv( (component!=0), "component"); icalerror_check_arg_rv( (property!=0), "property"); icalerror_assert( (!icalproperty_get_parent(property)),"The property has already been added to a component. Remove the property with icalcomponent_remove_property before calling icalcomponent_add_property"); icalproperty_set_parent(property,component); pvl_push(component->properties,property); } void icalcomponent_remove_property (icalcomponent* component, icalproperty* property) { pvl_elem itr, next_itr; icalerror_check_arg_rv( (component!=0), "component"); icalerror_check_arg_rv( (property!=0), "property"); #ifdef ICAL_REMOVE_NONMEMBER_COMPONENT_IS_ERROR icalerror_assert( (icalproperty_get_parent(property)),"The property is not a member of a component"); #else if(icalproperty_get_parent(property) == 0){ return; } #endif for( itr = pvl_head(component->properties); itr != 0; itr = next_itr) { next_itr = pvl_next(itr); if( pvl_data(itr) == (void*)property ){ if (component->property_iterator == itr){ component->property_iterator = pvl_next(itr); } pvl_remove( component->properties, itr); icalproperty_set_parent(property,0); } } } int icalcomponent_count_properties (icalcomponent* component, icalproperty_kind kind) { int count=0; pvl_elem itr; icalerror_check_arg_rz( (component!=0), "component"); for( itr = pvl_head(component->properties); itr != 0; itr = pvl_next(itr)) { if(kind == icalproperty_isa((icalproperty*)pvl_data(itr)) || kind == ICAL_ANY_PROPERTY){ count++; } } return count; } icalproperty* icalcomponent_get_current_property (icalcomponent* component) { icalerror_check_arg_rz( (component!=0),"component"); if (component->property_iterator==0){ return 0; } return (icalproperty*) pvl_data(component->property_iterator); } icalproperty* icalcomponent_get_first_property (icalcomponent* c, icalproperty_kind kind) { icalerror_check_arg_rz( (c!=0),"component"); for( c->property_iterator = pvl_head(c->properties); c->property_iterator != 0; c->property_iterator = pvl_next(c->property_iterator)) { icalproperty *p = (icalproperty*) pvl_data(c->property_iterator); if (icalproperty_isa(p) == kind || kind == ICAL_ANY_PROPERTY) { return p; } } return 0; } icalproperty* icalcomponent_get_next_property (icalcomponent* c, icalproperty_kind kind) { icalerror_check_arg_rz( (c!=0),"component"); if (c->property_iterator == 0){ return 0; } for( c->property_iterator = pvl_next(c->property_iterator); c->property_iterator != 0; c->property_iterator = pvl_next(c->property_iterator)) { icalproperty *p = (icalproperty*) pvl_data(c->property_iterator); if (icalproperty_isa(p) == kind || kind == ICAL_ANY_PROPERTY) { return p; } } return 0; } icalproperty** icalcomponent_get_properties (icalcomponent* component, icalproperty_kind kind); void icalcomponent_add_component (icalcomponent* parent, icalcomponent* child) { icalerror_check_arg_rv( (parent!=0), "parent"); icalerror_check_arg_rv( (child!=0), "child"); if (child->parent !=0) { icalerror_set_errno(ICAL_USAGE_ERROR); } child->parent = parent; /* Fix for Mozilla - bug 327602 */ if (child->kind != ICAL_VTIMEZONE_COMPONENT) { pvl_push(parent->components, child); } else { /* VTIMEZONES should be first in the resulting VCALENDAR. */ pvl_unshift(parent->components, child); /* Add the VTIMEZONE to our array. */ /* FIXME: Currently we are also creating this array when loading in a builtin VTIMEZONE, when we don't need it. */ if (!parent->timezones) parent->timezones = icaltimezone_array_new (); icaltimezone_array_append_from_vtimezone (parent->timezones, child); /* Flag that we need to sort it before doing any binary searches. */ parent->timezones_sorted = 0; } } void icalcomponent_remove_component (icalcomponent* parent, icalcomponent* child) { pvl_elem itr, next_itr; icalerror_check_arg_rv( (parent!=0), "parent"); icalerror_check_arg_rv( (child!=0), "child"); /* If the component is a VTIMEZONE, remove it from our array as well. */ if (child->kind == ICAL_VTIMEZONE_COMPONENT) { icaltimezone *zone; int i, num_elements; num_elements = parent->timezones ? parent->timezones->num_elements : 0; for (i = 0; i < num_elements; i++) { zone = icalarray_element_at (parent->timezones, i); if (icaltimezone_get_component (zone) == child) { icaltimezone_free (zone, 0); icalarray_remove_element_at (parent->timezones, i); break; } } } for( itr = pvl_head(parent->components); itr != 0; itr = next_itr) { next_itr = pvl_next(itr); if( pvl_data(itr) == (void*)child ){ if (parent->component_iterator == itr){ /* Don't let the current iterator become invalid */ /* HACK. The semantics for this are troubling. */ parent->component_iterator = pvl_next(parent->component_iterator); } pvl_remove( parent->components, itr); child->parent = 0; break; } } } int icalcomponent_count_components (icalcomponent* component, icalcomponent_kind kind) { int count=0; pvl_elem itr; icalerror_check_arg_rz( (component!=0), "component"); for( itr = pvl_head(component->components); itr != 0; itr = pvl_next(itr)) { if(kind == icalcomponent_isa((icalcomponent*)pvl_data(itr)) || kind == ICAL_ANY_COMPONENT){ count++; } } return count; } icalcomponent* icalcomponent_get_current_component(icalcomponent* component) { icalerror_check_arg_rz( (component!=0),"component"); if (component->component_iterator == 0){ return 0; } return (icalcomponent*) pvl_data(component->component_iterator); } icalcomponent* icalcomponent_get_first_component (icalcomponent* c, icalcomponent_kind kind) { icalerror_check_arg_rz( (c!=0),"component"); for( c->component_iterator = pvl_head(c->components); c->component_iterator != 0; c->component_iterator = pvl_next(c->component_iterator)) { icalcomponent *p = (icalcomponent*) pvl_data(c->component_iterator); if (icalcomponent_isa(p) == kind || kind == ICAL_ANY_COMPONENT) { return p; } } return 0; } icalcomponent* icalcomponent_get_next_component (icalcomponent* c, icalcomponent_kind kind) { icalerror_check_arg_rz( (c!=0),"component"); if (c->component_iterator == 0){ return 0; } for( c->component_iterator = pvl_next(c->component_iterator); c->component_iterator != 0; c->component_iterator = pvl_next(c->component_iterator)) { icalcomponent *p = (icalcomponent*) pvl_data(c->component_iterator); if (icalcomponent_isa(p) == kind || kind == ICAL_ANY_COMPONENT) { return p; } } return 0; } icalcomponent* icalcomponent_get_first_real_component(icalcomponent *c) { icalcomponent *comp; for(comp = icalcomponent_get_first_component(c,ICAL_ANY_COMPONENT); comp != 0; comp = icalcomponent_get_next_component(c,ICAL_ANY_COMPONENT)){ icalcomponent_kind kind = icalcomponent_isa(comp); if(kind == ICAL_VEVENT_COMPONENT || kind == ICAL_VTODO_COMPONENT || kind == ICAL_VJOURNAL_COMPONENT || kind == ICAL_VFREEBUSY_COMPONENT || kind == ICAL_VQUERY_COMPONENT || kind == ICAL_VAGENDA_COMPONENT){ return comp; } } return 0; } /** @brief Get the timespan covered by this component, in UTC * (deprecated) * * see icalcomponent_foreach_recurrence() for a better way to * extract spans from an component. * * This method can be called on either a VCALENDAR or any real * component. If the VCALENDAR contains no real component, but * contains a VTIMEZONE, we return that span instead. * This might not be a desirable behavior; we keep it for now * for backward compatibility, but it might be deprecated at a * future time. * * FIXME this API needs to be clarified. DTEND is defined as the * first available time after the end of this event, so the span * should actually end 1 second before DTEND. */ icaltime_span icalcomponent_get_span(icalcomponent* comp) { icalcomponent *inner; icalcomponent_kind kind; icaltime_span span; struct icaltimetype start, end; span.start = 0; span.end = 0; span.is_busy= 1; /* initial Error checking */ if (comp == NULL) { return span; } /* FIXME this might go away */ kind = icalcomponent_isa(comp); if(kind == ICAL_VCALENDAR_COMPONENT){ inner = icalcomponent_get_first_real_component(comp); /* Maybe there is a VTIMEZONE in there */ if (inner == 0){ inner = icalcomponent_get_first_component(comp, ICAL_VTIMEZONE_COMPONENT); } } else { inner = comp; } if (inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); /*icalerror_warn("icalcomponent_get_span: no component specified, or empty VCALENDAR component");*/ return span; } kind = icalcomponent_isa(inner); if( !( kind == ICAL_VEVENT_COMPONENT || kind == ICAL_VJOURNAL_COMPONENT || kind == ICAL_VTODO_COMPONENT || kind == ICAL_VFREEBUSY_COMPONENT )) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); /*icalerror_warn("icalcomponent_get_span: no component specified, or empty VCALENDAR component");*/ return span; } /* Get to work. starting with DTSTART */ start = icalcomponent_get_dtstart(comp); if (icaltime_is_null_time(start)) { return span; } span.start = icaltime_as_timet_with_zone(start, icaltimezone_get_utc_timezone()); /* The end time could be specified as either a DTEND or a DURATION */ /* icalcomponent_get_dtend takes care of these cases. */ end = icalcomponent_get_dtend(comp); if (icaltime_is_null_time(end)) { if (!icaltime_is_date(start)) { /* If dtstart is a DATE-TIME and there is no DTEND nor DURATION it takes no time */ span.start = 0; return span; } else { end = start; } } span.end = icaltime_as_timet_with_zone(end, icaltimezone_get_utc_timezone()); if (icaltime_is_date(start)) { /* Until the end of the day*/ span.end += 60*60*24 - 1; } return span; } /** * Decide if this recurrance is acceptable * * @param comp A valid icalcomponent. * @param dtstart The base dtstart value for this component. * @param recurtime The time to test against. * * @return true if the recurrence value is excluded, false otherwise. * * This function decides if a specific recurrence value is * excluded by EXRULE or EXDATE properties. * * It's not the most efficient code. You might get better performance * if you assume that recurtime is always increasing for each * call. Then you could: * * - sort the EXDATE values * - save the state of each EXRULE iterator for the next call. * * In this case though you don't need to worry how you call this * function. It will always return the correct result. */ int icalproperty_recurrence_is_excluded(icalcomponent *comp, struct icaltimetype *dtstart, struct icaltimetype *recurtime) { icalproperty *exdate, *exrule; pvl_elem property_iterator; if (comp == NULL || dtstart == NULL || recurtime == NULL || icaltime_is_null_time(*recurtime)) /* BAD DATA */ return 1; property_iterator = comp->property_iterator; /** first test against the exdate values **/ for (exdate = icalcomponent_get_first_property(comp,ICAL_EXDATE_PROPERTY); exdate != NULL; exdate = icalcomponent_get_next_property(comp,ICAL_EXDATE_PROPERTY)) { struct icaltimetype exdatetime = icalcomponent_get_datetime(comp, exdate); if ((icaltime_is_date(exdatetime) && icaltime_compare_date_only(*recurtime, exdatetime) == 0) || (icaltime_compare(*recurtime, exdatetime) == 0)) { /** MATCHED **/ comp->property_iterator = property_iterator; return 1; } } /** Now test against the EXRULEs **/ for (exrule = icalcomponent_get_first_property(comp,ICAL_EXRULE_PROPERTY); exrule != NULL; exrule = icalcomponent_get_next_property(comp,ICAL_EXRULE_PROPERTY)) { struct icalrecurrencetype recur = icalproperty_get_exrule(exrule); icalrecur_iterator *exrule_itr = icalrecur_iterator_new(recur, *dtstart); struct icaltimetype exrule_time; while (exrule_itr) { int result; exrule_time = icalrecur_iterator_next(exrule_itr); if (icaltime_is_null_time(exrule_time)) break; result = icaltime_compare(*recurtime, exrule_time); if (result == 0) { icalrecur_iterator_free(exrule_itr); comp->property_iterator = property_iterator; return 1; /** MATCH **/ } if (result == 1) break; /** exrule_time > recurtime **/ } icalrecur_iterator_free(exrule_itr); } comp->property_iterator = property_iterator; return 0; /** no matches **/ } /** * @brief Return the busy status based on the TRANSP property. * * @param comp A valid icalcomponent. * * @return 1 if the event is a busy item, 0 if it is not. */ static int icalcomponent_is_busy(icalcomponent *comp) { icalproperty *transp; enum icalproperty_status status; int ret = 1; /** @todo check access control here, converting busy->free if the permissions do not allow access... */ /* Is this a busy time? Check the TRANSP property */ transp = icalcomponent_get_first_property(comp, ICAL_TRANSP_PROPERTY); if (transp) { icalvalue *transp_val = icalproperty_get_value(transp); switch (icalvalue_get_transp(transp_val)) { case ICAL_TRANSP_OPAQUE: case ICAL_TRANSP_OPAQUENOCONFLICT: case ICAL_TRANSP_NONE: ret = 1; break; case ICAL_TRANSP_TRANSPARENT: case ICAL_TRANSP_TRANSPARENTNOCONFLICT: ret = 0; break; default: ret = 0; break; } } status = icalcomponent_get_status(comp); if (ret && status) { switch (status) { case ICAL_STATUS_CANCELLED: case ICAL_STATUS_TENTATIVE: ret = 0; break; default: break; } } return(ret); } /** * @brief cycle through all recurrances of an event * * @param comp A valid VEVENT component * @param start Ignore timespans before this * @param end Ignore timespans after this * @param callback Function called for each timespan within the range * @param callback_data Pointer passed back to the callback function * * This function will call the specified callback function for once * for the base value of DTSTART, and foreach recurring date/time * value. * * It will filter out events that are specified as an EXDATE or an EXRULE. * * @todo We do not filter out duplicate RRULES/RDATES * @todo We do not handle RDATEs with explicit periods */ void icalcomponent_foreach_recurrence(icalcomponent* comp, struct icaltimetype start, struct icaltimetype end, void (*callback)(icalcomponent *comp, struct icaltime_span *span, void *data), void *callback_data) { struct icaltimetype dtstart, dtend; icaltime_span recurspan, basespan, limit_span; time_t limit_start, limit_end; time_t dtduration; icalproperty *rrule, *rdate; struct icaldurationtype dur; pvl_elem property_iterator; /* for saving the iterator */ if (comp == NULL || callback == NULL) return; dtstart = icalcomponent_get_dtstart(comp); if (icaltime_is_null_time(dtstart)) return; /* The end time could be specified as either a DTEND or a DURATION */ /* icalcomponent_get_dtend takes care of these cases. */ dtend = icalcomponent_get_dtend(comp); /* Now set up the base span for this item, corresponding to the base DTSTART and DTEND */ basespan = icaltime_span_new(dtstart, dtend, 1); basespan.is_busy = icalcomponent_is_busy(comp); /** Calculate the ceiling and floor values.. **/ limit_start = icaltime_as_timet_with_zone(start, icaltimezone_get_utc_timezone()); if (!icaltime_is_null_time(end)) limit_end = icaltime_as_timet_with_zone(end, icaltimezone_get_utc_timezone()); else limit_end = INT_MAX; /* max 32 bit time_t */ limit_span.start = limit_start; limit_span.end = limit_end; /* Do the callback for the initial DTSTART entry */ if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &dtstart)) { /** call callback action **/ if (icaltime_span_overlaps(&basespan, &limit_span)) (*callback) (comp, &basespan, callback_data); } recurspan = basespan; dtduration = basespan.end - basespan.start; /* Now cycle through the rrule entries */ for (rrule = icalcomponent_get_first_property(comp,ICAL_RRULE_PROPERTY); rrule != NULL; rrule = icalcomponent_get_next_property(comp,ICAL_RRULE_PROPERTY)) { struct icalrecurrencetype recur = icalproperty_get_rrule(rrule); icalrecur_iterator *rrule_itr = icalrecur_iterator_new(recur, dtstart); struct icaltimetype rrule_time; if(rrule_itr) rrule_time = icalrecur_iterator_next(rrule_itr); /** note that icalrecur_iterator_next always returns dtstart the first time.. **/ while (rrule_itr) { rrule_time = icalrecur_iterator_next(rrule_itr); if (icaltime_is_null_time(rrule_time)) break; /* if we have iterated past end time, then no need to check any further */ if (icaltime_compare(rrule_time, end) > 0) break; dur = icaltime_subtract(rrule_time, dtstart); recurspan.start = basespan.start + icaldurationtype_as_int(dur); recurspan.end = recurspan.start + dtduration; /** save the iterator ICK! **/ property_iterator = comp->property_iterator; if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &rrule_time)) { /** call callback action **/ if (icaltime_span_overlaps(&recurspan, &limit_span)) (*callback) (comp, &recurspan, callback_data); } comp->property_iterator = property_iterator; } /* end of iteration over a specific RRULE */ icalrecur_iterator_free(rrule_itr); } /* end of RRULE loop */ /** Now process RDATE entries **/ for (rdate = icalcomponent_get_first_property(comp,ICAL_RDATE_PROPERTY); rdate != NULL; rdate = icalcomponent_get_next_property(comp,ICAL_RDATE_PROPERTY)) { struct icaldatetimeperiodtype rdate_period = icalproperty_get_rdate(rdate); /** RDATES can specify raw datetimes, periods, or dates. we only support raw datetimes for now.. @todo Add support for other types **/ if (icaltime_is_null_time(rdate_period.time)) continue; dur = icaltime_subtract(rdate_period.time, dtstart); recurspan.start = basespan.start + icaldurationtype_as_int(dur); recurspan.end = recurspan.start + dtduration; /** save the iterator ICK! **/ property_iterator = comp->property_iterator; if (!icalproperty_recurrence_is_excluded(comp, &dtstart, &rdate_period.time)) { /** call callback action **/ if (icaltime_span_overlaps(&recurspan, &limit_span)) (*callback) (comp, &recurspan, callback_data); } comp->property_iterator = property_iterator; } } int icalcomponent_check_restrictions(icalcomponent* comp){ icalerror_check_arg_rz(comp!=0,"comp"); return icalrestriction_check(comp); } /** @brief returns the number of errors encountered parsing the data * * This function counts the number times the X-LIC-ERROR occurs * in the data structure. */ int icalcomponent_count_errors(icalcomponent* component) { int errors = 0; icalproperty *p; icalcomponent *c; pvl_elem itr; for( itr = pvl_head(component->properties); itr != 0; itr = pvl_next(itr)) { p = (icalproperty*)pvl_data(itr); if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) { errors++; } } for( itr = pvl_head(component->components); itr != 0; itr = pvl_next(itr)) { c = (icalcomponent*)pvl_data(itr); errors += icalcomponent_count_errors(c); } return errors; } void icalcomponent_strip_errors(icalcomponent* component) { icalproperty *p; icalcomponent *c; pvl_elem itr, next_itr; for( itr = pvl_head(component->properties); itr != 0; itr = next_itr) { p = (icalproperty*)pvl_data(itr); next_itr = pvl_next(itr); if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) { icalcomponent_remove_property(component,p); icalproperty_free(p); p = NULL; } } for( itr = pvl_head(component->components); itr != 0; itr = pvl_next(itr)) { c = (icalcomponent*)pvl_data(itr); icalcomponent_strip_errors(c); } } /* Hack. This will change the state of the iterators */ void icalcomponent_convert_errors(icalcomponent* component) { icalproperty *p, *next_p; icalcomponent *c; for(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY); p != 0; p = next_p){ next_p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY); if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) { struct icalreqstattype rst; icalparameter *param = icalproperty_get_first_parameter (p,ICAL_XLICERRORTYPE_PARAMETER); rst.code = ICAL_UNKNOWN_STATUS; rst.desc = 0; switch(icalparameter_get_xlicerrortype(param)){ case ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR: { rst.code = ICAL_3_2_INVPARAM_STATUS; break; } case ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR: { rst.code = ICAL_3_3_INVPARAMVAL_STATUS; break; } case ICAL_XLICERRORTYPE_PROPERTYPARSEERROR: { rst.code = ICAL_3_0_INVPROPNAME_STATUS; break; } case ICAL_XLICERRORTYPE_VALUEPARSEERROR: { rst.code = ICAL_3_1_INVPROPVAL_STATUS; break; } case ICAL_XLICERRORTYPE_COMPONENTPARSEERROR: { rst.code = ICAL_3_4_INVCOMP_STATUS; break; } default: { break; } } if (rst.code != ICAL_UNKNOWN_STATUS){ rst.debug = icalproperty_get_xlicerror(p); icalcomponent_add_property(component, icalproperty_new_requeststatus(rst)); icalcomponent_remove_property(component,p); icalproperty_free(p); p = NULL; } } } for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT); c != 0; c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){ icalcomponent_convert_errors(c); } } icalcomponent* icalcomponent_get_parent(icalcomponent* component) { return component->parent; } void icalcomponent_set_parent(icalcomponent* component, icalcomponent* parent) { component->parent = parent; } icalcompiter icalcompiter_null = {ICAL_NO_COMPONENT,0}; struct icalcomponent_kind_map { icalcomponent_kind kind; char name[20]; }; static const struct icalcomponent_kind_map component_map[] = { { ICAL_VEVENT_COMPONENT, "VEVENT" }, { ICAL_VTODO_COMPONENT, "VTODO" }, { ICAL_VJOURNAL_COMPONENT, "VJOURNAL" }, { ICAL_VCALENDAR_COMPONENT, "VCALENDAR" }, { ICAL_VAGENDA_COMPONENT, "VAGENDA" }, { ICAL_VFREEBUSY_COMPONENT, "VFREEBUSY" }, { ICAL_VTIMEZONE_COMPONENT, "VTIMEZONE" }, { ICAL_VALARM_COMPONENT, "VALARM" }, { ICAL_XSTANDARD_COMPONENT, "STANDARD" }, /*These are part of RFC2445 */ { ICAL_XDAYLIGHT_COMPONENT, "DAYLIGHT" }, /*but are not really components*/ { ICAL_X_COMPONENT, "X" }, { ICAL_VSCHEDULE_COMPONENT, "SCHEDULE" }, /* CAP components */ { ICAL_VCAR_COMPONENT, "VCAR" }, { ICAL_VCOMMAND_COMPONENT, "VCOMMAND" }, { ICAL_VQUERY_COMPONENT, "VQUERY" }, { ICAL_VREPLY_COMPONENT, "VREPLY" }, /* libical private components */ { ICAL_XLICINVALID_COMPONENT, "X-LIC-UNKNOWN" }, { ICAL_XLICMIMEPART_COMPONENT, "X-LIC-MIME-PART" }, { ICAL_ANY_COMPONENT, "ANY" }, { ICAL_XROOT_COMPONENT, "XROOT" }, /* End of list */ { ICAL_NO_COMPONENT, "" }, }; int icalcomponent_kind_is_valid(const icalcomponent_kind kind) { int i = 0; do { if (component_map[i].kind == kind) return 1; } while (component_map[i++].kind != ICAL_NO_COMPONENT); return 0; } const char* icalcomponent_kind_to_string(icalcomponent_kind kind) { int i; for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) { if (component_map[i].kind == kind) { return component_map[i].name; } } return 0; } icalcomponent_kind icalcomponent_string_to_kind(const char* string) { int i; if (string ==0 ) { return ICAL_NO_COMPONENT; } for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) { if (strncasecmp(string, component_map[i].name, strlen(component_map[i].name)) == 0) { return component_map[i].kind; } } return ICAL_NO_COMPONENT; } icalcompiter icalcomponent_begin_component(icalcomponent* component,icalcomponent_kind kind) { icalcompiter itr; pvl_elem i; itr.kind = kind; itr.iter = NULL; icalerror_check_arg_re(component!=0,"component",icalcompiter_null); for( i = pvl_head(component->components); i != 0; i = pvl_next(i)) { icalcomponent *c = (icalcomponent*) pvl_data(i); if (icalcomponent_isa(c) == kind || kind == ICAL_ANY_COMPONENT) { itr.iter = i; return itr; } } return icalcompiter_null; } icalcompiter icalcomponent_end_component(icalcomponent* component,icalcomponent_kind kind) { icalcompiter itr; pvl_elem i; itr.kind = kind; icalerror_check_arg_re(component!=0,"component",icalcompiter_null); for( i = pvl_tail(component->components); i != 0; i = pvl_prior(i)) { icalcomponent *c = (icalcomponent*) pvl_data(i); if (icalcomponent_isa(c) == kind || kind == ICAL_ANY_COMPONENT) { itr.iter = pvl_next(i); return itr; } } return icalcompiter_null;; } icalcomponent* icalcompiter_next(icalcompiter* i) { if (i->iter == 0){ return 0; } icalerror_check_arg_rz( (i!=0),"i"); for( i->iter = pvl_next(i->iter); i->iter != 0; i->iter = pvl_next(i->iter)) { icalcomponent *c = (icalcomponent*) pvl_data(i->iter); if (icalcomponent_isa(c) == i->kind || i->kind == ICAL_ANY_COMPONENT) { return icalcompiter_deref(i);; } } return 0; } icalcomponent* icalcompiter_prior(icalcompiter* i) { if (i->iter == 0){ return 0; } for( i->iter = pvl_prior(i->iter); i->iter != 0; i->iter = pvl_prior(i->iter)) { icalcomponent *c = (icalcomponent*) pvl_data(i->iter); if (icalcomponent_isa(c) == i->kind || i->kind == ICAL_ANY_COMPONENT) { return icalcompiter_deref(i);; } } return 0; } icalcomponent* icalcompiter_deref(icalcompiter* i) { if(i->iter ==0){ return 0; } return pvl_data(i->iter); } icalcomponent* icalcomponent_get_inner(icalcomponent* comp) { if (icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT){ return icalcomponent_get_first_real_component(comp); } else { return comp; } } /** @brief sets the METHOD property to the given method */ void icalcomponent_set_method(icalcomponent* comp, icalproperty_method method) { icalproperty *prop = icalcomponent_get_first_property(comp, ICAL_METHOD_PROPERTY); if (prop == 0){ prop = icalproperty_new_method(method); icalcomponent_add_property(comp, prop); } icalproperty_set_method(prop,method); } /** @brief returns the METHOD property */ icalproperty_method icalcomponent_get_method(icalcomponent* comp) { icalproperty *prop = icalcomponent_get_first_property(comp,ICAL_METHOD_PROPERTY); if (prop == 0){ return ICAL_METHOD_NONE; } return icalproperty_get_method(prop); } #define ICALSETUPSET(p_kind) \ icalcomponent *inner; \ icalproperty *prop; \ icalerror_check_arg_rv(comp!=0,"comp");\ inner = icalcomponent_get_inner(comp); \ if(inner == 0){\ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);\ return;\ }\ prop = icalcomponent_get_first_property(inner, p_kind); /** @brief Set DTSTART property to given icaltime * * This method respects the icaltime type (DATE vs DATE-TIME) and * timezone (or lack thereof). */ void icalcomponent_set_dtstart(icalcomponent* comp, struct icaltimetype v) { const char *tzid; ICALSETUPSET(ICAL_DTSTART_PROPERTY); if (prop == 0){ prop = icalproperty_new_dtstart(v); icalcomponent_add_property(inner, prop); } else { icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER); } icalproperty_set_dtstart(prop,v); if ((tzid = icaltime_get_tzid(v)) != NULL && !icaltime_is_utc(v)) { icalproperty_add_parameter(prop, icalparameter_new_tzid(tzid)); } } /** @brief Get a DATE or DATE-TIME property as an icaltime * * If the property is a DATE-TIME with a timezone parameter and a * corresponding VTIMEZONE is present in the component, the * returned component will already be in the correct timezone; * otherwise the caller is responsible for converting it. * * FIXME this is useless until we can flag the failure */ static struct icaltimetype icalcomponent_get_datetime(icalcomponent *comp, icalproperty *prop) { icalcomponent *c; icalparameter *param; struct icaltimetype ret; ret = icalvalue_get_datetime(icalproperty_get_value(prop)); if ((param = icalproperty_get_first_parameter(prop, ICAL_TZID_PARAMETER)) != NULL) { const char *tzid = icalparameter_get_tzid(param); icaltimezone *tz = NULL; for (c = comp; c != NULL; c = icalcomponent_get_parent(c)) { tz = icalcomponent_get_timezone(c, tzid); if (tz != NULL) break; } if (tz == NULL) tz = icaltimezone_get_builtin_timezone_from_tzid(tzid); if (tz != NULL) ret = icaltime_set_timezone(&ret, tz); } return ret; } /** @brief Get DTSTART property as an icaltime * * If DTSTART is a DATE-TIME with a timezone parameter and a * corresponding VTIMEZONE is present in the component, the * returned component will already be in the correct timezone; * otherwise the caller is responsible for converting it. * * FIXME this is useless until we can flag the failure */ struct icaltimetype icalcomponent_get_dtstart(icalcomponent* comp) { icalcomponent *inner = icalcomponent_get_inner(comp); icalproperty *prop; prop = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY); if (prop == 0){ return icaltime_null_time(); } return icalcomponent_get_datetime(comp, prop); } /** @brief Get DTEND property as an icaltime * * If a DTEND property is not present but a DURATION is, we use * that to determine the proper end. * * If DTSTART is a DATE-TIME with a timezone parameter and a * corresponding VTIMEZONE is present in the component, the * returned component will already be in the correct timezone; * otherwise the caller is responsible for converting it. * * FIXME this is useless until we can flag the failure */ struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp) { icalcomponent *inner = icalcomponent_get_inner(comp); icalproperty *end_prop = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY); icalproperty *dur_prop = icalcomponent_get_first_property(inner, ICAL_DURATION_PROPERTY); struct icaltimetype ret = icaltime_null_time(); if ( end_prop != 0) { ret = icalcomponent_get_datetime(comp, end_prop); } else if ( dur_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); struct icaldurationtype duration; //extra check to prevent empty durations from crashing if (icalproperty_get_value(dur_prop)) { duration = icalproperty_get_duration(dur_prop); } else { duration = icaldurationtype_null_duration(); } ret = icaltime_add(start,duration); } return ret; } /** @brief Set DTEND property to given icaltime * * This method respects the icaltime type (DATE vs DATE-TIME) and * timezone (or lack thereof). * * This also checks that a DURATION property isn't already there, * and returns an error if it is. It's the caller's responsibility * to remove it. */ void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v) { const char *tzid; ICALSETUPSET(ICAL_DTEND_PROPERTY); if (icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY) != NULL) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return; } if (prop == 0) { prop = icalproperty_new_dtend(v); icalcomponent_add_property(inner, prop); } else { icalproperty_remove_parameter_by_kind(prop, ICAL_TZID_PARAMETER); } icalproperty_set_dtend(prop,v); if ((tzid = icaltime_get_tzid(v)) != NULL && !icaltime_is_utc(v)) { icalproperty_add_parameter(prop, icalparameter_new_tzid(tzid)); } } /** @brief Set DURATION property to given icalduration * * This method respects the icaltime type (DATE vs DATE-TIME) and * timezone (or lack thereof). * * This also checks that a DTEND property isn't already there, * and returns an error if it is. It's the caller's responsibility * to remove it. */ void icalcomponent_set_duration(icalcomponent* comp, struct icaldurationtype v) { ICALSETUPSET(ICAL_DURATION_PROPERTY); if (icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY) != NULL) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return; } if (prop == 0) { prop = icalproperty_new_duration(v); icalcomponent_add_property(inner, prop); } else { icalproperty_set_duration(prop,v); } } /** @brief Get DURATION property as an icalduration * * If a DURATION property is not present but a DTEND is, we use * that to determine the proper end. */ struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp) { icalcomponent *inner = icalcomponent_get_inner(comp); icalproperty *end_prop = icalcomponent_get_first_property(inner,ICAL_DTEND_PROPERTY); icalproperty *dur_prop = icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY); struct icaldurationtype ret = icaldurationtype_null_duration(); if ( dur_prop != 0 && end_prop == 0) { ret = icalproperty_get_duration(dur_prop); } else if ( end_prop != 0 && dur_prop == 0) { /** * FIXME * We assume DTSTART and DTEND are not in different time zones. * Does the standard actually guarantee this? */ struct icaltimetype start = icalcomponent_get_dtstart(inner); struct icaltimetype end = icalcomponent_get_dtend(inner); ret = icaltime_subtract(end, start); } else { /* Error, both duration and dtend have been specified */ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); } return ret; } void icalcomponent_set_dtstamp(icalcomponent* comp, struct icaltimetype v) { ICALSETUPSET(ICAL_DTSTAMP_PROPERTY); if (prop == 0){ prop = icalproperty_new_dtstamp(v); icalcomponent_add_property(inner, prop); } icalproperty_set_dtstamp(prop,v); } struct icaltimetype icalcomponent_get_dtstamp(icalcomponent* comp) { icalcomponent *inner = icalcomponent_get_inner(comp); icalproperty *prop = icalcomponent_get_first_property(inner,ICAL_DTSTAMP_PROPERTY); if (prop == 0){ return icaltime_null_time(); } return icalproperty_get_dtstamp(prop); } void icalcomponent_set_summary(icalcomponent* comp, const char* v) { ICALSETUPSET(ICAL_SUMMARY_PROPERTY) if (prop == 0){ prop = icalproperty_new_summary(v); icalcomponent_add_property(inner, prop); } icalproperty_set_summary(prop,v); } const char* icalcomponent_get_summary(icalcomponent* comp) { icalcomponent *inner; icalproperty *prop; icalerror_check_arg_rz(comp!=0,"comp"); inner = icalcomponent_get_inner(comp); if(inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } prop= icalcomponent_get_first_property(inner,ICAL_SUMMARY_PROPERTY); if (prop == 0){ return 0; } return icalproperty_get_summary(prop); } void icalcomponent_set_comment(icalcomponent* comp, const char* v) { ICALSETUPSET(ICAL_COMMENT_PROPERTY); if (prop == 0){ prop = icalproperty_new_comment(v); icalcomponent_add_property(inner, prop); } icalproperty_set_summary(prop,v); } const char* icalcomponent_get_comment(icalcomponent* comp){ icalcomponent *inner; icalproperty *prop; icalerror_check_arg_rz(comp!=0,"comp"); inner = icalcomponent_get_inner(comp); if(inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } prop= icalcomponent_get_first_property(inner,ICAL_COMMENT_PROPERTY); if (prop == 0){ return 0; } return icalproperty_get_comment(prop); } void icalcomponent_set_uid(icalcomponent* comp, const char* v) { ICALSETUPSET(ICAL_UID_PROPERTY); if (prop == 0){ prop = icalproperty_new_uid(v); icalcomponent_add_property(inner, prop); } icalproperty_set_summary(prop,v); } const char* icalcomponent_get_uid(icalcomponent* comp){ icalcomponent *inner; icalproperty *prop; icalerror_check_arg_rz(comp!=0,"comp"); inner = icalcomponent_get_inner(comp); if(inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } prop= icalcomponent_get_first_property(inner,ICAL_UID_PROPERTY); if (prop == 0){ return 0; } return icalproperty_get_uid(prop); } void icalcomponent_set_recurrenceid(icalcomponent* comp, struct icaltimetype v) { ICALSETUPSET(ICAL_RECURRENCEID_PROPERTY); if (prop == 0){ prop = icalproperty_new_recurrenceid(v); icalcomponent_add_property(inner, prop); } icalproperty_set_recurrenceid(prop,v); } struct icaltimetype icalcomponent_get_recurrenceid(icalcomponent* comp) { icalcomponent *inner; icalproperty *prop; if (comp == 0) { icalerror_set_errno(ICAL_BADARG_ERROR); return icaltime_null_time(); } inner = icalcomponent_get_inner(comp); if(inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return icaltime_null_time(); } prop= icalcomponent_get_first_property(inner, ICAL_RECURRENCEID_PROPERTY); if (prop == 0){ return icaltime_null_time(); } return icalproperty_get_recurrenceid(prop); } void icalcomponent_set_description(icalcomponent* comp, const char* v) { ICALSETUPSET(ICAL_DESCRIPTION_PROPERTY); if (prop == 0){ prop = icalproperty_new_description(v); icalcomponent_add_property(inner, prop); } icalproperty_set_description(prop,v); } const char* icalcomponent_get_description(icalcomponent* comp) { icalcomponent *inner; icalproperty *prop; icalerror_check_arg_rz(comp!=0,"comp"); inner = icalcomponent_get_inner(comp); if(inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } prop= icalcomponent_get_first_property(inner,ICAL_DESCRIPTION_PROPERTY); if (prop == 0){ return 0; } return icalproperty_get_description(prop); } void icalcomponent_set_location(icalcomponent* comp, const char* v) { ICALSETUPSET(ICAL_LOCATION_PROPERTY) if (prop == 0){ prop = icalproperty_new_location(v); icalcomponent_add_property(inner, prop); } icalproperty_set_location(prop,v); } const char* icalcomponent_get_location(icalcomponent* comp) { icalcomponent *inner; icalproperty *prop; icalerror_check_arg_rz(comp!=0,"comp"); inner = icalcomponent_get_inner(comp); if(inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } prop= icalcomponent_get_first_property(inner,ICAL_LOCATION_PROPERTY); if (prop == 0){ return 0; } return icalproperty_get_location(prop); } void icalcomponent_set_sequence(icalcomponent* comp, int v) { ICALSETUPSET(ICAL_SEQUENCE_PROPERTY); if (prop == 0){ prop = icalproperty_new_sequence(v); icalcomponent_add_property(inner, prop); } icalproperty_set_sequence(prop,v); } int icalcomponent_get_sequence(icalcomponent* comp){ icalcomponent *inner; icalproperty *prop; icalerror_check_arg_rz(comp!=0,"comp"); inner = icalcomponent_get_inner(comp); if(inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } prop= icalcomponent_get_first_property(inner,ICAL_SEQUENCE_PROPERTY); if (prop == 0){ return 0; } return icalproperty_get_sequence(prop); } void icalcomponent_set_status(icalcomponent* comp, enum icalproperty_status v) { ICALSETUPSET(ICAL_STATUS_PROPERTY); if (prop == 0){ prop = icalproperty_new_status(v); icalcomponent_add_property(inner, prop); } icalproperty_set_status(prop,v); } enum icalproperty_status icalcomponent_get_status(icalcomponent* comp){ icalcomponent *inner; icalproperty *prop; icalerror_check_arg_rz(comp!=0,"comp"); inner = icalcomponent_get_inner(comp); if(inner == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return 0; } prop= icalcomponent_get_first_property(inner,ICAL_STATUS_PROPERTY); if (prop == 0){ return 0; } return icalproperty_get_status(prop); } icalcomponent* icalcomponent_new_vcalendar(void) { return icalcomponent_new(ICAL_VCALENDAR_COMPONENT); } icalcomponent* icalcomponent_new_vevent(void) { return icalcomponent_new(ICAL_VEVENT_COMPONENT); } icalcomponent* icalcomponent_new_vtodo(void) { return icalcomponent_new(ICAL_VTODO_COMPONENT); } icalcomponent* icalcomponent_new_vjournal(void) { return icalcomponent_new(ICAL_VJOURNAL_COMPONENT); } icalcomponent* icalcomponent_new_valarm(void) { return icalcomponent_new(ICAL_VALARM_COMPONENT); } icalcomponent* icalcomponent_new_vfreebusy(void) { return icalcomponent_new(ICAL_VFREEBUSY_COMPONENT); } icalcomponent* icalcomponent_new_vtimezone(void) { return icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); } icalcomponent* icalcomponent_new_xstandard(void) { return icalcomponent_new(ICAL_XSTANDARD_COMPONENT); } icalcomponent* icalcomponent_new_xdaylight(void) { return icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT); } icalcomponent* icalcomponent_new_vagenda(void) { return icalcomponent_new(ICAL_VAGENDA_COMPONENT); } icalcomponent* icalcomponent_new_vquery(void) { return icalcomponent_new(ICAL_VQUERY_COMPONENT); } icalcomponent* icalcomponent_new_vreply(void) { return icalcomponent_new(ICAL_VREPLY_COMPONENT); } /* * Timezone stuff. */ /** * This takes 2 VCALENDAR components and merges the second one into the first, * resolving any problems with conflicting TZIDs. comp_to_merge will no * longer exist after calling this function. */ void icalcomponent_merge_component(icalcomponent* comp, icalcomponent* comp_to_merge) { icalcomponent *subcomp, *next_subcomp; icalarray *tzids_to_rename; unsigned int i; /* Check that both components are VCALENDAR components. */ assert (icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT); assert (icalcomponent_isa(comp_to_merge) == ICAL_VCALENDAR_COMPONENT); /* Step through each subcomponent of comp_to_merge, looking for VTIMEZONEs. For each VTIMEZONE found, check if we need to add it to comp and if we need to rename it and all TZID references to it. */ tzids_to_rename = icalarray_new (sizeof (char*), 16); subcomp = icalcomponent_get_first_component (comp_to_merge, ICAL_VTIMEZONE_COMPONENT); while (subcomp) { next_subcomp = icalcomponent_get_next_component (comp_to_merge, ICAL_VTIMEZONE_COMPONENT); /* This will add the VTIMEZONE to comp, if necessary, and also update the array of TZIDs we need to rename. */ icalcomponent_merge_vtimezone (comp, subcomp, tzids_to_rename); /* FIXME: Handle possible NEWFAILED error. */ subcomp = next_subcomp; } /* If we need to do any renaming of TZIDs, do it now. */ if (tzids_to_rename->num_elements != 0) { icalcomponent_rename_tzids (comp_to_merge, tzids_to_rename); /* Now free the tzids_to_rename array. */ for (i = 0; i < tzids_to_rename->num_elements; i++) { free (icalarray_element_at (tzids_to_rename, i)); } } icalarray_free (tzids_to_rename); /* Now move all the components from comp_to_merge to comp, excluding VTIMEZONE components. */ subcomp = icalcomponent_get_first_component (comp_to_merge, ICAL_ANY_COMPONENT); while (subcomp) { next_subcomp = icalcomponent_get_next_component (comp_to_merge, ICAL_ANY_COMPONENT); if (icalcomponent_isa(subcomp) != ICAL_VTIMEZONE_COMPONENT) { icalcomponent_remove_component (comp_to_merge, subcomp); icalcomponent_add_component (comp, subcomp); } subcomp = next_subcomp; } /* Free comp_to_merge. We have moved most of the subcomponents over to comp now. */ icalcomponent_free (comp_to_merge); } static void icalcomponent_merge_vtimezone (icalcomponent *comp, icalcomponent *vtimezone, icalarray *tzids_to_rename) { icalproperty *tzid_prop; const char *tzid; char *tzid_copy; icaltimezone *existing_vtimezone; /* Get the TZID of the VTIMEZONE. */ tzid_prop = icalcomponent_get_first_property (vtimezone, ICAL_TZID_PROPERTY); if (!tzid_prop) return; tzid = icalproperty_get_tzid (tzid_prop); if (!tzid) return; /* See if there is already a VTIMEZONE in comp with the same TZID. */ existing_vtimezone = icalcomponent_get_timezone (comp, tzid); /* If there is no existing VTIMEZONE with the same TZID, we can just move the VTIMEZONE to comp and return. */ if (!existing_vtimezone) { icalcomponent_remove_component (icalcomponent_get_parent (vtimezone), vtimezone); icalcomponent_add_component (comp, vtimezone); return; } /* If the TZID has a '/' prefix, then we don't have to worry about the clashing TZIDs, as they are supposed to be exactly the same VTIMEZONE. */ if (tzid[0] == '/') return; /* Now we have two VTIMEZONEs with the same TZID (which isn't a globally unique one), so we compare the VTIMEZONE components to see if they are the same. If they are, we don't need to do anything. We make a copy of the tzid, since the parameter may get modified in these calls. */ tzid_copy = strdup (tzid); if (!tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } if (!icalcomponent_compare_vtimezones (comp, vtimezone)) { /* FIXME: Handle possible NEWFAILED error. */ /* Now we have two different VTIMEZONEs with the same TZID. */ icalcomponent_handle_conflicting_vtimezones (comp, vtimezone, tzid_prop, tzid_copy, tzids_to_rename); } free (tzid_copy); } static void icalcomponent_handle_conflicting_vtimezones (icalcomponent *comp, icalcomponent *vtimezone, icalproperty *tzid_prop, const char *tzid, icalarray *tzids_to_rename) { int i, suffix, max_suffix = 0, num_elements; size_t tzid_len; char *tzid_copy, *new_tzid, suffix_buf[32]; (void)tzid_prop; /* hack to stop unused variable warning */ /* Find the length of the TZID without any trailing digits. */ tzid_len = icalcomponent_get_tzid_prefix_len (tzid); /* Step through each of the VTIMEZONEs in comp. We may already have the clashing VTIMEZONE in the calendar, but it may have been renamed (i.e. a unique number added on the end of the TZID, e.g. 'London2'). So we compare the new VTIMEZONE with any VTIMEZONEs that have the same prefix (e.g. 'London'). If it matches any of those, we have to rename the TZIDs to that TZID, else we rename to a new TZID, using the biggest numeric suffix found + 1. */ num_elements = comp->timezones ? comp->timezones->num_elements : 0; for (i = 0; i < num_elements; i++) { icaltimezone *zone; const char *existing_tzid; const char *existing_tzid_copy; size_t existing_tzid_len; zone = icalarray_element_at (comp->timezones, i); existing_tzid = icaltimezone_get_tzid (zone); /* Find the length of the TZID without any trailing digits. */ existing_tzid_len = icalcomponent_get_tzid_prefix_len (existing_tzid); /* Check if we have the same prefix. */ if (tzid_len == existing_tzid_len && !strncmp (tzid, existing_tzid, tzid_len)) { /* Compare the VTIMEZONEs. */ if (icalcomponent_compare_vtimezones (icaltimezone_get_component (zone), vtimezone)) { /* The VTIMEZONEs match, so we can use the existing VTIMEZONE. But we have to rename TZIDs to this TZID. */ tzid_copy = strdup (tzid); if(!tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } existing_tzid_copy = strdup (existing_tzid); if (!existing_tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); free(tzid_copy); } else { icalarray_append (tzids_to_rename, tzid_copy); free(tzid_copy); icalarray_append (tzids_to_rename, existing_tzid_copy); } return; } else { /* FIXME: Handle possible NEWFAILED error. */ /* Convert the suffix to an integer and remember the maximum numeric suffix found. */ suffix = atoi (existing_tzid + existing_tzid_len); if (max_suffix < suffix) max_suffix = suffix; } } } /* We didn't find a VTIMEZONE that matched, so we have to rename the TZID, using the maximum numerical suffix found + 1. */ tzid_copy = strdup (tzid); if(!tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } snprintf (suffix_buf, sizeof(suffix_buf), "%i", max_suffix + 1); new_tzid = malloc (tzid_len + strlen (suffix_buf) + 1); if (!new_tzid) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); free(tzid_copy); return; } strncpy (new_tzid, tzid, tzid_len); strcpy (new_tzid + tzid_len, suffix_buf); icalarray_append (tzids_to_rename, tzid_copy); icalarray_append (tzids_to_rename, new_tzid); free(tzid_copy); free(new_tzid); } /* Returns the length of the TZID, without any trailing digits. */ static size_t icalcomponent_get_tzid_prefix_len (const char *tzid) { size_t len; const char *p; len = strlen (tzid); p = tzid + len - 1; while (len > 0 && *p >= '0' && *p <= '9') { p--; len--; } return len; } /** * Renames all references to the given TZIDs to a new name. rename_table * contains pairs of strings - a current TZID, and the new TZID to rename it * to. */ static void icalcomponent_rename_tzids(icalcomponent* comp, icalarray* rename_table) { icalcomponent_foreach_tzid (comp, icalcomponent_rename_tzids_callback, rename_table); } static void icalcomponent_rename_tzids_callback(icalparameter *param, void *data) { icalarray *rename_table = data; const char *tzid; int i; tzid = icalparameter_get_tzid (param); if (!tzid) return; /* Step through the rename table to see if the current TZID matches any of the ones we want to rename. */ for (i = 0; (unsigned int)i < rename_table->num_elements - 1; i += 2) { if (!strcmp (tzid, icalarray_element_at (rename_table, i))) { icalparameter_set_tzid (param, icalarray_element_at (rename_table, i + 1)); break; } } } /** * Calls the given function for each TZID parameter found in the component. */ void icalcomponent_foreach_tzid(icalcomponent* comp, void (*callback)(icalparameter *param, void *data), void *callback_data) { icalproperty *prop; icalproperty_kind kind; icalparameter *param; icalcomponent *subcomp; /* First look for any TZID parameters used in this component itself. */ prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); while (prop) { kind = icalproperty_isa (prop); /* These are the only properties that can have a TZID. Note that COMPLETED, CREATED, DTSTAMP & LASTMODIFIED must be in UTC. */ if (kind == ICAL_DTSTART_PROPERTY || kind == ICAL_DTEND_PROPERTY || kind == ICAL_DUE_PROPERTY || kind == ICAL_EXDATE_PROPERTY || kind == ICAL_RDATE_PROPERTY) { param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER); if (param) (*callback) (param, callback_data); } prop = icalcomponent_get_next_property (comp, ICAL_ANY_PROPERTY); } /* Now recursively check child components. */ subcomp = icalcomponent_get_first_component (comp, ICAL_ANY_COMPONENT); while (subcomp) { icalcomponent_foreach_tzid (subcomp, callback, callback_data); subcomp = icalcomponent_get_next_component (comp, ICAL_ANY_COMPONENT); } } /** * Returns the icaltimezone from the component corresponding to the given * TZID, or NULL if the component does not have a corresponding VTIMEZONE. */ icaltimezone* icalcomponent_get_timezone(icalcomponent* comp, const char *tzid) { icaltimezone *zone; int lower, upper, middle, cmp; const char *zone_tzid; if (!comp->timezones) return NULL; /* Sort the array if necessary (by the TZID string). */ if (!comp->timezones_sorted) { icalarray_sort (comp->timezones, icalcomponent_compare_timezone_fn); comp->timezones_sorted = 1; } /* Do a simple binary search. */ lower = middle = 0; upper = comp->timezones->num_elements; while (lower < upper) { middle = (lower + upper) >> 1; zone = icalarray_element_at (comp->timezones, middle); zone_tzid = icaltimezone_get_tzid (zone); if (zone_tzid != NULL) { cmp = strcmp (tzid, zone_tzid); if (cmp == 0) return zone; else if (cmp < 0) upper = middle; else lower = middle + 1; } } return NULL; } /** * A function to compare 2 icaltimezone elements, used for qsort(). */ static int icalcomponent_compare_timezone_fn (const void *elem1, const void *elem2) { icaltimezone *zone1, *zone2; const char *zone1_tzid, *zone2_tzid; zone1 = (icaltimezone*) elem1; zone2 = (icaltimezone*) elem2; zone1_tzid = icaltimezone_get_tzid (zone1); zone2_tzid = icaltimezone_get_tzid (zone2); return strcmp (zone1_tzid, zone2_tzid); } /** * Compares 2 VTIMEZONE components to see if they match, ignoring their TZIDs. * It returns 1 if they match, 0 if they don't, or -1 on error. */ static int icalcomponent_compare_vtimezones (icalcomponent *vtimezone1, icalcomponent *vtimezone2) { icalproperty *prop1, *prop2; const char *tzid1, *tzid2; char *tzid2_copy, *string1, *string2; int cmp; /* Get the TZID property of the first VTIMEZONE. */ prop1 = icalcomponent_get_first_property (vtimezone1, ICAL_TZID_PROPERTY); if (!prop1) return -1; tzid1 = icalproperty_get_tzid (prop1); if (!tzid1) return -1; /* Get the TZID property of the second VTIMEZONE. */ prop2 = icalcomponent_get_first_property (vtimezone2, ICAL_TZID_PROPERTY); if (!prop2) return -1; tzid2 = icalproperty_get_tzid (prop2); if (!tzid2) return -1; /* Copy the second TZID, and set the property to the same as the first TZID, since we don't care if these match of not. */ tzid2_copy = strdup (tzid2); if (!tzid2_copy) { icalerror_set_errno (ICAL_NEWFAILED_ERROR); return 0; } icalproperty_set_tzid (prop2, tzid1); /* Now convert both VTIMEZONEs to strings and compare them. */ string1 = icalcomponent_as_ical_string_r (vtimezone1); if (!string1) { free (tzid2_copy); return -1; } string2 = icalcomponent_as_ical_string_r (vtimezone2); if (!string2) { free (string1); free (tzid2_copy); return -1; } cmp = strcmp (string1, string2); free (string1); free (string2); /* Now reset the second TZID. */ icalproperty_set_tzid (prop2, tzid2_copy); free (tzid2_copy); return (cmp == 0) ? 1 : 0; } /** * @brief set the RELCALID property of a component. * * @param comp Valid calendar component. * @param v Relcalid URL value */ void icalcomponent_set_relcalid(icalcomponent* comp, const char* v) { ICALSETUPSET(ICAL_RELCALID_PROPERTY); if (prop == 0){ prop = icalproperty_new_relcalid(v); icalcomponent_add_property(inner, prop); } icalproperty_set_relcalid(prop,v); } /** * @brief get the RELCALID property of a component. * * @param comp Valid calendar component. */ const char* icalcomponent_get_relcalid(icalcomponent* comp){ icalcomponent *inner; icalproperty *prop; icalerror_check_arg_rz(comp!=0,"comp"); inner = icalcomponent_get_inner(comp); if(inner == 0){ return 0; } prop= icalcomponent_get_first_property(inner,ICAL_RELCALID_PROPERTY); if (prop == 0){ return 0; } return icalproperty_get_relcalid(prop); } /** @brief Return the time a TODO task is DUE. * * @param comp Valid calendar component. * * Uses the DUE: property if it exists, otherwise we calculate the DUE * value by adding the task's duration to the DTSTART time */ struct icaltimetype icalcomponent_get_due(icalcomponent* comp) { icalcomponent *inner = icalcomponent_get_inner(comp); icalproperty *due_prop = icalcomponent_get_first_property(inner,ICAL_DUE_PROPERTY); icalproperty *dur_prop = icalcomponent_get_first_property(inner, ICAL_DURATION_PROPERTY); if ( due_prop != 0) { return icalproperty_get_due(due_prop); } else if ( dur_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); struct icaldurationtype duration = icalproperty_get_duration(dur_prop); struct icaltimetype due = icaltime_add(start,duration); return due; } return icaltime_null_time(); } /** @brief Set the due date of a VTODO task. * * @param comp Valid VTODO component. * @param v Valid due date time. * * - If no duration or due properties then set the DUE property. * - If a DUE property is already set, then reset it to the value v. * - If a DURATION property is already set, then calculate the new * duration based on the supplied value of v. */ void icalcomponent_set_due(icalcomponent* comp, struct icaltimetype v) { icalcomponent *inner = icalcomponent_get_inner(comp); icalproperty *due_prop = icalcomponent_get_first_property(inner,ICAL_DUE_PROPERTY); icalproperty *dur_prop = icalcomponent_get_first_property(inner,ICAL_DURATION_PROPERTY); if( due_prop == 0 && dur_prop == 0){ due_prop = icalproperty_new_due(v); icalcomponent_add_property(inner,due_prop); } else if ( due_prop != 0) { icalproperty_set_due(due_prop,v); } else if ( dur_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); struct icaltimetype due = icalcomponent_get_due(inner); struct icaldurationtype dur = icaltime_subtract(due,start); icalproperty_set_duration(dur_prop,dur); } } libical-1.0/src/libical/icaltime.c0000664000076400007640000007435412132563132016067 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icaltime.c CREATOR: eric 02 June 2000 $Id: icaltime.c,v 1.71 2008-01-29 18:31:48 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icaltime.h" #include #include #include #include #include #include "astime.h" /* Julian data handling routines */ #include "icalerror.h" #include "icalmemory.h" #include "icaltimezone.h" #include "icalvalue.h" #ifdef WIN32 #include #endif #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif #ifdef WIN32 /* Undef the similar macro from pthread.h, it doesn't check if * gmtime() returns NULL. */ #undef gmtime_r /* The gmtime() in Microsoft's C library is MT-safe */ #define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0) #endif #ifdef HAVE_PTHREAD #include static pthread_mutex_t tzid_mutex = PTHREAD_MUTEX_INITIALIZER; #endif /* * Function to convert a struct tm time specification * to an ANSI time_t using the specified time zone. * This is different from the standard mktime() function * in that we don't want the automatic adjustments for * local daylight savings time applied to the result. * This function expects well-formed input. */ static time_t make_time(struct tm *tm, int tzm) { time_t tim; static int days[] = { -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364 }; /* check that year specification within range */ if (tm->tm_year < 70 || tm->tm_year > 138) return((time_t) -1); /* check that month specification within range */ if (tm->tm_mon < 0 || tm->tm_mon > 11) return((time_t) -1); /* check for upper bound of Jan 17, 2038 (to avoid possibility of 32-bit arithmetic overflow) */ if (tm->tm_year == 138) { if (tm->tm_mon > 0) return((time_t) -1); else if (tm->tm_mday > 17) return((time_t) -1); } /* * calculate elapsed days since start of the epoch (midnight Jan * 1st, 1970 UTC) 17 = number of leap years between 1900 and 1970 * (number of leap days to subtract) */ tim = (tm->tm_year - 70) * 365 + ((tm->tm_year - 1) / 4) - 17; /* add number of days elapsed in the current year */ tim += days[tm->tm_mon]; /* check and adjust for leap years (the leap year check only valid during the 32-bit era */ if ((tm->tm_year & 3) == 0 && tm->tm_mon > 1) tim += 1; /* elapsed days to current date */ tim += tm->tm_mday; /* calculate elapsed hours since start of the epoch */ tim = tim * 24 + tm->tm_hour; /* calculate elapsed minutes since start of the epoch */ tim = tim * 60 + tm->tm_min; /* adjust per time zone specification */ tim -= tzm; /* calculate elapsed seconds since start of the epoch */ tim = tim * 60 + tm->tm_sec; /* return number of seconds since start of the epoch */ return(tim); } /** @brief Constructor (deprecated). * * Convert seconds past UNIX epoch to a timetype. * * @deprecated This constructor is deprecated and shouldn't be used in * new software. Use icaltime_from_timet_with_zone(time_t, int, * icaltimezone *) instead. In the meantime, calls to this method * return a floating time, which can always be converted to a local * time with an appropriate call to icaltime_convert_to_zone(). */ struct icaltimetype icaltime_from_timet(const time_t tm, const int is_date) { #ifndef NO_WARN_DEPRECATED icalerror_warn("icaltime_from_timet() is DEPRECATED, use icaltime_from_timet_with_zone() instead"); #endif return icaltime_from_timet_with_zone(tm, is_date, 0); } /** @brief Constructor. * * @param tm The time * @param is_date Boolean: 1 means we should treat tm as a DATE * @param zone The timezone tm is in, NULL means to treat tm as a * floating time * * Return a new icaltime instance, initialized to the given time * expressed as seconds past UNIX epoch, optionally using the given * timezone. * * If the caller specifies the is_date param as TRUE, the returned * object is of DATE type, otherwise the input is meant to be of * DATE-TIME type. * If the zone is not specified (NULL zone param) the time is taken * to be floating, that is, valid in any timezone. Note that, in * addition to the uses specified in [RFC2445], this can be used * when doing simple math on couples of times. * If the zone is specified (UTC or otherwise), it's stored in the * object and it's used as the native timezone for this object. * This means that the caller can convert this time to a different * target timezone with no need to store the source timezone. * */ struct icaltimetype icaltime_from_timet_with_zone(const time_t tm, const int is_date, const icaltimezone *zone) { struct icaltimetype tt; struct tm t; icaltimezone *utc_zone; utc_zone = icaltimezone_get_utc_timezone (); /* Convert the time_t to a struct tm in UTC time. We can trust gmtime for this. */ #ifdef HAVE_PTHREAD gmtime_r (&tm, &t); #else t = *(gmtime (&tm)); #endif tt.year = t.tm_year + 1900; tt.month = t.tm_mon + 1; tt.day = t.tm_mday; tt.hour = t.tm_hour; tt.minute = t.tm_min; tt.second = t.tm_sec; tt.is_date = 0; tt.is_utc = (zone == utc_zone) ? 1 : 0; tt.is_daylight = 0; tt.zone = NULL; /* Use our timezone functions to convert to the required timezone. */ icaltimezone_convert_time (&tt, utc_zone, (icaltimezone *)zone); tt.is_date = is_date; /* If it is a DATE value, make sure hour, minute & second are 0. */ if (is_date) { tt.hour = 0; tt.minute = 0; tt.second = 0; } return tt; } /** @brief Convenience constructor. * * Returns the current time in the given timezone, as an icaltimetype. */ struct icaltimetype icaltime_current_time_with_zone(const icaltimezone *zone) { return icaltime_from_timet_with_zone (time (NULL), 0, zone); } /** @brief Convenience constructor. * * Returns the current day as an icaltimetype, with is_date set. */ struct icaltimetype icaltime_today(void) { return icaltime_from_timet_with_zone (time (NULL), 1, NULL); } /** @brief Return the time as seconds past the UNIX epoch * * While this function is not currently deprecated, it probably won't do * what you expect, unless you know what you're doing. In particular, you * should only pass an icaltime in UTC, since no conversion is done. Even * in that case, it's probably better to just use * icaltime_as_timet_with_zone(). */ time_t icaltime_as_timet(const struct icaltimetype tt) { struct tm stm; time_t t; /* If the time is the special null time, return 0. */ if (icaltime_is_null_time(tt)) { return 0; } /* Copy the icaltimetype to a struct tm. */ memset (&stm, 0, sizeof (struct tm)); if (icaltime_is_date(tt)) { stm.tm_sec = stm.tm_min = stm.tm_hour = 0; } else { stm.tm_sec = tt.second; stm.tm_min = tt.minute; stm.tm_hour = tt.hour; } stm.tm_mday = tt.day; stm.tm_mon = tt.month-1; stm.tm_year = tt.year-1900; stm.tm_isdst = -1; t = make_time(&stm, 0); return t; } /* Structure used by set_tz to hold an old value of TZ, and the new value, which is in memory we will have to free in unset_tz */ /* This will hold the last "TZ=XXX" string we used with putenv(). After we call putenv() again to set a new TZ string, we can free the previous one. As far as I know, no libc implementations actually free the memory used in the environment variables (how could they know if it is a static string or a malloc'ed string?), so we have to free it ourselves. */ static char* saved_tz = NULL; /* If you use set_tz(), you must call unset_tz() some time later to restore the original TZ. Pass unset_tz() the string that set_tz() returns. Call both the functions locking the tzid mutex as in icaltime_as_timet_with_zone */ char* set_tz(const char* tzid) { char *old_tz, *old_tz_copy = NULL, *new_tz; /* Get the old TZ setting and save a copy of it to return. */ old_tz = getenv("TZ"); if(old_tz){ old_tz_copy = (char*)malloc(strlen (old_tz) + 4); if(old_tz_copy == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } strcpy (old_tz_copy, "TZ="); strcpy (old_tz_copy + 3, old_tz); } /* Create the new TZ string. */ new_tz = (char*)malloc(strlen (tzid) + 4); if(new_tz == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); free(old_tz_copy); return 0; } strcpy (new_tz, "TZ="); strcpy (new_tz + 3, tzid); /* Add the new TZ to the environment. */ putenv(new_tz); /* Free any previous TZ environment string we have used in a synchronized manner. */ free (saved_tz); /* Save a pointer to the TZ string we just set, so we can free it later. */ saved_tz = new_tz; return old_tz_copy; /* This will be zero if the TZ env var was not set */ } void unset_tz(char *tzstr) { /* restore the original environment */ if(tzstr!=0){ putenv(tzstr); } else { /* Delete from environment. We prefer unsetenv(3) over putenv(3) because the former is POSIX and behaves consistently. The later does not unset the variable in some systems (like NetBSD), leaving it with an empty value. This causes problems later because further calls to time related functions in libc will treat times in UTC. */ #ifdef HAVE_UNSETENV unsetenv("TZ"); #else #ifdef _MSC_VER putenv("TZ="); // The equals is required to remove with MS Visual C++ #else putenv("TZ"); #endif #endif } /* Free any previous TZ environment string we have used in a synchronized manner */ free (saved_tz); /* Save a pointer to the TZ string we just set, so we can free it later. (This can possibly be NULL if there was no TZ to restore.) */ saved_tz = tzstr; } /** Return the time as seconds past the UNIX epoch, using the * given timezone. * * This convenience method combines a call to icaltime_convert_to_zone() * with a call to icaltime_as_timet(). * If the input timezone is null, no conversion is done; that is, the * time is simply returned as time_t in its native timezone. */ time_t icaltime_as_timet_with_zone(const struct icaltimetype tt, const icaltimezone *zone) { icaltimezone *utc_zone; struct tm stm; time_t t; char *old_tz; struct icaltimetype local_tt; utc_zone = icaltimezone_get_utc_timezone (); /* If the time is the special null time, return 0. */ if (icaltime_is_null_time(tt)) { return 0; } local_tt = tt; /* Clear the is_date flag, so we can convert the time. */ local_tt.is_date = 0; /* Use our timezone functions to convert to UTC. */ icaltimezone_convert_time (&local_tt, (icaltimezone *)zone, utc_zone); /* Copy the icaltimetype to a struct tm. */ memset (&stm, 0, sizeof (struct tm)); stm.tm_sec = local_tt.second; stm.tm_min = local_tt.minute; stm.tm_hour = local_tt.hour; stm.tm_mday = local_tt.day; stm.tm_mon = local_tt.month-1; stm.tm_year = local_tt.year-1900; stm.tm_isdst = -1; /* The functions putenv and mktime are not thread safe, inserting a lock to prevent any crashes */ #ifdef HAVE_PTHREAD pthread_mutex_lock (&tzid_mutex); #endif /* Set TZ to UTC and use mktime to convert to a time_t. */ old_tz = set_tz ("UTC"); tzset (); t = mktime (&stm); unset_tz (old_tz); tzset (); #ifdef HAVE_PTHREAD pthread_mutex_unlock (&tzid_mutex); #endif return t; } const char* icaltime_as_ical_string(const struct icaltimetype tt) { char *buf; buf = icaltime_as_ical_string_r(tt); icalmemory_add_tmp_buffer(buf); return buf; } /** * Return a string represention of the time, in RFC2445 format. The * string is owned by libical */ char* icaltime_as_ical_string_r(const struct icaltimetype tt) { size_t size = 17; char* buf = icalmemory_new_buffer(size); if(tt.is_date){ snprintf(buf, size,"%04d%02d%02d",tt.year,tt.month,tt.day); } else { const char* fmt; if(tt.is_utc){ fmt = "%04d%02d%02dT%02d%02d%02dZ"; } else { fmt = "%04d%02d%02dT%02d%02d%02d"; } snprintf(buf, size,fmt,tt.year,tt.month,tt.day, tt.hour,tt.minute,tt.second); } return buf; } /** * Reset all of the time components to be in their normal ranges. For * instance, given a time with minutes=70, the minutes will be reduces * to 10, and the hour incremented. This allows the caller to do * arithmetic on times without worrying about overflow or * underflow. * * Implementation note: we call icaltime_adjust() with no adjustment. */ struct icaltimetype icaltime_normalize(const struct icaltimetype tt) { struct icaltimetype ret = tt; icaltime_adjust(&ret, 0, 0, 0, 0); return ret; } /** @brief Contructor. * * Create a time from an ISO format string. * * @todo If the given string specifies a DATE-TIME not in UTC, there * is no way to know if this is a floating time or really refers to a * timezone. We should probably add a new constructor: * icaltime_from_string_with_zone() */ struct icaltimetype icaltime_from_string(const char* str) { struct icaltimetype tt = icaltime_null_time(); size_t size; icalerror_check_arg_re(str!=0,"str",icaltime_null_time()); size = strlen(str); if ((size == 15) || (size == 19)) { /* floating time with/without separators*/ tt.is_utc = 0; tt.is_date = 0; } else if ((size == 16) || (size == 20)) { /* UTC time, ends in 'Z'*/ if ((str[15] != 'Z') && (str[19] != 'Z')) goto FAIL; tt.is_utc = 1; tt.zone = icaltimezone_get_utc_timezone(); tt.is_date = 0; } else if ((size == 8) || (size == 10)) { /* A DATE */ tt.is_utc = 0; tt.is_date = 1; } else { /* error */ goto FAIL; } if (tt.is_date == 1){ if (size == 10) { char dsep1, dsep2; if (sscanf(str,"%04d%c%02d%c%02d",&tt.year,&dsep1,&tt.month,&dsep2,&tt.day) < 5) goto FAIL; if ((dsep1 != '-') || (dsep2 != '-')) goto FAIL; } else if (sscanf(str,"%04d%02d%02d",&tt.year,&tt.month,&tt.day) < 3) { goto FAIL; } } else { if (size > 16 ) { char dsep1, dsep2, tsep, tsep1, tsep2; if (sscanf(str,"%04d%c%02d%c%02d%c%02d%c%02d%c%02d",&tt.year,&dsep1,&tt.month,&dsep2, &tt.day,&tsep,&tt.hour,&tsep1,&tt.minute,&tsep2,&tt.second) < 11) goto FAIL; if((tsep != 'T') || (dsep1 != '-') || (dsep2 != '-') || (tsep1 != ':') || (tsep2 != ':')) goto FAIL; } else { char tsep; if (sscanf(str,"%04d%02d%02d%c%02d%02d%02d",&tt.year,&tt.month,&tt.day, &tsep,&tt.hour,&tt.minute,&tt.second) < 7) goto FAIL; if(tsep != 'T') goto FAIL; } } return tt; FAIL: icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return icaltime_null_time(); } /* Returns whether the specified year is a leap year. Year is the normal year, e.g. 2001. */ int icaltime_is_leap_year (const int year) { if (year <= 1752) return (year % 4 == 0); else return ( (year % 4==0) && (year % 100 !=0 )) || (year % 400 == 0); } int ycaltime_days_in_year (const int year) { if (icaltime_is_leap_year (year)) return 366; else return 365; } static int _days_in_month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int icaltime_days_in_month(const int month, const int year) { int days = _days_in_month[month]; /* The old code aborting if it was passed a parameter like BYMONTH=0 * Unfortunately it's not practical right now to pass an error all * the way up the stack, so instead of aborting we're going to apply * the GIGO principle and simply return '30 days' if we get an * invalid month. Modern applications cannot tolerate crashing. * assert(month > 0); * assert(month <= 12); */ if ((month < 1) || (month > 12)) { return 30; } if( month == 2){ days += icaltime_is_leap_year(year); } return days; } /* 1-> Sunday, 7->Saturday */ int icaltime_day_of_week(const struct icaltimetype t){ UTinstant jt; memset(&jt,0,sizeof(UTinstant)); jt.year = t.year; jt.month = t.month; jt.day = t.day; jt.i_hour = 0; jt.i_minute = 0; jt.i_second = 0; juldat(&jt); return jt.weekday + 1; } /** Day of the year that the first day of the week (Sunday) is on. */ int icaltime_start_doy_week(const struct icaltimetype t, int fdow){ UTinstant jt; int delta; memset(&jt,0,sizeof(UTinstant)); jt.year = t.year; jt.month = t.month; jt.day = t.day; jt.i_hour = 0; jt.i_minute = 0; jt.i_second = 0; juldat(&jt); caldat(&jt); delta = jt.weekday - (fdow - 1); if (delta < 0) delta += 7; return jt.day_of_year - delta; } /** Day of the year that the first day of the week (Sunday) is on. * * @deprecated Doesn't take into account different week start days. */ int icaltime_start_doy_of_week(const struct icaltimetype t){ #ifndef NO_WARN_DEPRECATED icalerror_warn("icaltime_start_doy_of_week() is DEPRECATED, use\ icaltime_start_doy_week() instead"); #endif return icaltime_start_doy_week(t, 1); } /** * @todo Doesn't take into account the start day of the * week. strftime assumes that weeks start on Monday. */ int icaltime_week_number(const struct icaltimetype ictt) { UTinstant jt; memset(&jt,0,sizeof(UTinstant)); jt.year = ictt.year; jt.month = ictt.month; jt.day = ictt.day; jt.i_hour = 0; jt.i_minute = 0; jt.i_second = 0; juldat(&jt); caldat(&jt); return (jt.day_of_year - jt.weekday) / 7; } /* The first array is for non-leap years, the second for leap years*/ static const int days_in_year_passed_month[2][13] = { /* jan feb mar apr may jun jul aug sep oct nov dec */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; /** * Returns the day of the year, counting from 1 (Jan 1st). */ int icaltime_day_of_year(const struct icaltimetype t){ int is_leap = icaltime_is_leap_year (t.year); return days_in_year_passed_month[is_leap][t.month - 1] + t.day; } /** @brief Contructor. * * Create a new time, given a day of year and a year. */ /* Jan 1 is day #1, not 0 */ struct icaltimetype icaltime_from_day_of_year(const int _doy, const int _year) { struct icaltimetype tt = icaltime_null_date(); int is_leap; int month; int doy = _doy; int year = _year; is_leap = icaltime_is_leap_year(year); /* Zero and neg numbers represent days of the previous year */ if(doy <1){ year--; is_leap = icaltime_is_leap_year(year); doy += days_in_year_passed_month[is_leap][12]; } else if(doy > days_in_year_passed_month[is_leap][12]){ /* Move on to the next year*/ is_leap = icaltime_is_leap_year(year); doy -= days_in_year_passed_month[is_leap][12]; year++; } tt.year = year; for (month = 11; month >= 0; month--) { if (doy > days_in_year_passed_month[is_leap][month]) { tt.month = month + 1; tt.day = doy - days_in_year_passed_month[is_leap][month]; break; } } return tt; } /** @brief Constructor. * * Return a null time, which indicates no time has been set. * This time represents the beginning of the epoch. */ struct icaltimetype icaltime_null_time(void) { struct icaltimetype t; memset(&t,0,sizeof(struct icaltimetype)); return t; } /** @brief Constructor. * * Return a null date, which indicates no time has been set. */ struct icaltimetype icaltime_null_date(void) { struct icaltimetype t; memset(&t,0,sizeof(struct icaltimetype)); t.is_date = 1; /* * Init to -1 to match what icalyacc.y used to do. * Does anything depend on this? */ t.hour = -1; t.minute = -1; t.second = -1; return t; } /** * Returns false if the time is clearly invalid, but is not null. This * is usually the result of creating a new time type buy not clearing * it, or setting one of the flags to an illegal value. */ int icaltime_is_valid_time(const struct icaltimetype t){ if(t.is_utc > 1 || t.is_utc < 0 || t.year < 0 || t.year > 3000 || t.is_date > 1 || t.is_date < 0){ return 0; } else { return 1; } } /** @brief Returns true if time is a DATE */ int icaltime_is_date(const struct icaltimetype t) { return t.is_date; } /** @brief Returns true if time is relative to UTC zone * * @todo We should only check the zone */ int icaltime_is_utc(const struct icaltimetype t) { return t.is_utc; } /** * Return true if the time is null. */ int icaltime_is_null_time(const struct icaltimetype t) { if (t.second +t.minute+t.hour+t.day+t.month+t.year == 0){ return 1; } return 0; } /** * Return -1, 0, or 1 to indicate that ab. * This calls icaltime_compare function after converting them to the utc * timezone. */ int icaltime_compare(const struct icaltimetype a_in, const struct icaltimetype b_in) { struct icaltimetype a, b; a = icaltime_convert_to_zone(a_in, icaltimezone_get_utc_timezone()); b = icaltime_convert_to_zone(b_in, icaltimezone_get_utc_timezone()); if (a.year > b.year) return 1; else if (a.year < b.year) return -1; else if (a.month > b.month) return 1; else if (a.month < b.month) return -1; else if (a.day > b.day) return 1; else if (a.day < b.day) return -1; /* if both are dates, we are done */ if (a.is_date && b.is_date) return 0; /* else, if only one is a date (and we already know the date part is equal), then the other is greater */ else if (b.is_date) return 1; else if (a.is_date) return -1; else if (a.hour > b.hour) return 1; else if (a.hour < b.hour) return -1; else if (a.minute > b.minute) return 1; else if (a.minute < b.minute) return -1; else if (a.second > b.second) return 1; else if (a.second < b.second) return -1; return 0; } /** * like icaltime_compare, but only use the date parts. */ int icaltime_compare_date_only(const struct icaltimetype a_in, const struct icaltimetype b_in) { struct icaltimetype a, b; icaltimezone *tz = icaltimezone_get_utc_timezone(); a = icaltime_convert_to_zone(a_in, tz); b = icaltime_convert_to_zone(b_in, tz); if (a.year > b.year) return 1; else if (a.year < b.year) return -1; if (a.month > b.month) return 1; else if (a.month < b.month) return -1; if (a.day > b.day) return 1; else if (a.day < b.day) return -1; return 0; } /** * like icaltime_compare, but only use the date parts; accepts timezone. */ int icaltime_compare_date_only_tz(const struct icaltimetype a_in, const struct icaltimetype b_in, icaltimezone *tz) { struct icaltimetype a, b; a = icaltime_convert_to_zone(a_in, tz); b = icaltime_convert_to_zone(b_in, tz); if (a.year > b.year) return 1; else if (a.year < b.year) return -1; if (a.month > b.month) return 1; else if (a.month < b.month) return -1; if (a.day > b.day) return 1; else if (a.day < b.day) return -1; return 0; } /* These are defined in icalduration.c: struct icaltimetype icaltime_add(struct icaltimetype t, struct icaldurationtype d) struct icaldurationtype icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2) */ /** @brief Internal, shouldn't be part of the public API * * Adds (or subtracts) a time from a icaltimetype. * NOTE: This function is exactly the same as icaltimezone_adjust_change() * except for the type of the first parameter. */ void icaltime_adjust(struct icaltimetype *tt, const int days, const int hours, const int minutes, const int seconds) { int second, minute, hour, day; int minutes_overflow, hours_overflow, days_overflow = 0, years_overflow; int days_in_month; /* If we are passed a date make sure to ignore hour minute and second */ if (tt->is_date) goto IS_DATE; /* Add on the seconds. */ second = tt->second + seconds; tt->second = second % 60; minutes_overflow = second / 60; if (tt->second < 0) { tt->second += 60; minutes_overflow--; } /* Add on the minutes. */ minute = tt->minute + minutes + minutes_overflow; tt->minute = minute % 60; hours_overflow = minute / 60; if (tt->minute < 0) { tt->minute += 60; hours_overflow--; } /* Add on the hours. */ hour = tt->hour + hours + hours_overflow; tt->hour = hour % 24; days_overflow = hour / 24; if (tt->hour < 0) { tt->hour += 24; days_overflow--; } IS_DATE: /* Normalize the month. We do this before handling the day since we may need to know what month it is to get the number of days in it. Note that months are 1 to 12, so we have to be a bit careful. */ if (tt->month >= 13) { years_overflow = (tt->month - 1) / 12; tt->year += years_overflow; tt->month -= years_overflow * 12; } else if (tt->month <= 0) { /* 0 to -11 is -1 year out, -12 to -23 is -2 years. */ years_overflow = (tt->month / 12) - 1; tt->year += years_overflow; tt->month -= years_overflow * 12; } /* Add on the days. */ day = tt->day + days + days_overflow; if (day > 0) { for (;;) { days_in_month = icaltime_days_in_month (tt->month, tt->year); if (day <= days_in_month) break; tt->month++; if (tt->month >= 13) { tt->year++; tt->month = 1; } day -= days_in_month; } } else { while (day <= 0) { if (tt->month == 1) { tt->year--; tt->month = 12; } else { tt->month--; } day += icaltime_days_in_month (tt->month, tt->year); } } tt->day = day; } /** @brief Convert time to a given timezone * * Convert a time from its native timezone to a given timezone. * * If tt is a date, the returned time is an exact * copy of the input. If it's a floating time, the returned object * represents the same time translated to the given timezone. * Otherwise the time will be converted to the new * time zone, and its native timezone set to the right timezone. */ struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt, icaltimezone *zone) { struct icaltimetype ret = tt; /* If it's a date do nothing */ if (tt.is_date) { return ret; } if (tt.zone == zone) { return ret; } /* If it's a floating time we don't want to adjust the time */ if (tt.zone != NULL) { icaltimezone_convert_time(&ret, (icaltimezone *)tt.zone, zone); } ret.zone = zone; if (zone == icaltimezone_get_utc_timezone()) { ret.is_utc = 1; } else { ret.is_utc = 0; } return ret; } const icaltimezone * icaltime_get_timezone(const struct icaltimetype t) { return t.zone; } const char * icaltime_get_tzid(const struct icaltimetype t) { if (t.zone != NULL) { return icaltimezone_get_tzid((icaltimezone *)t.zone); } else { return NULL; } } /** @brief Set the timezone * * Force the icaltime to be interpreted relative to another timezone. * If you need to do timezone conversion, applying offset adjustments, * then you should use icaltime_convert_to_timezone instead. */ struct icaltimetype icaltime_set_timezone(struct icaltimetype *t, const icaltimezone *zone) { /* If it's a date do nothing */ if (t->is_date) { return *t; } if (t->zone == zone) { return *t; } t->zone = zone; if (zone == icaltimezone_get_utc_timezone()) { t->is_utc = 1; } else { t->is_utc = 0; } return *t; } /** * @brief builds an icaltimespan given a start time, end time and busy value. * * @param dtstart The beginning time of the span, can be a date-time * or just a date. * @param dtend The end time of the span. * @param is_busy A boolean value, 0/1. * @return A span using the supplied values. * * returned span contains times specified in UTC. */ icaltime_span icaltime_span_new(struct icaltimetype dtstart, struct icaltimetype dtend, int is_busy) { icaltime_span span; span.is_busy = is_busy; span.start = icaltime_as_timet_with_zone(dtstart, dtstart.zone ? dtstart.zone : icaltimezone_get_utc_timezone()); if (icaltime_is_null_time(dtend)) { if (!icaltime_is_date(dtstart)) { /* If dtstart is a DATE-TIME and there is no DTEND nor DURATION it takes no time */ span.end = span.start; return span; } else { dtend = dtstart; } } span.end = icaltime_as_timet_with_zone(dtend, dtend.zone ? dtend.zone : icaltimezone_get_utc_timezone()); if (icaltime_is_date(dtstart)) { /* no time specified, go until the end of the day..*/ span.end += 60*60*24 - 1; } return span; } /** @brief Returns true if the two spans overlap * * @param s1 1st span to test * @param s2 2nd span to test * @return boolean value * * The result is calculated by testing if the start time of s1 is contained * by the s2 span, or if the end time of s1 is contained by the s2 span. * * Also returns true if the spans are equal. * * Note, this will return false if the spans are adjacent. */ int icaltime_span_overlaps(icaltime_span *s1, icaltime_span *s2) { /* s1->start in s2 */ if (s1->start > s2->start && s1->start < s2->end) return 1; /* s1->end in s2 */ if (s1->end > s2->start && s1->end < s2->end) return 1; /* s2->start in s1 */ if (s2->start > s1->start && s2->start < s1->end) return 1; /* s2->end in s1 */ if (s2->end > s1->start && s2->end < s1->end) return 1; if (s1->start == s2->start && s1->end == s2->end) return 1; return 0; } /** @brief Returns true if the span is totally within the containing * span * * @param s The span to test for. * @param container The span to test against. * @return boolean value. * */ int icaltime_span_contains(icaltime_span *s, icaltime_span *container) { if ((s->start >= container->start && s->start < container->end) && (s->end <= container->end && s->end > container->start)) return 1; return 0; } libical-1.0/src/libical/icalmemory.c0000664000076400007640000001731412132563130016430 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalmemory.c CREATOR: eric 30 June 1999 $Id: icalmemory.c,v 1.12 2008-02-03 16:10:46 dothebart Exp $ $Locker: $ The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is icalmemory.h ======================================================================*/ /** * @file icalmemory.c * @brief Common memory management routines. * * libical often passes strings back to the caller. To make these * interfaces simple, I did not want the caller to have to pass in a * memory buffer, but having libical pass out newly allocated memory * makes it difficult to de-allocate the memory. * * The ring buffer in this scheme makes it possible for libical to pass * out references to memory which the caller does not own, and be able * to de-allocate the memory later. The ring allows libical to have * several buffers active simultaneously, which is handy when creating * string representations of components. */ #define ICALMEMORY_C #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef DMALLOC #include "dmalloc.h" #endif #include "icalmemory.h" #include "icalerror.h" #include /* for printf (debugging) */ #include /* for malloc, realloc */ #include /* for memset(), strdup */ #ifdef WIN32 #include #endif #define BUFFER_RING_SIZE 2500 #define MIN_BUFFER_SIZE 200 /* HACK. Not threadsafe */ typedef struct { int pos; void *ring[BUFFER_RING_SIZE]; } buffer_ring; void icalmemory_free_tmp_buffer (void* buf); void icalmemory_free_ring_byval(buffer_ring *br); #ifndef HAVE_PTHREAD static buffer_ring* global_buffer_ring = 0; #endif #ifdef HAVE_PTHREAD #include static pthread_key_t ring_key; static pthread_once_t ring_key_once = PTHREAD_ONCE_INIT; static void ring_destroy(void * buf) { if (buf) icalmemory_free_ring_byval((buffer_ring *) buf); pthread_setspecific(ring_key, NULL); } static void ring_key_alloc(void) { pthread_key_create(&ring_key, ring_destroy); } #endif static buffer_ring * buffer_ring_new(void) { buffer_ring *br; int i; br = (buffer_ring *)malloc(sizeof(buffer_ring)); for(i=0; iring[i] = 0; } br->pos = 0; return(br); } #ifdef HAVE_PTHREAD static buffer_ring* get_buffer_ring_pthread(void) { buffer_ring *br; pthread_once(&ring_key_once, ring_key_alloc); br = pthread_getspecific(ring_key); if (!br) { br = buffer_ring_new(); pthread_setspecific(ring_key, br); } return(br); } #else /* get buffer ring via a single global for a non-threaded program */ static buffer_ring* get_buffer_ring_global(void) { if (global_buffer_ring == 0) { global_buffer_ring = buffer_ring_new(); } return(global_buffer_ring); } #endif static buffer_ring *get_buffer_ring(void) { #ifdef HAVE_PTHREAD return(get_buffer_ring_pthread()); #else return get_buffer_ring_global(); #endif } /** Add an existing buffer to the buffer ring */ void icalmemory_add_tmp_buffer(void* buf) { buffer_ring *br = get_buffer_ring(); /* Wrap around the ring */ if(++(br->pos) == BUFFER_RING_SIZE){ br->pos = 0; } /* Free buffers as their slots are overwritten */ if ( br->ring[br->pos] != 0){ free( br->ring[br->pos]); } /* Assign the buffer to a slot */ br->ring[br->pos] = buf; } /** * Create a new temporary buffer on the ring. Libical owns these and * will deallocate them. */ void* icalmemory_tmp_buffer (size_t size) { char *buf; if (size < MIN_BUFFER_SIZE){ size = MIN_BUFFER_SIZE; } buf = (void*)malloc(size); if( buf == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } memset(buf,0,size); icalmemory_add_tmp_buffer(buf); return buf; } /** get rid of this buffer ring */ void icalmemory_free_ring_byval(buffer_ring *br) { int i; for(i=0; iring[i] != 0){ free( br->ring[i]); } } free(br); } void icalmemory_free_ring() { buffer_ring *br; br = get_buffer_ring(); icalmemory_free_ring_byval(br); #ifdef HAVE_PTHREAD pthread_setspecific(ring_key, 0); #else global_buffer_ring = 0; #endif } /** Like strdup, but the buffer is on the ring. */ char* icalmemory_tmp_copy(const char* str) { char* b = icalmemory_tmp_buffer(strlen(str)+1); strcpy(b,str); return b; } char* icalmemory_strdup(const char *s) { return strdup(s); } void icalmemory_free_tmp_buffer (void* buf) { if(buf == 0) { return; } free(buf); } /* * These buffer routines create memory the old fashioned way -- so the * caller will have to deallocate the new memory */ void* icalmemory_new_buffer(size_t size) { void *b = malloc(size); if( b == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } memset(b,0,size); return b; } void* icalmemory_resize_buffer(void* buf, size_t size) { void *b = realloc(buf, size); if( b == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } return b; } void icalmemory_free_buffer(void* buf) { free(buf); } void icalmemory_append_string(char** buf, char** pos, size_t* buf_size, const char* string) { char *new_buf; char *new_pos; size_t data_length, final_length, string_length; #ifndef ICAL_NO_INTERNAL_DEBUG icalerror_check_arg_rv( (buf!=0),"buf"); icalerror_check_arg_rv( (*buf!=0),"*buf"); icalerror_check_arg_rv( (pos!=0),"pos"); icalerror_check_arg_rv( (*pos!=0),"*pos"); icalerror_check_arg_rv( (buf_size!=0),"buf_size"); icalerror_check_arg_rv( (*buf_size!=0),"*buf_size"); icalerror_check_arg_rv( (string!=0),"string"); #endif string_length = strlen(string); data_length = (size_t)*pos - (size_t)*buf; final_length = data_length + string_length; if ( final_length >= (size_t) *buf_size) { *buf_size = (*buf_size) * 2 + final_length; new_buf = realloc(*buf,*buf_size); new_pos = (void*)((size_t)new_buf + data_length); *pos = new_pos; *buf = new_buf; } strcpy(*pos, string); *pos += string_length; } void icalmemory_append_char(char** buf, char** pos, size_t* buf_size, char ch) { char *new_buf; char *new_pos; size_t data_length, final_length; #ifndef ICAL_NO_INTERNAL_DEBUG icalerror_check_arg_rv( (buf!=0),"buf"); icalerror_check_arg_rv( (*buf!=0),"*buf"); icalerror_check_arg_rv( (pos!=0),"pos"); icalerror_check_arg_rv( (*pos!=0),"*pos"); icalerror_check_arg_rv( (buf_size!=0),"buf_size"); icalerror_check_arg_rv( (*buf_size!=0),"*buf_size"); #endif data_length = (size_t)*pos - (size_t)*buf; final_length = data_length + 2; if ( final_length > (size_t) *buf_size ) { *buf_size = (*buf_size) * 2 + final_length +1; new_buf = realloc(*buf,*buf_size); new_pos = (void*)((size_t)new_buf + data_length); *pos = new_pos; *buf = new_buf; } **pos = ch; *pos += 1; **pos = 0; } libical-1.0/src/libical/icalmime.h0000664000076400007640000000213012132563132016044 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalmime.h CREATOR: eric 26 July 2000 $Id: icalmime.h,v 1.3 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALMIME_H #define ICALMIME_H #include "icalcomponent.h" #include "icalparser.h" icalcomponent* icalmime_parse( char* (*line_gen_func)(char *s, size_t size, void *d), void *data); /* The inverse of icalmime_parse, not implemented yet. Use sspm.h directly. */ char* icalmime_as_mime_string(char* component); #endif /* !ICALMIME_H */ libical-1.0/src/libical/vcomponent.cpp0000664000076400007640000005641412132563132017025 0ustar allenallen/** * @file vcomponent.cpp * @author fnguyen (12/10/01) * @brief Implemenation of C++ Wrapper for icalcomponent.c * * (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ #ifndef VCOMPONENT_H #include "vcomponent.h" #endif #ifndef ICALVALUE_CXX_H #include "icalvalue_cxx.h" #endif #ifndef ICALPROPERTY_CXX_H #include "icalproperty_cxx.h" #endif #ifndef ICALPARAMETER_CXX_H #include "icalparameter_cxx.h" #endif #include #include #include VComponent::VComponent() throw(icalerrorenum) : imp(icalcomponent_new(ICAL_ANY_COMPONENT)) { } VComponent::VComponent(const VComponent& v) throw(icalerrorenum) { imp = icalcomponent_new_clone(v.imp); if (!imp) throw icalerrno; } VComponent& VComponent::operator=(const VComponent& v) throw(icalerrorenum) { if (this == &v) return *this; if (imp != NULL) { icalcomponent_free(imp); imp = icalcomponent_new_clone(v.imp); if (!imp) throw icalerrno; } return *this; } VComponent::~VComponent(){ if (imp) icalcomponent_free(imp); } VComponent::VComponent(icalcomponent* v) throw (icalerrorenum) : imp(v){ } /* char* returned is in the ring buffer. caller doesn't have to free it */ char* VComponent::quote_ical_string(char *str){ const char* p; size_t buf_sz; buf_sz = strlen(str) * 2; /* assume worse case scenarios. otherwise, we have to parse the string and count \ */ char* out = (char*)icalmemory_new_buffer(buf_sz); /* memory is from the ring buffer */ char* pout; if (out == 0){ return 0; } pout = out; for (p = str; *p!=0; p++){ if( *p == '\\'){ *pout++ = '\\'; } *pout++ = *p; } *pout++ = '\0'; return out; } /** * @brief Constructor * * Create a new VComponent from a string. * * @exception ICAL_MALFORMEDDATA_ERROR * Catch this error if you * */ VComponent::VComponent(string str) throw (icalerrorenum) { // Fix for BUG #15647, but breaks fix for BUG #15596. Attempting a UI fix for cal-4.0. //char* quoted_str = quote_ical_string((char *)str); //imp = icalcomponent_new_from_string(quoted_str); imp = icalcomponent_new_from_string(str); if (!imp) throw icalerrno; } VComponent::VComponent(icalcomponent_kind kind) throw(icalerrorenum) { imp = icalcomponent_new(kind); if (!imp) throw icalerrno; } string VComponent::as_ical_string() throw(icalerrorenum) { char *str = icalcomponent_as_ical_string(imp); if (!str) throw icalerrno; return(str); } bool VComponent::is_valid(){ if (imp == NULL) return false; return (icalcomponent_is_valid(imp) ? true : false); } icalcomponent_kind VComponent::isa(){ return icalcomponent_isa(imp); } int VComponent::isa_component(void* component){ return icalcomponent_isa_component(component); } void VComponent::new_from_string(string str){ if (imp != NULL) icalcomponent_free(imp); imp = icalcomponent_new_from_string(str); } /* Working with properties */ void VComponent::add_property(ICalProperty* property){ icalcomponent_add_property(imp, *property); } void VComponent::remove_property(ICalProperty* property){ icalcomponent_remove_property(imp, *property); icalproperty_free(*property); property->detach(); // set imp to null, it's free already. } int VComponent::count_properties(icalproperty_kind kind){ return icalcomponent_count_properties(imp, kind); } /* Iterate through the properties */ ICalProperty* VComponent::get_current_property(){ icalproperty* t = icalcomponent_get_current_property(imp); return ((t != NULL) ? new ICalProperty(t) : NULL); } ICalProperty* VComponent::get_first_property(icalproperty_kind kind){ icalproperty* t = icalcomponent_get_first_property(imp, kind); return ((t != NULL) ? new ICalProperty(t) : NULL); } ICalProperty* VComponent::get_next_property(icalproperty_kind kind){ icalproperty* t = icalcomponent_get_next_property(imp, kind); return ((t != NULL) ? new ICalProperty(t) : NULL); } /* Working with components */ /* Return the first VEVENT, VTODO or VJOURNAL sub-component if it is one of those types */ VComponent* VComponent::get_inner(){ return new VComponent(icalcomponent_get_inner(imp)); } void VComponent::add_component(VComponent* child){ icalcomponent_add_component(imp, *child); } void VComponent::remove_component(VComponent* child){ icalcomponent_remove_component(imp, *child); } int VComponent::count_components(icalcomponent_kind kind){ return icalcomponent_count_components(imp, kind); } /* Iteration Routines. There are two forms of iterators, internal and external. The internal ones came first, and are almost completely sufficient, but they fail badly when you want to construct a loop that removes components from the container. */ /* Iterate through components */ VComponent* VComponent::get_current_component(){ icalcomponent* t = icalcomponent_get_current_component(imp); return ((t != NULL) ? new VComponent(t) : NULL); } VComponent* VComponent::get_first_component(icalcomponent_kind kind){ VComponent* result = NULL; icalcomponent* t = icalcomponent_get_first_component(imp, kind); if (t != NULL) { switch (kind) { case ICAL_VALARM_COMPONENT: result = new VAlarm(t); break; case ICAL_VCALENDAR_COMPONENT: result = new VCalendar(t); break; case ICAL_VEVENT_COMPONENT: result = new VEvent(t); break; case ICAL_VQUERY_COMPONENT: result = new VQuery(t); break; case ICAL_VTODO_COMPONENT: result = new VToDo(t); break; case ICAL_VAGENDA_COMPONENT: result = new VAgenda(t); break; default: result = new VComponent(t); } } return (result); } VComponent* VComponent::get_next_component(icalcomponent_kind kind){ VComponent* result = NULL; icalcomponent* t = icalcomponent_get_next_component(imp, kind); if (t != NULL) { switch (kind) { case ICAL_VALARM_COMPONENT: result = new VAlarm(t); break; case ICAL_VCALENDAR_COMPONENT: result = new VCalendar(t); break; case ICAL_VEVENT_COMPONENT: result = new VEvent(t); break; case ICAL_VQUERY_COMPONENT: result = new VQuery(t); break; case ICAL_VTODO_COMPONENT: result = new VToDo(t); break; case ICAL_VAGENDA_COMPONENT: result = new VAgenda(t); break; default: result = new VComponent(t); } } return (result); } /* Using external iterators */ icalcompiter VComponent::begin_component(icalcomponent_kind kind){ return icalcomponent_begin_component(imp, kind); } icalcompiter VComponent::end_component(icalcomponent_kind kind){ return icalcomponent_end_component(imp, kind); } VComponent* VComponent::next(icalcompiter* i){ return (VComponent*)icalcompiter_next(i); } VComponent* VComponent::prev(icalcompiter* i){ return (VComponent*)icalcompiter_prior(i); } VComponent* VComponent::current(icalcompiter* i){ return (VComponent*)icalcompiter_deref(i); } /* Working with embedded error properties */ int VComponent::count_errors(){ return icalcomponent_count_errors(imp); } /* Remove all X-LIC-ERROR properties*/ void VComponent::strip_errors(){ icalcomponent_strip_errors(imp); } /* Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/ void VComponent::convert_errors(){ icalcomponent_convert_errors(imp); } /* Kind conversion routines */ icalcomponent_kind VComponent::string_to_kind(string str){ return icalcomponent_string_to_kind(str); } string VComponent::kind_to_string(icalcomponent_kind kind){ return (string)icalcomponent_kind_to_string(kind); } struct icaltimetype VComponent::get_dtstart(){ return icalcomponent_get_dtstart(imp); } void VComponent::set_dtstart(struct icaltimetype v){ icalcomponent_set_dtstart(imp, v); } /* For the icalcomponent routines only, dtend and duration are tied together. If you call the set routine for one and the other exists, the routine will calculate the change to the other. That is, if there is a DTEND and you call set_duration, the routine will modify DTEND to be the sum of DTSTART and the duration. If you call a get routine for one and the other exists, the routine will calculate the return value. If you call a set routine and neither exists, the routine will create the apcompriate comperty. */ struct icaltimetype VComponent::get_dtend(){ return icalcomponent_get_dtend(imp); } void VComponent::set_dtend(struct icaltimetype v){ icalcomponent_set_dtend(imp, v); } struct icaltimetype VComponent::get_due(){ return icalcomponent_get_due(imp); } void VComponent::set_due(struct icaltimetype v){ icalcomponent_set_due(imp, v); } struct icaldurationtype VComponent::get_duration(){ return icalcomponent_get_duration(imp); } void VComponent::set_duration(struct icaldurationtype v){ icalcomponent_set_duration(imp, v); } icalproperty_method VComponent::get_method(){ return icalcomponent_get_method(imp); } void VComponent::set_method(icalproperty_method method){ icalcomponent_set_method(imp, method); } struct icaltimetype VComponent::get_dtstamp(){ return icalcomponent_get_dtstamp(imp); } void VComponent::set_dtstamp(struct icaltimetype v){ icalcomponent_set_dtstamp(imp, v); } string VComponent::get_summary(){ return (string)icalcomponent_get_summary(imp); } void VComponent::set_summary(string v){ icalcomponent_set_summary(imp, v); } string VComponent::get_location(){ return (string)icalcomponent_get_location(imp); } void VComponent::set_location(string v){ icalcomponent_set_location(imp, v); } string VComponent::get_description(){ return (string)icalcomponent_get_description(imp); } void VComponent::set_description(string v){ icalcomponent_set_description(imp, v); } string VComponent::get_comment(){ return (string)icalcomponent_get_comment(imp); } void VComponent::set_comment(string v){ icalcomponent_set_comment(imp, v); } string VComponent::get_uid(){ return (string)icalcomponent_get_uid(imp); } void VComponent::set_uid(string v){ icalcomponent_set_uid(imp, v); } string VComponent::get_relcalid(){ return (string)icalcomponent_get_relcalid(imp); } void VComponent::set_relcalid(string v){ icalcomponent_set_relcalid(imp, v); } struct icaltimetype VComponent::get_recurrenceid(){ return icalcomponent_get_recurrenceid(imp); } void VComponent::set_recurrenceid(struct icaltimetype v){ icalcomponent_set_recurrenceid(imp, v); } int VComponent::get_sequence(){ return (int)icalcomponent_get_sequence(imp); } void VComponent::set_sequence(int v){ icalcomponent_set_sequence(imp, v); } int VComponent::get_status(){ return (int)icalcomponent_get_status(imp); } void VComponent::set_status(enum icalproperty_status v){ icalcomponent_set_status(imp, v); } /* For VCOMPONENT: Return a reference to the first VEVENT, VTODO, or VJOURNAL */ VComponent* VComponent::get_first_real_component(){ return (VComponent*)icalcomponent_get_first_real_component(imp); } /* For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the start and end times of an event in UTC */ struct icaltime_span VComponent::get_span(){ return icalcomponent_get_span(imp); } int VComponent::recurrence_is_excluded( struct icaltimetype *dtstart, struct icaltimetype *recurtime){ return icalproperty_recurrence_is_excluded(imp, dtstart, recurtime); } /* Internal operations. They are private, and you should not be using them. */ VComponent* VComponent::get_parent() { return new VComponent(icalcomponent_get_parent(imp)); } void VComponent::set_parent(VComponent *parent){ icalcomponent_set_parent(imp, *parent); } /* ignoreValue means remove properties even if the data doesn't match */ bool VComponent::remove(VComponent& fromVC, bool ignoreValue){ /* the two components must be the same kind */ if (this->isa() != fromVC.isa()) return false; /* properties first */ ICalPropertyTmpPtr propToBeRemoved; for (propToBeRemoved=fromVC.get_first_property(ICAL_ANY_PROPERTY); propToBeRemoved != NULL; propToBeRemoved=fromVC.get_next_property(ICAL_ANY_PROPERTY)) { /* loop through properties from this component */ ICalPropertyTmpPtr next; ICalPropertyTmpPtr p; for (p=this->get_first_property(propToBeRemoved->isa()); p != NULL; p=next) { next = this->get_next_property(propToBeRemoved->isa()); if (ignoreValue) this->remove_property(p); else { if (*p == *propToBeRemoved) { this->remove_property(p); break; } } } } /* components next - should remove by UID */ VComponentTmpPtr comp; for (comp=fromVC.get_first_component(ICAL_ANY_COMPONENT); comp != NULL; comp=fromVC.get_next_component(ICAL_ANY_COMPONENT)) { const char* fromCompUid = comp->get_uid(); VComponentTmpPtr c; for (c=this->get_first_component(comp->isa()); c != NULL; c=this->get_next_component(comp->isa())) { const char* thisCompUid = c->get_uid(); if (strcmp(fromCompUid, thisCompUid) == 0) { // recursively go down the components c->remove(*comp, ignoreValue); // if all properties are removed and there is no sub-components, then // remove this compoent if ((c->count_properties(ICAL_ANY_PROPERTY) == 0) && (c->count_components(ICAL_ANY_COMPONENT) == 0)) { this->remove_component(c); } break; } } } return true; } /* removeMissing == true: remove properties that are missing from fromC */ /* todo: only change the first occurence of the property */ /* todo: removeMissing is not implemented */ bool VComponent::update(VComponent& fromC, bool removeMissing){ /* make sure they are the same kind */ if (this->isa() != fromC.isa()) return false; /* property first */ ICalPropertyTmpPtr prop; for (prop=fromC.get_first_property(ICAL_ANY_PROPERTY); prop != NULL; prop=fromC.get_next_property(ICAL_ANY_PROPERTY)) { ICalPropertyTmpPtr thisProp; thisProp = this->get_first_property(prop->isa()); if (thisProp == NULL) { thisProp = new ICalProperty(prop->isa()); this->add_property(thisProp); } ICalValue *value = new ICalValue(*(prop->get_value())); // clone the value thisProp->set_value(*value); } /* recursively updating sub-components */ VComponentTmpPtr comp; for (comp=fromC.get_first_component(ICAL_ANY_COMPONENT); comp != NULL; comp=fromC.get_next_component(ICAL_ANY_COMPONENT)) { VComponentTmpPtr thisComp; thisComp = this->get_first_component(comp->isa()); if (thisComp == NULL) { thisComp = new VComponent(comp->isa()); this->add_component(thisComp); } bool err = thisComp->update(*comp, removeMissing); if (!err) return false; } return true; } /* add components and property. recursively goes down child components */ bool VComponent::add(VComponent& fromC){ /* make sure the kind are the same */ if (this->isa() != fromC.isa()) return false; /* properties first */ ICalPropertyTmpPtr prop; for (prop=fromC.get_first_property(ICAL_ANY_PROPERTY); prop != NULL; prop=fromC.get_next_property(ICAL_ANY_PROPERTY)) { /* clone another property */ ICalProperty *p = new ICalProperty(*prop); add_property(p); } /* sub-components next */ bool err = false; VComponentTmpPtr comp; for (comp=fromC.get_first_component(ICAL_ANY_COMPONENT); comp != NULL; comp=fromC.get_next_component(ICAL_ANY_COMPONENT)) { VComponent *c = new VComponent(comp->isa()); err = c->add(*comp); add_component(c); } return true; } VCalendar::VCalendar() : VComponent(icalcomponent_new_vcalendar()){ } VCalendar::VCalendar(const VCalendar& v) : VComponent(v) {} VCalendar& VCalendar::operator=(const VCalendar& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VCalendar::~VCalendar(){} VCalendar::VCalendar(icalcomponent* v) : VComponent(v){} VCalendar::VCalendar(string str) : VComponent(str){} /* VEvent */ VEvent::VEvent() : VComponent(icalcomponent_new_vevent()){} VEvent::VEvent(const VEvent& v) : VComponent(v) {} VEvent& VEvent::operator=(const VEvent& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VEvent::~VEvent(){} VEvent::VEvent(icalcomponent* v) : VComponent(v){} VEvent::VEvent(string str) : VComponent(str){} /* VTodo */ VToDo::VToDo() : VComponent(icalcomponent_new_vtodo()){} VToDo::VToDo(const VToDo& v) : VComponent(v) {} VToDo& VToDo::operator=(const VToDo& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VToDo::~VToDo(){} VToDo::VToDo(icalcomponent* v) : VComponent(v){} VToDo::VToDo(string str) : VComponent(str){} /* VAgenda */ VAgenda::VAgenda() : VComponent(icalcomponent_new_vagenda()){} VAgenda::VAgenda(const VAgenda& v) : VComponent(v) {} VAgenda& VAgenda::operator=(const VAgenda& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VAgenda::~VAgenda(){} VAgenda::VAgenda(icalcomponent* v) : VComponent(v){} VAgenda::VAgenda(string str) : VComponent(str){} /* VQuery */ VQuery::VQuery() : VComponent(icalcomponent_new_vquery()){} VQuery::VQuery(const VQuery& v) : VComponent(v) {} VQuery& VQuery::operator=(const VQuery& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VQuery::~VQuery(){} VQuery::VQuery(icalcomponent* v) : VComponent(v){} VQuery::VQuery(string str) : VComponent(str){} /* VJournal */ VJournal::VJournal() : VComponent(icalcomponent_new_vjournal()){} VJournal::VJournal(const VJournal& v) : VComponent(v) {} VJournal& VJournal::operator=(const VJournal& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VJournal::~VJournal(){} VJournal::VJournal(icalcomponent* v) : VComponent(v){} VJournal::VJournal(string str) : VComponent(str){} /* VAlarm */ VAlarm::VAlarm() : VComponent(icalcomponent_new_valarm()){} VAlarm::VAlarm(const VAlarm& v) : VComponent(v) {} VAlarm& VAlarm::operator=(const VAlarm& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VAlarm::~VAlarm(){} VAlarm::VAlarm(icalcomponent* v) : VComponent(v){} VAlarm::VAlarm(string str) : VComponent(str){} icalrequeststatus VAlarm::getTriggerTime(VComponent &c, struct icaltriggertype *tr) { struct icaltimetype tt; ICalParameter *related_param; ICalPropertyTmpPtr trigger_prop = this->get_first_property(ICAL_TRIGGER_PROPERTY); // all VALARMs must have a TRIGGER if (trigger_prop == NULL) return ICAL_3_1_INVPROPVAL_STATUS; *tr = trigger_prop->get_trigger(); tt = icaltime_null_time(); if (icaltime_is_null_time(tr->time)) { // relative time trigger // TRIGGER;RELATED=END:P5M 5 minutes after END // TRIGGER;RELATED=START:-P15M 15 minutes before START // get RELATED parameter related_param = trigger_prop->get_first_parameter(ICAL_RELATED_PARAMETER); if (related_param && related_param->is_valid()) { // get RELATED parameter value icalparameter_related related = related_param->get_related(); if(related) { switch(related) { case ICAL_RELATED_END: if (c.isa() == ICAL_VEVENT_COMPONENT) { tt = c.get_dtend(); // If a recurrenceid exists, use that to calculate the // dtend from the dtstart. struct icaltimetype recur_time = c.get_recurrenceid(); if (!(icaltime_is_null_time(recur_time))) { struct icaldurationtype dur = icaltime_subtract(c.get_dtstart(), tt); tt = icaltime_add(recur_time, dur); } } else if (c.isa() == ICAL_VTODO_COMPONENT) { tt = c.get_due(); struct icaltimetype recur_time = c.get_recurrenceid(); if (!(icaltime_is_null_time(recur_time))) { tt = recur_time; } } // @@@ TODO: if not DTEND or DUE, then DTSTART and DURATION must be present break; case ICAL_RELATED_START: case ICAL_RELATED_X: case ICAL_RELATED_NONE: default: tt = c.get_dtstart(); struct icaltimetype recur_time = c.get_recurrenceid(); if (!(icaltime_is_null_time(recur_time))) { tt = recur_time; } break; } } } else { // no RELATED explicity specified, the default is // relative to the start of an event or to-do, rfc2445 // if no RELATED, we are forced to use dtstart for VEVENT, // due for VTODO to calculate trigger time. // If a recur time exists, use that. Recur time trumps dtstart or due. struct icaltimetype recur_time = c.get_recurrenceid(); if (!(icaltime_is_null_time(recur_time))) { tt = recur_time; } else if (c.isa() == ICAL_VEVENT_COMPONENT) tt = c.get_dtstart(); else if (c.isa() == ICAL_VTODO_COMPONENT) tt = c.get_due(); } // malformed? encapsulating VEVENT or VTODO MUST have DTSTART/DTEND if(icaltime_is_null_time(tt)) return ICAL_3_1_INVPROPVAL_STATUS;; // now offset using tr.duration tr->time = icaltime_add(tt, tr->duration); } // else absolute time trigger return ICAL_2_0_SUCCESS_STATUS; } /* VFreeBusy */ VFreeBusy::VFreeBusy() : VComponent(icalcomponent_new_vfreebusy()){} VFreeBusy::VFreeBusy(const VFreeBusy& v) : VComponent(v) {} VFreeBusy& VFreeBusy::operator=(const VFreeBusy& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VFreeBusy::~VFreeBusy(){} VFreeBusy::VFreeBusy(icalcomponent* v) : VComponent(v){} VFreeBusy::VFreeBusy(string str) : VComponent(str){} /* VTimezone */ VTimezone::VTimezone() : VComponent(icalcomponent_new_vtimezone()){} VTimezone::VTimezone(const VTimezone& v) : VComponent(v) {} VTimezone& VTimezone::operator=(const VTimezone& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } VTimezone::~VTimezone(){} VTimezone::VTimezone(icalcomponent* v) : VComponent(v){} VTimezone::VTimezone(string str) : VComponent(str){} /* XStandard */ XStandard::XStandard() : VComponent(icalcomponent_new_xstandard()){} XStandard::XStandard(const XStandard& v) : VComponent(v) {} XStandard& XStandard::operator=(const XStandard& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } XStandard::~XStandard(){} XStandard::XStandard(icalcomponent* v) : VComponent(v){} XStandard::XStandard(string str) : VComponent(str){} /* XDaylight */ XDaylight::XDaylight() : VComponent(icalcomponent_new_xdaylight()){} XDaylight::XDaylight(const XDaylight& v) : VComponent(v) {} XDaylight& XDaylight::operator=(const XDaylight& v){ if (this == &v) return *this; VComponent::operator=(v); return *this; } XDaylight::~XDaylight(){} XDaylight::XDaylight(icalcomponent* v) : VComponent(v){} XDaylight::XDaylight(string str) : VComponent(str){} libical-1.0/src/libical/libicals_w32_vsnprintf_replacement.c0000664000076400007640000000734612132563132023242 0ustar allenallen#ifdef WIN32 #include "config.h" #ifndef HAVE_SNPRINTF #error DO NOT USE libical version of vsnprintf. #endif /* * Revision 12: http://theos.com/~deraadt/snprintf.c * * Copyright (c) 1997 Theo de Raadt * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef WIN32 #include #include #include #endif #include #include #include #include #if __STDC__ #include #include #else #include #endif #include #ifndef roundup #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) #endif static int pgsize; static char *curobj; static sigjmp_buf bail; #define EXTRABYTES 2 /* XXX: why 2? you don't want to know */ static char * msetup(str, n) char *str; size_t n; { char *e; if (n == 0) return NULL; if (pgsize == 0) pgsize = getpagesize(); curobj = (char *)malloc(n + EXTRABYTES + pgsize * 2); if (curobj == NULL) return NULL; e = curobj + n + EXTRABYTES; e = (char *)roundup((unsigned long)e, pgsize); if (mprotect(e, pgsize, PROT_NONE) == -1) { free(curobj); curobj = NULL; return NULL; } e = e - n - EXTRABYTES; *e = '\0'; return (e); } static void mcatch(int i) { siglongjmp(bail, 1); } static void mcleanup(str, n, p) char *str; size_t n; char *p; { strncpy(str, p, n-1); str[n-1] = '\0'; if (mprotect((caddr_t)(p + n + EXTRABYTES), pgsize, PROT_READ|PROT_WRITE|PROT_EXEC) == -1) mprotect((caddr_t)(p + n + EXTRABYTES), pgsize, PROT_READ|PROT_WRITE); free(curobj); } int #if __STDC__ vsnprintf(char *str, size_t n, char const *fmt, va_list ap) #else vsnprintf(str, n, fmt, ap) char *str; size_t n; char *fmt; char *ap; #endif { struct sigaction osa, nsa; char *p; int ret = n + 1; /* if we bail, indicated we overflowed */ memset(&nsa, 0, sizeof nsa); nsa.sa_handler = mcatch; sigemptyset(&nsa.sa_mask); p = msetup(str, n); if (p == NULL) { *str = '\0'; return 0; } if (sigsetjmp(bail, 1) == 0) { if (sigaction(SIGSEGV, &nsa, &osa) == -1) { mcleanup(str, n, p); return (0); } ret = vsprintf(p, fmt, ap); } mcleanup(str, n, p); (void) sigaction(SIGSEGV, &osa, NULL); return (ret); } int #if __STDC__ snprintf(char *str, size_t n, char const *fmt, ...) #else snprintf(str, n, fmt, va_alist) char *str; size_t n; char *fmt; va_dcl #endif { va_list ap; #if __STDC__ va_start(ap, fmt); #else va_start(ap); #endif return (vsnprintf(str, n, fmt, ap)); va_end(ap); } #else /* ANSI C forbids an empty source file... */ static void vsnprintf_dummy_func() { vsnprintf_dummy_func(); } #endif libical-1.0/src/libical/icalarray.c0000664000076400007640000001333312132563132016235 0ustar allenallen/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- ====================================================================== FILE: icalarray.c CREATOR: Damon Chaplin 07 March 2001 $Id: icalarray.c,v 1.7 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2001, Ximian, Inc. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ /** @file icalarray.c * * @brief An array of arbitrarily-sized elements which grows * dynamically as elements are added. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include "icalarray.h" #include "icalerror.h" static void icalarray_expand (icalarray *array, int space_needed); /** @brief Constructor */ icalarray* icalarray_new (int element_size, int increment_size) { icalarray *array; array = (icalarray*) malloc (sizeof (icalarray)); if (!array) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return NULL; } array->element_size = element_size; array->increment_size = increment_size; array->num_elements = 0; array->space_allocated = 0; array->chunks = NULL; return array; } static void * icalarray_alloc_chunk(icalarray *array) { void *chunk = malloc(array->element_size * array->increment_size); if (!chunk) icalerror_set_errno(ICAL_NEWFAILED_ERROR); return chunk; } icalarray *icalarray_copy (icalarray *originalarray) { icalarray *array = icalarray_new(originalarray->element_size, originalarray->increment_size); int chunks = originalarray->space_allocated / originalarray->increment_size; int chunk; if (!array) return NULL; array->num_elements = originalarray->num_elements; array->space_allocated = originalarray->space_allocated; array->chunks = malloc(chunks * sizeof (void *)); if (array->chunks) { for (chunk = 0; chunk < chunks; chunk++) { array->chunks[chunk] = icalarray_alloc_chunk(array); if (array->chunks[chunk]) memcpy(array->chunks[chunk], originalarray->chunks[chunk], array->increment_size * array->element_size); } } else { icalerror_set_errno(ICAL_ALLOCATION_ERROR); } return array; } /** @brief Destructor */ void icalarray_free (icalarray *array) { if (array->chunks) { int chunks = array->space_allocated / array->increment_size; int chunk; for (chunk = 0; chunk < chunks; chunk++) free(array->chunks[chunk]); free (array->chunks); array->chunks = 0; } free (array); array = 0; } void icalarray_append (icalarray *array, const void *element) { int pos; if (array->num_elements >= array->space_allocated) icalarray_expand (array, 1); pos = array->num_elements++; memcpy (icalarray_element_at(array, pos), element, array->element_size); } void* icalarray_element_at (icalarray *array, int position) { int chunk = position / array->increment_size; int offset = position % array->increment_size; assert (position >= 0); assert ((unsigned int)position < array->num_elements); return (char *)(array->chunks[chunk]) + (offset * array->element_size); } void icalarray_remove_element_at (icalarray *array, int position) { void *dest; int elements_to_move; assert (position >= 0); assert ((unsigned int)position < array->num_elements); while (position < array->num_elements - 1) { memmove(icalarray_element_at(array, position), icalarray_element_at(array, position + 1), array->element_size); position++; } array->num_elements--; } void icalarray_sort (icalarray *array, int (*compare) (const void *, const void *)) { if (array->num_elements == 0) { return; } if (array->num_elements <= array->increment_size) { qsort(array->chunks[0], array->num_elements, array->element_size, compare); } else { int pos; void *tmp = malloc (array->num_elements * array->element_size); if (!tmp) return; for (pos = 0; pos < array->num_elements; pos++) memcpy((char *) tmp + array->element_size * pos, icalarray_element_at(array, pos), array->element_size); qsort (tmp, array->num_elements, array->element_size, compare); for (pos = 0; pos < array->num_elements; pos++) memcpy(icalarray_element_at(array, pos), (char *) tmp + array->element_size * pos, array->element_size); free (tmp); } } static void icalarray_expand (icalarray *array, int space_needed) { int num_chunks = array->space_allocated / array->increment_size; int num_new_chunks; int c; void **new_chunks; num_new_chunks = (space_needed + array->increment_size - 1) / array->increment_size; if (!num_new_chunks) num_new_chunks = 1; new_chunks = malloc ((num_chunks + num_new_chunks) * sizeof (void *)); if (new_chunks) { memcpy(new_chunks, array->chunks, num_chunks * sizeof (void *)); for (c = 0; c < num_new_chunks; c++) new_chunks[c + num_chunks] = icalarray_alloc_chunk(array); if (array->chunks) free (array->chunks); array->chunks = new_chunks; array->space_allocated = array->space_allocated + num_new_chunks * array->increment_size; } else icalerror_set_errno(ICAL_ALLOCATION_ERROR); } libical-1.0/src/libical/icalparser.c0000664000076400007640000010140312132563132016407 0ustar allenallen/* -*- Mode: C; tab-width: 4; c-basic-offset: 8; -*- ====================================================================== FILE: icalparser.c CREATOR: eric 04 August 1999 $Id: icalparser.c,v 1.53 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Initial Developer of the Original Code is Eric Busboom (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pvl.h" #include "icalerror.h" #include "icalvalue.h" #include "icalderivedparameter.h" #include "icalparameter.h" #include "icalproperty.h" #include "icalcomponent.h" #include /* For strncpy & size_t */ #include /* For FILE and fgets and snprintf */ #include /* for free */ #include #include "icalmemory.h" #include "icalparser.h" #ifdef HAVE_WCTYPE_H # include /* Some systems have an imcomplete implementation on wctype (FreeBSD, * Darwin). Cope with that. */ # ifndef HAVE_ISWSPACE # define iswspace isspace # endif #else # if !defined HAVE_ISWSPACE && !defined WIN32 # define iswspace isspace # endif #endif #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif static char* parser_get_next_char(char c, char *str, int qm); static char* parser_get_next_parameter(char* line,char** end); static char* parser_get_next_value(char* line, char **end, icalvalue_kind kind); static char* parser_get_prop_name(char* line, char** end); static char* parser_get_param_name(char* line, char **end); #define TMP_BUF_SIZE 80 struct icalparser_impl { int buffer_full; /* flag indicates that temp is smaller that data being read into it*/ int continuation_line; /* last line read was a continuation line */ size_t tmp_buf_size; char temp[TMP_BUF_SIZE]; icalcomponent *root_component; int version; int level; int lineno; icalparser_state state; pvl_list components; void *line_gen_data; }; /* * New version of strstrip() that does not move the pointer. */ void strstriplt(char *buf) { size_t len; int a; if (buf==NULL) { return; } if (buf[0] == 0) { return; } len = strlen(buf); while ((buf[0] != 0) && (isspace((unsigned char)buf[len - 1]))) { buf[--len] = 0; } if (buf[0] == 0) { return; } a = 0; while ((buf[0]!=0) && (isspace((unsigned char)buf[a]))) { a++; } if (a > 0) { memmove(buf, &buf[a], len - a + 1); } } icalparser* icalparser_new(void) { struct icalparser_impl* impl = 0; if ( ( impl = (struct icalparser_impl*) malloc(sizeof(struct icalparser_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } impl->root_component = 0; impl->components = pvl_newlist(); impl->level = 0; impl->state = ICALPARSER_SUCCESS; impl->tmp_buf_size = TMP_BUF_SIZE; impl->buffer_full = 0; impl->continuation_line = 0; impl->lineno = 0; impl->continuation_line = 0; memset(impl->temp,0, TMP_BUF_SIZE); return (icalparser*)impl; } void icalparser_free(icalparser* parser) { icalcomponent *c; if (parser->root_component != 0){ icalcomponent_free(parser->root_component); } while( (c=pvl_pop(parser->components)) != 0){ icalcomponent_free(c); } pvl_free(parser->components); free(parser); } void icalparser_set_gen_data(icalparser* parser, void* data) { parser->line_gen_data = data; } icalvalue* icalvalue_new_From_string_with_error(icalvalue_kind kind, char* str, icalproperty **error); static char* parser_get_next_char(char c, char *str, int qm) { int quote_mode = 0; char* p; for(p=str; *p!=0; p++){ if (qm == 1) { if ( quote_mode == 0 && *p=='"' && p>str && *(p-1) != '\\' ){ quote_mode =1; continue; } if ( quote_mode == 1 && *p=='"' && p>str && *(p-1) != '\\' ){ quote_mode =0; continue; } } if (quote_mode == 0 && *p== c && p>str && *(p-1) != '\\' ){ return p; } } return 0; } /** make a new tmp buffer out of a substring */ static char* make_segment(char* start, char* end) { char *buf, *tmp; size_t size = (size_t)end - (size_t)start; buf = icalmemory_new_buffer(size+1); strncpy(buf,start,size); *(buf+size) = 0; tmp = (buf+size); while ((tmp >= buf) && ((*tmp == '\0') || iswspace(*tmp))) { *tmp = 0; tmp--; } return buf; } static char* parser_get_prop_name(char* line, char** end) { char* p; char* v; char *str; p = parser_get_next_char(';',line,1); v = parser_get_next_char(':',line,1); if (p== 0 && v == 0) { return 0; } /* There is no ';' or, it is after the ';' that marks the beginning of the value */ if (v!=0 && ( p == 0 || p > v)){ str = make_segment(line,v); *end = v+1; } else { str = make_segment(line,p); *end = p+1; } return str; } static char* parser_get_param_name(char* line, char **end) { char* next; char *str; next = parser_get_next_char('=',line,1); if (next == 0) { return 0; } str = make_segment(line,next); *end = next+1; if (**end == '"') { *end = *end+1; next = parser_get_next_char('"',*end,0); if (next == 0) { free(str); return 0; } *end = make_segment(*end,next); } else { *end = make_segment(*end, *end + strlen(*end)); } return str; } #if 0 static char* parser_get_next_paramvalue(char* line, char **end) { char* next; char *str; next = parser_get_next_char(',',line,1); if (next == 0){ next = (char*)(size_t)line+(size_t)strlen(line);\ } if (next == line){ return 0; } else { str = make_segment(line,next); *end = next+1; return str; } } #endif char* icalparser_get_value(char* line, char **end, icalvalue_kind kind) { char *str; size_t length = strlen(line); if (length == 0){ return 0; } *end = line+length; str = make_segment(line, *end); return str; } /** A property may have multiple values, if the values are seperated by commas in the content line. This routine will look for the next comma after line and will set the next place to start searching in end. */ static char* parser_get_next_value(char* line, char **end, icalvalue_kind kind) { char* next = 0; char *p; char *str; size_t length = strlen(line); int quoted = 0; if( line[0] == '\"' && line[length - 1] == '\"' ) { /* This line is quoted, don't split into multiple values */ quoted = 1; } p = line; while(!quoted){ next = parser_get_next_char(',',p,1); /* Unforunately, RFC2445 says that for the RECUR value, COMMA can both separate digits in a list, and it can separate multiple recurrence specifications. This is not a friendly part of the spec. This weirdness tries to distinguish the two uses. it is probably a HACK*/ if( kind == ICAL_RECUR_VALUE ) { if ( next != 0 && (*end+length) > next+5 && strncmp(next,"FREQ",4) == 0 ) { /* The COMMA was followed by 'FREQ', is it a real separator*/ /* Fall through */ } else if (next != 0){ /* Not real, get the next COMMA */ p = next+1; next = 0; continue; } } /* ignore all , for query value. select dtstart, dtend etc ... */ else if( kind == ICAL_QUERY_VALUE) { if ( next != 0) { p = next+1; continue; } else break; } /* If the comma is preceded by a '\', then it is a literal and not a value separator*/ if ( (next!=0 && *(next-1) == '\\') || (next!=0 && *(next-3) == '\\') ) /*second clause for '/' is on prev line. HACK may be out of bounds */ { p = next+1; } else { break; } } if (next == 0){ next = (char*)(size_t)line+length; *end = next; } else { *end = next+1; } if (next == line){ return 0; } str = make_segment(line,next); return str; } static char* parser_get_next_parameter(char* line,char** end) { char *next; char *v; char *str; v = parser_get_next_char(':',line,1); next = parser_get_next_char(';', line,1); /* There is no ';' or, it is after the ':' that marks the beginning of the value */ if (next == 0 || next > v) { next = parser_get_next_char(':', line,1); } if (next != 0) { str = make_segment(line,next); *end = next+1; return str; } else { *end = line; return 0; } } /** * Get a single property line, from the property name through the * final new line, and include any continuation lines */ char* icalparser_get_line(icalparser *parser, char* (*line_gen_func)(char *s, size_t size, void *d)) { char *line; char *line_p; size_t buf_size = parser->tmp_buf_size; line_p = line = icalmemory_new_buffer(buf_size); line[0] = '\0'; /* Read lines by calling line_gen_func and putting the data into parser->temp. If the line is a continuation line ( begins with a space after a newline ) then append the data onto line and read again. Otherwise, exit the loop. */ while(1) { /* The first part of the loop deals with the temp buffer, which was read on he last pass through the loop. The routine is split like this because it has to read lone line ahead to determine if a line is a continuation line. */ /* The tmp buffer is not clear, so transfer the data in it to the output. This may be left over from a previous call */ if (parser->temp[0] != '\0' ) { /* If the last position in the temp buffer is occupied, mark the buffer as full. The means we will do another read later, because the line is not finished */ if (parser->temp[parser->tmp_buf_size-1] == 0 && parser->temp[parser->tmp_buf_size-2] != '\n'&& parser->temp[parser->tmp_buf_size-2] != 0 ){ parser->buffer_full = 1; } else { parser->buffer_full = 0; } /* Copy the temp to the output and clear the temp buffer. */ if(parser->continuation_line==1){ /* back up the pointer to erase the continuation characters */ parser->continuation_line = 0; line_p--; if ( *(line_p-1) == '\r'){ line_p--; } /* copy one space up to eliminate the leading space*/ icalmemory_append_string(&line,&line_p,&buf_size, parser->temp+1); } else { icalmemory_append_string(&line,&line_p,&buf_size,parser->temp); } parser->temp[0] = '\0' ; } parser->temp[parser->tmp_buf_size-1] = 1; /* Mark end of buffer */ /****** Here is where the routine gets string data ******************/ if ((*line_gen_func)(parser->temp,parser->tmp_buf_size,parser->line_gen_data) ==0){/* Get more data */ /* If the first position is clear, it means we didn't get any more data from the last call to line_ge_func*/ if (parser->temp[0] == '\0'){ if(line[0] != '\0'){ /* There is data in the output, so fall trhough and process it*/ break; } else { /* No data in output; return and signal that there is no more input*/ free(line); return 0; } } } /* If the output line ends in a '\n' and the temp buffer begins with a ' ' or tab, then the buffer holds a continuation line, so keep reading. RFC 2445, section 4.1 */ if ( line_p > line+1 && *(line_p-1) == '\n' && (parser->temp[0] == ' ' || parser->temp[0] == '\t') ) { parser->continuation_line = 1; } else if ( parser->buffer_full == 1 ) { /* The buffer was filled on the last read, so read again */ } else { /* Looks like the end of this content line, so break */ break; } } /* Erase the final newline and/or carriage return*/ if ( line_p > line+1 && *(line_p-1) == '\n') { *(line_p-1) = '\0'; if ( *(line_p-2) == '\r'){ *(line_p-2) = '\0'; } } else { *(line_p) = '\0'; } while ( (*line_p == '\0' || iswspace(*line_p)) && line_p > line ) { *line_p = '\0'; line_p--; } return line; } static void insert_error(icalcomponent* comp, const char* text, const char* message, icalparameter_xlicerrortype type) { char temp[1024]; if (text == 0){ snprintf(temp,1024,"%s:",message); } else { snprintf(temp,1024,"%s: %s",message,text); } icalcomponent_add_property (comp, icalproperty_vanew_xlicerror( temp, icalparameter_new_xlicerrortype(type), 0)); } static int line_is_blank(char* line){ int i=0; for(i=0; *(line+i)!=0; i++){ char c = *(line+i); if(c != ' ' && c != '\n' && c != '\t'){ return 0; } } return 1; } icalcomponent* icalparser_parse(icalparser *parser, char* (*line_gen_func)(char *s, size_t size, void* d)) { char* line; icalcomponent *c=0; icalcomponent *root=0; icalerrorstate es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); int cont; icalerror_check_arg_rz((parser !=0),"parser"); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); do{ line = icalparser_get_line(parser, line_gen_func); if ((c = icalparser_add_line(parser,line)) != 0){ if(icalcomponent_get_parent(c) !=0){ /* This is bad news... assert? */ } assert(parser->root_component == 0); assert(pvl_count(parser->components) ==0); if (root == 0){ /* Just one component */ root = c; } else if(icalcomponent_isa(root) != ICAL_XROOT_COMPONENT) { /*Got a second component, so move the two components under an XROOT container */ icalcomponent *tempc = icalcomponent_new(ICAL_XROOT_COMPONENT); icalcomponent_add_component(tempc, root); icalcomponent_add_component(tempc, c); root = tempc; } else if(icalcomponent_isa(root) == ICAL_XROOT_COMPONENT) { /* Already have an XROOT container, so add the component to it*/ icalcomponent_add_component(root, c); } else { /* Badness */ assert(0); } c = 0; } cont = 0; if(line != 0){ icalmemory_free_buffer(line); cont = 1; } } while ( cont ); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); return root; } icalcomponent* icalparser_add_line(icalparser* parser, char* line) { char *str; char *end; int vcount = 0; icalproperty *prop; icalproperty_kind prop_kind; icalvalue *value; icalvalue_kind value_kind = ICAL_NO_VALUE; icalerror_check_arg_rz((parser != 0),"parser"); if (line == 0) { parser->state = ICALPARSER_ERROR; return 0; } if(line_is_blank(line) == 1){ return 0; } /* Begin by getting the property name at the start of the line. The property name may end up being "BEGIN" or "END" in which case it is not really a property, but the marker for the start or end of a component */ end = 0; str = parser_get_prop_name(line, &end); if (str == 0 || *str == '\0' ){ /* Could not get a property name */ icalcomponent *tail = pvl_data(pvl_tail(parser->components)); if (tail){ insert_error(tail,line, "Got a data line, but could not find a property name or component begin tag", ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); } tail = 0; parser->state = ICALPARSER_ERROR; icalmemory_free_buffer(str); str = NULL; return 0; } /********************************************************************** * Handle begin and end of components **********************************************************************/ /* If the property name is BEGIN or END, we are actually starting or ending a new component */ if(strcasecmp(str,"BEGIN") == 0){ icalcomponent *c; icalcomponent_kind comp_kind; icalmemory_free_buffer(str); str = NULL; parser->level++; str = parser_get_next_value(end,&end, value_kind); comp_kind = icalenum_string_to_component_kind(str); if (comp_kind == ICAL_NO_COMPONENT){ c = icalcomponent_new(ICAL_XLICINVALID_COMPONENT); insert_error(c,str,"Parse error in component name", ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); } c = icalcomponent_new(comp_kind); if (c == 0){ c = icalcomponent_new(ICAL_XLICINVALID_COMPONENT); insert_error(c,str,"Parse error in component name", ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); } pvl_push(parser->components,c); parser->state = ICALPARSER_BEGIN_COMP; icalmemory_free_buffer(str); str = NULL; return 0; } else if (strcasecmp(str,"END") == 0 ) { icalcomponent* tail; icalmemory_free_buffer(str); str = NULL; parser->level--; str = parser_get_next_value(end,&end, value_kind); /* Pop last component off of list and add it to the second-to-last*/ parser->root_component = pvl_pop(parser->components); tail = pvl_data(pvl_tail(parser->components)); if(tail != 0){ icalcomponent_add_component(tail,parser->root_component); } tail = 0; icalmemory_free_buffer(str); str = NULL; /* Return the component if we are back to the 0th level */ if (parser->level == 0){ icalcomponent *rtrn; if(pvl_count(parser->components) != 0){ /* There are still components on the stack -- this means that one of them did not have a proper "END" */ pvl_push(parser->components,parser->root_component); icalparser_clean(parser); /* may reset parser->root_component*/ } assert(pvl_count(parser->components) == 0); parser->state = ICALPARSER_SUCCESS; rtrn = parser->root_component; parser->root_component = 0; return rtrn; } else { parser->state = ICALPARSER_END_COMP; return 0; } } /* There is no point in continuing if we have not seen a component yet */ if(pvl_data(pvl_tail(parser->components)) == 0){ parser->state = ICALPARSER_ERROR; icalmemory_free_buffer(str); str = NULL; return 0; } /********************************************************************** * Handle property names **********************************************************************/ /* At this point, the property name really is a property name, (Not a component name) so make a new property and add it to the component */ prop_kind = icalproperty_string_to_kind(str); prop = icalproperty_new(prop_kind); if (prop != 0){ icalcomponent *tail = pvl_data(pvl_tail(parser->components)); if(prop_kind==ICAL_X_PROPERTY){ icalproperty_set_x_name(prop,str); } icalcomponent_add_property(tail, prop); /* Set the value kind for the default for this type of property. This may be re-set by a VALUE parameter */ value_kind = icalproperty_kind_to_value_kind(icalproperty_isa(prop)); } else { icalcomponent* tail = pvl_data(pvl_tail(parser->components)); insert_error(tail,str,"Parse error in property name", ICAL_XLICERRORTYPE_PROPERTYPARSEERROR); tail = 0; parser->state = ICALPARSER_ERROR; icalmemory_free_buffer(str); str = NULL; return 0; } icalmemory_free_buffer(str); str = NULL; /********************************************************************** * Handle parameter values **********************************************************************/ /* Now, add any parameters to the last property */ while(1) { if (*(end-1) == ':'){ /* if the last separator was a ":" and the value is a URL, icalparser_get_next_parameter will find the ':' in the URL, so better break now. */ break; } str = parser_get_next_parameter(end,&end); strstriplt(str); if (str != 0){ char* name = 0; char* pvalue = 0; icalparameter *param = 0; icalparameter_kind kind; icalcomponent *tail = pvl_data(pvl_tail(parser->components)); name = parser_get_param_name(str,&pvalue); if (name == 0){ /* 'tail' defined above */ insert_error(tail, str, "Cant parse parameter name", ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); tail = 0; break; } kind = icalparameter_string_to_kind(name); if(kind == ICAL_X_PARAMETER){ param = icalparameter_new(ICAL_X_PARAMETER); if(param != 0){ icalparameter_set_xname(param,name); icalparameter_set_xvalue(param,pvalue); } } else if (kind == ICAL_IANA_PARAMETER){ ical_unknown_token_handling tokHandlingSetting = ical_get_unknown_token_handling_setting(); if (tokHandlingSetting == ICAL_DISCARD_TOKEN) continue; param = icalparameter_new(ICAL_IANA_PARAMETER); if(param != 0){ icalparameter_set_xname(param,name); icalparameter_set_xvalue(param,pvalue); } } else if (kind == ICAL_TZID_PARAMETER){ /* Special case handling for TZID to workaround invalid incoming data. For example, Google Calendar will send back stuff like this: DTSTART;TZID=GMT+05:30:20120904T020000 In this case we read to the last colon rather than the first colon. This way the TZID will become GMT+05:30 rather than trying to parse the date-time as 30:20120904T020000. */ char *lastColon = 0; char *nextColon = end; /* Find the last colon in the line */ do { nextColon = parser_get_next_char(':', nextColon, 1); if (nextColon) { lastColon = nextColon; } } while (nextColon); /* Rebuild str so that it includes everything up to the last colon. So given the above example, str will go from "TZID=GMT+05" to "TZID=GMT+05:30" */ if (lastColon && *(lastColon + 1) != 0) { char *strStart = line + sizeof(str); end = lastColon + 1; icalmemory_free_buffer(str); str = make_segment(strStart, end - 1); } icalmemory_free_buffer(name); icalmemory_free_buffer(pvalue); /* Reparse the parameter name and value with the new segment */ name = parser_get_param_name(str,&pvalue); param = icalparameter_new_from_value_string(kind,pvalue); } else if (kind != ICAL_NO_PARAMETER){ param = icalparameter_new_from_value_string(kind,pvalue); } else { /* Error. Failed to parse the parameter*/ /* 'tail' defined above */ /* Change for mozilla */ /* have the option of being flexible towards unsupported parameters */ #if ICAL_ERRORS_ARE_FATAL == 1 insert_error(tail, str, "Cant parse parameter name", ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); tail = 0; parser->state = ICALPARSER_ERROR; if (pvalue) { free(pvalue); pvalue = 0; } if (name) { free(name); name = 0; } icalmemory_free_buffer(str); str = NULL; return 0; #else if (name) { free(name); name = 0; } icalmemory_free_buffer(str); str = NULL; continue; #endif } if (pvalue) { free(pvalue); pvalue = 0; } if (name) { free(name); name = 0; } if (param == 0){ /* 'tail' defined above */ insert_error(tail,str,"Cant parse parameter value", ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); tail = 0; parser->state = ICALPARSER_ERROR; icalmemory_free_buffer(name); name = NULL; icalmemory_free_buffer(str); str = NULL; continue; } /* If it is a VALUE parameter, set the kind of value*/ if (icalparameter_isa(param)==ICAL_VALUE_PARAMETER){ value_kind = (icalvalue_kind) icalparameter_value_to_value_kind( icalparameter_get_value(param) ); if (value_kind == ICAL_NO_VALUE){ /* Ooops, could not parse the value of the parameter ( it was not one of the defined values ), so reset the value_kind */ insert_error( tail, str, "Got a VALUE parameter with an unknown type", ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); value_kind = icalproperty_kind_to_value_kind( icalproperty_isa(prop)); icalparameter_free(param); tail = 0; parser->state = ICALPARSER_ERROR; icalmemory_free_buffer(name); name = NULL; icalmemory_free_buffer(str); str = NULL; continue; } } icalmemory_free_buffer(name); name = NULL; /* Everything is OK, so add the parameter */ icalproperty_add_parameter(prop,param); tail = 0; icalmemory_free_buffer(str); str = NULL; } else { /* if ( str != 0) */ /* If we did not get a param string, go on to looking for a value */ if (str != NULL) { icalmemory_free_buffer(str); str = NULL; } break; } /* if ( str != 0) */ } /* while(1) */ /********************************************************************** * Handle values **********************************************************************/ /* Look for values. If there are ',' characters in the values, then there are multiple values, so clone the current parameter and add one part of the value to each clone */ vcount=0; while(1) { /* Only some properies can have multiple values. This list was taken from rfc2445. Also added the x-properties, because the spec actually says that commas should be escaped. For x-properties, other apps may depend on that behaviour */ switch (prop_kind) { case ICAL_X_PROPERTY: case ICAL_CATEGORIES_PROPERTY: case ICAL_RESOURCES_PROPERTY: /* Referring to RFC 2445, section 4.8.5.3 and section 4.8.5.1: RDATE and EXDATE can specify a list of dates/date-times/periods. */ case ICAL_RDATE_PROPERTY: case ICAL_EXDATE_PROPERTY: /* Referring to RFC 2445, section 4.8.2.6 Free/Busy Time: The "FREEBUSY" property can specify more than one value, separated by the COMMA character (US-ASCII decimal 44). */ case ICAL_FREEBUSY_PROPERTY: str = parser_get_next_value(end,&end, value_kind); strstriplt (str); break; default: str = icalparser_get_value(end, &end, value_kind); strstriplt (str); break; } if (str != 0){ if (vcount > 0){ /* Actually, only clone after the second value */ icalproperty* clone = icalproperty_new_clone(prop); icalcomponent* tail = pvl_data(pvl_tail(parser->components)); icalcomponent_add_property(tail, clone); prop = clone; tail = 0; } /* If this is a URI value for an ATTACH property, then change the value to an ATTACH kind as well. Now we can support ATTACH;TYPE=URI:http://my.fav.url */ if(value_kind == ICAL_URI_VALUE && prop_kind == ICAL_ATTACH_PROPERTY){ value_kind = ICAL_ATTACH_VALUE; } value = icalvalue_new_from_string(value_kind, str); /* Don't add properties without value */ if (value == 0){ char temp[200]; /* HACK */ icalproperty_kind prop_kind = icalproperty_isa(prop); icalcomponent* tail = pvl_data(pvl_tail(parser->components)); snprintf(temp,sizeof(temp),"Can't parse as %s value in %s property. Removing entire property", icalvalue_kind_to_string(value_kind), icalproperty_kind_to_string(prop_kind)); insert_error(tail, str, temp, ICAL_XLICERRORTYPE_VALUEPARSEERROR); /* Remove the troublesome property */ icalcomponent_remove_property(tail,prop); icalproperty_free(prop); prop = 0; tail = 0; parser->state = ICALPARSER_ERROR; icalmemory_free_buffer(str); str = NULL; return 0; } else { vcount++; icalproperty_set_value(prop, value); } icalmemory_free_buffer(str); str = NULL; } else { #if ICAL_ALLOW_EMPTY_PROPERTIES /* Don't replace empty properties with an error. Set an empty length string (not null) as the value instead */ if (vcount == 0) { icalproperty_set_value(prop, icalvalue_new_text("")); } break; #else if (vcount == 0){ char temp[200]; /* HACK */ icalproperty_kind prop_kind = icalproperty_isa(prop); icalcomponent *tail = pvl_data(pvl_tail(parser->components)); snprintf(temp,sizeof(temp),"No value for %s property. Removing entire property", icalproperty_kind_to_string(prop_kind)); insert_error(tail, str, temp, ICAL_XLICERRORTYPE_VALUEPARSEERROR); /* Remove the troublesome property */ icalcomponent_remove_property(tail,prop); icalproperty_free(prop); prop = 0; tail = 0; parser->state = ICALPARSER_ERROR; return 0; } else { break; } #endif } } /**************************************************************** * End of component parsing. *****************************************************************/ if (pvl_data(pvl_tail(parser->components)) == 0 && parser->level == 0){ /* HACK. Does this clause ever get executed? */ parser->state = ICALPARSER_SUCCESS; assert(0); return parser->root_component; } else { parser->state = ICALPARSER_IN_PROGRESS; return 0; } } icalparser_state icalparser_get_state(icalparser* parser) { return parser->state; } icalcomponent* icalparser_clean(icalparser* parser) { icalcomponent *tail; icalerror_check_arg_rz((parser != 0 ),"parser"); /* We won't get a clean exit if some components did not have an "END" tag. Clear off any component that may be left in the list */ while((tail=pvl_data(pvl_tail(parser->components))) != 0){ insert_error(tail," ", "Missing END tag for this component. Closing component at end of input.", ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); parser->root_component = pvl_pop(parser->components); tail=pvl_data(pvl_tail(parser->components)); if(tail != 0 && parser->root_component != NULL){ if(icalcomponent_get_parent(parser->root_component)!=0){ icalerror_warn("icalparser_clean is trying to attach a component for the second time"); } else { icalcomponent_add_component(tail,parser->root_component); } } } return parser->root_component; } struct slg_data { const char* pos; const char* str; }; char* icalparser_string_line_generator(char *out, size_t buf_size, void *d) { char *n; size_t size; struct slg_data* data = (struct slg_data*)d; if(data->pos==0){ data->pos=data->str; } /* If the pointer is at the end of the string, we are done */ if (*(data->pos)==0){ return 0; } n = strchr(data->pos,'\n'); if (n == 0){ size = strlen(data->pos); } else { n++; /* include newline in output */ size = (n-data->pos); } if (size > buf_size-1){ size = buf_size-1; } strncpy(out,data->pos,size); *(out+size) = '\0'; data->pos += size; return out; } icalcomponent* icalparser_parse_string(const char* str) { icalcomponent *c; struct slg_data d; icalparser *p; icalerrorstate es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); d.pos = 0; d.str = str; p = icalparser_new(); icalparser_set_gen_data(p,&d); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); c = icalparser_parse(p,icalparser_string_line_generator); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); icalparser_free(p); return c; } libical-1.0/src/libical/Makefile.am0000664000076400007640000002231412132563132016155 0ustar allenallen#====================================================================== # FILE: Makefile.am # CREATOR: eric # # $Id: Makefile.am,v 1.40 2008-01-02 20:07:30 dothebart Exp $ # # # (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ # # # #====================================================================== DESIGNDATA = $(top_srcdir)/design-data ICALSCRIPTS = $(top_srcdir)/scripts if WITH_CXX_BINDINGS cxx_lib=libical_cxx.la cxx_headers=vcomponent.h icalparameter_cxx.h icalproperty_cxx.h icalvalue_cxx.h icptrholder.h else cxx_lib= cxx_headers= endif lib_LTLIBRARIES = libical.la $(cxx_lib) noinst_LTLIBRARIES = libical-static.la libical_static_la_SOURCES = $(libical_la_SOURCES) libical_static_la_LDFLAGS = --all-static AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\""$(datadir)/$(PACKAGE)"\" # CFLAGS = -g INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ -I$(srcdir) libical_la_LDFLAGS = -version-info 48:0:48 if OS_WIN32 libical_la_LDFLAGS += -no-undefined endif libical_la_LIBADD = $(PTHREAD_LIBS) libical_la_SOURCES = \ $(BUILT_SOURCES) \ icalarray.c \ icalarray.h \ icalattach.h \ icalattachimpl.h \ icalattach.c \ icalcomponent.c \ icalcomponent.h \ icalenums.c \ icalenums.h \ icalerror.c \ icalerror.h \ icalmemory.c \ icalmemory.h \ icalmime.c \ icalmime.h \ icalparameter.c \ icalparameter.h \ icalparameterimpl.h \ icalparser.c \ icalparser.h \ icalproperty.c \ icalproperty.h \ icalrecur.c \ icalrecur.h \ icalrestriction.h \ icaltime.c \ icaltime.h \ icaltz-util.c \ icaltz-util.h \ icaltimezone.c \ icaltimezone.h \ icalduration.h \ icalduration.c \ icalperiod.h \ icalperiod.c \ icaltypes.c \ icaltypes.h \ icalvalue.c \ icalvalue.h \ icalvalueimpl.h \ pvl.c \ pvl.h \ sspm.c \ sspm.h \ libicals_w32_vsnprintf_replacement.c \ icallangbind.h \ icallangbind.c \ caldate.c \ astime.h if WITH_CXX_BINDINGS libical_cxx_la_SOURCES = \ $(libical_la_SOURCES) \ vcomponent.h \ vcomponent.cpp \ icalproperty_cxx.h \ icalproperty_cxx.cpp \ icalparameter_cxx.h \ icalparameter_cxx.cpp \ icalvalue_cxx.h \ icalvalue_cxx.cpp \ icptrholder.h endif libical_includedir = $(includedir)/libical libical_include_HEADERS = \ ical.h \ icalarray.h \ icalattach.h \ icalcomponent.h \ icalderivedparameter.h \ icalderivedproperty.h \ icalderivedvalue.h \ icalduration.h \ icalenums.h \ icalerror.h \ icallangbind.h \ icalmemory.h \ icalmime.h \ icalparameter.h \ icalparser.h \ icalperiod.h \ icalproperty.h \ icalrecur.h \ icalrestriction.h \ icaltime.h \ icaltz-util.h \ icaltimezone.h \ icaltypes.h \ icalvalue.h \ pvl.h \ sspm.h \ $(cxx_headers) # ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. It # is required to make the combined header ical.h properly COMBINEDHEADERS = \ $(top_builddir)/src/libical/icalversion.h \ $(top_srcdir)/src/libical/icaltime.h \ $(top_srcdir)/src/libical/icalduration.h \ $(top_srcdir)/src/libical/icalperiod.h \ $(top_srcdir)/src/libical/icalenums.h \ $(top_srcdir)/src/libical/icaltypes.h \ $(top_srcdir)/src/libical/icalrecur.h \ $(top_srcdir)/src/libical/icalattach.h \ icalderivedvalue.h \ icalderivedparameter.h \ $(top_srcdir)/src/libical/icalvalue.h \ $(top_srcdir)/src/libical/icalparameter.h \ icalderivedproperty.h \ $(top_srcdir)/src/libical/icalproperty.h \ $(top_srcdir)/src/libical/pvl.h \ $(top_srcdir)/src/libical/icalarray.h \ $(top_srcdir)/src/libical/icalcomponent.h \ $(top_srcdir)/src/libical/icaltimezone.h \ $(top_srcdir)/src/libical/icalparser.h \ $(top_srcdir)/src/libical/icalmemory.h \ icalerror.h \ $(top_srcdir)/src/libical/icalrestriction.h \ $(top_srcdir)/src/libical/sspm.h \ $(top_srcdir)/src/libical/icalmime.h \ $(top_srcdir)/src/libical/icallangbind.h # exporting the configure stuff is probably no good idea. # others use standard defines not in our namespace too. # $(top_builddir)/config.h BUILT_COMBINEDHEADERS = \ icalderivedparameter.h \ icalderivedproperty.h \ icalderivedvalue.h BUILT_SOURCES = \ $(BUILT_COMBINEDHEADERS)\ icalderivedparameter.c \ icalderivedproperty.c \ icalrestriction.c \ icalderivedvalue.c ical.h: $(COMBINEDHEADERS) echo '#ifndef LIBICAL_ICAL_H' > ical.h echo '#define LIBICAL_ICAL_H' >> ical.h echo '#ifdef __cplusplus' >> ical.h echo 'extern "C" {' >> ical.h echo '#endif' >> ical.h echo '/*' >> ical.h echo ' $$''Id''$$' >> ical.h echo '*/' >> ical.h cat $(COMBINEDHEADERS) \ | egrep -v "#include.*\"ical" \ | egrep -v "#include.*\"config" \ | egrep -v "#include.*\"pvl\.h\"" \ | egrep -v '\$$(Id|Locker): .+\$$'>> ical.h echo '#ifdef __cplusplus' >> ical.h echo '}' >> ical.h echo '#endif' >> ical.h echo '#endif' >> ical.h # parameters PARAMETERDEPS = \ $(ICALSCRIPTS)/mkderivedparameters.pl \ $(DESIGNDATA)/parameters.csv \ icalderivedparameter.c.in \ icalderivedparameter.h.in icalderivedparameter.h: $(PARAMETERDEPS) $(PERL) -I $(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedparameters.pl -i $(srcdir)/icalderivedparameter.h.in -h $(DESIGNDATA)/parameters.csv > icalderivedparameter.h icalderivedparameter.c: $(PARAMETERDEPS) $(BUILT_COMBINEDHEADERS) $(PERL) -I $(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedparameters.pl -i $(srcdir)/icalderivedparameter.c.in -c $(DESIGNDATA)/parameters.csv > icalderivedparameter.c # properties PROPERTYDEPS = \ $(ICALSCRIPTS)/mkderivedproperties.pl \ $(DESIGNDATA)/properties.csv \ $(DESIGNDATA)/value-types.csv \ icalderivedproperty.c.in \ icalderivedproperty.h.in icalderivedproperty.h: $(PROPERTYDEPS) $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedproperties.pl \ -i $(srcdir)/icalderivedproperty.h.in -h $(DESIGNDATA)/properties.csv\ ${DESIGNDATA}/value-types.csv > icalderivedproperty.h icalderivedproperty.c: $(PROPERTYDEPS) $(BUILT_COMBINEDHEADERS) $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedproperties.pl \ -i $(srcdir)/icalderivedproperty.c.in -c $(DESIGNDATA)/properties.csv \ ${DESIGNDATA}/value-types.csv > icalderivedproperty.c # restrictions RESTRICTIONDEPS = \ $(ICALSCRIPTS)/mkrestrictiontable.pl \ $(DESIGNDATA)/restrictions.csv \ icalrestriction.c.in icalrestriction.c: $(RESTRICTIONDEPS) $(PERL) $(ICALSCRIPTS)/mkrestrictiontable.pl -i $(srcdir)/icalrestriction.c.in \ $(DESIGNDATA)/restrictions.csv > icalrestriction.c # values VALUEDEPS = \ $(ICALSCRIPTS)/mkderivedvalues.pl \ $(DESIGNDATA)/value-types.csv \ icalderivedvalue.c.in \ icalderivedvalue.h.in icalderivedvalue.h: $(VALUEDEPS) $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedvalues.pl \ -i $(srcdir)/icalderivedvalue.h.in -h $(DESIGNDATA)/value-types.csv > icalderivedvalue.h icalderivedvalue.c: $(VALUEDEPS) $(BUILT_COMBINEDHEADERS) $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedvalues.pl \ -i $(srcdir)/icalderivedvalue.c.in -c $(DESIGNDATA)/value-types.csv > icalderivedvalue.c # c++ needs ical.h auto-generated. icalparameter_cxx.lo: ical.h icalproperty_cxx.lo: ical.h icalvalue_cxx.lo: ical.h vcomponent.lo: ical.h # housekeeping CONFIG_CLEAN_FILES = y.output CLEANFILES = $(BUILT_SOURCES) $(BUILT_COMBINEDHEADERS) dist-hook: cd $(distdir); rm -f $(BUILT_SOURCES) cd $(distdir); rm -f ical.h icalversion.h EXTRA_DIST = \ icalderivedparameter.c.in \ icalderivedparameter.h.in \ icalderivedproperty.c.in \ icalderivedproperty.h.in \ icalrestriction.c.in \ icalderivedvalue.c.in \ icalderivedvalue.h.in \ icalversion.h.in $(srcdir)/icalcomponent.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h icalderivedparameter.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h icalderivedproperty.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h icalderivedvalue.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalduration.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icallangbind.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalmime.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalparameter.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalparser.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalproperty.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h icalrestriction.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icaltime.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalvalue.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h libical-1.0/src/libical/icalderivedparameter.h.in0000664000076400007640000000176412132563132021061 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalparam.h CREATOR: eric 20 March 1999 $Id: icalderivedparameter.h.in,v 1.4 2007-04-30 13:57:48 artcancro Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparam.h ======================================================================*/ #ifndef ICALDERIVEDPARAMETER_H #define ICALDERIVEDPARAMETER_H typedef struct icalparameter_impl icalparameter; const char* icalparameter_enum_to_string(int e); int icalparameter_string_to_enum(const char* str); libical-1.0/src/libical/autogenex/0000775000076400007640000000000012132563130016114 5ustar allenallenlibical-1.0/src/libical/autogenex/icalrestriction.c0000664000076400007640000044540412132563130021471 0ustar allenallen/* -*- Mode: C -*- */ /* ====================================================================== File: icalrestriction.c This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ /*#line 7 "icalrestriction.c.in"*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalrestriction.h" #include "icalenums.h" #include "icalerror.h" #include #include /* For snprintf */ #define TMP_BUF_SIZE 1024 #ifdef WIN32 #define snprintf _snprintf #endif #ifdef _MSC_VER #define strcasecmp stricmp #endif /* Define the structs for the restrictions. these data are filled out in machine generated code below */ struct icalrestriction_property_record; typedef char* (*restriction_func)(struct icalrestriction_property_record* rec,icalcomponent* comp,icalproperty* prop); typedef struct icalrestriction_property_record { icalproperty_method method; icalcomponent_kind component; icalproperty_kind property; icalrestriction_kind restriction; restriction_func function; } icalrestriction_property_record; typedef struct icalrestriction_component_record { icalproperty_method method; icalcomponent_kind component; icalcomponent_kind subcomponent; icalrestriction_kind restriction; restriction_func function; } icalrestriction_component_record; icalrestriction_property_record* icalrestriction_get_property_restriction(icalproperty_method method, icalcomponent_kind component, icalproperty_kind property); icalrestriction_component_record* icalrestriction_get_component_restriction(icalproperty_method method, icalcomponent_kind component, icalcomponent_kind subcomponent); icalrestriction_component_record icalrestriction_component_records[]; icalrestriction_property_record icalrestriction_property_records[]; icalrestriction_property_record null_prop_record = {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_UNKNOWN,0}; icalrestriction_component_record null_comp_record = {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_UNKNOWN,0}; /** The each row gives the result of comparing a restriction against a count. The columns in each row represent 0,1,2+. '-1' indicates 'invalid, 'don't care' or 'needs more analysis' So, for ICAL_RESTRICTION_ONE, if there is 1 of a property with that restriction, it passes, but if there are 0 or 2+, it fails. */ char compare_map[ICAL_RESTRICTION_UNKNOWN+1][3] = { { 1, 1, 1},/*ICAL_RESTRICTION_NONE*/ { 1, 0, 0},/*ICAL_RESTRICTION_ZERO*/ { 0, 1, 0},/*ICAL_RESTRICTION_ONE*/ { 1, 1, 1},/*ICAL_RESTRICTION_ZEROPLUS*/ { 0, 1, 1},/*ICAL_RESTRICTION_ONEPLUS*/ { 1, 1, 0},/*ICAL_RESTRICTION_ZEROORONE*/ { 1, 1, 0},/*ICAL_RESTRICTION_ONEEXCLUSIVE*/ { 1, 1, 0},/*ICAL_RESTRICTION_ONEMUTUAL*/ { 1, 1, 1} /*ICAL_RESTRICTION_UNKNOWN*/ }; char restr_string_map[ICAL_RESTRICTION_UNKNOWN+1][60] = { "unknown number",/*ICAL_RESTRICTION_NONE*/ "0",/*ICAL_RESTRICTION_ZERO*/ "1",/*ICAL_RESTRICTION_ONE*/ "zero or more",/*ICAL_RESTRICTION_ZEROPLUS*/ "one or more" ,/*ICAL_RESTRICTION_ONEPLUS*/ "zero or one",/*ICAL_RESTRICTION_ZEROORONE*/ "zero or one, exclusive with another property",/*ICAL_RESTRICTION_ONEEXCLUSIVE*/ "zero or one, mutual with another property",/*ICAL_RESTRICTION_ONEMUTUAL*/ "unknown number" /*ICAL_RESTRICTION_UNKNOWN*/ }; int icalrestriction_compare(icalrestriction_kind restr, int count){ if ( restr < ICAL_RESTRICTION_NONE || restr > ICAL_RESTRICTION_UNKNOWN || count < 0){ return -1; } if (count > 2) { count = 2; } return compare_map[restr][count]; } /* Special case routines */ char* icalrestriction_may_be_draft_final_canceled( icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_status stat = icalproperty_get_status(prop); if( !( stat == ICAL_STATUS_DRAFT || stat == ICAL_STATUS_FINAL || stat == ICAL_STATUS_CANCELLED )){ return "Failed iTIP restrictions for STATUS property. Value must be one of DRAFT, FINAL, or CANCELED"; } return 0; } char* icalrestriction_may_be_comp_need_process( icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_status stat = icalproperty_get_status(prop); if( !( stat == ICAL_STATUS_COMPLETED || stat == ICAL_STATUS_NEEDSACTION || stat == ICAL_STATUS_INPROCESS )){ return "Failed iTIP restrictions for STATUS property. Value must be one of COMPLETED, NEEDS-ACTION or IN-PROCESS"; } return 0; } char* icalrestriction_may_be_tent_conf(icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ icalproperty_status stat = icalproperty_get_status(prop); if( !( stat == ICAL_STATUS_TENTATIVE || stat == ICAL_STATUS_CONFIRMED )){ return "Failed iTIP restrictions for STATUS property. Value must be one of TENTATIVE or CONFIRMED"; } return 0; } char* icalrestriction_may_be_tent_conf_cancel( icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_status stat = icalproperty_get_status(prop); if( !( stat == ICAL_STATUS_TENTATIVE || stat == ICAL_STATUS_CONFIRMED || stat == ICAL_STATUS_CANCELLED )){ return "Failed iTIP restrictions for STATUS property. Value must be one of TENTATIVE, CONFIRMED or CANCELED"; } return 0; } char* icalrestriction_must_be_cancel_if_present( icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { /* This routine will not be called if prop == 0 */ icalproperty_status stat = icalproperty_get_status(prop); if( stat != ICAL_STATUS_CANCELLED) { return "Failed iTIP restrictions for STATUS property. Value must be CANCELLED"; } return 0; } char* icalrestriction_must_be_canceled_no_attendee( icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { /* Hack. see rfc2446, 3.2.5 CANCEL for porperty STATUS. I don't understand the note */ return 0; } char* icalrestriction_must_be_recurring(icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ /* Hack */ return 0; } char* icalrestriction_must_have_duration(icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ if( !icalcomponent_get_first_property(comp,ICAL_DURATION_PROPERTY)){ return "Failed iTIP restrictions. This component must have a DURATION property"; } return 0; } char* icalrestriction_must_have_repeat(icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ if( !icalcomponent_get_first_property(comp,ICAL_REPEAT_PROPERTY)){ return "Failed iTIP restrictions. This component must have a REPEAT property"; } return 0; } char* icalrestriction_must_if_tz_ref(icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ /* Hack */ return 0; } char* icalrestriction_no_dtend(icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ if( icalcomponent_get_first_property(comp,ICAL_DTEND_PROPERTY)){ return "Failed iTIP restrictions. The component must not have both DURATION and DTEND"; } return 0; } char* icalrestriction_no_duration(icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ /* _no_dtend takes care of this one */ return 0; } char* icalrestriction_must_be_email( icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_status stat = icalproperty_get_action(prop); if( !( stat == ICAL_ACTION_EMAIL)){ return "Failed iTIP restrictions for ACTION property. Value must be EMAIL."; } return 0; } int icalrestriction_check_component(icalproperty_method method, icalcomponent* comp) { icalproperty_kind kind; icalcomponent_kind comp_kind; icalrestriction_kind restr; icalrestriction_property_record *prop_record; char* funcr = 0; icalproperty *prop; int count; int compare; int valid = 1; comp_kind = icalcomponent_isa(comp); /* Check all of the properties in this component */ for(kind = ICAL_ANY_PROPERTY+1; kind != ICAL_NO_PROPERTY; kind++){ count = icalcomponent_count_properties(comp, kind); prop_record = icalrestriction_get_property_restriction(method, comp_kind, kind); restr = prop_record->restriction; if(restr == ICAL_RESTRICTION_ONEEXCLUSIVE || restr == ICAL_RESTRICTION_ONEMUTUAL) { /* First treat is as a 0/1 restriction */ restr = ICAL_RESTRICTION_ZEROORONE; compare = icalrestriction_compare(restr,count); } else { compare = icalrestriction_compare(restr,count); } assert(compare != -1); if (compare == 0){ char temp[TMP_BUF_SIZE]; snprintf(temp, TMP_BUF_SIZE,"Failed iTIP restrictions for %s property. Expected %s instances of the property and got %d", icalenum_property_kind_to_string(kind), restr_string_map[restr], count); icalcomponent_add_property (comp, icalproperty_vanew_xlicerror( temp, icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP), 0)); } prop = icalcomponent_get_first_property(comp, kind); if (prop != 0 && prop_record->function !=0 ){ funcr = prop_record->function(prop_record,comp,prop); } if(funcr !=0){ icalcomponent_add_property (comp, icalproperty_vanew_xlicerror( funcr, icalparameter_new_xlicerrortype( ICAL_XLICERRORTYPE_INVALIDITIP), 0)); compare = 0; } valid = valid && compare; } return valid; } int icalrestriction_check(icalcomponent* outer_comp) { icalcomponent_kind comp_kind; icalproperty_method method; icalcomponent* inner_comp; icalproperty *method_prop; int valid; icalerror_check_arg_rz( (outer_comp!=0), "outer comp"); /* Get the Method value from the outer component */ comp_kind = icalcomponent_isa(outer_comp); if (comp_kind != ICAL_VCALENDAR_COMPONENT){ icalerror_set_errno(ICAL_BADARG_ERROR); return 0; } method_prop = icalcomponent_get_first_property(outer_comp, ICAL_METHOD_PROPERTY); if (method_prop == 0){ method = ICAL_METHOD_NONE; } else { method = icalproperty_get_method(method_prop); } /* Check the VCALENDAR wrapper */ valid = icalrestriction_check_component(ICAL_METHOD_NONE,outer_comp); /* Now check the inner components */ for(inner_comp= icalcomponent_get_first_component(outer_comp, ICAL_ANY_COMPONENT); inner_comp != 0; inner_comp= icalcomponent_get_next_component(outer_comp, ICAL_ANY_COMPONENT)){ valid = valid && icalrestriction_check_component(method,inner_comp); } return valid; } icalrestriction_property_record* icalrestriction_get_property_restriction(icalproperty_method method, icalcomponent_kind component, icalproperty_kind property) { int i; for(i = 0; icalrestriction_property_records[i].restriction != ICAL_RESTRICTION_NONE; i++){ if (method == icalrestriction_property_records[i].method && component == icalrestriction_property_records[i].component && property == icalrestriction_property_records[i].property ){ return &icalrestriction_property_records[i]; } } return &null_prop_record; } icalrestriction_component_record* icalrestriction_get_component_restriction(icalproperty_method method, icalcomponent_kind component, icalcomponent_kind subcomponent) { int i; for(i = 0; icalrestriction_component_records[i].restriction != ICAL_RESTRICTION_NONE; i++){ if (method == icalrestriction_component_records[i].method && component == icalrestriction_component_records[i].component && subcomponent == icalrestriction_component_records[i].subcomponent ){ return &icalrestriction_component_records[i]; } } return &null_comp_record; } /* Everything below this line is machine generated. Do not edit. */ icalrestriction_property_record icalrestriction_property_records[] = { {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_duration}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_dtend}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_may_be_tent_conf_cancel}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_duration}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_dtend}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_may_be_tent_conf}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_duration}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_dtend}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_duration}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_dtend}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_may_be_tent_conf}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,icalrestriction_must_be_recurring}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE ,icalrestriction_no_duration}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_dtend}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_canceled_no_attendee}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_duration}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_dtend}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_may_be_tent_conf_cancel}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_may_be_comp_need_process}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_may_be_comp_need_process}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,icalrestriction_must_be_recurring}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_canceled_no_attendee}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_may_be_comp_need_process}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_may_be_draft_final_canceled}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_cancel_if_present}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_PUBLISH,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REQUEST,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REQUEST,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REPLY,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_ADD,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_CANCEL,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_REFRESH,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REFRESH,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REFRESH,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_COUNTER,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VAGENDA_COMPONENT,ICAL_ALLOWCONFLICT_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VAGENDA_COMPONENT,ICAL_CALMASTER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VAGENDA_COMPONENT,ICAL_OWNER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VAGENDA_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VAGENDA_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VAGENDA_COMPONENT,ICAL_DEFAULTCHARSET_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VAGENDA_COMPONENT,ICAL_DEFAULTLOCALE_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VAGENDA_COMPONENT,ICAL_DEFAULTTZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_duration}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_no_dtend}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RELCALID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_be_recurring}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_must_have_repeat}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_must_have_duration}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_must_have_repeat}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_must_have_duration}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,icalrestriction_must_be_email}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_must_have_repeat}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_must_have_duration}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_must_have_repeat}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_must_have_duration}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VQUERY_COMPONENT,ICAL_QUERY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_NONE,ICAL_VQUERY_COMPONENT,ICAL_QUERYNAME_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_VQUERY_COMPONENT,ICAL_EXPAND_PROPERTY,ICAL_RESTRICTION_ONE,0}, {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE} }; icalrestriction_component_record icalrestriction_component_records[] = { {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,icalrestriction_must_if_tz_ref}, {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_XSTANDARD_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_XDAYLIGHT_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE} }; libical-1.0/src/libical/autogenex/icalderivedvalue.c0000664000076400007640000006466312132563130021607 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue.c CREATOR: eric 02 May 1999 $Id: icalderivedvalue.c,v 1.5 2002-09-01 19:12:31 gray-john Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.c Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalerror.h" #include "icalmemory.h" #include "icalparser.h" #include "icalenums.h" #include "icalvalueimpl.h" #include /* for malloc */ #include /* for sprintf */ #include /* For memset, others */ #include /* For offsetof() macro */ #include #include /* for mktime */ #include /* for atoi and atof */ #include /* for SHRT_MAX */ struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind); /* This map associates each of the value types with its string representation */ struct icalvalue_kind_map { icalvalue_kind kind; char name[20]; }; static struct icalvalue_kind_map value_map[28]={ {ICAL_BOOLEAN_VALUE,"BOOLEAN"}, {ICAL_UTCOFFSET_VALUE,"UTC-OFFSET"}, {ICAL_XLICCLASS_VALUE,"X-LIC-CLASS"}, {ICAL_RECUR_VALUE,"RECUR"}, {ICAL_METHOD_VALUE,"METHOD"}, {ICAL_CALADDRESS_VALUE,"CAL-ADDRESS"}, {ICAL_PERIOD_VALUE,"PERIOD"}, {ICAL_STATUS_VALUE,"STATUS"}, {ICAL_BINARY_VALUE,"BINARY"}, {ICAL_TEXT_VALUE,"TEXT"}, {ICAL_DURATION_VALUE,"DURATION"}, {ICAL_DATETIMEPERIOD_VALUE,"DATE-TIME-PERIOD"}, {ICAL_INTEGER_VALUE,"INTEGER"}, {ICAL_URI_VALUE,"URI"}, {ICAL_TRIGGER_VALUE,"TRIGGER"}, {ICAL_ATTACH_VALUE,"ATTACH"}, {ICAL_CLASS_VALUE,"CLASS"}, {ICAL_FLOAT_VALUE,"FLOAT"}, {ICAL_QUERY_VALUE,"QUERY"}, {ICAL_STRING_VALUE,"STRING"}, {ICAL_TRANSP_VALUE,"TRANSP"}, {ICAL_X_VALUE,"X"}, {ICAL_DATETIME_VALUE,"DATE-TIME"}, {ICAL_REQUESTSTATUS_VALUE,"REQUEST-STATUS"}, {ICAL_GEO_VALUE,"GEO"}, {ICAL_DATE_VALUE,"DATE"}, {ICAL_ACTION_VALUE,"ACTION"}, {ICAL_NO_VALUE,""} }; icalvalue* icalvalue_new_boolean (int v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_BOOLEAN_VALUE); icalvalue_set_boolean((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_boolean(icalvalue* value, int v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_BOOLEAN_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_int = v; icalvalue_reset_kind(impl); } int icalvalue_get_boolean(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_BOOLEAN_VALUE); return ((struct icalvalue_impl*)value)->data.v_int; } icalvalue* icalvalue_new_utcoffset (int v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_UTCOFFSET_VALUE); icalvalue_set_utcoffset((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_utcoffset(icalvalue* value, int v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_UTCOFFSET_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_int = v; icalvalue_reset_kind(impl); } int icalvalue_get_utcoffset(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_UTCOFFSET_VALUE); return ((struct icalvalue_impl*)value)->data.v_int; } icalvalue* icalvalue_new_xlicclass (enum icalproperty_xlicclass v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_XLICCLASS_VALUE); icalvalue_set_xlicclass((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_xlicclass(icalvalue* value, enum icalproperty_xlicclass v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_XLICCLASS_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_enum = v; icalvalue_reset_kind(impl); } enum icalproperty_xlicclass icalvalue_get_xlicclass(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_XLICCLASS_VALUE); return ((struct icalvalue_impl*)value)->data.v_enum; } icalvalue* icalvalue_new_method (enum icalproperty_method v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_METHOD_VALUE); icalvalue_set_method((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_method(icalvalue* value, enum icalproperty_method v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_METHOD_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_enum = v; icalvalue_reset_kind(impl); } enum icalproperty_method icalvalue_get_method(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_METHOD_VALUE); return ((struct icalvalue_impl*)value)->data.v_enum; } icalvalue* icalvalue_new_caladdress (const char* v){ icalerror_check_arg_rz( (v!=0),"v"); struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_CALADDRESS_VALUE); icalvalue_set_caladdress((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_caladdress(icalvalue* value, const char* v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_value_type(value, ICAL_CALADDRESS_VALUE); impl = (struct icalvalue_impl*)value; if(impl->data.v_string!=0) {free((void*)impl->data.v_string);} impl->data.v_string = icalmemory_strdup(v); if (impl->data.v_string == 0){ errno = ENOMEM; } icalvalue_reset_kind(impl); } const char* icalvalue_get_caladdress(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_CALADDRESS_VALUE); return ((struct icalvalue_impl*)value)->data.v_string; } icalvalue* icalvalue_new_period (struct icalperiodtype v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_PERIOD_VALUE); icalvalue_set_period((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_period(icalvalue* value, struct icalperiodtype v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_PERIOD_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_period = v; icalvalue_reset_kind(impl); } struct icalperiodtype icalvalue_get_period(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_PERIOD_VALUE); return ((struct icalvalue_impl*)value)->data.v_period; } icalvalue* icalvalue_new_status (enum icalproperty_status v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_STATUS_VALUE); icalvalue_set_status((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_status(icalvalue* value, enum icalproperty_status v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_STATUS_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_enum = v; icalvalue_reset_kind(impl); } enum icalproperty_status icalvalue_get_status(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_STATUS_VALUE); return ((struct icalvalue_impl*)value)->data.v_enum; } icalvalue* icalvalue_new_binary (const char* v){ icalerror_check_arg_rz( (v!=0),"v"); struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_BINARY_VALUE); icalvalue_set_binary((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_binary(icalvalue* value, const char* v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_value_type(value, ICAL_BINARY_VALUE); impl = (struct icalvalue_impl*)value; if(impl->data.v_string!=0) {free((void*)impl->data.v_string);} impl->data.v_string = icalmemory_strdup(v); if (impl->data.v_string == 0){ errno = ENOMEM; } icalvalue_reset_kind(impl); } const char* icalvalue_get_binary(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_BINARY_VALUE); return ((struct icalvalue_impl*)value)->data.v_string; } icalvalue* icalvalue_new_text (const char* v){ icalerror_check_arg_rz( (v!=0),"v"); struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TEXT_VALUE); icalvalue_set_text((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_text(icalvalue* value, const char* v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_value_type(value, ICAL_TEXT_VALUE); impl = (struct icalvalue_impl*)value; if(impl->data.v_string!=0) {free((void*)impl->data.v_string);} impl->data.v_string = icalmemory_strdup(v); if (impl->data.v_string == 0){ errno = ENOMEM; } icalvalue_reset_kind(impl); } const char* icalvalue_get_text(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_TEXT_VALUE); return ((struct icalvalue_impl*)value)->data.v_string; } icalvalue* icalvalue_new_duration (struct icaldurationtype v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DURATION_VALUE); icalvalue_set_duration((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_duration(icalvalue* value, struct icaldurationtype v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_DURATION_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_duration = v; icalvalue_reset_kind(impl); } struct icaldurationtype icalvalue_get_duration(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_DURATION_VALUE); return ((struct icalvalue_impl*)value)->data.v_duration; } icalvalue* icalvalue_new_integer (int v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_INTEGER_VALUE); icalvalue_set_integer((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_integer(icalvalue* value, int v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_INTEGER_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_int = v; icalvalue_reset_kind(impl); } int icalvalue_get_integer(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_INTEGER_VALUE); return ((struct icalvalue_impl*)value)->data.v_int; } icalvalue* icalvalue_new_uri (const char* v){ icalerror_check_arg_rz( (v!=0),"v"); struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_URI_VALUE); icalvalue_set_uri((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_uri(icalvalue* value, const char* v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_value_type(value, ICAL_URI_VALUE); impl = (struct icalvalue_impl*)value; if(impl->data.v_string!=0) {free((void*)impl->data.v_string);} impl->data.v_string = icalmemory_strdup(v); if (impl->data.v_string == 0){ errno = ENOMEM; } icalvalue_reset_kind(impl); } const char* icalvalue_get_uri(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_URI_VALUE); return ((struct icalvalue_impl*)value)->data.v_string; } icalvalue* icalvalue_new_class (enum icalproperty_class v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_CLASS_VALUE); icalvalue_set_class((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_class(icalvalue* value, enum icalproperty_class v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_CLASS_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_enum = v; icalvalue_reset_kind(impl); } enum icalproperty_class icalvalue_get_class(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_CLASS_VALUE); return ((struct icalvalue_impl*)value)->data.v_enum; } icalvalue* icalvalue_new_float (float v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_FLOAT_VALUE); icalvalue_set_float((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_float(icalvalue* value, float v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_FLOAT_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_float = v; icalvalue_reset_kind(impl); } float icalvalue_get_float(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_FLOAT_VALUE); return ((struct icalvalue_impl*)value)->data.v_float; } icalvalue* icalvalue_new_query (const char* v){ icalerror_check_arg_rz( (v!=0),"v"); struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_QUERY_VALUE); icalvalue_set_query((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_query(icalvalue* value, const char* v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_value_type(value, ICAL_QUERY_VALUE); impl = (struct icalvalue_impl*)value; if(impl->data.v_string!=0) {free((void*)impl->data.v_string);} impl->data.v_string = icalmemory_strdup(v); if (impl->data.v_string == 0){ errno = ENOMEM; } icalvalue_reset_kind(impl); } const char* icalvalue_get_query(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_QUERY_VALUE); return ((struct icalvalue_impl*)value)->data.v_string; } icalvalue* icalvalue_new_string (const char* v){ icalerror_check_arg_rz( (v!=0),"v"); struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_STRING_VALUE); icalvalue_set_string((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_string(icalvalue* value, const char* v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_value_type(value, ICAL_STRING_VALUE); impl = (struct icalvalue_impl*)value; if(impl->data.v_string!=0) {free((void*)impl->data.v_string);} impl->data.v_string = icalmemory_strdup(v); if (impl->data.v_string == 0){ errno = ENOMEM; } icalvalue_reset_kind(impl); } const char* icalvalue_get_string(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_STRING_VALUE); return ((struct icalvalue_impl*)value)->data.v_string; } icalvalue* icalvalue_new_transp (enum icalproperty_transp v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TRANSP_VALUE); icalvalue_set_transp((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_transp(icalvalue* value, enum icalproperty_transp v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_TRANSP_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_enum = v; icalvalue_reset_kind(impl); } enum icalproperty_transp icalvalue_get_transp(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_TRANSP_VALUE); return ((struct icalvalue_impl*)value)->data.v_enum; } icalvalue* icalvalue_new_datetime (struct icaltimetype v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIME_VALUE); icalvalue_set_datetime((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_DATETIME_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_time = v; icalvalue_reset_kind(impl); } struct icaltimetype icalvalue_get_datetime(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_DATETIME_VALUE); return ((struct icalvalue_impl*)value)->data.v_time; } icalvalue* icalvalue_new_requeststatus (struct icalreqstattype v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_REQUESTSTATUS_VALUE); icalvalue_set_requeststatus((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_requeststatus(icalvalue* value, struct icalreqstattype v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_REQUESTSTATUS_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_requeststatus = v; icalvalue_reset_kind(impl); } struct icalreqstattype icalvalue_get_requeststatus(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_REQUESTSTATUS_VALUE); return ((struct icalvalue_impl*)value)->data.v_requeststatus; } icalvalue* icalvalue_new_geo (struct icalgeotype v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_GEO_VALUE); icalvalue_set_geo((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_geo(icalvalue* value, struct icalgeotype v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_GEO_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_geo = v; icalvalue_reset_kind(impl); } struct icalgeotype icalvalue_get_geo(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_GEO_VALUE); return ((struct icalvalue_impl*)value)->data.v_geo; } icalvalue* icalvalue_new_date (struct icaltimetype v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATE_VALUE); icalvalue_set_date((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_date(icalvalue* value, struct icaltimetype v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_DATE_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_time = v; icalvalue_reset_kind(impl); } struct icaltimetype icalvalue_get_date(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_DATE_VALUE); return ((struct icalvalue_impl*)value)->data.v_time; } icalvalue* icalvalue_new_action (enum icalproperty_action v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_ACTION_VALUE); icalvalue_set_action((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_action(icalvalue* value, enum icalproperty_action v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_ACTION_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_enum = v; icalvalue_reset_kind(impl); } enum icalproperty_action icalvalue_get_action(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_ACTION_VALUE); return ((struct icalvalue_impl*)value)->data.v_enum; } int icalvalue_kind_is_valid(const icalvalue_kind kind) { int i = 0; do { if (value_map[i].kind == kind) return 1; } while (value_map[i++].kind != ICAL_NO_VALUE); return 0; } const char* icalvalue_kind_to_string(const icalvalue_kind kind) { int i; for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) { if (value_map[i].kind == kind) { return value_map[i].name; } } return 0; } icalvalue_kind icalvalue_string_to_kind(const char* str) { int i; for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) { if (strcmp(value_map[i].name,str) == 0) { return value_map[i].kind; } } return value_map[i].kind; } icalvalue* icalvalue_new_x (const char* v){ icalerror_check_arg_rz( (v!=0),"v"); struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_X_VALUE); icalvalue_set_x((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_x(icalvalue* impl, const char* v) { icalerror_check_arg_rv( (impl!=0),"value"); icalerror_check_arg_rv( (v!=0),"v"); if(impl->x_value!=0) {free((void*)impl->x_value);} impl->x_value = icalmemory_strdup(v); if (impl->x_value == 0){ errno = ENOMEM; } } const char* icalvalue_get_x(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_X_VALUE); return value->x_value; } /* Recur is a special case, so it is not auto generated. */ icalvalue* icalvalue_new_recur (struct icalrecurrencetype v) { struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_RECUR_VALUE); icalvalue_set_recur((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_recur(icalvalue* impl, struct icalrecurrencetype v) { icalerror_check_arg_rv( (impl!=0),"value"); icalerror_check_value_type(value, ICAL_RECUR_VALUE); if (impl->data.v_recur != 0){ free(impl->data.v_recur); impl->data.v_recur = 0; } impl->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); if (impl->data.v_recur == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } else { memcpy(impl->data.v_recur, &v, sizeof(struct icalrecurrencetype)); } } struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value) { icalerror_check_arg( (value!=0),"value"); icalerror_check_value_type(value, ICAL_RECUR_VALUE); return *(value->data.v_recur); } icalvalue* icalvalue_new_trigger (struct icaltriggertype v) { struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TRIGGER_VALUE); icalvalue_set_trigger((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v) { icalerror_check_arg_rv( (value!=0),"value"); if(!icaltime_is_null_time(v.time)){ icalvalue_set_datetime(value,v.time); value->kind = ICAL_DATETIME_VALUE; } else { icalvalue_set_duration(value,v.duration); value->kind = ICAL_DURATION_VALUE; } } struct icaltriggertype icalvalue_get_trigger(const icalvalue* impl) { struct icaltriggertype tr; icalerror_check_arg( (impl!=0),"value"); icalerror_check_arg( (impl!=0),"value"); if(impl->kind == ICAL_DATETIME_VALUE){ tr.duration = icaldurationtype_from_int(0); tr.time = impl->data.v_time; } else if(impl->kind == ICAL_DURATION_VALUE){ tr.time = icaltime_null_time(); tr.duration = impl->data.v_duration; } else { tr.duration = icaldurationtype_from_int(0); tr.time = icaltime_null_time(); icalerror_set_errno(ICAL_BADARG_ERROR); } return tr; } /* DATE-TIME-PERIOD is a special case, and is not auto generated */ icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v) { struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIMEPERIOD_VALUE); icalvalue_set_datetimeperiod(impl,v); return (icalvalue*)impl; } void icalvalue_set_datetimeperiod(icalvalue* impl, struct icaldatetimeperiodtype v) { icalerror_check_arg_rv( (impl!=0),"value"); icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); if(!icaltime_is_null_time(v.time)){ if(!icaltime_is_valid_time(v.time)){ icalerror_set_errno(ICAL_BADARG_ERROR); return; } impl->kind = ICAL_DATETIME_VALUE; icalvalue_set_datetime(impl,v.time); } else if (!icalperiodtype_is_null_period(v.period)) { if(!icalperiodtype_is_valid_period(v.period)){ icalerror_set_errno(ICAL_BADARG_ERROR); return; } impl->kind = ICAL_PERIOD_VALUE; icalvalue_set_period(impl,v.period); } else { icalerror_set_errno(ICAL_BADARG_ERROR); } } struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* impl) { struct icaldatetimeperiodtype dtp; icalerror_check_arg( (impl!=0),"value"); icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); if(impl->kind == ICAL_DATETIME_VALUE){ dtp.period = icalperiodtype_null_period(); dtp.time = impl->data.v_time; } else if(impl->kind == ICAL_PERIOD_VALUE) { dtp.period = impl->data.v_period; dtp.time = icaltime_null_time(); } else { dtp.period = icalperiodtype_null_period(); dtp.time = icaltime_null_time(); icalerror_set_errno(ICAL_BADARG_ERROR); } return dtp; } icalvalue * icalvalue_new_attach (icalattach *attach) { struct icalvalue_impl *impl; icalerror_check_arg_rz ((attach != NULL), "attach"); impl = icalvalue_new_impl (ICAL_ATTACH_VALUE); if (!impl) { errno = ENOMEM; return NULL; } icalvalue_set_attach ((icalvalue *) impl, attach); return (icalvalue *) impl; } void icalvalue_set_attach (icalvalue *value, icalattach *attach) { struct icalvalue_impl *impl; icalerror_check_arg_rv ((value != NULL), "value"); icalerror_check_value_type (value, ICAL_ATTACH_VALUE); icalerror_check_arg_rv ((attach != NULL), "attach"); impl = (struct icalvalue_impl *) value; icalattach_ref (attach); if (impl->data.v_attach) icalattach_unref (impl->data.v_attach); impl->data.v_attach = attach; } icalattach * icalvalue_get_attach (const icalvalue *value) { icalerror_check_arg_rz ((value != NULL), "value"); icalerror_check_value_type (value, ICAL_ATTACH_VALUE); return value->data.v_attach; } /* The remaining interfaces are 'new', 'set' and 'get' for each of the value types */ /* Everything below this line is machine generated. Do not edit. */ libical-1.0/src/libical/autogenex/ical.h0000664000076400007640000035513412132563130017210 0ustar allenallen#ifndef LIBICAL_ICAL_H #define LIBICAL_ICAL_H #ifdef __cplusplus extern "C" { #endif /* config.h. Generated automatically by configure. */ /* config.h.in. Generated automatically from configure.in by autoheader. */ /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define to `unsigned' if doesn't define. */ /* #undef size_t */ /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if your declares struct tm. */ /* #undef TM_IN_SYS_TIME */ /* Define if lex declares yytext as a char * by default, not a char[]. */ #define YYTEXT_POINTER 1 /* Define if you have the gmtime_r function. */ #define HAVE_GMTIME_R 1 /* Define if you have the iswspace function. */ #define HAVE_ISWSPACE 1 /* Define if you have the snprintf function. */ #define HAVE_SNPRINTF 1 /* Define if you have the strdup function. */ #define HAVE_STRDUP 1 /* Define if you have the header file. */ #define HAVE_ASSERT_H 1 /* Define if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define if you have the header file. */ #define HAVE_PTHREAD_H 1 /* Define if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define if you have the header file. */ #define HAVE_TIME_H 1 /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define if you have the header file. */ #define HAVE_WCTYPE_H 1 /* Name of package */ #define PACKAGE "libical" /* Version number of package */ #define VERSION "0.24" /* Define if we want _REENTRANT */ /* #undef ICAL_REENTRANT */ /* Define to make icalerror_* calls abort instead of internally signalling an error */ #define ICAL_ERRORS_ARE_FATAL 1 /* Define to 1 if you DO NOT WANT to see deprecated messages */ #define NO_WARN_DEPRECATED 1 /* Define to 1 if you DO NO WANT to see the warning messages related to ICAL_MALFORMEDDATA_ERROR and parsing .ics zoneinfo files */ #define NO_WARN_ICAL_MALFORMEDDATA_ERROR_HACK 1 /* Define to terminate lines with n instead of rn */ #define ICAL_UNIX_NEWLINE 1 /* Define if we have pthread. */ #define HAVE_PTHREAD /* Define if we have pthread. */ #define HAVE_PTHREAD #ifndef ICAL_VERSION_H #define ICAL_VERSION_H #define ICAL_PACKAGE "libical" #define ICAL_VERSION "0.24" #endif /* -*- Mode: C -*- */ /*====================================================================== FILE: icaltime.h CREATOR: eric 02 June 2000 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ /** @file icaltime.h * @brief struct icaltimetype is a pseudo-object that abstracts time * handling. * * It can represent either a DATE or a DATE-TIME (floating, UTC or in a * given timezone), and it keeps track internally of its native timezone. * * The typical usage is to call the correct constructor specifying the * desired timezone. If this is not known until a later time, the * correct behavior is to specify a NULL timezone and call * icaltime_convert_to_zone() at a later time. * * There are several ways to create a new icaltimetype: * * - icaltime_null_time() * - icaltime_null_date() * - icaltime_current_time_with_zone() * - icaltime_today() * - icaltime_from_timet_with_zone(time_t tm, int is_date, * icaltimezone *zone) * - icaltime_from_string_with_zone(const char* str, icaltimezone *zone) * - icaltime_from_day_of_year(short doy, short year) * - icaltime_from_week_number(short week_number, short year) * * italtimetype objects can be converted to different formats: * * - icaltime_as_timet(struct icaltimetype tt) * - icaltime_as_timet_with_zone(struct icaltimetype tt, * icaltimezone *zone) * - icaltime_as_ical_string(struct icaltimetype tt) * * Accessor methods include: * * - icaltime_get_timezone(struct icaltimetype t) * - icaltime_get_tzid(struct icaltimetype t) * - icaltime_set_timezone(struct icaltimetype t, const icaltimezone *zone) * - icaltime_day_of_year(struct icaltimetype t) * - icaltime_day_of_week(struct icaltimetype t) * - icaltime_start_doy_of_week(struct icaltimetype t) * - icaltime_week_number(struct icaltimetype t) * * Query methods include: * * - icaltime_is_null_time(struct icaltimetype t) * - icaltime_is_valid_time(struct icaltimetype t) * - icaltime_is_date(struct icaltimetype t) * - icaltime_is_utc(struct icaltimetype t) * - icaltime_is_floating(struct icaltimetype t) * * Modify, compare and utility methods include: * * - icaltime_add(struct icaltimetype t, struct icaldurationtype d) * - icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2) * - icaltime_compare_with_zone(struct icaltimetype a,struct icaltimetype b) * - icaltime_compare(struct icaltimetype a,struct icaltimetype b) * - icaltime_compare_date_only(struct icaltimetype a, * struct icaltimetype b) * - icaltime_adjust(struct icaltimetype *tt, int days, int hours, * int minutes, int seconds); * - icaltime_normalize(struct icaltimetype t); * - icaltime_convert_to_zone(const struct icaltimetype tt, * icaltimezone *zone); */ #ifndef ICALTIME_H #define ICALTIME_H #include /* An opaque struct representing a timezone. We declare this here to avoid a circular dependancy. */ #ifndef ICALTIMEONE_DEFINED #define ICALTIMEONE_DEFINED typedef struct _icaltimezone icaltimezone; #endif /** icaltime_span is returned by icalcomponent_get_span() */ struct icaltime_span { time_t start; /**< in UTC */ time_t end; /**< in UTC */ int is_busy; /**< 1->busy time, 0-> free time */ }; typedef struct icaltime_span icaltime_span; /* * FIXME * * is_utc is redundant, and might be considered a minor optimization. * It might be deprecated, so you should use icaltime_is_utc() instead. */ struct icaltimetype { int year; /**< Actual year, e.g. 2001. */ int month; /**< 1 (Jan) to 12 (Dec). */ int day; int hour; int minute; int second; int is_utc; /**< 1-> time is in UTC timezone */ int is_date; /**< 1 -> interpret this as date. */ int is_daylight; /**< 1 -> time is in daylight savings time. */ const icaltimezone *zone; /**< timezone */ }; typedef struct icaltimetype icaltimetype; /** Return a null time, which indicates no time has been set. This time represent the beginning of the epoch */ struct icaltimetype icaltime_null_time(void); /** Return a null date */ struct icaltimetype icaltime_null_date(void); /** Returns the current time in the given timezone, as an icaltimetype. */ struct icaltimetype icaltime_current_time_with_zone(const icaltimezone *zone); /** Returns the current day as an icaltimetype, with is_date set. */ struct icaltimetype icaltime_today(void); /** Convert seconds past UNIX epoch to a timetype*/ struct icaltimetype icaltime_from_timet(const time_t v, const int is_date); /** Convert seconds past UNIX epoch to a timetype, using timezones. */ struct icaltimetype icaltime_from_timet_with_zone(const time_t tm, const int is_date, const icaltimezone *zone); /** create a time from an ISO format string */ struct icaltimetype icaltime_from_string(const char* str); /** create a time from an ISO format string */ struct icaltimetype icaltime_from_string_with_zone(const char* str, const icaltimezone *zone); /** Create a new time, given a day of year and a year. */ struct icaltimetype icaltime_from_day_of_year(const short doy, const short year); /** @brief Contructor (TODO). * Create a new time from a weeknumber and a year. */ struct icaltimetype icaltime_from_week_number(const short week_number, const short year); /** Return the time as seconds past the UNIX epoch */ time_t icaltime_as_timet(const struct icaltimetype); /** Return the time as seconds past the UNIX epoch, using timezones. */ time_t icaltime_as_timet_with_zone(const struct icaltimetype tt, const icaltimezone *zone); /** Return a string represention of the time, in RFC2445 format. The string is owned by libical */ const char* icaltime_as_ical_string(const struct icaltimetype tt); /** @brief Return the timezone */ const icaltimezone *icaltime_get_timezone(const struct icaltimetype t); /** @brief Return the tzid, or NULL for a floating time */ char *icaltime_get_tzid(const struct icaltimetype t); /** @brief Set the timezone */ struct icaltimetype icaltime_set_timezone(struct icaltimetype *t, const icaltimezone *zone); /** Return the day of the year of the given time */ short icaltime_day_of_year(const struct icaltimetype t); /** Return the day of the week of the given time. Sunday is 1 */ short icaltime_day_of_week(const struct icaltimetype t); /** Return the day of the year for the Sunday of the week that the given time is within. */ short icaltime_start_doy_of_week(const struct icaltimetype t); /** Return the week number for the week the given time is within */ short icaltime_week_number(const struct icaltimetype t); /** Return true of the time is null. */ int icaltime_is_null_time(const struct icaltimetype t); /** Returns false if the time is clearly invalid, but is not null. This is usually the result of creating a new time type buy not clearing it, or setting one of the flags to an illegal value. */ int icaltime_is_valid_time(const struct icaltimetype t); /** @brief Returns true if time is of DATE type, false if DATE-TIME */ int icaltime_is_date(const struct icaltimetype t); /** @brief Returns true if time is relative to UTC zone */ int icaltime_is_utc(const struct icaltimetype t); /** @brief Returns true if time is a floating time */ int icaltime_is_floating(const struct icaltimetype t); /** Return -1, 0, or 1 to indicate that ab */ int icaltime_compare_with_zone(const struct icaltimetype a, const struct icaltimetype b); /** Return -1, 0, or 1 to indicate that ab */ int icaltime_compare(const struct icaltimetype a, const struct icaltimetype b); /** like icaltime_compare, but only use the date parts. */ int icaltime_compare_date_only(const struct icaltimetype a, const struct icaltimetype b); /** Adds or subtracts a number of days, hours, minutes and seconds. */ void icaltime_adjust(struct icaltimetype *tt, const int days, const int hours, const int minutes, const int seconds); /** Normalize the icaltime, so that all fields are within the normal range. */ struct icaltimetype icaltime_normalize(const struct icaltimetype t); /** convert tt, of timezone tzid, into a utc time. Does nothing if the time is already UTC. */ struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt, const icaltimezone *zone); /** Return the number of days in the given month */ short icaltime_days_in_month(const short month, const short year); /** @brief calculate an icaltimespan given a start and end time. */ struct icaltime_span icaltime_span_new(struct icaltimetype dtstart, struct icaltimetype dtend, int is_busy); /** @brief Returns true if the two spans overlap **/ int icaltime_span_overlaps(icaltime_span *s1, icaltime_span *s2); /** @brief Returns true if the span is totally within the containing * span */ int icaltime_span_contains(icaltime_span *s, icaltime_span *container); #endif /* !ICALTIME_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalduration.h CREATOR: eric 26 Jan 2001 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALDURATION_H #define ICALDURATION_H struct icaldurationtype { int is_neg; unsigned int days; unsigned int weeks; unsigned int hours; unsigned int minutes; unsigned int seconds; }; struct icaldurationtype icaldurationtype_from_int(int t); struct icaldurationtype icaldurationtype_from_string(const char*); int icaldurationtype_as_int(struct icaldurationtype duration); char* icaldurationtype_as_ical_string(struct icaldurationtype d); struct icaldurationtype icaldurationtype_null_duration(void); int icaldurationtype_is_null_duration(struct icaldurationtype d); struct icaltimetype icaltime_add(struct icaltimetype t, struct icaldurationtype d); struct icaldurationtype icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2); #endif /* !ICALDURATION_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalperiod.h CREATOR: eric 26 Jan 2001 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALPERIOD_H #define ICALPERIOD_H struct icalperiodtype { struct icaltimetype start; struct icaltimetype end; struct icaldurationtype duration; }; struct icalperiodtype icalperiodtype_from_string (const char* str); const char* icalperiodtype_as_ical_string(struct icalperiodtype p); struct icalperiodtype icalperiodtype_null_period(void); int icalperiodtype_is_null_period(struct icalperiodtype p); int icalperiodtype_is_valid_period(struct icalperiodtype p); #endif /* !ICALTIME_H */ /* -*- Mode: C -*-*/ /*====================================================================== FILE: icalenums.h (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalenums.h Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ #ifndef ICALENUMS_H #define ICALENUMS_H /*********************************************************************** * Component enumerations **********************************************************************/ typedef enum icalcomponent_kind { ICAL_NO_COMPONENT, ICAL_ANY_COMPONENT, /* Used to select all components*/ ICAL_XROOT_COMPONENT, ICAL_XATTACH_COMPONENT, /* MIME attached data, returned by parser. */ ICAL_VEVENT_COMPONENT, ICAL_VTODO_COMPONENT, ICAL_VJOURNAL_COMPONENT, ICAL_VCALENDAR_COMPONENT, ICAL_VAGENDA_COMPONENT, ICAL_VFREEBUSY_COMPONENT, ICAL_VALARM_COMPONENT, ICAL_XAUDIOALARM_COMPONENT, ICAL_XDISPLAYALARM_COMPONENT, ICAL_XEMAILALARM_COMPONENT, ICAL_XPROCEDUREALARM_COMPONENT, ICAL_VTIMEZONE_COMPONENT, ICAL_XSTANDARD_COMPONENT, ICAL_XDAYLIGHT_COMPONENT, ICAL_X_COMPONENT, ICAL_VSCHEDULE_COMPONENT, ICAL_VQUERY_COMPONENT, ICAL_VCAR_COMPONENT, ICAL_VCOMMAND_COMPONENT, ICAL_XLICINVALID_COMPONENT, ICAL_XLICMIMEPART_COMPONENT /* a non-stardard component that mirrors structure of MIME data */ } icalcomponent_kind; /*********************************************************************** * Request Status codes **********************************************************************/ typedef enum icalrequeststatus { ICAL_UNKNOWN_STATUS, ICAL_2_0_SUCCESS_STATUS, ICAL_2_1_FALLBACK_STATUS, ICAL_2_2_IGPROP_STATUS, ICAL_2_3_IGPARAM_STATUS, ICAL_2_4_IGXPROP_STATUS, ICAL_2_5_IGXPARAM_STATUS, ICAL_2_6_IGCOMP_STATUS, ICAL_2_7_FORWARD_STATUS, ICAL_2_8_ONEEVENT_STATUS, ICAL_2_9_TRUNC_STATUS, ICAL_2_10_ONETODO_STATUS, ICAL_2_11_TRUNCRRULE_STATUS, ICAL_3_0_INVPROPNAME_STATUS, ICAL_3_1_INVPROPVAL_STATUS, ICAL_3_2_INVPARAM_STATUS, ICAL_3_3_INVPARAMVAL_STATUS, ICAL_3_4_INVCOMP_STATUS, ICAL_3_5_INVTIME_STATUS, ICAL_3_6_INVRULE_STATUS, ICAL_3_7_INVCU_STATUS, ICAL_3_8_NOAUTH_STATUS, ICAL_3_9_BADVERSION_STATUS, ICAL_3_10_TOOBIG_STATUS, ICAL_3_11_MISSREQCOMP_STATUS, ICAL_3_12_UNKCOMP_STATUS, ICAL_3_13_BADCOMP_STATUS, ICAL_3_14_NOCAP_STATUS, ICAL_3_15_INVCOMMAND, ICAL_4_0_BUSY_STATUS, ICAL_4_1_STORE_ACCESS_DENIED, ICAL_4_2_STORE_FAILED, ICAL_4_3_STORE_NOT_FOUND, ICAL_5_0_MAYBE_STATUS, ICAL_5_1_UNAVAIL_STATUS, ICAL_5_2_NOSERVICE_STATUS, ICAL_5_3_NOSCHED_STATUS, ICAL_6_1_CONTAINER_NOT_FOUND, ICAL_9_0_UNRECOGNIZED_COMMAND } icalrequeststatus; const char* icalenum_reqstat_desc(icalrequeststatus stat); short icalenum_reqstat_major(icalrequeststatus stat); short icalenum_reqstat_minor(icalrequeststatus stat); icalrequeststatus icalenum_num_to_reqstat(short major, short minor); char* icalenum_reqstat_code(icalrequeststatus stat); /*********************************************************************** * Conversion functions **********************************************************************/ /* Thse routines used to be in icalenums.c, but were moved into the icalproperty, icalparameter, icalvalue, or icalcomponent modules. */ /* const char* icalproperty_kind_to_string(icalproperty_kind kind);*/ #define icalenum_property_kind_to_string(x) icalproperty_kind_to_string(x) /*icalproperty_kind icalproperty_string_to_kind(const char* string)*/ #define icalenum_string_to_property_kind(x) icalproperty_string_to_kind(x) /*icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind);*/ #define icalenum_property_kind_to_value_kind(x) icalproperty_kind_to_value_kind(x) /*const char* icalenum_method_to_string(icalproperty_method);*/ #define icalenum_method_to_string(x) icalproperty_method_to_string(x) /*icalproperty_method icalenum_string_to_method(const char* string);*/ #define icalenum_string_to_method(x) icalproperty_string_to_method(x) /*const char* icalenum_status_to_string(icalproperty_status);*/ #define icalenum_status_to_string(x) icalproperty_status_to_string(x) /*icalproperty_status icalenum_string_to_status(const char* string);*/ #define icalenum_string_to_status(x) icalproperty_string_to_status(x) /*icalvalue_kind icalenum_string_to_value_kind(const char* str);*/ #define icalenum_string_to_value_kind(x) icalvalue_string_to_kind(x) /*const char* icalenum_value_kind_to_string(icalvalue_kind kind);*/ #define icalenum_value_kind_to_string(x) icalvalue_kind_to_string(x) /*const char* icalenum_component_kind_to_string(icalcomponent_kind kind);*/ #define icalenum_component_kind_to_string(x) icalcomponent_kind_to_string(x) /*icalcomponent_kind icalenum_string_to_component_kind(const char* string);*/ #define icalenum_string_to_component_kind(x) icalcomponent_string_to_kind(x) #endif /* !ICALENUMS_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icaltypes.h CREATOR: eric 20 March 1999 (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icaltypes.h ======================================================================*/ #ifndef ICALTYPES_H #define ICALTYPES_H #include struct icalgeotype { float lat; float lon; }; struct icaldatetimeperiodtype { struct icaltimetype time; struct icalperiodtype period; }; struct icaltriggertype { struct icaltimetype time; struct icaldurationtype duration; }; struct icaltriggertype icaltriggertype_from_int(const int reltime); struct icaltriggertype icaltriggertype_from_string(const char* str); int icaltriggertype_is_null_trigger(struct icaltriggertype tr); /* struct icalreqstattype. This struct contains two string pointers, but don't try to free either of them. The "desc" string is a pointer to a static table inside the library. Don't try to free it. The "debug" string is a pointer into the string that the called passed into to icalreqstattype_from_string. Don't try to free it either, and don't use it after the original string has been freed. BTW, you would get that original string from *icalproperty_get_requeststatus() or icalvalue_get_text(), when operating on a the value of a request_status property. */ struct icalreqstattype { icalrequeststatus code; const char* desc; const char* debug; }; struct icalreqstattype icalreqstattype_from_string(const char* str); const char* icalreqstattype_as_string(struct icalreqstattype); struct icaltimezonephase { const char* tzname; int is_stdandard; /* 1 = standard tme, 0 = daylight savings time */ struct icaltimetype dtstart; int offsetto; int tzoffsetfrom; const char* comment; struct icaldatetimeperiodtype rdate; const char* rrule; }; struct icaltimezonetype { const char* tzid; struct icaltimetype last_mod; const char* tzurl; /* Array of phases. The end of the array is a phase with tzname == 0 */ struct icaltimezonephase *phases; }; void icaltimezonetype_free(struct icaltimezonetype tzt); #endif /* !ICALTYPES_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalrecur.h CREATOR: eric 20 March 2000 (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ /** @file icalrecur.h @brief Routines for dealing with recurring time How to use: 1) Get a rule and a start time from a component @code icalproperty rrule; struct icalrecurrencetype recur; struct icaltimetype dtstart; rrule = icalcomponent_get_first_property(comp,ICAL_RRULE_PROPERTY); recur = icalproperty_get_rrule(rrule); start = icalproperty_get_dtstart(dtstart); @endcode Or, just make them up: @code recur = icalrecurrencetype_from_string("FREQ=YEARLY;BYDAY=SU,WE"); dtstart = icaltime_from_string("19970101T123000") @endcode 2) Create an iterator @code icalrecur_iterator* ritr; ritr = icalrecur_iterator_new(recur,start); @endcode 3) Iterator over the occurrences @code struct icaltimetype next; while (next = icalrecur_iterator_next(ritr) && !icaltime_is_null_time(next){ Do something with next } @endcode Note that that the time returned by icalrecur_iterator_next is in whatever timezone that dtstart is in. ======================================================================*/ #ifndef ICALRECUR_H #define ICALRECUR_H #include /*********************************************************************** * Recurrance enumerations **********************************************************************/ typedef enum icalrecurrencetype_frequency { /* These enums are used to index an array, so don't change the order or the integers */ ICAL_SECONDLY_RECURRENCE=0, ICAL_MINUTELY_RECURRENCE=1, ICAL_HOURLY_RECURRENCE=2, ICAL_DAILY_RECURRENCE=3, ICAL_WEEKLY_RECURRENCE=4, ICAL_MONTHLY_RECURRENCE=5, ICAL_YEARLY_RECURRENCE=6, ICAL_NO_RECURRENCE=7 } icalrecurrencetype_frequency; typedef enum icalrecurrencetype_weekday { ICAL_NO_WEEKDAY, ICAL_SUNDAY_WEEKDAY, ICAL_MONDAY_WEEKDAY, ICAL_TUESDAY_WEEKDAY, ICAL_WEDNESDAY_WEEKDAY, ICAL_THURSDAY_WEEKDAY, ICAL_FRIDAY_WEEKDAY, ICAL_SATURDAY_WEEKDAY } icalrecurrencetype_weekday; enum { ICAL_RECURRENCE_ARRAY_MAX = 0x7f7f, ICAL_RECURRENCE_ARRAY_MAX_BYTE = 0x7f }; /********************** Recurrence type routines **************/ /* See RFC 2445 Section 4.3.10, RECUR Value, for an explaination of the values and fields in struct icalrecurrencetype */ #define ICAL_BY_SECOND_SIZE 61 #define ICAL_BY_MINUTE_SIZE 61 #define ICAL_BY_HOUR_SIZE 25 #define ICAL_BY_DAY_SIZE 364 /* 7 days * 52 weeks */ #define ICAL_BY_MONTHDAY_SIZE 32 #define ICAL_BY_YEARDAY_SIZE 367 #define ICAL_BY_WEEKNO_SIZE 54 #define ICAL_BY_MONTH_SIZE 13 #define ICAL_BY_SETPOS_SIZE 367 /** Main struct for holding digested recurrence rules */ struct icalrecurrencetype { icalrecurrencetype_frequency freq; /* until and count are mutually exclusive. */ struct icaltimetype until; int count; short interval; icalrecurrencetype_weekday week_start; /* The BY* parameters can each take a list of values. Here I * assume that the list of values will not be larger than the * range of the value -- that is, the client will not name a * value more than once. * Each of the lists is terminated with the value * ICAL_RECURRENCE_ARRAY_MAX unless the the list is full. */ short by_second[ICAL_BY_SECOND_SIZE]; short by_minute[ICAL_BY_MINUTE_SIZE]; short by_hour[ICAL_BY_HOUR_SIZE]; short by_day[ICAL_BY_DAY_SIZE]; /* Encoded value, see below */ short by_month_day[ICAL_BY_MONTHDAY_SIZE]; short by_year_day[ ICAL_BY_YEARDAY_SIZE]; short by_week_no[ICAL_BY_WEEKNO_SIZE]; short by_month[ICAL_BY_MONTH_SIZE]; short by_set_pos[ICAL_BY_SETPOS_SIZE]; }; void icalrecurrencetype_clear(struct icalrecurrencetype *r); /** * Array Encoding * * The 'day' element of the by_day array is encoded to allow * representation of both the day of the week ( Monday, Tueday), but also * the Nth day of the week ( First tuesday of the month, last thursday of * the year) These routines decode the day values */ /** 1 == Monday, etc. */ enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day); /** 0 == any of day of week. 1 == first, 2 = second, -2 == second to last, etc */ short icalrecurrencetype_day_position(short day); /*********************************************************************** * Recurrance rule parser **********************************************************************/ /** Convert between strings and recurrencetype structures. */ struct icalrecurrencetype icalrecurrencetype_from_string(const char* str); char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur); /********** recurrence iteration routines ********************/ typedef struct icalrecur_iterator_impl icalrecur_iterator; /** Create a new recurrence rule iterator */ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, struct icaltimetype dtstart); /** Get the next occurrence from an iterator */ struct icaltimetype icalrecur_iterator_next(icalrecur_iterator*); /** Free the iterator */ void icalrecur_iterator_free(icalrecur_iterator*); /** * Fills array up with at most 'count' time_t values, each * representing an occurrence time in seconds past the POSIX epoch */ int icalrecur_expand_recurrence(char* rule, time_t start, int count, time_t* array); #endif /* -*- Mode: C -*- */ /*====================================================================== FILE: icalattach.h CREATOR: acampi 28 May 02 (C) COPYRIGHT 2002, Andrea Campi This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalattach.h ======================================================================*/ #ifndef ICALATTACH_H #define ICALATTACH_H typedef struct icalattach_impl icalattach; typedef void (* icalattach_free_fn_t) (unsigned char *data, void *user_data); icalattach *icalattach_new_from_url (const char *url); icalattach *icalattach_new_from_data (const unsigned char *data, icalattach_free_fn_t free_fn, void *free_fn_data); void icalattach_ref (icalattach *attach); void icalattach_unref (icalattach *attach); int icalattach_get_is_url (icalattach *attach); const char *icalattach_get_url (icalattach *attach); unsigned char *icalattach_get_data (icalattach *attach); struct icalattachtype* icalattachtype_new(void); void icalattachtype_add_reference(struct icalattachtype* v); void icalattachtype_free(struct icalattachtype* v); void icalattachtype_set_url(struct icalattachtype* v, char* url); char* icalattachtype_get_url(struct icalattachtype* v); void icalattachtype_set_base64(struct icalattachtype* v, char* base64, int owns); char* icalattachtype_get_base64(struct icalattachtype* v); void icalattachtype_set_binary(struct icalattachtype* v, char* binary, int owns); void* icalattachtype_get_binary(struct icalattachtype* v); #endif /* !ICALATTACH_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue.h CREATOR: eric 20 March 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.h ======================================================================*/ #ifndef ICALDERIVEDVALUE_H #define ICALDERIVEDVALUE_H typedef struct icalvalue_impl icalvalue; void icalvalue_set_x(icalvalue* value, const char* v); icalvalue* icalvalue_new_x(const char* v); const char* icalvalue_get_x(const icalvalue* value); icalvalue* icalvalue_new_recur (struct icalrecurrencetype v); void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value); icalvalue* icalvalue_new_trigger (struct icaltriggertype v); void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v); struct icaltriggertype icalvalue_get_trigger(const icalvalue* value); icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v); void icalvalue_set_datetimeperiod(icalvalue* value, struct icaldatetimeperiodtype v); struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value); icalvalue *icalvalue_new_attach (icalattach *attach); void icalvalue_set_attach (icalvalue *value, icalattach *attach); icalattach *icalvalue_get_attach (const icalvalue *value); void icalvalue_reset_kind(icalvalue* value); typedef enum icalvalue_kind { ICAL_ANY_VALUE=5000, ICAL_BOOLEAN_VALUE=5001, ICAL_UTCOFFSET_VALUE=5002, ICAL_XLICCLASS_VALUE=5003, ICAL_RECUR_VALUE=5004, ICAL_METHOD_VALUE=5005, ICAL_CALADDRESS_VALUE=5006, ICAL_PERIOD_VALUE=5007, ICAL_STATUS_VALUE=5008, ICAL_BINARY_VALUE=5009, ICAL_TEXT_VALUE=5010, ICAL_DURATION_VALUE=5011, ICAL_DATETIMEPERIOD_VALUE=5012, ICAL_INTEGER_VALUE=5013, ICAL_URI_VALUE=5014, ICAL_TRIGGER_VALUE=5015, ICAL_ATTACH_VALUE=5016, ICAL_CLASS_VALUE=5017, ICAL_FLOAT_VALUE=5018, ICAL_QUERY_VALUE=5019, ICAL_STRING_VALUE=5020, ICAL_TRANSP_VALUE=5021, ICAL_X_VALUE=5022, ICAL_DATETIME_VALUE=5023, ICAL_REQUESTSTATUS_VALUE=5024, ICAL_GEO_VALUE=5025, ICAL_DATE_VALUE=5026, ICAL_ACTION_VALUE=5027, ICAL_NO_VALUE=5028 } icalvalue_kind ; #define ICALPROPERTY_FIRST_ENUM 10000 typedef enum icalproperty_action { ICAL_ACTION_X = 10000, ICAL_ACTION_AUDIO = 10001, ICAL_ACTION_DISPLAY = 10002, ICAL_ACTION_EMAIL = 10003, ICAL_ACTION_PROCEDURE = 10004, ICAL_ACTION_NONE = 10005 } icalproperty_action; typedef enum icalproperty_class { ICAL_CLASS_X = 10006, ICAL_CLASS_PUBLIC = 10007, ICAL_CLASS_PRIVATE = 10008, ICAL_CLASS_CONFIDENTIAL = 10009, ICAL_CLASS_NONE = 10010 } icalproperty_class; typedef enum icalproperty_method { ICAL_METHOD_X = 10011, ICAL_METHOD_PUBLISH = 10012, ICAL_METHOD_REQUEST = 10013, ICAL_METHOD_REPLY = 10014, ICAL_METHOD_ADD = 10015, ICAL_METHOD_CANCEL = 10016, ICAL_METHOD_REFRESH = 10017, ICAL_METHOD_COUNTER = 10018, ICAL_METHOD_DECLINECOUNTER = 10019, ICAL_METHOD_CREATE = 10020, ICAL_METHOD_READ = 10021, ICAL_METHOD_RESPONSE = 10022, ICAL_METHOD_MOVE = 10023, ICAL_METHOD_MODIFY = 10024, ICAL_METHOD_GENERATEUID = 10025, ICAL_METHOD_DELETE = 10026, ICAL_METHOD_NONE = 10027 } icalproperty_method; typedef enum icalproperty_status { ICAL_STATUS_X = 10028, ICAL_STATUS_TENTATIVE = 10029, ICAL_STATUS_CONFIRMED = 10030, ICAL_STATUS_COMPLETED = 10031, ICAL_STATUS_NEEDSACTION = 10032, ICAL_STATUS_CANCELLED = 10033, ICAL_STATUS_INPROCESS = 10034, ICAL_STATUS_DRAFT = 10035, ICAL_STATUS_FINAL = 10036, ICAL_STATUS_NONE = 10037 } icalproperty_status; typedef enum icalproperty_transp { ICAL_TRANSP_X = 10038, ICAL_TRANSP_OPAQUE = 10039, ICAL_TRANSP_OPAQUENOCONFLICT = 10040, ICAL_TRANSP_TRANSPARENT = 10041, ICAL_TRANSP_TRANSPARENTNOCONFLICT = 10042, ICAL_TRANSP_NONE = 10043 } icalproperty_transp; typedef enum icalproperty_xlicclass { ICAL_XLICCLASS_X = 10044, ICAL_XLICCLASS_PUBLISHNEW = 10045, ICAL_XLICCLASS_PUBLISHUPDATE = 10046, ICAL_XLICCLASS_PUBLISHFREEBUSY = 10047, ICAL_XLICCLASS_REQUESTNEW = 10048, ICAL_XLICCLASS_REQUESTUPDATE = 10049, ICAL_XLICCLASS_REQUESTRESCHEDULE = 10050, ICAL_XLICCLASS_REQUESTDELEGATE = 10051, ICAL_XLICCLASS_REQUESTNEWORGANIZER = 10052, ICAL_XLICCLASS_REQUESTFORWARD = 10053, ICAL_XLICCLASS_REQUESTSTATUS = 10054, ICAL_XLICCLASS_REQUESTFREEBUSY = 10055, ICAL_XLICCLASS_REPLYACCEPT = 10056, ICAL_XLICCLASS_REPLYDECLINE = 10057, ICAL_XLICCLASS_REPLYDELEGATE = 10058, ICAL_XLICCLASS_REPLYCRASHERACCEPT = 10059, ICAL_XLICCLASS_REPLYCRASHERDECLINE = 10060, ICAL_XLICCLASS_ADDINSTANCE = 10061, ICAL_XLICCLASS_CANCELEVENT = 10062, ICAL_XLICCLASS_CANCELINSTANCE = 10063, ICAL_XLICCLASS_CANCELALL = 10064, ICAL_XLICCLASS_REFRESH = 10065, ICAL_XLICCLASS_COUNTER = 10066, ICAL_XLICCLASS_DECLINECOUNTER = 10067, ICAL_XLICCLASS_MALFORMED = 10068, ICAL_XLICCLASS_OBSOLETE = 10069, ICAL_XLICCLASS_MISSEQUENCED = 10070, ICAL_XLICCLASS_UNKNOWN = 10071, ICAL_XLICCLASS_NONE = 10072 } icalproperty_xlicclass; #define ICALPROPERTY_LAST_ENUM 10073 /* BOOLEAN */ icalvalue* icalvalue_new_boolean(int v); int icalvalue_get_boolean(const icalvalue* value); void icalvalue_set_boolean(icalvalue* value, int v); /* UTC-OFFSET */ icalvalue* icalvalue_new_utcoffset(int v); int icalvalue_get_utcoffset(const icalvalue* value); void icalvalue_set_utcoffset(icalvalue* value, int v); /* X-LIC-CLASS */ icalvalue* icalvalue_new_xlicclass(enum icalproperty_xlicclass v); enum icalproperty_xlicclass icalvalue_get_xlicclass(const icalvalue* value); void icalvalue_set_xlicclass(icalvalue* value, enum icalproperty_xlicclass v); /* METHOD */ icalvalue* icalvalue_new_method(enum icalproperty_method v); enum icalproperty_method icalvalue_get_method(const icalvalue* value); void icalvalue_set_method(icalvalue* value, enum icalproperty_method v); /* CAL-ADDRESS */ icalvalue* icalvalue_new_caladdress(const char* v); const char* icalvalue_get_caladdress(const icalvalue* value); void icalvalue_set_caladdress(icalvalue* value, const char* v); /* PERIOD */ icalvalue* icalvalue_new_period(struct icalperiodtype v); struct icalperiodtype icalvalue_get_period(const icalvalue* value); void icalvalue_set_period(icalvalue* value, struct icalperiodtype v); /* STATUS */ icalvalue* icalvalue_new_status(enum icalproperty_status v); enum icalproperty_status icalvalue_get_status(const icalvalue* value); void icalvalue_set_status(icalvalue* value, enum icalproperty_status v); /* BINARY */ icalvalue* icalvalue_new_binary(const char* v); const char* icalvalue_get_binary(const icalvalue* value); void icalvalue_set_binary(icalvalue* value, const char* v); /* TEXT */ icalvalue* icalvalue_new_text(const char* v); const char* icalvalue_get_text(const icalvalue* value); void icalvalue_set_text(icalvalue* value, const char* v); /* DURATION */ icalvalue* icalvalue_new_duration(struct icaldurationtype v); struct icaldurationtype icalvalue_get_duration(const icalvalue* value); void icalvalue_set_duration(icalvalue* value, struct icaldurationtype v); /* INTEGER */ icalvalue* icalvalue_new_integer(int v); int icalvalue_get_integer(const icalvalue* value); void icalvalue_set_integer(icalvalue* value, int v); /* URI */ icalvalue* icalvalue_new_uri(const char* v); const char* icalvalue_get_uri(const icalvalue* value); void icalvalue_set_uri(icalvalue* value, const char* v); /* CLASS */ icalvalue* icalvalue_new_class(enum icalproperty_class v); enum icalproperty_class icalvalue_get_class(const icalvalue* value); void icalvalue_set_class(icalvalue* value, enum icalproperty_class v); /* FLOAT */ icalvalue* icalvalue_new_float(float v); float icalvalue_get_float(const icalvalue* value); void icalvalue_set_float(icalvalue* value, float v); /* QUERY */ icalvalue* icalvalue_new_query(const char* v); const char* icalvalue_get_query(const icalvalue* value); void icalvalue_set_query(icalvalue* value, const char* v); /* STRING */ icalvalue* icalvalue_new_string(const char* v); const char* icalvalue_get_string(const icalvalue* value); void icalvalue_set_string(icalvalue* value, const char* v); /* TRANSP */ icalvalue* icalvalue_new_transp(enum icalproperty_transp v); enum icalproperty_transp icalvalue_get_transp(const icalvalue* value); void icalvalue_set_transp(icalvalue* value, enum icalproperty_transp v); /* DATE-TIME */ icalvalue* icalvalue_new_datetime(struct icaltimetype v); struct icaltimetype icalvalue_get_datetime(const icalvalue* value); void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); /* REQUEST-STATUS */ icalvalue* icalvalue_new_requeststatus(struct icalreqstattype v); struct icalreqstattype icalvalue_get_requeststatus(const icalvalue* value); void icalvalue_set_requeststatus(icalvalue* value, struct icalreqstattype v); /* GEO */ icalvalue* icalvalue_new_geo(struct icalgeotype v); struct icalgeotype icalvalue_get_geo(const icalvalue* value); void icalvalue_set_geo(icalvalue* value, struct icalgeotype v); /* DATE */ icalvalue* icalvalue_new_date(struct icaltimetype v); struct icaltimetype icalvalue_get_date(const icalvalue* value); void icalvalue_set_date(icalvalue* value, struct icaltimetype v); /* ACTION */ icalvalue* icalvalue_new_action(enum icalproperty_action v); enum icalproperty_action icalvalue_get_action(const icalvalue* value); void icalvalue_set_action(icalvalue* value, enum icalproperty_action v); #endif /*ICALVALUE_H*/ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalparam.h CREATOR: eric 20 March 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparam.h ======================================================================*/ #ifndef ICALDERIVEDPARAMETER_H #define ICALDERIVEDPARAMETER_H typedef struct icalparameter_impl icalparameter; const char* icalparameter_enum_to_string(int e); int icalparameter_string_to_enum(const char* str); typedef enum icalparameter_kind { ICAL_ANY_PARAMETER = 0, ICAL_ALTREP_PARAMETER, ICAL_CN_PARAMETER, ICAL_CUTYPE_PARAMETER, ICAL_DELEGATEDFROM_PARAMETER, ICAL_DELEGATEDTO_PARAMETER, ICAL_DIR_PARAMETER, ICAL_ENCODING_PARAMETER, ICAL_FBTYPE_PARAMETER, ICAL_FMTTYPE_PARAMETER, ICAL_LANGUAGE_PARAMETER, ICAL_MEMBER_PARAMETER, ICAL_PARTSTAT_PARAMETER, ICAL_RANGE_PARAMETER, ICAL_RELATED_PARAMETER, ICAL_RELTYPE_PARAMETER, ICAL_ROLE_PARAMETER, ICAL_RSVP_PARAMETER, ICAL_SENTBY_PARAMETER, ICAL_TZID_PARAMETER, ICAL_VALUE_PARAMETER, ICAL_X_PARAMETER, ICAL_XLICCOMPARETYPE_PARAMETER, ICAL_XLICERRORTYPE_PARAMETER, ICAL_NO_PARAMETER } icalparameter_kind; #define ICALPARAMETER_FIRST_ENUM 20000 typedef enum icalparameter_cutype { ICAL_CUTYPE_X = 20000, ICAL_CUTYPE_INDIVIDUAL = 20001, ICAL_CUTYPE_GROUP = 20002, ICAL_CUTYPE_RESOURCE = 20003, ICAL_CUTYPE_ROOM = 20004, ICAL_CUTYPE_UNKNOWN = 20005, ICAL_CUTYPE_NONE = 20006 } icalparameter_cutype; typedef enum icalparameter_encoding { ICAL_ENCODING_X = 20007, ICAL_ENCODING_8BIT = 20008, ICAL_ENCODING_BASE64 = 20009, ICAL_ENCODING_NONE = 20010 } icalparameter_encoding; typedef enum icalparameter_fbtype { ICAL_FBTYPE_X = 20011, ICAL_FBTYPE_FREE = 20012, ICAL_FBTYPE_BUSY = 20013, ICAL_FBTYPE_BUSYUNAVAILABLE = 20014, ICAL_FBTYPE_BUSYTENTATIVE = 20015, ICAL_FBTYPE_NONE = 20016 } icalparameter_fbtype; typedef enum icalparameter_partstat { ICAL_PARTSTAT_X = 20017, ICAL_PARTSTAT_NEEDSACTION = 20018, ICAL_PARTSTAT_ACCEPTED = 20019, ICAL_PARTSTAT_DECLINED = 20020, ICAL_PARTSTAT_TENTATIVE = 20021, ICAL_PARTSTAT_DELEGATED = 20022, ICAL_PARTSTAT_COMPLETED = 20023, ICAL_PARTSTAT_INPROCESS = 20024, ICAL_PARTSTAT_NONE = 20025 } icalparameter_partstat; typedef enum icalparameter_range { ICAL_RANGE_X = 20026, ICAL_RANGE_THISANDPRIOR = 20027, ICAL_RANGE_THISANDFUTURE = 20028, ICAL_RANGE_NONE = 20029 } icalparameter_range; typedef enum icalparameter_related { ICAL_RELATED_X = 20030, ICAL_RELATED_START = 20031, ICAL_RELATED_END = 20032, ICAL_RELATED_NONE = 20033 } icalparameter_related; typedef enum icalparameter_reltype { ICAL_RELTYPE_X = 20034, ICAL_RELTYPE_PARENT = 20035, ICAL_RELTYPE_CHILD = 20036, ICAL_RELTYPE_SIBLING = 20037, ICAL_RELTYPE_NONE = 20038 } icalparameter_reltype; typedef enum icalparameter_role { ICAL_ROLE_X = 20039, ICAL_ROLE_CHAIR = 20040, ICAL_ROLE_REQPARTICIPANT = 20041, ICAL_ROLE_OPTPARTICIPANT = 20042, ICAL_ROLE_NONPARTICIPANT = 20043, ICAL_ROLE_NONE = 20044 } icalparameter_role; typedef enum icalparameter_rsvp { ICAL_RSVP_X = 20045, ICAL_RSVP_TRUE = 20046, ICAL_RSVP_FALSE = 20047, ICAL_RSVP_NONE = 20048 } icalparameter_rsvp; typedef enum icalparameter_value { ICAL_VALUE_X = 20049, ICAL_VALUE_BINARY = 20050, ICAL_VALUE_BOOLEAN = 20051, ICAL_VALUE_DATE = 20052, ICAL_VALUE_DURATION = 20053, ICAL_VALUE_FLOAT = 20054, ICAL_VALUE_INTEGER = 20055, ICAL_VALUE_PERIOD = 20056, ICAL_VALUE_RECUR = 20057, ICAL_VALUE_TEXT = 20058, ICAL_VALUE_URI = 20059, ICAL_VALUE_ERROR = 20060, ICAL_VALUE_DATETIME = 20061, ICAL_VALUE_UTCOFFSET = 20062, ICAL_VALUE_CALADDRESS = 20063, ICAL_VALUE_NONE = 20064 } icalparameter_value; typedef enum icalparameter_xliccomparetype { ICAL_XLICCOMPARETYPE_X = 20065, ICAL_XLICCOMPARETYPE_EQUAL = 20066, ICAL_XLICCOMPARETYPE_NOTEQUAL = 20067, ICAL_XLICCOMPARETYPE_LESS = 20068, ICAL_XLICCOMPARETYPE_GREATER = 20069, ICAL_XLICCOMPARETYPE_LESSEQUAL = 20070, ICAL_XLICCOMPARETYPE_GREATEREQUAL = 20071, ICAL_XLICCOMPARETYPE_REGEX = 20072, ICAL_XLICCOMPARETYPE_ISNULL = 20073, ICAL_XLICCOMPARETYPE_ISNOTNULL = 20074, ICAL_XLICCOMPARETYPE_NONE = 20075 } icalparameter_xliccomparetype; typedef enum icalparameter_xlicerrortype { ICAL_XLICERRORTYPE_X = 20076, ICAL_XLICERRORTYPE_COMPONENTPARSEERROR = 20077, ICAL_XLICERRORTYPE_PROPERTYPARSEERROR = 20078, ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR = 20079, ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR = 20080, ICAL_XLICERRORTYPE_VALUEPARSEERROR = 20081, ICAL_XLICERRORTYPE_INVALIDITIP = 20082, ICAL_XLICERRORTYPE_UNKNOWNVCALPROPERROR = 20083, ICAL_XLICERRORTYPE_MIMEPARSEERROR = 20084, ICAL_XLICERRORTYPE_VCALPROPPARSEERROR = 20085, ICAL_XLICERRORTYPE_NONE = 20086 } icalparameter_xlicerrortype; #define ICALPARAMETER_LAST_ENUM 20087 /* DELEGATED-FROM */ icalparameter* icalparameter_new_delegatedfrom(const char* v); const char* icalparameter_get_delegatedfrom(const icalparameter* value); void icalparameter_set_delegatedfrom(icalparameter* value, const char* v); /* RELATED */ icalparameter* icalparameter_new_related(icalparameter_related v); icalparameter_related icalparameter_get_related(const icalparameter* value); void icalparameter_set_related(icalparameter* value, icalparameter_related v); /* SENT-BY */ icalparameter* icalparameter_new_sentby(const char* v); const char* icalparameter_get_sentby(const icalparameter* value); void icalparameter_set_sentby(icalparameter* value, const char* v); /* LANGUAGE */ icalparameter* icalparameter_new_language(const char* v); const char* icalparameter_get_language(const icalparameter* value); void icalparameter_set_language(icalparameter* value, const char* v); /* RELTYPE */ icalparameter* icalparameter_new_reltype(icalparameter_reltype v); icalparameter_reltype icalparameter_get_reltype(const icalparameter* value); void icalparameter_set_reltype(icalparameter* value, icalparameter_reltype v); /* ENCODING */ icalparameter* icalparameter_new_encoding(icalparameter_encoding v); icalparameter_encoding icalparameter_get_encoding(const icalparameter* value); void icalparameter_set_encoding(icalparameter* value, icalparameter_encoding v); /* ALTREP */ icalparameter* icalparameter_new_altrep(const char* v); const char* icalparameter_get_altrep(const icalparameter* value); void icalparameter_set_altrep(icalparameter* value, const char* v); /* FMTTYPE */ icalparameter* icalparameter_new_fmttype(const char* v); const char* icalparameter_get_fmttype(const icalparameter* value); void icalparameter_set_fmttype(icalparameter* value, const char* v); /* FBTYPE */ icalparameter* icalparameter_new_fbtype(icalparameter_fbtype v); icalparameter_fbtype icalparameter_get_fbtype(const icalparameter* value); void icalparameter_set_fbtype(icalparameter* value, icalparameter_fbtype v); /* RSVP */ icalparameter* icalparameter_new_rsvp(icalparameter_rsvp v); icalparameter_rsvp icalparameter_get_rsvp(const icalparameter* value); void icalparameter_set_rsvp(icalparameter* value, icalparameter_rsvp v); /* RANGE */ icalparameter* icalparameter_new_range(icalparameter_range v); icalparameter_range icalparameter_get_range(const icalparameter* value); void icalparameter_set_range(icalparameter* value, icalparameter_range v); /* DELEGATED-TO */ icalparameter* icalparameter_new_delegatedto(const char* v); const char* icalparameter_get_delegatedto(const icalparameter* value); void icalparameter_set_delegatedto(icalparameter* value, const char* v); /* CN */ icalparameter* icalparameter_new_cn(const char* v); const char* icalparameter_get_cn(const icalparameter* value); void icalparameter_set_cn(icalparameter* value, const char* v); /* ROLE */ icalparameter* icalparameter_new_role(icalparameter_role v); icalparameter_role icalparameter_get_role(const icalparameter* value); void icalparameter_set_role(icalparameter* value, icalparameter_role v); /* X-LIC-COMPARETYPE */ icalparameter* icalparameter_new_xliccomparetype(icalparameter_xliccomparetype v); icalparameter_xliccomparetype icalparameter_get_xliccomparetype(const icalparameter* value); void icalparameter_set_xliccomparetype(icalparameter* value, icalparameter_xliccomparetype v); /* PARTSTAT */ icalparameter* icalparameter_new_partstat(icalparameter_partstat v); icalparameter_partstat icalparameter_get_partstat(const icalparameter* value); void icalparameter_set_partstat(icalparameter* value, icalparameter_partstat v); /* X-LIC-ERRORTYPE */ icalparameter* icalparameter_new_xlicerrortype(icalparameter_xlicerrortype v); icalparameter_xlicerrortype icalparameter_get_xlicerrortype(const icalparameter* value); void icalparameter_set_xlicerrortype(icalparameter* value, icalparameter_xlicerrortype v); /* MEMBER */ icalparameter* icalparameter_new_member(const char* v); const char* icalparameter_get_member(const icalparameter* value); void icalparameter_set_member(icalparameter* value, const char* v); /* X */ icalparameter* icalparameter_new_x(const char* v); const char* icalparameter_get_x(const icalparameter* value); void icalparameter_set_x(icalparameter* value, const char* v); /* CUTYPE */ icalparameter* icalparameter_new_cutype(icalparameter_cutype v); icalparameter_cutype icalparameter_get_cutype(const icalparameter* value); void icalparameter_set_cutype(icalparameter* value, icalparameter_cutype v); /* TZID */ icalparameter* icalparameter_new_tzid(const char* v); const char* icalparameter_get_tzid(const icalparameter* value); void icalparameter_set_tzid(icalparameter* value, const char* v); /* VALUE */ icalparameter* icalparameter_new_value(icalparameter_value v); icalparameter_value icalparameter_get_value(const icalparameter* value); void icalparameter_set_value(icalparameter* value, icalparameter_value v); /* DIR */ icalparameter* icalparameter_new_dir(const char* v); const char* icalparameter_get_dir(const icalparameter* value); void icalparameter_set_dir(icalparameter* value, const char* v); #endif /*ICALPARAMETER_H*/ /* Everything below this line is machine generated. Do not edit. */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue.h CREATOR: eric 20 March 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.h ======================================================================*/ #ifndef ICALVALUE_H #define ICALVALUE_H #include /* Defined in icalderivedvalue.h */ /*typedef struct icalvalue_impl icalvalue;*/ icalvalue* icalvalue_new(icalvalue_kind kind); icalvalue* icalvalue_new_clone(const icalvalue* value); icalvalue* icalvalue_new_from_string(icalvalue_kind kind, const char* str); void icalvalue_free(icalvalue* value); int icalvalue_is_valid(const icalvalue* value); const char* icalvalue_as_ical_string(const icalvalue* value); icalvalue_kind icalvalue_isa(const icalvalue* value); int icalvalue_isa_value(void*); icalparameter_xliccomparetype icalvalue_compare(const icalvalue* a, const icalvalue *b); /* Special, non autogenerated value accessors */ icalvalue* icalvalue_new_recur (struct icalrecurrencetype v); void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value); icalvalue* icalvalue_new_trigger (struct icaltriggertype v); void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v); struct icaltriggertype icalvalue_get_trigger(const icalvalue* value); icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v); void icalvalue_set_datetimeperiod(icalvalue* value, struct icaldatetimeperiodtype v); struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value); /* Convert enumerations */ icalvalue_kind icalvalue_string_to_kind(const char* str); const char* icalvalue_kind_to_string(const icalvalue_kind kind); /** Check validity of a specific icalvalue_kind **/ int icalvalue_kind_is_valid(const icalvalue_kind kind); /** Encode a character string in ical format, esacpe certain characters, etc. */ int icalvalue_encode_ical_string(const char *szText, char *szEncText, int MaxBufferLen); #endif /*ICALVALUE_H*/ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalparam.h CREATOR: eric 20 March 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparam.h ======================================================================*/ #ifndef ICALPARAM_H #define ICALPARAM_H /* Declared in icalderivedparameter.h */ /*typedef struct icalparameter_impl icalparameter;*/ icalparameter* icalparameter_new(icalparameter_kind kind); icalparameter* icalparameter_new_clone(icalparameter* p); /* Create from string of form "PARAMNAME=VALUE" */ icalparameter* icalparameter_new_from_string(const char* value); /* Create from just the value, the part after the "=" */ icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind, const char* value); void icalparameter_free(icalparameter* parameter); char* icalparameter_as_ical_string(icalparameter* parameter); int icalparameter_is_valid(icalparameter* parameter); icalparameter_kind icalparameter_isa(icalparameter* parameter); int icalparameter_isa_parameter(void* param); /* Acess the name of an X parameer */ void icalparameter_set_xname (icalparameter* param, const char* v); const char* icalparameter_get_xname(icalparameter* param); void icalparameter_set_xvalue (icalparameter* param, const char* v); const char* icalparameter_get_xvalue(icalparameter* param); /* Convert enumerations */ const char* icalparameter_kind_to_string(icalparameter_kind kind); icalparameter_kind icalparameter_string_to_kind(const char* string); #endif /* -*- Mode: C -*- ====================================================================== FILE: icalderivedproperties.{c,h} CREATOR: eric 09 May 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ #ifndef ICALDERIVEDPROPERTY_H #define ICALDERIVEDPROPERTY_H #include typedef struct icalproperty_impl icalproperty; typedef enum icalproperty_kind { ICAL_ANY_PROPERTY = 0, ICAL_ACTION_PROPERTY, ICAL_ALLOWCONFLICT_PROPERTY, ICAL_ATTACH_PROPERTY, ICAL_ATTENDEE_PROPERTY, ICAL_CALID_PROPERTY, ICAL_CALMASTER_PROPERTY, ICAL_CALSCALE_PROPERTY, ICAL_CARID_PROPERTY, ICAL_CATEGORIES_PROPERTY, ICAL_CLASS_PROPERTY, ICAL_COMMENT_PROPERTY, ICAL_COMPLETED_PROPERTY, ICAL_CONTACT_PROPERTY, ICAL_CREATED_PROPERTY, ICAL_DECREED_PROPERTY, ICAL_DEFAULTCHARSET_PROPERTY, ICAL_DEFAULTLOCALE_PROPERTY, ICAL_DEFAULTTZID_PROPERTY, ICAL_DESCRIPTION_PROPERTY, ICAL_DTEND_PROPERTY, ICAL_DTSTAMP_PROPERTY, ICAL_DTSTART_PROPERTY, ICAL_DUE_PROPERTY, ICAL_DURATION_PROPERTY, ICAL_EXDATE_PROPERTY, ICAL_EXPAND_PROPERTY, ICAL_EXRULE_PROPERTY, ICAL_FREEBUSY_PROPERTY, ICAL_GEO_PROPERTY, ICAL_LASTMODIFIED_PROPERTY, ICAL_LOCATION_PROPERTY, ICAL_MAXRESULTS_PROPERTY, ICAL_MAXRESULTSSIZE_PROPERTY, ICAL_METHOD_PROPERTY, ICAL_ORGANIZER_PROPERTY, ICAL_OWNER_PROPERTY, ICAL_PERCENTCOMPLETE_PROPERTY, ICAL_PRIORITY_PROPERTY, ICAL_PRODID_PROPERTY, ICAL_QUERY_PROPERTY, ICAL_QUERYNAME_PROPERTY, ICAL_RDATE_PROPERTY, ICAL_RECURRENCEID_PROPERTY, ICAL_RELATEDTO_PROPERTY, ICAL_RELCALID_PROPERTY, ICAL_REPEAT_PROPERTY, ICAL_REQUESTSTATUS_PROPERTY, ICAL_RESOURCES_PROPERTY, ICAL_RRULE_PROPERTY, ICAL_SCOPE_PROPERTY, ICAL_SEQUENCE_PROPERTY, ICAL_STATUS_PROPERTY, ICAL_SUMMARY_PROPERTY, ICAL_TARGET_PROPERTY, ICAL_TRANSP_PROPERTY, ICAL_TRIGGER_PROPERTY, ICAL_TZID_PROPERTY, ICAL_TZNAME_PROPERTY, ICAL_TZOFFSETFROM_PROPERTY, ICAL_TZOFFSETTO_PROPERTY, ICAL_TZURL_PROPERTY, ICAL_UID_PROPERTY, ICAL_URL_PROPERTY, ICAL_VERSION_PROPERTY, ICAL_X_PROPERTY, ICAL_XLICCLASS_PROPERTY, ICAL_XLICCLUSTERCOUNT_PROPERTY, ICAL_XLICERROR_PROPERTY, ICAL_XLICMIMECHARSET_PROPERTY, ICAL_XLICMIMECID_PROPERTY, ICAL_XLICMIMECONTENTTYPE_PROPERTY, ICAL_XLICMIMEENCODING_PROPERTY, ICAL_XLICMIMEFILENAME_PROPERTY, ICAL_XLICMIMEOPTINFO_PROPERTY, ICAL_NO_PROPERTY } icalproperty_kind; /* ACTION */ icalproperty* icalproperty_new_action(enum icalproperty_action v); void icalproperty_set_action(icalproperty* prop, enum icalproperty_action v); enum icalproperty_action icalproperty_get_action(const icalproperty* prop);icalproperty* icalproperty_vanew_action(enum icalproperty_action v, ...); /* ALLOW-CONFLICT */ icalproperty* icalproperty_new_allowconflict(const char* v); void icalproperty_set_allowconflict(icalproperty* prop, const char* v); const char* icalproperty_get_allowconflict(const icalproperty* prop);icalproperty* icalproperty_vanew_allowconflict(const char* v, ...); /* ATTACH */ icalproperty* icalproperty_new_attach(icalattach * v); void icalproperty_set_attach(icalproperty* prop, icalattach * v); icalattach * icalproperty_get_attach(const icalproperty* prop);icalproperty* icalproperty_vanew_attach(icalattach * v, ...); /* ATTENDEE */ icalproperty* icalproperty_new_attendee(const char* v); void icalproperty_set_attendee(icalproperty* prop, const char* v); const char* icalproperty_get_attendee(const icalproperty* prop);icalproperty* icalproperty_vanew_attendee(const char* v, ...); /* CALID */ icalproperty* icalproperty_new_calid(const char* v); void icalproperty_set_calid(icalproperty* prop, const char* v); const char* icalproperty_get_calid(const icalproperty* prop);icalproperty* icalproperty_vanew_calid(const char* v, ...); /* CALMASTER */ icalproperty* icalproperty_new_calmaster(const char* v); void icalproperty_set_calmaster(icalproperty* prop, const char* v); const char* icalproperty_get_calmaster(const icalproperty* prop);icalproperty* icalproperty_vanew_calmaster(const char* v, ...); /* CALSCALE */ icalproperty* icalproperty_new_calscale(const char* v); void icalproperty_set_calscale(icalproperty* prop, const char* v); const char* icalproperty_get_calscale(const icalproperty* prop);icalproperty* icalproperty_vanew_calscale(const char* v, ...); /* CARID */ icalproperty* icalproperty_new_carid(const char* v); void icalproperty_set_carid(icalproperty* prop, const char* v); const char* icalproperty_get_carid(const icalproperty* prop);icalproperty* icalproperty_vanew_carid(const char* v, ...); /* CATEGORIES */ icalproperty* icalproperty_new_categories(const char* v); void icalproperty_set_categories(icalproperty* prop, const char* v); const char* icalproperty_get_categories(const icalproperty* prop);icalproperty* icalproperty_vanew_categories(const char* v, ...); /* CLASS */ icalproperty* icalproperty_new_class(enum icalproperty_class v); void icalproperty_set_class(icalproperty* prop, enum icalproperty_class v); enum icalproperty_class icalproperty_get_class(const icalproperty* prop);icalproperty* icalproperty_vanew_class(enum icalproperty_class v, ...); /* COMMENT */ icalproperty* icalproperty_new_comment(const char* v); void icalproperty_set_comment(icalproperty* prop, const char* v); const char* icalproperty_get_comment(const icalproperty* prop);icalproperty* icalproperty_vanew_comment(const char* v, ...); /* COMPLETED */ icalproperty* icalproperty_new_completed(struct icaltimetype v); void icalproperty_set_completed(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_completed(const icalproperty* prop);icalproperty* icalproperty_vanew_completed(struct icaltimetype v, ...); /* CONTACT */ icalproperty* icalproperty_new_contact(const char* v); void icalproperty_set_contact(icalproperty* prop, const char* v); const char* icalproperty_get_contact(const icalproperty* prop);icalproperty* icalproperty_vanew_contact(const char* v, ...); /* CREATED */ icalproperty* icalproperty_new_created(struct icaltimetype v); void icalproperty_set_created(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_created(const icalproperty* prop);icalproperty* icalproperty_vanew_created(struct icaltimetype v, ...); /* DECREED */ icalproperty* icalproperty_new_decreed(const char* v); void icalproperty_set_decreed(icalproperty* prop, const char* v); const char* icalproperty_get_decreed(const icalproperty* prop);icalproperty* icalproperty_vanew_decreed(const char* v, ...); /* DEFAULT-CHARSET */ icalproperty* icalproperty_new_defaultcharset(const char* v); void icalproperty_set_defaultcharset(icalproperty* prop, const char* v); const char* icalproperty_get_defaultcharset(const icalproperty* prop);icalproperty* icalproperty_vanew_defaultcharset(const char* v, ...); /* DEFAULT-LOCALE */ icalproperty* icalproperty_new_defaultlocale(const char* v); void icalproperty_set_defaultlocale(icalproperty* prop, const char* v); const char* icalproperty_get_defaultlocale(const icalproperty* prop);icalproperty* icalproperty_vanew_defaultlocale(const char* v, ...); /* DEFAULT-TZID */ icalproperty* icalproperty_new_defaulttzid(const char* v); void icalproperty_set_defaulttzid(icalproperty* prop, const char* v); const char* icalproperty_get_defaulttzid(const icalproperty* prop);icalproperty* icalproperty_vanew_defaulttzid(const char* v, ...); /* DESCRIPTION */ icalproperty* icalproperty_new_description(const char* v); void icalproperty_set_description(icalproperty* prop, const char* v); const char* icalproperty_get_description(const icalproperty* prop);icalproperty* icalproperty_vanew_description(const char* v, ...); /* DTEND */ icalproperty* icalproperty_new_dtend(struct icaltimetype v); void icalproperty_set_dtend(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_dtend(const icalproperty* prop);icalproperty* icalproperty_vanew_dtend(struct icaltimetype v, ...); /* DTSTAMP */ icalproperty* icalproperty_new_dtstamp(struct icaltimetype v); void icalproperty_set_dtstamp(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_dtstamp(const icalproperty* prop);icalproperty* icalproperty_vanew_dtstamp(struct icaltimetype v, ...); /* DTSTART */ icalproperty* icalproperty_new_dtstart(struct icaltimetype v); void icalproperty_set_dtstart(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_dtstart(const icalproperty* prop);icalproperty* icalproperty_vanew_dtstart(struct icaltimetype v, ...); /* DUE */ icalproperty* icalproperty_new_due(struct icaltimetype v); void icalproperty_set_due(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_due(const icalproperty* prop);icalproperty* icalproperty_vanew_due(struct icaltimetype v, ...); /* DURATION */ icalproperty* icalproperty_new_duration(struct icaldurationtype v); void icalproperty_set_duration(icalproperty* prop, struct icaldurationtype v); struct icaldurationtype icalproperty_get_duration(const icalproperty* prop);icalproperty* icalproperty_vanew_duration(struct icaldurationtype v, ...); /* EXDATE */ icalproperty* icalproperty_new_exdate(struct icaltimetype v); void icalproperty_set_exdate(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_exdate(const icalproperty* prop);icalproperty* icalproperty_vanew_exdate(struct icaltimetype v, ...); /* EXPAND */ icalproperty* icalproperty_new_expand(int v); void icalproperty_set_expand(icalproperty* prop, int v); int icalproperty_get_expand(const icalproperty* prop);icalproperty* icalproperty_vanew_expand(int v, ...); /* EXRULE */ icalproperty* icalproperty_new_exrule(struct icalrecurrencetype v); void icalproperty_set_exrule(icalproperty* prop, struct icalrecurrencetype v); struct icalrecurrencetype icalproperty_get_exrule(const icalproperty* prop);icalproperty* icalproperty_vanew_exrule(struct icalrecurrencetype v, ...); /* FREEBUSY */ icalproperty* icalproperty_new_freebusy(struct icalperiodtype v); void icalproperty_set_freebusy(icalproperty* prop, struct icalperiodtype v); struct icalperiodtype icalproperty_get_freebusy(const icalproperty* prop);icalproperty* icalproperty_vanew_freebusy(struct icalperiodtype v, ...); /* GEO */ icalproperty* icalproperty_new_geo(struct icalgeotype v); void icalproperty_set_geo(icalproperty* prop, struct icalgeotype v); struct icalgeotype icalproperty_get_geo(const icalproperty* prop);icalproperty* icalproperty_vanew_geo(struct icalgeotype v, ...); /* LAST-MODIFIED */ icalproperty* icalproperty_new_lastmodified(struct icaltimetype v); void icalproperty_set_lastmodified(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_lastmodified(const icalproperty* prop);icalproperty* icalproperty_vanew_lastmodified(struct icaltimetype v, ...); /* LOCATION */ icalproperty* icalproperty_new_location(const char* v); void icalproperty_set_location(icalproperty* prop, const char* v); const char* icalproperty_get_location(const icalproperty* prop);icalproperty* icalproperty_vanew_location(const char* v, ...); /* MAXRESULTS */ icalproperty* icalproperty_new_maxresults(int v); void icalproperty_set_maxresults(icalproperty* prop, int v); int icalproperty_get_maxresults(const icalproperty* prop);icalproperty* icalproperty_vanew_maxresults(int v, ...); /* MAXRESULTSSIZE */ icalproperty* icalproperty_new_maxresultssize(int v); void icalproperty_set_maxresultssize(icalproperty* prop, int v); int icalproperty_get_maxresultssize(const icalproperty* prop);icalproperty* icalproperty_vanew_maxresultssize(int v, ...); /* METHOD */ icalproperty* icalproperty_new_method(enum icalproperty_method v); void icalproperty_set_method(icalproperty* prop, enum icalproperty_method v); enum icalproperty_method icalproperty_get_method(const icalproperty* prop);icalproperty* icalproperty_vanew_method(enum icalproperty_method v, ...); /* ORGANIZER */ icalproperty* icalproperty_new_organizer(const char* v); void icalproperty_set_organizer(icalproperty* prop, const char* v); const char* icalproperty_get_organizer(const icalproperty* prop);icalproperty* icalproperty_vanew_organizer(const char* v, ...); /* OWNER */ icalproperty* icalproperty_new_owner(const char* v); void icalproperty_set_owner(icalproperty* prop, const char* v); const char* icalproperty_get_owner(const icalproperty* prop);icalproperty* icalproperty_vanew_owner(const char* v, ...); /* PERCENT-COMPLETE */ icalproperty* icalproperty_new_percentcomplete(int v); void icalproperty_set_percentcomplete(icalproperty* prop, int v); int icalproperty_get_percentcomplete(const icalproperty* prop);icalproperty* icalproperty_vanew_percentcomplete(int v, ...); /* PRIORITY */ icalproperty* icalproperty_new_priority(int v); void icalproperty_set_priority(icalproperty* prop, int v); int icalproperty_get_priority(const icalproperty* prop);icalproperty* icalproperty_vanew_priority(int v, ...); /* PRODID */ icalproperty* icalproperty_new_prodid(const char* v); void icalproperty_set_prodid(icalproperty* prop, const char* v); const char* icalproperty_get_prodid(const icalproperty* prop);icalproperty* icalproperty_vanew_prodid(const char* v, ...); /* QUERY */ icalproperty* icalproperty_new_query(const char* v); void icalproperty_set_query(icalproperty* prop, const char* v); const char* icalproperty_get_query(const icalproperty* prop);icalproperty* icalproperty_vanew_query(const char* v, ...); /* QUERYNAME */ icalproperty* icalproperty_new_queryname(const char* v); void icalproperty_set_queryname(icalproperty* prop, const char* v); const char* icalproperty_get_queryname(const icalproperty* prop);icalproperty* icalproperty_vanew_queryname(const char* v, ...); /* RDATE */ icalproperty* icalproperty_new_rdate(struct icaldatetimeperiodtype v); void icalproperty_set_rdate(icalproperty* prop, struct icaldatetimeperiodtype v); struct icaldatetimeperiodtype icalproperty_get_rdate(const icalproperty* prop);icalproperty* icalproperty_vanew_rdate(struct icaldatetimeperiodtype v, ...); /* RECURRENCE-ID */ icalproperty* icalproperty_new_recurrenceid(struct icaltimetype v); void icalproperty_set_recurrenceid(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_recurrenceid(const icalproperty* prop);icalproperty* icalproperty_vanew_recurrenceid(struct icaltimetype v, ...); /* RELATED-TO */ icalproperty* icalproperty_new_relatedto(const char* v); void icalproperty_set_relatedto(icalproperty* prop, const char* v); const char* icalproperty_get_relatedto(const icalproperty* prop);icalproperty* icalproperty_vanew_relatedto(const char* v, ...); /* RELCALID */ icalproperty* icalproperty_new_relcalid(const char* v); void icalproperty_set_relcalid(icalproperty* prop, const char* v); const char* icalproperty_get_relcalid(const icalproperty* prop);icalproperty* icalproperty_vanew_relcalid(const char* v, ...); /* REPEAT */ icalproperty* icalproperty_new_repeat(int v); void icalproperty_set_repeat(icalproperty* prop, int v); int icalproperty_get_repeat(const icalproperty* prop);icalproperty* icalproperty_vanew_repeat(int v, ...); /* REQUEST-STATUS */ icalproperty* icalproperty_new_requeststatus(struct icalreqstattype v); void icalproperty_set_requeststatus(icalproperty* prop, struct icalreqstattype v); struct icalreqstattype icalproperty_get_requeststatus(const icalproperty* prop);icalproperty* icalproperty_vanew_requeststatus(struct icalreqstattype v, ...); /* RESOURCES */ icalproperty* icalproperty_new_resources(const char* v); void icalproperty_set_resources(icalproperty* prop, const char* v); const char* icalproperty_get_resources(const icalproperty* prop);icalproperty* icalproperty_vanew_resources(const char* v, ...); /* RRULE */ icalproperty* icalproperty_new_rrule(struct icalrecurrencetype v); void icalproperty_set_rrule(icalproperty* prop, struct icalrecurrencetype v); struct icalrecurrencetype icalproperty_get_rrule(const icalproperty* prop);icalproperty* icalproperty_vanew_rrule(struct icalrecurrencetype v, ...); /* SCOPE */ icalproperty* icalproperty_new_scope(const char* v); void icalproperty_set_scope(icalproperty* prop, const char* v); const char* icalproperty_get_scope(const icalproperty* prop);icalproperty* icalproperty_vanew_scope(const char* v, ...); /* SEQUENCE */ icalproperty* icalproperty_new_sequence(int v); void icalproperty_set_sequence(icalproperty* prop, int v); int icalproperty_get_sequence(const icalproperty* prop);icalproperty* icalproperty_vanew_sequence(int v, ...); /* STATUS */ icalproperty* icalproperty_new_status(enum icalproperty_status v); void icalproperty_set_status(icalproperty* prop, enum icalproperty_status v); enum icalproperty_status icalproperty_get_status(const icalproperty* prop);icalproperty* icalproperty_vanew_status(enum icalproperty_status v, ...); /* SUMMARY */ icalproperty* icalproperty_new_summary(const char* v); void icalproperty_set_summary(icalproperty* prop, const char* v); const char* icalproperty_get_summary(const icalproperty* prop);icalproperty* icalproperty_vanew_summary(const char* v, ...); /* TARGET */ icalproperty* icalproperty_new_target(const char* v); void icalproperty_set_target(icalproperty* prop, const char* v); const char* icalproperty_get_target(const icalproperty* prop);icalproperty* icalproperty_vanew_target(const char* v, ...); /* TRANSP */ icalproperty* icalproperty_new_transp(enum icalproperty_transp v); void icalproperty_set_transp(icalproperty* prop, enum icalproperty_transp v); enum icalproperty_transp icalproperty_get_transp(const icalproperty* prop);icalproperty* icalproperty_vanew_transp(enum icalproperty_transp v, ...); /* TRIGGER */ icalproperty* icalproperty_new_trigger(struct icaltriggertype v); void icalproperty_set_trigger(icalproperty* prop, struct icaltriggertype v); struct icaltriggertype icalproperty_get_trigger(const icalproperty* prop);icalproperty* icalproperty_vanew_trigger(struct icaltriggertype v, ...); /* TZID */ icalproperty* icalproperty_new_tzid(const char* v); void icalproperty_set_tzid(icalproperty* prop, const char* v); const char* icalproperty_get_tzid(const icalproperty* prop);icalproperty* icalproperty_vanew_tzid(const char* v, ...); /* TZNAME */ icalproperty* icalproperty_new_tzname(const char* v); void icalproperty_set_tzname(icalproperty* prop, const char* v); const char* icalproperty_get_tzname(const icalproperty* prop);icalproperty* icalproperty_vanew_tzname(const char* v, ...); /* TZOFFSETFROM */ icalproperty* icalproperty_new_tzoffsetfrom(int v); void icalproperty_set_tzoffsetfrom(icalproperty* prop, int v); int icalproperty_get_tzoffsetfrom(const icalproperty* prop);icalproperty* icalproperty_vanew_tzoffsetfrom(int v, ...); /* TZOFFSETTO */ icalproperty* icalproperty_new_tzoffsetto(int v); void icalproperty_set_tzoffsetto(icalproperty* prop, int v); int icalproperty_get_tzoffsetto(const icalproperty* prop);icalproperty* icalproperty_vanew_tzoffsetto(int v, ...); /* TZURL */ icalproperty* icalproperty_new_tzurl(const char* v); void icalproperty_set_tzurl(icalproperty* prop, const char* v); const char* icalproperty_get_tzurl(const icalproperty* prop);icalproperty* icalproperty_vanew_tzurl(const char* v, ...); /* UID */ icalproperty* icalproperty_new_uid(const char* v); void icalproperty_set_uid(icalproperty* prop, const char* v); const char* icalproperty_get_uid(const icalproperty* prop);icalproperty* icalproperty_vanew_uid(const char* v, ...); /* URL */ icalproperty* icalproperty_new_url(const char* v); void icalproperty_set_url(icalproperty* prop, const char* v); const char* icalproperty_get_url(const icalproperty* prop);icalproperty* icalproperty_vanew_url(const char* v, ...); /* VERSION */ icalproperty* icalproperty_new_version(const char* v); void icalproperty_set_version(icalproperty* prop, const char* v); const char* icalproperty_get_version(const icalproperty* prop);icalproperty* icalproperty_vanew_version(const char* v, ...); /* X */ icalproperty* icalproperty_new_x(const char* v); void icalproperty_set_x(icalproperty* prop, const char* v); const char* icalproperty_get_x(const icalproperty* prop);icalproperty* icalproperty_vanew_x(const char* v, ...); /* X-LIC-CLASS */ icalproperty* icalproperty_new_xlicclass(enum icalproperty_xlicclass v); void icalproperty_set_xlicclass(icalproperty* prop, enum icalproperty_xlicclass v); enum icalproperty_xlicclass icalproperty_get_xlicclass(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicclass(enum icalproperty_xlicclass v, ...); /* X-LIC-CLUSTERCOUNT */ icalproperty* icalproperty_new_xlicclustercount(const char* v); void icalproperty_set_xlicclustercount(icalproperty* prop, const char* v); const char* icalproperty_get_xlicclustercount(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicclustercount(const char* v, ...); /* X-LIC-ERROR */ icalproperty* icalproperty_new_xlicerror(const char* v); void icalproperty_set_xlicerror(icalproperty* prop, const char* v); const char* icalproperty_get_xlicerror(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicerror(const char* v, ...); /* X-LIC-MIMECHARSET */ icalproperty* icalproperty_new_xlicmimecharset(const char* v); void icalproperty_set_xlicmimecharset(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimecharset(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimecharset(const char* v, ...); /* X-LIC-MIMECID */ icalproperty* icalproperty_new_xlicmimecid(const char* v); void icalproperty_set_xlicmimecid(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimecid(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimecid(const char* v, ...); /* X-LIC-MIMECONTENTTYPE */ icalproperty* icalproperty_new_xlicmimecontenttype(const char* v); void icalproperty_set_xlicmimecontenttype(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimecontenttype(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimecontenttype(const char* v, ...); /* X-LIC-MIMEENCODING */ icalproperty* icalproperty_new_xlicmimeencoding(const char* v); void icalproperty_set_xlicmimeencoding(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimeencoding(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimeencoding(const char* v, ...); /* X-LIC-MIMEFILENAME */ icalproperty* icalproperty_new_xlicmimefilename(const char* v); void icalproperty_set_xlicmimefilename(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimefilename(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimefilename(const char* v, ...); /* X-LIC-MIMEOPTINFO */ icalproperty* icalproperty_new_xlicmimeoptinfo(const char* v); void icalproperty_set_xlicmimeoptinfo(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimeoptinfo(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimeoptinfo(const char* v, ...); #endif /*ICALPROPERTY_H*/ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalproperty.h CREATOR: eric 20 March 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparam.h ======================================================================*/ #ifndef ICALPROPERTY_H #define ICALPROPERTY_H #include #include /* for va_... */ /* Actually in icalderivedproperty.h: typedef struct icalproperty_impl icalproperty; */ icalproperty* icalproperty_new(icalproperty_kind kind); icalproperty* icalproperty_new_clone(icalproperty * prop); icalproperty* icalproperty_new_from_string(const char* str); const char* icalproperty_as_ical_string(icalproperty* prop); void icalproperty_free(icalproperty* prop); icalproperty_kind icalproperty_isa(icalproperty* property); int icalproperty_isa_property(void* property); void icalproperty_add_parameters(struct icalproperty_impl *prop,va_list args); void icalproperty_add_parameter(icalproperty* prop,icalparameter* parameter); void icalproperty_set_parameter(icalproperty* prop,icalparameter* parameter); void icalproperty_set_parameter_from_string(icalproperty* prop, const char* name, const char* value); const char* icalproperty_get_parameter_as_string(icalproperty* prop, const char* name); void icalproperty_remove_parameter(icalproperty* prop, icalparameter_kind kind); void icalproperty_remove_parameter_by_kind(icalproperty* prop, icalparameter_kind kind); void icalproperty_remove_parameter_by_name(icalproperty* prop, const char *name); void icalproperty_remove_parameter_by_ref(icalproperty* prop, icalparameter *param); int icalproperty_count_parameters(const icalproperty* prop); /* Iterate through the parameters */ icalparameter* icalproperty_get_first_parameter(icalproperty* prop, icalparameter_kind kind); icalparameter* icalproperty_get_next_parameter(icalproperty* prop, icalparameter_kind kind); /* Access the value of the property */ void icalproperty_set_value(icalproperty* prop, icalvalue* value); void icalproperty_set_value_from_string(icalproperty* prop,const char* value, const char* kind); icalvalue* icalproperty_get_value(const icalproperty* prop); const char* icalproperty_get_value_as_string(const icalproperty* prop); /* Deal with X properties */ void icalproperty_set_x_name(icalproperty* prop, const char* name); const char* icalproperty_get_x_name(icalproperty* prop); /** Return the name of the property -- the type name converted to a * string, or the value of _get_x_name if the type is and X * property */ const char* icalproperty_get_property_name (const icalproperty* prop); icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value); /* Convert kinds to string and get default value type */ icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind); icalproperty_kind icalproperty_value_kind_to_kind(icalvalue_kind kind); const char* icalproperty_kind_to_string(icalproperty_kind kind); icalproperty_kind icalproperty_string_to_kind(const char* string); /** Check validity of a specific icalproperty_kind **/ int icalproperty_kind_is_valid(const icalproperty_kind kind); icalproperty_method icalproperty_string_to_method(const char* str); const char* icalproperty_method_to_string(icalproperty_method method); const char* icalproperty_enum_to_string(int e); int icalproperty_string_to_enum(const char* str); int icalproperty_kind_and_string_to_enum(const int kind, const char* str); const char* icalproperty_status_to_string(icalproperty_status); icalproperty_status icalproperty_string_to_status(const char* string); int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e); #endif /*ICALPROPERTY_H*/ /*====================================================================== FILE: pvl.h CREATOR: eric November, 1995 (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ #ifndef __PVL_H__ #define __PVL_H__ typedef struct pvl_list_t* pvl_list; typedef struct pvl_elem_t* pvl_elem; /** * This type is private. Always use pvl_elem instead. The struct would * not even appear in this header except to make code in the USE_MACROS * blocks work */ typedef struct pvl_elem_t { int MAGIC; /**< Magic Identifier */ void *d; /**< Pointer to data user is storing */ struct pvl_elem_t *next; /**< Next element */ struct pvl_elem_t *prior; /**< Prior element */ } pvl_elem_t; /** * This global is incremented for each call to pvl_new_element(); it gives each * list a unique identifer */ extern int pvl_elem_count; extern int pvl_list_count; /* Create new lists or elements */ pvl_elem pvl_new_element(void* d, pvl_elem next,pvl_elem prior); pvl_list pvl_newlist(void); void pvl_free(pvl_list); /* Add, remove, or get the head of the list */ void pvl_unshift(pvl_list l,void *d); void* pvl_shift(pvl_list l); pvl_elem pvl_head(pvl_list); /* Add, remove or get the tail of the list */ void pvl_push(pvl_list l,void *d); void* pvl_pop(pvl_list l); pvl_elem pvl_tail(pvl_list); /* Insert elements in random places */ typedef int (*pvl_comparef)(void* a, void* b); /* a, b are of the data type*/ void pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d); void pvl_insert_after(pvl_list l,pvl_elem e,void *d); void pvl_insert_before(pvl_list l,pvl_elem e,void *d); /* Remove an element, or clear the entire list */ void* pvl_remove(pvl_list,pvl_elem); /* Remove element, return data */ void pvl_clear(pvl_list); /* Remove all elements, de-allocate all data */ int pvl_count(pvl_list); /* Navagate the list */ pvl_elem pvl_next(pvl_elem e); pvl_elem pvl_prior(pvl_elem e); /* get the data in the list */ #ifndef PVL_USE_MACROS void* pvl_data(pvl_elem); #else #define pvl_data(x) x==0 ? 0 : ((struct pvl_elem_t *)x)->d; #endif /* Find an element for which a function returns true */ typedef int (*pvl_findf)(void* a, void* b); /*a is list elem, b is other data*/ pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v); pvl_elem pvl_find_next(pvl_list l,pvl_findf f,void* v); /** * Pass each element in the list to a function * a is list elem, b is other data */ typedef void (*pvl_applyf)(void* a, void* b); void pvl_apply(pvl_list l,pvl_applyf f, void *v); #endif /* __PVL_H__ */ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /*====================================================================== FILE: icalarray.h CREATOR: Damon Chaplin 07 March 2001 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2001, Ximian, Inc. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALARRAY_H #define ICALARRAY_H /** @file icalarray.h * * @brief An array of arbitrarily-sized elements which grows * dynamically as elements are added. */ typedef struct _icalarray icalarray; struct _icalarray { int element_size; int increment_size; int num_elements; int space_allocated; void *data; }; icalarray *icalarray_new (int element_size, int increment_size); void icalarray_free (icalarray *array); void icalarray_append (icalarray *array, void *element); void icalarray_remove_element_at (icalarray *array, int position); void *icalarray_element_at (icalarray *array, int position); void icalarray_sort (icalarray *array, int (*compare) (const void *, const void *)); #endif /* ICALARRAY_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalcomponent.h CREATOR: eric 20 March 1999 (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalcomponent.h ======================================================================*/ #ifndef ICALCOMPONENT_H #define ICALCOMPONENT_H typedef struct icalcomponent_impl icalcomponent; #ifndef ICALTIMEONE_DEFINED #define ICALTIMEONE_DEFINED /** @brief An opaque struct representing a timezone. * We declare this here to avoid a circular dependancy. */ typedef struct _icaltimezone icaltimezone; #endif /* This is exposed so that callers will not have to allocate and deallocate iterators. Pretend that you can't see it. */ typedef struct icalcompiter { icalcomponent_kind kind; pvl_elem iter; } icalcompiter; icalcomponent* icalcomponent_new(icalcomponent_kind kind); icalcomponent* icalcomponent_new_clone(icalcomponent* component); icalcomponent* icalcomponent_new_from_string(char* str); icalcomponent* icalcomponent_vanew(icalcomponent_kind kind, ...); void icalcomponent_free(icalcomponent* component); char* icalcomponent_as_ical_string(icalcomponent* component); int icalcomponent_is_valid(icalcomponent* component); icalcomponent_kind icalcomponent_isa(const icalcomponent* component); int icalcomponent_isa_component (void* component); /* * Working with properties */ void icalcomponent_add_property(icalcomponent* component, icalproperty* property); void icalcomponent_remove_property(icalcomponent* component, icalproperty* property); int icalcomponent_count_properties(icalcomponent* component, icalproperty_kind kind); /* Iterate through the properties */ icalproperty* icalcomponent_get_current_property(icalcomponent* component); icalproperty* icalcomponent_get_first_property(icalcomponent* component, icalproperty_kind kind); icalproperty* icalcomponent_get_next_property(icalcomponent* component, icalproperty_kind kind); /* * Working with components */ /* Return the first VEVENT, VTODO or VJOURNAL sub-component of cop, or comp if it is one of those types */ icalcomponent* icalcomponent_get_inner(icalcomponent* comp); void icalcomponent_add_component(icalcomponent* parent, icalcomponent* child); void icalcomponent_remove_component(icalcomponent* parent, icalcomponent* child); int icalcomponent_count_components(icalcomponent* component, icalcomponent_kind kind); /** This takes 2 VCALENDAR components and merges the second one into the first, resolving any problems with conflicting TZIDs. comp_to_merge will no longer exist after calling this function. */ void icalcomponent_merge_component(icalcomponent* comp, icalcomponent* comp_to_merge); /* Iteration Routines. There are two forms of iterators, internal and external. The internal ones came first, and are almost completely sufficient, but they fail badly when you want to construct a loop that removes components from the container.*/ /* Iterate through components */ icalcomponent* icalcomponent_get_current_component (icalcomponent* component); icalcomponent* icalcomponent_get_first_component(icalcomponent* component, icalcomponent_kind kind); icalcomponent* icalcomponent_get_next_component(icalcomponent* component, icalcomponent_kind kind); /* Using external iterators */ icalcompiter icalcomponent_begin_component(icalcomponent* component, icalcomponent_kind kind); icalcompiter icalcomponent_end_component(icalcomponent* component, icalcomponent_kind kind); icalcomponent* icalcompiter_next(icalcompiter* i); icalcomponent* icalcompiter_prior(icalcompiter* i); icalcomponent* icalcompiter_deref(icalcompiter* i); /* Working with embedded error properties */ /* Check the component against itip rules and insert error properties*/ /* Working with embedded error properties */ int icalcomponent_check_restrictions(icalcomponent* comp); /** Count embedded errors. */ int icalcomponent_count_errors(icalcomponent* component); /** Remove all X-LIC-ERROR properties*/ void icalcomponent_strip_errors(icalcomponent* component); /** Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/ void icalcomponent_convert_errors(icalcomponent* component); /* Internal operations. They are private, and you should not be using them. */ icalcomponent* icalcomponent_get_parent(icalcomponent* component); void icalcomponent_set_parent(icalcomponent* component, icalcomponent* parent); /* Kind conversion routines */ int icalcomponent_kind_is_valid(const icalcomponent_kind kind); icalcomponent_kind icalcomponent_string_to_kind(const char* string); const char* icalcomponent_kind_to_string(icalcomponent_kind kind); /************* Derived class methods. **************************** If the code was in an OO language, the remaining routines would be members of classes derived from icalcomponent. Don't call them on the wrong component subtypes. */ /** For VCOMPONENT: Return a reference to the first VEVENT, VTODO or VJOURNAL */ icalcomponent* icalcomponent_get_first_real_component(icalcomponent *c); /** For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the start and end times of an event in UTC */ struct icaltime_span icalcomponent_get_span(icalcomponent* comp); /******************** Convienience routines **********************/ void icalcomponent_set_dtstart(icalcomponent* comp, struct icaltimetype v); struct icaltimetype icalcomponent_get_dtstart(icalcomponent* comp); /* For the icalcomponent routines only, dtend and duration are tied together. If you call the set routine for one and the other exists, the routine will calculate the change to the other. That is, if there is a DTEND and you call set_duration, the routine will modify DTEND to be the sum of DTSTART and the duration. If you call a get routine for one and the other exists, the routine will calculate the return value. If you call a set routine and neither exists, the routine will create the apcompriate comperty */ struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp); void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v); struct icaltimetype icalcomponent_get_due(icalcomponent* comp); void icalcomponent_set_due(icalcomponent* comp, struct icaltimetype v); void icalcomponent_set_duration(icalcomponent* comp, struct icaldurationtype v); struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp); void icalcomponent_set_method(icalcomponent* comp, icalproperty_method method); icalproperty_method icalcomponent_get_method(icalcomponent* comp); struct icaltimetype icalcomponent_get_dtstamp(icalcomponent* comp); void icalcomponent_set_dtstamp(icalcomponent* comp, struct icaltimetype v); void icalcomponent_set_summary(icalcomponent* comp, const char* v); const char* icalcomponent_get_summary(icalcomponent* comp); void icalcomponent_set_comment(icalcomponent* comp, const char* v); const char* icalcomponent_get_comment(icalcomponent* comp); void icalcomponent_set_uid(icalcomponent* comp, const char* v); const char* icalcomponent_get_uid(icalcomponent* comp); void icalcomponent_set_relcalid(icalcomponent* comp, const char* v); const char* icalcomponent_get_relcalid(icalcomponent* comp); void icalcomponent_set_recurrenceid(icalcomponent* comp, struct icaltimetype v); struct icaltimetype icalcomponent_get_recurrenceid(icalcomponent* comp); void icalcomponent_set_description(icalcomponent* comp, const char* v); const char* icalcomponent_get_description(icalcomponent* comp); void icalcomponent_set_location(icalcomponent* comp, const char* v); const char* icalcomponent_get_location(icalcomponent* comp); void icalcomponent_set_organizer(icalcomponent* comp, struct icalorganizertype org); struct icalorganizertype icalcomponent_get_organizer(icalcomponent* comp); void icalcomponent_set_sequence(icalcomponent* comp, int v); int icalcomponent_get_sequence(icalcomponent* comp); void icalcomponent_set_status(icalcomponent* comp, int v); int icalcomponent_get_status(icalcomponent* comp); /** Calls the given function for each TZID parameter found in the component, and any subcomponents. */ void icalcomponent_foreach_tzid(icalcomponent* comp, void (*callback)(icalparameter *param, void *data), void *callback_data); /** Returns the icaltimezone in the component corresponding to the TZID, or NULL if it can't be found. */ icaltimezone* icalcomponent_get_timezone(icalcomponent* comp, const char *tzid); int icalproperty_recurrence_is_excluded(icalcomponent *comp, struct icaltimetype *dtstart, struct icaltimetype *recurtime); void icalcomponent_foreach_recurrence(icalcomponent* comp, struct icaltimetype start, struct icaltimetype end, void (*callback)(icalcomponent *comp, struct icaltime_span *span, void *data), void *callback_data); /*************** Type Specific routines ***************/ icalcomponent* icalcomponent_new_vcalendar(); icalcomponent* icalcomponent_new_vevent(); icalcomponent* icalcomponent_new_vtodo(); icalcomponent* icalcomponent_new_vjournal(); icalcomponent* icalcomponent_new_valarm(); icalcomponent* icalcomponent_new_vfreebusy(); icalcomponent* icalcomponent_new_vtimezone(); icalcomponent* icalcomponent_new_xstandard(); icalcomponent* icalcomponent_new_xdaylight(); icalcomponent* icalcomponent_new_vagenda(); icalcomponent* icalcomponent_new_vquery(); #endif /* !ICALCOMPONENT_H */ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /*====================================================================== FILE: icaltimezone.h CREATOR: Damon Chaplin 15 March 2001 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2001, Damon Chaplin This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ /** * @file icaltimezone.h * @brief timezone handling routines */ #ifndef ICALTIMEZONE_H #define ICALTIMEZONE_H #include /* For FILE* */ /** * @par Creating/Destroying individual icaltimezones. */ /** Creates a new icaltimezone. */ icaltimezone *icaltimezone_new (void); /** Frees all memory used for the icaltimezone. Set free_struct to free the icaltimezone struct as well. */ void icaltimezone_free (icaltimezone *zone, int free_struct); /** * @par Accessing timezones. */ /** Free any builtin timezone information **/ void icaltimezone_free_builtin_timezones(void); /** Returns the array of builtin icaltimezones. */ icalarray* icaltimezone_get_builtin_timezones (void); /** Returns a single builtin timezone, given its Olson city name. */ icaltimezone* icaltimezone_get_builtin_timezone (const char *location); /** Returns a single builtin timezone, given its TZID. */ icaltimezone* icaltimezone_get_builtin_timezone_from_tzid (const char *tzid); /** Returns the UTC timezone. */ icaltimezone* icaltimezone_get_utc_timezone (void); /** Returns the TZID of a timezone. */ char* icaltimezone_get_tzid (icaltimezone *zone); /** Returns the city name of a timezone. */ char* icaltimezone_get_location (icaltimezone *zone); /** Returns the TZNAME properties used in the latest STANDARD and DAYLIGHT components. If they are the same it will return just one, e.g. "LMT". If they are different it will format them like "EST/EDT". Note that this may also return NULL. */ char* icaltimezone_get_tznames (icaltimezone *zone); /** Returns the latitude of a builtin timezone. */ double icaltimezone_get_latitude (icaltimezone *zone); /** Returns the longitude of a builtin timezone. */ double icaltimezone_get_longitude (icaltimezone *zone); /** Returns the VTIMEZONE component of a timezone. */ icalcomponent* icaltimezone_get_component (icaltimezone *zone); /** Sets the VTIMEZONE component of an icaltimezone, initializing the tzid, location & tzname fields. It returns 1 on success or 0 on failure, i.e. no TZID was found. */ int icaltimezone_set_component (icaltimezone *zone, icalcomponent *comp); /** * @par Converting times between timezones. */ void icaltimezone_convert_time (struct icaltimetype *tt, icaltimezone *from_zone, icaltimezone *to_zone); /** * @par Getting offsets from UTC. */ /** Calculates the UTC offset of a given local time in the given timezone. It is the number of seconds to add to UTC to get local time. The is_daylight flag is set to 1 if the time is in daylight-savings time. */ int icaltimezone_get_utc_offset (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight); /** Calculates the UTC offset of a given UTC time in the given timezone. It is the number of seconds to add to UTC to get local time. The is_daylight flag is set to 1 if the time is in daylight-savings time. */ int icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight); /* * Handling arrays of timezones. Mainly for internal use. */ icalarray* icaltimezone_array_new (void); void icaltimezone_array_append_from_vtimezone (icalarray *timezones, icalcomponent *child); void icaltimezone_array_free (icalarray *timezones); /* * @par Handling the default location the timezone files */ /** Set the directory to look for the zonefiles */ void set_zone_directory(char *path); /** Free memory dedicated to the zonefile directory */ void free_zone_directory(); /* * @par Debugging Output. */ /** Dumps information about changes in the timezone up to and including max_year. */ int icaltimezone_dump_changes (icaltimezone *zone, int max_year, FILE *fp); #endif /* ICALTIMEZONE_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalparser.h CREATOR: eric 20 April 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparser.h ======================================================================*/ #ifndef ICALPARSER_H #define ICALPARSER_H #include /* For FILE* */ typedef struct icalparser_impl icalparser; /** * @file icalparser.h * @brief Line-oriented parsing. * * Create a new parser via icalparse_new_parser, then add lines one at * a time with icalparse_add_line(). icalparser_add_line() will return * non-zero when it has finished with a component. */ typedef enum icalparser_state { ICALPARSER_ERROR, ICALPARSER_SUCCESS, ICALPARSER_BEGIN_COMP, ICALPARSER_END_COMP, ICALPARSER_IN_PROGRESS } icalparser_state; icalparser* icalparser_new(void); icalcomponent* icalparser_add_line(icalparser* parser, char* str ); icalcomponent* icalparser_clean(icalparser* parser); icalparser_state icalparser_get_state(icalparser* parser); void icalparser_free(icalparser* parser); /** * Message oriented parsing. icalparser_parse takes a string that * holds the text ( in RFC 2445 format ) and returns a pointer to an * icalcomponent. The caller owns the memory. line_gen_func is a * pointer to a function that returns one content line per invocation */ icalcomponent* icalparser_parse(icalparser *parser, char* (*line_gen_func)(char *s, size_t size, void *d)); /** Set the data that icalparser_parse will give to the line_gen_func as the parameter 'd' */ void icalparser_set_gen_data(icalparser* parser, void* data); icalcomponent* icalparser_parse_string(const char* str); /*********************************************************************** * Parser support functions ***********************************************************************/ /** Use the flex/bison parser to turn a string into a value type */ icalvalue* icalparser_parse_value(icalvalue_kind kind, const char* str, icalcomponent** errors); /** Given a line generator function, return a single iCal content line.*/ char* icalparser_get_line(icalparser* parser, char* (*line_gen_func)(char *s, size_t size, void *d)); char* icalparser_string_line_generator(char *out, size_t buf_size, void *d); #endif /* !ICALPARSE_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalmemory.h CREATOR: eric 30 June 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Initial Developer of the Original Code is Eric Busboom (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ #ifndef ICALMEMORY_H #define ICALMEMORY_H #ifndef WIN32 #include /* for size_t */ #else #include #endif /* Tmp buffers are managed by ical. References can be returned to the caller, although the caller will not own the memory. */ void* icalmemory_tmp_buffer(size_t size); char* icalmemory_tmp_copy(const char* str); /** Add an externally allocated buffer to the ring. */ void icalmemory_add_tmp_buffer(void*); /** Free all memory used in the ring */ void icalmemory_free_ring(void); /* Non-tmp buffers must be freed. These are mostly wrappers around * malloc, etc, but are used so the caller can change the memory * allocators in a future version of the library */ void* icalmemory_new_buffer(size_t size); void* icalmemory_resize_buffer(void* buf, size_t size); void icalmemory_free_buffer(void* buf); /** icalmemory_append_string will copy the string 'string' to the buffer 'buf' starting at position 'pos', reallocing 'buf' if it is too small. 'buf_size' is the size of 'buf' and will be changed if 'buf' is reallocated. 'pos' will point to the last byte of the new string in 'buf', usually a '\0' */ /* THESE ROUTINES CAN NOT BE USED ON TMP BUFFERS. Only use them on normally allocated memory, or on buffers created from icalmemory_new_buffer, never with buffers created by icalmemory_tmp_buffer. If icalmemory_append_string has to resize a buffer on the ring, the ring will loose track of it an you will have memory problems. */ void icalmemory_append_string(char** buf, char** pos, size_t* buf_size, const char* string); /** icalmemory_append_char is similar, but is appends a character instead of a string */ void icalmemory_append_char(char** buf, char** pos, size_t* buf_size, char ch); /** A wrapper around strdup. Partly to trap calls to strdup, partly because in -ansi, gcc on Red Hat claims that strdup is undeclared */ char* icalmemory_strdup(const char *s); #endif /* !ICALMEMORY_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalerror.h CREATOR: eric 09 May 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalerror.h ======================================================================*/ #ifndef ICALERROR_H #define ICALERROR_H #include #include /* For icalerror_warn() */ #ifdef HAVE_CONFIG_H #endif #define ICAL_SETERROR_ISFUNC /** This routine is called before any error is triggered. It is called by icalerror_set_errno, so it does not appear in all of the macros below */ void icalerror_stop_here(void); void icalerror_crash_here(void); typedef enum icalerrorenum { ICAL_NO_ERROR, /* icalerrno may not be initialized - put it first so and pray that the compiler initialize things to zero */ ICAL_BADARG_ERROR, ICAL_NEWFAILED_ERROR, ICAL_ALLOCATION_ERROR, ICAL_MALFORMEDDATA_ERROR, ICAL_PARSE_ERROR, ICAL_INTERNAL_ERROR, /* Like assert --internal consist. prob */ ICAL_FILE_ERROR, ICAL_USAGE_ERROR, ICAL_UNIMPLEMENTED_ERROR, ICAL_UNKNOWN_ERROR /* Used for problems in input to icalerror_strerror()*/ } icalerrorenum; icalerrorenum * icalerrno_return(void); #define icalerrno (*(icalerrno_return())) /** If true, libicl aborts after a call to icalerror_set_error * * @warning NOT THREAD SAFE -- recommended that you do not change * this in a multithreaded program. */ extern int icalerror_errors_are_fatal; /* Warning messages */ #ifdef __GNUC__ca #define icalerror_warn(message) {fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);} #else /* __GNU_C__ */ #define icalerror_warn(message) {fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);} #endif /* __GNU_C__ */ void icalerror_clear_errno(void); void _icalerror_set_errno(icalerrorenum); /* Make an individual error fatal or non-fatal. */ typedef enum icalerrorstate { ICAL_ERROR_FATAL, /* Not fata */ ICAL_ERROR_NONFATAL, /* Fatal */ ICAL_ERROR_DEFAULT, /* Use the value of icalerror_errors_are_fatal*/ ICAL_ERROR_UNKNOWN /* Asked state for an unknown error type */ } icalerrorstate ; char* icalerror_strerror(icalerrorenum e); char* icalerror_perror(); void icalerror_set_error_state( icalerrorenum error, icalerrorstate); icalerrorstate icalerror_get_error_state( icalerrorenum error); #ifndef ICAL_SETERROR_ISFUNC #define icalerror_set_errno(x) \ icalerrno = x; \ if(icalerror_get_error_state(x)==ICAL_ERROR_FATAL || \ (icalerror_get_error_state(x)==ICAL_ERROR_DEFAULT && \ icalerror_errors_are_fatal == 1 )){ \ icalerror_warn(icalerror_strerror(x)); \ assert(0); \ } #else void icalerror_set_errno(icalerrorenum x); #endif #if ICAL_ERRORS_ARE_FATAL == 1 #undef NDEBUG #endif #define icalerror_check_value_type(value,type); #define icalerror_check_property_type(value,type); #define icalerror_check_parameter_type(value,type); #define icalerror_check_component_type(value,type); /* Assert with a message */ #if ICAL_ERRORS_ARE_FATAL == 1 #ifdef __GNUC__ #define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);icalerror_stop_here(); abort();} #else /*__GNUC__*/ #define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);icalerror_stop_here(); abort();} #endif /*__GNUC__*/ #else /* ICAL_ERRORS_ARE_FATAL */ #define icalerror_assert(test,message) #endif /* ICAL_ERRORS_ARE_FATAL */ /* Check & abort if check fails */ #define icalerror_check_arg(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); } /* Check & return void if check fails*/ #define icalerror_check_arg_rv(test,arg) if(!(test)) {icalerror_set_errno(ICAL_BADARG_ERROR); return; } /* Check & return 0 if check fails*/ #define icalerror_check_arg_rz(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return 0;} /* Check & return an error if check fails*/ #define icalerror_check_arg_re(test,arg,error) if(!(test)) { icalerror_stop_here(); assert(0); return error;} /* Check & return something*/ #define icalerror_check_arg_rx(test,arg,x) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return x;} /* String interfaces to set an error to NONFATAL and restore it to its original value */ icalerrorstate icalerror_supress(const char* error); void icalerror_restore(const char* error, icalerrorstate es); #endif /* !ICALERROR_H */ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalrestriction.h CREATOR: eric 24 April 1999 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalrestriction.h Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ #ifndef ICALRESTRICTION_H #define ICALRESTRICTION_H /* These must stay in this order for icalrestriction_compare to work */ typedef enum icalrestriction_kind { ICAL_RESTRICTION_NONE=0, /* 0 */ ICAL_RESTRICTION_ZERO, /* 1 */ ICAL_RESTRICTION_ONE, /* 2 */ ICAL_RESTRICTION_ZEROPLUS, /* 3 */ ICAL_RESTRICTION_ONEPLUS, /* 4 */ ICAL_RESTRICTION_ZEROORONE, /* 5 */ ICAL_RESTRICTION_ONEEXCLUSIVE, /* 6 */ ICAL_RESTRICTION_ONEMUTUAL, /* 7 */ ICAL_RESTRICTION_UNKNOWN /* 8 */ } icalrestriction_kind; int icalrestriction_compare(icalrestriction_kind restr, int count); int icalrestriction_is_parameter_allowed(icalproperty_kind property, icalparameter_kind parameter); int icalrestriction_check(icalcomponent* comp); #endif /* !ICALRESTRICTION_H */ /* -*- Mode: C -*- ====================================================================== FILE: sspm.h Mime Parser CREATOR: eric 25 June 2000 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Initial Developer of the Original Code is Eric Busboom (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ #ifndef SSPM_H #define SSPM_H enum sspm_major_type { SSPM_NO_MAJOR_TYPE, SSPM_TEXT_MAJOR_TYPE, SSPM_IMAGE_MAJOR_TYPE, SSPM_AUDIO_MAJOR_TYPE, SSPM_VIDEO_MAJOR_TYPE, SSPM_APPLICATION_MAJOR_TYPE, SSPM_MULTIPART_MAJOR_TYPE, SSPM_MESSAGE_MAJOR_TYPE, SSPM_UNKNOWN_MAJOR_TYPE }; enum sspm_minor_type { SSPM_NO_MINOR_TYPE, SSPM_ANY_MINOR_TYPE, SSPM_PLAIN_MINOR_TYPE, SSPM_RFC822_MINOR_TYPE, SSPM_DIGEST_MINOR_TYPE, SSPM_CALENDAR_MINOR_TYPE, SSPM_MIXED_MINOR_TYPE, SSPM_RELATED_MINOR_TYPE, SSPM_ALTERNATIVE_MINOR_TYPE, SSPM_PARALLEL_MINOR_TYPE, SSPM_UNKNOWN_MINOR_TYPE }; enum sspm_encoding { SSPM_NO_ENCODING, SSPM_QUOTED_PRINTABLE_ENCODING, SSPM_8BIT_ENCODING, SSPM_7BIT_ENCODING, SSPM_BINARY_ENCODING, SSPM_BASE64_ENCODING, SSPM_UNKNOWN_ENCODING }; enum sspm_error{ SSPM_NO_ERROR, SSPM_UNEXPECTED_BOUNDARY_ERROR, SSPM_WRONG_BOUNDARY_ERROR, SSPM_NO_BOUNDARY_ERROR, SSPM_NO_HEADER_ERROR, SSPM_MALFORMED_HEADER_ERROR }; struct sspm_header { int def; char* boundary; enum sspm_major_type major; enum sspm_minor_type minor; char *minor_text; char ** content_type_params; char* charset; enum sspm_encoding encoding; char* filename; char* content_id; enum sspm_error error; char* error_text; }; struct sspm_part { struct sspm_header header; int level; size_t data_size; void *data; }; struct sspm_action_map { enum sspm_major_type major; enum sspm_minor_type minor; void* (*new_part)(); void (*add_line)(void *part, struct sspm_header *header, char* line, size_t size); void* (*end_part)(void* part); void (*free_part)(void *part); }; char* sspm_major_type_string(enum sspm_major_type type); char* sspm_minor_type_string(enum sspm_minor_type type); char* sspm_encoding_string(enum sspm_encoding type); int sspm_parse_mime(struct sspm_part *parts, size_t max_parts, struct sspm_action_map *actions, char* (*get_string)(char *s, size_t size, void* data), void *get_string_data, struct sspm_header *first_header ); void sspm_free_parts(struct sspm_part *parts, size_t max_parts); char *decode_quoted_printable(char *dest, char *src, size_t *size); char *decode_base64(char *dest, char *src, size_t *size); int sspm_write_mime(struct sspm_part *parts,size_t num_parts, char **output_string, char* header); #endif /*SSPM_H*/ /* -*- Mode: C -*- */ /*====================================================================== FILE: icalmime.h CREATOR: eric 26 July 2000 $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALMIME_H #define ICALMIME_H icalcomponent* icalmime_parse( char* (*line_gen_func)(char *s, size_t size, void *d), void *data); /* The inverse of icalmime_parse, not implemented yet. Use sspm.h directly. */ char* icalmime_as_mime_string(char* component); #endif /* !ICALMIME_H */ /* -*- Mode: C -*- ====================================================================== FILE: icallangbind.h CREATOR: eric 25 jan 2001 DESCRIPTION: $Id: ical.h,v 1.6 2002-10-10 00:41:34 acampi Exp $ $Locker: $ (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified under the same terms as perl itself. ( Either the Artistic License or the GPL. ) ======================================================================*/ #ifndef __ICALLANGBIND_H__ #define __ICALLANGBIND_H__ int* icallangbind_new_array(int size); void icallangbind_free_array(int* array); int icallangbind_access_array(int* array, int index); icalproperty* icallangbind_get_property(icalcomponent *c, int n, const char* prop); const char* icallangbind_get_property_val(icalproperty* p); const char* icallangbind_get_parameter(icalproperty *p, const char* parameter); icalcomponent* icallangbind_get_component(icalcomponent *c, const char* comp); icalproperty* icallangbind_get_first_property(icalcomponent *c, const char* prop); icalproperty* icallangbind_get_next_property(icalcomponent *c, const char* prop); icalcomponent* icallangbind_get_first_component(icalcomponent *c, const char* comp); icalcomponent* icallangbind_get_next_component(icalcomponent *c, const char* comp); icalparameter* icallangbind_get_first_parameter(icalproperty *prop); icalparameter* icallangbind_get_next_parameter(icalproperty *prop); const char* icallangbind_property_eval_string(icalproperty* prop, char* sep); int icallangbind_string_to_open_flag(const char* str); #endif /*__ICALLANGBIND_H__*/ #ifdef __cplusplus }; #endif #endif libical-1.0/src/libical/autogenex/icalderivedvalue.h0000664000076400007640000002426512132563130021606 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue.h CREATOR: eric 20 March 1999 $Id: icalderivedvalue.h,v 1.5 2002-09-01 19:12:31 gray-john Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.h ======================================================================*/ #ifndef ICALDERIVEDVALUE_H #define ICALDERIVEDVALUE_H #include "icaltypes.h" #include "icalrecur.h" #include "icaltime.h" #include "icalduration.h" #include "icalperiod.h" #include "icalattach.h" typedef struct icalvalue_impl icalvalue; void icalvalue_set_x(icalvalue* value, const char* v); icalvalue* icalvalue_new_x(const char* v); const char* icalvalue_get_x(const icalvalue* value); icalvalue* icalvalue_new_recur (struct icalrecurrencetype v); void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value); icalvalue* icalvalue_new_trigger (struct icaltriggertype v); void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v); struct icaltriggertype icalvalue_get_trigger(const icalvalue* value); icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v); void icalvalue_set_datetimeperiod(icalvalue* value, struct icaldatetimeperiodtype v); struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value); icalvalue *icalvalue_new_attach (icalattach *attach); void icalvalue_set_attach (icalvalue *value, icalattach *attach); icalattach *icalvalue_get_attach (const icalvalue *value); void icalvalue_reset_kind(icalvalue* value); typedef enum icalvalue_kind { ICAL_ANY_VALUE=5000, ICAL_BOOLEAN_VALUE=5001, ICAL_UTCOFFSET_VALUE=5002, ICAL_XLICCLASS_VALUE=5003, ICAL_RECUR_VALUE=5004, ICAL_METHOD_VALUE=5005, ICAL_CALADDRESS_VALUE=5006, ICAL_PERIOD_VALUE=5007, ICAL_STATUS_VALUE=5008, ICAL_BINARY_VALUE=5009, ICAL_TEXT_VALUE=5010, ICAL_DURATION_VALUE=5011, ICAL_DATETIMEPERIOD_VALUE=5012, ICAL_INTEGER_VALUE=5013, ICAL_URI_VALUE=5014, ICAL_TRIGGER_VALUE=5015, ICAL_ATTACH_VALUE=5016, ICAL_CLASS_VALUE=5017, ICAL_FLOAT_VALUE=5018, ICAL_QUERY_VALUE=5019, ICAL_STRING_VALUE=5020, ICAL_TRANSP_VALUE=5021, ICAL_X_VALUE=5022, ICAL_DATETIME_VALUE=5023, ICAL_REQUESTSTATUS_VALUE=5024, ICAL_GEO_VALUE=5025, ICAL_DATE_VALUE=5026, ICAL_ACTION_VALUE=5027, ICAL_NO_VALUE=5028 } icalvalue_kind ; #define ICALPROPERTY_FIRST_ENUM 10000 typedef enum icalproperty_action { ICAL_ACTION_X = 10000, ICAL_ACTION_AUDIO = 10001, ICAL_ACTION_DISPLAY = 10002, ICAL_ACTION_EMAIL = 10003, ICAL_ACTION_PROCEDURE = 10004, ICAL_ACTION_NONE = 10005 } icalproperty_action; typedef enum icalproperty_class { ICAL_CLASS_X = 10006, ICAL_CLASS_PUBLIC = 10007, ICAL_CLASS_PRIVATE = 10008, ICAL_CLASS_CONFIDENTIAL = 10009, ICAL_CLASS_NONE = 10010 } icalproperty_class; typedef enum icalproperty_method { ICAL_METHOD_X = 10011, ICAL_METHOD_PUBLISH = 10012, ICAL_METHOD_REQUEST = 10013, ICAL_METHOD_REPLY = 10014, ICAL_METHOD_ADD = 10015, ICAL_METHOD_CANCEL = 10016, ICAL_METHOD_REFRESH = 10017, ICAL_METHOD_COUNTER = 10018, ICAL_METHOD_DECLINECOUNTER = 10019, ICAL_METHOD_CREATE = 10020, ICAL_METHOD_READ = 10021, ICAL_METHOD_RESPONSE = 10022, ICAL_METHOD_MOVE = 10023, ICAL_METHOD_MODIFY = 10024, ICAL_METHOD_GENERATEUID = 10025, ICAL_METHOD_DELETE = 10026, ICAL_METHOD_NONE = 10027 } icalproperty_method; typedef enum icalproperty_status { ICAL_STATUS_X = 10028, ICAL_STATUS_TENTATIVE = 10029, ICAL_STATUS_CONFIRMED = 10030, ICAL_STATUS_COMPLETED = 10031, ICAL_STATUS_NEEDSACTION = 10032, ICAL_STATUS_CANCELLED = 10033, ICAL_STATUS_INPROCESS = 10034, ICAL_STATUS_DRAFT = 10035, ICAL_STATUS_FINAL = 10036, ICAL_STATUS_NONE = 10037 } icalproperty_status; typedef enum icalproperty_transp { ICAL_TRANSP_X = 10038, ICAL_TRANSP_OPAQUE = 10039, ICAL_TRANSP_OPAQUENOCONFLICT = 10040, ICAL_TRANSP_TRANSPARENT = 10041, ICAL_TRANSP_TRANSPARENTNOCONFLICT = 10042, ICAL_TRANSP_NONE = 10043 } icalproperty_transp; typedef enum icalproperty_xlicclass { ICAL_XLICCLASS_X = 10044, ICAL_XLICCLASS_PUBLISHNEW = 10045, ICAL_XLICCLASS_PUBLISHUPDATE = 10046, ICAL_XLICCLASS_PUBLISHFREEBUSY = 10047, ICAL_XLICCLASS_REQUESTNEW = 10048, ICAL_XLICCLASS_REQUESTUPDATE = 10049, ICAL_XLICCLASS_REQUESTRESCHEDULE = 10050, ICAL_XLICCLASS_REQUESTDELEGATE = 10051, ICAL_XLICCLASS_REQUESTNEWORGANIZER = 10052, ICAL_XLICCLASS_REQUESTFORWARD = 10053, ICAL_XLICCLASS_REQUESTSTATUS = 10054, ICAL_XLICCLASS_REQUESTFREEBUSY = 10055, ICAL_XLICCLASS_REPLYACCEPT = 10056, ICAL_XLICCLASS_REPLYDECLINE = 10057, ICAL_XLICCLASS_REPLYDELEGATE = 10058, ICAL_XLICCLASS_REPLYCRASHERACCEPT = 10059, ICAL_XLICCLASS_REPLYCRASHERDECLINE = 10060, ICAL_XLICCLASS_ADDINSTANCE = 10061, ICAL_XLICCLASS_CANCELEVENT = 10062, ICAL_XLICCLASS_CANCELINSTANCE = 10063, ICAL_XLICCLASS_CANCELALL = 10064, ICAL_XLICCLASS_REFRESH = 10065, ICAL_XLICCLASS_COUNTER = 10066, ICAL_XLICCLASS_DECLINECOUNTER = 10067, ICAL_XLICCLASS_MALFORMED = 10068, ICAL_XLICCLASS_OBSOLETE = 10069, ICAL_XLICCLASS_MISSEQUENCED = 10070, ICAL_XLICCLASS_UNKNOWN = 10071, ICAL_XLICCLASS_NONE = 10072 } icalproperty_xlicclass; #define ICALPROPERTY_LAST_ENUM 10073 /* BOOLEAN */ icalvalue* icalvalue_new_boolean(int v); int icalvalue_get_boolean(const icalvalue* value); void icalvalue_set_boolean(icalvalue* value, int v); /* UTC-OFFSET */ icalvalue* icalvalue_new_utcoffset(int v); int icalvalue_get_utcoffset(const icalvalue* value); void icalvalue_set_utcoffset(icalvalue* value, int v); /* X-LIC-CLASS */ icalvalue* icalvalue_new_xlicclass(enum icalproperty_xlicclass v); enum icalproperty_xlicclass icalvalue_get_xlicclass(const icalvalue* value); void icalvalue_set_xlicclass(icalvalue* value, enum icalproperty_xlicclass v); /* METHOD */ icalvalue* icalvalue_new_method(enum icalproperty_method v); enum icalproperty_method icalvalue_get_method(const icalvalue* value); void icalvalue_set_method(icalvalue* value, enum icalproperty_method v); /* CAL-ADDRESS */ icalvalue* icalvalue_new_caladdress(const char* v); const char* icalvalue_get_caladdress(const icalvalue* value); void icalvalue_set_caladdress(icalvalue* value, const char* v); /* PERIOD */ icalvalue* icalvalue_new_period(struct icalperiodtype v); struct icalperiodtype icalvalue_get_period(const icalvalue* value); void icalvalue_set_period(icalvalue* value, struct icalperiodtype v); /* STATUS */ icalvalue* icalvalue_new_status(enum icalproperty_status v); enum icalproperty_status icalvalue_get_status(const icalvalue* value); void icalvalue_set_status(icalvalue* value, enum icalproperty_status v); /* BINARY */ icalvalue* icalvalue_new_binary(const char* v); const char* icalvalue_get_binary(const icalvalue* value); void icalvalue_set_binary(icalvalue* value, const char* v); /* TEXT */ icalvalue* icalvalue_new_text(const char* v); const char* icalvalue_get_text(const icalvalue* value); void icalvalue_set_text(icalvalue* value, const char* v); /* DURATION */ icalvalue* icalvalue_new_duration(struct icaldurationtype v); struct icaldurationtype icalvalue_get_duration(const icalvalue* value); void icalvalue_set_duration(icalvalue* value, struct icaldurationtype v); /* INTEGER */ icalvalue* icalvalue_new_integer(int v); int icalvalue_get_integer(const icalvalue* value); void icalvalue_set_integer(icalvalue* value, int v); /* URI */ icalvalue* icalvalue_new_uri(const char* v); const char* icalvalue_get_uri(const icalvalue* value); void icalvalue_set_uri(icalvalue* value, const char* v); /* CLASS */ icalvalue* icalvalue_new_class(enum icalproperty_class v); enum icalproperty_class icalvalue_get_class(const icalvalue* value); void icalvalue_set_class(icalvalue* value, enum icalproperty_class v); /* FLOAT */ icalvalue* icalvalue_new_float(float v); float icalvalue_get_float(const icalvalue* value); void icalvalue_set_float(icalvalue* value, float v); /* QUERY */ icalvalue* icalvalue_new_query(const char* v); const char* icalvalue_get_query(const icalvalue* value); void icalvalue_set_query(icalvalue* value, const char* v); /* STRING */ icalvalue* icalvalue_new_string(const char* v); const char* icalvalue_get_string(const icalvalue* value); void icalvalue_set_string(icalvalue* value, const char* v); /* TRANSP */ icalvalue* icalvalue_new_transp(enum icalproperty_transp v); enum icalproperty_transp icalvalue_get_transp(const icalvalue* value); void icalvalue_set_transp(icalvalue* value, enum icalproperty_transp v); /* DATE-TIME */ icalvalue* icalvalue_new_datetime(struct icaltimetype v); struct icaltimetype icalvalue_get_datetime(const icalvalue* value); void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); /* REQUEST-STATUS */ icalvalue* icalvalue_new_requeststatus(struct icalreqstattype v); struct icalreqstattype icalvalue_get_requeststatus(const icalvalue* value); void icalvalue_set_requeststatus(icalvalue* value, struct icalreqstattype v); /* GEO */ icalvalue* icalvalue_new_geo(struct icalgeotype v); struct icalgeotype icalvalue_get_geo(const icalvalue* value); void icalvalue_set_geo(icalvalue* value, struct icalgeotype v); /* DATE */ icalvalue* icalvalue_new_date(struct icaltimetype v); struct icaltimetype icalvalue_get_date(const icalvalue* value); void icalvalue_set_date(icalvalue* value, struct icaltimetype v); /* ACTION */ icalvalue* icalvalue_new_action(enum icalproperty_action v); enum icalproperty_action icalvalue_get_action(const icalvalue* value); void icalvalue_set_action(icalvalue* value, enum icalproperty_action v); #endif /*ICALVALUE_H*/ libical-1.0/src/libical/autogenex/icalversion.h0000664000076400007640000000016212132563130020602 0ustar allenallen#ifndef ICAL_VERSION_H #define ICAL_VERSION_H #define ICAL_PACKAGE "libical" #define ICAL_VERSION "0.24" #endif libical-1.0/src/libical/autogenex/icalderivedproperty.h0000664000076400007640000005635412132563130022362 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalderivedproperties.{c,h} CREATOR: eric 09 May 1999 $Id: icalderivedproperty.h,v 1.5 2002-09-01 19:12:31 gray-john Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALDERIVEDPROPERTY_H #define ICALDERIVEDPROPERTY_H #include #include "icalparameter.h" #include "icalderivedvalue.h" #include "icalrecur.h" typedef struct icalproperty_impl icalproperty; typedef enum icalproperty_kind { ICAL_ANY_PROPERTY = 0, ICAL_ACTION_PROPERTY, ICAL_ALLOWCONFLICT_PROPERTY, ICAL_ATTACH_PROPERTY, ICAL_ATTENDEE_PROPERTY, ICAL_CALID_PROPERTY, ICAL_CALMASTER_PROPERTY, ICAL_CALSCALE_PROPERTY, ICAL_CARID_PROPERTY, ICAL_CATEGORIES_PROPERTY, ICAL_CLASS_PROPERTY, ICAL_COMMENT_PROPERTY, ICAL_COMPLETED_PROPERTY, ICAL_CONTACT_PROPERTY, ICAL_CREATED_PROPERTY, ICAL_DECREED_PROPERTY, ICAL_DEFAULTCHARSET_PROPERTY, ICAL_DEFAULTLOCALE_PROPERTY, ICAL_DEFAULTTZID_PROPERTY, ICAL_DESCRIPTION_PROPERTY, ICAL_DTEND_PROPERTY, ICAL_DTSTAMP_PROPERTY, ICAL_DTSTART_PROPERTY, ICAL_DUE_PROPERTY, ICAL_DURATION_PROPERTY, ICAL_EXDATE_PROPERTY, ICAL_EXPAND_PROPERTY, ICAL_EXRULE_PROPERTY, ICAL_FREEBUSY_PROPERTY, ICAL_GEO_PROPERTY, ICAL_LASTMODIFIED_PROPERTY, ICAL_LOCATION_PROPERTY, ICAL_MAXRESULTS_PROPERTY, ICAL_MAXRESULTSSIZE_PROPERTY, ICAL_METHOD_PROPERTY, ICAL_ORGANIZER_PROPERTY, ICAL_OWNER_PROPERTY, ICAL_PERCENTCOMPLETE_PROPERTY, ICAL_PRIORITY_PROPERTY, ICAL_PRODID_PROPERTY, ICAL_QUERY_PROPERTY, ICAL_QUERYNAME_PROPERTY, ICAL_RDATE_PROPERTY, ICAL_RECURRENCEID_PROPERTY, ICAL_RELATEDTO_PROPERTY, ICAL_RELCALID_PROPERTY, ICAL_REPEAT_PROPERTY, ICAL_REQUESTSTATUS_PROPERTY, ICAL_RESOURCES_PROPERTY, ICAL_RRULE_PROPERTY, ICAL_SCOPE_PROPERTY, ICAL_SEQUENCE_PROPERTY, ICAL_STATUS_PROPERTY, ICAL_SUMMARY_PROPERTY, ICAL_TARGET_PROPERTY, ICAL_TRANSP_PROPERTY, ICAL_TRIGGER_PROPERTY, ICAL_TZID_PROPERTY, ICAL_TZNAME_PROPERTY, ICAL_TZOFFSETFROM_PROPERTY, ICAL_TZOFFSETTO_PROPERTY, ICAL_TZURL_PROPERTY, ICAL_UID_PROPERTY, ICAL_URL_PROPERTY, ICAL_VERSION_PROPERTY, ICAL_X_PROPERTY, ICAL_XLICCLASS_PROPERTY, ICAL_XLICCLUSTERCOUNT_PROPERTY, ICAL_XLICERROR_PROPERTY, ICAL_XLICMIMECHARSET_PROPERTY, ICAL_XLICMIMECID_PROPERTY, ICAL_XLICMIMECONTENTTYPE_PROPERTY, ICAL_XLICMIMEENCODING_PROPERTY, ICAL_XLICMIMEFILENAME_PROPERTY, ICAL_XLICMIMEOPTINFO_PROPERTY, ICAL_NO_PROPERTY } icalproperty_kind; /* ACTION */ icalproperty* icalproperty_new_action(enum icalproperty_action v); void icalproperty_set_action(icalproperty* prop, enum icalproperty_action v); enum icalproperty_action icalproperty_get_action(const icalproperty* prop);icalproperty* icalproperty_vanew_action(enum icalproperty_action v, ...); /* ALLOW-CONFLICT */ icalproperty* icalproperty_new_allowconflict(const char* v); void icalproperty_set_allowconflict(icalproperty* prop, const char* v); const char* icalproperty_get_allowconflict(const icalproperty* prop);icalproperty* icalproperty_vanew_allowconflict(const char* v, ...); /* ATTACH */ icalproperty* icalproperty_new_attach(icalattach * v); void icalproperty_set_attach(icalproperty* prop, icalattach * v); icalattach * icalproperty_get_attach(const icalproperty* prop);icalproperty* icalproperty_vanew_attach(icalattach * v, ...); /* ATTENDEE */ icalproperty* icalproperty_new_attendee(const char* v); void icalproperty_set_attendee(icalproperty* prop, const char* v); const char* icalproperty_get_attendee(const icalproperty* prop);icalproperty* icalproperty_vanew_attendee(const char* v, ...); /* CALID */ icalproperty* icalproperty_new_calid(const char* v); void icalproperty_set_calid(icalproperty* prop, const char* v); const char* icalproperty_get_calid(const icalproperty* prop);icalproperty* icalproperty_vanew_calid(const char* v, ...); /* CALMASTER */ icalproperty* icalproperty_new_calmaster(const char* v); void icalproperty_set_calmaster(icalproperty* prop, const char* v); const char* icalproperty_get_calmaster(const icalproperty* prop);icalproperty* icalproperty_vanew_calmaster(const char* v, ...); /* CALSCALE */ icalproperty* icalproperty_new_calscale(const char* v); void icalproperty_set_calscale(icalproperty* prop, const char* v); const char* icalproperty_get_calscale(const icalproperty* prop);icalproperty* icalproperty_vanew_calscale(const char* v, ...); /* CARID */ icalproperty* icalproperty_new_carid(const char* v); void icalproperty_set_carid(icalproperty* prop, const char* v); const char* icalproperty_get_carid(const icalproperty* prop);icalproperty* icalproperty_vanew_carid(const char* v, ...); /* CATEGORIES */ icalproperty* icalproperty_new_categories(const char* v); void icalproperty_set_categories(icalproperty* prop, const char* v); const char* icalproperty_get_categories(const icalproperty* prop);icalproperty* icalproperty_vanew_categories(const char* v, ...); /* CLASS */ icalproperty* icalproperty_new_class(enum icalproperty_class v); void icalproperty_set_class(icalproperty* prop, enum icalproperty_class v); enum icalproperty_class icalproperty_get_class(const icalproperty* prop);icalproperty* icalproperty_vanew_class(enum icalproperty_class v, ...); /* COMMENT */ icalproperty* icalproperty_new_comment(const char* v); void icalproperty_set_comment(icalproperty* prop, const char* v); const char* icalproperty_get_comment(const icalproperty* prop);icalproperty* icalproperty_vanew_comment(const char* v, ...); /* COMPLETED */ icalproperty* icalproperty_new_completed(struct icaltimetype v); void icalproperty_set_completed(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_completed(const icalproperty* prop);icalproperty* icalproperty_vanew_completed(struct icaltimetype v, ...); /* CONTACT */ icalproperty* icalproperty_new_contact(const char* v); void icalproperty_set_contact(icalproperty* prop, const char* v); const char* icalproperty_get_contact(const icalproperty* prop);icalproperty* icalproperty_vanew_contact(const char* v, ...); /* CREATED */ icalproperty* icalproperty_new_created(struct icaltimetype v); void icalproperty_set_created(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_created(const icalproperty* prop);icalproperty* icalproperty_vanew_created(struct icaltimetype v, ...); /* DECREED */ icalproperty* icalproperty_new_decreed(const char* v); void icalproperty_set_decreed(icalproperty* prop, const char* v); const char* icalproperty_get_decreed(const icalproperty* prop);icalproperty* icalproperty_vanew_decreed(const char* v, ...); /* DEFAULT-CHARSET */ icalproperty* icalproperty_new_defaultcharset(const char* v); void icalproperty_set_defaultcharset(icalproperty* prop, const char* v); const char* icalproperty_get_defaultcharset(const icalproperty* prop);icalproperty* icalproperty_vanew_defaultcharset(const char* v, ...); /* DEFAULT-LOCALE */ icalproperty* icalproperty_new_defaultlocale(const char* v); void icalproperty_set_defaultlocale(icalproperty* prop, const char* v); const char* icalproperty_get_defaultlocale(const icalproperty* prop);icalproperty* icalproperty_vanew_defaultlocale(const char* v, ...); /* DEFAULT-TZID */ icalproperty* icalproperty_new_defaulttzid(const char* v); void icalproperty_set_defaulttzid(icalproperty* prop, const char* v); const char* icalproperty_get_defaulttzid(const icalproperty* prop);icalproperty* icalproperty_vanew_defaulttzid(const char* v, ...); /* DESCRIPTION */ icalproperty* icalproperty_new_description(const char* v); void icalproperty_set_description(icalproperty* prop, const char* v); const char* icalproperty_get_description(const icalproperty* prop);icalproperty* icalproperty_vanew_description(const char* v, ...); /* DTEND */ icalproperty* icalproperty_new_dtend(struct icaltimetype v); void icalproperty_set_dtend(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_dtend(const icalproperty* prop);icalproperty* icalproperty_vanew_dtend(struct icaltimetype v, ...); /* DTSTAMP */ icalproperty* icalproperty_new_dtstamp(struct icaltimetype v); void icalproperty_set_dtstamp(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_dtstamp(const icalproperty* prop);icalproperty* icalproperty_vanew_dtstamp(struct icaltimetype v, ...); /* DTSTART */ icalproperty* icalproperty_new_dtstart(struct icaltimetype v); void icalproperty_set_dtstart(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_dtstart(const icalproperty* prop);icalproperty* icalproperty_vanew_dtstart(struct icaltimetype v, ...); /* DUE */ icalproperty* icalproperty_new_due(struct icaltimetype v); void icalproperty_set_due(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_due(const icalproperty* prop);icalproperty* icalproperty_vanew_due(struct icaltimetype v, ...); /* DURATION */ icalproperty* icalproperty_new_duration(struct icaldurationtype v); void icalproperty_set_duration(icalproperty* prop, struct icaldurationtype v); struct icaldurationtype icalproperty_get_duration(const icalproperty* prop);icalproperty* icalproperty_vanew_duration(struct icaldurationtype v, ...); /* EXDATE */ icalproperty* icalproperty_new_exdate(struct icaltimetype v); void icalproperty_set_exdate(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_exdate(const icalproperty* prop);icalproperty* icalproperty_vanew_exdate(struct icaltimetype v, ...); /* EXPAND */ icalproperty* icalproperty_new_expand(int v); void icalproperty_set_expand(icalproperty* prop, int v); int icalproperty_get_expand(const icalproperty* prop);icalproperty* icalproperty_vanew_expand(int v, ...); /* EXRULE */ icalproperty* icalproperty_new_exrule(struct icalrecurrencetype v); void icalproperty_set_exrule(icalproperty* prop, struct icalrecurrencetype v); struct icalrecurrencetype icalproperty_get_exrule(const icalproperty* prop);icalproperty* icalproperty_vanew_exrule(struct icalrecurrencetype v, ...); /* FREEBUSY */ icalproperty* icalproperty_new_freebusy(struct icalperiodtype v); void icalproperty_set_freebusy(icalproperty* prop, struct icalperiodtype v); struct icalperiodtype icalproperty_get_freebusy(const icalproperty* prop);icalproperty* icalproperty_vanew_freebusy(struct icalperiodtype v, ...); /* GEO */ icalproperty* icalproperty_new_geo(struct icalgeotype v); void icalproperty_set_geo(icalproperty* prop, struct icalgeotype v); struct icalgeotype icalproperty_get_geo(const icalproperty* prop);icalproperty* icalproperty_vanew_geo(struct icalgeotype v, ...); /* LAST-MODIFIED */ icalproperty* icalproperty_new_lastmodified(struct icaltimetype v); void icalproperty_set_lastmodified(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_lastmodified(const icalproperty* prop);icalproperty* icalproperty_vanew_lastmodified(struct icaltimetype v, ...); /* LOCATION */ icalproperty* icalproperty_new_location(const char* v); void icalproperty_set_location(icalproperty* prop, const char* v); const char* icalproperty_get_location(const icalproperty* prop);icalproperty* icalproperty_vanew_location(const char* v, ...); /* MAXRESULTS */ icalproperty* icalproperty_new_maxresults(int v); void icalproperty_set_maxresults(icalproperty* prop, int v); int icalproperty_get_maxresults(const icalproperty* prop);icalproperty* icalproperty_vanew_maxresults(int v, ...); /* MAXRESULTSSIZE */ icalproperty* icalproperty_new_maxresultssize(int v); void icalproperty_set_maxresultssize(icalproperty* prop, int v); int icalproperty_get_maxresultssize(const icalproperty* prop);icalproperty* icalproperty_vanew_maxresultssize(int v, ...); /* METHOD */ icalproperty* icalproperty_new_method(enum icalproperty_method v); void icalproperty_set_method(icalproperty* prop, enum icalproperty_method v); enum icalproperty_method icalproperty_get_method(const icalproperty* prop);icalproperty* icalproperty_vanew_method(enum icalproperty_method v, ...); /* ORGANIZER */ icalproperty* icalproperty_new_organizer(const char* v); void icalproperty_set_organizer(icalproperty* prop, const char* v); const char* icalproperty_get_organizer(const icalproperty* prop);icalproperty* icalproperty_vanew_organizer(const char* v, ...); /* OWNER */ icalproperty* icalproperty_new_owner(const char* v); void icalproperty_set_owner(icalproperty* prop, const char* v); const char* icalproperty_get_owner(const icalproperty* prop);icalproperty* icalproperty_vanew_owner(const char* v, ...); /* PERCENT-COMPLETE */ icalproperty* icalproperty_new_percentcomplete(int v); void icalproperty_set_percentcomplete(icalproperty* prop, int v); int icalproperty_get_percentcomplete(const icalproperty* prop);icalproperty* icalproperty_vanew_percentcomplete(int v, ...); /* PRIORITY */ icalproperty* icalproperty_new_priority(int v); void icalproperty_set_priority(icalproperty* prop, int v); int icalproperty_get_priority(const icalproperty* prop);icalproperty* icalproperty_vanew_priority(int v, ...); /* PRODID */ icalproperty* icalproperty_new_prodid(const char* v); void icalproperty_set_prodid(icalproperty* prop, const char* v); const char* icalproperty_get_prodid(const icalproperty* prop);icalproperty* icalproperty_vanew_prodid(const char* v, ...); /* QUERY */ icalproperty* icalproperty_new_query(const char* v); void icalproperty_set_query(icalproperty* prop, const char* v); const char* icalproperty_get_query(const icalproperty* prop);icalproperty* icalproperty_vanew_query(const char* v, ...); /* QUERYNAME */ icalproperty* icalproperty_new_queryname(const char* v); void icalproperty_set_queryname(icalproperty* prop, const char* v); const char* icalproperty_get_queryname(const icalproperty* prop);icalproperty* icalproperty_vanew_queryname(const char* v, ...); /* RDATE */ icalproperty* icalproperty_new_rdate(struct icaldatetimeperiodtype v); void icalproperty_set_rdate(icalproperty* prop, struct icaldatetimeperiodtype v); struct icaldatetimeperiodtype icalproperty_get_rdate(const icalproperty* prop);icalproperty* icalproperty_vanew_rdate(struct icaldatetimeperiodtype v, ...); /* RECURRENCE-ID */ icalproperty* icalproperty_new_recurrenceid(struct icaltimetype v); void icalproperty_set_recurrenceid(icalproperty* prop, struct icaltimetype v); struct icaltimetype icalproperty_get_recurrenceid(const icalproperty* prop);icalproperty* icalproperty_vanew_recurrenceid(struct icaltimetype v, ...); /* RELATED-TO */ icalproperty* icalproperty_new_relatedto(const char* v); void icalproperty_set_relatedto(icalproperty* prop, const char* v); const char* icalproperty_get_relatedto(const icalproperty* prop);icalproperty* icalproperty_vanew_relatedto(const char* v, ...); /* RELCALID */ icalproperty* icalproperty_new_relcalid(const char* v); void icalproperty_set_relcalid(icalproperty* prop, const char* v); const char* icalproperty_get_relcalid(const icalproperty* prop);icalproperty* icalproperty_vanew_relcalid(const char* v, ...); /* REPEAT */ icalproperty* icalproperty_new_repeat(int v); void icalproperty_set_repeat(icalproperty* prop, int v); int icalproperty_get_repeat(const icalproperty* prop);icalproperty* icalproperty_vanew_repeat(int v, ...); /* REQUEST-STATUS */ icalproperty* icalproperty_new_requeststatus(struct icalreqstattype v); void icalproperty_set_requeststatus(icalproperty* prop, struct icalreqstattype v); struct icalreqstattype icalproperty_get_requeststatus(const icalproperty* prop);icalproperty* icalproperty_vanew_requeststatus(struct icalreqstattype v, ...); /* RESOURCES */ icalproperty* icalproperty_new_resources(const char* v); void icalproperty_set_resources(icalproperty* prop, const char* v); const char* icalproperty_get_resources(const icalproperty* prop);icalproperty* icalproperty_vanew_resources(const char* v, ...); /* RRULE */ icalproperty* icalproperty_new_rrule(struct icalrecurrencetype v); void icalproperty_set_rrule(icalproperty* prop, struct icalrecurrencetype v); struct icalrecurrencetype icalproperty_get_rrule(const icalproperty* prop);icalproperty* icalproperty_vanew_rrule(struct icalrecurrencetype v, ...); /* SCOPE */ icalproperty* icalproperty_new_scope(const char* v); void icalproperty_set_scope(icalproperty* prop, const char* v); const char* icalproperty_get_scope(const icalproperty* prop);icalproperty* icalproperty_vanew_scope(const char* v, ...); /* SEQUENCE */ icalproperty* icalproperty_new_sequence(int v); void icalproperty_set_sequence(icalproperty* prop, int v); int icalproperty_get_sequence(const icalproperty* prop);icalproperty* icalproperty_vanew_sequence(int v, ...); /* STATUS */ icalproperty* icalproperty_new_status(enum icalproperty_status v); void icalproperty_set_status(icalproperty* prop, enum icalproperty_status v); enum icalproperty_status icalproperty_get_status(const icalproperty* prop);icalproperty* icalproperty_vanew_status(enum icalproperty_status v, ...); /* SUMMARY */ icalproperty* icalproperty_new_summary(const char* v); void icalproperty_set_summary(icalproperty* prop, const char* v); const char* icalproperty_get_summary(const icalproperty* prop);icalproperty* icalproperty_vanew_summary(const char* v, ...); /* TARGET */ icalproperty* icalproperty_new_target(const char* v); void icalproperty_set_target(icalproperty* prop, const char* v); const char* icalproperty_get_target(const icalproperty* prop);icalproperty* icalproperty_vanew_target(const char* v, ...); /* TRANSP */ icalproperty* icalproperty_new_transp(enum icalproperty_transp v); void icalproperty_set_transp(icalproperty* prop, enum icalproperty_transp v); enum icalproperty_transp icalproperty_get_transp(const icalproperty* prop);icalproperty* icalproperty_vanew_transp(enum icalproperty_transp v, ...); /* TRIGGER */ icalproperty* icalproperty_new_trigger(struct icaltriggertype v); void icalproperty_set_trigger(icalproperty* prop, struct icaltriggertype v); struct icaltriggertype icalproperty_get_trigger(const icalproperty* prop);icalproperty* icalproperty_vanew_trigger(struct icaltriggertype v, ...); /* TZID */ icalproperty* icalproperty_new_tzid(const char* v); void icalproperty_set_tzid(icalproperty* prop, const char* v); const char* icalproperty_get_tzid(const icalproperty* prop);icalproperty* icalproperty_vanew_tzid(const char* v, ...); /* TZNAME */ icalproperty* icalproperty_new_tzname(const char* v); void icalproperty_set_tzname(icalproperty* prop, const char* v); const char* icalproperty_get_tzname(const icalproperty* prop);icalproperty* icalproperty_vanew_tzname(const char* v, ...); /* TZOFFSETFROM */ icalproperty* icalproperty_new_tzoffsetfrom(int v); void icalproperty_set_tzoffsetfrom(icalproperty* prop, int v); int icalproperty_get_tzoffsetfrom(const icalproperty* prop);icalproperty* icalproperty_vanew_tzoffsetfrom(int v, ...); /* TZOFFSETTO */ icalproperty* icalproperty_new_tzoffsetto(int v); void icalproperty_set_tzoffsetto(icalproperty* prop, int v); int icalproperty_get_tzoffsetto(const icalproperty* prop);icalproperty* icalproperty_vanew_tzoffsetto(int v, ...); /* TZURL */ icalproperty* icalproperty_new_tzurl(const char* v); void icalproperty_set_tzurl(icalproperty* prop, const char* v); const char* icalproperty_get_tzurl(const icalproperty* prop);icalproperty* icalproperty_vanew_tzurl(const char* v, ...); /* UID */ icalproperty* icalproperty_new_uid(const char* v); void icalproperty_set_uid(icalproperty* prop, const char* v); const char* icalproperty_get_uid(const icalproperty* prop);icalproperty* icalproperty_vanew_uid(const char* v, ...); /* URL */ icalproperty* icalproperty_new_url(const char* v); void icalproperty_set_url(icalproperty* prop, const char* v); const char* icalproperty_get_url(const icalproperty* prop);icalproperty* icalproperty_vanew_url(const char* v, ...); /* VERSION */ icalproperty* icalproperty_new_version(const char* v); void icalproperty_set_version(icalproperty* prop, const char* v); const char* icalproperty_get_version(const icalproperty* prop);icalproperty* icalproperty_vanew_version(const char* v, ...); /* X */ icalproperty* icalproperty_new_x(const char* v); void icalproperty_set_x(icalproperty* prop, const char* v); const char* icalproperty_get_x(const icalproperty* prop);icalproperty* icalproperty_vanew_x(const char* v, ...); /* X-LIC-CLASS */ icalproperty* icalproperty_new_xlicclass(enum icalproperty_xlicclass v); void icalproperty_set_xlicclass(icalproperty* prop, enum icalproperty_xlicclass v); enum icalproperty_xlicclass icalproperty_get_xlicclass(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicclass(enum icalproperty_xlicclass v, ...); /* X-LIC-CLUSTERCOUNT */ icalproperty* icalproperty_new_xlicclustercount(const char* v); void icalproperty_set_xlicclustercount(icalproperty* prop, const char* v); const char* icalproperty_get_xlicclustercount(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicclustercount(const char* v, ...); /* X-LIC-ERROR */ icalproperty* icalproperty_new_xlicerror(const char* v); void icalproperty_set_xlicerror(icalproperty* prop, const char* v); const char* icalproperty_get_xlicerror(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicerror(const char* v, ...); /* X-LIC-MIMECHARSET */ icalproperty* icalproperty_new_xlicmimecharset(const char* v); void icalproperty_set_xlicmimecharset(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimecharset(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimecharset(const char* v, ...); /* X-LIC-MIMECID */ icalproperty* icalproperty_new_xlicmimecid(const char* v); void icalproperty_set_xlicmimecid(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimecid(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimecid(const char* v, ...); /* X-LIC-MIMECONTENTTYPE */ icalproperty* icalproperty_new_xlicmimecontenttype(const char* v); void icalproperty_set_xlicmimecontenttype(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimecontenttype(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimecontenttype(const char* v, ...); /* X-LIC-MIMEENCODING */ icalproperty* icalproperty_new_xlicmimeencoding(const char* v); void icalproperty_set_xlicmimeencoding(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimeencoding(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimeencoding(const char* v, ...); /* X-LIC-MIMEFILENAME */ icalproperty* icalproperty_new_xlicmimefilename(const char* v); void icalproperty_set_xlicmimefilename(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimefilename(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimefilename(const char* v, ...); /* X-LIC-MIMEOPTINFO */ icalproperty* icalproperty_new_xlicmimeoptinfo(const char* v); void icalproperty_set_xlicmimeoptinfo(icalproperty* prop, const char* v); const char* icalproperty_get_xlicmimeoptinfo(const icalproperty* prop);icalproperty* icalproperty_vanew_xlicmimeoptinfo(const char* v, ...); #endif /*ICALPROPERTY_H*/ libical-1.0/src/libical/autogenex/icalderivedparameter.h0000664000076400007640000002520112132563130022441 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalparam.h CREATOR: eric 20 March 1999 $Id: icalderivedparameter.h,v 1.5 2002-09-01 19:12:31 gray-john Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparam.h ======================================================================*/ #ifndef ICALDERIVEDPARAMETER_H #define ICALDERIVEDPARAMETER_H typedef struct icalparameter_impl icalparameter; const char* icalparameter_enum_to_string(int e); int icalparameter_string_to_enum(const char* str); typedef enum icalparameter_kind { ICAL_ANY_PARAMETER = 0, ICAL_ALTREP_PARAMETER, ICAL_CN_PARAMETER, ICAL_CUTYPE_PARAMETER, ICAL_DELEGATEDFROM_PARAMETER, ICAL_DELEGATEDTO_PARAMETER, ICAL_DIR_PARAMETER, ICAL_ENCODING_PARAMETER, ICAL_FBTYPE_PARAMETER, ICAL_FMTTYPE_PARAMETER, ICAL_LANGUAGE_PARAMETER, ICAL_MEMBER_PARAMETER, ICAL_PARTSTAT_PARAMETER, ICAL_RANGE_PARAMETER, ICAL_RELATED_PARAMETER, ICAL_RELTYPE_PARAMETER, ICAL_ROLE_PARAMETER, ICAL_RSVP_PARAMETER, ICAL_SENTBY_PARAMETER, ICAL_TZID_PARAMETER, ICAL_VALUE_PARAMETER, ICAL_X_PARAMETER, ICAL_XLICCOMPARETYPE_PARAMETER, ICAL_XLICERRORTYPE_PARAMETER, ICAL_NO_PARAMETER } icalparameter_kind; #define ICALPARAMETER_FIRST_ENUM 20000 typedef enum icalparameter_cutype { ICAL_CUTYPE_X = 20000, ICAL_CUTYPE_INDIVIDUAL = 20001, ICAL_CUTYPE_GROUP = 20002, ICAL_CUTYPE_RESOURCE = 20003, ICAL_CUTYPE_ROOM = 20004, ICAL_CUTYPE_UNKNOWN = 20005, ICAL_CUTYPE_NONE = 20006 } icalparameter_cutype; typedef enum icalparameter_encoding { ICAL_ENCODING_X = 20007, ICAL_ENCODING_8BIT = 20008, ICAL_ENCODING_BASE64 = 20009, ICAL_ENCODING_NONE = 20010 } icalparameter_encoding; typedef enum icalparameter_fbtype { ICAL_FBTYPE_X = 20011, ICAL_FBTYPE_FREE = 20012, ICAL_FBTYPE_BUSY = 20013, ICAL_FBTYPE_BUSYUNAVAILABLE = 20014, ICAL_FBTYPE_BUSYTENTATIVE = 20015, ICAL_FBTYPE_NONE = 20016 } icalparameter_fbtype; typedef enum icalparameter_partstat { ICAL_PARTSTAT_X = 20017, ICAL_PARTSTAT_NEEDSACTION = 20018, ICAL_PARTSTAT_ACCEPTED = 20019, ICAL_PARTSTAT_DECLINED = 20020, ICAL_PARTSTAT_TENTATIVE = 20021, ICAL_PARTSTAT_DELEGATED = 20022, ICAL_PARTSTAT_COMPLETED = 20023, ICAL_PARTSTAT_INPROCESS = 20024, ICAL_PARTSTAT_NONE = 20025 } icalparameter_partstat; typedef enum icalparameter_range { ICAL_RANGE_X = 20026, ICAL_RANGE_THISANDPRIOR = 20027, ICAL_RANGE_THISANDFUTURE = 20028, ICAL_RANGE_NONE = 20029 } icalparameter_range; typedef enum icalparameter_related { ICAL_RELATED_X = 20030, ICAL_RELATED_START = 20031, ICAL_RELATED_END = 20032, ICAL_RELATED_NONE = 20033 } icalparameter_related; typedef enum icalparameter_reltype { ICAL_RELTYPE_X = 20034, ICAL_RELTYPE_PARENT = 20035, ICAL_RELTYPE_CHILD = 20036, ICAL_RELTYPE_SIBLING = 20037, ICAL_RELTYPE_NONE = 20038 } icalparameter_reltype; typedef enum icalparameter_role { ICAL_ROLE_X = 20039, ICAL_ROLE_CHAIR = 20040, ICAL_ROLE_REQPARTICIPANT = 20041, ICAL_ROLE_OPTPARTICIPANT = 20042, ICAL_ROLE_NONPARTICIPANT = 20043, ICAL_ROLE_NONE = 20044 } icalparameter_role; typedef enum icalparameter_rsvp { ICAL_RSVP_X = 20045, ICAL_RSVP_TRUE = 20046, ICAL_RSVP_FALSE = 20047, ICAL_RSVP_NONE = 20048 } icalparameter_rsvp; typedef enum icalparameter_value { ICAL_VALUE_X = 20049, ICAL_VALUE_BINARY = 20050, ICAL_VALUE_BOOLEAN = 20051, ICAL_VALUE_DATE = 20052, ICAL_VALUE_DURATION = 20053, ICAL_VALUE_FLOAT = 20054, ICAL_VALUE_INTEGER = 20055, ICAL_VALUE_PERIOD = 20056, ICAL_VALUE_RECUR = 20057, ICAL_VALUE_TEXT = 20058, ICAL_VALUE_URI = 20059, ICAL_VALUE_ERROR = 20060, ICAL_VALUE_DATETIME = 20061, ICAL_VALUE_UTCOFFSET = 20062, ICAL_VALUE_CALADDRESS = 20063, ICAL_VALUE_NONE = 20064 } icalparameter_value; typedef enum icalparameter_xliccomparetype { ICAL_XLICCOMPARETYPE_X = 20065, ICAL_XLICCOMPARETYPE_EQUAL = 20066, ICAL_XLICCOMPARETYPE_NOTEQUAL = 20067, ICAL_XLICCOMPARETYPE_LESS = 20068, ICAL_XLICCOMPARETYPE_GREATER = 20069, ICAL_XLICCOMPARETYPE_LESSEQUAL = 20070, ICAL_XLICCOMPARETYPE_GREATEREQUAL = 20071, ICAL_XLICCOMPARETYPE_REGEX = 20072, ICAL_XLICCOMPARETYPE_ISNULL = 20073, ICAL_XLICCOMPARETYPE_ISNOTNULL = 20074, ICAL_XLICCOMPARETYPE_NONE = 20075 } icalparameter_xliccomparetype; typedef enum icalparameter_xlicerrortype { ICAL_XLICERRORTYPE_X = 20076, ICAL_XLICERRORTYPE_COMPONENTPARSEERROR = 20077, ICAL_XLICERRORTYPE_PROPERTYPARSEERROR = 20078, ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR = 20079, ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR = 20080, ICAL_XLICERRORTYPE_VALUEPARSEERROR = 20081, ICAL_XLICERRORTYPE_INVALIDITIP = 20082, ICAL_XLICERRORTYPE_UNKNOWNVCALPROPERROR = 20083, ICAL_XLICERRORTYPE_MIMEPARSEERROR = 20084, ICAL_XLICERRORTYPE_VCALPROPPARSEERROR = 20085, ICAL_XLICERRORTYPE_NONE = 20086 } icalparameter_xlicerrortype; #define ICALPARAMETER_LAST_ENUM 20087 /* DELEGATED-FROM */ icalparameter* icalparameter_new_delegatedfrom(const char* v); const char* icalparameter_get_delegatedfrom(const icalparameter* value); void icalparameter_set_delegatedfrom(icalparameter* value, const char* v); /* RELATED */ icalparameter* icalparameter_new_related(icalparameter_related v); icalparameter_related icalparameter_get_related(const icalparameter* value); void icalparameter_set_related(icalparameter* value, icalparameter_related v); /* SENT-BY */ icalparameter* icalparameter_new_sentby(const char* v); const char* icalparameter_get_sentby(const icalparameter* value); void icalparameter_set_sentby(icalparameter* value, const char* v); /* LANGUAGE */ icalparameter* icalparameter_new_language(const char* v); const char* icalparameter_get_language(const icalparameter* value); void icalparameter_set_language(icalparameter* value, const char* v); /* RELTYPE */ icalparameter* icalparameter_new_reltype(icalparameter_reltype v); icalparameter_reltype icalparameter_get_reltype(const icalparameter* value); void icalparameter_set_reltype(icalparameter* value, icalparameter_reltype v); /* ENCODING */ icalparameter* icalparameter_new_encoding(icalparameter_encoding v); icalparameter_encoding icalparameter_get_encoding(const icalparameter* value); void icalparameter_set_encoding(icalparameter* value, icalparameter_encoding v); /* ALTREP */ icalparameter* icalparameter_new_altrep(const char* v); const char* icalparameter_get_altrep(const icalparameter* value); void icalparameter_set_altrep(icalparameter* value, const char* v); /* FMTTYPE */ icalparameter* icalparameter_new_fmttype(const char* v); const char* icalparameter_get_fmttype(const icalparameter* value); void icalparameter_set_fmttype(icalparameter* value, const char* v); /* FBTYPE */ icalparameter* icalparameter_new_fbtype(icalparameter_fbtype v); icalparameter_fbtype icalparameter_get_fbtype(const icalparameter* value); void icalparameter_set_fbtype(icalparameter* value, icalparameter_fbtype v); /* RSVP */ icalparameter* icalparameter_new_rsvp(icalparameter_rsvp v); icalparameter_rsvp icalparameter_get_rsvp(const icalparameter* value); void icalparameter_set_rsvp(icalparameter* value, icalparameter_rsvp v); /* RANGE */ icalparameter* icalparameter_new_range(icalparameter_range v); icalparameter_range icalparameter_get_range(const icalparameter* value); void icalparameter_set_range(icalparameter* value, icalparameter_range v); /* DELEGATED-TO */ icalparameter* icalparameter_new_delegatedto(const char* v); const char* icalparameter_get_delegatedto(const icalparameter* value); void icalparameter_set_delegatedto(icalparameter* value, const char* v); /* CN */ icalparameter* icalparameter_new_cn(const char* v); const char* icalparameter_get_cn(const icalparameter* value); void icalparameter_set_cn(icalparameter* value, const char* v); /* ROLE */ icalparameter* icalparameter_new_role(icalparameter_role v); icalparameter_role icalparameter_get_role(const icalparameter* value); void icalparameter_set_role(icalparameter* value, icalparameter_role v); /* X-LIC-COMPARETYPE */ icalparameter* icalparameter_new_xliccomparetype(icalparameter_xliccomparetype v); icalparameter_xliccomparetype icalparameter_get_xliccomparetype(const icalparameter* value); void icalparameter_set_xliccomparetype(icalparameter* value, icalparameter_xliccomparetype v); /* PARTSTAT */ icalparameter* icalparameter_new_partstat(icalparameter_partstat v); icalparameter_partstat icalparameter_get_partstat(const icalparameter* value); void icalparameter_set_partstat(icalparameter* value, icalparameter_partstat v); /* X-LIC-ERRORTYPE */ icalparameter* icalparameter_new_xlicerrortype(icalparameter_xlicerrortype v); icalparameter_xlicerrortype icalparameter_get_xlicerrortype(const icalparameter* value); void icalparameter_set_xlicerrortype(icalparameter* value, icalparameter_xlicerrortype v); /* MEMBER */ icalparameter* icalparameter_new_member(const char* v); const char* icalparameter_get_member(const icalparameter* value); void icalparameter_set_member(icalparameter* value, const char* v); /* X */ icalparameter* icalparameter_new_x(const char* v); const char* icalparameter_get_x(const icalparameter* value); void icalparameter_set_x(icalparameter* value, const char* v); /* CUTYPE */ icalparameter* icalparameter_new_cutype(icalparameter_cutype v); icalparameter_cutype icalparameter_get_cutype(const icalparameter* value); void icalparameter_set_cutype(icalparameter* value, icalparameter_cutype v); /* TZID */ icalparameter* icalparameter_new_tzid(const char* v); const char* icalparameter_get_tzid(const icalparameter* value); void icalparameter_set_tzid(icalparameter* value, const char* v); /* VALUE */ icalparameter* icalparameter_new_value(icalparameter_value v); icalparameter_value icalparameter_get_value(const icalparameter* value); void icalparameter_set_value(icalparameter* value, icalparameter_value v); /* DIR */ icalparameter* icalparameter_new_dir(const char* v); const char* icalparameter_get_dir(const icalparameter* value); void icalparameter_set_dir(icalparameter* value, const char* v); #endif /*ICALPARAMETER_H*/ /* Everything below this line is machine generated. Do not edit. */ libical-1.0/src/libical/autogenex/icalderivedproperty.c0000664000076400007640000026253512132563130022355 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalderivedproperty.c CREATOR: eric 15 Feb 2001 $Id: icalderivedproperty.c,v 1.6 2002-09-01 19:12:31 gray-john Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalproperty.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalproperty.h" #include "icalcomponent.h" #include "pvl.h" #include "icalenums.h" #include "icalerror.h" #include "icalmemory.h" #include "icalparser.h" #include /* For icalmemory_strdup, rindex */ #include #include #include #include /* for printf */ #include /* for va_list, va_start, etc. */ struct icalproperty_impl* icalproperty_new_impl (icalproperty_kind kind); void icalproperty_add_parameters(struct icalproperty_impl *prop,va_list args); /* This map associates the property kinds with the string representation of the property name and the kind of VALUE that the property uses as a default */ struct icalproperty_map { icalproperty_kind kind; const char *name; icalvalue_kind value; }; /* This map associates the property enumerations with the king of property that they are used in and the string representation of the enumeration */ struct icalproperty_enum_map { icalproperty_kind prop; int prop_enum; const char* str; }; static struct icalproperty_map property_map[77] = { {ICAL_ACTION_PROPERTY,"ACTION",ICAL_ACTION_VALUE}, {ICAL_ALLOWCONFLICT_PROPERTY,"ALLOW-CONFLICT",ICAL_TEXT_VALUE}, {ICAL_ANY_PROPERTY,"ANY",ICAL_NO_VALUE}, {ICAL_ATTACH_PROPERTY,"ATTACH",ICAL_ATTACH_VALUE}, {ICAL_ATTENDEE_PROPERTY,"ATTENDEE",ICAL_CALADDRESS_VALUE}, {ICAL_CALID_PROPERTY,"CALID",ICAL_TEXT_VALUE}, {ICAL_CALMASTER_PROPERTY,"CALMASTER",ICAL_TEXT_VALUE}, {ICAL_CALSCALE_PROPERTY,"CALSCALE",ICAL_TEXT_VALUE}, {ICAL_CARID_PROPERTY,"CARID",ICAL_TEXT_VALUE}, {ICAL_CATEGORIES_PROPERTY,"CATEGORIES",ICAL_TEXT_VALUE}, {ICAL_CLASS_PROPERTY,"CLASS",ICAL_CLASS_VALUE}, {ICAL_COMMENT_PROPERTY,"COMMENT",ICAL_TEXT_VALUE}, {ICAL_COMPLETED_PROPERTY,"COMPLETED",ICAL_DATETIME_VALUE}, {ICAL_CONTACT_PROPERTY,"CONTACT",ICAL_TEXT_VALUE}, {ICAL_CREATED_PROPERTY,"CREATED",ICAL_DATETIME_VALUE}, {ICAL_DECREED_PROPERTY,"DECREED",ICAL_TEXT_VALUE}, {ICAL_DEFAULTCHARSET_PROPERTY,"DEFAULT-CHARSET",ICAL_TEXT_VALUE}, {ICAL_DEFAULTLOCALE_PROPERTY,"DEFAULT-LOCALE",ICAL_TEXT_VALUE}, {ICAL_DEFAULTTZID_PROPERTY,"DEFAULT-TZID",ICAL_TEXT_VALUE}, {ICAL_DESCRIPTION_PROPERTY,"DESCRIPTION",ICAL_TEXT_VALUE}, {ICAL_DTEND_PROPERTY,"DTEND",ICAL_DATETIME_VALUE}, {ICAL_DTSTAMP_PROPERTY,"DTSTAMP",ICAL_DATETIME_VALUE}, {ICAL_DTSTART_PROPERTY,"DTSTART",ICAL_DATETIME_VALUE}, {ICAL_DUE_PROPERTY,"DUE",ICAL_DATETIME_VALUE}, {ICAL_DURATION_PROPERTY,"DURATION",ICAL_DURATION_VALUE}, {ICAL_EXDATE_PROPERTY,"EXDATE",ICAL_DATETIME_VALUE}, {ICAL_EXPAND_PROPERTY,"EXPAND",ICAL_INTEGER_VALUE}, {ICAL_EXRULE_PROPERTY,"EXRULE",ICAL_RECUR_VALUE}, {ICAL_FREEBUSY_PROPERTY,"FREEBUSY",ICAL_PERIOD_VALUE}, {ICAL_GEO_PROPERTY,"GEO",ICAL_GEO_VALUE}, {ICAL_LASTMODIFIED_PROPERTY,"LAST-MODIFIED",ICAL_DATETIME_VALUE}, {ICAL_LOCATION_PROPERTY,"LOCATION",ICAL_TEXT_VALUE}, {ICAL_MAXRESULTS_PROPERTY,"MAXRESULTS",ICAL_INTEGER_VALUE}, {ICAL_MAXRESULTSSIZE_PROPERTY,"MAXRESULTSSIZE",ICAL_INTEGER_VALUE}, {ICAL_METHOD_PROPERTY,"METHOD",ICAL_METHOD_VALUE}, {ICAL_ORGANIZER_PROPERTY,"ORGANIZER",ICAL_CALADDRESS_VALUE}, {ICAL_OWNER_PROPERTY,"OWNER",ICAL_TEXT_VALUE}, {ICAL_PERCENTCOMPLETE_PROPERTY,"PERCENT-COMPLETE",ICAL_INTEGER_VALUE}, {ICAL_PRIORITY_PROPERTY,"PRIORITY",ICAL_INTEGER_VALUE}, {ICAL_PRODID_PROPERTY,"PRODID",ICAL_TEXT_VALUE}, {ICAL_QUERY_PROPERTY,"QUERY",ICAL_QUERY_VALUE}, {ICAL_QUERYNAME_PROPERTY,"QUERYNAME",ICAL_TEXT_VALUE}, {ICAL_RDATE_PROPERTY,"RDATE",ICAL_DATETIMEPERIOD_VALUE}, {ICAL_RECURRENCEID_PROPERTY,"RECURRENCE-ID",ICAL_DATETIME_VALUE}, {ICAL_RELATEDTO_PROPERTY,"RELATED-TO",ICAL_TEXT_VALUE}, {ICAL_RELCALID_PROPERTY,"RELCALID",ICAL_TEXT_VALUE}, {ICAL_REPEAT_PROPERTY,"REPEAT",ICAL_INTEGER_VALUE}, {ICAL_REQUESTSTATUS_PROPERTY,"REQUEST-STATUS",ICAL_REQUESTSTATUS_VALUE}, {ICAL_RESOURCES_PROPERTY,"RESOURCES",ICAL_TEXT_VALUE}, {ICAL_RRULE_PROPERTY,"RRULE",ICAL_RECUR_VALUE}, {ICAL_SCOPE_PROPERTY,"SCOPE",ICAL_TEXT_VALUE}, {ICAL_SEQUENCE_PROPERTY,"SEQUENCE",ICAL_INTEGER_VALUE}, {ICAL_STATUS_PROPERTY,"STATUS",ICAL_STATUS_VALUE}, {ICAL_SUMMARY_PROPERTY,"SUMMARY",ICAL_TEXT_VALUE}, {ICAL_TARGET_PROPERTY,"TARGET",ICAL_CALADDRESS_VALUE}, {ICAL_TRANSP_PROPERTY,"TRANSP",ICAL_TRANSP_VALUE}, {ICAL_TRIGGER_PROPERTY,"TRIGGER",ICAL_TRIGGER_VALUE}, {ICAL_TZID_PROPERTY,"TZID",ICAL_TEXT_VALUE}, {ICAL_TZNAME_PROPERTY,"TZNAME",ICAL_TEXT_VALUE}, {ICAL_TZOFFSETFROM_PROPERTY,"TZOFFSETFROM",ICAL_UTCOFFSET_VALUE}, {ICAL_TZOFFSETTO_PROPERTY,"TZOFFSETTO",ICAL_UTCOFFSET_VALUE}, {ICAL_TZURL_PROPERTY,"TZURL",ICAL_URI_VALUE}, {ICAL_UID_PROPERTY,"UID",ICAL_TEXT_VALUE}, {ICAL_URL_PROPERTY,"URL",ICAL_URI_VALUE}, {ICAL_VERSION_PROPERTY,"VERSION",ICAL_TEXT_VALUE}, {ICAL_X_PROPERTY,"X",ICAL_X_VALUE}, {ICAL_XLICCLASS_PROPERTY,"X-LIC-CLASS",ICAL_XLICCLASS_VALUE}, {ICAL_XLICCLUSTERCOUNT_PROPERTY,"X-LIC-CLUSTERCOUNT",ICAL_STRING_VALUE}, {ICAL_XLICERROR_PROPERTY,"X-LIC-ERROR",ICAL_TEXT_VALUE}, {ICAL_XLICMIMECHARSET_PROPERTY,"X-LIC-MIMECHARSET",ICAL_STRING_VALUE}, {ICAL_XLICMIMECID_PROPERTY,"X-LIC-MIMECID",ICAL_STRING_VALUE}, {ICAL_XLICMIMECONTENTTYPE_PROPERTY,"X-LIC-MIMECONTENTTYPE",ICAL_STRING_VALUE}, {ICAL_XLICMIMEENCODING_PROPERTY,"X-LIC-MIMEENCODING",ICAL_STRING_VALUE}, {ICAL_XLICMIMEFILENAME_PROPERTY,"X-LIC-MIMEFILENAME",ICAL_STRING_VALUE}, {ICAL_XLICMIMEOPTINFO_PROPERTY,"X-LIC-MIMEOPTINFO",ICAL_STRING_VALUE}, {ICAL_NO_PROPERTY,"",ICAL_NO_VALUE}}; static struct icalproperty_enum_map enum_map[75] = { {ICAL_ACTION_PROPERTY,ICAL_ACTION_X,"" }, /*10000*/ {ICAL_ACTION_PROPERTY,ICAL_ACTION_AUDIO,"AUDIO" }, /*10001*/ {ICAL_ACTION_PROPERTY,ICAL_ACTION_DISPLAY,"DISPLAY" }, /*10002*/ {ICAL_ACTION_PROPERTY,ICAL_ACTION_EMAIL,"EMAIL" }, /*10003*/ {ICAL_ACTION_PROPERTY,ICAL_ACTION_PROCEDURE,"PROCEDURE" }, /*10004*/ {ICAL_ACTION_PROPERTY,ICAL_ACTION_NONE,"" }, /*10005*/ {ICAL_CLASS_PROPERTY,ICAL_CLASS_X,"" }, /*10006*/ {ICAL_CLASS_PROPERTY,ICAL_CLASS_PUBLIC,"PUBLIC" }, /*10007*/ {ICAL_CLASS_PROPERTY,ICAL_CLASS_PRIVATE,"PRIVATE" }, /*10008*/ {ICAL_CLASS_PROPERTY,ICAL_CLASS_CONFIDENTIAL,"CONFIDENTIAL" }, /*10009*/ {ICAL_CLASS_PROPERTY,ICAL_CLASS_NONE,"" }, /*10010*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_X,"" }, /*10011*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_PUBLISH,"PUBLISH" }, /*10012*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_REQUEST,"REQUEST" }, /*10013*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_REPLY,"REPLY" }, /*10014*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_ADD,"ADD" }, /*10015*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_CANCEL,"CANCEL" }, /*10016*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_REFRESH,"REFRESH" }, /*10017*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_COUNTER,"COUNTER" }, /*10018*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_DECLINECOUNTER,"DECLINECOUNTER" }, /*10019*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_CREATE,"CREATE" }, /*10020*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_READ,"READ" }, /*10021*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_RESPONSE,"RESPONSE" }, /*10022*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_MOVE,"MOVE" }, /*10023*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_MODIFY,"MODIFY" }, /*10024*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_GENERATEUID,"GENERATEUID" }, /*10025*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_DELETE,"DELETE" }, /*10026*/ {ICAL_METHOD_PROPERTY,ICAL_METHOD_NONE,"" }, /*10027*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_X,"" }, /*10028*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_TENTATIVE,"TENTATIVE" }, /*10029*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_CONFIRMED,"CONFIRMED" }, /*10030*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_COMPLETED,"COMPLETED" }, /*10031*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_NEEDSACTION,"NEEDS-ACTION" }, /*10032*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_CANCELLED,"CANCELLED" }, /*10033*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_INPROCESS,"IN-PROCESS" }, /*10034*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_DRAFT,"DRAFT" }, /*10035*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_FINAL,"FINAL" }, /*10036*/ {ICAL_STATUS_PROPERTY,ICAL_STATUS_NONE,"" }, /*10037*/ {ICAL_TRANSP_PROPERTY,ICAL_TRANSP_X,"" }, /*10038*/ {ICAL_TRANSP_PROPERTY,ICAL_TRANSP_OPAQUE,"OPAQUE" }, /*10039*/ {ICAL_TRANSP_PROPERTY,ICAL_TRANSP_OPAQUENOCONFLICT,"OPAQUE-NOCONFLICT" }, /*10040*/ {ICAL_TRANSP_PROPERTY,ICAL_TRANSP_TRANSPARENT,"TRANSPARENT" }, /*10041*/ {ICAL_TRANSP_PROPERTY,ICAL_TRANSP_TRANSPARENTNOCONFLICT,"TRANSPARENT-NOCONFLICT" }, /*10042*/ {ICAL_TRANSP_PROPERTY,ICAL_TRANSP_NONE,"" }, /*10043*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_X,"" }, /*10044*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_PUBLISHNEW,"PUBLISH-NEW" }, /*10045*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_PUBLISHUPDATE,"PUBLISH-UPDATE" }, /*10046*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_PUBLISHFREEBUSY,"PUBLISH-FREEBUSY" }, /*10047*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REQUESTNEW,"REQUEST-NEW" }, /*10048*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REQUESTUPDATE,"REQUEST-UPDATE" }, /*10049*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REQUESTRESCHEDULE,"REQUEST-RESCHEDULE" }, /*10050*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REQUESTDELEGATE,"REQUEST-DELEGATE" }, /*10051*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REQUESTNEWORGANIZER,"REQUEST-NEW-ORGANIZER" }, /*10052*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REQUESTFORWARD,"REQUEST-FORWARD" }, /*10053*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REQUESTSTATUS,"REQUEST-STATUS" }, /*10054*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REQUESTFREEBUSY,"REQUEST-FREEBUSY" }, /*10055*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REPLYACCEPT,"REPLY-ACCEPT" }, /*10056*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REPLYDECLINE,"REPLY-DECLINE" }, /*10057*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REPLYDELEGATE,"REPLY-DELEGATE" }, /*10058*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REPLYCRASHERACCEPT,"REPLY-CRASHER-ACCEPT" }, /*10059*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REPLYCRASHERDECLINE,"REPLY-CRASHER-DECLINE" }, /*10060*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_ADDINSTANCE,"ADD-INSTANCE" }, /*10061*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_CANCELEVENT,"CANCEL-EVENT" }, /*10062*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_CANCELINSTANCE,"CANCEL-INSTANCE" }, /*10063*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_CANCELALL,"CANCEL-ALL" }, /*10064*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_REFRESH,"REFRESH" }, /*10065*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_COUNTER,"COUNTER" }, /*10066*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_DECLINECOUNTER,"DECLINECOUNTER" }, /*10067*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_MALFORMED,"MALFORMED" }, /*10068*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_OBSOLETE,"OBSOLETE" }, /*10069*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_MISSEQUENCED,"MISSEQUENCED" }, /*10070*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_UNKNOWN,"UNKNOWN" }, /*10071*/ {ICAL_XLICCLASS_PROPERTY,ICAL_XLICCLASS_NONE,"" }, /*10072*/ {ICAL_NO_PROPERTY,0,""} }; icalproperty* icalproperty_vanew_action(enum icalproperty_action v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ACTION_PROPERTY); icalproperty_set_action((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* ACTION */ icalproperty* icalproperty_new_action(enum icalproperty_action v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ACTION_PROPERTY); icalproperty_set_action((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_action(icalproperty* prop, enum icalproperty_action v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_action(v)); } enum icalproperty_action icalproperty_get_action(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_action(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_allowconflict(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ALLOWCONFLICT_PROPERTY); icalproperty_set_allowconflict((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* ALLOW-CONFLICT */ icalproperty* icalproperty_new_allowconflict(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ALLOWCONFLICT_PROPERTY); icalproperty_set_allowconflict((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_allowconflict(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_allowconflict(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_attach(icalattach * v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTACH_PROPERTY); icalproperty_set_attach((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* ATTACH */ icalproperty* icalproperty_new_attach(icalattach * v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTACH_PROPERTY); icalproperty_set_attach((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_attach(icalproperty* prop, icalattach * v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_attach(v)); } icalattach * icalproperty_get_attach(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_attach(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_attendee(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTENDEE_PROPERTY); icalproperty_set_attendee((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* ATTENDEE */ icalproperty* icalproperty_new_attendee(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTENDEE_PROPERTY); icalproperty_set_attendee((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_attendee(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_caladdress(v)); } const char* icalproperty_get_attendee(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_caladdress(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_calid(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALID_PROPERTY); icalproperty_set_calid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* CALID */ icalproperty* icalproperty_new_calid(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALID_PROPERTY); icalproperty_set_calid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_calid(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_calid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_calmaster(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALMASTER_PROPERTY); icalproperty_set_calmaster((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* CALMASTER */ icalproperty* icalproperty_new_calmaster(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALMASTER_PROPERTY); icalproperty_set_calmaster((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_calmaster(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_calmaster(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_calscale(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALSCALE_PROPERTY); icalproperty_set_calscale((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* CALSCALE */ icalproperty* icalproperty_new_calscale(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALSCALE_PROPERTY); icalproperty_set_calscale((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_calscale(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_calscale(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_carid(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CARID_PROPERTY); icalproperty_set_carid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* CARID */ icalproperty* icalproperty_new_carid(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CARID_PROPERTY); icalproperty_set_carid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_carid(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_carid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_categories(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CATEGORIES_PROPERTY); icalproperty_set_categories((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* CATEGORIES */ icalproperty* icalproperty_new_categories(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CATEGORIES_PROPERTY); icalproperty_set_categories((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_categories(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_categories(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_class(enum icalproperty_class v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CLASS_PROPERTY); icalproperty_set_class((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* CLASS */ icalproperty* icalproperty_new_class(enum icalproperty_class v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CLASS_PROPERTY); icalproperty_set_class((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_class(icalproperty* prop, enum icalproperty_class v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_class(v)); } enum icalproperty_class icalproperty_get_class(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_class(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_comment(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMMENT_PROPERTY); icalproperty_set_comment((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* COMMENT */ icalproperty* icalproperty_new_comment(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMMENT_PROPERTY); icalproperty_set_comment((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_comment(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_comment(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_completed(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMPLETED_PROPERTY); icalproperty_set_completed((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* COMPLETED */ icalproperty* icalproperty_new_completed(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMPLETED_PROPERTY); icalproperty_set_completed((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_completed(icalproperty* prop, struct icaltimetype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_datetime(v)); } struct icaltimetype icalproperty_get_completed(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_contact(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CONTACT_PROPERTY); icalproperty_set_contact((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* CONTACT */ icalproperty* icalproperty_new_contact(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CONTACT_PROPERTY); icalproperty_set_contact((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_contact(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_contact(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_created(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CREATED_PROPERTY); icalproperty_set_created((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* CREATED */ icalproperty* icalproperty_new_created(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CREATED_PROPERTY); icalproperty_set_created((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_created(icalproperty* prop, struct icaltimetype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_datetime(v)); } struct icaltimetype icalproperty_get_created(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_decreed(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DECREED_PROPERTY); icalproperty_set_decreed((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DECREED */ icalproperty* icalproperty_new_decreed(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DECREED_PROPERTY); icalproperty_set_decreed((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_decreed(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_decreed(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_defaultcharset(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DEFAULTCHARSET_PROPERTY); icalproperty_set_defaultcharset((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DEFAULT-CHARSET */ icalproperty* icalproperty_new_defaultcharset(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DEFAULTCHARSET_PROPERTY); icalproperty_set_defaultcharset((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_defaultcharset(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_defaultcharset(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_defaultlocale(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DEFAULTLOCALE_PROPERTY); icalproperty_set_defaultlocale((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DEFAULT-LOCALE */ icalproperty* icalproperty_new_defaultlocale(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DEFAULTLOCALE_PROPERTY); icalproperty_set_defaultlocale((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_defaultlocale(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_defaultlocale(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_defaulttzid(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DEFAULTTZID_PROPERTY); icalproperty_set_defaulttzid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DEFAULT-TZID */ icalproperty* icalproperty_new_defaulttzid(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DEFAULTTZID_PROPERTY); icalproperty_set_defaulttzid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_defaulttzid(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_defaulttzid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_description(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DESCRIPTION_PROPERTY); icalproperty_set_description((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DESCRIPTION */ icalproperty* icalproperty_new_description(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DESCRIPTION_PROPERTY); icalproperty_set_description((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_description(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_description(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_dtend(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTEND_PROPERTY); icalproperty_set_dtend((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DTEND */ icalproperty* icalproperty_new_dtend(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTEND_PROPERTY); icalproperty_set_dtend((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_dtend(icalproperty* prop, struct icaltimetype v){ icalvalue *value; icalerror_check_arg_rv( (prop!=0),"prop"); if (v.is_date) value = icalvalue_new_date(v); else value = icalvalue_new_datetime(v); icalproperty_set_value(prop,value); } struct icaltimetype icalproperty_get_dtend(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_dtstamp(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTAMP_PROPERTY); icalproperty_set_dtstamp((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DTSTAMP */ icalproperty* icalproperty_new_dtstamp(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTAMP_PROPERTY); icalproperty_set_dtstamp((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_dtstamp(icalproperty* prop, struct icaltimetype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_datetime(v)); } struct icaltimetype icalproperty_get_dtstamp(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_dtstart(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTART_PROPERTY); icalproperty_set_dtstart((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DTSTART */ icalproperty* icalproperty_new_dtstart(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTART_PROPERTY); icalproperty_set_dtstart((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_dtstart(icalproperty* prop, struct icaltimetype v){ icalvalue *value; icalerror_check_arg_rv( (prop!=0),"prop"); if (v.is_date) value = icalvalue_new_date(v); else value = icalvalue_new_datetime(v); icalproperty_set_value(prop,value); } struct icaltimetype icalproperty_get_dtstart(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_due(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DUE_PROPERTY); icalproperty_set_due((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DUE */ icalproperty* icalproperty_new_due(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DUE_PROPERTY); icalproperty_set_due((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_due(icalproperty* prop, struct icaltimetype v){ icalvalue *value; icalerror_check_arg_rv( (prop!=0),"prop"); if (v.is_date) value = icalvalue_new_date(v); else value = icalvalue_new_datetime(v); icalproperty_set_value(prop,value); } struct icaltimetype icalproperty_get_due(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_duration(struct icaldurationtype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DURATION_PROPERTY); icalproperty_set_duration((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* DURATION */ icalproperty* icalproperty_new_duration(struct icaldurationtype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DURATION_PROPERTY); icalproperty_set_duration((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_duration(icalproperty* prop, struct icaldurationtype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_duration(v)); } struct icaldurationtype icalproperty_get_duration(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_duration(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_exdate(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXDATE_PROPERTY); icalproperty_set_exdate((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* EXDATE */ icalproperty* icalproperty_new_exdate(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXDATE_PROPERTY); icalproperty_set_exdate((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_exdate(icalproperty* prop, struct icaltimetype v){ icalvalue *value; icalerror_check_arg_rv( (prop!=0),"prop"); if (v.is_date) value = icalvalue_new_date(v); else value = icalvalue_new_datetime(v); icalproperty_set_value(prop,value); } struct icaltimetype icalproperty_get_exdate(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_expand(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXPAND_PROPERTY); icalproperty_set_expand((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* EXPAND */ icalproperty* icalproperty_new_expand(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXPAND_PROPERTY); icalproperty_set_expand((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_expand(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_integer(v)); } int icalproperty_get_expand(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_integer(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_exrule(struct icalrecurrencetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXRULE_PROPERTY); icalproperty_set_exrule((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* EXRULE */ icalproperty* icalproperty_new_exrule(struct icalrecurrencetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXRULE_PROPERTY); icalproperty_set_exrule((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_exrule(icalproperty* prop, struct icalrecurrencetype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_recur(v)); } struct icalrecurrencetype icalproperty_get_exrule(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_recur(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_freebusy(struct icalperiodtype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_FREEBUSY_PROPERTY); icalproperty_set_freebusy((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* FREEBUSY */ icalproperty* icalproperty_new_freebusy(struct icalperiodtype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_FREEBUSY_PROPERTY); icalproperty_set_freebusy((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_freebusy(icalproperty* prop, struct icalperiodtype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_period(v)); } struct icalperiodtype icalproperty_get_freebusy(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_period(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_geo(struct icalgeotype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_GEO_PROPERTY); icalproperty_set_geo((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* GEO */ icalproperty* icalproperty_new_geo(struct icalgeotype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_GEO_PROPERTY); icalproperty_set_geo((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_geo(icalproperty* prop, struct icalgeotype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_geo(v)); } struct icalgeotype icalproperty_get_geo(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_geo(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_lastmodified(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LASTMODIFIED_PROPERTY); icalproperty_set_lastmodified((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* LAST-MODIFIED */ icalproperty* icalproperty_new_lastmodified(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LASTMODIFIED_PROPERTY); icalproperty_set_lastmodified((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_lastmodified(icalproperty* prop, struct icaltimetype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_datetime(v)); } struct icaltimetype icalproperty_get_lastmodified(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_location(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LOCATION_PROPERTY); icalproperty_set_location((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* LOCATION */ icalproperty* icalproperty_new_location(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LOCATION_PROPERTY); icalproperty_set_location((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_location(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_location(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_maxresults(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_MAXRESULTS_PROPERTY); icalproperty_set_maxresults((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* MAXRESULTS */ icalproperty* icalproperty_new_maxresults(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_MAXRESULTS_PROPERTY); icalproperty_set_maxresults((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_maxresults(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_integer(v)); } int icalproperty_get_maxresults(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_integer(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_maxresultssize(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_MAXRESULTSSIZE_PROPERTY); icalproperty_set_maxresultssize((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* MAXRESULTSSIZE */ icalproperty* icalproperty_new_maxresultssize(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_MAXRESULTSSIZE_PROPERTY); icalproperty_set_maxresultssize((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_maxresultssize(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_integer(v)); } int icalproperty_get_maxresultssize(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_integer(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_method(enum icalproperty_method v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_METHOD_PROPERTY); icalproperty_set_method((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* METHOD */ icalproperty* icalproperty_new_method(enum icalproperty_method v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_METHOD_PROPERTY); icalproperty_set_method((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_method(icalproperty* prop, enum icalproperty_method v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_method(v)); } enum icalproperty_method icalproperty_get_method(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_method(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_organizer(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ORGANIZER_PROPERTY); icalproperty_set_organizer((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* ORGANIZER */ icalproperty* icalproperty_new_organizer(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ORGANIZER_PROPERTY); icalproperty_set_organizer((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_organizer(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_caladdress(v)); } const char* icalproperty_get_organizer(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_caladdress(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_owner(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_OWNER_PROPERTY); icalproperty_set_owner((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* OWNER */ icalproperty* icalproperty_new_owner(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_OWNER_PROPERTY); icalproperty_set_owner((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_owner(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_owner(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_percentcomplete(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PERCENTCOMPLETE_PROPERTY); icalproperty_set_percentcomplete((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* PERCENT-COMPLETE */ icalproperty* icalproperty_new_percentcomplete(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PERCENTCOMPLETE_PROPERTY); icalproperty_set_percentcomplete((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_percentcomplete(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_integer(v)); } int icalproperty_get_percentcomplete(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_integer(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_priority(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRIORITY_PROPERTY); icalproperty_set_priority((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* PRIORITY */ icalproperty* icalproperty_new_priority(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRIORITY_PROPERTY); icalproperty_set_priority((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_priority(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_integer(v)); } int icalproperty_get_priority(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_integer(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_prodid(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRODID_PROPERTY); icalproperty_set_prodid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* PRODID */ icalproperty* icalproperty_new_prodid(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRODID_PROPERTY); icalproperty_set_prodid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_prodid(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_prodid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_query(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_QUERY_PROPERTY); icalproperty_set_query((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* QUERY */ icalproperty* icalproperty_new_query(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_QUERY_PROPERTY); icalproperty_set_query((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_query(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_query(v)); } const char* icalproperty_get_query(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_query(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_queryname(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_QUERYNAME_PROPERTY); icalproperty_set_queryname((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* QUERYNAME */ icalproperty* icalproperty_new_queryname(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_QUERYNAME_PROPERTY); icalproperty_set_queryname((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_queryname(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_queryname(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_rdate(struct icaldatetimeperiodtype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RDATE_PROPERTY); icalproperty_set_rdate((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* RDATE */ icalproperty* icalproperty_new_rdate(struct icaldatetimeperiodtype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RDATE_PROPERTY); icalproperty_set_rdate((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_rdate(icalproperty* prop, struct icaldatetimeperiodtype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_datetimeperiod(v)); } struct icaldatetimeperiodtype icalproperty_get_rdate(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetimeperiod(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_recurrenceid(struct icaltimetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RECURRENCEID_PROPERTY); icalproperty_set_recurrenceid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* RECURRENCE-ID */ icalproperty* icalproperty_new_recurrenceid(struct icaltimetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RECURRENCEID_PROPERTY); icalproperty_set_recurrenceid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_recurrenceid(icalproperty* prop, struct icaltimetype v){ icalvalue *value; icalerror_check_arg_rv( (prop!=0),"prop"); if (v.is_date) value = icalvalue_new_date(v); else value = icalvalue_new_datetime(v); icalproperty_set_value(prop,value); } struct icaltimetype icalproperty_get_recurrenceid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_datetime(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_relatedto(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RELATEDTO_PROPERTY); icalproperty_set_relatedto((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* RELATED-TO */ icalproperty* icalproperty_new_relatedto(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RELATEDTO_PROPERTY); icalproperty_set_relatedto((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_relatedto(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_relatedto(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_relcalid(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RELCALID_PROPERTY); icalproperty_set_relcalid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* RELCALID */ icalproperty* icalproperty_new_relcalid(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RELCALID_PROPERTY); icalproperty_set_relcalid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_relcalid(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_relcalid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_repeat(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REPEAT_PROPERTY); icalproperty_set_repeat((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* REPEAT */ icalproperty* icalproperty_new_repeat(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REPEAT_PROPERTY); icalproperty_set_repeat((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_repeat(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_integer(v)); } int icalproperty_get_repeat(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_integer(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_requeststatus(struct icalreqstattype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REQUESTSTATUS_PROPERTY); icalproperty_set_requeststatus((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* REQUEST-STATUS */ icalproperty* icalproperty_new_requeststatus(struct icalreqstattype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REQUESTSTATUS_PROPERTY); icalproperty_set_requeststatus((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_requeststatus(icalproperty* prop, struct icalreqstattype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_requeststatus(v)); } struct icalreqstattype icalproperty_get_requeststatus(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_requeststatus(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_resources(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RESOURCES_PROPERTY); icalproperty_set_resources((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* RESOURCES */ icalproperty* icalproperty_new_resources(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RESOURCES_PROPERTY); icalproperty_set_resources((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_resources(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_resources(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_rrule(struct icalrecurrencetype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RRULE_PROPERTY); icalproperty_set_rrule((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* RRULE */ icalproperty* icalproperty_new_rrule(struct icalrecurrencetype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RRULE_PROPERTY); icalproperty_set_rrule((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_rrule(icalproperty* prop, struct icalrecurrencetype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_recur(v)); } struct icalrecurrencetype icalproperty_get_rrule(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_recur(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_scope(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SCOPE_PROPERTY); icalproperty_set_scope((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* SCOPE */ icalproperty* icalproperty_new_scope(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SCOPE_PROPERTY); icalproperty_set_scope((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_scope(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_scope(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_sequence(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SEQUENCE_PROPERTY); icalproperty_set_sequence((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* SEQUENCE */ icalproperty* icalproperty_new_sequence(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SEQUENCE_PROPERTY); icalproperty_set_sequence((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_sequence(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_integer(v)); } int icalproperty_get_sequence(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_integer(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_status(enum icalproperty_status v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_STATUS_PROPERTY); icalproperty_set_status((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* STATUS */ icalproperty* icalproperty_new_status(enum icalproperty_status v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_STATUS_PROPERTY); icalproperty_set_status((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_status(icalproperty* prop, enum icalproperty_status v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_status(v)); } enum icalproperty_status icalproperty_get_status(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_status(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_summary(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SUMMARY_PROPERTY); icalproperty_set_summary((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* SUMMARY */ icalproperty* icalproperty_new_summary(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SUMMARY_PROPERTY); icalproperty_set_summary((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_summary(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_summary(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_target(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TARGET_PROPERTY); icalproperty_set_target((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* TARGET */ icalproperty* icalproperty_new_target(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TARGET_PROPERTY); icalproperty_set_target((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_target(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_caladdress(v)); } const char* icalproperty_get_target(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_caladdress(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_transp(enum icalproperty_transp v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRANSP_PROPERTY); icalproperty_set_transp((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* TRANSP */ icalproperty* icalproperty_new_transp(enum icalproperty_transp v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRANSP_PROPERTY); icalproperty_set_transp((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_transp(icalproperty* prop, enum icalproperty_transp v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_transp(v)); } enum icalproperty_transp icalproperty_get_transp(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_transp(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_trigger(struct icaltriggertype v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRIGGER_PROPERTY); icalproperty_set_trigger((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* TRIGGER */ icalproperty* icalproperty_new_trigger(struct icaltriggertype v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRIGGER_PROPERTY); icalproperty_set_trigger((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_trigger(icalproperty* prop, struct icaltriggertype v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_trigger(v)); } struct icaltriggertype icalproperty_get_trigger(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_trigger(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_tzid(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZID_PROPERTY); icalproperty_set_tzid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* TZID */ icalproperty* icalproperty_new_tzid(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZID_PROPERTY); icalproperty_set_tzid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_tzid(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_tzid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_tzname(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZNAME_PROPERTY); icalproperty_set_tzname((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* TZNAME */ icalproperty* icalproperty_new_tzname(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZNAME_PROPERTY); icalproperty_set_tzname((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_tzname(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_tzname(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_tzoffsetfrom(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETFROM_PROPERTY); icalproperty_set_tzoffsetfrom((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* TZOFFSETFROM */ icalproperty* icalproperty_new_tzoffsetfrom(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETFROM_PROPERTY); icalproperty_set_tzoffsetfrom((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_tzoffsetfrom(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_utcoffset(v)); } int icalproperty_get_tzoffsetfrom(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_utcoffset(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_tzoffsetto(int v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETTO_PROPERTY); icalproperty_set_tzoffsetto((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* TZOFFSETTO */ icalproperty* icalproperty_new_tzoffsetto(int v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETTO_PROPERTY); icalproperty_set_tzoffsetto((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_tzoffsetto(icalproperty* prop, int v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_utcoffset(v)); } int icalproperty_get_tzoffsetto(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_utcoffset(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_tzurl(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZURL_PROPERTY); icalproperty_set_tzurl((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* TZURL */ icalproperty* icalproperty_new_tzurl(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZURL_PROPERTY); icalproperty_set_tzurl((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_tzurl(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_uri(v)); } const char* icalproperty_get_tzurl(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_uri(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_uid(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_UID_PROPERTY); icalproperty_set_uid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* UID */ icalproperty* icalproperty_new_uid(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_UID_PROPERTY); icalproperty_set_uid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_uid(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_uid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_url(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_URL_PROPERTY); icalproperty_set_url((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* URL */ icalproperty* icalproperty_new_url(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_URL_PROPERTY); icalproperty_set_url((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_url(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_uri(v)); } const char* icalproperty_get_url(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_uri(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_version(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_VERSION_PROPERTY); icalproperty_set_version((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* VERSION */ icalproperty* icalproperty_new_version(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_VERSION_PROPERTY); icalproperty_set_version((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_version(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_version(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_x(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_X_PROPERTY); icalproperty_set_x((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X */ icalproperty* icalproperty_new_x(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_X_PROPERTY); icalproperty_set_x((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_x(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_x(v)); } const char* icalproperty_get_x(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_x(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicclass(enum icalproperty_xlicclass v, ...){ va_list args; struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICCLASS_PROPERTY); icalproperty_set_xlicclass((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-CLASS */ icalproperty* icalproperty_new_xlicclass(enum icalproperty_xlicclass v) { struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICCLASS_PROPERTY); icalproperty_set_xlicclass((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicclass(icalproperty* prop, enum icalproperty_xlicclass v){ icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_xlicclass(v)); } enum icalproperty_xlicclass icalproperty_get_xlicclass(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_xlicclass(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicclustercount(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICCLUSTERCOUNT_PROPERTY); icalproperty_set_xlicclustercount((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-CLUSTERCOUNT */ icalproperty* icalproperty_new_xlicclustercount(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICCLUSTERCOUNT_PROPERTY); icalproperty_set_xlicclustercount((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicclustercount(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_string(v)); } const char* icalproperty_get_xlicclustercount(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_string(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicerror(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICERROR_PROPERTY); icalproperty_set_xlicerror((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-ERROR */ icalproperty* icalproperty_new_xlicerror(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICERROR_PROPERTY); icalproperty_set_xlicerror((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicerror(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_text(v)); } const char* icalproperty_get_xlicerror(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_text(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicmimecharset(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMECHARSET_PROPERTY); icalproperty_set_xlicmimecharset((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-MIMECHARSET */ icalproperty* icalproperty_new_xlicmimecharset(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMECHARSET_PROPERTY); icalproperty_set_xlicmimecharset((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicmimecharset(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_string(v)); } const char* icalproperty_get_xlicmimecharset(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_string(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicmimecid(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMECID_PROPERTY); icalproperty_set_xlicmimecid((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-MIMECID */ icalproperty* icalproperty_new_xlicmimecid(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMECID_PROPERTY); icalproperty_set_xlicmimecid((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicmimecid(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_string(v)); } const char* icalproperty_get_xlicmimecid(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_string(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicmimecontenttype(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMECONTENTTYPE_PROPERTY); icalproperty_set_xlicmimecontenttype((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-MIMECONTENTTYPE */ icalproperty* icalproperty_new_xlicmimecontenttype(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMECONTENTTYPE_PROPERTY); icalproperty_set_xlicmimecontenttype((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicmimecontenttype(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_string(v)); } const char* icalproperty_get_xlicmimecontenttype(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_string(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicmimeencoding(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMEENCODING_PROPERTY); icalproperty_set_xlicmimeencoding((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-MIMEENCODING */ icalproperty* icalproperty_new_xlicmimeencoding(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMEENCODING_PROPERTY); icalproperty_set_xlicmimeencoding((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicmimeencoding(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_string(v)); } const char* icalproperty_get_xlicmimeencoding(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_string(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicmimefilename(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMEFILENAME_PROPERTY); icalproperty_set_xlicmimefilename((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-MIMEFILENAME */ icalproperty* icalproperty_new_xlicmimefilename(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMEFILENAME_PROPERTY); icalproperty_set_xlicmimefilename((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicmimefilename(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_string(v)); } const char* icalproperty_get_xlicmimefilename(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_string(icalproperty_get_value(prop)); } icalproperty* icalproperty_vanew_xlicmimeoptinfo(const char* v, ...){ va_list args; icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMEOPTINFO_PROPERTY); icalproperty_set_xlicmimeoptinfo((icalproperty*)impl,v); va_start(args,v); icalproperty_add_parameters(impl, args); va_end(args); return (icalproperty*)impl; } /* X-LIC-MIMEOPTINFO */ icalproperty* icalproperty_new_xlicmimeoptinfo(const char* v) { icalerror_check_arg_rz( (v!=0),"v"); struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICMIMEOPTINFO_PROPERTY); icalproperty_set_xlicmimeoptinfo((icalproperty*)impl,v); return (icalproperty*)impl; } void icalproperty_set_xlicmimeoptinfo(icalproperty* prop, const char* v){ icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (prop!=0),"prop"); icalproperty_set_value(prop,icalvalue_new_string(v)); } const char* icalproperty_get_xlicmimeoptinfo(const icalproperty* prop){ icalerror_check_arg( (prop!=0),"prop"); return icalvalue_get_string(icalproperty_get_value(prop)); } int icalproperty_kind_is_valid(const icalproperty_kind kind) { int i = 0; do { if (property_map[i].kind == kind) return 1; } while (property_map[i++].kind != ICAL_NO_PROPERTY); return 0; } const char* icalproperty_kind_to_string(icalproperty_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if (property_map[i].kind == kind) { return property_map[i].name; } } return 0; } icalproperty_kind icalproperty_string_to_kind(const char* string) { int i; if (string ==0 ) { return ICAL_NO_PROPERTY; } for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if (strcmp(property_map[i].name, string) == 0) { return property_map[i].kind; } } if(strncmp(string,"X-",2)==0){ return ICAL_X_PROPERTY; } return ICAL_NO_PROPERTY; } icalproperty_kind icalproperty_value_kind_to_kind(icalvalue_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if ( property_map[i].value == kind ) { return property_map[i].kind; } } return ICAL_NO_VALUE; } icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if ( property_map[i].kind == kind ) { return property_map[i].value; } } return ICAL_NO_VALUE; } const char* icalproperty_enum_to_string(int e) { icalerror_check_arg_rz(e >= ICALPROPERTY_FIRST_ENUM,"e"); icalerror_check_arg_rz(e <= ICALPROPERTY_LAST_ENUM,"e"); return enum_map[e-ICALPROPERTY_FIRST_ENUM].str; } int icalproperty_kind_and_string_to_enum(const int kind, const char* str) { icalproperty_kind pkind; int i; icalerror_check_arg_rz(str!=0,"str") if ((pkind = icalproperty_value_kind_to_kind(kind)) == ICAL_NO_VALUE) return 0; while(*str == ' '){ str++; } for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { if (enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == pkind) break; } if (i == ICALPROPERTY_LAST_ENUM) return 0; for (; i != ICALPROPERTY_LAST_ENUM; i++) { if ( strcmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) { return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum; } } return 0; } /** @deprecated please use icalproperty_kind_and_string_to_enum instead */ int icalproperty_string_to_enum(const char* str) { int i; icalerror_check_arg_rz(str!=0,"str") while(*str == ' '){ str++; } for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { if ( strcmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) { return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum; } } return 0; } int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e) { int i; for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { if(enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum == e && enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == kind ){ return 1; } } return 0; } const char* icalproperty_method_to_string(icalproperty_method method) { icalerror_check_arg_rz(method >= ICAL_METHOD_X,"method"); icalerror_check_arg_rz(method <= ICAL_METHOD_NONE,"method"); return enum_map[method-ICALPROPERTY_FIRST_ENUM].str; } icalproperty_method icalproperty_string_to_method(const char* str) { int i; icalerror_check_arg_rx(str!=0,"str",ICAL_METHOD_NONE) while(*str == ' '){ str++; } for (i=ICAL_METHOD_X-ICALPROPERTY_FIRST_ENUM; i != ICAL_METHOD_NONE-ICALPROPERTY_FIRST_ENUM; i++) { if ( strcmp(enum_map[i].str, str) == 0) { return (icalproperty_method)enum_map[i].prop_enum; } } return ICAL_METHOD_NONE; } const char* icalenum_status_to_string(icalproperty_status status) { icalerror_check_arg_rz(status >= ICAL_STATUS_X,"status"); icalerror_check_arg_rz(status <= ICAL_STATUS_NONE,"status"); return enum_map[status-ICALPROPERTY_FIRST_ENUM].str; } icalproperty_status icalenum_string_to_status(const char* str) { int i; icalerror_check_arg_rx(str!=0,"str",ICAL_STATUS_NONE) while(*str == ' '){ str++; } for (i=ICAL_STATUS_X-ICALPROPERTY_FIRST_ENUM; i != ICAL_STATUS_NONE-ICALPROPERTY_FIRST_ENUM; i++) { if ( strcmp(enum_map[i].str, str) == 0) { return (icalproperty_method)enum_map[i].prop_enum; } } return ICAL_STATUS_NONE; } libical-1.0/src/libical/autogenex/icalderivedparameter.c0000664000076400007640000010504712132563130022443 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalderivedparameters.{c,h} CREATOR: eric 09 May 1999 $Id: icalderivedparameter.c,v 1.5 2002-09-01 19:12:31 gray-john Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalderivedparameters.{c,h} Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ /*#line 29 "icalparameter.c.in"*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalparameter.h" #include "icalparameterimpl.h" #include "icalproperty.h" #include "icalerror.h" #include "icalmemory.h" #include /* for malloc() */ #include #include /* for memset() */ icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value); struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind); /* This map associates each of the parameters with the string representation of the paramter's name */ struct icalparameter_kind_map { icalparameter_kind kind; char *name; }; /* This map associates the enumerations for the VALUE parameter with the kinds of VALUEs. */ struct icalparameter_value_kind_map { icalparameter_value value; icalvalue_kind kind; }; /* This map associates the parameter enumerations with a specific parameter and the string representation of the enumeration */ struct icalparameter_map { icalparameter_kind kind; int enumeration; const char* str; }; static struct icalparameter_value_kind_map value_kind_map[15] = { {ICAL_VALUE_BINARY,ICAL_BINARY_VALUE}, {ICAL_VALUE_BOOLEAN,ICAL_BOOLEAN_VALUE}, {ICAL_VALUE_DATE,ICAL_DATE_VALUE}, {ICAL_VALUE_DURATION,ICAL_DURATION_VALUE}, {ICAL_VALUE_FLOAT,ICAL_FLOAT_VALUE}, {ICAL_VALUE_INTEGER,ICAL_INTEGER_VALUE}, {ICAL_VALUE_PERIOD,ICAL_PERIOD_VALUE}, {ICAL_VALUE_RECUR,ICAL_RECUR_VALUE}, {ICAL_VALUE_TEXT,ICAL_TEXT_VALUE}, {ICAL_VALUE_URI,ICAL_URI_VALUE}, {ICAL_VALUE_DATETIME,ICAL_DATETIME_VALUE}, {ICAL_VALUE_UTCOFFSET,ICAL_UTCOFFSET_VALUE}, {ICAL_VALUE_CALADDRESS,ICAL_CALADDRESS_VALUE}, {ICAL_VALUE_X,ICAL_X_VALUE}, {ICAL_VALUE_NONE,ICAL_NO_VALUE} }; static struct icalparameter_kind_map parameter_map[24] = { {ICAL_ALTREP_PARAMETER,"ALTREP"}, {ICAL_CN_PARAMETER,"CN"}, {ICAL_CUTYPE_PARAMETER,"CUTYPE"}, {ICAL_DELEGATEDFROM_PARAMETER,"DELEGATED-FROM"}, {ICAL_DELEGATEDTO_PARAMETER,"DELEGATED-TO"}, {ICAL_DIR_PARAMETER,"DIR"}, {ICAL_ENCODING_PARAMETER,"ENCODING"}, {ICAL_FBTYPE_PARAMETER,"FBTYPE"}, {ICAL_FMTTYPE_PARAMETER,"FMTTYPE"}, {ICAL_LANGUAGE_PARAMETER,"LANGUAGE"}, {ICAL_MEMBER_PARAMETER,"MEMBER"}, {ICAL_PARTSTAT_PARAMETER,"PARTSTAT"}, {ICAL_RANGE_PARAMETER,"RANGE"}, {ICAL_RELATED_PARAMETER,"RELATED"}, {ICAL_RELTYPE_PARAMETER,"RELTYPE"}, {ICAL_ROLE_PARAMETER,"ROLE"}, {ICAL_RSVP_PARAMETER,"RSVP"}, {ICAL_SENTBY_PARAMETER,"SENT-BY"}, {ICAL_TZID_PARAMETER,"TZID"}, {ICAL_VALUE_PARAMETER,"VALUE"}, {ICAL_X_PARAMETER,"X"}, {ICAL_XLICCOMPARETYPE_PARAMETER,"X-LIC-COMPARETYPE"}, {ICAL_XLICERRORTYPE_PARAMETER,"X-LIC-ERRORTYPE"}, { ICAL_NO_PARAMETER, ""} }; static struct icalparameter_map icalparameter_map[] = { {ICAL_ANY_PARAMETER,0,""}, {ICAL_CUTYPE_PARAMETER,ICAL_CUTYPE_INDIVIDUAL,"INDIVIDUAL"}, {ICAL_CUTYPE_PARAMETER,ICAL_CUTYPE_GROUP,"GROUP"}, {ICAL_CUTYPE_PARAMETER,ICAL_CUTYPE_RESOURCE,"RESOURCE"}, {ICAL_CUTYPE_PARAMETER,ICAL_CUTYPE_ROOM,"ROOM"}, {ICAL_CUTYPE_PARAMETER,ICAL_CUTYPE_UNKNOWN,"UNKNOWN"}, {ICAL_ENCODING_PARAMETER,ICAL_ENCODING_8BIT,"8BIT"}, {ICAL_ENCODING_PARAMETER,ICAL_ENCODING_BASE64,"BASE64"}, {ICAL_FBTYPE_PARAMETER,ICAL_FBTYPE_FREE,"FREE"}, {ICAL_FBTYPE_PARAMETER,ICAL_FBTYPE_BUSY,"BUSY"}, {ICAL_FBTYPE_PARAMETER,ICAL_FBTYPE_BUSYUNAVAILABLE,"BUSYUNAVAILABLE"}, {ICAL_FBTYPE_PARAMETER,ICAL_FBTYPE_BUSYTENTATIVE,"BUSYTENTATIVE"}, {ICAL_PARTSTAT_PARAMETER,ICAL_PARTSTAT_NEEDSACTION,"NEEDS-ACTION"}, {ICAL_PARTSTAT_PARAMETER,ICAL_PARTSTAT_ACCEPTED,"ACCEPTED"}, {ICAL_PARTSTAT_PARAMETER,ICAL_PARTSTAT_DECLINED,"DECLINED"}, {ICAL_PARTSTAT_PARAMETER,ICAL_PARTSTAT_TENTATIVE,"TENTATIVE"}, {ICAL_PARTSTAT_PARAMETER,ICAL_PARTSTAT_DELEGATED,"DELEGATED"}, {ICAL_PARTSTAT_PARAMETER,ICAL_PARTSTAT_COMPLETED,"COMPLETED"}, {ICAL_PARTSTAT_PARAMETER,ICAL_PARTSTAT_INPROCESS,"INPROCESS"}, {ICAL_RANGE_PARAMETER,ICAL_RANGE_THISANDPRIOR,"THISANDPRIOR"}, {ICAL_RANGE_PARAMETER,ICAL_RANGE_THISANDFUTURE,"THISANDFUTURE"}, {ICAL_RELATED_PARAMETER,ICAL_RELATED_START,"START"}, {ICAL_RELATED_PARAMETER,ICAL_RELATED_END,"END"}, {ICAL_RELTYPE_PARAMETER,ICAL_RELTYPE_PARENT,"PARENT"}, {ICAL_RELTYPE_PARAMETER,ICAL_RELTYPE_CHILD,"CHILD"}, {ICAL_RELTYPE_PARAMETER,ICAL_RELTYPE_SIBLING,"SIBLING"}, {ICAL_ROLE_PARAMETER,ICAL_ROLE_CHAIR,"CHAIR"}, {ICAL_ROLE_PARAMETER,ICAL_ROLE_REQPARTICIPANT,"REQ-PARTICIPANT"}, {ICAL_ROLE_PARAMETER,ICAL_ROLE_OPTPARTICIPANT,"OPT-PARTICIPANT"}, {ICAL_ROLE_PARAMETER,ICAL_ROLE_NONPARTICIPANT,"NON-PARTICIPANT"}, {ICAL_RSVP_PARAMETER,ICAL_RSVP_TRUE,"TRUE"}, {ICAL_RSVP_PARAMETER,ICAL_RSVP_FALSE,"FALSE"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_BINARY,"BINARY"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_BOOLEAN,"BOOLEAN"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_DATE,"DATE"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_DURATION,"DURATION"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_FLOAT,"FLOAT"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_INTEGER,"INTEGER"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_PERIOD,"PERIOD"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_RECUR,"RECUR"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_TEXT,"TEXT"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_URI,"URI"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_ERROR,"ERROR"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_DATETIME,"DATE-TIME"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_UTCOFFSET,"UTC-OFFSET"}, {ICAL_VALUE_PARAMETER,ICAL_VALUE_CALADDRESS,"CAL-ADDRESS"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_EQUAL,"EQUAL"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_NOTEQUAL,"NOTEQUAL"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_LESS,"LESS"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_GREATER,"GREATER"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_LESSEQUAL,"LESSEQUAL"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_GREATEREQUAL,"GREATEREQUAL"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_REGEX,"REGEX"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_ISNULL,"ISNULL"}, {ICAL_XLICCOMPARETYPE_PARAMETER,ICAL_XLICCOMPARETYPE_ISNOTNULL,"ISNOTNULL"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_COMPONENTPARSEERROR,"COMPONENT-PARSE-ERROR"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_PROPERTYPARSEERROR,"PROPERTY-PARSE-ERROR"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR,"PARAMETER-NAME-PARSE-ERROR"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR,"PARAMETER-VALUE-PARSE-ERROR"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_VALUEPARSEERROR,"VALUE-PARSE-ERROR"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_INVALIDITIP,"INVALID-ITIP"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_UNKNOWNVCALPROPERROR,"UNKNOWN-VCAL-PROP-ERROR"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_MIMEPARSEERROR,"MIME-PARSE-ERROR"}, {ICAL_XLICERRORTYPE_PARAMETER,ICAL_XLICERRORTYPE_VCALPROPPARSEERROR,"VCAL-PROP-PARSE-ERROR"}, {ICAL_NO_PARAMETER,0,""}}; /* DELEGATED-FROM */ icalparameter* icalparameter_new_delegatedfrom(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_DELEGATEDFROM_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_delegatedfrom((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_delegatedfrom(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_delegatedfrom(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* RELATED */ icalparameter* icalparameter_new_related(icalparameter_related v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_RELATED_X,"v"); icalerror_check_arg_rz(v < ICAL_RELATED_NONE,"v"); impl = icalparameter_new_impl(ICAL_RELATED_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_related((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_related icalparameter_get_related(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); return (icalparameter_related)((struct icalparameter_impl*)param)->data; } void icalparameter_set_related(icalparameter* param, icalparameter_related v) { icalerror_check_arg_rv(v >= ICAL_RELATED_X,"v"); icalerror_check_arg_rv(v < ICAL_RELATED_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* SENT-BY */ icalparameter* icalparameter_new_sentby(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_SENTBY_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_sentby((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_sentby(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_sentby(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* LANGUAGE */ icalparameter* icalparameter_new_language(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_LANGUAGE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_language((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_language(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_language(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* RELTYPE */ icalparameter* icalparameter_new_reltype(icalparameter_reltype v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_RELTYPE_X,"v"); icalerror_check_arg_rz(v < ICAL_RELTYPE_NONE,"v"); impl = icalparameter_new_impl(ICAL_RELTYPE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_reltype((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_reltype icalparameter_get_reltype(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); if ( ((struct icalparameter_impl*)param)->string != 0){ return ICAL_RELTYPE_X; } return (icalparameter_reltype)((struct icalparameter_impl*)param)->data; } void icalparameter_set_reltype(icalparameter* param, icalparameter_reltype v) { icalerror_check_arg_rv(v >= ICAL_RELTYPE_X,"v"); icalerror_check_arg_rv(v < ICAL_RELTYPE_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* ENCODING */ icalparameter* icalparameter_new_encoding(icalparameter_encoding v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_ENCODING_X,"v"); icalerror_check_arg_rz(v < ICAL_ENCODING_NONE,"v"); impl = icalparameter_new_impl(ICAL_ENCODING_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_encoding((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_encoding icalparameter_get_encoding(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); if ( ((struct icalparameter_impl*)param)->string != 0){ return ICAL_ENCODING_X; } return (icalparameter_encoding)((struct icalparameter_impl*)param)->data; } void icalparameter_set_encoding(icalparameter* param, icalparameter_encoding v) { icalerror_check_arg_rv(v >= ICAL_ENCODING_X,"v"); icalerror_check_arg_rv(v < ICAL_ENCODING_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* ALTREP */ icalparameter* icalparameter_new_altrep(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_ALTREP_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_altrep((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_altrep(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_altrep(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* FMTTYPE */ icalparameter* icalparameter_new_fmttype(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_FMTTYPE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_fmttype((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_fmttype(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_fmttype(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* FBTYPE */ icalparameter* icalparameter_new_fbtype(icalparameter_fbtype v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_FBTYPE_X,"v"); icalerror_check_arg_rz(v < ICAL_FBTYPE_NONE,"v"); impl = icalparameter_new_impl(ICAL_FBTYPE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_fbtype((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_fbtype icalparameter_get_fbtype(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); if ( ((struct icalparameter_impl*)param)->string != 0){ return ICAL_FBTYPE_X; } return (icalparameter_fbtype)((struct icalparameter_impl*)param)->data; } void icalparameter_set_fbtype(icalparameter* param, icalparameter_fbtype v) { icalerror_check_arg_rv(v >= ICAL_FBTYPE_X,"v"); icalerror_check_arg_rv(v < ICAL_FBTYPE_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* RSVP */ icalparameter* icalparameter_new_rsvp(icalparameter_rsvp v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_RSVP_X,"v"); icalerror_check_arg_rz(v < ICAL_RSVP_NONE,"v"); impl = icalparameter_new_impl(ICAL_RSVP_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_rsvp((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_rsvp icalparameter_get_rsvp(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); return (icalparameter_rsvp)((struct icalparameter_impl*)param)->data; } void icalparameter_set_rsvp(icalparameter* param, icalparameter_rsvp v) { icalerror_check_arg_rv(v >= ICAL_RSVP_X,"v"); icalerror_check_arg_rv(v < ICAL_RSVP_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* RANGE */ icalparameter* icalparameter_new_range(icalparameter_range v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_RANGE_X,"v"); icalerror_check_arg_rz(v < ICAL_RANGE_NONE,"v"); impl = icalparameter_new_impl(ICAL_RANGE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_range((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_range icalparameter_get_range(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); return (icalparameter_range)((struct icalparameter_impl*)param)->data; } void icalparameter_set_range(icalparameter* param, icalparameter_range v) { icalerror_check_arg_rv(v >= ICAL_RANGE_X,"v"); icalerror_check_arg_rv(v < ICAL_RANGE_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* DELEGATED-TO */ icalparameter* icalparameter_new_delegatedto(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_DELEGATEDTO_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_delegatedto((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_delegatedto(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_delegatedto(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* CN */ icalparameter* icalparameter_new_cn(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_CN_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_cn((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_cn(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_cn(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* ROLE */ icalparameter* icalparameter_new_role(icalparameter_role v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_ROLE_X,"v"); icalerror_check_arg_rz(v < ICAL_ROLE_NONE,"v"); impl = icalparameter_new_impl(ICAL_ROLE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_role((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_role icalparameter_get_role(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); if ( ((struct icalparameter_impl*)param)->string != 0){ return ICAL_ROLE_X; } return (icalparameter_role)((struct icalparameter_impl*)param)->data; } void icalparameter_set_role(icalparameter* param, icalparameter_role v) { icalerror_check_arg_rv(v >= ICAL_ROLE_X,"v"); icalerror_check_arg_rv(v < ICAL_ROLE_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* X-LIC-COMPARETYPE */ icalparameter* icalparameter_new_xliccomparetype(icalparameter_xliccomparetype v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_XLICCOMPARETYPE_X,"v"); icalerror_check_arg_rz(v < ICAL_XLICCOMPARETYPE_NONE,"v"); impl = icalparameter_new_impl(ICAL_XLICCOMPARETYPE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_xliccomparetype((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_xliccomparetype icalparameter_get_xliccomparetype(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); return (icalparameter_xliccomparetype)((struct icalparameter_impl*)param)->data; } void icalparameter_set_xliccomparetype(icalparameter* param, icalparameter_xliccomparetype v) { icalerror_check_arg_rv(v >= ICAL_XLICCOMPARETYPE_X,"v"); icalerror_check_arg_rv(v < ICAL_XLICCOMPARETYPE_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* PARTSTAT */ icalparameter* icalparameter_new_partstat(icalparameter_partstat v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_PARTSTAT_X,"v"); icalerror_check_arg_rz(v < ICAL_PARTSTAT_NONE,"v"); impl = icalparameter_new_impl(ICAL_PARTSTAT_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_partstat((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_partstat icalparameter_get_partstat(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); if ( ((struct icalparameter_impl*)param)->string != 0){ return ICAL_PARTSTAT_X; } return (icalparameter_partstat)((struct icalparameter_impl*)param)->data; } void icalparameter_set_partstat(icalparameter* param, icalparameter_partstat v) { icalerror_check_arg_rv(v >= ICAL_PARTSTAT_X,"v"); icalerror_check_arg_rv(v < ICAL_PARTSTAT_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* X-LIC-ERRORTYPE */ icalparameter* icalparameter_new_xlicerrortype(icalparameter_xlicerrortype v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_XLICERRORTYPE_X,"v"); icalerror_check_arg_rz(v < ICAL_XLICERRORTYPE_NONE,"v"); impl = icalparameter_new_impl(ICAL_XLICERRORTYPE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_xlicerrortype((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_xlicerrortype icalparameter_get_xlicerrortype(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); return (icalparameter_xlicerrortype)((struct icalparameter_impl*)param)->data; } void icalparameter_set_xlicerrortype(icalparameter* param, icalparameter_xlicerrortype v) { icalerror_check_arg_rv(v >= ICAL_XLICERRORTYPE_X,"v"); icalerror_check_arg_rv(v < ICAL_XLICERRORTYPE_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* MEMBER */ icalparameter* icalparameter_new_member(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_MEMBER_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_member((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_member(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_member(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* X */ icalparameter* icalparameter_new_x(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_X_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_x((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_x(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_x(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* CUTYPE */ icalparameter* icalparameter_new_cutype(icalparameter_cutype v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_CUTYPE_X,"v"); icalerror_check_arg_rz(v < ICAL_CUTYPE_NONE,"v"); impl = icalparameter_new_impl(ICAL_CUTYPE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_cutype((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_cutype icalparameter_get_cutype(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); if ( ((struct icalparameter_impl*)param)->string != 0){ return ICAL_CUTYPE_X; } return (icalparameter_cutype)((struct icalparameter_impl*)param)->data; } void icalparameter_set_cutype(icalparameter* param, icalparameter_cutype v) { icalerror_check_arg_rv(v >= ICAL_CUTYPE_X,"v"); icalerror_check_arg_rv(v < ICAL_CUTYPE_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* TZID */ icalparameter* icalparameter_new_tzid(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_TZID_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_tzid((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_tzid(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_tzid(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } /* VALUE */ icalparameter* icalparameter_new_value(icalparameter_value v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz(v >= ICAL_VALUE_X,"v"); icalerror_check_arg_rz(v < ICAL_VALUE_NONE,"v"); impl = icalparameter_new_impl(ICAL_VALUE_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_value((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } icalparameter_value icalparameter_get_value(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg( (param!=0), "param"); if ( ((struct icalparameter_impl*)param)->string != 0){ return ICAL_VALUE_X; } return (icalparameter_value)((struct icalparameter_impl*)param)->data; } void icalparameter_set_value(icalparameter* param, icalparameter_value v) { icalerror_check_arg_rv(v >= ICAL_VALUE_X,"v"); icalerror_check_arg_rv(v < ICAL_VALUE_NONE,"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->data = (int)v; } /* DIR */ icalparameter* icalparameter_new_dir(const char* v) { struct icalparameter_impl *impl; icalerror_clear_errno(); icalerror_check_arg_rz( (v!=0),"v"); impl = icalparameter_new_impl(ICAL_DIR_PARAMETER); if (impl == 0) { return 0; } icalparameter_set_dir((icalparameter*) impl,v); if (icalerrno != ICAL_NO_ERROR) { icalparameter_free((icalparameter*) impl); return 0; } return (icalparameter*) impl; } const char* icalparameter_get_dir(const icalparameter* param) { icalerror_clear_errno(); icalerror_check_arg_rz( (param!=0), "param"); return (const char*)((struct icalparameter_impl*)param)->string; } void icalparameter_set_dir(icalparameter* param, const char* v) { icalerror_check_arg_rv( (v!=0),"v"); icalerror_check_arg_rv( (param!=0), "param"); icalerror_clear_errno(); ((struct icalparameter_impl*)param)->string = icalmemory_strdup(v); } const char* icalparameter_kind_to_string(icalparameter_kind kind) { int i; for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { if (parameter_map[i].kind == kind) { return parameter_map[i].name; } } return 0; } icalparameter_kind icalparameter_string_to_kind(const char* string) { int i; if (string ==0 ) { return ICAL_NO_PARAMETER; } for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { if (strcmp(parameter_map[i].name, string) == 0) { return parameter_map[i].kind; } } if(strncmp(string,"X-",2)==0){ return ICAL_X_PARAMETER; } return ICAL_NO_PARAMETER; } icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value) { int i; for (i=0; value_kind_map[i].kind != ICAL_NO_VALUE; i++) { if (value_kind_map[i].value == value) { return value_kind_map[i].kind; } } return ICAL_NO_VALUE; } const char* icalparameter_enum_to_string(int e) { int i; icalerror_check_arg_rz(e >= ICALPARAMETER_FIRST_ENUM,"e"); icalerror_check_arg_rz(e <= ICALPARAMETER_LAST_ENUM,"e"); for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ if(e == icalparameter_map[i].enumeration){ return icalparameter_map[i].str; } } return 0; } int icalparameter_string_to_enum(const char* str) { int i; icalerror_check_arg_rz(str != 0,"str"); for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ if(strcmp(str,icalparameter_map[i].str) == 0) { return icalparameter_map[i].enumeration; } } return 0; } icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind,const char* val) { struct icalparameter_impl* param=0; int found_kind = 0; int i; icalerror_check_arg_rz((val!=0),"val"); /* Search through the parameter map to find a matching kind */ param = icalparameter_new_impl(kind); for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ if(kind == icalparameter_map[i].kind) { found_kind = 1; if(strcmp(val,icalparameter_map[i].str) == 0) { param->data = (int)icalparameter_map[i].enumeration; return param; } } } if(found_kind == 1){ /* The kind was in the parameter map, but the string did not match, so assume that it is an alternate value, like an X-value.*/ icalparameter_set_xvalue(param, val); } else { /* If the kind was not found, then it must be a string type */ ((struct icalparameter_impl*)param)->string = icalmemory_strdup(val); } return param; } /* Everything below this line is machine generated. Do not edit. */ libical-1.0/src/libical/icaltz-util.c0000664000076400007640000002451312132563132016531 0ustar allenallen/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Authors : * Chenthill Palanisamy * * Copyright 2007, Novell, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STDINT_H #include #endif #if defined(sun) && defined(__SVR4) #include #include #else # ifdef HAVE_BYTESWAP_H # include # endif # ifdef HAVE_ENDIAN_H # include # else # ifdef HAVE_SYS_ENDIAN_H # include # ifdef bswap32 # define bswap_32 bswap32 # else # define bswap_32 swap32 # endif # endif # endif #endif #ifdef _MSC_VER #if !defined(HAVE_BYTESWAP_H) && !defined(HAVE_SYS_ENDIAN_H) && !defined(HAVE_ENDIAN_H) #define bswap_16(x) (((x) << 8) & 0xff00) | (((x) >> 8 ) & 0xff) #define bswap_32(x) (((x) << 24) & 0xff000000) \ | (((x) << 8) & 0xff0000) \ | (((x) >> 8) & 0xff00) \ | (((x) >> 24) & 0xff ) #define bswap_64(x) ((((x) & 0xff00000000000000ull) >> 56) \ | (((x) & 0x00ff000000000000ull) >> 40) \ | (((x) & 0x0000ff0000000000ull) >> 24) \ | (((x) & 0x000000ff00000000ull) >> 8) \ | (((x) & 0x00000000ff000000ull) << 8) \ | (((x) & 0x0000000000ff0000ull) << 24) \ | (((x) & 0x000000000000ff00ull) << 40) \ | (((x) & 0x00000000000000ffull) << 56)) #endif #include #endif #if defined(__APPLE__) #define bswap_16(x) (((x) << 8) & 0xff00) | (((x) >> 8 ) & 0xff) #define bswap_32 __builtin_bswap32 #define bswap_64 __builtin_bswap64 #endif #ifndef PATH_MAX #define PATH_MAX 512 #endif #ifndef F_OK #define F_OK 0 #endif #ifndef R_OK #define R_OK 4 #endif #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include typedef struct { char ttisgmtcnt [4]; char ttisstdcnt[4]; char leapcnt[4]; char timecnt[4]; char typecnt[4]; char charcnt[4]; } tzinfo; static int r_pos [] = {1, 2, 3, -2, -1}; static char *search_paths [] = {"/usr/share/zoneinfo","/usr/lib/zoneinfo","/etc/zoneinfo","/usr/share/lib/zoneinfo"}; static char *zdir = NULL; #define NUM_SEARCH_PATHS (sizeof (search_paths)/ sizeof (search_paths [0])) #define EFREAD(buf,size,num,fs) \ if (fread (buf, size, num, fs) == 0 && ferror (fs)) {\ icalerror_set_errno (ICAL_FILE_ERROR); \ goto error; \ } \ typedef struct { long int gmtoff; unsigned char isdst; unsigned int abbr; unsigned char isstd; unsigned char isgmt; char *zname; } ttinfo; typedef struct { time_t transition; long int change; } leap; extern const char *ical_tzid_prefix; static int decode (const void *ptr) { #if defined(sun) && defined(__SVR4) if (sizeof (int) == 4) #ifdef _BIG_ENDIAN return *(const int *) ptr; #else return BSWAP_32 (*(const int *) ptr); #endif #else if ((BYTE_ORDER == BIG_ENDIAN) && sizeof (int) == 4) return *(const int *) ptr; else if (BYTE_ORDER == LITTLE_ENDIAN && sizeof (int) == 4) return bswap_32 (*(const int *) ptr); #endif else { const unsigned char *p = ptr; int result = *p & (1 << (CHAR_BIT - 1)) ? ~0 : 0; result = (result << 8) | *p++; result = (result << 8) | *p++; result = (result << 8) | *p++; result = (result << 8) | *p++; return result; } } static char * zname_from_stridx (char *str, long int idx) { int i = 0; char *ret; size_t size; i = idx; while (str [i] != '\0') i++; size = i - idx; str += idx; ret = (char *) malloc (size + 1); ret = strncpy (ret, str, size); ret [size] = '\0'; return ret; } static void set_zonedir (void) { char file_path[PATH_MAX]; const char *fname = ZONES_TAB_SYSTEM_FILENAME; int i; for (i = 0;i < NUM_SEARCH_PATHS; i++) { sprintf (file_path, "%s/%s", search_paths [i], fname); if (!access (file_path, F_OK|R_OK)) { zdir = search_paths [i]; break; } } } const char * icaltzutil_get_zone_directory (void) { if (!zdir) set_zonedir (); return zdir; } /* Calculate the relative position of the week in a month from a date */ static int calculate_pos (icaltimetype icaltime) { int pos; pos = (icaltime.day -1) / 7; /* Check if pos 3 is the last occurence of the week day in the month */ if (pos == 3 && ((icaltime.day + 7) > icaltime_days_in_month (icaltime.month, icaltime.year))) pos = 4; return r_pos [pos]; } icalcomponent* icaltzutil_fetch_timezone (const char *location) { int ret = 0; FILE *f; tzinfo type_cnts; unsigned int i, num_trans, num_types, num_chars, num_leaps, num_isstd, num_isgmt; time_t *transitions = NULL; time_t trans, start, end; int *trans_idx = NULL, pos, sign, zidx, zp_idx, idx, prev_idx; ttinfo *types = NULL; char *znames = NULL, *full_path, *tzid, *r_trans, *temp; leap *leaps = NULL; icalcomponent *tz_comp = NULL, *comp = NULL; icalproperty *icalprop; icaltimetype dtstart, icaltime; struct icalrecurrencetype ical_recur; const char *basedir; basedir = icaltzutil_get_zone_directory(); if (!basedir) { icalerror_set_errno (ICAL_FILE_ERROR); return NULL; } full_path = (char *) malloc (strlen (basedir) + strlen (location) + 2); sprintf (full_path,"%s/%s",basedir, location); if ((f = fopen (full_path, "rb")) == 0) { icalerror_set_errno (ICAL_FILE_ERROR); free (full_path); return NULL; } if ((ret = fseek (f, 20, SEEK_SET)) != 0) { icalerror_set_errno (ICAL_FILE_ERROR); goto error; } EFREAD(&type_cnts, 24, 1, f); num_isgmt = decode (type_cnts.ttisgmtcnt); num_leaps = decode (type_cnts.leapcnt); num_chars = decode (type_cnts.charcnt); num_trans = decode (type_cnts.timecnt); num_isstd = decode (type_cnts.ttisstdcnt); num_types = decode (type_cnts.typecnt); transitions = calloc (num_trans, sizeof (time_t)); r_trans = calloc (num_trans, 4); EFREAD(r_trans, 4, num_trans, f); temp = r_trans; if (num_trans) { trans_idx = calloc (num_trans, sizeof (int)); for (i = 0; i < num_trans; i++) { trans_idx [i] = fgetc (f); transitions [i] = decode (r_trans); r_trans += 4; } } free (temp); types = calloc (num_types, sizeof (ttinfo)); for (i = 0; i < num_types; i++) { unsigned char a [4]; int c; EFREAD(a, 4, 1, f); c = fgetc (f); types [i].isdst = c; if((c = fgetc (f)) < 0) { c = 0; break; } types [i].abbr = c; types [i].gmtoff = decode (a); } znames = (char *) malloc (num_chars); EFREAD(znames, num_chars, 1, f); /* We got all the information which we need */ leaps = calloc (num_leaps, sizeof (leap)); for (i = 0; i < num_leaps; i++) { char c [4]; EFREAD (c, 4, 1, f); leaps [i].transition = decode (c); EFREAD (c, 4, 1, f); leaps [i].change = decode (c); } for (i = 0; i < num_isstd; ++i) { int c = getc (f); types [i].isstd = c != 0; } while (i < num_types) types [i++].isstd = 0; for (i = 0; i < num_isgmt; ++i) { int c = getc (f); types [i].isgmt = c != 0; } while (i < num_types) types [i++].isgmt = 0; /* Read all the contents now */ for (i = 0; i < num_types; i++) types [i].zname = zname_from_stridx (znames, types [i].abbr); tz_comp = icalcomponent_new (ICAL_VTIMEZONE_COMPONENT); /* Add tzid property */ tzid = (char *) malloc (strlen (ical_tzid_prefix) + strlen (location) + 8); sprintf (tzid, "%sTzfile/%s", ical_tzid_prefix, location); icalprop = icalproperty_new_tzid (tzid); icalcomponent_add_property (tz_comp, icalprop); free (tzid); icalprop = icalproperty_new_x (location); icalproperty_set_x_name (icalprop, "X-LIC-LOCATION"); icalcomponent_add_property (tz_comp, icalprop); prev_idx = 0; if (num_trans == 0) { prev_idx = idx = 0; } else { idx = trans_idx[0]; } start = 0; for (i = 1; i < num_trans; i++, start = end) { prev_idx = idx; idx = trans_idx [i]; end = transitions [i] + types [prev_idx].gmtoff; /* don't bother starting until the epoch */ if (0 > end) continue; if (types [prev_idx].isdst) comp = icalcomponent_new (ICAL_XDAYLIGHT_COMPONENT); else comp = icalcomponent_new (ICAL_XSTANDARD_COMPONENT); icalprop = icalproperty_new_tzname (types [prev_idx].zname); icalcomponent_add_property (comp, icalprop); dtstart = icaltime_from_timet(start, 0); icalprop = icalproperty_new_dtstart (dtstart); icalcomponent_add_property (comp, icalprop); icalprop = icalproperty_new_tzoffsetfrom (types [idx].gmtoff); icalcomponent_add_property (comp, icalprop); icalprop = icalproperty_new_tzoffsetto (types [prev_idx].gmtoff); icalcomponent_add_property (comp, icalprop); icalcomponent_add_component (tz_comp, comp); } /* finally, add a last zone with no end date */ if (types [idx].isdst) comp = icalcomponent_new (ICAL_XDAYLIGHT_COMPONENT); else comp = icalcomponent_new (ICAL_XSTANDARD_COMPONENT); icalprop = icalproperty_new_tzname (types [idx].zname); icalcomponent_add_property (comp, icalprop); dtstart = icaltime_from_timet(start, 0); icalprop = icalproperty_new_dtstart (dtstart); icalcomponent_add_property (comp, icalprop); icalprop = icalproperty_new_tzoffsetfrom (types [prev_idx].gmtoff); icalcomponent_add_property (comp, icalprop); icalprop = icalproperty_new_tzoffsetto (types [idx].gmtoff); icalcomponent_add_property (comp, icalprop); icalcomponent_add_component (tz_comp, comp); error: if (f) fclose (f); if (transitions) free (transitions); if (trans_idx) free (trans_idx); if (types) { for (i = 0; i < num_types; i++) if (types [i].zname) free (types [i].zname); free (types); } if (znames) free (znames); free (full_path); if (leaps) free (leaps); return tz_comp; } /* int main (int argc, char *argv []) { tzutil_fetch_timezone (argv [1]); return 0; }*/ libical-1.0/src/libical/Makefile.in0000664000076400007640000011254712141277614016205 0ustar allenallen# Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #====================================================================== # FILE: Makefile.am # CREATOR: eric # # $Id: Makefile.am,v 1.40 2008-01-02 20:07:30 dothebart Exp $ # # # (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ # # # #====================================================================== VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @OS_WIN32_TRUE@am__append_1 = -no-undefined subdir = src/libical DIST_COMMON = $(am__libical_include_HEADERS_DIST) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/icalerror.h.in $(srcdir)/icalversion.h.in \ $(top_srcdir)/depcomp $(top_srcdir)/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(libical_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libical_static_la_LIBADD = am__objects_1 = am__objects_2 = $(am__objects_1) icalderivedparameter.lo \ icalderivedproperty.lo icalrestriction.lo icalderivedvalue.lo am__objects_3 = $(am__objects_2) icalarray.lo icalattach.lo \ icalcomponent.lo icalenums.lo icalerror.lo icalmemory.lo \ icalmime.lo icalparameter.lo icalparser.lo icalproperty.lo \ icalrecur.lo icaltime.lo icaltz-util.lo icaltimezone.lo \ icalduration.lo icalperiod.lo icaltypes.lo icalvalue.lo pvl.lo \ sspm.lo libicals_w32_vsnprintf_replacement.lo icallangbind.lo \ caldate.lo am_libical_static_la_OBJECTS = $(am__objects_3) libical_static_la_OBJECTS = $(am_libical_static_la_OBJECTS) libical_static_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libical_static_la_LDFLAGS) $(LDFLAGS) -o $@ am__DEPENDENCIES_1 = libical_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_libical_la_OBJECTS = $(am__objects_2) icalarray.lo icalattach.lo \ icalcomponent.lo icalenums.lo icalerror.lo icalmemory.lo \ icalmime.lo icalparameter.lo icalparser.lo icalproperty.lo \ icalrecur.lo icaltime.lo icaltz-util.lo icaltimezone.lo \ icalduration.lo icalperiod.lo icaltypes.lo icalvalue.lo pvl.lo \ sspm.lo libicals_w32_vsnprintf_replacement.lo icallangbind.lo \ caldate.lo libical_la_OBJECTS = $(am_libical_la_OBJECTS) libical_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libical_la_LDFLAGS) $(LDFLAGS) -o $@ libical_cxx_la_LIBADD = am__libical_cxx_la_SOURCES_DIST = icalderivedparameter.h \ icalderivedproperty.h icalderivedvalue.h \ icalderivedparameter.c icalderivedproperty.c icalrestriction.c \ icalderivedvalue.c icalarray.c icalarray.h icalattach.h \ icalattachimpl.h icalattach.c icalcomponent.c icalcomponent.h \ icalenums.c icalenums.h icalerror.c icalerror.h icalmemory.c \ icalmemory.h icalmime.c icalmime.h icalparameter.c \ icalparameter.h icalparameterimpl.h icalparser.c icalparser.h \ icalproperty.c icalproperty.h icalrecur.c icalrecur.h \ icalrestriction.h icaltime.c icaltime.h icaltz-util.c \ icaltz-util.h icaltimezone.c icaltimezone.h icalduration.h \ icalduration.c icalperiod.h icalperiod.c icaltypes.c \ icaltypes.h icalvalue.c icalvalue.h icalvalueimpl.h pvl.c \ pvl.h sspm.c sspm.h libicals_w32_vsnprintf_replacement.c \ icallangbind.h icallangbind.c caldate.c astime.h vcomponent.h \ vcomponent.cpp icalproperty_cxx.h icalproperty_cxx.cpp \ icalparameter_cxx.h icalparameter_cxx.cpp icalvalue_cxx.h \ icalvalue_cxx.cpp icptrholder.h @WITH_CXX_BINDINGS_TRUE@am_libical_cxx_la_OBJECTS = $(am__objects_3) \ @WITH_CXX_BINDINGS_TRUE@ vcomponent.lo icalproperty_cxx.lo \ @WITH_CXX_BINDINGS_TRUE@ icalparameter_cxx.lo icalvalue_cxx.lo libical_cxx_la_OBJECTS = $(am_libical_cxx_la_OBJECTS) @WITH_CXX_BINDINGS_TRUE@am_libical_cxx_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libical_static_la_SOURCES) $(libical_la_SOURCES) \ $(libical_cxx_la_SOURCES) DIST_SOURCES = $(libical_static_la_SOURCES) $(libical_la_SOURCES) \ $(am__libical_cxx_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__libical_include_HEADERS_DIST = ical.h icalarray.h icalattach.h \ icalcomponent.h icalderivedparameter.h icalderivedproperty.h \ icalderivedvalue.h icalduration.h icalenums.h icalerror.h \ icallangbind.h icalmemory.h icalmime.h icalparameter.h \ icalparser.h icalperiod.h icalproperty.h icalrecur.h \ icalrestriction.h icaltime.h icaltz-util.h icaltimezone.h \ icaltypes.h icalvalue.h pvl.h sspm.h vcomponent.h \ icalparameter_cxx.h icalproperty_cxx.h icalvalue_cxx.h \ icptrholder.h HEADERS = $(libical_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ DESIGNDATA = $(top_srcdir)/design-data ICALSCRIPTS = $(top_srcdir)/scripts @WITH_CXX_BINDINGS_FALSE@cxx_lib = @WITH_CXX_BINDINGS_TRUE@cxx_lib = libical_cxx.la @WITH_CXX_BINDINGS_FALSE@cxx_headers = @WITH_CXX_BINDINGS_TRUE@cxx_headers = vcomponent.h icalparameter_cxx.h icalproperty_cxx.h icalvalue_cxx.h icptrholder.h lib_LTLIBRARIES = libical.la $(cxx_lib) noinst_LTLIBRARIES = libical-static.la libical_static_la_SOURCES = $(libical_la_SOURCES) libical_static_la_LDFLAGS = --all-static AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\""$(datadir)/$(PACKAGE)"\" # CFLAGS = -g INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ -I$(srcdir) libical_la_LDFLAGS = -version-info 48:0:48 $(am__append_1) libical_la_LIBADD = $(PTHREAD_LIBS) libical_la_SOURCES = \ $(BUILT_SOURCES) \ icalarray.c \ icalarray.h \ icalattach.h \ icalattachimpl.h \ icalattach.c \ icalcomponent.c \ icalcomponent.h \ icalenums.c \ icalenums.h \ icalerror.c \ icalerror.h \ icalmemory.c \ icalmemory.h \ icalmime.c \ icalmime.h \ icalparameter.c \ icalparameter.h \ icalparameterimpl.h \ icalparser.c \ icalparser.h \ icalproperty.c \ icalproperty.h \ icalrecur.c \ icalrecur.h \ icalrestriction.h \ icaltime.c \ icaltime.h \ icaltz-util.c \ icaltz-util.h \ icaltimezone.c \ icaltimezone.h \ icalduration.h \ icalduration.c \ icalperiod.h \ icalperiod.c \ icaltypes.c \ icaltypes.h \ icalvalue.c \ icalvalue.h \ icalvalueimpl.h \ pvl.c \ pvl.h \ sspm.c \ sspm.h \ libicals_w32_vsnprintf_replacement.c \ icallangbind.h \ icallangbind.c \ caldate.c \ astime.h @WITH_CXX_BINDINGS_TRUE@libical_cxx_la_SOURCES = \ @WITH_CXX_BINDINGS_TRUE@ $(libical_la_SOURCES) \ @WITH_CXX_BINDINGS_TRUE@ vcomponent.h \ @WITH_CXX_BINDINGS_TRUE@ vcomponent.cpp \ @WITH_CXX_BINDINGS_TRUE@ icalproperty_cxx.h \ @WITH_CXX_BINDINGS_TRUE@ icalproperty_cxx.cpp \ @WITH_CXX_BINDINGS_TRUE@ icalparameter_cxx.h \ @WITH_CXX_BINDINGS_TRUE@ icalparameter_cxx.cpp \ @WITH_CXX_BINDINGS_TRUE@ icalvalue_cxx.h \ @WITH_CXX_BINDINGS_TRUE@ icalvalue_cxx.cpp \ @WITH_CXX_BINDINGS_TRUE@ icptrholder.h libical_includedir = $(includedir)/libical libical_include_HEADERS = \ ical.h \ icalarray.h \ icalattach.h \ icalcomponent.h \ icalderivedparameter.h \ icalderivedproperty.h \ icalderivedvalue.h \ icalduration.h \ icalenums.h \ icalerror.h \ icallangbind.h \ icalmemory.h \ icalmime.h \ icalparameter.h \ icalparser.h \ icalperiod.h \ icalproperty.h \ icalrecur.h \ icalrestriction.h \ icaltime.h \ icaltz-util.h \ icaltimezone.h \ icaltypes.h \ icalvalue.h \ pvl.h \ sspm.h \ $(cxx_headers) # ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. It # is required to make the combined header ical.h properly COMBINEDHEADERS = \ $(top_builddir)/src/libical/icalversion.h \ $(top_srcdir)/src/libical/icaltime.h \ $(top_srcdir)/src/libical/icalduration.h \ $(top_srcdir)/src/libical/icalperiod.h \ $(top_srcdir)/src/libical/icalenums.h \ $(top_srcdir)/src/libical/icaltypes.h \ $(top_srcdir)/src/libical/icalrecur.h \ $(top_srcdir)/src/libical/icalattach.h \ icalderivedvalue.h \ icalderivedparameter.h \ $(top_srcdir)/src/libical/icalvalue.h \ $(top_srcdir)/src/libical/icalparameter.h \ icalderivedproperty.h \ $(top_srcdir)/src/libical/icalproperty.h \ $(top_srcdir)/src/libical/pvl.h \ $(top_srcdir)/src/libical/icalarray.h \ $(top_srcdir)/src/libical/icalcomponent.h \ $(top_srcdir)/src/libical/icaltimezone.h \ $(top_srcdir)/src/libical/icalparser.h \ $(top_srcdir)/src/libical/icalmemory.h \ icalerror.h \ $(top_srcdir)/src/libical/icalrestriction.h \ $(top_srcdir)/src/libical/sspm.h \ $(top_srcdir)/src/libical/icalmime.h \ $(top_srcdir)/src/libical/icallangbind.h # exporting the configure stuff is probably no good idea. # others use standard defines not in our namespace too. # $(top_builddir)/config.h BUILT_COMBINEDHEADERS = \ icalderivedparameter.h \ icalderivedproperty.h \ icalderivedvalue.h BUILT_SOURCES = \ $(BUILT_COMBINEDHEADERS)\ icalderivedparameter.c \ icalderivedproperty.c \ icalrestriction.c \ icalderivedvalue.c # parameters PARAMETERDEPS = \ $(ICALSCRIPTS)/mkderivedparameters.pl \ $(DESIGNDATA)/parameters.csv \ icalderivedparameter.c.in \ icalderivedparameter.h.in # properties PROPERTYDEPS = \ $(ICALSCRIPTS)/mkderivedproperties.pl \ $(DESIGNDATA)/properties.csv \ $(DESIGNDATA)/value-types.csv \ icalderivedproperty.c.in \ icalderivedproperty.h.in # restrictions RESTRICTIONDEPS = \ $(ICALSCRIPTS)/mkrestrictiontable.pl \ $(DESIGNDATA)/restrictions.csv \ icalrestriction.c.in # values VALUEDEPS = \ $(ICALSCRIPTS)/mkderivedvalues.pl \ $(DESIGNDATA)/value-types.csv \ icalderivedvalue.c.in \ icalderivedvalue.h.in # housekeeping CONFIG_CLEAN_FILES = y.output CLEANFILES = $(BUILT_SOURCES) $(BUILT_COMBINEDHEADERS) EXTRA_DIST = \ icalderivedparameter.c.in \ icalderivedparameter.h.in \ icalderivedproperty.c.in \ icalderivedproperty.h.in \ icalrestriction.c.in \ icalderivedvalue.c.in \ icalderivedvalue.h.in \ icalversion.h.in all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libical/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libical/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): icalversion.h: $(top_builddir)/config.status $(srcdir)/icalversion.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ icalerror.h: $(top_builddir)/config.status $(srcdir)/icalerror.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libical-static.la: $(libical_static_la_OBJECTS) $(libical_static_la_DEPENDENCIES) $(EXTRA_libical_static_la_DEPENDENCIES) $(libical_static_la_LINK) $(libical_static_la_OBJECTS) $(libical_static_la_LIBADD) $(LIBS) libical.la: $(libical_la_OBJECTS) $(libical_la_DEPENDENCIES) $(EXTRA_libical_la_DEPENDENCIES) $(libical_la_LINK) -rpath $(libdir) $(libical_la_OBJECTS) $(libical_la_LIBADD) $(LIBS) libical_cxx.la: $(libical_cxx_la_OBJECTS) $(libical_cxx_la_DEPENDENCIES) $(EXTRA_libical_cxx_la_DEPENDENCIES) $(CXXLINK) $(am_libical_cxx_la_rpath) $(libical_cxx_la_OBJECTS) $(libical_cxx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/caldate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalarray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalattach.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalcomponent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalderivedparameter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalderivedproperty.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalderivedvalue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalduration.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalenums.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icallangbind.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalmemory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalmime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalparameter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalparameter_cxx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalparser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalperiod.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalproperty.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalproperty_cxx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalrecur.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalrestriction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icaltime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icaltimezone.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icaltypes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icaltz-util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalvalue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalvalue_cxx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libicals_w32_vsnprintf_replacement.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pvl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sspm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcomponent.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libical_includeHEADERS: $(libical_include_HEADERS) @$(NORMAL_INSTALL) @list='$(libical_include_HEADERS)'; test -n "$(libical_includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libical_includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libical_includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libical_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libical_includedir)" || exit $$?; \ done uninstall-libical_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libical_include_HEADERS)'; test -n "$(libical_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libical_includedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libical_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libical_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES \ uninstall-libical_includeHEADERS .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ cscopelist ctags dist-hook distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-libical_includeHEADERS install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES \ uninstall-libical_includeHEADERS ical.h: $(COMBINEDHEADERS) echo '#ifndef LIBICAL_ICAL_H' > ical.h echo '#define LIBICAL_ICAL_H' >> ical.h echo '#ifdef __cplusplus' >> ical.h echo 'extern "C" {' >> ical.h echo '#endif' >> ical.h echo '/*' >> ical.h echo ' $$''Id''$$' >> ical.h echo '*/' >> ical.h cat $(COMBINEDHEADERS) \ | egrep -v "#include.*\"ical" \ | egrep -v "#include.*\"config" \ | egrep -v "#include.*\"pvl\.h\"" \ | egrep -v '\$$(Id|Locker): .+\$$'>> ical.h echo '#ifdef __cplusplus' >> ical.h echo '}' >> ical.h echo '#endif' >> ical.h echo '#endif' >> ical.h icalderivedparameter.h: $(PARAMETERDEPS) $(PERL) -I $(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedparameters.pl -i $(srcdir)/icalderivedparameter.h.in -h $(DESIGNDATA)/parameters.csv > icalderivedparameter.h icalderivedparameter.c: $(PARAMETERDEPS) $(BUILT_COMBINEDHEADERS) $(PERL) -I $(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedparameters.pl -i $(srcdir)/icalderivedparameter.c.in -c $(DESIGNDATA)/parameters.csv > icalderivedparameter.c icalderivedproperty.h: $(PROPERTYDEPS) $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedproperties.pl \ -i $(srcdir)/icalderivedproperty.h.in -h $(DESIGNDATA)/properties.csv\ ${DESIGNDATA}/value-types.csv > icalderivedproperty.h icalderivedproperty.c: $(PROPERTYDEPS) $(BUILT_COMBINEDHEADERS) $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedproperties.pl \ -i $(srcdir)/icalderivedproperty.c.in -c $(DESIGNDATA)/properties.csv \ ${DESIGNDATA}/value-types.csv > icalderivedproperty.c icalrestriction.c: $(RESTRICTIONDEPS) $(PERL) $(ICALSCRIPTS)/mkrestrictiontable.pl -i $(srcdir)/icalrestriction.c.in \ $(DESIGNDATA)/restrictions.csv > icalrestriction.c icalderivedvalue.h: $(VALUEDEPS) $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedvalues.pl \ -i $(srcdir)/icalderivedvalue.h.in -h $(DESIGNDATA)/value-types.csv > icalderivedvalue.h icalderivedvalue.c: $(VALUEDEPS) $(BUILT_COMBINEDHEADERS) $(PERL) -I$(ICALSCRIPTS) $(ICALSCRIPTS)/mkderivedvalues.pl \ -i $(srcdir)/icalderivedvalue.c.in -c $(DESIGNDATA)/value-types.csv > icalderivedvalue.c # c++ needs ical.h auto-generated. icalparameter_cxx.lo: ical.h icalproperty_cxx.lo: ical.h icalvalue_cxx.lo: ical.h vcomponent.lo: ical.h dist-hook: cd $(distdir); rm -f $(BUILT_SOURCES) cd $(distdir); rm -f ical.h icalversion.h $(srcdir)/icalcomponent.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h icalderivedparameter.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h icalderivedproperty.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h icalderivedvalue.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalduration.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icallangbind.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalmime.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalparameter.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalparser.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalproperty.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h icalrestriction.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icaltime.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h $(srcdir)/icalvalue.c: icalderivedvalue.h icalderivedproperty.h icalderivedparameter.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/src/libical/icalproperty.c0000664000076400007640000006260712132563132017013 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalproperty.c CREATOR: eric 28 April 1999 $Id: icalproperty.c,v 1.44 2008-01-30 20:28:42 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalproperty.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalproperty.h" #include "icalparameter.h" #include "icalcomponent.h" #include "pvl.h" #include "icalenums.h" #include "icalerror.h" #include "icalmemory.h" #include "icalparser.h" #include /* For icalmemory_strdup, rindex */ #include #include #include #include /* for printf */ #include /* for va_list, va_start, etc. */ #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif /* Private routines for icalproperty */ void icalvalue_set_parent(icalvalue* value, icalproperty* property); icalproperty* icalvalue_get_parent(icalvalue* value); void icalparameter_set_parent(icalparameter* param, icalproperty* property); icalproperty* icalparameter_get_parent(icalparameter* value); void icalproperty_set_x_name(icalproperty* prop, const char* name); struct icalproperty_impl { char id[5]; icalproperty_kind kind; char* x_name; pvl_list parameters; pvl_elem parameter_iterator; icalvalue* value; icalcomponent *parent; }; void icalproperty_add_parameters(icalproperty* prop, va_list args) { void* vp; while((vp = va_arg(args, void*)) != 0) { if (icalvalue_isa_value(vp) != 0 ){ } else if (icalparameter_isa_parameter(vp) != 0 ){ icalproperty_add_parameter((icalproperty*)prop, (icalparameter*)vp); } else { icalerror_set_errno(ICAL_BADARG_ERROR); } } } icalproperty* icalproperty_new_impl(icalproperty_kind kind) { icalproperty* prop; if (!icalproperty_kind_is_valid(kind)) return NULL; if ( ( prop = (icalproperty*) malloc(sizeof(icalproperty))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } strcpy(prop->id,"prop"); prop->kind = kind; prop->parameters = pvl_newlist(); prop->parameter_iterator = 0; prop->value = 0; prop->x_name = 0; prop->parent = 0; return prop; } icalproperty* icalproperty_new (icalproperty_kind kind) { if (kind == ICAL_NO_PROPERTY){ return 0; } return (icalproperty*)icalproperty_new_impl(kind); } icalproperty* icalproperty_new_clone(icalproperty* old) { icalproperty *new = icalproperty_new_impl(old->kind); pvl_elem p; icalerror_check_arg_rz((old!=0),"old"); icalerror_check_arg_rz((new!=0),"new"); if (old->value !=0) { new->value = icalvalue_new_clone(old->value); } if (old->x_name != 0) { new->x_name = icalmemory_strdup(old->x_name); if (new->x_name == 0) { icalproperty_free(new); icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } } for(p=pvl_head(old->parameters);p != 0; p = pvl_next(p)){ icalparameter *param = icalparameter_new_clone(pvl_data(p)); if (param == 0){ icalproperty_free(new); icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } pvl_push(new->parameters,param); } return new; } icalproperty* icalproperty_new_from_string(const char* str) { size_t buf_size = 1024; char* buf; char* buf_ptr; icalproperty *prop; icalcomponent *comp; int errors = 0; icalerror_check_arg_rz( (str!=0),"str"); buf = icalmemory_new_buffer(buf_size); buf_ptr = buf; /* Is this a HACK or a crafty reuse of code? */ icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:VCALENDAR\r\n"); icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); icalmemory_append_string(&buf, &buf_ptr, &buf_size, "\r\n"); icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:VCALENDAR\r\n"); comp = icalparser_parse_string(buf); if(comp == 0){ icalerror_set_errno(ICAL_PARSE_ERROR); free(buf); return 0; } errors = icalcomponent_count_errors(comp); prop = icalcomponent_get_first_property(comp,ICAL_ANY_PROPERTY); icalcomponent_remove_property(comp,prop); icalcomponent_free(comp); free(buf); if(errors > 0){ icalproperty_free(prop); return 0; } else { return prop; } } void icalproperty_free (icalproperty* p) { icalparameter* param; icalerror_check_arg_rv((p!=0),"prop"); #ifdef ICAL_FREE_ON_LIST_IS_ERROR icalerror_assert( (p->parent ==0),"Tried to free a property that is still attached to a component. "); #else if(p->parent !=0){ return; } #endif if (p->value != 0){ icalvalue_set_parent(p->value,0); icalvalue_free(p->value); } while( (param = pvl_pop(p->parameters)) != 0){ icalparameter_free(param); } pvl_free(p->parameters); if (p->x_name != 0) { free(p->x_name); } p->kind = ICAL_NO_PROPERTY; p->parameters = 0; p->parameter_iterator = 0; p->value = 0; p->x_name = 0; p->id[0] = 'X'; free(p); } /* This returns where the start of the next line should be. chars_left does not include the trailing '\0'. */ #define MAX_LINE_LEN 75 /*#define MAX_LINE_LEN 120*/ static char* get_next_line_start (char *line_start, size_t chars_left) { char *pos; /* If we have 74 chars or less left, we can output all of them. we return a pointer to the '\0' at the end of the string. */ if (chars_left < MAX_LINE_LEN) { return line_start + chars_left; } /* Now we jump to the last possible character of the line, and step back trying to find a ';' ':' or ' '. If we find one, we return the character after it. */ pos = line_start + MAX_LINE_LEN - 2; while (pos > line_start) { if (*pos == ';' || *pos == ':' || *pos == ' ') { return pos + 1; } pos--; } /* Now try to split on a UTF-8 boundary defined as a 7-bit value or as a byte with the two high-most bits set: 11xxxxxx. See http://czyborra.com/utf/ */ pos = line_start + MAX_LINE_LEN - 1; while (pos > line_start) { /* plain ascii */ if ((*pos & 128) == 0) return pos; /* utf8 escape byte */ if ((*pos & 192) == 192) return pos; pos--; } /* Give up, just break at 74 chars (the 75th char is the space at the start of the line). */ return line_start + MAX_LINE_LEN - 1; } /** This splits the property into lines less than 75 octects long (as * specified in RFC2445). It tries to split after a ';' if it can. * It returns a tmp buffer. NOTE: I'm not sure if it matters if we * split a line in the middle of a UTF-8 character. It probably won't * look nice in a text editor. */ static char* fold_property_line (char *text) { size_t buf_size, len, chars_left; char *buf, *buf_ptr, *line_start, *next_line_start; int first_line; char ch; /* Start with a buffer twice the size of our property line, so we almost certainly won't overflow it. */ len = strlen (text); buf_size = len * 2; buf = icalmemory_new_buffer (buf_size); buf_ptr = buf; /* Step through the text, finding each line to add to the output. */ line_start = text; chars_left = len; first_line = 1; for (;;) { if (chars_left <= 0) break; /* This returns the first character for the next line. */ next_line_start = get_next_line_start (line_start, chars_left); /* If this isn't the first line, we need to output a newline and space first. */ if (!first_line) { icalmemory_append_string (&buf, &buf_ptr, &buf_size, "\r\n "); } first_line = 0; /* This adds the line to our tmp buffer. We temporarily place a '\0' in text, so we can copy the line in one go. */ ch = *next_line_start; *next_line_start = '\0'; icalmemory_append_string (&buf, &buf_ptr, &buf_size, line_start); *next_line_start = ch; /* Now we move on to the next line. */ chars_left -= (next_line_start - line_start); line_start = next_line_start; } return buf; } /* Determine what VALUE parameter to include. The VALUE parameters are ignored in the normal parameter printing ( the block after this one, so we need to do it here */ static const char * icalproperty_get_value_kind(icalproperty *prop) { const char* kind_string = 0; icalparameter *orig_val_param = icalproperty_get_first_parameter(prop,ICAL_VALUE_PARAMETER); icalvalue *value = icalproperty_get_value(prop); icalvalue_kind orig_kind = ICAL_NO_VALUE; icalvalue_kind this_kind = ICAL_NO_VALUE; icalvalue_kind default_kind = icalproperty_kind_to_value_kind(prop->kind); if(orig_val_param){ orig_kind = icalparameter_value_to_value_kind( icalparameter_get_value(orig_val_param) ); } if(value != 0){ this_kind = icalvalue_isa(value); } if ( orig_kind != ICAL_NO_VALUE ) { kind_string = icalvalue_kind_to_string( orig_kind ); } else if(this_kind == default_kind && orig_kind != ICAL_NO_VALUE){ /* The kind is the default, so it does not need to be included, but do it anyway, since it was explicit in the property. But, use the default, not the one specified in the property */ kind_string = icalvalue_kind_to_string(default_kind); } else if (this_kind != default_kind && this_kind != ICAL_NO_VALUE){ /* Not the default, so it must be specified */ kind_string = icalvalue_kind_to_string(this_kind); } else { /* Don'tinclude the VALUE parameter at all */ } return kind_string; } const char* icalproperty_as_ical_string (icalproperty* prop) { char *buf; buf = icalproperty_as_ical_string_r(prop); icalmemory_add_tmp_buffer(buf); return buf; } char* icalproperty_as_ical_string_r(icalproperty* prop) { icalparameter *param; /* Create new buffer that we can append names, parameters and a * value to, and reallocate as needed. */ const char* property_name = 0; size_t buf_size = 1024; char* buf; char* buf_ptr; icalvalue* value; char *out_buf; const char* kind_string = 0; const char newline[] = "\r\n"; icalerror_check_arg_rz( (prop!=0),"prop"); buf = icalmemory_new_buffer(buf_size); buf_ptr = buf; /* Append property name */ if (prop->kind == ICAL_X_PROPERTY && prop->x_name != 0){ property_name = prop->x_name; } else { property_name = icalproperty_kind_to_string(prop->kind); } if (property_name == 0 ) { icalerror_warn("Got a property of an unknown kind."); icalmemory_free_buffer(buf); return 0; } icalmemory_append_string(&buf, &buf_ptr, &buf_size, property_name); kind_string = icalproperty_get_value_kind(prop); if(kind_string!=0){ icalmemory_append_string(&buf, &buf_ptr, &buf_size, ";VALUE="); icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); } /* Append parameters */ for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); param != 0; param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { icalparameter_kind kind = icalparameter_isa(param); kind_string = icalparameter_as_ical_string_r(param); if (kind_string == 0 ) { icalerror_warn("Got a parameter of unknown kind for the following property"); icalerror_warn((property_name) ? property_name : "(NULL)"); continue; } if (kind==ICAL_VALUE_PARAMETER) { free ((char *) kind_string); continue; } icalmemory_append_string(&buf, &buf_ptr, &buf_size, ";"); icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); free((char *)kind_string); } /* Append value */ icalmemory_append_string(&buf, &buf_ptr, &buf_size, ":"); value = icalproperty_get_value(prop); if (value != 0){ char *str = icalvalue_as_ical_string_r(value); if (str != 0) icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); #if ICAL_ALLOW_EMPTY_PROPERTIES == 0 else icalmemory_append_string(&buf, &buf_ptr, &buf_size,"ERROR: No Value"); #endif free(str); } else { #if ICAL_ALLOW_EMPTY_PROPERTIES == 0 icalmemory_append_string(&buf, &buf_ptr, &buf_size,"ERROR: No Value"); #endif } icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); /* We now use a function to fold the line properly every 75 characters. That function also adds the newline for us. */ out_buf = fold_property_line (buf); icalmemory_free_buffer(buf); return out_buf; } icalproperty_kind icalproperty_isa (icalproperty* p) { if(p != 0){ return p->kind; } return ICAL_NO_PROPERTY; } int icalproperty_isa_property (void* property) { icalproperty *impl = (icalproperty *) property; icalerror_check_arg_rz( (property!=0), "property"); if (strcmp(impl->id,"prop") == 0) { return 1; } else { return 0; } } void icalproperty_add_parameter (icalproperty* p,icalparameter* parameter) { icalerror_check_arg_rv( (p!=0),"prop"); icalerror_check_arg_rv( (parameter!=0),"parameter"); pvl_push(p->parameters, parameter); } void icalproperty_set_parameter (icalproperty* prop,icalparameter* parameter) { icalparameter_kind kind; icalerror_check_arg_rv( (prop!=0),"prop"); icalerror_check_arg_rv( (parameter!=0),"parameter"); kind = icalparameter_isa(parameter); if (kind == ICAL_X_PARAMETER) { icalproperty_remove_parameter_by_name(prop, icalparameter_get_xname(parameter)); } else if (kind == ICAL_IANA_PARAMETER) { icalproperty_remove_parameter_by_name(prop, icalparameter_get_iana_name(parameter)); } else icalproperty_remove_parameter_by_kind(prop,kind); icalproperty_add_parameter(prop,parameter); } void icalproperty_set_parameter_from_string(icalproperty* prop, const char* name, const char* value) { icalparameter_kind kind; icalparameter *param; icalerror_check_arg_rv( (prop!=0),"prop"); icalerror_check_arg_rv( (name!=0),"name"); icalerror_check_arg_rv( (value!=0),"value"); kind = icalparameter_string_to_kind(name); if(kind == ICAL_NO_PARAMETER){ icalerror_set_errno(ICAL_BADARG_ERROR); return; } param = icalparameter_new_from_value_string(kind,value); if (param == 0){ icalerror_set_errno(ICAL_BADARG_ERROR); return; } if (kind == ICAL_X_PARAMETER) { icalparameter_set_xname(param, name); } else if (kind == ICAL_IANA_PARAMETER) { icalparameter_set_iana_name(param, name); } icalproperty_set_parameter(prop,param); } const char* icalproperty_get_parameter_as_string(icalproperty* prop, const char* name) { char *buf; buf = icalproperty_get_parameter_as_string_r(prop, name); icalmemory_add_tmp_buffer(buf); return buf; } char* icalproperty_get_parameter_as_string_r(icalproperty* prop, const char* name) { icalparameter_kind kind; icalparameter *param; char* str; char *pv, *t; char* pvql; char* pvqr; icalerror_check_arg_rz( (prop!=0),"prop"); icalerror_check_arg_rz( (name!=0),"name"); kind = icalparameter_string_to_kind(name); if(kind == ICAL_NO_PARAMETER){ /* icalenum_string_to_parameter_kind will set icalerrno */ return 0; } for(param = icalproperty_get_first_parameter(prop,kind); param != 0; param = icalproperty_get_next_parameter(prop,kind)) { if (kind == ICAL_X_PARAMETER) { if (strcmp(icalparameter_get_xname(param),name)==0) { break; } } else if (kind == ICAL_IANA_PARAMETER) { if (strcmp(icalparameter_get_iana_name(param),name)==0) { break; } } else { break; } } if (param == 0){ return 0; } str = icalparameter_as_ical_string_r(param); t = strchr(str,'='); if (t == 0) { icalerror_set_errno(ICAL_INTERNAL_ERROR); free(str); return 0; } /* Strip the property name and the equal sign */ pv = icalmemory_strdup(t+1); free(str); /* Is the string quoted? */ pvql = strchr(pv, '"'); if (pvql == 0) { return(pv); /* No quotes? Return it immediately. */ } /* Strip everything up to the first quote */ str = icalmemory_strdup(pvql+1); free(pv); /* Search for the end quote */ pvqr = strrchr(str, '"'); if (pvqr == 0) { icalerror_set_errno(ICAL_INTERNAL_ERROR); free(str); return 0; } *pvqr = '\0'; return str; } /** @see icalproperty_remove_parameter_by_kind() * * @deprecated Please use icalproperty_remove_parameter_by_kind() * instead. */ void icalproperty_remove_parameter(icalproperty* prop, icalparameter_kind kind) { icalproperty_remove_parameter_by_kind(prop, kind); } /** @brief Remove all parameters with the specified kind. * * @param prop A valid icalproperty. * @param kind The kind to remove (ex. ICAL_TZID_PARAMETER) * * See icalproperty_remove_parameter_by_name() and * icalproperty_remove_parameter_by_ref() for alternate ways of * removing parameters */ void icalproperty_remove_parameter_by_kind(icalproperty* prop, icalparameter_kind kind) { pvl_elem p; icalerror_check_arg_rv((prop!=0),"prop"); for(p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)){ icalparameter* param = (icalparameter *)pvl_data (p); if (icalparameter_isa(param) == kind) { pvl_remove (prop->parameters, p); icalparameter_free(param); break; } } } /** @brief Remove all parameters with the specified name. * * @param prop A valid icalproperty. * @param name The name of the parameter to remove * * This function removes parameters with the given name. The name * corresponds to either a built-in name (TZID, etc.) or the name of * an extended parameter (X-FOO) * * See icalproperty_remove_parameter_by_kind() and * icalproperty_remove_parameter_by_ref() for alternate ways of removing * parameters */ void icalproperty_remove_parameter_by_name(icalproperty* prop, const char *name) { pvl_elem p; icalerror_check_arg_rv((prop!=0),"prop"); for(p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)){ icalparameter* param = (icalparameter *)pvl_data (p); const char * kind_string; if (icalparameter_isa(param) == ICAL_X_PARAMETER) kind_string = icalparameter_get_xname(param); else if (icalparameter_isa(param) == ICAL_IANA_PARAMETER) kind_string = icalparameter_get_iana_name(param); else kind_string = icalparameter_kind_to_string(icalparameter_isa(param)); if (!kind_string) continue; if (0 == strcmp(kind_string, name)) { pvl_remove (prop->parameters, p); icalparameter_free(param); break; } } } /** @brief Remove the specified parameter reference from the property. * * @param prop A valid icalproperty. * @param parameter A reference to a specific icalparameter. * * This function removes the specified parameter reference from the * property. */ void icalproperty_remove_parameter_by_ref(icalproperty* prop, icalparameter* parameter) { pvl_elem p; icalerror_check_arg_rv((prop!=0),"prop"); icalerror_check_arg_rv((parameter!=0),"parameter"); for (p=pvl_head(prop->parameters);p != 0; p = pvl_next(p)) { icalparameter* p_param = (icalparameter *)pvl_data (p); if (icalparameter_has_same_name(parameter, p_param)) { pvl_remove (prop->parameters, p); icalparameter_free(p_param); break; } } } int icalproperty_count_parameters (const icalproperty* prop) { if(prop != 0){ return pvl_count(prop->parameters); } icalerror_set_errno(ICAL_USAGE_ERROR); return -1; } icalparameter* icalproperty_get_first_parameter(icalproperty* p, icalparameter_kind kind) { icalerror_check_arg_rz( (p!=0),"prop"); p->parameter_iterator = pvl_head(p->parameters); if (p->parameter_iterator == 0) { return 0; } for( p->parameter_iterator = pvl_head(p->parameters); p->parameter_iterator !=0; p->parameter_iterator = pvl_next(p->parameter_iterator)){ icalparameter *param = (icalparameter*)pvl_data(p->parameter_iterator); if(icalparameter_isa(param) == kind || kind == ICAL_ANY_PARAMETER){ return param; } } return 0; } icalparameter* icalproperty_get_next_parameter (icalproperty* p, icalparameter_kind kind) { icalerror_check_arg_rz( (p!=0),"prop"); if (p->parameter_iterator == 0) { return 0; } for( p->parameter_iterator = pvl_next(p->parameter_iterator); p->parameter_iterator !=0; p->parameter_iterator = pvl_next(p->parameter_iterator)){ icalparameter *param = (icalparameter*)pvl_data(p->parameter_iterator); if(icalparameter_isa(param) == kind || kind == ICAL_ANY_PARAMETER){ return param; } } return 0; } void icalproperty_set_value (icalproperty* p, icalvalue* value) { icalerror_check_arg_rv((p !=0),"prop"); icalerror_check_arg_rv((value !=0),"value"); if (p->value != 0){ icalvalue_set_parent(p->value,0); icalvalue_free(p->value); p->value = 0; } p->value = value; icalvalue_set_parent(value,p); } void icalproperty_set_value_from_string(icalproperty* prop,const char* str, const char* type) { icalvalue *oval,*nval; icalvalue_kind kind = ICAL_NO_VALUE; icalerror_check_arg_rv( (prop!=0),"prop"); icalerror_check_arg_rv( (str!=0),"str"); icalerror_check_arg_rv( (type!=0),"type"); if(strcmp(type,"NO")==0){ /* Get the type from the value the property already has, if it exists */ oval = icalproperty_get_value(prop); if(oval != 0){ /* Use the existing value kind */ kind = icalvalue_isa(oval); } else { /* Use the default kind for the property */ kind = icalproperty_kind_to_value_kind(icalproperty_isa(prop)); } } else { /* Use the given kind string */ kind = icalvalue_string_to_kind(type); } if(kind == ICAL_NO_VALUE){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return; } icalerror_clear_errno(); nval = icalvalue_new_from_string(kind, str); if(nval == 0){ /* icalvalue_new_from_string sets errno */ assert(icalerrno != ICAL_NO_ERROR); return; } icalproperty_set_value(prop,nval); } icalvalue* icalproperty_get_value(const icalproperty* prop) { icalerror_check_arg_rz( (prop!=0),"prop"); return prop->value; } const char* icalproperty_get_value_as_string(const icalproperty* prop) { char *buf; buf = icalproperty_get_value_as_string_r(prop); icalmemory_add_tmp_buffer(buf); return buf; } char* icalproperty_get_value_as_string_r(const icalproperty* prop) { icalvalue *value; icalerror_check_arg_rz( (prop!=0),"prop"); value = prop->value; return icalvalue_as_ical_string_r(value); } void icalproperty_set_x_name(icalproperty* prop, const char* name) { icalerror_check_arg_rv( (name!=0),"name"); icalerror_check_arg_rv( (prop!=0),"prop"); if (prop->x_name != 0) { free(prop->x_name); } prop->x_name = icalmemory_strdup(name); if(prop->x_name == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); } } const char* icalproperty_get_x_name(icalproperty* prop){ icalerror_check_arg_rz( (prop!=0),"prop"); return prop->x_name; } const char* icalproperty_get_property_name(const icalproperty* prop) { char *buf; buf = icalproperty_get_property_name_r(prop); icalmemory_add_tmp_buffer(buf); return buf; } char* icalproperty_get_property_name_r(const icalproperty* prop) { const char* property_name = 0; size_t buf_size = 256; char* buf; char* buf_ptr; icalerror_check_arg_rz( (prop!=0),"prop"); buf = icalmemory_new_buffer(buf_size); buf_ptr = buf; if (prop->kind == ICAL_X_PROPERTY && prop->x_name != 0){ property_name = prop->x_name; } else { property_name = icalproperty_kind_to_string(prop->kind); } if (property_name == 0 ) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); icalmemory_free_buffer(buf); return 0; } else { /* _append_string will automatically grow the buffer if property_name is longer than the initial buffer size */ icalmemory_append_string(&buf, &buf_ptr, &buf_size, property_name); } return buf; } void icalproperty_set_parent(icalproperty* property, icalcomponent* component) { icalerror_check_arg_rv( (property!=0),"property"); property->parent = component; } icalcomponent* icalproperty_get_parent(const icalproperty* property) { icalerror_check_arg_rz( (property!=0),"property"); return property->parent; } libical-1.0/src/libical/pvl.c0000664000076400007640000002415612132563132015074 0ustar allenallen/*====================================================================== FILE: pvl.c CREATOR: eric November, 1995 (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "pvl.h" #include #include #include /** struct pvl_list_t The list structure. This is the hanlde for the entire list This type is also private. Use pvl_list instead */ typedef struct pvl_list_t { int MAGIC; /**< Magic Identifier */ struct pvl_elem_t *head; /**< Head of list */ struct pvl_elem_t *tail; /**< Tail of list */ int count; /**< Number of items in the list */ struct pvl_elem_t *p; /**< Pointer used for iterators */ } pvl_list_t; /** * This global is incremented for each call to pvl_new_element(); it gives each * list a unique identifer */ int pvl_elem_count = 0; int pvl_list_count = 0; /** * @brief Creates a new list, clears the pointers and assigns a magic number * * @return Pointer to the new list, 0 if there is no available memory. */ pvl_list pvl_newlist() { struct pvl_list_t *L; if ( ( L = (struct pvl_list_t*)malloc(sizeof(struct pvl_list_t))) == 0) { errno = ENOMEM; return 0; } L->MAGIC = pvl_list_count; pvl_list_count++; L->head = 0; L->tail = 0; L->count = 0; L->p = 0; return L; } void pvl_free(pvl_list l) { struct pvl_list_t *L = (struct pvl_list_t *)l; pvl_clear(l); free(L); } /** * @brief Creates a new list element, assigns a magic number, and assigns * the next and previous pointers. * * Passing in the next and previous points may seem odd, but it allos the user * to set them while keeping the internal data hidden. In nearly all cases, * the user is the pvl library itself. * * @param d The data item to be stored in the list * @param next Pointer value to assign to the member "next" * @param prior Pointer value to assign to the member "prior" * * @return A pointer to the new element, 0 if there is no memory available. */ pvl_elem pvl_new_element(void *d, pvl_elem next, pvl_elem prior) { struct pvl_elem_t *E; if ( ( E = (struct pvl_elem_t*)malloc(sizeof(struct pvl_elem_t))) == 0) { errno = ENOMEM; return 0; } E->MAGIC = pvl_elem_count++; E->d = d; E->next = next; E->prior = prior; return (pvl_elem)E; } /** * @brief Add a new element to the from of the list * * @param L The list to add the item to * @param d Pointer to the item to add */ void pvl_unshift(pvl_list L,void *d) { struct pvl_elem_t *E = pvl_new_element(d,L->head,0); if (E->next != 0) { /* Link the head node to it */ E->next->prior = E; } /* move the head */ L->head = E; /* maybe move the tail */ if (L->tail == 0) { L->tail = E; } L->count++; } /** * @brief Remove an element from the front of the list * * @param L The list to operate on * * @return the entry on the front of the list */ void* pvl_shift(pvl_list L) { if (L->head == 0) { return 0; } return pvl_remove(L,(void*)L->head); } /** * @brief Add a new item to the tail of the list * * @param L The list to operate on * @param d Pointer to the item to add * */ void pvl_push(pvl_list L,void *d) { struct pvl_elem_t *E = pvl_new_element(d,0,L->tail); /* These are done in pvl_new_element E->next = 0; E->prior = L->tail; */ if (L->tail != 0) { L->tail->next = E; } if (L->head == 0) { L->head = E; } L->tail = E; L->count++; } /** * @brief Remove an element from the tail of the list * * @param L The list to operate on */ void* pvl_pop(pvl_list L) { if ( L->tail == 0) { return 0; } return pvl_remove(L,(void*) L->tail);; } /** * Add a new item to a list that is ordered by a comparison function. * This routine assumes that the list is properly ordered. * * @param L The list to operate on * @param f Pointer to a comparison function * @param d Pointer to data to pass to the comparison function */ void pvl_insert_ordered(pvl_list L,pvl_comparef f,void *d) { struct pvl_elem_t *P; L->count++; /* Empty list, add to head */ if(L->head == 0) { pvl_unshift(L,d); return; } /* smaller than head, add to head */ if ( ((*f)(d,L->head->d)) <= 0) { pvl_unshift(L,d); return; } /* larger than tail, add to tail */ if ( (*f)(d,L->tail->d) >= 0) { pvl_push(L,d); return; } /* Search for the first element that is smaller, and add before it */ for (P=L->head; P != 0; P = P->next) { if ( (*f)(P->d,d) >= 0) { pvl_insert_before(L,P,d); return; } } /* badness, choke */ #ifndef lint assert(0); #endif } /** * @brief Add a new item after the referenced element. * @param L The list to operate on * @param P The list element to add the item after * @param d Pointer to the item to add. */ void pvl_insert_after(pvl_list L,pvl_elem P,void *d) { struct pvl_elem_t *E = 0; L->count++; if (P == 0) { pvl_unshift(L,d); return; } if ( P == L->tail) { E = pvl_new_element(d,0,P); L->tail = E; E->prior->next = E; } else { E = pvl_new_element(d,P->next,P); E->next->prior = E; E->prior->next = E; } } /** * @brief Add an item after a referenced item * * @param L The list to operate on * @param P The list element to add the item before * @param d Pointer to the data to be added. */ void pvl_insert_before(pvl_list L,pvl_elem P,void *d) { struct pvl_elem_t *E = 0; L->count++; if (P == 0) { pvl_unshift(L,d); return; } if ( P == L->head) { E = pvl_new_element(d,P,0); E->next->prior = E; L->head = E; } else { E = pvl_new_element(d,P,P->prior); E->prior->next = E; E->next->prior = E; } } /** * @brief Remove the referenced item from the list. * * This routine will free the element, but not the data item that the * element contains. * * @param L The list to operate on * @param E The element to remove. */ void* pvl_remove(pvl_list L,pvl_elem E) { void* data; if (E == L->head) { if (E->next != 0) { E->next->prior = 0; L->head = E->next; } else { /* E Also points to tail -> only one element in list */ L->tail = 0; L->head = 0; } } else if (E == L->tail) { if (E->prior != 0) { E->prior->next = 0; L->tail = E->prior; } else { /* E points to the head, so it was the last element */ /* This case should be taken care of in the previous clause */ L->head = 0; L->tail = 0; } } else { E->prior->next = E->next; E->next->prior = E->prior; } L->count--; data = E->d; E->prior = 0; E->next = 0; E->d = 0; free(E); return data; } /** * @brief Return a pointer to data that satisfies a function. * * This routine will interate through the entire list and call the * find function for each item. It will break and return a pointer to the * data that causes the find function to return 1. * * @param l The list to operate on * @param f Pointer to the find function * @param v Pointer to constant data to pass into the function * * @return Pointer to the element that the find function found. */ pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v) { pvl_elem e; for (e=pvl_head(l); e!= 0; e = pvl_next(e)) { if ( (*f)(((struct pvl_elem_t *)e)->d,v) == 1) { /* Save this elem for a call to find_next */ ((struct pvl_list_t *)l)->p = e; return e; } } return 0; } /** * @brief Like pvl_find(), but continues the search where the last find() or * find_next() left off. * * @param l The list to operate on * @param f Pointer to the find function * @param v Pointer to constant data to pass into the function * * @return Pointer to the element that the find function found. */ pvl_elem pvl_find_next(pvl_list l,pvl_findf f,void* v) { pvl_elem e; for (e=pvl_head(l); e!= 0; e = pvl_next(e)) { if ( (*f)(((struct pvl_elem_t *)e)->d,v) == 1) { /* Save this elem for a call to find_next */ ((struct pvl_list_t *)l)->p = e; return e; } } return 0; } /** * @brief Remove the all the elements in the list. The does not free * the data items the elements hold. */ void pvl_clear(pvl_list l) { pvl_elem e = pvl_head(l); pvl_elem next; if (e == 0) { return; } while(e != 0) { next = pvl_next(e); pvl_remove(l,e); e = next; } } /** * @brief Returns the number of items in the list. */ int pvl_count(pvl_list L) { return L->count; } /** * @brief Returns a pointer to the given element */ pvl_elem pvl_next(pvl_elem E) { if (E == 0){ return 0; } return (pvl_elem)E->next; } /** * @brief Returns a pointer to the element previous to the element given. */ pvl_elem pvl_prior(pvl_elem E) { return (pvl_elem)E->prior; } /** * @brief Returns a pointer to the first item in the list. */ pvl_elem pvl_head(pvl_list L ) { return (pvl_elem)L->head; } /** * @brief Returns a pointer to the last item in the list. */ pvl_elem pvl_tail(pvl_list L) { return (pvl_elem)L->tail; } #ifndef PVL_USE_MACROS void* pvl_data(pvl_elem E) { if ( E == 0){ return 0; } return E->d; } #endif /** * @brief Call a function for every item in the list. * * @param l The list to operate on * @param f Pointer to the function to call * @param v Data to pass to the function on every iteration */ void pvl_apply(pvl_list l,pvl_applyf f, void *v) { pvl_elem e; for (e=pvl_head(l); e!= 0; e = pvl_next(e)) { (*f)(((struct pvl_elem_t *)e)->d,v); } } libical-1.0/src/libical/icalproperty.h0000664000076400007640000001145712132563132017015 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalproperty.h CREATOR: eric 20 March 1999 $Id: icalproperty.h,v 1.20 2008-01-15 23:17:41 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparam.h ======================================================================*/ #ifndef ICALPROPERTY_H #define ICALPROPERTY_H #include #include /* for va_... */ #include "icalderivedparameter.h" #include "icalvalue.h" #include "icalrecur.h" /* Actually in icalderivedproperty.h: typedef struct icalproperty_impl icalproperty; */ #include "icalderivedproperty.h" /* To get icalproperty_kind enumerations */ icalproperty* icalproperty_new(icalproperty_kind kind); icalproperty* icalproperty_new_clone(icalproperty * prop); icalproperty* icalproperty_new_from_string(const char* str); const char* icalproperty_as_ical_string(icalproperty* prop); char* icalproperty_as_ical_string_r(icalproperty* prop); void icalproperty_free(icalproperty* prop); icalproperty_kind icalproperty_isa(icalproperty* property); int icalproperty_isa_property(void* property); void icalproperty_add_parameters(struct icalproperty_impl *prop,va_list args); void icalproperty_add_parameter(icalproperty* prop,icalparameter* parameter); void icalproperty_set_parameter(icalproperty* prop,icalparameter* parameter); void icalproperty_set_parameter_from_string(icalproperty* prop, const char* name, const char* value); const char* icalproperty_get_parameter_as_string(icalproperty* prop, const char* name); char* icalproperty_get_parameter_as_string_r(icalproperty* prop, const char* name); void icalproperty_remove_parameter(icalproperty* prop, icalparameter_kind kind); void icalproperty_remove_parameter_by_kind(icalproperty* prop, icalparameter_kind kind); void icalproperty_remove_parameter_by_name(icalproperty* prop, const char *name); void icalproperty_remove_parameter_by_ref(icalproperty* prop, icalparameter *param); int icalproperty_count_parameters(const icalproperty* prop); /* Iterate through the parameters */ icalparameter* icalproperty_get_first_parameter(icalproperty* prop, icalparameter_kind kind); icalparameter* icalproperty_get_next_parameter(icalproperty* prop, icalparameter_kind kind); /* Access the value of the property */ void icalproperty_set_value(icalproperty* prop, icalvalue* value); void icalproperty_set_value_from_string(icalproperty* prop,const char* value, const char* kind); icalvalue* icalproperty_get_value(const icalproperty* prop); const char* icalproperty_get_value_as_string(const icalproperty* prop); char* icalproperty_get_value_as_string_r(const icalproperty* prop); /* Deal with X properties */ void icalproperty_set_x_name(icalproperty* prop, const char* name); const char* icalproperty_get_x_name(icalproperty* prop); /** Return the name of the property -- the type name converted to a * string, or the value of _get_x_name if the type is and X * property */ const char* icalproperty_get_property_name (const icalproperty* prop); char* icalproperty_get_property_name_r(const icalproperty* prop); icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value); /* Convert kinds to string and get default value type */ icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind); icalproperty_kind icalproperty_value_kind_to_kind(icalvalue_kind kind); const char* icalproperty_kind_to_string(icalproperty_kind kind); icalproperty_kind icalproperty_string_to_kind(const char* string); /** Check validity of a specific icalproperty_kind **/ int icalproperty_kind_is_valid(const icalproperty_kind kind); icalproperty_method icalproperty_string_to_method(const char* str); const char* icalproperty_method_to_string(icalproperty_method method); const char* icalproperty_enum_to_string(int e); char* icalproperty_enum_to_string_r(int e); int icalproperty_string_to_enum(const char* str); int icalproperty_kind_and_string_to_enum(const int kind, const char* str); const char* icalproperty_status_to_string(icalproperty_status); icalproperty_status icalproperty_string_to_status(const char* string); int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e); #endif /*ICALPROPERTY_H*/ libical-1.0/src/libical/icalmemory.h0000664000076400007640000000537312132563130016437 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalmemory.h CREATOR: eric 30 June 1999 $Id: icalmemory.h,v 1.6 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Initial Developer of the Original Code is Eric Busboom (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org ======================================================================*/ #ifndef ICALMEMORY_H #define ICALMEMORY_H #ifndef WIN32 #include /* for size_t */ #else #include #endif /* Tmp buffers are managed by ical. References can be returned to the caller, although the caller will not own the memory. */ void* icalmemory_tmp_buffer(size_t size); char* icalmemory_tmp_copy(const char* str); /** Add an externally allocated buffer to the ring. */ void icalmemory_add_tmp_buffer(void*); /** Free all memory used in the ring */ void icalmemory_free_ring(void); /* Non-tmp buffers must be freed. These are mostly wrappers around * malloc, etc, but are used so the caller can change the memory * allocators in a future version of the library */ void* icalmemory_new_buffer(size_t size); void* icalmemory_resize_buffer(void* buf, size_t size); void icalmemory_free_buffer(void* buf); /** icalmemory_append_string will copy the string 'string' to the buffer 'buf' starting at position 'pos', reallocing 'buf' if it is too small. 'buf_size' is the size of 'buf' and will be changed if 'buf' is reallocated. 'pos' will point to the last byte of the new string in 'buf', usually a '\0' */ /* THESE ROUTINES CAN NOT BE USED ON TMP BUFFERS. Only use them on normally allocated memory, or on buffers created from icalmemory_new_buffer, never with buffers created by icalmemory_tmp_buffer. If icalmemory_append_string has to resize a buffer on the ring, the ring will loose track of it an you will have memory problems. */ void icalmemory_append_string(char** buf, char** pos, size_t* buf_size, const char* string); /** icalmemory_append_char is similar, but is appends a character instead of a string */ void icalmemory_append_char(char** buf, char** pos, size_t* buf_size, char ch); /** A wrapper around strdup. Partly to trap calls to strdup, partly because in -ansi, gcc on Red Hat claims that strdup is undeclared */ char* icalmemory_strdup(const char *s); #endif /* !ICALMEMORY_H */ libical-1.0/src/libical/icptrholder.h0000664000076400007640000000634412132563132016616 0ustar allenallen/* -*- Mode: C++ -*- */ /** * @file icptrholder.h * @author wyau (08/29/02) * @brief C++ template classes for managing C++ pointers returned by VComponent::get_..._component, * VComponent::get_..._property, ICalPropety::get_..._value. * @remarks VComponent::get... functions returns a C++ oject that wraps the libical implementation. * It is important to note that the wrapped implementation still belongs to the orginal * component. To stop memory leak, caller must delete the pointer. However, the destructor * will call the appropriate free function. eg. ~VComponent calls icalcomponent_free(imp). * As stated previously, imp stil belongs to the original component. To avoid freeing the * wrapped "imp", caller must set the "imp" to null before deleting the pointer. * * The template class relieves the burden of memory management when used as a stack based * object. The class holds a pointer to the C++ Wrapper. The destructor set the imp to * null before deleting the pointer. * * Each C++ Wrapper instantiates a template class in it's corresponding .h file. * * Usage example: * VComponentTmpPtr p; // VComponentTmpPtr is an instantiation of this template * for (p=component.get_first_component; p!= NULL; p=component.get_next_component) { * * (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ #ifndef __ICPTRHOLDER_H__ #define __ICPTRHOLDER_H__ template class ICPointerHolder { public: ICPointerHolder() { ptr = NULL; } ICPointerHolder(T* p) { ptr = p; } // copy constructor to support assignment ICPointerHolder(const ICPointerHolder& ip) { ptr = ip.ptr; // We need to transfer ownership of ptr to this object by setting // ip's ptr to null. Otherwise, ptr will de deleted twice. // const ugliness requires us to do the const_cast. ICPointerHolder *ipp = const_cast(&ip); ipp->ptr = NULL; }; ~ICPointerHolder() { release(); } ICPointerHolder& operator=(T* p) { this->release(); ptr = p; return *this; } ICPointerHolder& operator=(ICPointerHolder& p) { this->release(); ptr = p.ptr; // this transfer ownership of the pointer p.ptr = NULL; // set it to null so the pointer won't get delete twice. return *this; } int operator!=(T* p) {return (ptr != p);} int operator==(T* p) {return (ptr == p);} operator T*() const { return ptr; } T* operator->() const { assert(ptr); return ptr; } T& operator*() { assert(ptr); return *ptr; } private: void release() { if (ptr != NULL) { ptr->detach(); delete ptr; ptr = NULL; } } T* ptr; }; #endif libical-1.0/src/libical/icallangbind.c0000664000076400007640000001704512132563132016701 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icallangbind.c CREATOR: eric 15 dec 2000 DESCRIPTION: $Id: icallangbind.c,v 1.24 2008-01-02 20:07:31 dothebart Exp $ $Locker: $ (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified under the same terms as perl itself. ( Either the Artistic License or the GPL. ) ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalcomponent.h" #include "icalproperty.h" #include "icalerror.h" #include "icalmemory.h" #include "icalvalue.h" #include #include #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif int* icallangbind_new_array(int size){ int* p = (int*)malloc(size*sizeof(int)); return p; /* Caller handles failures */ } void icallangbind_free_array(int* array){ free(array); } int icallangbind_access_array(int* array, int index) { return array[index]; } /** Iterators to fetch parameters given property */ icalparameter* icallangbind_get_first_parameter(icalproperty *prop) { icalparameter_kind kind = ICAL_ANY_PARAMETER; return icalproperty_get_first_parameter(prop,kind); } icalparameter* icallangbind_get_next_parameter(icalproperty *prop) { icalparameter_kind kind = ICAL_ANY_PARAMETER; return icalproperty_get_next_parameter(prop,kind); } /** Like icalcomponent_get_first_component(), but takes a string for the kind and can iterate over X properties as if each X name was a seperate kind */ icalproperty* icallangbind_get_first_property(icalcomponent *c, const char* prop) { icalproperty_kind kind = icalproperty_string_to_kind(prop); icalproperty *p; if (kind == ICAL_NO_PROPERTY){ return 0; } if(kind == ICAL_X_PROPERTY){ for(p = icalcomponent_get_first_property(c,kind); p !=0; p = icalcomponent_get_next_property(c,kind)){ if(strcmp(icalproperty_get_x_name(p),prop) == 0){ return p; } } } else { p=icalcomponent_get_first_property(c,kind); return p; } return 0; } icalproperty* icallangbind_get_next_property(icalcomponent *c, const char* prop) { icalproperty_kind kind = icalenum_string_to_property_kind(prop); icalproperty *p; if (kind == ICAL_NO_PROPERTY){ return 0; } if(kind == ICAL_X_PROPERTY){ for(p = icalcomponent_get_next_property(c,kind); p !=0; p = icalcomponent_get_next_property(c,kind)){ if(strcmp(icalproperty_get_x_name(p),prop) == 0){ return p; } } } else { p=icalcomponent_get_next_property(c,kind); return p; } return 0; } icalcomponent* icallangbind_get_first_component(icalcomponent *c, const char* comp) { icalcomponent_kind kind = icalenum_string_to_component_kind(comp); if (kind == ICAL_NO_COMPONENT){ return 0; } return icalcomponent_get_first_component(c,kind); } icalcomponent* icallangbind_get_next_component(icalcomponent *c, const char* comp) { icalcomponent_kind kind = icalenum_string_to_component_kind(comp); if (kind == ICAL_NO_COMPONENT){ return 0; } return icalcomponent_get_next_component(c,kind); } #define APPENDS(x) icalmemory_append_string(&buf, &buf_ptr, &buf_size, x); #define APPENDC(x) icalmemory_append_char(&buf, &buf_ptr, &buf_size, x); char* icallangbind_property_eval_string_r(icalproperty* prop, char* sep) { char tmp[25]; size_t buf_size = 1024; char* buf; char* buf_ptr; icalparameter *param; icalvalue* value; if( prop == 0){ return 0; } buf = icalmemory_new_buffer(buf_size); buf_ptr = buf; APPENDS("{ "); value = icalproperty_get_value(prop); APPENDS(" 'name' "); APPENDS(sep); APPENDC('\''); APPENDS(icalproperty_kind_to_string(icalproperty_isa(prop))); APPENDC('\''); if(value){ APPENDS(", 'value_type' "); APPENDS(sep); APPENDC('\''); APPENDS(icalvalue_kind_to_string(icalvalue_isa(value))); APPENDC('\''); } APPENDS(", 'pid' "); APPENDS(sep); APPENDC('\''); snprintf(tmp,25,"%p",prop); APPENDS(tmp); APPENDC('\''); if(value){ switch (icalvalue_isa(value)){ case ICAL_ATTACH_VALUE: case ICAL_BINARY_VALUE: case ICAL_NO_VALUE: { icalerror_set_errno(ICAL_INTERNAL_ERROR); break; } default: { char* str = icalvalue_as_ical_string_r(value); char* copy = (char*) malloc(strlen(str)+1); const char *i; char *j; if(copy ==0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); break; } /* Remove any newlines */ for(j=copy, i = str; *i != 0; j++,i++){ if(*i=='\n'){ i++; } *j = *i; } *j = 0; APPENDS(", 'value'"); APPENDS(sep); APPENDC('\''); APPENDS(copy); APPENDC('\''); free(copy); free(str); break; } } } /* Add Parameters */ for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); param != 0; param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)){ char *copy = icalparameter_as_ical_string_r(param); char *v; if(copy == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); continue; } v = strchr(copy,'='); if(v == 0){ free(copy); continue; } *v = 0; v++; APPENDS(", "); APPENDC('\''); APPENDS(copy); APPENDC('\''); APPENDS(sep); APPENDC('\''); APPENDS(v); APPENDC('\''); free(copy); } APPENDC('}'); return buf; } const char* icallangbind_property_eval_string(icalproperty* prop, char* sep) { char *buf; buf = icallangbind_property_eval_string_r(prop, sep); icalmemory_add_tmp_buffer(buf); return buf; } #include "fcntl.h" int icallangbind_string_to_open_flag(const char* str) { if (strcmp(str,"r") == 0) {return O_RDONLY;} else if (strcmp(str,"r+") == 0) {return O_RDWR;} else if (strcmp(str,"w") == 0) {return O_WRONLY;} else if (strcmp(str,"w+") == 0) {return O_RDWR|O_CREAT;} else if (strcmp(str,"a") == 0) {return O_WRONLY|O_APPEND;} else return -1; } char* icallangbind_quote_as_ical_r(const char* str) { size_t buf_size = 2 * strlen(str); /* assume every char could be quoted */ char* buf = icalmemory_new_buffer(buf_size); (void)icalvalue_encode_ical_string(str, buf, (int)buf_size); return buf; } const char* icallangbind_quote_as_ical(const char* str) { char *buf; buf = icallangbind_quote_as_ical_r(str); icalmemory_add_tmp_buffer(buf); return(buf); } libical-1.0/src/libical/icalderivedproperty.c.in0000664000076400007640000001476212132563132020762 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalderivedproperty.c CREATOR: eric 15 Feb 2001 $Id: icalderivedproperty.c.in,v 1.15 2008-01-28 22:34:37 artcancro Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalproperty.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalproperty.h" #include "icalcomponent.h" #include "pvl.h" #include "icalenums.h" #include "icalerror.h" #include "icalmemory.h" #include "icalparser.h" #include "icaltimezone.h" #include /* For icalmemory_strdup, rindex */ #include #include #include #include /* for printf */ #include /* for va_list, va_start, etc. */ #ifdef _MSC_VER #define strcasecmp stricmp #endif struct icalproperty_impl* icalproperty_new_impl (icalproperty_kind kind); void icalproperty_add_parameters(struct icalproperty_impl *prop,va_list args); /* This map associates the property kinds with the string representation of the property name and the kind of VALUE that the property uses as a default */ struct icalproperty_map { icalproperty_kind kind; const char *name; icalvalue_kind value; }; /* This map associates the property enumerations with the king of property that they are used in and the string representation of the enumeration */ struct icalproperty_enum_map { icalproperty_kind prop; int prop_enum; const char* str; }; int icalproperty_kind_is_valid(const icalproperty_kind kind) { int i = 0; do { if (property_map[i].kind == kind) return 1; } while (property_map[i++].kind != ICAL_NO_PROPERTY); return 0; } const char* icalproperty_kind_to_string(icalproperty_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if (property_map[i].kind == kind) { return property_map[i].name; } } return 0; } icalproperty_kind icalproperty_string_to_kind(const char* string) { int i; if (string ==0 ) { return ICAL_NO_PROPERTY; } for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if (strcasecmp(property_map[i].name, string) == 0) { return property_map[i].kind; } } if(strncmp(string,"X-",2)==0){ return ICAL_X_PROPERTY; } return ICAL_NO_PROPERTY; } icalproperty_kind icalproperty_value_kind_to_kind(icalvalue_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if ( property_map[i].value == kind ) { return property_map[i].kind; } } return ICAL_NO_PROPERTY; } icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind) { int i; for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { if ( property_map[i].kind == kind ) { return property_map[i].value; } } return ICAL_NO_VALUE; } const char* icalproperty_enum_to_string(int e) { icalerror_check_arg_rz(e >= ICALPROPERTY_FIRST_ENUM,"e"); icalerror_check_arg_rz(e <= ICALPROPERTY_LAST_ENUM,"e"); return enum_map[e-ICALPROPERTY_FIRST_ENUM].str; } char *icalproperty_enum_to_string_r(int e) { return icalmemory_strdup(icalproperty_enum_to_string(e)); } int icalproperty_kind_and_string_to_enum(const int kind, const char* str) { icalproperty_kind pkind; int i; icalerror_check_arg_rz(str!=0,"str") if ((pkind = icalproperty_value_kind_to_kind(kind)) == ICAL_NO_PROPERTY) return 0; while(*str == ' '){ str++; } for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { if (enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == pkind) break; } if (i == ICALPROPERTY_LAST_ENUM) return 0; for (; i != ICALPROPERTY_LAST_ENUM; i++) { if(enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == pkind && strcasecmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) { return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum; } } return 0; } /** @deprecated please use icalproperty_kind_and_string_to_enum instead */ int icalproperty_string_to_enum(const char* str) { int i; icalerror_check_arg_rz(str!=0,"str") while(*str == ' '){ str++; } for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { if ( strcasecmp(enum_map[i-ICALPROPERTY_FIRST_ENUM].str, str) == 0) { return enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum; } } return 0; } int icalproperty_enum_belongs_to_property(icalproperty_kind kind, int e) { int i; for (i=ICALPROPERTY_FIRST_ENUM; i != ICALPROPERTY_LAST_ENUM; i++) { if(enum_map[i-ICALPROPERTY_FIRST_ENUM].prop_enum == e && enum_map[i-ICALPROPERTY_FIRST_ENUM].prop == kind ){ return 1; } } return 0; } const char* icalproperty_method_to_string(icalproperty_method method) { icalerror_check_arg_rz(method >= ICAL_METHOD_X,"method"); icalerror_check_arg_rz(method <= ICAL_METHOD_NONE,"method"); return enum_map[method-ICALPROPERTY_FIRST_ENUM].str; } icalproperty_method icalproperty_string_to_method(const char* str) { int i; icalerror_check_arg_rx(str!=0,"str",ICAL_METHOD_NONE) while(*str == ' '){ str++; } for (i=ICAL_METHOD_X-ICALPROPERTY_FIRST_ENUM; i != ICAL_METHOD_NONE-ICALPROPERTY_FIRST_ENUM; i++) { if ( strcasecmp(enum_map[i].str, str) == 0) { return (icalproperty_method)enum_map[i].prop_enum; } } return ICAL_METHOD_NONE; } const char* icalenum_status_to_string(icalproperty_status status) { icalerror_check_arg_rz(status >= ICAL_STATUS_X,"status"); icalerror_check_arg_rz(status <= ICAL_STATUS_NONE,"status"); return enum_map[status-ICALPROPERTY_FIRST_ENUM].str; } icalproperty_status icalenum_string_to_status(const char* str) { int i; icalerror_check_arg_rx(str!=0,"str",ICAL_STATUS_NONE) while(*str == ' '){ str++; } for (i=ICAL_STATUS_X-ICALPROPERTY_FIRST_ENUM; i != ICAL_STATUS_NONE-ICALPROPERTY_FIRST_ENUM; i++) { if ( strcasecmp(enum_map[i].str, str) == 0) { return (icalproperty_status)enum_map[i].prop_enum; } } return ICAL_STATUS_NONE; } libical-1.0/src/libical/icalderivedvalue.c.in0000664000076400007640000002561712132563132020213 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue.c CREATOR: eric 02 May 1999 $Id: icalderivedvalue.c.in,v 1.15 2007-04-30 13:57:48 artcancro Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.c Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalerror.h" #include "icalmemory.h" #include "icalparser.h" #include "icalenums.h" #include "icalvalueimpl.h" #include /* for malloc */ #include /* for snprintf */ #include /* For memset, others */ #include /* For offsetof() macro */ #include #include /* for mktime */ #include /* for atoi and atof */ #include /* for SHRT_MAX */ #ifdef _MSC_VER #define strcasecmp stricmp #endif struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind); /* This map associates each of the value types with its string representation */ struct icalvalue_kind_map { icalvalue_kind kind; char name[20]; }; int icalvalue_kind_is_valid(const icalvalue_kind kind) { int i = 0; do { if (value_map[i].kind == kind) return 1; } while (value_map[i++].kind != ICAL_NO_VALUE); return 0; } const char* icalvalue_kind_to_string(const icalvalue_kind kind) { int i; for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) { if (value_map[i].kind == kind) { return value_map[i].name; } } return 0; } icalvalue_kind icalvalue_string_to_kind(const char* str) { int i; for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) { if (strcasecmp(value_map[i].name,str) == 0) { return value_map[i].kind; } } return value_map[i].kind; } icalvalue* icalvalue_new_x (const char* v){ struct icalvalue_impl* impl; icalerror_check_arg_rz( (v!=0),"v"); impl = icalvalue_new_impl(ICAL_X_VALUE); icalvalue_set_x((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_x(icalvalue* impl, const char* v) { icalerror_check_arg_rv( (impl!=0),"value"); icalerror_check_arg_rv( (v!=0),"v"); if(impl->x_value!=0) {free((void*)impl->x_value);} impl->x_value = icalmemory_strdup(v); if (impl->x_value == 0){ errno = ENOMEM; } } const char* icalvalue_get_x(const icalvalue* value) { icalerror_check_arg_rz( (value!=0),"value"); icalerror_check_value_type(value, ICAL_X_VALUE); return value->x_value; } /* Recur is a special case, so it is not auto generated. */ icalvalue* icalvalue_new_recur (struct icalrecurrencetype v) { struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_RECUR_VALUE); icalvalue_set_recur((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_recur(icalvalue* impl, struct icalrecurrencetype v) { icalerror_check_arg_rv( (impl!=0),"value"); icalerror_check_value_type(value, ICAL_RECUR_VALUE); if (impl->data.v_recur != 0){ free(impl->data.v_recur); impl->data.v_recur = 0; } impl->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); if (impl->data.v_recur == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } else { memcpy(impl->data.v_recur, &v, sizeof(struct icalrecurrencetype)); } } struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value) { struct icalrecurrencetype rt; icalrecurrencetype_clear(&rt); icalerror_check_arg_rx( (value!=0),"value", rt); icalerror_check_value_type(value, ICAL_RECUR_VALUE); return *(value->data.v_recur); } icalvalue* icalvalue_new_trigger (struct icaltriggertype v) { struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TRIGGER_VALUE); icalvalue_set_trigger((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v) { icalerror_check_arg_rv( (value!=0),"value"); if(!icaltime_is_null_time(v.time)){ icalvalue_set_datetime(value,v.time); value->kind = ICAL_DATETIME_VALUE; } else { icalvalue_set_duration(value,v.duration); value->kind = ICAL_DURATION_VALUE; } } struct icaltriggertype icalvalue_get_trigger(const icalvalue* impl) { struct icaltriggertype tr; tr.duration = icaldurationtype_from_int(0); tr.time = icaltime_null_time(); icalerror_check_arg_rx( (impl!=0),"value", tr); if(impl) { if(impl->kind == ICAL_DATETIME_VALUE){ tr.duration = icaldurationtype_from_int(0); tr.time = impl->data.v_time; } else if(impl->kind == ICAL_DURATION_VALUE){ tr.time = icaltime_null_time(); tr.duration = impl->data.v_duration; } else { tr.duration = icaldurationtype_from_int(0); tr.time = icaltime_null_time(); icalerror_set_errno(ICAL_BADARG_ERROR); } } else { tr.duration = icaldurationtype_from_int(0); tr.time = icaltime_null_time(); icalerror_set_errno(ICAL_BADARG_ERROR); } return tr; } icalvalue* icalvalue_new_datetime (struct icaltimetype v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIME_VALUE); icalvalue_set_datetime((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_DATETIME_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_time = v; icalvalue_reset_kind(impl); } struct icaltimetype icalvalue_get_datetime (const icalvalue* value) { struct icaltimetype dt; dt = icaltime_null_time(); icalerror_check_arg_rx((value!=0),"value", dt); icalerror_check_value_type (value, ICAL_DATETIME_VALUE); return ((struct icalvalue_impl*)value)->data.v_time; } /* DATE-TIME-PERIOD is a special case, and is not auto generated */ icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v) { struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIMEPERIOD_VALUE); icalvalue_set_datetimeperiod(impl,v); return (icalvalue*)impl; } void icalvalue_set_datetimeperiod(icalvalue* impl, struct icaldatetimeperiodtype v) { icalerror_check_arg_rv( (impl!=0),"value"); icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); if(!icaltime_is_null_time(v.time)){ if(!icaltime_is_valid_time(v.time)){ icalerror_set_errno(ICAL_BADARG_ERROR); return; } impl->kind = ICAL_DATETIME_VALUE; icalvalue_set_datetime(impl,v.time); } else if (!icalperiodtype_is_null_period(v.period)) { if(!icalperiodtype_is_valid_period(v.period)){ icalerror_set_errno(ICAL_BADARG_ERROR); return; } impl->kind = ICAL_PERIOD_VALUE; icalvalue_set_period(impl,v.period); } else { icalerror_set_errno(ICAL_BADARG_ERROR); } } struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* impl) { struct icaldatetimeperiodtype dtp; dtp.period = icalperiodtype_null_period(); dtp.time = icaltime_null_time(); icalerror_check_arg_rx( (impl!=0),"value", dtp); icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); if(impl) { if( impl->kind == ICAL_DATETIME_VALUE || impl->kind == ICAL_DATE_VALUE ){ dtp.period = icalperiodtype_null_period(); dtp.time = impl->data.v_time; } else if(impl->kind == ICAL_PERIOD_VALUE) { dtp.period = impl->data.v_period; dtp.time = icaltime_null_time(); } else { dtp.period = icalperiodtype_null_period(); dtp.time = icaltime_null_time(); icalerror_set_errno(ICAL_BADARG_ERROR); } } else { dtp.period = icalperiodtype_null_period(); dtp.time = icaltime_null_time(); icalerror_set_errno(ICAL_BADARG_ERROR); } return dtp; } icalvalue* icalvalue_new_class (enum icalproperty_class v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_CLASS_VALUE); icalvalue_set_class((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_class(icalvalue* value, enum icalproperty_class v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_CLASS_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_enum = v; icalvalue_reset_kind(impl); } enum icalproperty_class icalvalue_get_class (const icalvalue* value) { icalproperty_class pr; pr = ICAL_CLASS_NONE; icalerror_check_arg_rx ((value!=NULL),"value", pr); icalerror_check_arg ((value!=0),"value"); icalerror_check_value_type (value, ICAL_CLASS_VALUE); return ((struct icalvalue_impl*)value)->data.v_enum; } icalvalue* icalvalue_new_geo (struct icalgeotype v){ struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_GEO_VALUE); icalvalue_set_geo((icalvalue*)impl,v); return (icalvalue*)impl; } void icalvalue_set_geo(icalvalue* value, struct icalgeotype v) { struct icalvalue_impl* impl; icalerror_check_arg_rv( (value!=0),"value"); icalerror_check_value_type(value, ICAL_GEO_VALUE); impl = (struct icalvalue_impl*)value; impl->data.v_geo = v; icalvalue_reset_kind(impl); } struct icalgeotype icalvalue_get_geo (const icalvalue* value) { struct icalgeotype gt; gt.lat = 255.0; gt.lon = 255.0; icalerror_check_arg_rx((value!=0),"value", gt); icalerror_check_value_type (value, ICAL_GEO_VALUE); return ((struct icalvalue_impl*)value)->data.v_geo; } icalvalue * icalvalue_new_attach (icalattach *attach) { struct icalvalue_impl *impl; icalerror_check_arg_rz ((attach != NULL), "attach"); impl = icalvalue_new_impl (ICAL_ATTACH_VALUE); if (!impl) { errno = ENOMEM; return NULL; } icalvalue_set_attach ((icalvalue *) impl, attach); return (icalvalue *) impl; } void icalvalue_set_attach (icalvalue *value, icalattach *attach) { struct icalvalue_impl *impl; icalerror_check_arg_rv ((value != NULL), "value"); icalerror_check_value_type (value, ICAL_ATTACH_VALUE); icalerror_check_arg_rv ((attach != NULL), "attach"); impl = (struct icalvalue_impl *) value; icalattach_ref (attach); if (impl->data.v_attach) icalattach_unref (impl->data.v_attach); impl->data.v_attach = attach; } icalattach * icalvalue_get_attach (const icalvalue *value) { icalerror_check_arg_rz ((value != NULL), "value"); icalerror_check_value_type (value, ICAL_ATTACH_VALUE); return value->data.v_attach; } /* The remaining interfaces are 'new', 'set' and 'get' for each of the value types */ /* Everything below this line is machine generated. Do not edit. */ libical-1.0/src/libical/icalduration.c0000664000076400007640000001645212132563132016751 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icaltime.c CREATOR: eric 02 June 2000 $Id: icalduration.c,v 1.21 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalduration.h" #include #include #include #include #include "icalerror.h" #include "icalmemory.h" #include "icalvalue.h" #if defined(_MSC_VER) #define snprintf _snprintf #endif /* From Seth Alves, */ struct icaldurationtype icaldurationtype_from_int(int t) { struct icaldurationtype dur; int used = 0; dur = icaldurationtype_null_duration(); if(t < 0){ dur.is_neg = 1; t = -t; } if (t % (60 * 60 * 24 * 7) == 0) { dur.weeks = t / (60 * 60 * 24 * 7); } else { used += dur.weeks * (60 * 60 * 24 * 7); dur.days = (t - used) / (60 * 60 * 24); used += dur.days * (60 * 60 * 24); dur.hours = (t - used) / (60 * 60); used += dur.hours * (60 * 60); dur.minutes = (t - used) / (60); used += dur.minutes * (60); dur.seconds = (t - used); } return dur; } struct icaldurationtype icaldurationtype_from_string(const char* str) { int i; int begin_flag = 0; int time_flag = 0; int date_flag = 0; int digits=-1; int scan_size = -1; size_t size = strlen(str); char p; struct icaldurationtype d; memset(&d, 0, sizeof(struct icaldurationtype)); for(i=0;i != size;i++){ p = str[i]; switch(p) { case '-': { if(i != 0 || begin_flag == 1) goto error; d.is_neg = 1; break; } case 'P': { if (i != 0 && i !=1 ) goto error; begin_flag = 1; break; } case 'T': { time_flag = 1; break; } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { /* HACK. Skip any more digits if the l;ast one read has not been assigned */ if(digits != -1){ break; } if (begin_flag == 0) goto error; /* Get all of the digits, not one at a time */ scan_size = sscanf(&str[i],"%d",&digits); if(scan_size == 0) goto error; break; } case 'H': { if (time_flag == 0||d.hours !=0||digits ==-1) goto error; d.hours = digits; digits = -1; break; } case 'M': { if (time_flag == 0||d.minutes != 0||digits ==-1) goto error; d.minutes = digits; digits = -1; break; } case 'S': { if (time_flag == 0||d.seconds!=0||digits ==-1) goto error; d.seconds = digits; digits = -1; break; } case 'W': { if (time_flag==1||date_flag==1||d.weeks!=0||digits ==-1) goto error; d.weeks = digits; digits = -1; break; } case 'D': { if (time_flag==1||d.days!=0||digits ==-1) goto error; date_flag = 1; d.days = digits; digits = -1; break; } default: { goto error; } } } return d; error: icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return icaldurationtype_bad_duration(); } #define TMP_BUF_SIZE 1024 static void append_duration_segment(char** buf, char** buf_ptr, size_t* buf_size, const char* sep, unsigned int value) { char temp[TMP_BUF_SIZE]; snprintf(temp,sizeof(temp),"%d",value); icalmemory_append_string(buf, buf_ptr, buf_size, temp); icalmemory_append_string(buf, buf_ptr, buf_size, sep); } char* icaldurationtype_as_ical_string(struct icaldurationtype d) { char *buf; buf = icaldurationtype_as_ical_string_r(d); icalmemory_add_tmp_buffer(buf); return buf; } char* icaldurationtype_as_ical_string_r(struct icaldurationtype d) { char *buf; size_t buf_size = 256; char* buf_ptr = 0; int seconds; buf = (char*)icalmemory_new_buffer(buf_size); buf_ptr = buf; seconds = icaldurationtype_as_int(d); if(seconds !=0){ if(d.is_neg == 1){ icalmemory_append_char(&buf, &buf_ptr, &buf_size, '-'); } icalmemory_append_char(&buf, &buf_ptr, &buf_size, 'P'); if (d.weeks != 0 ) { append_duration_segment(&buf, &buf_ptr, &buf_size, "W", d.weeks); } if (d.days != 0 ) { append_duration_segment(&buf, &buf_ptr, &buf_size, "D", d.days); } if (d.hours != 0 || d.minutes != 0 || d.seconds != 0) { icalmemory_append_string(&buf, &buf_ptr, &buf_size, "T"); if (d.hours != 0 ) { append_duration_segment(&buf, &buf_ptr, &buf_size, "H", d.hours); } if (d.minutes != 0 ) { append_duration_segment(&buf, &buf_ptr, &buf_size, "M", d.minutes); } if (d.seconds != 0 ) { append_duration_segment(&buf, &buf_ptr, &buf_size, "S", d.seconds); } } } else { icalmemory_append_string(&buf, &buf_ptr, &buf_size, "PT0S"); } return buf; } /* From Russel Steinthal */ int icaldurationtype_as_int(struct icaldurationtype dur) { return (int)( (dur.seconds + (60 * dur.minutes) + (60 * 60 * dur.hours) + (60 * 60 * 24 * dur.days) + (60 * 60 * 24 * 7 * dur.weeks)) * (dur.is_neg==1? -1 : 1) ) ; } struct icaldurationtype icaldurationtype_null_duration(void) { struct icaldurationtype d; memset(&d,0,sizeof(struct icaldurationtype)); return d; } int icaldurationtype_is_null_duration(struct icaldurationtype d) { if(icaldurationtype_as_int(d) == 0){ return 1; } else { return 0; } } /* in icalvalue_new_from_string_with_error, we should not call icaldurationtype_is_null_duration() to see if there is an error condition. Null duration is perfectly valid for an alarm. We cannot depend on the caller to check icalerrno either, following the philosophy of unix errno. we set the is_neg to -1 to indicate that this is a bad duration. */ struct icaldurationtype icaldurationtype_bad_duration() { struct icaldurationtype d; memset(&d,0,sizeof(struct icaldurationtype)); d.is_neg = -1; return d; } int icaldurationtype_is_bad_duration(struct icaldurationtype d) { return (d.is_neg == -1); } struct icaltimetype icaltime_add(struct icaltimetype t, struct icaldurationtype d) { if (!d.is_neg) { t.second += d.seconds; t.minute += d.minutes; t.hour += d.hours; t.day += d.days; t.day += d.weeks * 7; } else { t.second -= d.seconds; t.minute -= d.minutes; t.hour -= d.hours; t.day -= d.days; t.day -= d.weeks * 7; } t = icaltime_normalize(t); return t; } struct icaldurationtype icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2) { time_t t1t = icaltime_as_timet(t1); time_t t2t = icaltime_as_timet(t2); return icaldurationtype_from_int((int)(t1t-t2t)); } libical-1.0/src/libical/pvl.h0000664000076400007640000000564312132563132015101 0ustar allenallen/*====================================================================== FILE: pvl.h CREATOR: eric November, 1995 (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef __PVL_H__ #define __PVL_H__ typedef struct pvl_list_t* pvl_list; typedef struct pvl_elem_t* pvl_elem; /** * This type is private. Always use pvl_elem instead. The struct would * not even appear in this header except to make code in the USE_MACROS * blocks work */ typedef struct pvl_elem_t { int MAGIC; /**< Magic Identifier */ void *d; /**< Pointer to data user is storing */ struct pvl_elem_t *next; /**< Next element */ struct pvl_elem_t *prior; /**< Prior element */ } pvl_elem_t; /** * This global is incremented for each call to pvl_new_element(); it gives each * list a unique identifer */ extern int pvl_elem_count; extern int pvl_list_count; /* Create new lists or elements */ pvl_elem pvl_new_element(void* d, pvl_elem next,pvl_elem prior); pvl_list pvl_newlist(void); void pvl_free(pvl_list); /* Add, remove, or get the head of the list */ void pvl_unshift(pvl_list l,void *d); void* pvl_shift(pvl_list l); pvl_elem pvl_head(pvl_list); /* Add, remove or get the tail of the list */ void pvl_push(pvl_list l,void *d); void* pvl_pop(pvl_list l); pvl_elem pvl_tail(pvl_list); /* Insert elements in random places */ typedef int (*pvl_comparef)(void* a, void* b); /* a, b are of the data type*/ void pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d); void pvl_insert_after(pvl_list l,pvl_elem e,void *d); void pvl_insert_before(pvl_list l,pvl_elem e,void *d); /* Remove an element, or clear the entire list */ void* pvl_remove(pvl_list,pvl_elem); /* Remove element, return data */ void pvl_clear(pvl_list); /* Remove all elements, de-allocate all data */ int pvl_count(pvl_list); /* Navagate the list */ pvl_elem pvl_next(pvl_elem e); pvl_elem pvl_prior(pvl_elem e); /* get the data in the list */ #ifndef PVL_USE_MACROS void* pvl_data(pvl_elem); #else #define pvl_data(x) x==0 ? 0 : ((struct pvl_elem_t *)x)->d; #endif /* Find an element for which a function returns true */ typedef int (*pvl_findf)(void* a, void* b); /*a is list elem, b is other data*/ pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v); pvl_elem pvl_find_next(pvl_list l,pvl_findf f,void* v); /** * Pass each element in the list to a function * a is list elem, b is other data */ typedef void (*pvl_applyf)(void* a, void* b); void pvl_apply(pvl_list l,pvl_applyf f, void *v); #endif /* __PVL_H__ */ libical-1.0/src/libical/icalrestriction.h0000664000076400007640000000332712132563132017473 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalrestriction.h CREATOR: eric 24 April 1999 $Id: icalrestriction.h,v 1.3 2008-01-15 23:17:42 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalrestriction.h Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ #include "icalproperty.h" #include "icalcomponent.h" #ifndef ICALRESTRICTION_H #define ICALRESTRICTION_H /* These must stay in this order for icalrestriction_compare to work */ typedef enum icalrestriction_kind { ICAL_RESTRICTION_NONE=0, /* 0 */ ICAL_RESTRICTION_ZERO, /* 1 */ ICAL_RESTRICTION_ONE, /* 2 */ ICAL_RESTRICTION_ZEROPLUS, /* 3 */ ICAL_RESTRICTION_ONEPLUS, /* 4 */ ICAL_RESTRICTION_ZEROORONE, /* 5 */ ICAL_RESTRICTION_ONEEXCLUSIVE, /* 6 */ ICAL_RESTRICTION_ONEMUTUAL, /* 7 */ ICAL_RESTRICTION_UNKNOWN /* 8 */ } icalrestriction_kind; int icalrestriction_compare(icalrestriction_kind restr, int count); int icalrestriction_is_parameter_allowed(icalproperty_kind property, icalparameter_kind parameter); int icalrestriction_check(icalcomponent* comp); #endif /* !ICALRESTRICTION_H */ libical-1.0/src/libical/icalvalue.h0000664000076400007640000000621512132563132016241 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue.h CREATOR: eric 20 March 1999 $Id: icalvalue.h,v 1.10 2008-01-15 23:17:43 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.h ======================================================================*/ #ifndef ICALVALUE_H #define ICALVALUE_H #include #include "icalenums.h" #include "icaltypes.h" #include "icalrecur.h" #include "icalduration.h" #include "icalperiod.h" #include "icalderivedproperty.h" /* For icalproperty_method, etc. */ #include "icalderivedparameter.h" #include "icalderivedvalue.h" /* Defined in icalderivedvalue.h */ /*typedef struct icalvalue_impl icalvalue;*/ icalvalue* icalvalue_new(icalvalue_kind kind); icalvalue* icalvalue_new_clone(const icalvalue* value); icalvalue* icalvalue_new_from_string(icalvalue_kind kind, const char* str); void icalvalue_free(icalvalue* value); int icalvalue_is_valid(const icalvalue* value); const char* icalvalue_as_ical_string(const icalvalue* value); char* icalvalue_as_ical_string_r(const icalvalue* value); icalvalue_kind icalvalue_isa(const icalvalue* value); int icalvalue_isa_value(void*); icalparameter_xliccomparetype icalvalue_compare(const icalvalue* a, const icalvalue *b); /* Special, non autogenerated value accessors */ /* Defined in icalderivedvalue.h */ /* icalvalue* icalvalue_new_recur (struct icalrecurrencetype v); */ /* void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); */ /* struct icalrecurrencetype icalvalue_get_recur(const icalvalue* value); */ /* icalvalue* icalvalue_new_trigger (struct icaltriggertype v); */ /* void icalvalue_set_trigger(icalvalue* value, struct icaltriggertype v); */ /* struct icaltriggertype icalvalue_get_trigger(const icalvalue* value); */ /* icalvalue* icalvalue_new_datetimeperiod (struct icaldatetimeperiodtype v); */ /* void icalvalue_set_datetimeperiod(icalvalue* value, */ /* struct icaldatetimeperiodtype v); */ /* struct icaldatetimeperiodtype icalvalue_get_datetimeperiod(const icalvalue* value); */ /* Convert enumerations */ icalvalue_kind icalvalue_string_to_kind(const char* str); const char* icalvalue_kind_to_string(const icalvalue_kind kind); /** Check validity of a specific icalvalue_kind **/ int icalvalue_kind_is_valid(const icalvalue_kind kind); /** Encode a character string in ical format, esacpe certain characters, etc. */ int icalvalue_encode_ical_string(const char *szText, char *szEncText, int MaxBufferLen); /** Extract the original character string encoded by the above function **/ int icalvalue_decode_ical_string(const char *szText, char *szDecText, int nMaxBufferLen); #endif /*ICALVALUE_H*/ libical-1.0/src/libical/icalerror.h.in0000664000076400007640000001252412132563132016663 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalerror.h CREATOR: eric 09 May 1999 $Id: icalerror.h,v 1.17 2008-01-15 23:17:40 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalerror.h ======================================================================*/ #ifndef ICALERROR_H #define ICALERROR_H #include #include /* For icalerror_warn() */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #define ICAL_SETERROR_ISFUNC /** This routine is called before any error is triggered. It is called by icalerror_set_errno, so it does not appear in all of the macros below */ void icalerror_stop_here(void); void icalerror_crash_here(void); typedef enum icalerrorenum { ICAL_NO_ERROR, /* icalerrno may not be initialized - put it first so and pray that the compiler initialize things to zero */ ICAL_BADARG_ERROR, ICAL_NEWFAILED_ERROR, ICAL_ALLOCATION_ERROR, ICAL_MALFORMEDDATA_ERROR, ICAL_PARSE_ERROR, ICAL_INTERNAL_ERROR, /* Like assert --internal consist. prob */ ICAL_FILE_ERROR, ICAL_USAGE_ERROR, ICAL_UNIMPLEMENTED_ERROR, ICAL_UNKNOWN_ERROR /* Used for problems in input to icalerror_strerror()*/ } icalerrorenum; icalerrorenum * icalerrno_return(void); #define icalerrno (*(icalerrno_return())) /*#cmakedefine LIBICAL_STATIC 1*/ /** If true, libicl aborts after a call to icalerror_set_error * * @warning NOT THREAD SAFE -- recommended that you do not change * this in a multithreaded program. */ #ifdef _MSC_VER #if defined(LIBICAL_STATIC) #define LIBICAL_EXPORT extern #elif defined(BUILD_LIBICALDLL) #define LIBICAL_EXPORT __declspec(dllexport) #else #define LIBICAL_EXPORT __declspec(dllimport) #endif #else #define LIBICAL_EXPORT extern #endif LIBICAL_EXPORT int icalerror_errors_are_fatal; /* Warning messages */ #ifdef __GNUC__ca #define icalerror_warn(message) {fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);} #else /* __GNU_C__ */ #define icalerror_warn(message) {fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);} #endif /* __GNU_C__ */ void icalerror_clear_errno(void); void _icalerror_set_errno(icalerrorenum); /* Make an individual error fatal or non-fatal. */ typedef enum icalerrorstate { ICAL_ERROR_FATAL, /* Not fata */ ICAL_ERROR_NONFATAL, /* Fatal */ ICAL_ERROR_DEFAULT, /* Use the value of icalerror_errors_are_fatal*/ ICAL_ERROR_UNKNOWN /* Asked state for an unknown error type */ } icalerrorstate ; const char* icalerror_strerror(icalerrorenum e); const char* icalerror_perror(void); void ical_bt(void); void icalerror_set_error_state( icalerrorenum error, icalerrorstate); icalerrorstate icalerror_get_error_state( icalerrorenum error); #ifndef ICAL_SETERROR_ISFUNC #define icalerror_set_errno(x) \ icalerrno = x; \ if(icalerror_get_error_state(x)==ICAL_ERROR_FATAL || \ (icalerror_get_error_state(x)==ICAL_ERROR_DEFAULT && \ icalerror_errors_are_fatal == 1 )){ \ icalerror_warn(icalerror_strerror(x)); \ ical_bt(); \ assert(0); \ } } #else void icalerror_set_errno(icalerrorenum x); #endif #if !defined(ICAL_ERRORS_ARE_FATAL) #define ICAL_ERRORS_ARE_FATAL 0 #endif #if ICAL_ERRORS_ARE_FATAL == 1 #undef NDEBUG #endif #define icalerror_check_value_type(value,type); #define icalerror_check_property_type(value,type); #define icalerror_check_parameter_type(value,type); #define icalerror_check_component_type(value,type); /* Assert with a message */ #if ICAL_ERRORS_ARE_FATAL == 1 #ifdef __GNUC__ #define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);icalerror_stop_here(); abort();} #else /*__GNUC__*/ #define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);icalerror_stop_here(); abort();} #endif /*__GNUC__*/ #else /* ICAL_ERRORS_ARE_FATAL */ #define icalerror_assert(test,message) #endif /* ICAL_ERRORS_ARE_FATAL */ /* Check & abort if check fails */ #define icalerror_check_arg(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); } /* Check & return void if check fails*/ #define icalerror_check_arg_rv(test,arg) if(!(test)) {icalerror_set_errno(ICAL_BADARG_ERROR); return; } /* Check & return 0 if check fails*/ #define icalerror_check_arg_rz(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return 0;} /* Check & return an error if check fails*/ #define icalerror_check_arg_re(test,arg,error) if(!(test)) { icalerror_stop_here(); assert(0); return error;} /* Check & return something*/ #define icalerror_check_arg_rx(test,arg,x) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return x;} /* String interfaces to set an error to NONFATAL and restore it to its original value */ icalerrorstate icalerror_supress(const char* error); void icalerror_restore(const char* error, icalerrorstate es); #endif /* !ICALERROR_H */ libical-1.0/src/libical/icalattach.h0000664000076400007640000000347312132563132016374 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalattach.h CREATOR: acampi 28 May 02 (C) COPYRIGHT 2002, Andrea Campi This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalattach.h ======================================================================*/ #ifndef ICALATTACH_H #define ICALATTACH_H typedef struct icalattach_impl icalattach; typedef void (* icalattach_free_fn_t) (unsigned char *data, void *user_data); icalattach *icalattach_new_from_url (const char *url); icalattach *icalattach_new_from_data (const char *data, icalattach_free_fn_t free_fn, void *free_fn_data); void icalattach_ref (icalattach *attach); void icalattach_unref (icalattach *attach); int icalattach_get_is_url (icalattach *attach); const char *icalattach_get_url (icalattach *attach); unsigned char *icalattach_get_data (icalattach *attach); struct icalattachtype* icalattachtype_new(void); void icalattachtype_add_reference(struct icalattachtype* v); void icalattachtype_free(struct icalattachtype* v); void icalattachtype_set_url(struct icalattachtype* v, char* url); char* icalattachtype_get_url(struct icalattachtype* v); void icalattachtype_set_base64(struct icalattachtype* v, char* base64, int owns); char* icalattachtype_get_base64(struct icalattachtype* v); void icalattachtype_set_binary(struct icalattachtype* v, char* binary, int owns); void* icalattachtype_get_binary(struct icalattachtype* v); #endif /* !ICALATTACH_H */ libical-1.0/src/libical/caldate.c0000664000076400007640000001320412132563132015660 0ustar allenallen/* * Copyright (c) 1986-2000, Hiram Clawson * All rights reserved. * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * Redistributions in binary form must reproduce the * above copyright notice, this list of conditions and * the following disclaimer in the documentation and/or * other materials provided with the distribution. * * Neither name of The Museum of Hiram nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #include "astime.h" /* time structures */ /** * caldat computes the day of the week, the day of the year * the gregorian (or julian) calendar date and the universal * time from the julian decimal date. * for astronomical purposes, The Gregorian calendar reform occurred * on 15 Oct. 1582. This is 05 Oct 1582 by the julian calendar. * Input: a ut_instant structure pointer, where the j_date element * has been set. ( = 0 for 01 Jan 4713 B.C. 12 HR UT ) * * output: will set all the other elements of the structure. * As a convienence, the function will also return the year. * * Reference: Astronomial formulae for calculators, meeus, p 23 * from fortran program by F. Espenak - April 1982 Page 277, * 50 Year canon of solar eclipses: 1986-2035 * */ long caldat( date ) struct ut_instant * date; { double frac; long jd; long ka; long kb; long kc; long kd; long ke; long ialp; jd = (long) (date->j_date + 0.5); /* integer julian date */ frac = date->j_date + 0.5 - (double) jd + 1.0e-10; /* day fraction */ ka = (long) jd; if ( jd >= 2299161L ) { ialp = (long) (((double) jd) - 1867216.25 ) / 36524.25; ka = jd + 1L + ialp - ( ialp >> 2 ); } kb = ka + 1524L; kc = (long) ((double) kb - 122.1 ) / 365.25; kd = (long) (double) kc * 365.25; ke = (long) (double) ( kb - kd ) / 30.6001; date->day = kb - kd - ((long) ( (double) ke * 30.6001 )); if ( ke > 13L ) date->month = ke - 13L; else date->month = ke - 1L; if ( (date->month == 2) && (date->day > 28) ) date->day = 29; if ( (date->month == 2) && (date->day == 29) && (ke == 3L) ) date->year = kc - 4716L; else if ( date->month > 2 ) date->year = kc - 4716L; else date->year = kc - 4715L; date->i_hour = date->d_hour = frac * 24.0; /* hour */ date->i_minute = date->d_minute = (long) ( date->d_hour - (double) date->i_hour ) * 60.0; /* minute */ date->i_second = date->d_second = (long) ( date->d_minute - (double) date->i_minute ) * 60.0;/* second */ date->weekday = (jd + 1L) % 7L; /* day of week */ if ( date->year == ((date->year >> 2) << 2) ) date->day_of_year = ( ( 275 * date->month ) / 9) - ((date->month + 9) / 12) + date->day - 30; else date->day_of_year = ( ( 275 * date->month ) / 9) - (((date->month + 9) / 12) << 1) + date->day - 30; return( date->year ); } /** * juldat computes the julian decimal date (j_date) from * the gregorian (or Julian) calendar date. * for astronomical purposes, The Gregorian calendar reform occurred * on 15 Oct. 1582. This is 05 Oct 1582 by the julian calendar. * Input: a ut_instant structure pointer where Day, Month, Year and * i_hour, i_minute, d_second have been set for the date * in question. * * Output: the j_date and weekday elements of the structure will be set. * Also, the return value of the function will be the j_date too. * * Reference: Astronomial formulae for calculators, meeus, p 23 * from fortran program by F. Espenak - April 1982 Page 276, * 50 Year canon of solar eclipses: 1986-2035 */ double juldat( date ) struct ut_instant * date; { double frac, gyr; long iy0, im0; long ia, ib; long jd; /* decimal day fraction */ frac = (( double)date->i_hour/ 24.0) + ((double) date->i_minute / 1440.0) + (date->d_second / 86400.0); /* convert date to format YYYY.MMDDdd */ gyr = (double) date->year + (0.01 * (double) date->month) + (0.0001 * (double) date->day) + (0.0001 * frac) + 1.0e-9; /* conversion factors */ if ( date->month <= 2 ) { iy0 = date->year - 1L; im0 = date->month + 12; } else { iy0 = date->year; im0 = date->month; } ia = iy0 / 100L; ib = 2L - ia + (ia >> 2); /* calculate julian date */ if ( date->year < 0L ) jd = (long) ((365.25 * (double) iy0) - 0.75) + (long) (30.6001 * (im0 + 1L) ) + (long) date->day + 1720994L; else jd = (long) (365.25 * (double) iy0) + (long) (30.6001 * (double) (im0 + 1L)) + (long) date->day + 1720994L; if ( gyr >= 1582.1015 ) /* on or after 15 October 1582 */ jd += ib; date->j_date = (double) jd + frac + 0.5; jd = (long) (date->j_date + 0.5); date->weekday = (jd + 1L) % 7L; return( date->j_date ); } /* end of double juldat( date ) */ libical-1.0/src/libical/icalerror.c0000664000076400007640000001477612132563132016264 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalerror.c CREATOR: eric 16 May 1999 $Id: icalerror.c,v 1.22 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalerror.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_BACKTRACE #include #endif #include /* for malloc() */ #include /* for strcmp */ #include "icalerror.h" #ifdef HAVE_PTHREAD #include static pthread_key_t icalerrno_key; static pthread_once_t icalerrno_key_once = PTHREAD_ONCE_INIT; static void icalerrno_destroy(void* buf) { free(buf); pthread_setspecific(icalerrno_key, NULL); } static void icalerrno_key_alloc(void) { pthread_key_create(&icalerrno_key, icalerrno_destroy); } icalerrorenum *icalerrno_return(void) { icalerrorenum *_errno; pthread_once(&icalerrno_key_once, icalerrno_key_alloc); _errno = (icalerrorenum*) pthread_getspecific(icalerrno_key); if (!_errno) { _errno = malloc(sizeof(icalerrorenum)); *_errno = ICAL_NO_ERROR; pthread_setspecific(icalerrno_key, _errno); } return _errno; } #else static icalerrorenum icalerrno_storage = ICAL_NO_ERROR; icalerrorenum *icalerrno_return(void) { return &icalerrno_storage; } #endif static int foo; void icalerror_stop_here(void) { foo++; /* Keep optimizers from removing routine */ } void icalerror_crash_here(void) { int *p=0; *p = 1; assert( *p); } #ifdef ICAL_SETERROR_ISFUNC void icalerror_set_errno(icalerrorenum x) { icalerrno = x; if(icalerror_get_error_state(x)==ICAL_ERROR_FATAL || (icalerror_get_error_state(x)==ICAL_ERROR_DEFAULT && icalerror_errors_are_fatal == 1 )){ icalerror_warn(icalerror_strerror(x)); ical_bt(); assert(0); } } #endif void icalerror_clear_errno() { icalerrno = ICAL_NO_ERROR; } #if ICAL_ERRORS_ARE_FATAL == 1 int icalerror_errors_are_fatal = 1; #else int icalerror_errors_are_fatal = 0; #endif struct icalerror_state { icalerrorenum error; icalerrorstate state; }; static struct icalerror_state error_state_map[] = { { ICAL_BADARG_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_NEWFAILED_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_ALLOCATION_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_PARSE_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_INTERNAL_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_FILE_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_USAGE_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_UNIMPLEMENTED_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_UNKNOWN_ERROR,ICAL_ERROR_DEFAULT}, { ICAL_NO_ERROR,ICAL_ERROR_DEFAULT} }; struct icalerror_string_map { const char* str; icalerrorenum error; char name[160]; }; static const struct icalerror_string_map string_map[] = { {"BADARG",ICAL_BADARG_ERROR,"BADARG: Bad argument to function"}, { "NEWFAILED",ICAL_NEWFAILED_ERROR,"NEWFAILED: Failed to create a new object via a *_new() routine"}, { "ALLOCATION",ICAL_ALLOCATION_ERROR,"ALLOCATION: Failed to allocate new memory"}, {"MALFORMEDDATA",ICAL_MALFORMEDDATA_ERROR,"MALFORMEDDATA: An input string was not correctly formed or a component has missing or extra properties"}, { "PARSE",ICAL_PARSE_ERROR,"PARSE: Failed to parse a part of an iCal component"}, {"INTERNAL",ICAL_INTERNAL_ERROR,"INTERNAL: Random internal error. This indicates an error in the library code, not an error in use"}, { "FILE",ICAL_FILE_ERROR,"FILE: An operation on a file failed. Check errno for more detail."}, { "USAGE",ICAL_USAGE_ERROR,"USAGE: Failed to propertyl sequence calls to a set of interfaces"}, { "UNIMPLEMENTED",ICAL_UNIMPLEMENTED_ERROR,"UNIMPLEMENTED: This feature has not been implemented"}, { "NO",ICAL_NO_ERROR,"NO: No error"}, {"UNKNOWN",ICAL_UNKNOWN_ERROR,"UNKNOWN: Unknown error type -- icalerror_strerror() was probably given bad input"} }; icalerrorenum icalerror_error_from_string(const char* str){ int i; for( i = 0; string_map[i].error != ICAL_UNKNOWN_ERROR; i++) if (strcmp(string_map[i].str,str) == 0) break; return string_map[i].error; } icalerrorstate icalerror_supress(const char* error){ icalerrorenum e = icalerror_error_from_string(error); icalerrorstate es; if (e == ICAL_NO_ERROR){ return ICAL_ERROR_UNKNOWN; } es = icalerror_get_error_state(e); icalerror_set_error_state(e,ICAL_ERROR_NONFATAL); return es; } const char* icalerror_perror(void) { return icalerror_strerror(icalerrno); } void icalerror_restore(const char* error, icalerrorstate es){ icalerrorenum e = icalerror_error_from_string(error); if (e != ICAL_NO_ERROR){ icalerror_set_error_state(e,es); } } void icalerror_set_error_state( icalerrorenum error, icalerrorstate state) { int i; for(i = 0; error_state_map[i].error!= ICAL_NO_ERROR;i++){ if(error_state_map[i].error == error){ error_state_map[i].state = state; } } } icalerrorstate icalerror_get_error_state( icalerrorenum error) { int i; for(i = 0; error_state_map[i].error!= ICAL_NO_ERROR;i++){ if(error_state_map[i].error == error){ return error_state_map[i].state; } } return ICAL_ERROR_UNKNOWN; } const char* icalerror_strerror(icalerrorenum e) { int i; for (i=0; string_map[i].error != ICAL_UNKNOWN_ERROR; i++) { if (string_map[i].error == e) { return string_map[i].name; } } return string_map[i].name; /* Return string for ICAL_UNKNOWN_ERROR*/ } void ical_bt(void) { #ifdef HAVE_BACKTRACE void *stack_frames[50]; size_t size, i; char **strings; size = backtrace(stack_frames, sizeof(stack_frames) / sizeof(void*)); strings = backtrace_symbols(stack_frames, size); for (i = 0; i < size; i++) { if (strings != NULL) fprintf(stderr, "%s\n", strings[i]); else fprintf(stderr, "%p\n", stack_frames[i]); } free(strings); #endif } libical-1.0/src/libical/icaltimezoneimpl.h0000664000076400007640000000571112132563130017637 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icaltimezoneimpl.h CREATOR: glenn 07 March 2010 $Id: icalparameterimpl.h,v 1.4 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Contributions from: ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #ifndef ICALTIMEZONE_IMPL #define ICALTIMEZONE_IMPL #include "icaltimezone.h" #include "icalcomponent.h" #include "icalarray.h" struct _icaltimezone { char *tzid; /**< The unique ID of this timezone, e.g. "/citadel.org/Olson_20010601_1/Africa/Banjul". This should only be used to identify a VTIMEZONE. It is not meant to be displayed to the user in any form. */ char *location; /**< The location for the timezone, e.g. "Africa/Accra" for the Olson database. We look for this in the "LOCATION" or "X-LIC-LOCATION" properties of the VTIMEZONE component. It isn't a standard property yet. This will be NULL if no location is found in the VTIMEZONE. */ char *tznames; /**< This will be set to a combination of the TZNAME properties from the last STANDARD and DAYLIGHT components in the VTIMEZONE, e.g. "EST/EDT". If they both use the same TZNAME, or only one type of component is found, then only one TZNAME will appear, e.g. "AZOT". If no TZNAME is found this will be NULL. */ double latitude; double longitude; /**< The coordinates of the city, in degrees. */ icalcomponent *component; /**< The toplevel VTIMEZONE component loaded from the .ics file for this timezone. If we need to regenerate the changes data we need this. */ icaltimezone *builtin_timezone; /**< If this is not NULL it points to the builtin icaltimezone that the above TZID refers to. This icaltimezone should be used instead when accessing the timezone changes data, so that the expanded timezone changes data is shared between calendar components. */ int end_year; /**< This is the last year for which we have expanded the data to. If we need to calculate a date past this we need to expand the timezone component data from scratch. */ icalarray *changes; /**< A dynamically-allocated array of time zone changes, sorted by the time of the change in local time. So we can do fast binary-searches to convert from local time to UTC. */ }; #endif /*ICALTIMEZONE_IMPL*/ libical-1.0/src/libical/icalvalueimpl.h0000664000076400007640000000447312132563132017127 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue.c CREATOR: eric 02 May 1999 $Id: icalvalueimpl.h,v 1.7 2008-01-15 23:17:43 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvalue.c Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifndef ICALVALUEIMPL_H #define ICALVALUEIMPL_H #include "icalenums.h" #include "icalproperty.h" #include "icalderivedvalue.h" struct icalvalue_impl { icalvalue_kind kind; /*this is the kind that is visible from the outside*/ char id[5]; int size; icalproperty* parent; char* x_value; union data { icalattach *v_attach; /* void *v_binary; */ /* use v_attach */ const char *v_string; /*char *v_text;*/ /*char *v_caladdress;*/ /*char *v_uri;*/ float v_float; int v_int; /*int v_boolean;*/ /*int v_integer;*/ struct icaldurationtype v_duration; /*int v_utcoffset;*/ struct icalperiodtype v_period; /*struct icalperiodtype v_datetimeperiod;*/ struct icalgeotype v_geo; /*time_t v_time;*/ struct icaltimetype v_time; /*struct icaltimetype v_date;*/ /*struct icaltimetype v_datetime;*/ /*struct icaltimetype v_datetimedate;*/ struct icalreqstattype v_requeststatus; /* struct icalrecurrencetype was once included directly ( not referenced ) in this union, but it contributes 2000 bytes to every value, so now it is a reference*/ struct icalrecurrencetype *v_recur; struct icaltriggertype v_trigger; int v_enum; /* v_enum takes care of several enumerated types including: icalproperty_method v_method; icalproperty_status v_status; icalproperty_action v_action; icalproperty_class v_class; icalproperty_transp v_transp; */ } data; }; #endif libical-1.0/src/libical/CMakeLists.txt0000664000076400007640000002133612132563132016664 0ustar allenallenconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/icalversion.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/icalversion.h @ONLY) include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/libical ${CMAKE_BINARY_DIR}/src/libical ) if(WIN32) if(MSVC) add_definitions(-DBUILD_LIBICALDLL) endif(MSVC) endif(WIN32) configure_file(icalerror.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/icalerror.h) set(PACKAGE_DATA_DIR "\\\"${CMAKE_INSTALL_PREFIX}/share/libical\\\"") add_definitions(-DPACKAGE_DATA_DIR="${PACKAGE_DATA_DIR}") set(ICALSCRIPTS ${CMAKE_SOURCE_DIR}/scripts/) set(PROPERTYDEPS ${ICALSCRIPTS}/mkderivedproperties.pl ${CMAKE_SOURCE_DIR}/design-data/properties.csv ${CMAKE_SOURCE_DIR}/design-data/value-types.csv ${CMAKE_SOURCE_DIR}/src/libical/icalderivedproperty.h.in ${CMAKE_SOURCE_DIR}/src/libical/icalderivedproperty.c.in ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.h COMMAND ${PERL_EXECUTABLE} -I ${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedproperties.pl -i ${CMAKE_SOURCE_DIR}/src/libical/icalderivedproperty.h.in -h ${CMAKE_SOURCE_DIR}/design-data/properties.csv ${CMAKE_SOURCE_DIR}/design-data/value-types.csv > ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.h DEPENDS ${PROPERTYDEPS} ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.c COMMAND ${PERL_EXECUTABLE} -I${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedproperties.pl -i ${CMAKE_SOURCE_DIR}/src/libical/icalderivedproperty.c.in -c ${CMAKE_SOURCE_DIR}/design-data/properties.csv ${CMAKE_SOURCE_DIR}/design-data/value-types.csv > ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.c DEPENDS ${PROPERTYDEPS} ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.h ) set(PARAMETERDEPS ${ICALSCRIPTS}/mkderivedparameters.pl ${CMAKE_SOURCE_DIR}/design-data/parameters.csv ${CMAKE_SOURCE_DIR}/src/libical/icalderivedparameter.c.in ${CMAKE_SOURCE_DIR}/src/libical/icalderivedparameter.h.in ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.h COMMAND ${PERL_EXECUTABLE} -I ${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedparameters.pl -i ${CMAKE_SOURCE_DIR}/src/libical/icalderivedparameter.h.in -h ${CMAKE_SOURCE_DIR}/design-data/parameters.csv > ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.h DEPENDS ${PARAMETERDEPS} ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.c COMMAND ${PERL_EXECUTABLE} -I ${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedparameters.pl -i ${CMAKE_SOURCE_DIR}/src/libical/icalderivedparameter.c.in -c ${CMAKE_SOURCE_DIR}/design-data/parameters.csv > ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.c DEPENDS ${PARAMETERDEPS} ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.h ) set(RESTRICTIONDEPS ${ICALSCRIPTS}/mkrestrictiontable.pl ${CMAKE_SOURCE_DIR}/design-data/restrictions.csv ${CMAKE_SOURCE_DIR}/src/libical/icalrestriction.c.in ) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/libical/) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libical/icalrestriction.c COMMAND ${PERL_EXECUTABLE} -I ${ICALSCRIPTS} ${ICALSCRIPTS}/mkrestrictiontable.pl -i ${CMAKE_SOURCE_DIR}/src/libical/icalrestriction.c.in ${CMAKE_SOURCE_DIR}/design-data/restrictions.csv > ${CMAKE_BINARY_DIR}/src/libical/icalrestriction.c DEPENDS ${RESTRICTIONDEPS} ) set(VALUEDEPS ${ICALSCRIPTS}mkderivedvalues.pl ${CMAKE_SOURCE_DIR}/design-data/value-types.csv ${CMAKE_SOURCE_DIR}/src/libical/icalderivedvalue.c.in ${CMAKE_SOURCE_DIR}/src/libical/icalderivedvalue.h.in ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.h COMMAND ${PERL_EXECUTABLE} -I${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedvalues.pl -i ${CMAKE_SOURCE_DIR}/src/libical/icalderivedvalue.h.in -h ${CMAKE_SOURCE_DIR}/design-data/value-types.csv > ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.h DEPENDS ${VALUEDEPS} ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.c COMMAND ${PERL_EXECUTABLE} -I${ICALSCRIPTS} ${ICALSCRIPTS}/mkderivedvalues.pl -i ${CMAKE_SOURCE_DIR}/src/libical/icalderivedvalue.c.in -c ${CMAKE_SOURCE_DIR}/design-data/value-types.csv > ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.c DEPENDS ${VALUEDEPS} ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.h ) if(WIN32) set(TOPS "\"${CMAKE_SOURCE_DIR}\"") set(TOPB "\"${CMAKE_BINARY_DIR}\"") else(WIN32) set(TOPS "${CMAKE_SOURCE_DIR}") set(TOPB "${CMAKE_BINARY_DIR}") endif(WIN32) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/src/libical/ical.h COMMAND ${CMAKE_COMMAND} -DTOPS:FILEPATH=${TOPS} -DTOPB:FILEPATH=${TOPB} -DICAL_FILE_H_FILE:FILEPATH=${CMAKE_BINARY_DIR}/src/libical/ical.h -P ${CMAKE_CURRENT_SOURCE_DIR}/ical_file.cmake DEPENDS ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.h ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.h ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.h ) add_custom_target(ical-header DEPENDS ${CMAKE_BINARY_DIR}/src/libical/ical.h ) macro(_list_prefix _outvar _listvar _prefix) set(${_outvar}) foreach(_item IN LISTS ${_listvar}) list(APPEND ${_outvar} ${_prefix}${_item}) endforeach() endmacro(_list_prefix) # GObject Introspection if(HAVE_INTROSPECTION) include(GObjectIntrospectionMacros) set(INTROSPECTION_GIRS) #set(INTROSPECTION_SCANNER_ARGS "--add-include-path=${CMAKE_CURRENT_SOURCE_DIR}") #set(INTROSPECTION_COMPILER_ARGS "--includedir=${CMAKE_CURRENT_SOURCE_DIR}") set(libical_0_48_gir "libical") set(libical_0_48_gir_VERSION "0.48") set(INTROSPECTION_SCANNER_ARGS ${CMAKE_BINARY_DIR}/src/libical/ical.h) set(libical_0_48_gir_LIBRARY "ical") set(libical_0_48_gir_INCLUDES GObject-2.0) get_directory_property(_tmp_includes ical_LIB_SRCS) _list_prefix(_includes _tmp_includes "-L") set(libical_0_48_gir_CFLAGS ${_includes}) set(libical_0_48_gir_LIBS ical) list(APPEND INTROSPECTION_GIRS libical-0.48.gir) gir_add_introspections(INTROSPECTION_GIRS) endif() ########### next target ############### set(BUILT_COMBINEDHEADERS ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.h ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.h ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.h ) set(BUILT_SOURCES ${BUILT_COMBINEDHEADERS} icalderivedparameter.c icalderivedproperty.c icalrestriction.c icalderivedvalue.c ) set(ical_LIB_SRCS ${BUILT_SOURCES} icalarray.c icalarray.h icalattach.h icalattachimpl.h icalattach.c icalcomponent.c icalcomponent.h icalenums.c icalenums.h icalerror.c icalmemory.c icalmemory.h icalmime.c icalmime.h icalparameter.c icalparameter.h icalparameterimpl.h icalparser.c icalparser.h icalproperty.c icalproperty.h icalrecur.c icalrecur.h icalrestriction.h icaltime.c icaltime.h icaltz-util.c icaltz-util.h icaltimezone.c icaltimezone.h icalduration.h icalduration.c icalperiod.h icalperiod.c icaltypes.c icaltypes.h icalvalue.c icalvalue.h icalvalueimpl.h pvl.c pvl.h sspm.c sspm.h icallangbind.h icallangbind.c caldate.c astime.h ) if(WIN32) if(MSVC) list(APPEND ical_LIB_SRCS ../ical.def) endif(MSVC) endif(WIN32) add_library(ical ${LIBRARY_TYPE} ${ical_LIB_SRCS}) add_library(ical-static STATIC ${ical_LIB_SRCS}) add_dependencies(ical ical-header) target_link_libraries(ical ${CMAKE_THREAD_LIBS_INIT}) if(WINCE) target_link_libraries(ical ${WCECOMPAT_LIBRARIES}) endif(WINCE) if(MSVC) set_target_properties(ical PROPERTIES OUTPUT_NAME "libical") set_target_properties(ical-static PROPERTIES OUTPUT_NAME "libical-static") else(MSVC) set_target_properties(ical-static PROPERTIES OUTPUT_NAME "ical") endif(MSVC) set_target_properties(ical PROPERTIES VERSION ${LIBICAL_LIB_VERSION_STRING} SOVERSION ${LIBICAL_LIB_MAJOR_VERSION} ) set_target_properties(ical PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(ical-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) install(TARGETS ical ical-static ${INSTALL_TARGETS_DEFAULT_ARGS}) ########### install files ############### install(FILES ${CMAKE_SOURCE_DIR}/src/ical.h DESTINATION ${INCLUDE_INSTALL_DIR}) install(FILES ${CMAKE_BINARY_DIR}/src/libical/ical.h icalarray.h icalattach.h icalcomponent.h ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.h ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.h ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.h icalduration.h icalenums.h ${CMAKE_BINARY_DIR}/src/libical/icalerror.h icallangbind.h icalmemory.h icalmime.h icalparameter.h icalparser.h icalperiod.h icalproperty.h icalrecur.h icalrestriction.h icaltime.h icaltz-util.h icaltimezone.h icaltypes.h icalvalue.h pvl.h sspm.h DESTINATION ${INCLUDE_INSTALL_DIR}/libical ) libical-1.0/src/libical/astime.h0000664000076400007640000000467212132563132015563 0ustar allenallen/* * Copyright (c) 1986-2000, Hiram Clawson * All rights reserved. * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * Redistributions in binary form must reproduce the * above copyright notice, this list of conditions and * the following disclaimer in the documentation and/or * other materials provided with the distribution. * * Neither name of The Museum of Hiram nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ /** * @file astime.h * @brief contains definitions of structures used for time calculations. */ #ifndef _astime_h_ #define _astime_h_ typedef struct ut_instant { double j_date; /**< julian decimal date, 0 = 01 Jan 4713 BC 12 HR UT */ long year; /**< year, valid range [-4,713, +2,147,483,647] */ int month; /**< [1-12] */ int day; /**< [1-31] */ int i_hour; /**< [0-23] */ int i_minute; /**< [0-59] */ int i_second; /**< [0-59] */ double d_hour; /**< [0.0-23.9999] includes minute and second */ double d_minute; /**< [0.0-59.9999] includes second */ double d_second; /**< [0.0-59.9999] */ int weekday; /**< [0-6] */ int day_of_year; /**< [1-366] */ } UTinstant, * UTinstantPtr; /* Functions in caldate.c */ long caldat( UTinstantPtr ); /** converts julian date to year,mo,da */ double juldat( UTinstantPtr ); /** returns julian day from year,mo,da */ #endif /* _astime_h_ */ libical-1.0/src/libical/icaltimezone.h0000664000076400007640000001275012132563132016760 0ustar allenallen/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /*====================================================================== FILE: icaltimezone.h CREATOR: Damon Chaplin 15 March 2001 $Id: icaltimezone.h,v 1.14 2008-01-15 23:17:42 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2001, Damon Chaplin This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ /** * @file icaltimezone.h * @brief timezone handling routines */ #ifndef ICALTIMEZONE_H #define ICALTIMEZONE_H #include /* For FILE* */ #include "icaltime.h" #include "icalarray.h" #include "icalcomponent.h" #ifndef ICALTIMEZONE_DEFINED #define ICALTIMEZONE_DEFINED /** @brief An opaque struct representing a timezone. * We declare this here to avoid a circular dependancy. */ typedef struct _icaltimezone icaltimezone; #endif /** * @par Creating/Destroying individual icaltimezones. */ /** Creates a new icaltimezone. */ icaltimezone *icaltimezone_new (void); icaltimezone *icaltimezone_copy (icaltimezone *originalzone); /** Frees all memory used for the icaltimezone. Set free_struct to free the icaltimezone struct as well. */ void icaltimezone_free (icaltimezone *zone, int free_struct); /** Sets the prefix to be used for tzid's generated from system tzdata. Must be globally unique (such as a domain name owned by the developer of the calling application), and begin and end with forward slashes. Do not change or de-allocate the string buffer after calling this. */ void icaltimezone_set_tzid_prefix(const char *new_prefix); /** * @par Accessing timezones. */ /** Free any builtin timezone information **/ void icaltimezone_free_builtin_timezones(void); /** Returns the array of builtin icaltimezones. */ icalarray* icaltimezone_get_builtin_timezones (void); /** Returns a single builtin timezone, given its Olson city name. */ icaltimezone* icaltimezone_get_builtin_timezone (const char *location); /** Returns a single builtin timezone, given its offset. */ icaltimezone* icaltimezone_get_builtin_timezone_from_offset (int offset, const char *tzname); /** Returns a single builtin timezone, given its TZID. */ icaltimezone* icaltimezone_get_builtin_timezone_from_tzid (const char *tzid); /** Returns the UTC timezone. */ icaltimezone* icaltimezone_get_utc_timezone (void); /** Returns the TZID of a timezone. */ const char* icaltimezone_get_tzid (icaltimezone *zone); /** Returns the city name of a timezone. */ const char* icaltimezone_get_location (icaltimezone *zone); /** Returns the TZNAME properties used in the latest STANDARD and DAYLIGHT components. If they are the same it will return just one, e.g. "LMT". If they are different it will format them like "EST/EDT". Note that this may also return NULL. */ const char* icaltimezone_get_tznames (icaltimezone *zone); /** Returns the latitude of a builtin timezone. */ double icaltimezone_get_latitude (icaltimezone *zone); /** Returns the longitude of a builtin timezone. */ double icaltimezone_get_longitude (icaltimezone *zone); /** Returns the VTIMEZONE component of a timezone. */ icalcomponent* icaltimezone_get_component (icaltimezone *zone); /** Sets the VTIMEZONE component of an icaltimezone, initializing the tzid, location & tzname fields. It returns 1 on success or 0 on failure, i.e. no TZID was found. */ int icaltimezone_set_component (icaltimezone *zone, icalcomponent *comp); const char* icaltimezone_get_display_name (icaltimezone *zone); /** * @par Converting times between timezones. */ void icaltimezone_convert_time (struct icaltimetype *tt, icaltimezone *from_zone, icaltimezone *to_zone); /** * @par Getting offsets from UTC. */ /** Calculates the UTC offset of a given local time in the given timezone. It is the number of seconds to add to UTC to get local time. The is_daylight flag is set to 1 if the time is in daylight-savings time. */ int icaltimezone_get_utc_offset (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight); /** Calculates the UTC offset of a given UTC time in the given timezone. It is the number of seconds to add to UTC to get local time. The is_daylight flag is set to 1 if the time is in daylight-savings time. */ int icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone, struct icaltimetype *tt, int *is_daylight); /* * Handling arrays of timezones. Mainly for internal use. */ icalarray* icaltimezone_array_new (void); void icaltimezone_array_append_from_vtimezone (icalarray *timezones, icalcomponent *child); void icaltimezone_array_free (icalarray *timezones); /* * @par Handling the default location the timezone files */ /** Set the directory to look for the zonefiles */ void set_zone_directory(char *path); /** Free memory dedicated to the zonefile directory */ void free_zone_directory(void); void icaltimezone_release_zone_tab(void); /* * @par Debugging Output. */ /** Dumps information about changes in the timezone up to and including max_year. */ int icaltimezone_dump_changes (icaltimezone *zone, int max_year, FILE *fp); #endif /* ICALTIMEZONE_H */ libical-1.0/src/libical/icalderivedparameter.c.in0000664000076400007640000001162712132563132021053 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalderivedparameters.{c,h} CREATOR: eric 09 May 1999 $Id: icalderivedparameter.c.in,v 1.9 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalderivedparameters.{c,h} Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ /*#line 29 "icalparameter.c.in"*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalparameter.h" #include "icalparameterimpl.h" #include "icalproperty.h" #include "icalerror.h" #include "icalmemory.h" #include "icaltypes.h" #include /* for malloc() */ #include #include /* for memset() */ #ifdef _MSC_VER #define strcasecmp stricmp #endif icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value); struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind); /* This map associates each of the parameters with the string representation of the parameter's name */ struct icalparameter_kind_map { icalparameter_kind kind; const char *name; }; /* This map associates the enumerations for the VALUE parameter with the kinds of VALUEs. */ struct icalparameter_value_kind_map { icalparameter_value value; icalvalue_kind kind; }; /* This map associates the parameter enumerations with a specific parameter and the string representation of the enumeration */ struct icalparameter_map { icalparameter_kind kind; int enumeration; const char* str; }; const char* icalparameter_kind_to_string(icalparameter_kind kind) { int i; for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { if (parameter_map[i].kind == kind) { return parameter_map[i].name; } } return 0; } icalparameter_kind icalparameter_string_to_kind(const char* string) { int i; if (string ==0 ) { return ICAL_NO_PARAMETER; } for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { if (strcasecmp(parameter_map[i].name, string) == 0) { return parameter_map[i].kind; } } if(strncmp(string,"X-",2)==0){ return ICAL_X_PARAMETER; } if (ical_get_unknown_token_handling_setting() == ICAL_TREAT_AS_ERROR) { return ICAL_NO_PARAMETER; } else { return ICAL_IANA_PARAMETER; } } icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value value) { int i; for (i=0; value_kind_map[i].kind != ICAL_NO_VALUE; i++) { if (value_kind_map[i].value == value) { return value_kind_map[i].kind; } } return ICAL_NO_VALUE; } const char* icalparameter_enum_to_string(int e) { int i; icalerror_check_arg_rz(e >= ICALPARAMETER_FIRST_ENUM,"e"); icalerror_check_arg_rz(e <= ICALPARAMETER_LAST_ENUM,"e"); for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ if(e == icalparameter_map[i].enumeration){ return icalparameter_map[i].str; } } return 0; } int icalparameter_string_to_enum(const char* str) { int i; icalerror_check_arg_rz(str != 0,"str"); for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ if(strcasecmp(str,icalparameter_map[i].str) == 0) { return icalparameter_map[i].enumeration; } } return 0; } icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind,const char* val) { struct icalparameter_impl* param=0; int found_kind = 0; int i; icalerror_check_arg_rz((val!=0),"val"); /* Search through the parameter map to find a matching kind */ param = icalparameter_new_impl(kind); if (!param) return 0; for (i=0; icalparameter_map[i].kind != ICAL_NO_PARAMETER; i++){ if(kind == icalparameter_map[i].kind) { found_kind = 1; if(strcasecmp(val,icalparameter_map[i].str) == 0) { param->data = (int)icalparameter_map[i].enumeration; return param; } } } if(found_kind == 1){ /* The kind was in the parameter map, but the string did not match, so assume that it is an alternate value, like an X-value.*/ icalparameter_set_xvalue(param, val); } else { /* If the kind was not found, then it must be a string type */ ((struct icalparameter_impl*)param)->string = icalmemory_strdup(val); } return param; } libical-1.0/src/libical/icalrecur.c0000664000076400007640000021372212132563132016243 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalrecur.c CREATOR: eric 16 May 2000 $Id: icalrecur.c,v 1.71 2008-02-03 16:10:46 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ /** @file icalrecur.c @brief Implementation of routines for dealing with recurring time How this code works: Processing starts when the caller generates a new recurrence iterator via icalrecur_iterator_new(). This routine copies the recurrence rule into the iterator and extracts things like start and end dates. Then, it checks if the rule is legal, using some logic from RFC2445 and some logic that probably should be in RFC2445. Then, icalrecur_iterator_new() re-writes some of the BY* arrays. This involves ( via a call to setup_defaults() ) : 1) For BY rule parts with no data ( ie BYSECOND was not specified ) copy the corresponding time part from DTSTART into the BY array. ( So impl->by_ptrs[BY_SECOND] will then have one element if is originally had none ) This only happens if the BY* rule part data would expand the number of occurrences in the occurrence set. This lets the code ignore DTSTART later on and still use it to get the time parts that were not specified in any other way. 2) For the by rule part that are not the same interval as the frequency -- for HOURLY anything but BYHOUR, for instance -- copy the first data element from the rule part into the first occurrence. For example, for "INTERVAL=MONTHLY and BYHOUR=10,30", initialize the first time to be returned to have an hour of 10. Finally, for INTERVAL=YEARLY, the routine expands the rule to get all of the days specified in the rule. The code will do this for each new year, and this is the first expansion. This is a special case for the yearly interval; no other frequency gets expanded this way. The yearly interval is the most complex, so some special processing is required. After creating a new iterator, the caller will make successive calls to icalrecur_iterator_next() to get the next time specified by the rule. The main part of this routine is a switch on the frequency of the rule. Each different frequency is handled by a different routine. For example, next_hour handles the case of INTERVAL=HOURLY, and it is called by other routines to get the next hour. First, the routine tries to get the next minute part of a time with a call to next_minute(). If next_minute() returns 1, it has reached the end of its data, usually the last element of the BYMINUTE array. Then, if there is data in the BYHOUR array, the routine changes the hour to the next one in the array. If INTERVAL=HOURLY, the routine advances the hour by the interval. If the routine used the last hour in the BYHOUR array, and the INTERVAL=HOURLY, then the routine calls increment_monthday() to set the next month day. The increment_* routines may call higher routine to increment the month or year also. The code for INTERVAL=DAILY is handled by next_day(). First, the routine tries to get the next hour part of a time with a call to next_hour. If next_hour() returns 1, it has reached the end of its data, usually the last element of the BYHOUR array. This means that next_day() should increment the time to the next day. If FREQUENCY==DAILY, the routine increments the day by the interval; otherwise, it increments the day by 1. Next_day() differs from next_hour because it does not use the BYDAY array to select an appropriate day. Instead, it returns every day ( incrementing by 1 if the frequency is not DAILY with INTERVAL!=1) Any days that are not specified in an non-empty BYDAY array are filtered out later. Generally, the flow of these routine is for a next_* call a next_* routine of a lower interval ( next_day calls next_hour) and then to possibly call an increment_* routine of an equal or higher interval. ( next_day calls increment_monthday() ) When the call to the original next_* routine returns, icalrecur_iterator_next() will check the returned data against other BYrule parts to determine if is should be excluded by calling check_contracting_rules. Generally, a contracting rule is any with a larger time span than the interval. For instance, if INTERVAL=DAILY, BYMONTH is a contracting rule part. Check_contracting_rules() uses icalrecur_check_rulepart() to do its work. icalrecur_check_rulepart() uses expand_map[] to determine if a rule is contracting, and if it is, and if the BY rule part has some data, then the routine checks if the value of a component of the time is part of the byrule part. For instance, for "INTERVAL=DAILY; BYMONTH=6,10", icalrecur_check_rulepart() would check that the time value given to it has a month of either 6 or 10. Finally, icalrecur_iterator_next() does a few other checks on the time value, and if it passes, it returns the time. A note about the end_of_data flag. The flag indicates that the routine is at the end of its data -- the last BY rule if the routine is using by rules, or the last day of the week/month/year/etc if not. This flag is usually set early in a next_* routine and returned in the end. The way it is used allows the next_* routine to set the last time back to the first element in a BYxx rule, and then signal to the higer level routine to increment the next higher level. For instance. WITH FREQ=MONTHLY;BYDAY=TU,FR, After next_weekday_by_month runs though both TU and FR, it sets the week day back to TU and sets end_of_data to 1x. This signals next_month to increment the month. ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STDINT_H #include #endif #include #include #if defined(_MSC_VER) #define snprintf _snprintf #endif #include #ifndef HAVE_INTPTR_T #if (defined (WIN32) && !defined (__MINGW32__)) || defined (XP_BEOS) typedef long intptr_t; #endif #endif #ifdef _MSC_VER #define strcasecmp stricmp #endif #include "icalrecur.h" #include "icalerror.h" #include "icalmemory.h" #include /* for malloc, strtol */ #include /* for errno */ #include /* for strdup and strchr*/ #include #include /* For offsetof() macro */ #ifdef HAVE_INTTYPES_H #include #endif #include "pvl.h" /** This is the last year we will go up to, since 32-bit time_t values only go up to the start of 2038. */ #define MAX_TIME_T_YEAR 2037 #define TEMP_MAX 1024 #define BYDAYIDX impl->by_indices[BY_DAY] #define BYDAYPTR impl->by_ptrs[BY_DAY] #define BYMONIDX impl->by_indices[BY_MONTH] #define BYMONPTR impl->by_ptrs[BY_MONTH] #define BYMDIDX impl->by_indices[BY_MONTH_DAY] #define BYMDPTR impl->by_ptrs[BY_MONTH_DAY] #define BYWEEKIDX impl->by_indices[BY_WEEK_NO] #define BYWEEKPTR impl->by_ptrs[BY_WEEK_NO] const char* icalrecur_freq_to_string(icalrecurrencetype_frequency kind); icalrecurrencetype_frequency icalrecur_string_to_freq(const char* str); const char* icalrecur_weekday_to_string(icalrecurrencetype_weekday kind); icalrecurrencetype_weekday icalrecur_string_to_weekday(const char* str); /*********************** Rule parsing routines ************************/ struct icalrecur_parser { const char* rule; char* copy; char* this_clause; char* next_clause; struct icalrecurrencetype rt; }; const char* icalrecur_first_clause(struct icalrecur_parser *parser) { char *idx; parser->this_clause = parser->copy; idx = strchr(parser->this_clause,';'); if (idx == 0){ parser->next_clause = 0; return 0; } *idx = 0; idx++; parser->next_clause = idx; return parser->this_clause; } const char* icalrecur_next_clause(struct icalrecur_parser *parser) { char* idx; parser->this_clause = parser->next_clause; if(parser->this_clause == 0){ return 0; } idx = strchr(parser->this_clause,';'); if (idx == 0){ parser->next_clause = 0; } else { *idx = 0; idx++; parser->next_clause = idx; } return parser->this_clause; } void icalrecur_clause_name_and_value(struct icalrecur_parser *parser, char** name, char** value) { char *idx; *name = parser->this_clause; idx = strchr(parser->this_clause,'='); if (idx == 0){ *name = 0; *value = 0; return; } *idx = 0; idx++; *value = idx; } void icalrecur_add_byrules(struct icalrecur_parser *parser, short *array, int size, char* vals) { char *t, *n; int i=0; int sign = 1; int v; n = vals; while(n != 0){ if(i == size){ return; } t = n; n = strchr(t,','); if(n != 0){ *n = 0; n++; } /* Get optional sign. HACK. sign is not allowed for all BYxxx rule parts */ if( *t == '-'){ sign = -1; t++; } else if (*t == '+'){ sign = 1; t++; } else { sign = 1; } v = atoi(t) * sign ; array[i++] = (short)v; array[i] = ICAL_RECURRENCE_ARRAY_MAX; } } /* * Days in the BYDAY rule are expected by the code to be sorted, and while * this may be the common case, the RFC doesn't actually mandate it. This * function sorts the days taking into account the first day of week. */ static void sort_bydayrules(struct icalrecur_parser *parser) { short *array; int week_start, one, two, i, j; array = parser->rt.by_day; week_start = parser->rt.week_start; for (i=0; i two) { short tmp = array[j]; array[j] = array[i]; array[i] = tmp; } } } } void icalrecur_add_bydayrules(struct icalrecur_parser *parser, const char* vals) { char *t, *n; int i=0; int sign = 1; char weekno = 0; /* note: Novell/Groupwise sends BYDAY=255SU, so we fit in a signed char to get -1 SU for last sunday. */ icalrecurrencetype_weekday wd; short *array = parser->rt.by_day; char* end; char* vals_copy; vals_copy = icalmemory_strdup(vals); end = (char*)vals_copy+strlen(vals_copy); n = vals_copy; while(n != 0){ t = n; n = strchr(t,','); if(n != 0){ *n = 0; n++; } /* Get optional sign. */ if( *t == '-'){ sign = -1; t++; } else if (*t == '+'){ sign = 1; t++; } else { sign = 1; } /* Get Optional weekno */ weekno = (char)strtol(t,&t,10); /* Outlook/Exchange generate "BYDAY=MO, FR" and "BYDAY=2 TH". * Cope with that. */ if (*t == ' ') t++; wd = icalrecur_string_to_weekday(t); array[i++] = (short)(sign* (wd + 8*weekno)); array[i] = ICAL_RECURRENCE_ARRAY_MAX; } free(vals_copy); sort_bydayrules(parser); } struct icalrecurrencetype icalrecurrencetype_from_string(const char* str) { struct icalrecur_parser parser; memset(&parser,0,sizeof(parser)); icalrecurrencetype_clear(&parser.rt); icalerror_check_arg_re(str!=0,"str",parser.rt); /* Set up the parser struct */ parser.rule = str; parser.copy = icalmemory_strdup(parser.rule); parser.this_clause = parser.copy; if(parser.copy == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return parser.rt; } /* Loop through all of the clauses */ for(icalrecur_first_clause(&parser); parser.this_clause != 0; icalrecur_next_clause(&parser)) { char *name, *value; icalrecur_clause_name_and_value(&parser,&name,&value); if(name == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); icalrecurrencetype_clear(&parser.rt); free(parser.copy); return parser.rt; } if (strcasecmp(name,"FREQ") == 0){ parser.rt.freq = icalrecur_string_to_freq(value); } else if (strcasecmp(name,"COUNT") == 0){ parser.rt.count = atoi(value); } else if (strcasecmp(name,"UNTIL") == 0){ parser.rt.until = icaltime_from_string(value); } else if (strcasecmp(name,"INTERVAL") == 0){ parser.rt.interval = (short)atoi(value); /* don't allow an interval to be less than 1 (RFC specifies an interval must be a positive integer) */ if (parser.rt.interval < 1){ parser.rt.interval = 1; } } else if (strcasecmp(name,"WKST") == 0){ parser.rt.week_start = icalrecur_string_to_weekday(value); sort_bydayrules(&parser); } else if (strcasecmp(name,"BYSECOND") == 0){ icalrecur_add_byrules(&parser,parser.rt.by_second, ICAL_BY_SECOND_SIZE,value); } else if (strcasecmp(name,"BYMINUTE") == 0){ icalrecur_add_byrules(&parser,parser.rt.by_minute, ICAL_BY_MINUTE_SIZE,value); } else if (strcasecmp(name,"BYHOUR") == 0){ icalrecur_add_byrules(&parser,parser.rt.by_hour, ICAL_BY_HOUR_SIZE,value); } else if (strcasecmp(name,"BYDAY") == 0){ icalrecur_add_bydayrules(&parser,value); } else if (strcasecmp(name,"BYMONTHDAY") == 0){ icalrecur_add_byrules(&parser,parser.rt.by_month_day, ICAL_BY_MONTHDAY_SIZE,value); } else if (strcasecmp(name,"BYYEARDAY") == 0){ icalrecur_add_byrules(&parser,parser.rt.by_year_day, ICAL_BY_YEARDAY_SIZE,value); } else if (strcasecmp(name,"BYWEEKNO") == 0){ icalrecur_add_byrules(&parser,parser.rt.by_week_no, ICAL_BY_WEEKNO_SIZE,value); } else if (strcasecmp(name,"BYMONTH") == 0){ icalrecur_add_byrules(&parser,parser.rt.by_month, ICAL_BY_MONTH_SIZE,value); } else if (strcasecmp(name,"BYSETPOS") == 0){ icalrecur_add_byrules(&parser,parser.rt.by_set_pos, ICAL_BY_SETPOS_SIZE,value); } else { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); icalrecurrencetype_clear(&parser.rt); free(parser.copy); return parser.rt; } } free(parser.copy); return parser.rt; } static struct {const char* str;size_t offset; int limit; } recurmap[] = { {";BYSECOND=",offsetof(struct icalrecurrencetype,by_second),ICAL_BY_SECOND_SIZE - 1}, {";BYMINUTE=",offsetof(struct icalrecurrencetype,by_minute),ICAL_BY_MINUTE_SIZE - 1}, {";BYHOUR=",offsetof(struct icalrecurrencetype,by_hour),ICAL_BY_HOUR_SIZE - 1}, {";BYDAY=",offsetof(struct icalrecurrencetype,by_day),ICAL_BY_DAY_SIZE - 1}, {";BYMONTHDAY=",offsetof(struct icalrecurrencetype,by_month_day),ICAL_BY_MONTHDAY_SIZE - 1}, {";BYYEARDAY=",offsetof(struct icalrecurrencetype,by_year_day),ICAL_BY_YEARDAY_SIZE - 1}, {";BYWEEKNO=",offsetof(struct icalrecurrencetype,by_week_no),ICAL_BY_WEEKNO_SIZE - 1}, {";BYMONTH=",offsetof(struct icalrecurrencetype,by_month),ICAL_BY_MONTH_SIZE - 1}, {";BYSETPOS=",offsetof(struct icalrecurrencetype,by_set_pos),ICAL_BY_SETPOS_SIZE - 1}, {0,0,0}, }; /* A private routine in icalvalue.c */ void print_date_to_string(char* str, struct icaltimetype *data); void print_datetime_to_string(char* str, struct icaltimetype *data); char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur) { char *buf; buf = icalrecurrencetype_as_string_r(recur); icalmemory_add_tmp_buffer(buf); return buf; } char* icalrecurrencetype_as_string_r(struct icalrecurrencetype *recur) { char* str; char *str_p; size_t buf_sz = 200; char temp[20]; int i,j; if(recur->freq == ICAL_NO_RECURRENCE){ return 0; } str = (char*)icalmemory_new_buffer(buf_sz); str_p = str; icalmemory_append_string(&str,&str_p,&buf_sz,"FREQ="); icalmemory_append_string(&str,&str_p,&buf_sz, icalrecur_freq_to_string(recur->freq)); if(recur->until.year != 0){ temp[0] = 0; if (recur->until.is_date) print_date_to_string(temp,&(recur->until)); else print_datetime_to_string(temp,&(recur->until)); icalmemory_append_string(&str,&str_p,&buf_sz,";UNTIL="); icalmemory_append_string(&str,&str_p,&buf_sz, temp); } if(recur->count != 0){ snprintf(temp,sizeof(temp),"%d",recur->count); icalmemory_append_string(&str,&str_p,&buf_sz,";COUNT="); icalmemory_append_string(&str,&str_p,&buf_sz, temp); } if(recur->interval != 1){ snprintf(temp,sizeof(temp),"%d",recur->interval); icalmemory_append_string(&str,&str_p,&buf_sz,";INTERVAL="); icalmemory_append_string(&str,&str_p,&buf_sz, temp); } for(j =0; recurmap[j].str != 0; j++){ short* array = (short*)(recurmap[j].offset+ (size_t)recur); int limit = recurmap[j].limit; /* Skip unused arrays */ if( array[0] != ICAL_RECURRENCE_ARRAY_MAX ) { icalmemory_append_string(&str,&str_p,&buf_sz,recurmap[j].str); for(i=0; i< limit && array[i] != ICAL_RECURRENCE_ARRAY_MAX; i++){ if (j == 3) { /* BYDAY */ const char *daystr = icalrecur_weekday_to_string( icalrecurrencetype_day_day_of_week(array[i])); int pos; pos = icalrecurrencetype_day_position(array[i]); if (pos == 0) icalmemory_append_string(&str,&str_p,&buf_sz,daystr); else { snprintf(temp,sizeof(temp),"%d%s",pos,daystr); icalmemory_append_string(&str,&str_p,&buf_sz,temp); } } else { snprintf(temp,sizeof(temp),"%d",array[i]); icalmemory_append_string(&str,&str_p,&buf_sz, temp); } if( (i+1)week_start != ICAL_MONDAY_WEEKDAY && recur->week_start != ICAL_NO_WEEKDAY ) { const char *daystr = icalrecur_weekday_to_string( icalrecurrencetype_day_day_of_week( recur->week_start )); icalmemory_append_string(&str,&str_p,&buf_sz,";WKST="); icalmemory_append_string(&str,&str_p,&buf_sz,daystr); } return str; } /************************* occurrence iteration routiens ******************/ enum byrule { NO_CONTRACTION = -1, BY_SECOND = 0, BY_MINUTE = 1, BY_HOUR = 2, BY_DAY = 3, BY_MONTH_DAY = 4, BY_YEAR_DAY = 5, BY_WEEK_NO = 6, BY_MONTH = 7, BY_SET_POS }; struct icalrecur_iterator_impl { struct icaltimetype dtstart; /* Hack. Make into time_t */ struct icaltimetype last; /* last time return from _iterator_next*/ int occurrence_no; /* number of step made on t iterator */ struct icalrecurrencetype rule; short days[366]; short days_index; enum byrule byrule; short by_indices[9]; short orig_data[9]; /**< 1 if there was data in the byrule */ short *by_ptrs[9]; /**< Pointers into the by_* array elements of the rule */ }; static void increment_year(icalrecur_iterator* impl, int inc); int icalrecur_iterator_sizeof_byarray(short* byarray) { int array_itr; for(array_itr = 0; byarray[array_itr] != ICAL_RECURRENCE_ARRAY_MAX; array_itr++){ } return array_itr; } enum expand_table { UNKNOWN = 0, CONTRACT = 1, EXPAND =2, ILLEGAL=3 }; /** * The split map indicates, for a particular interval, wether a BY_* * rule part expands the number of instances in the occcurrence set or * contracts it. 1=> contract, 2=>expand, and 3 means the pairing is * not allowed. */ struct expand_split_map_struct { icalrecurrencetype_frequency frequency; /* Elements of the 'map' array correspond to the BYxxx rules: Second,Minute,Hour,Day,Month Day,Year Day,Week No,Month*/ short map[8]; }; static const struct expand_split_map_struct expand_map[] = { {ICAL_SECONDLY_RECURRENCE,{1,1,1,1,1,1,1,1}}, {ICAL_MINUTELY_RECURRENCE,{2,1,1,1,1,1,1,1}}, {ICAL_HOURLY_RECURRENCE, {2,2,1,1,1,1,1,1}}, {ICAL_DAILY_RECURRENCE, {2,2,2,1,1,1,1,1}}, {ICAL_WEEKLY_RECURRENCE, {2,2,2,2,3,3,1,1}}, {ICAL_MONTHLY_RECURRENCE, {2,2,2,2,2,3,3,1}}, {ICAL_YEARLY_RECURRENCE, {2,2,2,2,2,2,2,2}}, {ICAL_NO_RECURRENCE, {0,0,0,0,0,0,0,0}} }; /** Check that the rule has only the two given interday byrule parts. */ static int icalrecur_two_byrule(icalrecur_iterator* impl, enum byrule one,enum byrule two) { short test_array[9]; enum byrule itr; int passes = 0; memset(test_array,0,sizeof(test_array)); test_array[one] = 1; test_array[two] = 1; for(itr = BY_DAY; itr != BY_SET_POS; itr++){ if( (test_array[itr] == 0 && impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX ) || (test_array[itr] == 1 && impl->by_ptrs[itr][0] == ICAL_RECURRENCE_ARRAY_MAX ) ) { /* test failed */ passes = 0; } } return passes; } /** Check that the rule has only the one given interdat byrule parts. */ static int icalrecur_one_byrule(icalrecur_iterator* impl,enum byrule one) { int passes = 1; enum byrule itr; for(itr = BY_DAY; itr != BY_SET_POS; itr++){ if ((itr==one && impl->by_ptrs[itr][0] == ICAL_RECURRENCE_ARRAY_MAX) || (itr!=one && impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX)) { passes = 0; } } return passes; } /* static int count_byrules(icalrecur_iterator* impl) { int count = 0; enum byrule itr; for(itr = BY_DAY; itr <= BY_SET_POS; itr++){ if(impl->by_ptrs[itr][0] != ICAL_RECURRENCE_ARRAY_MAX){ count++; } } return count; } */ static void setup_defaults(icalrecur_iterator* impl, enum byrule byrule, icalrecurrencetype_frequency req, int deftime, int *timepart) { icalrecurrencetype_frequency freq; freq = impl->rule.freq; /* Re-write the BY rule arrays with data from the DTSTART time so we don't have to explicitly deal with DTSTART */ if(impl->by_ptrs[byrule][0] == ICAL_RECURRENCE_ARRAY_MAX && expand_map[freq].map[byrule] != CONTRACT){ impl->by_ptrs[byrule][0] = (short)deftime; } /* Initialize the first occurrence */ if( freq != req && expand_map[freq].map[byrule] != CONTRACT){ *timepart = impl->by_ptrs[byrule][0]; } } static int has_by_data(icalrecur_iterator* impl, enum byrule byrule){ return (impl->orig_data[byrule] == 1); } static int expand_year_days(icalrecur_iterator* impl, int year); icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, struct icaltimetype dtstart) { icalrecur_iterator* impl; icalrecurrencetype_frequency freq; icalerror_clear_errno(); if ( ( impl = (icalrecur_iterator*) malloc(sizeof(icalrecur_iterator))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } memset(impl,0,sizeof(icalrecur_iterator)); impl->rule = rule; impl->last = dtstart; impl->dtstart = dtstart; impl->days_index =0; impl->occurrence_no = 0; freq = impl->rule.freq; /* Set up convienience pointers to make the code simpler. Allows us to iterate through all of the BY* arrays in the rule. */ impl->by_ptrs[BY_MONTH]=impl->rule.by_month; impl->by_ptrs[BY_WEEK_NO]=impl->rule.by_week_no; impl->by_ptrs[BY_YEAR_DAY]=impl->rule.by_year_day; impl->by_ptrs[BY_MONTH_DAY]=impl->rule.by_month_day; impl->by_ptrs[BY_DAY]=impl->rule.by_day; impl->by_ptrs[BY_HOUR]=impl->rule.by_hour; impl->by_ptrs[BY_MINUTE]=impl->rule.by_minute; impl->by_ptrs[BY_SECOND]=impl->rule.by_second; impl->by_ptrs[BY_SET_POS]=impl->rule.by_set_pos; memset(impl->orig_data,0,9*sizeof(short)); /* Note which by rules had data in them when the iterator was created. We can't use the actuall by_x arrays, because the empty ones will be given default values later in this routine. The orig_data array will be used later in has_by_data */ impl->orig_data[BY_MONTH] = (short)(impl->rule.by_month[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->orig_data[BY_WEEK_NO] =(short)(impl->rule.by_week_no[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->orig_data[BY_YEAR_DAY] =(short)(impl->rule.by_year_day[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->orig_data[BY_MONTH_DAY] =(short)(impl->rule.by_month_day[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->orig_data[BY_DAY] = (short)(impl->rule.by_day[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->orig_data[BY_HOUR] = (short)(impl->rule.by_hour[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->orig_data[BY_MINUTE] = (short)(impl->rule.by_minute[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->orig_data[BY_SECOND] = (short)(impl->rule.by_second[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->orig_data[BY_SET_POS] = (short)(impl->rule.by_set_pos[0]!=ICAL_RECURRENCE_ARRAY_MAX); /* Check if the recurrence rule is legal */ /* If the BYYEARDAY appears, no other date rule part may appear. */ if(icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_MONTH) || icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_WEEK_NO) || icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_MONTH_DAY) || icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_DAY) ){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(impl); return 0; } /* BYWEEKNO and BYMONTHDAY rule parts may not both appear.*/ if(icalrecur_two_byrule(impl,BY_WEEK_NO,BY_MONTH_DAY)){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(impl); return 0; } /*For MONTHLY recurrences (FREQ=MONTHLY) neither BYYEARDAY nor BYWEEKNO may appear. */ if(freq == ICAL_MONTHLY_RECURRENCE && icalrecur_one_byrule(impl,BY_WEEK_NO)){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(impl); return 0; } /*For WEEKLY recurrences (FREQ=WEEKLY) neither BYMONTHDAY nor BYYEARDAY may appear. */ if(freq == ICAL_WEEKLY_RECURRENCE && icalrecur_one_byrule(impl,BY_MONTH_DAY )) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(impl); return 0; } /* BYYEARDAY may only appear in YEARLY rules */ if(freq != ICAL_YEARLY_RECURRENCE && icalrecur_one_byrule(impl,BY_YEAR_DAY )) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(impl); return 0; } /* Rewrite some of the rules and set up defaults to make later processing easier. Primarily, t involves copying an element from the start time into the corresponding BY_* array when the BY_* array is empty */ setup_defaults(impl,BY_SECOND,ICAL_SECONDLY_RECURRENCE, impl->dtstart.second, &(impl->last.second)); setup_defaults(impl,BY_MINUTE,ICAL_MINUTELY_RECURRENCE, impl->dtstart.minute, &(impl->last.minute)); setup_defaults(impl,BY_HOUR,ICAL_HOURLY_RECURRENCE, impl->dtstart.hour, &(impl->last.hour)); setup_defaults(impl,BY_MONTH_DAY,ICAL_DAILY_RECURRENCE, impl->dtstart.day, &(impl->last.day)); setup_defaults(impl,BY_MONTH,ICAL_MONTHLY_RECURRENCE, impl->dtstart.month, &(impl->last.month)); if(impl->rule.freq == ICAL_WEEKLY_RECURRENCE ){ if(impl->by_ptrs[BY_DAY][0] == ICAL_RECURRENCE_ARRAY_MAX){ /* Weekly recurrences with no BY_DAY data should occur on the same day of the week as the start time . */ impl->by_ptrs[BY_DAY][0] = (short)icaltime_day_of_week(impl->dtstart); } else { /* If there is BY_DAY data, then we need to move the initial time to the start of the BY_DAY data. That is if the start time is on a Wednesday, and the rule has BYDAY=MO,WE,FR, move the initial time back to monday. Otherwise, jumping to the next week ( jumping 7 days ahead ) will skip over some occurrences in the second week. */ /* This depends on impl->by_ptrs[BY_DAY] being correctly sorted by * day. This should probably be abstracted to make such assumption * more explicit. */ short dow = (short)(impl->by_ptrs[BY_DAY][0]-icaltime_day_of_week(impl->last)); if((icaltime_day_of_week(impl->last) < impl->by_ptrs[BY_DAY][0] && dow >= 0) || dow < 0) { /* initial time is after first day of BY_DAY data */ impl->last.day += dow; impl->last = icaltime_normalize(impl->last); } } } /* For YEARLY rule, begin by setting up the year days array . The YEARLY rules work by expanding one year at a time. */ if(impl->rule.freq == ICAL_YEARLY_RECURRENCE){ struct icaltimetype next; icalerror_clear_errno(); /* Fail after hitting the year 20000 if no expanded days match */ while (impl->last.year < 20000) { expand_year_days(impl, impl->last.year); if( icalerrno != ICAL_NO_ERROR) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(impl); return 0; } if (impl->days[0] != ICAL_RECURRENCE_ARRAY_MAX) break; /* break when no days are expanded */ increment_year(impl,impl->rule.interval); } /* Copy the first day into last. */ next = icaltime_from_day_of_year(impl->days[0], impl->last.year); impl->last.day = next.day; impl->last.month = next.month; } /* If this is a monthly interval with by day data, then we need to set the last value to the appropriate day of the month */ if(impl->rule.freq == ICAL_MONTHLY_RECURRENCE && has_by_data(impl,BY_DAY)) { int dow = icalrecurrencetype_day_day_of_week( impl->by_ptrs[BY_DAY][impl->by_indices[BY_DAY]]); int pos = icalrecurrencetype_day_position( impl->by_ptrs[BY_DAY][impl->by_indices[BY_DAY]]); int poscount = 0; int days_in_month = icaltime_days_in_month(impl->last.month, impl->last.year); if(pos >= 0){ /* Count up from the first day pf the month to find the pos'th weekday of dow ( like the second monday. ) */ for(impl->last.day = 1; impl->last.day <= days_in_month; impl->last.day++){ if(icaltime_day_of_week(impl->last) == dow){ if(++poscount == pos || pos == 0){ break; } } } } else { /* Count down from the last day pf the month to find the pos'th weekday of dow ( like the second to last monday. ) */ pos = -pos; for(impl->last.day = days_in_month; impl->last.day != 0; impl->last.day--){ if(icaltime_day_of_week(impl->last) == dow){ if(++poscount == pos ){ break; } } } } if(impl->last.day > days_in_month || impl->last.day == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(impl); return 0; } } else if (has_by_data(impl,BY_MONTH_DAY)) { impl->last = icaltime_normalize(impl->last); } return impl; } void icalrecur_iterator_free(icalrecur_iterator* i) { icalerror_check_arg_rv((i!=0),"impl"); free(i); } static void increment_year(icalrecur_iterator* impl, int inc) { impl->last.year+=inc; } /** Increment month is different that the other incement_* routines -- it figures out the interval for itself, and uses BYMONTH data if available. */ static void increment_month(icalrecur_iterator* impl) { int years; if(has_by_data(impl,BY_MONTH) ){ /* Ignore the frequency and use the byrule data */ impl->by_indices[BY_MONTH]++; if (impl->by_ptrs[BY_MONTH][impl->by_indices[BY_MONTH]] ==ICAL_RECURRENCE_ARRAY_MAX){ impl->by_indices[BY_MONTH] = 0; increment_year(impl,1); } impl->last.month = impl->by_ptrs[BY_MONTH][impl->by_indices[BY_MONTH]]; } else { int inc; if(impl->rule.freq == ICAL_MONTHLY_RECURRENCE){ inc = impl->rule.interval; } else { inc = 1; } impl->last.month+=inc; /* Months are offset by one */ impl->last.month--; years = impl->last.month / 12; impl->last.month = impl->last.month % 12; impl->last.month++; if (years != 0){ increment_year(impl,years); } } } static void increment_monthday(icalrecur_iterator* impl, int inc) { int i; for(i=0; ilast.month, impl->last.year); impl->last.day++; if (impl->last.day > days_in_month){ impl->last.day = impl->last.day-days_in_month; increment_month(impl); } } } static void increment_hour(icalrecur_iterator* impl, int inc) { int days; impl->last.hour+=inc; days = impl->last.hour / 24; impl->last.hour = impl->last.hour % 24; if (days != 0){ increment_monthday(impl,days); } } static void increment_minute(icalrecur_iterator* impl, int inc) { int hours; impl->last.minute+=inc; hours = impl->last.minute / 60; impl->last.minute = impl->last.minute % 60; if (hours != 0){ increment_hour(impl,hours); } } static void increment_second(icalrecur_iterator* impl, int inc) { int minutes; impl->last.second+=inc; minutes = impl->last.second / 60; impl->last.second = impl->last.second % 60; if (minutes != 0) { increment_minute(impl, minutes); } } #if 0 #include "ical.h" void test_increment() { icalrecur_iterator impl; impl.last = icaltime_from_string("20000101T000000Z"); printf("Orig: %s\n",icaltime_as_ctime(impl.last)); increment_second(&impl,5); printf("+ 5 sec : %s\n",icaltime_as_ctime(impl.last)); increment_second(&impl,355); printf("+ 355 sec : %s\n",icaltime_as_ctime(impl.last)); increment_minute(&impl,5); printf("+ 5 min : %s\n",icaltime_as_ctime(impl.last)); increment_minute(&impl,360); printf("+ 360 min : %s\n",icaltime_as_ctime(impl.last)); increment_hour(&impl,5); printf("+ 5 hours : %s\n",icaltime_as_ctime(impl.last)); increment_hour(&impl,43); printf("+ 43 hours : %s\n",icaltime_as_ctime(impl.last)); increment_monthday(&impl,3); printf("+ 3 days : %s\n",icaltime_as_ctime(impl.last)); increment_monthday(&impl,600); printf("+ 600 days : %s\n",icaltime_as_ctime(impl.last)); } #endif static int next_second(icalrecur_iterator* impl) { int has_by_second = (impl->by_ptrs[BY_SECOND][0]!=ICAL_RECURRENCE_ARRAY_MAX); int this_frequency = (impl->rule.freq == ICAL_SECONDLY_RECURRENCE); int end_of_data = 0; assert(has_by_second || this_frequency); if( has_by_second ){ /* Ignore the frequency and use the byrule data */ impl->by_indices[BY_SECOND]++; if (impl->by_ptrs[BY_SECOND][impl->by_indices[BY_SECOND]] ==ICAL_RECURRENCE_ARRAY_MAX){ impl->by_indices[BY_SECOND] = 0; end_of_data = 1; } impl->last.second = impl->by_ptrs[BY_SECOND][impl->by_indices[BY_SECOND]]; } else if( !has_by_second && this_frequency ){ /* Compute the next value from the last time and the frequency interval*/ increment_second(impl, impl->rule.interval); } /* If we have gone through all of the seconds on the BY list, then we need to move to the next minute */ if(has_by_second && end_of_data && this_frequency ){ increment_minute(impl,1); } return end_of_data; } static int next_minute(icalrecur_iterator* impl) { int has_by_minute = (impl->by_ptrs[BY_MINUTE][0]!=ICAL_RECURRENCE_ARRAY_MAX); int this_frequency = (impl->rule.freq == ICAL_MINUTELY_RECURRENCE); int end_of_data = 0; assert(has_by_minute || this_frequency); if (next_second(impl) == 0){ return 0; } if( has_by_minute ){ /* Ignore the frequency and use the byrule data */ impl->by_indices[BY_MINUTE]++; if (impl->by_ptrs[BY_MINUTE][impl->by_indices[BY_MINUTE]] ==ICAL_RECURRENCE_ARRAY_MAX){ impl->by_indices[BY_MINUTE] = 0; end_of_data = 1; } impl->last.minute = impl->by_ptrs[BY_MINUTE][impl->by_indices[BY_MINUTE]]; } else if( !has_by_minute && this_frequency ){ /* Compute the next value from the last time and the frequency interval*/ increment_minute(impl,impl->rule.interval); } /* If we have gone through all of the minutes on the BY list, then we need to move to the next hour */ if(has_by_minute && end_of_data && this_frequency ){ increment_hour(impl,1); } return end_of_data; } static int next_hour(icalrecur_iterator* impl) { int has_by_hour = (impl->by_ptrs[BY_HOUR][0]!=ICAL_RECURRENCE_ARRAY_MAX); int this_frequency = (impl->rule.freq == ICAL_HOURLY_RECURRENCE); int end_of_data = 0; assert(has_by_hour || this_frequency); if (next_minute(impl) == 0){ return 0; } if( has_by_hour ){ /* Ignore the frequency and use the byrule data */ impl->by_indices[BY_HOUR]++; if (impl->by_ptrs[BY_HOUR][impl->by_indices[BY_HOUR]] ==ICAL_RECURRENCE_ARRAY_MAX){ impl->by_indices[BY_HOUR] = 0; end_of_data = 1; } impl->last.hour = impl->by_ptrs[BY_HOUR][impl->by_indices[BY_HOUR]]; } else if( !has_by_hour && this_frequency ){ /* Compute the next value from the last time and the frequency interval*/ increment_hour(impl,impl->rule.interval); } /* If we have gone through all of the hours on the BY list, then we need to move to the next day */ if(has_by_hour && end_of_data && this_frequency ){ increment_monthday(impl,1); } return end_of_data; } static int next_day(icalrecur_iterator* impl) { int has_by_day = (impl->by_ptrs[BY_DAY][0]!=ICAL_RECURRENCE_ARRAY_MAX); int this_frequency = (impl->rule.freq == ICAL_DAILY_RECURRENCE); assert(has_by_day || this_frequency); if (next_hour(impl) == 0){ return 0; } /* Always increment through the interval, since this routine is not called by any other next_* routine, and the days that are excluded will be taken care of by restriction filtering */ if(this_frequency){ increment_monthday(impl,impl->rule.interval); } else { increment_monthday(impl,1); } return 0; } /* static int next_yearday(icalrecur_iterator* impl) { int has_by_yearday = (impl->by_ptrs[BY_YEAR_DAY][0]!=ICAL_RECURRENCE_ARRAY_MAX); int end_of_data = 0; assert(has_by_yearday ); if (next_hour(impl) == 0){ return 0; } impl->by_indices[BY_YEAR_DAY]++; if (impl->by_ptrs[BY_YEAR_DAY][impl->by_indices[BY_YEAR_DAY]] ==ICAL_RECURRENCE_ARRAY_MAX){ impl->by_indices[BY_YEAR_DAY] = 0; end_of_data = 1; } impl->last.day = impl->by_ptrs[BY_YEAR_DAY][impl->by_indices[BY_YEAR_DAY]]; if(has_by_yearday && end_of_data){ increment_year(impl,1); } return end_of_data; } */ /* Returns the day of the month for the current month of t that is the pos'th instance of the day-of-week dow */ static int nth_weekday(int dow, int pos, struct icaltimetype t){ int days_in_month = icaltime_days_in_month(t.month, t.year); int end_dow, start_dow; int wd; if(pos >= 0){ t.day = 1; start_dow = icaltime_day_of_week(t); if (pos != 0) { pos--; } /* find month day of first occurrence of dow -- such as the month day of the first monday */ wd = dow-start_dow+1; if (wd <= 0){ wd = wd + 7; } wd = wd + pos * 7; } else { t.day = days_in_month; end_dow = icaltime_day_of_week(t); pos++; /* find month day of last occurrence of dow -- such as the month day of the last monday */ wd = (end_dow - dow); if (wd < 0){ wd = wd+ 7; } wd = days_in_month - wd; wd = wd + pos * 7; } return wd; } static int is_day_in_byday(icalrecur_iterator* impl,struct icaltimetype tt){ int idx; for(idx = 0; BYDAYPTR[idx] != ICAL_RECURRENCE_ARRAY_MAX; idx++){ int dow = icalrecurrencetype_day_day_of_week(BYDAYPTR[idx]); int pos = icalrecurrencetype_day_position(BYDAYPTR[idx]); int this_dow = icaltime_day_of_week(tt); if( (pos == 0 && dow == this_dow ) || /* Just a dow, like "TU" or "FR" */ (nth_weekday(dow,pos,tt) == tt.day)){ /*pos+wod: "3FR" or -1TU" */ return 1; } } return 0; } int check_set_position(icalrecur_iterator* impl, int set_pos) { int i; int found = 0; for (i = 0; impl->rule.by_set_pos[i] != ICAL_RECURRENCE_ARRAY_MAX && i != ICAL_BY_SETPOS_SIZE; i++){ if (impl->rule.by_set_pos[i] == set_pos) { found = 1; break; } } return found; } static int next_month(icalrecur_iterator* impl) { int data_valid = 1; int this_frequency = (impl->rule.freq == ICAL_MONTHLY_RECURRENCE); assert( has_by_data(impl,BY_MONTH) || this_frequency); /* Iterate through the occurrences within a day. If we don't get to the end of the intra-day data, don't bother going to the next month */ if (next_hour(impl) == 0){ return data_valid; /* Signal that the data is valid */ } /* Now iterate through the occurrences within a month -- by days, weeks or weekdays. */ /* * Case 1: * Rules Like: FREQ=MONTHLY;INTERVAL=1;BYDAY=FR;BYMONTHDAY=13 */ if(has_by_data(impl,BY_DAY) && has_by_data(impl,BY_MONTH_DAY)){ int day, idx,j; int days_in_month = icaltime_days_in_month(impl->last.month, impl->last.year); /* Iterate through the remaining days in the month and check if each day is listed in the BY_DAY array and in the BY_MONTHDAY array. This seems very inneficient, but I think it is the simplest way to account for both BYDAY=1FR (First friday in month) and BYDAY=FR ( every friday in month ) */ for(day = impl->last.day+1; day <= days_in_month; day++){ for(idx = 0; BYDAYPTR[idx] != ICAL_RECURRENCE_ARRAY_MAX; idx++){ for(j = 0; BYMDPTR[j]!=ICAL_RECURRENCE_ARRAY_MAX; j++){ int dow = icalrecurrencetype_day_day_of_week(BYDAYPTR[idx]); int pos = icalrecurrencetype_day_position(BYDAYPTR[idx]); int mday = BYMDPTR[j]; int this_dow; impl->last.day = day; this_dow = icaltime_day_of_week(impl->last); if( (pos == 0 && dow == this_dow && mday == day) || (nth_weekday(dow,pos,impl->last) == day && mday==day)){ goto MDEND; } } } } MDEND: if ( day > days_in_month){ impl->last.day = 1; increment_month(impl); data_valid = 0; /* signal that impl->last is invalid */ } /* * Case 2: * Rules Like: FREQ=MONTHLY;INTERVAL=1;BYDAY=FR */ } else if(has_by_data(impl,BY_DAY)){ /* For this case, the weekdays are relative to the month. BYDAY=FR -> First Friday in month, etc. */ /* This code iterates through the remaining days in the month and checks if each day is listed in the BY_DAY array. This seems very inneficient, but I think it is the simplest way to account for both BYDAY=1FR (First friday in month) and BYDAY=FR ( every friday in month ) */ int day; int days_in_month = icaltime_days_in_month(impl->last.month, impl->last.year); int set_pos_counter = 0; int set_pos_total = 0; int found = 0; assert( BYDAYPTR[0]!=ICAL_RECURRENCE_ARRAY_MAX); /* Count the past positions for the BYSETPOS calculation */ if(has_by_data(impl,BY_SET_POS)){ int last_day = impl->last.day; for(day = 1; day <= days_in_month; day++){ impl->last.day = day; if(is_day_in_byday(impl,impl->last)){ set_pos_total++; if(day <= last_day) set_pos_counter++; } } impl->last.day = last_day; } for(day = impl->last.day+1; day <= days_in_month; day++){ impl->last.day = day; if(is_day_in_byday(impl,impl->last)){ /* If there is no BYSETPOS rule, calculate only by BYDAY If there is BYSETPOS rule, take into account the occurence matches with BYDAY */ if(!has_by_data(impl,BY_SET_POS) || check_set_position(impl, ++set_pos_counter) || check_set_position(impl, set_pos_counter-set_pos_total-1)) { found = 1; break; } } } data_valid = found; if ( day > days_in_month){ impl->last.day = 1; increment_month(impl); /* Did moving to the next month put us on a valid date? if so, note that the new data is valid, if, not, mark it invalid */ if(is_day_in_byday(impl,impl->last)){ /* If there is no BYSETPOS rule or BYSETPOS=1, new data is valid */ if(!has_by_data(impl,BY_SET_POS) || check_set_position(impl,1)) data_valid = 1; } else { data_valid = 0; /* signal that impl->last is invalid */ } } /* * Case 3 * Rules Like: FREQ=MONTHLY;COUNT=10;BYMONTHDAY=-3 */ } else if (has_by_data(impl,BY_MONTH_DAY)) { int day, days_in_month; assert( BYMDPTR[0]!=ICAL_RECURRENCE_ARRAY_MAX); BYMDIDX++; /* Are we at the end of the BYDAY array? */ if (BYMDPTR[BYMDIDX] ==ICAL_RECURRENCE_ARRAY_MAX){ BYMDIDX = 0; /* Reset to 0 */ increment_month(impl); } days_in_month = icaltime_days_in_month(impl->last.month, impl->last.year); day = BYMDPTR[BYMDIDX]; if (day < 0) { day = icaltime_days_in_month(impl->last.month, impl->last.year) + day + 1; } if ( day > days_in_month){ impl->last.day = 1; /* Did moving to the next month put us on a valid date? if so, note that the new data is valid, if, not, mark it invalid */ if(is_day_in_byday(impl,impl->last)){ data_valid = 1; } else { data_valid = 0; /* signal that impl->last is invalid */ } } impl->last.day = day; } else { int days_in_month; assert( BYMDPTR[0]!=ICAL_RECURRENCE_ARRAY_MAX); impl->last.day = BYMDPTR[0]; increment_month(impl); days_in_month = icaltime_days_in_month(impl->last.month, impl->last.year); if (impl->last.day > days_in_month){ impl->last.day = days_in_month; } } return data_valid; } static int next_weekday_by_week(icalrecur_iterator* impl) { int end_of_data = 0; int start_of_week, dow; struct icaltimetype next; if (next_hour(impl) == 0){ return 0; } if(!has_by_data(impl,BY_DAY)){ return 1; } /* If we get here, we need to step to tne next day */ for (;;) { struct icaltimetype tt = icaltime_null_time(); BYDAYIDX++; /* Look at next elem in BYDAY array */ /* Are we at the end of the BYDAY array? */ if (BYDAYPTR[BYDAYIDX]==ICAL_RECURRENCE_ARRAY_MAX){ BYDAYIDX = 0; /* Reset to 0 */ end_of_data = 1; /* Signal that we're at the end */ } /* Add the day of week offset to to the start of this week, and use that to get the next day */ /* ignore position of dow ("4FR"), only use dow ("FR")*/ dow = icalrecurrencetype_day_day_of_week(BYDAYPTR[BYDAYIDX]); dow -= impl->rule.week_start; /* Set Sunday to be 0 */ if (dow < 0) { dow += 7; } tt.year = impl->last.year; tt.day = impl->last.day; tt.month = impl->last.month; start_of_week = icaltime_start_doy_week(tt, impl->rule.week_start); if(dow+start_of_week <1){ /* The selected date is in the previous year. */ if(!end_of_data){ continue; } } next = icaltime_from_day_of_year(start_of_week + dow,impl->last.year); impl->last.day = next.day; impl->last.month = next.month; impl->last.year = next.year; return end_of_data; } } static int next_week(icalrecur_iterator* impl) { int end_of_data = 0; /* Increment to the next week day, if there is data at a level less than a week */ if (next_weekday_by_week(impl) == 0){ return 0; /* Have not reached end of week yet */ } /* If we get here, we have incremented through the entire week, and can increment to the next week */ if( has_by_data(impl,BY_WEEK_NO)){ /*FREQ=WEEKLY;BYWEEK=20*/ /* Use the Week Number byrule data */ int week_no; struct icaltimetype t; impl->by_indices[BY_WEEK_NO]++; if (impl->by_ptrs[BY_WEEK_NO][impl->by_indices[BY_WEEK_NO]] ==ICAL_RECURRENCE_ARRAY_MAX){ impl->by_indices[BY_WEEK_NO] = 0; end_of_data = 1; } t = impl->last; t.month=1; /* HACK, should be setting to the date of the first week of year*/ t.day=1; week_no = impl->by_ptrs[BY_WEEK_NO][impl->by_indices[BY_WEEK_NO]]; impl->last.day += week_no*7; impl->last = icaltime_normalize(impl->last); } else { /* Jump to the next week */ increment_monthday(impl,7*impl->rule.interval); } if( has_by_data(impl,BY_WEEK_NO) && end_of_data){ increment_year(impl,1); } return end_of_data; } /** Expand the BYDAY rule part and return a pointer to a newly allocated list of days. */ static pvl_list expand_by_day(icalrecur_iterator* impl, int year) { /* Try to calculate each of the occurrences. */ int i; pvl_list days_list = pvl_newlist(); int start_dow, end_dow, end_year_day; struct icaltimetype tmp = impl->last; tmp.year= year; tmp.month = 1; tmp.day = 1; tmp.is_date = 1; /* Find the day that 1st Jan falls on, 1 (Sun) to 7 (Sat). */ start_dow = icaltime_day_of_week(tmp); /* Get the last day of the year*/ tmp.year= year; tmp.month = 12; tmp.day = 31; tmp.is_date = 1; end_dow = icaltime_day_of_week(tmp); end_year_day = icaltime_day_of_year(tmp); for(i = 0; BYDAYPTR[i] != ICAL_RECURRENCE_ARRAY_MAX; i++){ /* This is 1 (Sun) to 7 (Sat). */ int dow = icalrecurrencetype_day_day_of_week(BYDAYPTR[i]); int pos = icalrecurrencetype_day_position(BYDAYPTR[i]); if(pos == 0){ /* The day was specified without a position -- it is just a bare day of the week ( BYDAY=SU) so add all of the days of the year with this day-of-week*/ int doy, tmp_start_doy; tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1; for (doy = tmp_start_doy; doy <= end_year_day; doy += 7) pvl_push(days_list,(void*)(ptrdiff_t)doy); } else if ( pos > 0) { int first; /* First occurrence of dow in year */ if( dow >= start_dow) { first = dow - start_dow + 1; } else { first = dow - start_dow + 8; } /* Then just multiple the position times 7 to get the pos'th day in the year */ pvl_push(days_list,(void*)(first+ (pos-1) * 7)); } else { /* pos < 0 */ int last; pos = -pos; /* last occurrence of dow in year */ if( dow <= end_dow) { last = end_year_day - end_dow + dow; } else { last = end_year_day - end_dow + dow - 7; } pvl_push(days_list,(void*)(last - (pos-1) * 7)); } } return days_list; } /* For INTERVAL=YEARLY, set up the days[] array in the iterator to list all of the days of the current year that are specified in this rule. */ static int expand_year_days(icalrecur_iterator* impl, int year) { int i,j,k; int days_index=0; struct icaltimetype t; int flags; t = icaltime_null_date(); #define HBD(x) has_by_data(impl,x) memset(impl->days,ICAL_RECURRENCE_ARRAY_MAX_BYTE,sizeof(impl->days)); /* The flags and the following switch statement select which code to use to expand the yers days, based on which BY-rules are present. */ flags = (HBD(BY_DAY) ? 1<by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX; j++){ int month = impl->by_ptrs[BY_MONTH][j]; int first_week, last_week; t.month = month; t.day = 1; first_week = icaltime_week_number(t); t.day = icaltime_days_in_month(month,year); last_week = icaltime_week_number(t); for(j=first_week; jdtstart; t.year = impl->last.year; impl->days[days_index++] = (short)icaltime_day_of_year(t); break; } case 1<by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){ int month = impl->by_ptrs[BY_MONTH][j]; int doy; t = impl->dtstart; t.year = year; t.month = month; t.is_date = 1; doy = icaltime_day_of_year(t); impl->days[days_index++] = (short)doy; } break; } case 1<by_ptrs[BY_MONTH_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++) { int month_day = impl->by_ptrs[BY_MONTH_DAY][k]; int doy; t = impl->dtstart; t.day = month_day; t.year = year; t.is_date = 1; doy = icaltime_day_of_year(t); impl->days[days_index++] = (short)doy; } break; } case (1<by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){ for(k=0;impl->by_ptrs[BY_MONTH_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++) { int month = impl->by_ptrs[BY_MONTH][j]; int month_day = impl->by_ptrs[BY_MONTH_DAY][k]; int doy; t.day = month_day; t.month = month; t.year = year; t.is_date = 1; doy = icaltime_day_of_year(t); impl->days[days_index++] = (short)doy; } } break; } case 1<dtstart.day; t.month = impl->dtstart.month; t.year = year; t.is_date = 1; dow = icaltime_day_of_week(t); /* HACK Not finished */ icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); break; } case (1<days[days_index++] = day; } pvl_free(days); break; } case (1<by_ptrs[BY_MONTH][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){ int month = impl->by_ptrs[BY_MONTH][j]; int days_in_month = icaltime_days_in_month(month,year); int first_dow, last_dow, doy_offset; t.year = year; t.month = month; t.day = 1; t.is_date = 1; first_dow = icaltime_day_of_week(t); /* This holds the day offset used to calculate the day of the year from the month day. Just add the month day to this. */ doy_offset = icaltime_day_of_year(t) - 1; t.day = days_in_month; last_dow = icaltime_day_of_week(t); if(has_by_data(impl,BY_SET_POS)) { /*FREQ=YEARLY; BYDAY=TH,20MO,-10FR; BYMONTH = 12; BYSETPOS=1*/ int day; int set_pos_counter = 0; int set_pos_total = 0; int by_month_day[ICAL_BY_MONTHDAY_SIZE]; for(day = 1; day <= days_in_month; day++){ t.day = day; if(is_day_in_byday(impl,t)) by_month_day[set_pos_total++] = day; } for(set_pos_counter = 0; set_pos_counter < set_pos_total; set_pos_counter++){ if(check_set_position(impl, set_pos_counter+1) || check_set_position(impl, set_pos_counter-set_pos_total)) impl->days[days_index++] = doy_offset + by_month_day[set_pos_counter]; } } else for(k=0;impl->by_ptrs[BY_DAY][k]!=ICAL_RECURRENCE_ARRAY_MAX;k++){ short day_coded = impl->by_ptrs[BY_DAY][k]; enum icalrecurrencetype_weekday dow = icalrecurrencetype_day_day_of_week(day_coded); int pos = icalrecurrencetype_day_position(day_coded); int first_matching_day, last_matching_day, day, month_day; /* Calculate the first day in the month with the given weekday, and the last day. */ first_matching_day = ((dow + 7 - first_dow) % 7) + 1; last_matching_day = days_in_month - ((last_dow + 7 - dow) % 7); if (pos == 0) { /* Add all of instances of the weekday within the month. */ for (day = first_matching_day; day <= days_in_month; day += 7) impl->days[days_index++] = (short)(doy_offset + day); } else if (pos > 0) { /* Add the nth instance of the weekday within the month. */ month_day = first_matching_day + (pos - 1) * 7; if (month_day <= days_in_month) impl->days[days_index++] = (short)(doy_offset + month_day); } else { /* Add the -nth instance of the weekday within the month.*/ month_day = last_matching_day + (pos + 1) * 7; if (month_day > 0) impl->days[days_index++] = (short)(doy_offset + month_day); } } } break; } case (1<days[days_index++] = day; } } } pvl_free(days); break; } case (1<days[days_index++] = day; } } } } pvl_free(days); break; } case (1<days[days_index++] = day; } } } pvl_free(days); break; } case (1<by_ptrs[BY_YEAR_DAY][j]!=ICAL_RECURRENCE_ARRAY_MAX;j++){ impl->days[days_index++] = impl->by_ptrs[BY_YEAR_DAY][j]; } break; } default: { icalerror_set_errno(ICAL_UNIMPLEMENTED_ERROR); break; } } return 0; } static int next_year(icalrecur_iterator* impl) { struct icaltimetype next; if (next_hour(impl) == 0){ return 0; } if (impl->days[++impl->days_index] == ICAL_RECURRENCE_ARRAY_MAX){ impl->days_index = 0; for (;;) { increment_year(impl,impl->rule.interval); expand_year_days(impl,impl->last.year); if (impl->days[0] != ICAL_RECURRENCE_ARRAY_MAX) break; } } next = icaltime_from_day_of_year(impl->days[impl->days_index], impl->last.year); impl->last.day = next.day; impl->last.month = next.month; return 1; } int icalrecur_check_rulepart(icalrecur_iterator* impl, int v, enum byrule byrule) { int itr; if(impl->by_ptrs[byrule][0]!=ICAL_RECURRENCE_ARRAY_MAX){ for(itr=0; impl->by_ptrs[byrule][itr]!=ICAL_RECURRENCE_ARRAY_MAX;itr++){ if(impl->by_ptrs[byrule][itr] == v){ return 1; } } } return 0; } static int check_contract_restriction(icalrecur_iterator* impl, enum byrule byrule, int v) { int pass = 0; int itr; icalrecurrencetype_frequency freq = impl->rule.freq; if(impl->by_ptrs[byrule][0]!=ICAL_RECURRENCE_ARRAY_MAX && expand_map[freq].map[byrule] == CONTRACT){ for(itr=0; impl->by_ptrs[byrule][itr]!=ICAL_RECURRENCE_ARRAY_MAX;itr++){ if(impl->by_ptrs[byrule][itr] == v){ pass=1; break; } } return pass; } else { /* This is not a contracting byrule, or it has no data, so the test passes*/ return 1; } } static int check_contracting_rules(icalrecur_iterator* impl) { int day_of_week = icaltime_day_of_week(impl->last); int week_no = icaltime_week_number(impl->last); int year_day = icaltime_day_of_year(impl->last); if ( check_contract_restriction(impl,BY_SECOND, impl->last.second) && check_contract_restriction(impl,BY_MINUTE, impl->last.minute) && check_contract_restriction(impl,BY_HOUR, impl->last.hour) && check_contract_restriction(impl,BY_DAY, day_of_week) && check_contract_restriction(impl,BY_WEEK_NO, week_no) && check_contract_restriction(impl,BY_MONTH_DAY, impl->last.day) && check_contract_restriction(impl,BY_MONTH, impl->last.month) && check_contract_restriction(impl,BY_YEAR_DAY, year_day) ) { return 1; } else { return 0; } } struct icaltimetype icalrecur_iterator_next(icalrecur_iterator *impl) { int valid = 1; if( !impl || (impl->rule.count!=0 &&impl->occurrence_no >= impl->rule.count) || (!icaltime_is_null_time(impl->rule.until) && icaltime_compare(impl->last,impl->rule.until) > 0)) { return icaltime_null_time(); } if(impl->occurrence_no == 0 && icaltime_compare(impl->last,impl->dtstart) >= 0){ impl->occurrence_no++; return impl->last; } do { valid = 1; switch(impl->rule.freq){ case ICAL_SECONDLY_RECURRENCE: { next_second(impl); break; } case ICAL_MINUTELY_RECURRENCE: { next_minute(impl); break; } case ICAL_HOURLY_RECURRENCE: { next_hour(impl); break; } case ICAL_DAILY_RECURRENCE: { next_day(impl); break; } case ICAL_WEEKLY_RECURRENCE: { next_week(impl); break; } case ICAL_MONTHLY_RECURRENCE: { valid = next_month(impl); break; } case ICAL_YEARLY_RECURRENCE:{ next_year(impl); break; } default:{ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return icaltime_null_time(); } } if(impl->last.year >= 2038 ){ /* HACK */ return icaltime_null_time(); } } while(!check_contracting_rules(impl) || icaltime_compare(impl->last,impl->dtstart) < 0 || valid == 0); /* Ignore null times and times that are after the until time */ if( !icaltime_is_null_time(impl->rule.until) && icaltime_compare(impl->last,impl->rule.until) > 0 ) { return icaltime_null_time(); } impl->occurrence_no++; return impl->last; } /************************** Type Routines **********************/ void icalrecurrencetype_clear(struct icalrecurrencetype *recur) { memset(recur,ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(struct icalrecurrencetype)); recur->week_start = ICAL_MONDAY_WEEKDAY; recur->freq = ICAL_NO_RECURRENCE; recur->interval = 1; memset(&(recur->until),0,sizeof(struct icaltimetype)); recur->count = 0; } /** The 'day' element of icalrecurrencetype_weekday is encoded to * allow representation of both the day of the week ( Monday, Tueday), * but also the Nth day of the week ( First tuesday of the month, last * thursday of the year) These routines decode the day values. * * The day's position in the period ( Nth-ness) and the numerical * value of the day are encoded together as: pos*7 + dow * * A position of 0 means 'any' or 'every' */ enum icalrecurrencetype_weekday icalrecurrencetype_day_day_of_week(short day) { return abs(day)%8; } int icalrecurrencetype_day_position(short day) { int wd, pos; wd = icalrecurrencetype_day_day_of_week(day); pos = (abs(day)-wd)/8 * ((day<0)?-1:1); return pos; } /****************** Enumeration Routines ******************/ static struct {icalrecurrencetype_weekday wd; const char * str; } wd_map[] = { {ICAL_SUNDAY_WEEKDAY,"SU"}, {ICAL_MONDAY_WEEKDAY,"MO"}, {ICAL_TUESDAY_WEEKDAY,"TU"}, {ICAL_WEDNESDAY_WEEKDAY,"WE"}, {ICAL_THURSDAY_WEEKDAY,"TH"}, {ICAL_FRIDAY_WEEKDAY,"FR"}, {ICAL_SATURDAY_WEEKDAY,"SA"}, {ICAL_NO_WEEKDAY,0} }; const char* icalrecur_weekday_to_string(icalrecurrencetype_weekday kind) { int i; for (i=0; wd_map[i].wd != ICAL_NO_WEEKDAY; i++) { if ( wd_map[i].wd == kind) { return wd_map[i].str; } } return 0; } icalrecurrencetype_weekday icalrecur_string_to_weekday(const char* str) { int i; for (i=0; wd_map[i].wd != ICAL_NO_WEEKDAY; i++) { if ( strcasecmp(str,wd_map[i].str) == 0){ return wd_map[i].wd; } } return ICAL_NO_WEEKDAY; } static struct { icalrecurrencetype_frequency kind; const char* str; } freq_map[] = { {ICAL_SECONDLY_RECURRENCE,"SECONDLY"}, {ICAL_MINUTELY_RECURRENCE,"MINUTELY"}, {ICAL_HOURLY_RECURRENCE,"HOURLY"}, {ICAL_DAILY_RECURRENCE,"DAILY"}, {ICAL_WEEKLY_RECURRENCE,"WEEKLY"}, {ICAL_MONTHLY_RECURRENCE,"MONTHLY"}, {ICAL_YEARLY_RECURRENCE,"YEARLY"}, {ICAL_NO_RECURRENCE,0} }; const char* icalrecur_freq_to_string(icalrecurrencetype_frequency kind) { int i; for (i=0; freq_map[i].kind != ICAL_NO_RECURRENCE ; i++) { if ( freq_map[i].kind == kind ) { return freq_map[i].str; } } return 0; } icalrecurrencetype_frequency icalrecur_string_to_freq(const char* str) { int i; for (i=0; freq_map[i].kind != ICAL_NO_RECURRENCE ; i++) { if ( strcasecmp(str,freq_map[i].str) == 0){ return freq_map[i].kind; } } return ICAL_NO_RECURRENCE; } /** Fill an array with the 'count' number of occurrences generated by * the rrule. Note that the times are returned in UTC, but the times * are calculated in local time. YOu will have to convert the results * back into local time before using them. */ int icalrecur_expand_recurrence(char* rule, time_t start, int count, time_t* array) { struct icalrecurrencetype recur; icalrecur_iterator* ritr; time_t tt; struct icaltimetype icstart, next; int i = 0; memset(array, 0, count*sizeof(time_t)); icstart = icaltime_from_timet_with_zone(start,0,0); recur = icalrecurrencetype_from_string(rule); ritr = icalrecur_iterator_new(recur,icstart); if(ritr) { for(next = icalrecur_iterator_next(ritr); !icaltime_is_null_time(next) && i < count; next = icalrecur_iterator_next(ritr)){ tt = icaltime_as_timet(next); if (tt >= start ){ array[i++] = tt; } } icalrecur_iterator_free(ritr); } return 1; } libical-1.0/src/libical/icalattach.c0000664000076400007640000000645612132563132016373 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalattach.c CREATOR: acampi 28 May 02 $Id: icalattach.c,v 1.3 2007-04-30 13:57:47 artcancro Exp $ $Locker: $ (C) COPYRIGHT 2000, Andrea Campi This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icaltypes.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icaltypes.h" #include "icalerror.h" #include "icalmemory.h" #include "icalattachimpl.h" #include /* for malloc and abs() */ #include /* for errno */ #include /* for icalmemory_strdup */ #include icalattach * icalattach_new_from_url (const char *url) { icalattach *attach; char *url_copy; icalerror_check_arg_rz ((url != NULL), "url"); if ((attach = malloc (sizeof (icalattach))) == NULL) { errno = ENOMEM; return NULL; } if ((url_copy = strdup (url)) == NULL) { free (attach); errno = ENOMEM; return NULL; } attach->refcount = 1; attach->is_url = 1; attach->u.url.url = url_copy; return attach; } icalattach * icalattach_new_from_data (const char *data, icalattach_free_fn_t free_fn, void *free_fn_data) { icalattach *attach; char *data_copy; icalerror_check_arg_rz ((data != NULL), "data"); if ((attach = malloc (sizeof (icalattach))) == NULL) { errno = ENOMEM; return NULL; } if ((data_copy = strdup (data)) == NULL) { free (attach); errno = ENOMEM; return NULL; } attach->refcount = 1; attach->is_url = 0; attach->u.data.data = data_copy; attach->u.data.free_fn = free_fn; attach->u.data.free_fn_data = free_fn_data; return attach; } void icalattach_ref (icalattach *attach) { icalerror_check_arg_rv ((attach != NULL), "attach"); icalerror_check_arg_rv ((attach->refcount > 0), "attach->refcount > 0"); attach->refcount++; } void icalattach_unref (icalattach *attach) { icalerror_check_arg_rv ((attach != NULL), "attach"); icalerror_check_arg_rv ((attach->refcount > 0), "attach->refcount > 0"); attach->refcount--; if (attach->refcount != 0) return; if (attach->is_url) { free (attach->u.url.url); } else { free (attach->u.data.data); /* unused for now if (attach->u.data.free_fn) (* attach->u.data.free_fn) (attach->u.data.data, attach->u.data.free_fn_data); */ } free (attach); } int icalattach_get_is_url (icalattach *attach) { icalerror_check_arg_rz ((attach != NULL), "attach"); return attach->is_url ? 1 : 0; } const char * icalattach_get_url (icalattach *attach) { icalerror_check_arg_rz ((attach != NULL), "attach"); icalerror_check_arg_rz ((attach->is_url), "attach->is_url"); return attach->u.url.url; } unsigned char * icalattach_get_data (icalattach *attach) { icalerror_check_arg_rz ((attach != NULL), "attach"); icalerror_check_arg_rz ((!attach->is_url), "!attach->is_url"); return attach->u.data.data; } libical-1.0/src/libical/icalmime.c0000664000076400007640000002416312132563132016051 0ustar allenallen/* -*- Mode: C -*-*/ /*====================================================================== FILE: icalmime.c CREATOR: eric 26 July 2000 $Id: icalmime.c,v 1.14 2008-01-29 22:25:05 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #include "icalmime.h" #include "icalerror.h" #include "icalmemory.h" #include "sspm.h" #include "stdlib.h" #include /* For strdup */ #include /* for snprintf*/ #ifdef DMALLOC #include "dmalloc.h" #endif #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif /* These *_part routines are called by the MIME parser via the local_action_map */ struct text_part { char* buf; char* buf_pos; size_t buf_size; }; void* icalmime_text_new_part(void) { #define BUF_SIZE 2048 struct text_part* impl; if ( ( impl = (struct text_part*) malloc(sizeof(struct text_part))) == 0) { return 0; } impl->buf = icalmemory_new_buffer(BUF_SIZE); impl->buf_pos = impl->buf; impl->buf_size = BUF_SIZE; return impl; } void icalmime_text_add_line(void *part, struct sspm_header *header, const char* line, size_t size) { struct text_part* impl = (struct text_part*) part; (void)header; (void)size; icalmemory_append_string(&(impl->buf),&(impl->buf_pos), &(impl->buf_size),line); } void* icalmime_textcalendar_end_part(void* part) { struct text_part* impl = (struct text_part*) part; icalcomponent *c = icalparser_parse_string(impl->buf); icalmemory_free_buffer(impl->buf); free(impl); return c; } void* icalmime_text_end_part_r(void* part) { char *buf; struct text_part* impl = ( struct text_part*) part; buf = impl->buf; free(impl); return buf; } void* icalmime_text_end_part(void* part) { void *buf; buf = icalmime_text_end_part_r(part); icalmemory_add_tmp_buffer(buf); return buf; } void icalmime_text_free_part(void *part) { part = part; } /* Ignore Attachments for now */ void* icalmime_attachment_new_part(void) { return 0; } void icalmime_attachment_add_line(void *part, struct sspm_header *header, const char* line, size_t size) { (void)part; (void)header; (void)line; (void)size; } void* icalmime_attachment_end_part(void* part) { (void)part; return 0; } void icalmime_attachment_free_part(void *part) { (void)part; } static const struct sspm_action_map icalmime_local_action_map[] = { {SSPM_TEXT_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_textcalendar_end_part,icalmime_text_free_part}, {SSPM_TEXT_MAJOR_TYPE,SSPM_ANY_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_text_end_part_r,icalmime_text_free_part}, {SSPM_TEXT_MAJOR_TYPE,SSPM_PLAIN_MINOR_TYPE,icalmime_text_new_part,icalmime_text_add_line,icalmime_text_end_part_r,icalmime_text_free_part}, {SSPM_APPLICATION_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, {SSPM_IMAGE_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, {SSPM_AUDIO_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, {SSPM_IMAGE_MAJOR_TYPE,SSPM_CALENDAR_MINOR_TYPE,icalmime_attachment_new_part,icalmime_attachment_add_line,icalmime_attachment_end_part,icalmime_attachment_free_part}, {SSPM_UNKNOWN_MAJOR_TYPE,SSPM_UNKNOWN_MINOR_TYPE,0,0,0,0} }; #define NUM_PARTS 100 /* HACK. Hard Limit */ struct sspm_part* icalmime_make_part(icalcomponent* comp) { comp = comp; return 0; } char* icalmime_as_mime_string(char* icalcomponent); icalcomponent* icalmime_parse(char* (*get_string)(char *s, size_t size, void *d), void *data) { struct sspm_part *parts; int i, last_level=0; icalcomponent *root=0, *parent=0, *comp=0, *last = 0; if ( (parts = (struct sspm_part *) malloc(NUM_PARTS*sizeof(struct sspm_part)))==0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } memset(parts,0,sizeof(NUM_PARTS*sizeof(struct sspm_part))); sspm_parse_mime(parts, NUM_PARTS, /* Max parts */ icalmime_local_action_map, /* Actions */ get_string, data, /* data for get_string*/ 0 /* First header */); for(i = 0; i last_level){ parent = last; icalcomponent_add_component(parent,comp); } else if (parts[i].level < last_level){ if (parent) parent = icalcomponent_get_parent(parent); icalcomponent_add_component(parent,comp); } else { assert(0); } last = comp; last_level = parts[i].level; assert(parts[i].data == 0); } sspm_free_parts(parts,NUM_PARTS); free(parts); return root; } int icalmime_test(char* (*get_string)(char *s, size_t size, void *d), void *data) { char *out; struct sspm_part *parts; int i; if ( (parts = (struct sspm_part *) malloc(NUM_PARTS*sizeof(struct sspm_part)))==0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } memset(parts,0,sizeof(NUM_PARTS*sizeof(struct sspm_part))); sspm_parse_mime(parts, NUM_PARTS, /* Max parts */ icalmime_local_action_map, /* Actions */ get_string, data, /* data for get_string*/ 0 /* First header */); for(i = 0; i * * Copyright 2007, Novell, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef ICALTZUTIL_H #define ICALTZUTIL_H #include #include "icaltime.h" #include "icalcomponent.h" #if defined(sun) && defined(__SVR4) #define ZONES_TAB_SYSTEM_FILENAME "tab/zone_sun.tab" #else #define ZONES_TAB_SYSTEM_FILENAME "zone.tab" #endif const char *icaltzutil_get_zone_directory (void); icalcomponent *icaltzutil_fetch_timezone (const char *location); #endif libical-1.0/src/libical/icallangbind.h0000664000076400007640000000411212132563132016675 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icallangbind.h CREATOR: eric 25 jan 2001 DESCRIPTION: $Id: icallangbind.h,v 1.8 2008-01-02 20:07:31 dothebart Exp $ $Locker: $ (C) COPYRIGHT 1999 Eric Busboom http://www.softwarestudio.org This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified under the same terms as perl itself. ( Either the Artistic License or the GPL. ) ======================================================================*/ #ifndef __ICALLANGBIND_H__ #define __ICALLANGBIND_H__ int* icallangbind_new_array(int size); void icallangbind_free_array(int* array); int icallangbind_access_array(int* array, int index); icalproperty* icallangbind_get_property(icalcomponent *c, int n, const char* prop); const char* icallangbind_get_property_val(icalproperty* p); const char* icallangbind_get_parameter(icalproperty *p, const char* parameter); icalcomponent* icallangbind_get_component(icalcomponent *c, const char* comp); icalproperty* icallangbind_get_first_property(icalcomponent *c, const char* prop); icalproperty* icallangbind_get_next_property(icalcomponent *c, const char* prop); icalcomponent* icallangbind_get_first_component(icalcomponent *c, const char* comp); icalcomponent* icallangbind_get_next_component(icalcomponent *c, const char* comp); icalparameter* icallangbind_get_first_parameter(icalproperty *prop); icalparameter* icallangbind_get_next_parameter(icalproperty *prop); const char* icallangbind_property_eval_string(icalproperty* prop, char* sep); char* icallangbind_property_eval_string_r(icalproperty* prop, char* sep); int icallangbind_string_to_open_flag(const char* str); const char* icallangbind_quote_as_ical(const char* str); char* icallangbind_quote_as_ical_r(const char* str); #endif /*__ICALLANGBIND_H__*/ libical-1.0/src/libical/icaltypes.c0000664000076400007640000001232412132563132016262 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icaltypes.c CREATOR: eric 16 May 1999 $Id: icaltypes.c,v 1.18 2008-01-15 23:17:42 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icaltypes.c ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icaltypes.h" #include "icalerror.h" #include "icalmemory.h" #include /* for malloc and abs() */ #include /* for errno */ #include /* for icalmemory_strdup */ #include #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif #define TEMP_MAX 1024 #ifdef HAVE_PTHREAD #include static pthread_mutex_t unk_token_mutex = PTHREAD_MUTEX_INITIALIZER; #endif static ical_unknown_token_handling unknownTokenHandling = ICAL_TREAT_AS_ERROR; int icaltriggertype_is_null_trigger(struct icaltriggertype tr) { if(icaltime_is_null_time(tr.time) && icaldurationtype_is_null_duration(tr.duration)){ return 1; } return 0; } int icaltriggertype_is_bad_trigger(struct icaltriggertype tr) { if(icaldurationtype_is_bad_duration(tr.duration)){ return 1; } return 0; } struct icaltriggertype icaltriggertype_from_int(const int reltime) { struct icaltriggertype tr; tr.time = icaltime_null_time(); tr.duration = icaldurationtype_from_int(reltime); return tr; } struct icaltriggertype icaltriggertype_from_string(const char* str) { struct icaltriggertype tr; icalerrorstate es = ICAL_ERROR_DEFAULT; icalerrorenum e; tr.time= icaltime_null_time(); tr.duration = icaldurationtype_from_int(0); /* Suppress errors so a failure in icaltime_from_string() does not cause an abort */ es = icalerror_get_error_state(ICAL_MALFORMEDDATA_ERROR); if(str == 0) goto error; icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,ICAL_ERROR_NONFATAL); e = icalerrno; icalerror_set_errno(ICAL_NO_ERROR); tr.time = icaltime_from_string(str); if (icaltime_is_null_time(tr.time)){ tr.duration = icaldurationtype_from_string(str); if (icaldurationtype_is_bad_duration(tr.duration)) goto error; } icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); icalerror_set_errno(e); return tr; error: icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR,es); icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return tr; } struct icalreqstattype icalreqstattype_from_string(const char* str) { const char *p1,*p2; struct icalreqstattype stat; short major=0, minor=0; icalerror_check_arg((str != 0),"str"); stat.code = ICAL_UNKNOWN_STATUS; stat.debug = 0; stat.desc = 0; /* Get the status numbers */ sscanf(str, "%hd.%hd",&major, &minor); if (major <= 0 || minor < 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return stat; } stat.code = icalenum_num_to_reqstat(major, minor); if (stat.code == ICAL_UNKNOWN_STATUS){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); return stat; } p1 = strchr(str,';'); if (p1 == 0){ /* icalerror_set_errno(ICAL_BADARG_ERROR);*/ return stat; } /* Just ignore the second clause; it will be taken from inside the library */ p2 = strchr(p1+1,';'); if (p2 != 0 && *p2 != 0){ stat.debug = p2+1; } return stat; } const char* icalreqstattype_as_string(struct icalreqstattype stat) { char *buf; buf = icalreqstattype_as_string_r(stat); icalmemory_add_tmp_buffer(buf); return buf; } char* icalreqstattype_as_string_r(struct icalreqstattype stat) { char *temp; icalerror_check_arg_rz((stat.code != ICAL_UNKNOWN_STATUS),"Status"); temp = (char*)icalmemory_new_buffer(TEMP_MAX); if (stat.desc == 0){ stat.desc = icalenum_reqstat_desc(stat.code); } if(stat.debug != 0){ snprintf(temp,TEMP_MAX,"%d.%d;%s;%s", icalenum_reqstat_major(stat.code), icalenum_reqstat_minor(stat.code), stat.desc, stat.debug); } else { snprintf(temp,TEMP_MAX,"%d.%d;%s", icalenum_reqstat_major(stat.code), icalenum_reqstat_minor(stat.code), stat.desc); } return temp; } ical_unknown_token_handling ical_get_unknown_token_handling_setting(void) { ical_unknown_token_handling myHandling; #ifdef HAVE_PTHREAD pthread_mutex_lock (&unk_token_mutex); #endif myHandling = unknownTokenHandling; #ifdef HAVE_PTHREAD pthread_mutex_unlock (&unk_token_mutex); #endif return myHandling; } void ical_set_unknown_token_handling_setting(ical_unknown_token_handling newSetting) { #ifdef HAVE_PTHREAD pthread_mutex_lock (&unk_token_mutex); #endif unknownTokenHandling = newSetting; #ifdef HAVE_PTHREAD pthread_mutex_unlock (&unk_token_mutex); #endif } libical-1.0/src/libical/icalrestriction.c.in0000664000076400007640000003174212132563130020073 0ustar allenallen/* -*- Mode: C -*- */ /* ====================================================================== File: icalrestriction.c This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org ======================================================================*/ /*#line 7 "icalrestriction.c.in"*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalrestriction.h" #include "icalenums.h" #include "icalerror.h" #include #include #if defined(_MSC_VER) #define snprintf _snprintf #endif #define TMP_BUF_SIZE 1024 /* Define the structs for the restrictions. these data are filled out in machine generated code below */ struct icalrestriction_property_record; typedef const char* (*restriction_func)(const struct icalrestriction_property_record* rec,icalcomponent* comp,icalproperty* prop); typedef struct icalrestriction_property_record { icalproperty_method method; icalcomponent_kind component; icalproperty_kind property; icalrestriction_kind restriction; restriction_func function; } icalrestriction_property_record; typedef struct icalrestriction_component_record { icalproperty_method method; icalcomponent_kind component; icalcomponent_kind subcomponent; icalrestriction_kind restriction; restriction_func function; } icalrestriction_component_record; static const icalrestriction_property_record* icalrestriction_get_property_restriction(icalproperty_method method, icalcomponent_kind component, icalproperty_kind property); static const icalrestriction_component_record* icalrestriction_get_component_restriction(icalproperty_method method, icalcomponent_kind component, icalcomponent_kind subcomponent); icalrestriction_property_record null_prop_record = {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_UNKNOWN,0}; icalrestriction_component_record null_comp_record = {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_UNKNOWN,0}; /** Each row gives the result of comparing a restriction against a count. The columns in each row represent 0,1,2+. '-1' indicates 'invalid, 'don't care' or 'needs more analysis' So, for ICAL_RESTRICTION_ONE, if there is 1 of a property with that restriction, it passes, but if there are 0 or 2+, it fails. */ char compare_map[ICAL_RESTRICTION_UNKNOWN+1][3] = { { 1, 1, 1},/*ICAL_RESTRICTION_NONE*/ { 1, 0, 0},/*ICAL_RESTRICTION_ZERO*/ { 0, 1, 0},/*ICAL_RESTRICTION_ONE*/ { 1, 1, 1},/*ICAL_RESTRICTION_ZEROPLUS*/ { 0, 1, 1},/*ICAL_RESTRICTION_ONEPLUS*/ { 1, 1, 0},/*ICAL_RESTRICTION_ZEROORONE*/ { 1, 1, 0},/*ICAL_RESTRICTION_ONEEXCLUSIVE*/ { 1, 1, 0},/*ICAL_RESTRICTION_ONEMUTUAL*/ { 1, 1, 1} /*ICAL_RESTRICTION_UNKNOWN*/ }; const char restr_string_map[ICAL_RESTRICTION_UNKNOWN+1][60] = { "unknown number",/*ICAL_RESTRICTION_NONE*/ "0",/*ICAL_RESTRICTION_ZERO*/ "1",/*ICAL_RESTRICTION_ONE*/ "zero or more",/*ICAL_RESTRICTION_ZEROPLUS*/ "one or more" ,/*ICAL_RESTRICTION_ONEPLUS*/ "zero or one",/*ICAL_RESTRICTION_ZEROORONE*/ "zero or one, exclusive with another property",/*ICAL_RESTRICTION_ONEEXCLUSIVE*/ "zero or one, mutual with another property",/*ICAL_RESTRICTION_ONEMUTUAL*/ "unknown number" /*ICAL_RESTRICTION_UNKNOWN*/ }; int icalrestriction_compare(icalrestriction_kind restr, int count){ /* restr is an unsigned int, ICAL_RESTRICTION_NONE == 0, so the check will always return false */ if ( /*restr < ICAL_RESTRICTION_NONE ||*/ restr > ICAL_RESTRICTION_UNKNOWN || count < 0){ return -1; } if (count > 2) { count = 2; } return compare_map[restr][count]; } /* Special case routines */ const char* icalrestriction_may_be_draft_final_canceled( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_status stat = icalproperty_get_status(prop); (void)rec; (void)comp; if( !( stat == ICAL_STATUS_DRAFT || stat == ICAL_STATUS_FINAL || stat == ICAL_STATUS_CANCELLED )){ return "Failed iTIP restrictions for STATUS property. Value must be one of DRAFT, FINAL, or CANCELED"; } return 0; } const char* icalrestriction_may_be_comp_need_process( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_status stat = icalproperty_get_status(prop); (void)rec; (void)comp; if( !( stat == ICAL_STATUS_COMPLETED || stat == ICAL_STATUS_NEEDSACTION || stat == ICAL_STATUS_INPROCESS )){ return "Failed iTIP restrictions for STATUS property. Value must be one of COMPLETED, NEEDS-ACTION or IN-PROCESS"; } return 0; } const char* icalrestriction_may_be_tent_conf(const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_status stat = icalproperty_get_status(prop); (void)rec; (void)comp; if( !( stat == ICAL_STATUS_TENTATIVE || stat == ICAL_STATUS_CONFIRMED )){ return "Failed iTIP restrictions for STATUS property. Value must be one of TENTATIVE or CONFIRMED"; } return 0; } const char* icalrestriction_may_be_tent_conf_cancel( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_status stat = icalproperty_get_status(prop); (void)rec; (void)comp; if( !( stat == ICAL_STATUS_TENTATIVE || stat == ICAL_STATUS_CONFIRMED || stat == ICAL_STATUS_CANCELLED )){ return "Failed iTIP restrictions for STATUS property. Value must be one of TENTATIVE, CONFIRMED or CANCELED"; } return 0; } const char* icalrestriction_must_be_cancel_if_present( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { /* This routine will not be called if prop == 0 */ icalproperty_status stat = icalproperty_get_status(prop); (void)rec; (void)comp; if( stat != ICAL_STATUS_CANCELLED) { return "Failed iTIP restrictions for STATUS property. Value must be CANCELLED"; } return 0; } const char* icalrestriction_must_be_canceled_no_attendee( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { (void)rec; (void)comp; (void)prop; /* Hack. see rfc2446, 3.2.5 CANCEL for porperty STATUS. I don't understand the note */ return 0; } const char* icalrestriction_must_be_recurring( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ /* Hack */ (void)rec; (void)comp; (void)prop; return 0; } const char* icalrestriction_must_have_duration( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { if( !icalcomponent_get_first_property(comp,ICAL_DURATION_PROPERTY)){ return "Failed iTIP restrictions for DURATION property. This component must have a DURATION property"; } return 0; } const char* icalrestriction_must_have_repeat( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { (void)rec; (void)prop; if( !icalcomponent_get_first_property(comp,ICAL_REPEAT_PROPERTY)){ return "Failed iTIP restrictions for REPEAT property. This component must have a REPEAT property"; } return 0; } const char* icalrestriction_must_if_tz_ref( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop){ /* Hack */ (void)rec; (void)comp; (void)prop; return 0; } const char* icalrestriction_no_dtend( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { (void)rec; (void)prop; if(icalcomponent_get_first_property(comp,ICAL_DTEND_PROPERTY)){ return "Failed iTIP restrictions for DTEND property. The component must not have both DURATION and DTEND"; } return 0; } const char* icalrestriction_no_duration( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { (void)rec; (void)comp; (void)prop; /* _no_dtend takes care of this one */ return 0; } const char* icalrestriction_must_be_email( const icalrestriction_property_record *rec, icalcomponent* comp, icalproperty* prop) { icalproperty_action stat = icalproperty_get_action(prop); (void)rec; (void)comp; if( !( stat == ICAL_ACTION_EMAIL)){ return "Failed iTIP restrictions for ACTION property. Value must be EMAIL."; } return 0; } int icalrestriction_check_component(icalproperty_method method, icalcomponent* comp) { icalproperty_kind kind; icalcomponent_kind comp_kind; icalrestriction_kind restr; const icalrestriction_property_record *prop_record; const char* funcr = 0; icalproperty *prop; int count; int compare; int valid = 1; comp_kind = icalcomponent_isa(comp); /* Check all of the properties in this component */ for(kind = ICAL_ANY_PROPERTY+1; kind != ICAL_NO_PROPERTY; kind++){ count = icalcomponent_count_properties(comp, kind); prop_record = icalrestriction_get_property_restriction(method, comp_kind, kind); restr = prop_record->restriction; if(restr == ICAL_RESTRICTION_ONEEXCLUSIVE || restr == ICAL_RESTRICTION_ONEMUTUAL) { /* First treat is as a 0/1 restriction */ restr = ICAL_RESTRICTION_ZEROORONE; compare = icalrestriction_compare(restr,count); } else { compare = icalrestriction_compare(restr,count); } assert(compare != -1); if (compare == 0){ char temp[TMP_BUF_SIZE]; snprintf(temp, TMP_BUF_SIZE,"Failed iTIP restrictions for %s property. Expected %s instances of the property and got %d", icalenum_property_kind_to_string(kind), restr_string_map[restr], count); icalcomponent_add_property (comp, icalproperty_vanew_xlicerror( temp, icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP), 0)); } prop = icalcomponent_get_first_property(comp, kind); if (prop != 0 && prop_record->function !=0 ){ funcr = prop_record->function(prop_record,comp,prop); } if(funcr !=0){ icalcomponent_add_property (comp, icalproperty_vanew_xlicerror( funcr, icalparameter_new_xlicerrortype( ICAL_XLICERRORTYPE_INVALIDITIP), 0)); compare = 0; } valid = valid && compare; } return valid; } int icalrestriction_check(icalcomponent* outer_comp) { icalcomponent_kind comp_kind; icalproperty_method method; icalcomponent* inner_comp; icalproperty *method_prop; int valid; icalerror_check_arg_rz( (outer_comp!=0), "outer comp"); /* Get the Method value from the outer component */ comp_kind = icalcomponent_isa(outer_comp); if (comp_kind != ICAL_VCALENDAR_COMPONENT){ icalerror_set_errno(ICAL_BADARG_ERROR); return 0; } method_prop = icalcomponent_get_first_property(outer_comp, ICAL_METHOD_PROPERTY); if (method_prop == 0){ method = ICAL_METHOD_NONE; } else { method = icalproperty_get_method(method_prop); } /* Check the VCALENDAR wrapper */ valid = icalrestriction_check_component(ICAL_METHOD_NONE,outer_comp); /* Now check the inner components */ for(inner_comp= icalcomponent_get_first_component(outer_comp, ICAL_ANY_COMPONENT); inner_comp != 0; inner_comp= icalcomponent_get_next_component(outer_comp, ICAL_ANY_COMPONENT)){ valid = valid && icalrestriction_check_component(method,inner_comp); } return valid; } static const icalrestriction_property_record* icalrestriction_get_property_restriction(icalproperty_method method, icalcomponent_kind component, icalproperty_kind property) { int i; for(i = 0; icalrestriction_property_records[i].restriction != ICAL_RESTRICTION_NONE; i++){ if (method == icalrestriction_property_records[i].method && component == icalrestriction_property_records[i].component && property == icalrestriction_property_records[i].property ){ return &icalrestriction_property_records[i]; } } return &null_prop_record; } static const icalrestriction_component_record* icalrestriction_get_component_restriction(icalproperty_method method, icalcomponent_kind component, icalcomponent_kind subcomponent) { int i; for(i = 0; icalrestriction_component_records[i].restriction != ICAL_RESTRICTION_NONE; i++){ if (method == icalrestriction_component_records[i].method && component == icalrestriction_component_records[i].component && subcomponent == icalrestriction_component_records[i].subcomponent ){ return &icalrestriction_component_records[i]; } } return &null_comp_record; } libical-1.0/src/libical/icalenums.h0000664000076400007640000001272012132563132016252 0ustar allenallen /* -*- Mode: C -*-*/ /*====================================================================== FILE: icalenums.h (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalenums.h Contributions from: Graham Davison ======================================================================*/ #ifndef ICALENUMS_H #define ICALENUMS_H /*********************************************************************** * Component enumerations **********************************************************************/ typedef enum icalcomponent_kind { ICAL_NO_COMPONENT, ICAL_ANY_COMPONENT, /* Used to select all components*/ ICAL_XROOT_COMPONENT, ICAL_XATTACH_COMPONENT, /* MIME attached data, returned by parser. */ ICAL_VEVENT_COMPONENT, ICAL_VTODO_COMPONENT, ICAL_VJOURNAL_COMPONENT, ICAL_VCALENDAR_COMPONENT, ICAL_VAGENDA_COMPONENT, ICAL_VFREEBUSY_COMPONENT, ICAL_VALARM_COMPONENT, ICAL_XAUDIOALARM_COMPONENT, ICAL_XDISPLAYALARM_COMPONENT, ICAL_XEMAILALARM_COMPONENT, ICAL_XPROCEDUREALARM_COMPONENT, ICAL_VTIMEZONE_COMPONENT, ICAL_XSTANDARD_COMPONENT, ICAL_XDAYLIGHT_COMPONENT, ICAL_X_COMPONENT, ICAL_VSCHEDULE_COMPONENT, ICAL_VQUERY_COMPONENT, ICAL_VREPLY_COMPONENT, ICAL_VCAR_COMPONENT, ICAL_VCOMMAND_COMPONENT, ICAL_XLICINVALID_COMPONENT, ICAL_XLICMIMEPART_COMPONENT /* a non-stardard component that mirrors structure of MIME data */ } icalcomponent_kind; /*********************************************************************** * Request Status codes **********************************************************************/ typedef enum icalrequeststatus { ICAL_UNKNOWN_STATUS, ICAL_2_0_SUCCESS_STATUS, ICAL_2_1_FALLBACK_STATUS, ICAL_2_2_IGPROP_STATUS, ICAL_2_3_IGPARAM_STATUS, ICAL_2_4_IGXPROP_STATUS, ICAL_2_5_IGXPARAM_STATUS, ICAL_2_6_IGCOMP_STATUS, ICAL_2_7_FORWARD_STATUS, ICAL_2_8_ONEEVENT_STATUS, ICAL_2_9_TRUNC_STATUS, ICAL_2_10_ONETODO_STATUS, ICAL_2_11_TRUNCRRULE_STATUS, ICAL_3_0_INVPROPNAME_STATUS, ICAL_3_1_INVPROPVAL_STATUS, ICAL_3_2_INVPARAM_STATUS, ICAL_3_3_INVPARAMVAL_STATUS, ICAL_3_4_INVCOMP_STATUS, ICAL_3_5_INVTIME_STATUS, ICAL_3_6_INVRULE_STATUS, ICAL_3_7_INVCU_STATUS, ICAL_3_8_NOAUTH_STATUS, ICAL_3_9_BADVERSION_STATUS, ICAL_3_10_TOOBIG_STATUS, ICAL_3_11_MISSREQCOMP_STATUS, ICAL_3_12_UNKCOMP_STATUS, ICAL_3_13_BADCOMP_STATUS, ICAL_3_14_NOCAP_STATUS, ICAL_3_15_INVCOMMAND, ICAL_4_0_BUSY_STATUS, ICAL_4_1_STORE_ACCESS_DENIED, ICAL_4_2_STORE_FAILED, ICAL_4_3_STORE_NOT_FOUND, ICAL_5_0_MAYBE_STATUS, ICAL_5_1_UNAVAIL_STATUS, ICAL_5_2_NOSERVICE_STATUS, ICAL_5_3_NOSCHED_STATUS, ICAL_6_1_CONTAINER_NOT_FOUND, ICAL_9_0_UNRECOGNIZED_COMMAND } icalrequeststatus; const char* icalenum_reqstat_desc(icalrequeststatus stat); short icalenum_reqstat_major(icalrequeststatus stat); short icalenum_reqstat_minor(icalrequeststatus stat); icalrequeststatus icalenum_num_to_reqstat(short major, short minor); char* icalenum_reqstat_code(icalrequeststatus stat); char* icalenum_reqstat_code_r(icalrequeststatus stat); /*********************************************************************** * Conversion functions **********************************************************************/ /* Thse routines used to be in icalenums.c, but were moved into the icalproperty, icalparameter, icalvalue, or icalcomponent modules. */ /* const char* icalproperty_kind_to_string(icalproperty_kind kind);*/ #define icalenum_property_kind_to_string(x) icalproperty_kind_to_string(x) /*icalproperty_kind icalproperty_string_to_kind(const char* string)*/ #define icalenum_string_to_property_kind(x) icalproperty_string_to_kind(x) /*icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind);*/ #define icalenum_property_kind_to_value_kind(x) icalproperty_kind_to_value_kind(x) /*const char* icalenum_method_to_string(icalproperty_method);*/ #define icalenum_method_to_string(x) icalproperty_method_to_string(x) /*icalproperty_method icalenum_string_to_method(const char* string);*/ #define icalenum_string_to_method(x) icalproperty_string_to_method(x) /*const char* icalenum_status_to_string(icalproperty_status);*/ #define icalenum_status_to_string(x) icalproperty_status_to_string(x) /*icalproperty_status icalenum_string_to_status(const char* string);*/ #define icalenum_string_to_status(x) icalproperty_string_to_status(x) /*icalvalue_kind icalenum_string_to_value_kind(const char* str);*/ #define icalenum_string_to_value_kind(x) icalvalue_string_to_kind(x) /*const char* icalenum_value_kind_to_string(icalvalue_kind kind);*/ #define icalenum_value_kind_to_string(x) icalvalue_kind_to_string(x) /*const char* icalenum_component_kind_to_string(icalcomponent_kind kind);*/ #define icalenum_component_kind_to_string(x) icalcomponent_kind_to_string(x) /*icalcomponent_kind icalenum_string_to_component_kind(const char* string);*/ #define icalenum_string_to_component_kind(x) icalcomponent_string_to_kind(x) #endif /* !ICALENUMS_H */ libical-1.0/src/libical/libical.dsp0000664000076400007640000003703112132563132016232 0ustar allenallen# Microsoft Developer Studio Project File - Name="libical" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=libical - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "libical.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "libical.mak" CFG="libical - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "libical - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "libical - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "libical - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "./autogenex" /I "./" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ELSEIF "$(CFG)" == "libical - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ENDIF # Begin Target # Name "libical - Win32 Release" # Name "libical - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\caldate.c # End Source File # Begin Source File SOURCE=.\icalarray.c # End Source File # Begin Source File SOURCE=.\icalattach.c # End Source File # Begin Source File SOURCE=icalcomponent.c # End Source File # Begin Source File SOURCE=.\icalderivedparameter.c # End Source File # Begin Source File SOURCE=icalderivedparameter.c.in !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 USERDEP__ICALD="../../scripts/mkderivedparameters.pl" "../../design-data/parameters.csv" # Begin Custom Build InputPath=icalderivedparameter.c.in InputName=icalderivedparameter.c "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedparameters.pl -i $(InputName).in -c ../../design-data/parameters.csv > $(InputName) # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" USERDEP__ICALD="../../scripts/mkderivedparameters.pl" "../../design-data/parameters.csv" # Begin Custom Build InputPath=icalderivedparameter.c.in InputName=icalderivedparameter.c "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedparameters.pl -i $(InputName).in -c ../../design-data/parameters.csv > $(InputName) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\icalderivedproperty.c # End Source File # Begin Source File SOURCE=icalderivedproperty.c.in !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 USERDEP__ICALDE="../../scripts/mkderivedproperties.pl" "../../design-data/properties.csv" "../../design-data/value-types.csv" # Begin Custom Build InputPath=icalderivedproperty.c.in InputName=icalderivedproperty.c "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedproperties.pl -i $(InputName).in -c ../../design-data/properties.csv ../../design-data/value-types.csv > $(InputName) # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" USERDEP__ICALDE="../../scripts/mkderivedproperties.pl" "../../design-data/properties.csv" "../../design-data/value-types.csv" # Begin Custom Build InputPath=icalderivedproperty.c.in InputName=icalderivedproperty.c "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedproperties.pl -i $(InputName).in -c ../../design-data/properties.csv ../../design-data/value-types.csv > $(InputName) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\icalderivedvalue.c # End Source File # Begin Source File SOURCE=icalderivedvalue.c.in !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 USERDEP__ICALDER="../../scripts/mkderivedvalues.pl" "../../design-data/value-types.csv" # Begin Custom Build InputPath=icalderivedvalue.c.in InputName=icalderivedvalue.c "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedvalues.pl -i $(InputName).in -c ../../design-data/value-types.csv > $(InputName) # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" USERDEP__ICALDER="../../scripts/mkderivedvalues.pl" "../../design-data/value-types.csv" # Begin Custom Build InputPath=icalderivedvalue.c.in InputName=icalderivedvalue.c "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedvalues.pl -i $(InputName).in -c ../../design-data/value-types.csv > $(InputName) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=icalduration.c # End Source File # Begin Source File SOURCE=icalenums.c # End Source File # Begin Source File SOURCE=icalerror.c # End Source File # Begin Source File SOURCE=icallangbind.c # End Source File # Begin Source File SOURCE=icalmemory.c # End Source File # Begin Source File SOURCE=icalmime.c # End Source File # Begin Source File SOURCE=icalparameter.c # End Source File # Begin Source File SOURCE=icalparser.c # End Source File # Begin Source File SOURCE=icalperiod.c # End Source File # Begin Source File SOURCE=icalproperty.c # End Source File # Begin Source File SOURCE=icalrecur.c # End Source File # Begin Source File SOURCE=.\icalrestriction.c # End Source File # Begin Source File SOURCE=icalrestriction.c.in !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 USERDEP__ICALR="../../scripts/mkrestrictiontable.pl" "../../design-data/restrictions.csv" # Begin Custom Build InputPath=icalrestriction.c.in InputName=icalrestriction.c "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkrestrictiontable.pl -i $(InputName).in ../../design-data/restrictions.csv > $(InputName) # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" # PROP Ignore_Default_Tool 1 USERDEP__ICALR="../../scripts/mkrestrictiontable.pl" "../../design-data/restrictions.csv" # Begin Custom Build InputPath=icalrestriction.c.in InputName=icalrestriction.c "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkrestrictiontable.pl -i $(InputName).in ../../design-data/restrictions.csv > $(InputName) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=icaltime.c # End Source File # Begin Source File SOURCE=.\icaltimezone.c # End Source File # Begin Source File SOURCE=icaltypes.c # End Source File # Begin Source File SOURCE=icalvalue.c # End Source File # Begin Source File SOURCE=pvl.c # End Source File # Begin Source File SOURCE=sspm.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\astime.h # End Source File # Begin Source File SOURCE=.\ical.h !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 USERDEP__ICAL_="icalversion.h" "icaltime.h" "icalduration.h" "icalperiod.h" "icalenums.h" "icaltypes.h" "icalrecur.h" "icalattach.h" "icalderivedvalue.h" "icalderivedparameter.h" "icalvalue.h" "icalparameter.h" "icalderivedproperty.h" "icalproperty.h" "pvl.h" "icalarray.h" "icalcomponent.h" "icaltimezone.h" "icalparser.h" "icalmemory.h" "icalerror.h" "icalrestriction.h" "sspm.h" "icalmime.h" "icallangbind.h" # Begin Custom Build InputPath=.\ical.h "ical.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" sh ../../scripts/mkinclude.sh -o ical.h -e "#include.*\"ical" -e "#include.*\"config" -e "#include.*\"pvl\.h\"" -e '\$$(Id|Locker): .+\$$' icalversion.h icaltime.h icalduration.h icalperiod.h icalenums.h icaltypes.h icalrecur.h icalattach.h icalderivedvalue.h icalderivedparameter.h icalvalue.h icalparameter.h icalderivedproperty.h icalproperty.h pvl.h icalarray.h icalcomponent.h icaltimezone.h icalparser.h icalmemory.h icalerror.h icalrestriction.h sspm.h icalmime.h icallangbind.h # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" USERDEP__ICAL_="icalversion.h" "icaltime.h" "icalduration.h" "icalperiod.h" "icalenums.h" "icaltypes.h" "icalrecur.h" "icalattach.h" "icalderivedvalue.h" "icalderivedparameter.h" "icalvalue.h" "icalparameter.h" "icalderivedproperty.h" "icalproperty.h" "pvl.h" "icalarray.h" "icalcomponent.h" "icaltimezone.h" "icalparser.h" "icalmemory.h" "icalerror.h" "icalrestriction.h" "sspm.h" "icalmime.h" "icallangbind.h" # Begin Custom Build InputPath=.\ical.h "ical.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" sh ../../scripts/mkinclude.sh -o ical.h -e "#include.*\"ical" -e "#include.*\"config" -e "#include.*\"pvl\.h\"" -e '\$$(Id|Locker): .+\$$' icalversion.h icaltime.h icalduration.h icalperiod.h icalenums.h icaltypes.h icalrecur.h icalattach.h icalderivedvalue.h icalderivedparameter.h icalvalue.h icalparameter.h icalderivedproperty.h icalproperty.h pvl.h icalarray.h icalcomponent.h icaltimezone.h icalparser.h icalmemory.h icalerror.h icalrestriction.h sspm.h icalmime.h icallangbind.h # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\icalarray.h # End Source File # Begin Source File SOURCE=.\icalattach.h # End Source File # Begin Source File SOURCE=.\icalattachimpl.h # End Source File # Begin Source File SOURCE=icalcomponent.h # End Source File # Begin Source File SOURCE=.\icalderivedparameter.h # End Source File # Begin Source File SOURCE=icalderivedparameter.h.in !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 USERDEP__ICALDERI="../../scripts/mkderivedparameters.pl" "../../design-data/parameters.csv" # Begin Custom Build InputPath=icalderivedparameter.h.in InputName=icalderivedparameter.h "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedparameters.pl -i $(InputName).in -h ../../design-data/parameters.csv > $(InputName) # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" USERDEP__ICALDERI="../../scripts/mkderivedparameters.pl" "../../design-data/parameters.csv" # Begin Custom Build InputPath=icalderivedparameter.h.in InputName=icalderivedparameter.h "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedparameters.pl -i $(InputName).in -h ../../design-data/parameters.csv > $(InputName) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\icalderivedproperty.h # End Source File # Begin Source File SOURCE=icalderivedproperty.h.in !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 USERDEP__ICALDERIV="../../scripts/mkderivedproperties.pl" "../../design-data/properties.csv" "../../design-data/value-types.csv" # Begin Custom Build InputPath=icalderivedproperty.h.in InputName=icalderivedproperty.h "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedproperties.pl -i $(InputName).in -h ../../design-data/properties.csv ../../design-data/value-types.csv > $(InputName) # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" USERDEP__ICALDERIV="../../scripts/mkderivedproperties.pl" "../../design-data/properties.csv" "../../design-data/value-types.csv" # Begin Custom Build InputPath=icalderivedproperty.h.in InputName=icalderivedproperty.h "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedproperties.pl -i $(InputName).in -h ../../design-data/properties.csv ../../design-data/value-types.csv > $(InputName) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=.\icalderivedvalue.h # End Source File # Begin Source File SOURCE=icalderivedvalue.h.in !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 USERDEP__ICALDERIVE="../../scripts/mkderivedvalues.pl" "../../design-data/value-types.csv" # Begin Custom Build InputPath=icalderivedvalue.h.in InputName=icalderivedvalue.h "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedvalues.pl -i $(InputName).in -h ../../design-data/value-types.csv > $(InputName) # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" USERDEP__ICALDERIVE="../../scripts/mkderivedvalues.pl" "../../design-data/value-types.csv" # Begin Custom Build InputPath=icalderivedvalue.h.in InputName=icalderivedvalue.h "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" perl -I ../../scripts ../../scripts/mkderivedvalues.pl -i $(InputName).in -h ../../design-data/value-types.csv > $(InputName) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=icalduration.h # End Source File # Begin Source File SOURCE=icalenums.h # End Source File # Begin Source File SOURCE=icalerror.h # End Source File # Begin Source File SOURCE=icallangbind.h # End Source File # Begin Source File SOURCE=icalmemory.h # End Source File # Begin Source File SOURCE=icalmime.h # End Source File # Begin Source File SOURCE=icalparameter.h # End Source File # Begin Source File SOURCE=icalparameterimpl.h # End Source File # Begin Source File SOURCE=icalparser.h # End Source File # Begin Source File SOURCE=icalperiod.h # End Source File # Begin Source File SOURCE=icalproperty.h # End Source File # Begin Source File SOURCE=icalrecur.h # End Source File # Begin Source File SOURCE=icalrestriction.h # End Source File # Begin Source File SOURCE=icaltime.h # End Source File # Begin Source File SOURCE=.\icaltimezone.h # End Source File # Begin Source File SOURCE=icaltypes.h # End Source File # Begin Source File SOURCE=icalvalue.h # End Source File # Begin Source File SOURCE=icalvalueimpl.h # End Source File # Begin Source File SOURCE=.\icalversion.h # End Source File # Begin Source File SOURCE=icalversion.h.in !IF "$(CFG)" == "libical - Win32 Release" # PROP Ignore_Default_Tool 1 # Begin Custom Build InputPath=icalversion.h.in InputName=icalversion.h "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" sed -e "s/@VERSION@/0.24/g" -e "s/@PACKAGE@/libical/g" $(InputName).in > $(InputName) # End Custom Build !ELSEIF "$(CFG)" == "libical - Win32 Debug" # PROP Ignore_Default_Tool 1 # Begin Custom Build InputPath=icalversion.h.in InputName=icalversion.h "$(InputName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" sed -e "s/@VERSION@/0.24/g" -e "s/@PACKAGE@/libical/g" $(InputName).in > $(InputName) # End Custom Build !ENDIF # End Source File # Begin Source File SOURCE=pvl.h # End Source File # Begin Source File SOURCE=sspm.h # End Source File # End Group # End Target # End Project libical-1.0/src/libical/icalparameter.c0000664000076400007640000002301012132563130017066 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalderivedparameters.{c,h} CREATOR: eric 09 May 1999 $Id: icalparameter.c,v 1.15 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalderivedparameters.{c,h} Contributions from: Graham Davison ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #include "icalparameter.h" #include "icalproperty.h" #include "icalerror.h" #include "icalmemory.h" #include "icalparameterimpl.h" #include /* for malloc() */ #include #include /* for memset() */ #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif /* In icalderivedparameter */ icalparameter* icalparameter_new_from_value_string(icalparameter_kind kind,const char* val); struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind) { struct icalparameter_impl* v; if ( ( v = (struct icalparameter_impl*) malloc(sizeof(struct icalparameter_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } strcpy(v->id,"para"); v->kind = kind; v->size = 0; v->string = 0; v->x_name = 0; v->parent = 0; v->data = 0; return v; } icalparameter* icalparameter_new (icalparameter_kind kind) { struct icalparameter_impl* v = icalparameter_new_impl(kind); return (icalparameter*) v; } void icalparameter_free (icalparameter* param) { /* HACK. This always triggers, even when parameter is non-zero icalerror_check_arg_rv((parameter==0),"parameter");*/ #ifdef ICAL_FREE_ON_LIST_IS_ERROR icalerror_assert( (param->parent ==0),"Tried to free a parameter that is still attached to a component. "); #else if(param->parent !=0){ return; } #endif if (param->string != 0){ free ((void*)param->string); } if (param->x_name != 0){ free ((void*)param->x_name); } memset(param,0,sizeof(icalparameter)); param->parent = 0; param->id[0] = 'X'; free(param); } icalparameter* icalparameter_new_clone(icalparameter* old) { struct icalparameter_impl *new; new = icalparameter_new_impl(old->kind); icalerror_check_arg_rz((old!=0),"param"); if (new == 0){ return 0; } memcpy(new,old,sizeof(struct icalparameter_impl)); if (old->string != 0){ new->string = icalmemory_strdup(old->string); if (new->string == 0){ icalparameter_free(new); return 0; } } if (old->x_name != 0){ new->x_name = icalmemory_strdup(old->x_name); if (new->x_name == 0){ icalparameter_free(new); return 0; } } return new; } icalparameter* icalparameter_new_from_string(const char *str) { char* eq; char* cpy; icalparameter_kind kind; icalparameter *param; icalerror_check_arg_rz(str != 0,"str"); cpy = icalmemory_strdup(str); if (cpy == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } eq = strchr(cpy,'='); if(eq == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(cpy); return 0; } *eq = '\0'; eq++; kind = icalparameter_string_to_kind(cpy); if(kind == ICAL_NO_PARAMETER){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(cpy); return 0; } param = icalparameter_new_from_value_string(kind,eq); if(kind == ICAL_X_PARAMETER){ icalparameter_set_xname(param,cpy); } else if(kind == ICAL_IANA_PARAMETER) { icalparameter_set_iana_name(param, cpy); } free(cpy); return param; } char* icalparameter_as_ical_string(icalparameter* param) { char *buf; buf = icalparameter_as_ical_string_r(param); icalmemory_add_tmp_buffer(buf); return buf; } /** * Return a string representation of the parameter according to RFC2445. * * param = param-name "=" param-value * param-name = iana-token / x-token * param-value = paramtext /quoted-string * paramtext = *SAFE-SHARE * quoted-string= DQUOTE *QSAFE-CHARE DQUOTE * QSAFE-CHAR = any character except CTLs and DQUOTE * SAFE-CHAR = any character except CTLs, DQUOTE. ";", ":", "," */ char* icalparameter_as_ical_string_r(icalparameter* param) { size_t buf_size = 1024; char* buf; char* buf_ptr; const char *kind_string; icalerror_check_arg_rz( (param!=0), "parameter"); /* Create new buffer that we can append names, parameters and a * value to, and reallocate as needed. */ buf = icalmemory_new_buffer(buf_size); buf_ptr = buf; if(param->kind == ICAL_X_PARAMETER) { icalmemory_append_string(&buf, &buf_ptr, &buf_size, icalparameter_get_xname(param)); } else if (param->kind == ICAL_IANA_PARAMETER) { icalmemory_append_string(&buf, &buf_ptr, &buf_size, icalparameter_get_iana_name(param)); } else { kind_string = icalparameter_kind_to_string(param->kind); if (param->kind == ICAL_NO_PARAMETER || param->kind == ICAL_ANY_PARAMETER || kind_string == 0) { icalerror_set_errno(ICAL_BADARG_ERROR); free(buf); return 0; } /* Put the parameter name into the string */ icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); } icalmemory_append_string(&buf, &buf_ptr, &buf_size, "="); if(param->string !=0){ int qm = 0; /* Encapsulate the property in quotes if necessary */ if (strpbrk(param->string, ";:,") != 0) { icalmemory_append_char (&buf, &buf_ptr, &buf_size, '"'); qm = 1; } icalmemory_append_string(&buf, &buf_ptr, &buf_size, param->string); if (qm == 1) { icalmemory_append_char (&buf, &buf_ptr, &buf_size, '"'); } } else if (param->data != 0){ const char* str = icalparameter_enum_to_string(param->data); icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); } else { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); free(buf); return 0; } return buf; } int icalparameter_is_valid (icalparameter* parameter); icalparameter_kind icalparameter_isa (icalparameter* parameter) { if(parameter == 0){ return ICAL_NO_PARAMETER; } return parameter->kind; } int icalparameter_isa_parameter (void* parameter) { struct icalparameter_impl *impl = (struct icalparameter_impl *)parameter; if (parameter == 0){ return 0; } if (strcmp(impl->id,"para") == 0) { return 1; } else { return 0; } } void icalparameter_set_xname (icalparameter* param, const char* v) { icalerror_check_arg_rv( (param!=0),"param"); icalerror_check_arg_rv( (v!=0),"v"); if (param->x_name != 0){ free((void*)param->x_name); } param->x_name = icalmemory_strdup(v); if (param->x_name == 0){ errno = ENOMEM; } } const char* icalparameter_get_xname (icalparameter* param) { icalerror_check_arg_rz( (param!=0),"param"); return param->x_name; } void icalparameter_set_xvalue (icalparameter* param, const char* v) { icalerror_check_arg_rv( (param!=0),"param"); icalerror_check_arg_rv( (v!=0),"v"); if (param->string != 0){ free((void*)param->string); } param->string = icalmemory_strdup(v); if (param->string == 0){ errno = ENOMEM; } } const char* icalparameter_get_xvalue (icalparameter* param) { icalerror_check_arg_rz( (param!=0),"param"); return param->string; } void icalparameter_set_iana_value (icalparameter* param, const char* v) { icalparameter_set_xvalue(param, v); } const char* icalparameter_get_iana_value(icalparameter* param) { return icalparameter_get_xvalue(param); } void icalparameter_set_iana_name (icalparameter* param, const char* v) { icalparameter_set_xname(param, v); } const char* icalparameter_get_iana_name (icalparameter* param) { return icalparameter_get_xname(param); } void icalparameter_set_parent(icalparameter* param, icalproperty* property) { icalerror_check_arg_rv( (param!=0),"param"); param->parent = property; } icalproperty* icalparameter_get_parent(icalparameter* param) { icalerror_check_arg_rz( (param!=0),"param"); return param->parent; } /* returns 1 if parameters have same name in ICAL, otherwise 0 */ int icalparameter_has_same_name(icalparameter* param1, icalparameter* param2) { icalparameter_kind kind1; icalparameter_kind kind2; const char *name1; const char *name2; icalerror_check_arg_rz( (param1!=0),"param1"); icalerror_check_arg_rz( (param2!=0),"param2"); kind1 = icalparameter_isa(param1); kind2 = icalparameter_isa(param2); if (kind1 != kind2) return 0; if (kind1 == ICAL_X_PARAMETER) { name1 = icalparameter_get_xname(param1); name2 = icalparameter_get_xname(param2); if (strcasecmp(name1, name2) != 0) return 0; } else if (kind1 == ICAL_IANA_PARAMETER) { name1 = icalparameter_get_iana_name(param1); name2 = icalparameter_get_iana_name(param2); if (strcasecmp(name1, name2) != 0) return 0; } return 1; } /* Everything below this line is machine generated. Do not edit. */ /* ALTREP */ libical-1.0/src/libical/icalparameter_cxx.cpp0000664000076400007640000001670312132563132020325 0ustar allenallen/* -*- Mode: C++ -*- */ /** * @file icalparameter_cxx.cpp * @author fnguyen (12/10/01) * @brief Implementation of C++ Wrapper for icalparameter.c * * (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ #ifndef ICALPARAMETER_CXX_H #include "icalparameter_cxx.h" #endif #ifndef ICALVALUE_CXX_H #include "icalvalue_cxx.h" #endif typedef char* string; // Will use the string library from STL ICalParameter::ICalParameter() throw(icalerrorenum) : imp(icalparameter_new(ICAL_ANY_PARAMETER)){ } ICalParameter::ICalParameter(const ICalParameter& v) throw(icalerrorenum) { imp = icalparameter_new_clone(v.imp); if (!imp) throw icalerrno; } ICalParameter& ICalParameter::operator=(const ICalParameter& v) throw(icalerrorenum) { if (this == &v) return *this; if (imp != NULL) { icalparameter_free(imp); imp = icalparameter_new_clone(v.imp); if (!imp) throw icalerrno; } return *this; } ICalParameter::~ICalParameter(){ if (imp != NULL) icalparameter_free(imp); } ICalParameter::ICalParameter(icalparameter* v) throw(icalerrorenum) : imp(v){ } /// Create from string of form "PARAMNAME=VALUE" ICalParameter::ICalParameter(string str) throw(icalerrorenum) { imp = icalparameter_new_from_string(str); if (!imp) throw icalerrno; } /// Create from just the value, the part after the "=" ICalParameter::ICalParameter(icalparameter_kind kind, string str) throw(icalerrorenum) { imp = icalparameter_new_from_value_string(kind, str); if (!imp) throw icalerrno; } ICalParameter::ICalParameter(icalparameter_kind kind) throw(icalerrorenum) { imp = icalparameter_new(kind); if (!imp) throw icalerrno; } string ICalParameter::as_ical_string() throw(icalerrorenum) { char *str = icalparameter_as_ical_string(imp); if (!str) throw icalerrno; return str; } bool ICalParameter::is_valid(){ if (imp == NULL) return false; return (icalparameter_isa_parameter((void*)imp) ? true : false); } icalparameter_kind ICalParameter::isa(){ return icalparameter_isa(imp); } int ICalParameter::isa_parameter(void* param){ return icalparameter_isa_parameter(param); } /* Acess the name of an X parameer */ void ICalParameter::set_xname(ICalParameter ¶m, string v){ icalparameter_set_xname(param, v); } string ICalParameter::get_xname(ICalParameter ¶m){ return (string)icalparameter_get_xname(param); } void ICalParameter::set_xvalue (ICalParameter ¶m, string v){ icalparameter_set_xvalue(param, v); } string ICalParameter::get_xvalue(ICalParameter ¶m){ return (string)icalparameter_get_xvalue(param); } /* Convert enumerations */ string ICalParameter::kind_to_string(icalparameter_kind kind){ return (string)icalparameter_kind_to_string(kind); } icalparameter_kind ICalParameter::string_to_kind(string str){ return icalparameter_string_to_kind(str); } /* DELEGATED-FROM */ string ICalParameter::get_delegatedfrom(){ return (string)icalparameter_get_delegatedfrom(imp); } void ICalParameter::set_delegatedfrom(string v){ icalparameter_set_delegatedfrom(imp, v); } /* RELATED */ icalparameter_related ICalParameter::get_related(){ return icalparameter_get_related(imp); } void ICalParameter::set_related(icalparameter_related v){ icalparameter_set_related(imp, v); } /* SENT-BY */ string ICalParameter::get_sentby(){ return (string)icalparameter_get_sentby(imp); } void ICalParameter::set_sentby(string v){ icalparameter_set_sentby(imp, v); } /* LANGUAGE */ string ICalParameter::get_language(){ return (string)icalparameter_get_language(imp); } void ICalParameter::set_language(string v){ icalparameter_set_language(imp, v); } /* RELTYPE */ icalparameter_reltype ICalParameter::get_reltype(){ return icalparameter_get_reltype(imp); } void ICalParameter::set_reltype(icalparameter_reltype v){ icalparameter_set_reltype(imp, v); } /* ENCODING */ icalparameter_encoding ICalParameter::get_encoding(){ return icalparameter_get_encoding(imp); } void ICalParameter::set_encoding(icalparameter_encoding v){ icalparameter_set_encoding(imp, v); } /* ALTREP */ string ICalParameter::get_altrep(){ return (string)icalparameter_get_language(imp); } void ICalParameter::set_altrep(string v){ icalparameter_set_altrep(imp, v); } /* FMTTYPE */ string ICalParameter::get_fmttype(){ return (string)icalparameter_get_fmttype(imp); } void ICalParameter::set_fmttype(string v){ icalparameter_set_fmttype(imp, v); } /* FBTYPE */ icalparameter_fbtype ICalParameter::get_fbtype(){ return icalparameter_get_fbtype(imp); } void ICalParameter::set_fbtype(icalparameter_fbtype v){ icalparameter_set_fbtype(imp, v); } /* RSVP */ icalparameter_rsvp ICalParameter::get_rsvp(){ return icalparameter_get_rsvp(imp); } void ICalParameter::set_rsvp(icalparameter_rsvp v){ icalparameter_set_rsvp(imp, v); } /* RANGE */ icalparameter_range ICalParameter::get_range(){ return icalparameter_get_range(imp); } void ICalParameter::set_range(icalparameter_range v){ icalparameter_set_range(imp, v); } /* DELEGATED-TO */ string ICalParameter::get_delegatedto(){ return (string)icalparameter_get_delegatedto(imp); } void ICalParameter::set_delegatedto(string v){ icalparameter_set_delegatedto(imp, v); } /* CN */ string ICalParameter::get_cn(){ return (string)icalparameter_get_cn(imp); } void ICalParameter::set_cn(string v){ icalparameter_set_cn(imp, v); } /* ROLE */ icalparameter_role ICalParameter::get_role(){ return icalparameter_get_role(imp); } void ICalParameter::set_role(icalparameter_role v){ icalparameter_set_role(imp, v); } /* X-LIC-COMPARETYPE */ icalparameter_xliccomparetype ICalParameter::get_xliccomparetype(){ return icalparameter_get_xliccomparetype(imp); } void ICalParameter::set_xliccomparetype(icalparameter_xliccomparetype v){ icalparameter_set_xliccomparetype(imp, v); } /* PARTSTAT */ icalparameter_partstat ICalParameter::get_partstat(){ return icalparameter_get_partstat(imp); } void ICalParameter::set_partstat(icalparameter_partstat v){ icalparameter_set_partstat(imp, v); } /* X-LIC-ERRORTYPE */ icalparameter_xlicerrortype ICalParameter::get_xlicerrortype(){ return icalparameter_get_xlicerrortype(imp); } void ICalParameter::set_xlicerrortype(icalparameter_xlicerrortype v){ icalparameter_set_xlicerrortype(imp, v); } /* MEMBER */ string ICalParameter::get_member(){ return (string)icalparameter_get_member(imp); } void ICalParameter::set_member(string v){ icalparameter_set_member(imp, v); } /* X */ string ICalParameter::get_x(){ return (string)icalparameter_get_x(imp); } void ICalParameter::set_x(string v){ icalparameter_set_x(imp, v); } /* CUTYPE */ icalparameter_cutype ICalParameter::get_cutype(){ return icalparameter_get_cutype(imp); } void ICalParameter::set_cutype(icalparameter_cutype v){ icalparameter_set_cutype(imp, v); } /* TZID */ string ICalParameter::get_tzid(){ return (string)icalparameter_get_tzid(imp); } void ICalParameter::set_tzid(string v){ icalparameter_set_tzid(imp, v); } /* VALUE */ icalparameter_value ICalParameter::get_value(){ return icalparameter_get_value(imp); } void ICalParameter::set_value(icalparameter_value v){ icalparameter_set_value(imp, v); } /* DIR */ string ICalParameter::get_dir(){ return (string)icalparameter_get_dir(imp); } void ICalParameter::set_dir(string v){ icalparameter_set_dir(imp, v); } libical-1.0/src/libical/vcomponent.h0000664000076400007640000002057712132563132016473 0ustar allenallen/* -*- Mode: C++ -*- */ /** * @file vcomponent.h * @author fnguyen (12/10/01) * @brief C++ classes for the icalcomponent wrapper (VToDo VEvent, etc..). * * (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ #ifndef VCOMPONENT_H #define VCOMPONENT_H #include "ical.h" #include "icptrholder.h" typedef char* string; // Will use the string library from STL class ICalProperty; /** * @class VComponent * @brief A class wrapping the libical icalcomponent functions * * @exception icalerrorenum Any errors generated in libical are * propogated via this exception type. */ class VComponent { public: VComponent() throw (icalerrorenum); VComponent(const VComponent&) throw (icalerrorenum); VComponent& operator=(const VComponent&) throw (icalerrorenum); virtual ~VComponent(); VComponent(icalcomponent* v) throw (icalerrorenum); VComponent(string str) throw (icalerrorenum); VComponent(icalcomponent_kind kind) throw (icalerrorenum);; operator icalcomponent* () { return imp; } void new_from_string(string str); // detach imp to this object. use with caution. it would cause // memory leak if you are not careful. void detach() { imp = NULL; } public: string as_ical_string() throw (icalerrorenum); bool is_valid(); icalcomponent_kind isa(); int isa_component(void* component); /// Working with properties void add_property(ICalProperty* property); void remove_property(ICalProperty* property); int count_properties(icalproperty_kind kind); // Iterate through the properties ICalProperty* get_current_property(); ICalProperty* get_first_property(icalproperty_kind kind); ICalProperty* get_next_property(icalproperty_kind kind); // Working with components /** * Return the first VEVENT, VTODO or VJOURNAL sub-component if * it is one of those types */ VComponent* get_inner(); void add_component(VComponent* child); void remove_component(VComponent* child); int count_components(icalcomponent_kind kind); /** * Iteration Routines. There are two forms of iterators, * internal and external. The internal ones came first, and * are almost completely sufficient, but they fail badly when * you want to construct a loop that removes components from * the container. */ /// Iterate through components VComponent* get_current_component(); VComponent* get_first_component(icalcomponent_kind kind); VComponent* get_next_component(icalcomponent_kind kind); /// Using external iterators icalcompiter begin_component(icalcomponent_kind kind); icalcompiter end_component(icalcomponent_kind kind); VComponent* next(icalcompiter* i); VComponent* prev(icalcompiter* i); VComponent* current(icalcompiter* i); /// Working with embedded error properties int count_errors(); /// Remove all X-LIC-ERROR properties void strip_errors(); /// Convert some X-LIC-ERROR properties into RETURN-STATUS properties void convert_errors(); /// Kind conversion routines static icalcomponent_kind string_to_kind(string str); static string kind_to_string(icalcomponent_kind kind); public: struct icaltimetype get_dtstart(); void set_dtstart(struct icaltimetype v); /** For the icalcomponent routines only, dtend and duration * are tied together. If you call the set routine for one and * the other exists, the routine will calculate the change to * the other. That is, if there is a DTEND and you call * set_duration, the routine will modify DTEND to be the sum * of DTSTART and the duration. If you call a get routine for * one and the other exists, the routine will calculate the * return value. If you call a set routine and neither * exists, the routine will create the apropriate property */ struct icaltimetype get_dtend(); void set_dtend(struct icaltimetype v); struct icaltimetype get_due(); void set_due(struct icaltimetype v); struct icaldurationtype get_duration(); void set_duration(struct icaldurationtype v); icalproperty_method get_method(); void set_method(icalproperty_method method); struct icaltimetype get_dtstamp(); void set_dtstamp(struct icaltimetype v); string get_summary(); void set_summary(string v); string get_location(); void set_location(string v); string get_description(); void set_description(string v); string get_comment(); void set_comment(string v); string get_uid(); void set_uid(string v); string get_relcalid(); void set_relcalid(string v); struct icaltimetype get_recurrenceid(); void set_recurrenceid(struct icaltimetype v); int get_sequence(); void set_sequence(int v); int get_status(); void set_status(enum icalproperty_status v); public: /** * For VCOMPONENT: Return a reference to the first VEVENT, * VTODO, or VJOURNAL */ VComponent* get_first_real_component(); /** * For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the * start and end times of an event in UTC */ virtual struct icaltime_span get_span(); int recurrence_is_excluded(struct icaltimetype *dtstart, struct icaltimetype *recurtime); public: /** helper functions for adding/removing/updating property and sub-components */ /// Note: the VComponent kind have to be the same bool remove(VComponent&, bool ignoreValue); bool update(VComponent&, bool removeMissing); bool add(VComponent&); private: /* Internal operations. They are private, and you should not be using them. */ VComponent* get_parent(); void set_parent(VComponent *parent); char* quote_ical_string(char* str); private: icalcomponent* imp; }; class VCalendar : public VComponent { public: VCalendar(); VCalendar(const VCalendar&); VCalendar& operator=(const VCalendar&); ~VCalendar(); VCalendar(icalcomponent* v); VCalendar(string str); }; class VEvent : public VComponent { public: VEvent(); VEvent(const VEvent&); VEvent& operator=(const VEvent&); ~VEvent(); VEvent(icalcomponent* v); VEvent(string str); }; class VToDo : public VComponent { public: VToDo(); VToDo(const VToDo&); VToDo& operator=(const VToDo&); ~VToDo(); VToDo(icalcomponent* v); VToDo(string str); }; class VAgenda : public VComponent { public: VAgenda(); VAgenda(const VAgenda&); VAgenda& operator=(const VAgenda&); ~VAgenda(); VAgenda(icalcomponent* v); VAgenda(string str); }; class VQuery : public VComponent { public: VQuery(); VQuery(const VQuery&); VQuery& operator=(const VQuery&); ~VQuery(); VQuery(icalcomponent* v); VQuery(string str); }; class VJournal : public VComponent { public: VJournal(); VJournal(const VJournal&); VJournal& operator=(const VJournal&); ~VJournal(); VJournal(icalcomponent* v); VJournal(string str); }; class VAlarm : public VComponent { public: VAlarm(); VAlarm(const VAlarm&); VAlarm& operator=(const VAlarm&); ~VAlarm(); VAlarm(icalcomponent* v); VAlarm(string str); /** * compute the absolute trigger time for this alarm. trigger * may be related to the containing component c. the result * is populated in tr->time */ icalrequeststatus getTriggerTime(VComponent &c, struct icaltriggertype *tr); }; class VFreeBusy : public VComponent { public: VFreeBusy(); VFreeBusy(const VFreeBusy&); VFreeBusy& operator=(const VFreeBusy&); ~VFreeBusy(); VFreeBusy(icalcomponent* v); VFreeBusy(string str); }; class VTimezone : public VComponent { public: VTimezone(); VTimezone(const VTimezone&); VTimezone& operator=(const VTimezone&); ~VTimezone(); VTimezone(icalcomponent* v); VTimezone(string str); }; class XStandard : public VComponent { public: XStandard(); XStandard(const XStandard&); XStandard& operator=(const XStandard&); ~XStandard(); XStandard(icalcomponent* v); XStandard(string str); }; class XDaylight : public VComponent { public: XDaylight(); XDaylight(const XDaylight&); XDaylight& operator=(const XDaylight&); ~XDaylight(); XDaylight(icalcomponent* v); XDaylight(string str); }; typedef ICPointerHolder VComponentTmpPtr; /* see icptrholder.h for comments */ #endif /* VComponent_H */ libical-1.0/src/libical/icalparser.h0000664000076400007640000000555112132563132016423 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalparser.h CREATOR: eric 20 April 1999 $Id: icalparser.h,v 1.9 2008-01-15 23:17:41 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalparser.h ======================================================================*/ #ifndef ICALPARSER_H #define ICALPARSER_H #include "icalenums.h" #include "icaltypes.h" #include"icalcomponent.h" #include /* For FILE* */ typedef struct icalparser_impl icalparser; /** * @file icalparser.h * @brief Line-oriented parsing. * * Create a new parser via icalparse_new_parser, then add lines one at * a time with icalparse_add_line(). icalparser_add_line() will return * non-zero when it has finished with a component. */ typedef enum icalparser_state { ICALPARSER_ERROR, ICALPARSER_SUCCESS, ICALPARSER_BEGIN_COMP, ICALPARSER_END_COMP, ICALPARSER_IN_PROGRESS } icalparser_state; icalparser* icalparser_new(void); icalcomponent* icalparser_add_line(icalparser* parser, char* str ); icalcomponent* icalparser_clean(icalparser* parser); icalparser_state icalparser_get_state(icalparser* parser); void icalparser_free(icalparser* parser); /** * Message oriented parsing. icalparser_parse takes a string that * holds the text ( in RFC 2445 format ) and returns a pointer to an * icalcomponent. The caller owns the memory. line_gen_func is a * pointer to a function that returns one content line per invocation */ icalcomponent* icalparser_parse(icalparser *parser, char* (*line_gen_func)(char *s, size_t size, void *d)); /** Set the data that icalparser_parse will give to the line_gen_func as the parameter 'd' */ void icalparser_set_gen_data(icalparser* parser, void* data); icalcomponent* icalparser_parse_string(const char* str); /*********************************************************************** * Parser support functions ***********************************************************************/ /** Use the flex/bison parser to turn a string into a value type */ icalvalue* icalparser_parse_value(icalvalue_kind kind, const char* str, icalcomponent** errors); /** Given a line generator function, return a single iCal content line.*/ char* icalparser_get_line(icalparser* parser, char* (*line_gen_func)(char *s, size_t size, void *d)); char* icalparser_string_line_generator(char *out, size_t buf_size, void *d); #endif /* !ICALPARSE_H */ libical-1.0/src/libical/icalperiod.h0000664000076400007640000000266312132563132016412 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalperiod.h CREATOR: eric 26 Jan 2001 $Id: icalperiod.h,v 1.6 2008-01-15 23:17:41 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICALPERIOD_H #define ICALPERIOD_H #include "icaltime.h" #include "icalduration.h" struct icalperiodtype { struct icaltimetype start; struct icaltimetype end; struct icaldurationtype duration; }; struct icalperiodtype icalperiodtype_from_string (const char* str); const char* icalperiodtype_as_ical_string(struct icalperiodtype p); char* icalperiodtype_as_ical_string_r(struct icalperiodtype p); struct icalperiodtype icalperiodtype_null_period(void); int icalperiodtype_is_null_period(struct icalperiodtype p); int icalperiodtype_is_valid_period(struct icalperiodtype p); #endif /* !ICALTIME_H */ libical-1.0/src/libical/sspm.c0000664000076400007640000010704712132563132015256 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: sspm.c Parse Mime CREATOR: eric 25 June 2000 $Id: sspm.c,v 1.13 2008-01-28 22:34:38 artcancro Exp $ $Locker: $ The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The Initial Developer of the Original Code is Eric Busboom (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org ======================================================================*/ #include #include #include "sspm.h" #include #include /* for tolower */ #include /* for malloc, free */ #include /* for strcasecmp */ #ifdef DMALLOC #include "dmalloc.h" #endif #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif #define TMP_BUF_SIZE 1024 enum mime_state { UNKNOWN_STATE, IN_HEADER, END_OF_HEADER, IN_BODY, OPENING_PART, END_OF_PART, TERMINAL_END_OF_PART, END_OF_INPUT }; struct mime_impl{ struct sspm_part *parts; size_t max_parts; int part_no; int level; const struct sspm_action_map *actions; char* (*get_string)(char *s, size_t size, void* data); void* get_string_data; char temp[TMP_BUF_SIZE]; enum mime_state state; }; void sspm_free_header(struct sspm_header *header); void* sspm_make_multipart_part(struct mime_impl *impl,struct sspm_header *header); void sspm_read_header(struct mime_impl *impl,struct sspm_header *header); char* sspm_strdup(const char* str){ char* s; s = strdup(str); return s; } static struct major_content_type_map { enum sspm_major_type type; const char* str; } major_content_type_map[] = { {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, {SSPM_TEXT_MAJOR_TYPE,"text" }, {SSPM_TEXT_MAJOR_TYPE,"text" }, {SSPM_IMAGE_MAJOR_TYPE,"image" }, {SSPM_AUDIO_MAJOR_TYPE,"audio" }, {SSPM_VIDEO_MAJOR_TYPE,"video" }, {SSPM_APPLICATION_MAJOR_TYPE,"application" }, {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, {SSPM_MESSAGE_MAJOR_TYPE,"message" }, {SSPM_UNKNOWN_MAJOR_TYPE,"" }, }; static struct minor_content_type_map { enum sspm_minor_type type; const char* str; } minor_content_type_map[] = { {SSPM_ANY_MINOR_TYPE,"*" }, {SSPM_PLAIN_MINOR_TYPE,"plain" }, {SSPM_RFC822_MINOR_TYPE,"rfc822" }, {SSPM_DIGEST_MINOR_TYPE,"digest" }, {SSPM_CALENDAR_MINOR_TYPE,"calendar" }, {SSPM_MIXED_MINOR_TYPE,"mixed" }, {SSPM_RELATED_MINOR_TYPE,"related" }, {SSPM_ALTERNATIVE_MINOR_TYPE,"alternative" }, {SSPM_PARALLEL_MINOR_TYPE, "parallel" }, {SSPM_UNKNOWN_MINOR_TYPE,"" } }; struct encoding_map { enum sspm_encoding encoding; const char* str; } sspm_encoding_map[] = { {SSPM_NO_ENCODING,""}, {SSPM_QUOTED_PRINTABLE_ENCODING,"quoted-printable"}, {SSPM_8BIT_ENCODING,"8bit"}, {SSPM_7BIT_ENCODING,"7bit"}, {SSPM_BINARY_ENCODING,"binary"}, {SSPM_BASE64_ENCODING,"base64"}, {SSPM_UNKNOWN_ENCODING,""} }; char* sspm_get_parameter(const char* line, const char* parameter) { char *p,*s,*q; static char name[1024]; /* Find where the parameter name is in the line */ p = strstr(line,parameter); if( p == 0){ return 0; } /* skip over the parameter name, the '=' and any blank spaces */ p+=strlen(parameter); while(*p==' ' || *p == '='){ p++; } /*now find the next semicolon*/ s = strchr(p,';'); /* Strip of leading quote */ q = strchr(p,'\"'); if(q !=0){ p = q+1; } if(s != 0){ strncpy(name,p,(size_t)s-(size_t)p); } else { strncpy(name,p,sizeof(name)-1); name[sizeof(name)-1]='\0'; } /* Strip off trailing quote, if it exists */ q = strrchr(name,'\"'); if (q != 0){ *q='\0'; } return name; } char* sspm_property_name(const char* line) { static char name[1024]; char *c = strchr(line,':'); if(c != 0){ strncpy(name,line,(size_t)c-(size_t)line); name[(size_t)c-(size_t)line] = '\0'; return name; } else { return 0; } } char* sspm_value(char* line) { static char value[1024]; char *c,*s, *p; /* Find the first colon and the next semicolon */ value[0] = 0; c = strchr(line,':'); if (!c) return value; s = strchr(c,';'); /* Skip the colon */ c++; if (s == 0){ s = c+strlen(line); } for(p=value; c != s; c++){ if(*c!=' ' && *c!='\n'){ *(p++) = *c; } } *p='\0'; return value; } static const char *mime_headers[] = { "Content-Type", "Content-Transfer-Encoding", "Content-Disposition", "Content-Id", "Mime-Version", 0 }; void* sspm_default_new_part(void) { return 0; } void sspm_default_add_line(void *part, struct sspm_header *header, const char* line, size_t size) { (void)part; (void)header; (void)line; (void)size; } void* sspm_default_end_part(void* part) { (void)part; return 0; } void sspm_default_free_part(void *part) { (void)part; } struct sspm_action_map sspm_action_map[] = { {SSPM_UNKNOWN_MAJOR_TYPE,SSPM_UNKNOWN_MINOR_TYPE,sspm_default_new_part,sspm_default_add_line,sspm_default_end_part,sspm_default_free_part}, }; int sspm_is_mime_header(char *line) { char *name = sspm_property_name(line); int i; if(name == 0){ return 0; } for(i = 0; mime_headers[i] != 0; i++){ if(strcasecmp(name, mime_headers[i]) == 0) return 1; } return 0; } int sspm_is_mail_header(char* line) { char *name = sspm_property_name(line); if (name != 0){ return 1; } return 0; } int sspm_is_blank(char* line) { char *p; char c =0; for(p=line; *p!=0; p++){ if( ! (*p == ' '|| *p == '\t' || *p=='\n') ){ c++; } } if (c==0){ return 1; } return 0; } int sspm_is_continuation_line(char* line) { if (line[0] == ' '|| line[0] == '\t' ) { return 1; } return 0; } int sspm_is_mime_boundary(char *line) { if( line[0] == '-' && line[1] == '-') { return 1; } return 0; } int sspm_is_mime_terminating_boundary(char *line) { if (sspm_is_mime_boundary(line) && strstr(line,"--\n")){ return 1; } return 0; } enum line_type { EMPTY, BLANK, MIME_HEADER, MAIL_HEADER, HEADER_CONTINUATION, BOUNDARY, TERMINATING_BOUNDARY, UNKNOWN_TYPE }; static enum line_type get_line_type(char* line){ if (line == 0){ return EMPTY; } else if(sspm_is_blank(line)){ return BLANK; } else if (sspm_is_mime_header(line)){ return MIME_HEADER; } else if (sspm_is_mail_header(line)){ return MAIL_HEADER; } else if (sspm_is_continuation_line(line)){ return HEADER_CONTINUATION; } else if (sspm_is_mime_terminating_boundary(line)){ return TERMINATING_BOUNDARY; } else if (sspm_is_mime_boundary(line)) { return BOUNDARY; } else { return UNKNOWN_TYPE; } } static struct sspm_action_map get_action(struct mime_impl *impl, enum sspm_major_type major, enum sspm_minor_type minor) { int i; /* Read caller suppled action map */ if (impl->actions != 0){ for(i=0; impl->actions[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){ if((major == impl->actions[i].major && minor == impl->actions[i].minor) || (major == impl->actions[i].major && minor == SSPM_ANY_MINOR_TYPE)){ return impl->actions[i]; } } } /* Else, read default action map */ for(i=0; sspm_action_map[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){ if((major == sspm_action_map[i].major && minor == sspm_action_map[i].minor) || (major == sspm_action_map[i].major && minor == SSPM_ANY_MINOR_TYPE)){ break; } } return sspm_action_map[i]; } char* sspm_lowercase(char* str) { char* p = 0; char* new; if(str ==0){ return 0; } new = sspm_strdup(str); for(p = new; *p!=0; p++){ *p = tolower(*p); } return new; } enum sspm_major_type sspm_find_major_content_type(char* type) { int i; char* ltype = sspm_lowercase(type); for (i=0; major_content_type_map[i].type != SSPM_UNKNOWN_MAJOR_TYPE; i++){ if(strncmp(ltype, major_content_type_map[i].str, strlen(major_content_type_map[i].str))==0){ free(ltype); return major_content_type_map[i].type; } } free(ltype); return major_content_type_map[i].type; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ } enum sspm_minor_type sspm_find_minor_content_type(char* type) { int i; char* ltype = sspm_lowercase(type); char *p = strchr(ltype,'/'); if (p==0){ free(ltype); return SSPM_UNKNOWN_MINOR_TYPE; } p++; /* Skip the '/' */ for (i=0; minor_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; i++){ if(strncmp(p, minor_content_type_map[i].str, strlen(minor_content_type_map[i].str))==0){ free(ltype); return minor_content_type_map[i].type; } } free(ltype); return minor_content_type_map[i].type; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ } const char* sspm_major_type_string(enum sspm_major_type type) { int i; for (i=0; major_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; i++){ if(type == major_content_type_map[i].type){ return major_content_type_map[i].str; } } return major_content_type_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ } const char* sspm_minor_type_string(enum sspm_minor_type type) { int i; for (i=0; minor_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; i++){ if(type == minor_content_type_map[i].type){ return minor_content_type_map[i].str; } } return minor_content_type_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ } const char* sspm_encoding_string(enum sspm_encoding type) { int i; for (i=0; sspm_encoding_map[i].encoding != SSPM_UNKNOWN_ENCODING; i++){ if(type == sspm_encoding_map[i].encoding){ return sspm_encoding_map[i].str; } } return sspm_encoding_map[i].str; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ } /* Interpret a header line and add its data to the header structure. */ void sspm_build_header(struct sspm_header *header, char* line) { char *prop; char *val; val = sspm_strdup(sspm_value(line)); prop = sspm_strdup(sspm_property_name(line)); if(strcasecmp(prop,"Content-Type") == 0){ /* Create a new mime_header, fill in content-type and possibly boundary */ char* boundary= sspm_get_parameter(line,"boundary"); header->def = 0; header->major = sspm_find_major_content_type(val); header->minor = sspm_find_minor_content_type(val); if(header->minor == SSPM_UNKNOWN_MINOR_TYPE){ char *p = strchr(val,'/'); if (p != 0){ p++; /* Skip the '/' */ header->minor_text = sspm_strdup(p); } else { /* Error, malformed content type */ header->minor_text = sspm_strdup("unknown"); } } if (boundary != 0){ header->boundary = sspm_strdup(boundary); } } else if(strcasecmp(prop,"Content-Transfer-Encoding")==0){ char* encoding = sspm_value(line); char* lencoding = sspm_lowercase(encoding); if(strcasecmp(lencoding,"base64")==0){ header->encoding = SSPM_BASE64_ENCODING; } else if(strcasecmp(lencoding,"quoted-printable")==0){ header->encoding = SSPM_QUOTED_PRINTABLE_ENCODING; } else if(strcasecmp(lencoding,"binary")==0){ header->encoding = SSPM_BINARY_ENCODING; } else if(strcasecmp(lencoding,"7bit")==0){ header->encoding = SSPM_7BIT_ENCODING; } else if(strcasecmp(lencoding,"8bit")==0){ header->encoding = SSPM_8BIT_ENCODING; } else { header->encoding = SSPM_UNKNOWN_ENCODING; } free(lencoding); header->def = 0; } else if(strcasecmp(prop,"Content-Id")==0){ char* cid = sspm_value(line); header->content_id = sspm_strdup(cid); header->def = 0; } free(val); free(prop); } char* sspm_get_next_line(struct mime_impl *impl) { char* s; s = impl->get_string(impl->temp,TMP_BUF_SIZE,impl->get_string_data); if(s == 0){ impl->state = END_OF_INPUT; } return s; } void sspm_store_part(struct mime_impl *impl, struct sspm_header header, int level, void *part, size_t size) { impl->parts[impl->part_no].header = header; impl->parts[impl->part_no].level = level; impl->parts[impl->part_no].data = part; impl->parts[impl->part_no].data_size = size; impl->part_no++; } void sspm_set_error(struct sspm_header* header, enum sspm_error error, char* message) { header->error = error; if(header->error_text!=0){ free(header->error_text); } header->def = 0; if(message != 0){ header->error_text = sspm_strdup(message); } else { header->error_text = 0; } } void* sspm_make_part(struct mime_impl *impl, struct sspm_header *header, struct sspm_header *parent_header, void **end_part, size_t *size) { /* For a single part type, read to the boundary, if there is a boundary. Otherwise, read until the end of input. This routine assumes that the caller has read the header and has left the input at the first blank line */ char *line; void *part; int end = 0; struct sspm_action_map action = get_action( impl, header->major, header->minor); *size = 0; part =action.new_part(); impl->state = IN_BODY; while(end == 0 && (line = sspm_get_next_line(impl)) != 0){ if(sspm_is_mime_boundary(line)){ /* If there is a boundary, then this must be a multipart part, so there must be a parent_header. */ if(parent_header == 0){ char* boundary; end = 1; *end_part = 0; sspm_set_error(header,SSPM_UNEXPECTED_BOUNDARY_ERROR,line); /* Read until the paired terminating boundary */ if((boundary = (char*)malloc(strlen(line)+5)) == 0){ fprintf(stderr,"Out of memory"); abort(); } strcpy(boundary,line); strcat(boundary,"--"); while((line = sspm_get_next_line(impl)) != 0){ /*printf("Error: %s\n",line);*/ if(strcmp(boundary,line)==0){ break; } } free(boundary); break; } if(strncmp((line+2),parent_header->boundary, sizeof(parent_header->boundary)) == 0){ *end_part = action.end_part(part); if(sspm_is_mime_boundary(line)){ impl->state = END_OF_PART; } else if ( sspm_is_mime_terminating_boundary(line)){ impl->state = TERMINAL_END_OF_PART; } end = 1; } else { /* Error, this is not the correct terminating boundary*/ /* read and discard until we get the right boundary. */ char* boundary; char msg[256]; snprintf(msg,256, "Expected: %s--. Got: %s", parent_header->boundary,line); sspm_set_error(parent_header, SSPM_WRONG_BOUNDARY_ERROR,msg); /* Read until the paired terminating boundary */ if((boundary = (char*)malloc(strlen(line)+5)) == 0){ fprintf(stderr,"Out of memory"); abort(); } strcpy(boundary,line); strcat(boundary,"--"); while((line = sspm_get_next_line(impl)) != 0){ if(strcmp(boundary,line)==0){ break; } } free(boundary); } } else { char* data=0; char* rtrn=0; *size = strlen(line); data = (char*)malloc(*size+2); assert(data != 0); if (header->encoding == SSPM_BASE64_ENCODING){ rtrn = decode_base64(data,line,size); } else if(header->encoding == SSPM_QUOTED_PRINTABLE_ENCODING){ rtrn = decode_quoted_printable(data,line,size); } if(rtrn == 0){ strcpy(data,line); } /* add a end-of-string after the data, just in case binary data from decode64 gets passed to a tring handling routine in add_line */ data[*size+1]='\0'; action.add_line(part,header,data,*size); free(data); } } if (end == 0){ /* End the part if the input is exhausted */ *end_part = action.end_part(part); } return end_part; } void* sspm_make_multipart_subpart(struct mime_impl *impl, struct sspm_header *parent_header) { struct sspm_header header; char *line; void* part; size_t size; if(parent_header->boundary == 0){ /* Error. Multipart headers must have a boundary*/ sspm_set_error(parent_header,SSPM_NO_BOUNDARY_ERROR,0); /* read all of the reamining lines */ while((line = sspm_get_next_line(impl)) != 0){ } return 0; } /* Step 1: Read the opening boundary */ if(get_line_type(impl->temp) != BOUNDARY){ while((line=sspm_get_next_line(impl)) != 0 ){ if(sspm_is_mime_boundary(line)){ assert(parent_header != 0); /* Check if it is the right boundary */ if(!sspm_is_mime_terminating_boundary(line) && strncmp((line+2),parent_header->boundary, sizeof(parent_header->boundary)) == 0){ /* The +2 in strncmp skips over the leading "--" */ break; } else { /* Got the wrong boundary, so read and discard until we get the right boundary. */ char* boundary; char msg[256]; snprintf(msg,256, "Expected: %s. Got: %s", parent_header->boundary,line); sspm_set_error(parent_header, SSPM_WRONG_BOUNDARY_ERROR,msg); /* Read until the paired terminating boundary */ if((boundary = (char*)malloc(strlen(line)+5)) == 0){ fprintf(stderr,"Out of memory"); abort(); } strcpy(boundary,line); strcat(boundary,"--"); while((line = sspm_get_next_line(impl)) != 0){ if(strcmp(boundary,line)==0){ break; } } free(boundary); return 0; } } } } /* Step 2: Get the part header */ sspm_read_header(impl,&header); /* If the header is still listed as default, there was probably an error */ if(header.def == 1 && header.error != SSPM_NO_ERROR){ sspm_set_error(&header,SSPM_NO_HEADER_ERROR,0); return 0; } if(header.error!= SSPM_NO_ERROR){ sspm_store_part(impl,header,impl->level,0,0); return 0; } /* Step 3: read the body */ if(header.major == SSPM_MULTIPART_MAJOR_TYPE){ struct sspm_header *child_header; child_header = &(impl->parts[impl->part_no].header); /* Store the multipart part */ sspm_store_part(impl,header,impl->level,0,0); /* now get all of the sub-parts */ part = sspm_make_multipart_part(impl,child_header); if(get_line_type(impl->temp) != TERMINATING_BOUNDARY){ sspm_set_error(child_header,SSPM_NO_BOUNDARY_ERROR,impl->temp); return 0; } sspm_get_next_line(impl); /* Step past the terminating boundary */ } else { sspm_make_part(impl, &header,parent_header,&part,&size); memset(&(impl->parts[impl->part_no]), 0, sizeof(struct sspm_part)); sspm_store_part(impl,header,impl->level,part,size); } return part; } void* sspm_make_multipart_part(struct mime_impl *impl,struct sspm_header *header) { void *part=0; /* Now descend a level into each of the children of this part */ impl->level++; /* Now we are working on the CHILD */ memset(&(impl->parts[impl->part_no]), 0, sizeof(struct sspm_part)); do{ part = sspm_make_multipart_subpart(impl,header); if (part==0){ /* Clean up the part in progress */ impl->parts[impl->part_no].header.major = SSPM_NO_MAJOR_TYPE; impl->parts[impl->part_no].header.minor = SSPM_NO_MINOR_TYPE; } } while (get_line_type(impl->temp) != TERMINATING_BOUNDARY && impl->state != END_OF_INPUT); impl->level--; return 0; } void sspm_read_header(struct mime_impl *impl,struct sspm_header *header) { #define BUF_SIZE 1024 #define MAX_HEADER_LINES 25 char *buf; char header_lines[MAX_HEADER_LINES][BUF_SIZE]; /* HACK, hard limits TODO*/ int current_line = -1; int end = 0; memset(header_lines,0,sizeof(header_lines)); memset(header,0,sizeof(struct sspm_header)); /* Set up default header */ header->def = 1; header->major = SSPM_TEXT_MAJOR_TYPE; header->minor = SSPM_PLAIN_MINOR_TYPE; header->error = SSPM_NO_ERROR; header->error_text = 0; /* Read all of the lines into memory */ while(current_line<(MAX_HEADER_LINES-2) && (end==0) && ((buf=sspm_get_next_line(impl)) != 0)){ enum line_type line_type = get_line_type(buf); switch(line_type){ case BLANK: { end = 1; impl->state = END_OF_HEADER; break; } case MAIL_HEADER: case MIME_HEADER: { impl->state = IN_HEADER; current_line++; assert(strlen(buf) < BUF_SIZE); strncpy(header_lines[current_line],buf,BUF_SIZE); header_lines[current_line][BUF_SIZE-1] = '\0'; break; } case HEADER_CONTINUATION: { char* last_line, *end; char *buf_start; if(current_line < 0){ /* This is not really a continuation line, since we have not see any header line yet */ sspm_set_error(header,SSPM_MALFORMED_HEADER_ERROR,buf); return; } last_line = header_lines[current_line]; end = (char*) ( (size_t)strlen(last_line)+ (size_t)last_line); impl->state = IN_HEADER; /* skip over the spaces in buf start, and remove the new line at the end of the lat line */ if (last_line[strlen(last_line)-1] == '\n'){ last_line[strlen(last_line)-1] = '\0'; } buf_start = buf; while(*buf_start == ' ' ||*buf_start == '\t' ){ buf_start++; } assert( strlen(buf_start) + strlen(last_line) < BUF_SIZE); strncat(last_line,buf_start, BUF_SIZE-strlen(last_line)-1); break; } default: { sspm_set_error(header,SSPM_MALFORMED_HEADER_ERROR,buf); return; } } } for(current_line = 0; current_line < MAX_HEADER_LINES && header_lines[current_line][0] != 0; current_line++){ sspm_build_header(header,header_lines[current_line]); } } /* Root routine for parsing mime entries*/ int sspm_parse_mime(struct sspm_part *parts, size_t max_parts, const struct sspm_action_map *actions, char* (*get_string)(char *s, size_t size, void* data), void *get_string_data, struct sspm_header *first_header ) { struct mime_impl impl; struct sspm_header header; void *part; int i; (void)first_header; /* Initialize all of the data */ memset(&impl,0,sizeof(struct mime_impl)); memset(&header,0,sizeof(struct sspm_header)); for(i = 0; i<(int)max_parts; i++){ parts[i].header.major = SSPM_NO_MAJOR_TYPE; parts[i].header.minor = SSPM_NO_MINOR_TYPE; } impl.parts = parts; impl.max_parts = max_parts; impl.part_no = 0; impl.actions = actions; impl.get_string = get_string; impl.get_string_data = get_string_data; /* Read the header of the message. This will be the email header, unless first_header is specified. But ( HACK) that var is not currently being used */ sspm_read_header(&impl,&header); if(header.major == SSPM_MULTIPART_MAJOR_TYPE){ struct sspm_header *child_header; child_header = &(impl.parts[impl.part_no].header); sspm_store_part(&impl,header,impl.level,0,0); part = sspm_make_multipart_part(&impl,child_header); } else { void *part; size_t size; sspm_make_part(&impl, &header, 0,&part,&size); memset(&(impl.parts[impl.part_no]), 0, sizeof(struct sspm_part)); sspm_store_part(&impl,header,impl.level,part,size); } return 0; } void sspm_free_parts(struct sspm_part *parts, size_t max_parts) { int i; for(i = 0; i<(int)max_parts && parts[i].header.major != SSPM_NO_MAJOR_TYPE; i++){ sspm_free_header(&(parts[i].header)); } } void sspm_free_header(struct sspm_header *header) { if(header->boundary!=0){ free(header->boundary); } if(header->minor_text!=0){ free(header->minor_text); } if(header->charset!=0){ free(header->charset); } if(header->filename!=0){ free(header->filename); } if(header->content_id!=0){ free(header->content_id); } if(header->error_text!=0){ free(header->error_text); } } /*********************************************************************** The remaining code is beased on code from the mimelite distribution, which has the following notice: | Authorship: | Copyright (c) 1994 Gisle Hannemyr. | Permission is granted to hack, make and distribute copies of this | program as long as this copyright notice is not removed. | Flames, bug reports, comments and improvements to: | snail: Gisle Hannemyr, Brageveien 3A, 0452 Oslo, Norway | email: Inet: gisle@oslonett.no The code is heavily modified by Eric Busboom. ***********************************************************************/ char *decode_quoted_printable(char *dest, char *src, size_t *size) { int cc; size_t i=0; while (*src != 0 && i < *size) { if (*src == '=') { src++; if (!*src) { break; } /* remove soft line breaks*/ if ((*src == '\n') || (*src == '\r')){ src++; if ((*src == '\n') || (*src == '\r')){ src++; } continue; } cc = isdigit(*src) ? (*src - '0') : (*src - 55); cc *= 0x10; src++; if (!*src) { break; } cc += isdigit(*src) ? (*src - '0') : (*src - 55); *dest = cc; } else { *dest = *src; } dest++; src++; i++; } *dest = '\0'; *size = i; return(dest); } char *decode_base64(char *dest, char *src, size_t *size) { int cc = 0; char buf[4] = {0,0,0,0}; int p = 0; int valid_data = 0; size_t size_out=0; while (*src && p<(int)*size && (cc!= -1)) { /* convert a character into the Base64 alphabet */ cc = *src++; if ((cc >= 'A') && (cc <= 'Z')) cc = cc - 'A'; else if ((cc >= 'a') && (cc <= 'z')) cc = cc - 'a' + 26; else if ((cc >= '0') && (cc <= '9')) cc = cc - '0' + 52; else if (cc == '/') cc = 63; else if (cc == '+') cc = 62; else cc = -1; assert(cc<64); /* If we've reached the end, fill the remaining slots in the bucket and do a final conversion */ if(cc== -1){ if(valid_data == 0){ return 0; } while(p%4!=3){ p++; buf[p%4] = 0; } } else { buf[p%4] = cc; size_out++; valid_data = 1; } /* When we have 4 base64 letters, convert them into three bytes */ if (p%4 == 3) { *dest++ =(buf[0]<< 2)|((buf[1] & 0x30) >> 4); *dest++ =((buf[1] & 0x0F) << 4)|((buf[2] & 0x3C) >> 2); *dest++ =((buf[2] & 0x03) << 6)|(buf[3] & 0x3F); memset(buf,0,4); } p++; } /* Calculate the size of the converted data*/ *size = ((int)(size_out/4))*3; if(size_out%4 == 2) *size+=1; if(size_out%4 == 3) *size+=2; return(dest); } /*********************************************************************** Routines to output MIME **********************************************************************/ struct sspm_buffer { char* buffer; char* pos; size_t buf_size; int line_pos; }; void sspm_append_string(struct sspm_buffer* buf, const char* string); void sspm_write_part(struct sspm_buffer *buf,struct sspm_part *part, int *part_num); void sspm_append_hex(struct sspm_buffer* buf, char ch) { char tmp[4]; snprintf(tmp,sizeof(tmp),"=%02X",ch); sspm_append_string(buf,tmp); } /* a copy of icalmemory_append_char */ void sspm_append_char(struct sspm_buffer* buf, char ch) { char *new_buf; char *new_pos; size_t data_length, final_length; data_length = (size_t)buf->pos - (size_t)buf->buffer; final_length = data_length + 2; if ( final_length > (size_t) buf->buf_size ) { buf->buf_size = (buf->buf_size) * 2 + final_length +1; new_buf = realloc(buf->buffer,buf->buf_size); new_pos = (void*)((size_t)new_buf + data_length); buf->pos = new_pos; buf->buffer = new_buf; } *(buf->pos) = ch; buf->pos += 1; *(buf->pos) = 0; } /* A copy of icalmemory_append_string */ void sspm_append_string(struct sspm_buffer* buf, const char* string) { char *new_buf; char *new_pos; size_t data_length, final_length, string_length; string_length = strlen(string); data_length = (size_t)buf->pos - (size_t)buf->buffer; final_length = data_length + string_length; if ( final_length >= (size_t) buf->buf_size) { buf->buf_size = (buf->buf_size) * 2 + final_length; new_buf = realloc(buf->buffer,buf->buf_size); new_pos = (void*)((size_t)new_buf + data_length); buf->pos = new_pos; buf->buffer = new_buf; } strcpy(buf->pos, string); buf->pos += string_length; } static int sspm_is_printable(char c) { return (c >= 33) && (c <= 126) && (c != '='); } void sspm_encode_quoted_printable(struct sspm_buffer *buf, char* data) { char *p; int lpos = 0; for(p = data; *p != 0; p++){ if(sspm_is_printable(*p)){ /* plain characters can represent themselves */ /* RFC2045 Rule #2 */ sspm_append_char(buf,*p); lpos++; } else if ( *p == '\t' || *p == ' ' ) { /* For tabs and spaces, only encode if they appear at the end of the line */ /* RFC2045 Rule #3 */ char n = *(p+1); if( n == '\n' || n == '\r'){ sspm_append_hex(buf,*p); lpos += 3; } else { sspm_append_char(buf,*p); lpos++; } } else if( *p == '\n' || *p == '\r'){ sspm_append_char(buf,*p); lpos=0; } else { /* All others need to be encoded */ sspm_append_hex(buf,*p); lpos+=3; } /* Add line breaks */ if (lpos > 72){ lpos = 0; sspm_append_string(buf,"=\n"); } } } static char BaseTable[64] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' }; void sspm_write_base64(struct sspm_buffer *buf, char* inbuf,int size ) { char outbuf[4]; int i; outbuf[0] = outbuf[1] = outbuf[2] = outbuf[3] = 65; switch(size){ case 4: outbuf[3] = inbuf[2] & 0x3F; case 3: outbuf[2] = ((inbuf[1] & 0x0F) << 2) | ((inbuf[2] & 0xC0) >> 6); case 2: outbuf[0] = (inbuf[0] & 0xFC) >> 2; outbuf[1] = ((inbuf[0] & 0x03) << 4) | ((inbuf[1] & 0xF0) >> 4); break; default: assert(0); } for(i = 0; i < 4; i++){ if(outbuf[i] == 65){ sspm_append_char(buf,'='); } else { sspm_append_char(buf,BaseTable[(int)outbuf[i]]); } } } void sspm_encode_base64(struct sspm_buffer *buf, char* data, size_t size) { char *p; char inbuf[3]; int i = 0; int first = 1; int lpos = 0; (void)size; inbuf[0] = inbuf[1] = inbuf[2] = 0; for (p = data; *p !=0; p++){ if (i%3 == 0 && first == 0){ sspm_write_base64(buf, inbuf, 4); lpos+=4; inbuf[0] = inbuf[1] = inbuf[2] = 0; } assert(lpos%4 == 0); if (lpos == 72){ sspm_append_string(buf,"\n"); lpos = 0; } inbuf[i%3] = *p; i++; first = 0; } /* If the inbuf was not exactly filled on the last byte, we need to spit out the odd bytes that did get in -- either one or two. This will result in an output of two bytes and '==' or three bytes and '=', respectively */ if (i%3 == 1 && first == 0){ sspm_write_base64(buf, inbuf, 2); } else if (i%3 == 2 && first == 0){ sspm_write_base64(buf, inbuf, 3); } } void sspm_write_header(struct sspm_buffer *buf,struct sspm_header *header) { int i; char temp[TMP_BUF_SIZE]; const char* major; const char* minor; /* Content-type */ major = sspm_major_type_string(header->major); minor = sspm_minor_type_string(header->minor); if(header->minor == SSPM_UNKNOWN_MINOR_TYPE ){ assert(header->minor_text !=0); minor = header->minor_text; } snprintf(temp,sizeof(temp),"Content-Type: %s/%s",major,minor); sspm_append_string(buf,temp); if(header->boundary != 0){ snprintf(temp,sizeof(temp),";boundary=\"%s\"",header->boundary); sspm_append_string(buf,temp); } /* Append any content type parameters */ if(header->content_type_params != 0){ for(i=0; *(header->content_type_params[i])!= 0;i++){ snprintf(temp, sizeof(temp),"%s", header->content_type_params[i]); sspm_append_char(buf, ';'); sspm_append_string(buf, temp); } } sspm_append_char(buf,'\n'); /*Content-Transfer-Encoding */ if(header->encoding != SSPM_UNKNOWN_ENCODING && header->encoding != SSPM_NO_ENCODING){ snprintf(temp,sizeof(temp),"Content-Transfer-Encoding: %s\n", sspm_encoding_string(header->encoding)); } sspm_append_char(buf,'\n'); } void sspm_write_multipart_part(struct sspm_buffer *buf, struct sspm_part *parts, int* part_num) { int parent_level, level; struct sspm_header *header = &(parts[*part_num].header); /* Write the header for the multipart part */ sspm_write_header(buf,header); parent_level = parts[*part_num].level; (*part_num)++; level = parts[*part_num].level; while(parts[*part_num].header.major != SSPM_NO_MAJOR_TYPE && level == parent_level+1){ assert(header->boundary); sspm_append_string(buf,header->boundary); sspm_append_char(buf,'\n'); if (parts[*part_num].header.major == SSPM_MULTIPART_MAJOR_TYPE){ sspm_write_multipart_part(buf,parts,part_num); } else { sspm_write_part(buf, &(parts[*part_num]), part_num); } (*part_num)++; level = parts[*part_num].level; } sspm_append_string(buf,"\n\n--"); sspm_append_string(buf,header->boundary); sspm_append_string(buf,"\n"); (*part_num)--; /* undo last, spurious, increment */ } void sspm_write_part(struct sspm_buffer *buf,struct sspm_part *part,int *part_num) { (void)part_num; /* Write header */ sspm_write_header(buf,&(part->header)); /* Write part data */ if(part->data == 0){ return; } if(part->header.encoding == SSPM_BASE64_ENCODING) { assert(part->data_size != 0); sspm_encode_base64(buf,part->data,part->data_size); } else if(part->header.encoding == SSPM_QUOTED_PRINTABLE_ENCODING) { sspm_encode_quoted_printable(buf,part->data); } else { sspm_append_string(buf,part->data); } sspm_append_string(buf,"\n\n"); } int sspm_write_mime(struct sspm_part *parts,size_t num_parts, char **output_string, const char* header) { struct sspm_buffer buf; int part_num =0; size_t slen; (void)num_parts; buf.buffer = malloc(4096); buf.buffer[0] = '\0'; buf.pos = buf.buffer; buf.buf_size = 10; buf.line_pos = 0; /* write caller's header */ if(header != 0){ sspm_append_string(&buf,header); } slen = strlen(buf.buffer); if(slen > 0 && buf.buffer[slen-1] != '\n'){ sspm_append_char(&buf,'\n'); } /* write mime-version header */ sspm_append_string(&buf,"Mime-Version: 1.0\n"); /* End of header */ /* Write body parts */ while(parts[part_num].header.major != SSPM_NO_MAJOR_TYPE){ if (parts[part_num].header.major == SSPM_MULTIPART_MAJOR_TYPE){ sspm_write_multipart_part(&buf,parts,&part_num); } else { sspm_write_part(&buf, &(parts[part_num]), &part_num); } part_num++; } *output_string = buf.buffer; return 0; } libical-1.0/src/libical/icalparameterimpl.h0000664000076400007640000000232612132563132017766 0ustar allenallen/* -*- Mode: C -*- ====================================================================== FILE: icalparameterimpl.h CREATOR: eric 09 May 1999 $Id: icalparameterimpl.h,v 1.4 2008-01-15 23:17:40 dothebart Exp $ $Locker: $ (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalderivedparameters.{c,h} Contributions from: Graham Davison (g.m.davison@computer.org) ======================================================================*/ #ifdef HAVE_CONFIG_H #include #endif #ifndef ICALPARAMETER_IMPL #define ICALPARAMETER_IMPL #include "icalparameter.h" #include "icalproperty.h" struct icalparameter_impl { icalparameter_kind kind; char id[5]; int size; const char* string; const char* x_name; icalproperty* parent; int data; }; #endif /*ICALPARAMETER_IMPL*/ libical-1.0/src/libical/icalvalue_cxx.cpp0000664000076400007640000001455512132563132017464 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalvalue_cxx.cpp CREATOR: fnguyen 12/21/01 (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALVALUE_CXX_H #include "icalvalue_cxx.h" #endif typedef char* string; // Will use the string library from STL ICalValue::ICalValue() throw(icalerrorenum) : imp(icalvalue_new(ICAL_ANY_VALUE)){} ICalValue::ICalValue(const ICalValue& v) throw (icalerrorenum) { imp = icalvalue_new_clone(v.imp); if (!imp) throw icalerrno; } ICalValue& ICalValue::operator=(const ICalValue& v) throw(icalerrorenum) { if (this == &v) return *this; if (imp != NULL) { icalvalue_free(imp); imp = icalvalue_new_clone(v.imp); if (!imp) throw icalerrno; } return *this; } ICalValue::~ICalValue(){ if (imp != NULL) icalvalue_free(imp); } ICalValue::ICalValue(icalvalue* v) throw(icalerrorenum) : imp(v){ } ICalValue::ICalValue(icalvalue_kind kind) throw(icalerrorenum) { imp = icalvalue_new(kind); if (!imp) throw icalerrno; } ICalValue::ICalValue(icalvalue_kind kind, string str) throw(icalerrorenum) { imp = icalvalue_new_from_string(kind, str); if (!imp) throw icalerrno; } string ICalValue::as_ical_string(){ return (string)icalvalue_as_ical_string(imp); } bool ICalValue::is_valid(){ if (imp == NULL) return false; return (icalvalue_is_valid(imp) ? true : false); } icalvalue_kind ICalValue::isa(){ return icalvalue_isa(imp); } int ICalValue::isa_value(void* value){ return icalvalue_isa_value(value); } /* Special, non autogenerated value accessors */ void ICalValue::set_recur(struct icalrecurrencetype v){ icalvalue_set_recur(imp, v); } struct icalrecurrencetype ICalValue::get_recur(){ return icalvalue_get_recur(imp); } void ICalValue::set_trigger(struct icaltriggertype v){} struct icaltriggertype ICalValue::get_trigger(){ return icalvalue_get_trigger(imp); } void ICalValue::set_datetimeperiod(struct icaldatetimeperiodtype v){ icalvalue_set_datetimeperiod(imp, v); } struct icaldatetimeperiodtype ICalValue::get_datetimeperiod(){ return icalvalue_get_datetimeperiod(imp); } icalparameter_xliccomparetype ICalValue::compare(ICalValue& a, ICalValue& b){ return icalvalue_compare(a, b); } /* Convert enumerations */ icalvalue_kind ICalValue::string_to_kind(string str){ return icalvalue_string_to_kind(str); } string ICalValue::kind_to_string(icalvalue_kind kind){ return (string)icalvalue_kind_to_string(kind); } /* BOOLEAN */ int ICalValue::get_boolean(){ return icalvalue_get_boolean(imp); } void ICalValue::set_boolean(int v){ icalvalue_set_boolean(imp, v); } /* UTC-OFFSET */ int ICalValue::get_utcoffset(){ return icalvalue_get_utcoffset(imp); } void ICalValue::set_utcoffset(int v){ icalvalue_set_utcoffset(imp, v); } /* METHOD */ enum icalproperty_method ICalValue::get_method(){ return icalvalue_get_method(imp); } void ICalValue::set_method(enum icalproperty_method v){ icalvalue_set_method(imp, v); } /* CAL-ADDRESS */ string ICalValue::get_caladdress(){ return (string)icalvalue_get_caladdress(imp); } void ICalValue::set_caladdress(string v){ icalvalue_set_caladdress(imp, v); } /* PERIOD */ struct icalperiodtype ICalValue::get_period(){ return icalvalue_get_period(imp); } void ICalValue::set_period(struct icalperiodtype v){ icalvalue_set_period(imp, v); } /* STATUS */ enum icalproperty_status ICalValue::get_status(){ return icalvalue_get_status(imp); } void ICalValue::set_status(enum icalproperty_status v){ icalvalue_set_status(imp, v); } /* BINARY */ string ICalValue::get_binary(){ return (string)icalvalue_get_binary(imp); } void ICalValue::set_binary(string v){ icalvalue_set_binary(imp, v); } /* TEXT */ string ICalValue::get_text(){ return (string)icalvalue_get_text(imp); } void ICalValue::set_text(string v){ icalvalue_set_text(imp, v); } /* DURATION */ struct icaldurationtype ICalValue::get_duration(){ return icalvalue_get_duration(imp); } void ICalValue::set_duration(struct icaldurationtype v){ icalvalue_set_duration(imp, v); } /* INTEGER */ int ICalValue::get_integer(){ return icalvalue_get_integer(imp); } void ICalValue::set_integer(int v){ icalvalue_set_integer(imp, v); } /* URI */ string ICalValue::get_uri(){ return (string)icalvalue_get_uri(imp); } void ICalValue::set_uri(string v){ icalvalue_set_uri(imp, v); } /* ATTACH */ icalattach *ICalValue::get_attach(){ return icalvalue_get_attach(imp); } void ICalValue::set_attach(icalattach *v){ icalvalue_set_attach(imp, v); } /* CLASS */ enum icalproperty_class ICalValue::get_class(){ return icalvalue_get_class(imp); } void ICalValue::set_class(enum icalproperty_class v){ icalvalue_set_class(imp, v); } /* FLOAT */ float ICalValue::get_float(){ return icalvalue_get_float(imp); } void ICalValue::set_float(float v){ icalvalue_set_float(imp, v); } /* QUERY */ string ICalValue::get_query(){ return (string)icalvalue_get_query(imp); } void ICalValue::set_query(string v){ icalvalue_set_query(imp, v); } /* STRING */ string ICalValue::get_string(){ return (string)icalvalue_get_string(imp); } void ICalValue::set_string(string v){ icalvalue_set_string(imp, v); } /* TRANSP */ enum icalproperty_transp ICalValue::get_transp(){ return icalvalue_get_transp(imp); } void ICalValue::set_transp(enum icalproperty_transp v){ icalvalue_set_transp(imp, v); } /* DATE-TIME */ struct icaltimetype ICalValue::get_datetime(){ return icalvalue_get_datetime(imp); } void ICalValue::set_datetime(struct icaltimetype v){ icalvalue_set_datetime(imp, v); } /* GEO */ struct icalgeotype ICalValue::get_geo(){ return icalvalue_get_geo(imp); } void ICalValue::set_geo(struct icalgeotype v){ icalvalue_set_geo(imp, v); } /* DATE */ struct icaltimetype ICalValue::get_date(){ return icalvalue_get_date(imp); } void ICalValue::set_date(struct icaltimetype v){ icalvalue_set_date(imp, v); } /* ACTION */ enum icalproperty_action ICalValue::get_action(){ return icalvalue_get_action(imp); } void ICalValue::set_action(enum icalproperty_action v){ icalvalue_set_action(imp, v); } libical-1.0/src/libical/icalcomponent.h0000664000076400007640000002412312132563132017125 0ustar allenallen/* -*- Mode: C -*- */ /*====================================================================== FILE: icalcomponent.h CREATOR: eric 20 March 1999 (C) COPYRIGHT 2000, Eric Busboom http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalcomponent.h ======================================================================*/ #ifndef ICALCOMPONENT_H #define ICALCOMPONENT_H #include "icalproperty.h" #include "icalvalue.h" #include "icalenums.h" /* defines icalcomponent_kind */ #include "pvl.h" typedef struct icalcomponent_impl icalcomponent; #ifndef ICALTIMEZONE_DEFINED #define ICALTIMEZONE_DEFINED /** @brief An opaque struct representing a timezone. * We declare this here to avoid a circular dependancy. */ typedef struct _icaltimezone icaltimezone; #endif /* This is exposed so that callers will not have to allocate and deallocate iterators. Pretend that you can't see it. */ typedef struct icalcompiter { icalcomponent_kind kind; pvl_elem iter; } icalcompiter; icalcomponent* icalcomponent_new(icalcomponent_kind kind); icalcomponent* icalcomponent_new_clone(icalcomponent* component); icalcomponent* icalcomponent_new_from_string(const char* str); icalcomponent* icalcomponent_vanew(icalcomponent_kind kind, ...); icalcomponent* icalcomponent_new_x(const char* x_name); void icalcomponent_free(icalcomponent* component); char* icalcomponent_as_ical_string(icalcomponent* component); char* icalcomponent_as_ical_string_r(icalcomponent* component); int icalcomponent_is_valid(icalcomponent* component); icalcomponent_kind icalcomponent_isa(const icalcomponent* component); int icalcomponent_isa_component (void* component); /* * Working with properties */ void icalcomponent_add_property(icalcomponent* component, icalproperty* property); void icalcomponent_remove_property(icalcomponent* component, icalproperty* property); int icalcomponent_count_properties(icalcomponent* component, icalproperty_kind kind); /* Iterate through the properties */ icalproperty* icalcomponent_get_current_property(icalcomponent* component); icalproperty* icalcomponent_get_first_property(icalcomponent* component, icalproperty_kind kind); icalproperty* icalcomponent_get_next_property(icalcomponent* component, icalproperty_kind kind); /* * Working with components */ /* Return the first VEVENT, VTODO or VJOURNAL sub-component of cop, or comp if it is one of those types */ icalcomponent* icalcomponent_get_inner(icalcomponent* comp); void icalcomponent_add_component(icalcomponent* parent, icalcomponent* child); void icalcomponent_remove_component(icalcomponent* parent, icalcomponent* child); int icalcomponent_count_components(icalcomponent* component, icalcomponent_kind kind); /** This takes 2 VCALENDAR components and merges the second one into the first, resolving any problems with conflicting TZIDs. comp_to_merge will no longer exist after calling this function. */ void icalcomponent_merge_component(icalcomponent* comp, icalcomponent* comp_to_merge); /* Iteration Routines. There are two forms of iterators, internal and external. The internal ones came first, and are almost completely sufficient, but they fail badly when you want to construct a loop that removes components from the container.*/ /* Iterate through components */ icalcomponent* icalcomponent_get_current_component (icalcomponent* component); icalcomponent* icalcomponent_get_first_component(icalcomponent* component, icalcomponent_kind kind); icalcomponent* icalcomponent_get_next_component(icalcomponent* component, icalcomponent_kind kind); /* Using external iterators */ icalcompiter icalcomponent_begin_component(icalcomponent* component, icalcomponent_kind kind); icalcompiter icalcomponent_end_component(icalcomponent* component, icalcomponent_kind kind); icalcomponent* icalcompiter_next(icalcompiter* i); icalcomponent* icalcompiter_prior(icalcompiter* i); icalcomponent* icalcompiter_deref(icalcompiter* i); /* Working with embedded error properties */ /* Check the component against itip rules and insert error properties*/ /* Working with embedded error properties */ int icalcomponent_check_restrictions(icalcomponent* comp); /** Count embedded errors. */ int icalcomponent_count_errors(icalcomponent* component); /** Remove all X-LIC-ERROR properties*/ void icalcomponent_strip_errors(icalcomponent* component); /** Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/ void icalcomponent_convert_errors(icalcomponent* component); /* Internal operations. They are private, and you should not be using them. */ icalcomponent* icalcomponent_get_parent(icalcomponent* component); void icalcomponent_set_parent(icalcomponent* component, icalcomponent* parent); /* Kind conversion routines */ int icalcomponent_kind_is_valid(const icalcomponent_kind kind); icalcomponent_kind icalcomponent_string_to_kind(const char* string); const char* icalcomponent_kind_to_string(icalcomponent_kind kind); /************* Derived class methods. **************************** If the code was in an OO language, the remaining routines would be members of classes derived from icalcomponent. Don't call them on the wrong component subtypes. */ /** For VCOMPONENT: Return a reference to the first VEVENT, VTODO or VJOURNAL */ icalcomponent* icalcomponent_get_first_real_component(icalcomponent *c); /** For VEVENT, VTODO, VJOURNAL and VTIMEZONE: report the start and end times of an event in UTC */ struct icaltime_span icalcomponent_get_span(icalcomponent* comp); /******************** Convienience routines **********************/ void icalcomponent_set_dtstart(icalcomponent* comp, struct icaltimetype v); struct icaltimetype icalcomponent_get_dtstart(icalcomponent* comp); /* For the icalcomponent routines only, dtend and duration are tied together. If you call the set routine for one and the other exists, the routine will calculate the change to the other. That is, if there is a DTEND and you call set_duration, the routine will modify DTEND to be the sum of DTSTART and the duration. If you call a get routine for one and the other exists, the routine will calculate the return value. If you call a set routine and neither exists, the routine will create the apcompriate comperty */ struct icaltimetype icalcomponent_get_dtend(icalcomponent* comp); void icalcomponent_set_dtend(icalcomponent* comp, struct icaltimetype v); struct icaltimetype icalcomponent_get_due(icalcomponent* comp); void icalcomponent_set_due(icalcomponent* comp, struct icaltimetype v); void icalcomponent_set_duration(icalcomponent* comp, struct icaldurationtype v); struct icaldurationtype icalcomponent_get_duration(icalcomponent* comp); void icalcomponent_set_method(icalcomponent* comp, icalproperty_method method); icalproperty_method icalcomponent_get_method(icalcomponent* comp); struct icaltimetype icalcomponent_get_dtstamp(icalcomponent* comp); void icalcomponent_set_dtstamp(icalcomponent* comp, struct icaltimetype v); void icalcomponent_set_summary(icalcomponent* comp, const char* v); const char* icalcomponent_get_summary(icalcomponent* comp); void icalcomponent_set_comment(icalcomponent* comp, const char* v); const char* icalcomponent_get_comment(icalcomponent* comp); void icalcomponent_set_uid(icalcomponent* comp, const char* v); const char* icalcomponent_get_uid(icalcomponent* comp); void icalcomponent_set_relcalid(icalcomponent* comp, const char* v); const char* icalcomponent_get_relcalid(icalcomponent* comp); void icalcomponent_set_recurrenceid(icalcomponent* comp, struct icaltimetype v); struct icaltimetype icalcomponent_get_recurrenceid(icalcomponent* comp); void icalcomponent_set_description(icalcomponent* comp, const char* v); const char* icalcomponent_get_description(icalcomponent* comp); void icalcomponent_set_location(icalcomponent* comp, const char* v); const char* icalcomponent_get_location(icalcomponent* comp); void icalcomponent_set_sequence(icalcomponent* comp, int v); int icalcomponent_get_sequence(icalcomponent* comp); void icalcomponent_set_status(icalcomponent* comp, enum icalproperty_status v); enum icalproperty_status icalcomponent_get_status(icalcomponent* comp); /** Calls the given function for each TZID parameter found in the component, and any subcomponents. */ void icalcomponent_foreach_tzid(icalcomponent* comp, void (*callback)(icalparameter *param, void *data), void *callback_data); /** Returns the icaltimezone in the component corresponding to the TZID, or NULL if it can't be found. */ icaltimezone* icalcomponent_get_timezone(icalcomponent* comp, const char *tzid); int icalproperty_recurrence_is_excluded(icalcomponent *comp, struct icaltimetype *dtstart, struct icaltimetype *recurtime); void icalcomponent_foreach_recurrence(icalcomponent* comp, struct icaltimetype start, struct icaltimetype end, void (*callback)(icalcomponent *comp, struct icaltime_span *span, void *data), void *callback_data); /*************** Type Specific routines ***************/ icalcomponent* icalcomponent_new_vcalendar(void); icalcomponent* icalcomponent_new_vevent(void); icalcomponent* icalcomponent_new_vtodo(void); icalcomponent* icalcomponent_new_vjournal(void); icalcomponent* icalcomponent_new_valarm(void); icalcomponent* icalcomponent_new_vfreebusy(void); icalcomponent* icalcomponent_new_vtimezone(void); icalcomponent* icalcomponent_new_xstandard(void); icalcomponent* icalcomponent_new_xdaylight(void); icalcomponent* icalcomponent_new_vagenda(void); icalcomponent* icalcomponent_new_vquery(void); #endif /* !ICALCOMPONENT_H */ libical-1.0/src/libical/ical_file.cmake0000664000076400007640000000367212132563132017040 0ustar allenallen# ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. # It is required to make the combined header ical.h properly. set(COMBINEDHEADERSICAL ${TOPB}/src/libical/icalversion.h ${TOPS}/src/libical/icaltime.h ${TOPS}/src/libical/icalduration.h ${TOPS}/src/libical/icalperiod.h ${TOPS}/src/libical/icalenums.h ${TOPS}/src/libical/icaltypes.h ${TOPS}/src/libical/icalrecur.h ${TOPS}/src/libical/icalattach.h ${TOPB}/src/libical/icalderivedvalue.h ${TOPB}/src/libical/icalderivedparameter.h ${TOPS}/src/libical/icalvalue.h ${TOPS}/src/libical/icalparameter.h ${TOPB}/src/libical/icalderivedproperty.h ${TOPS}/src/libical/icalproperty.h ${TOPS}/src/libical/pvl.h ${TOPS}/src/libical/icalarray.h ${TOPS}/src/libical/icalcomponent.h ${TOPS}/src/libical/icaltimezone.h ${TOPS}/src/libical/icalparser.h ${TOPS}/src/libical/icalmemory.h ${TOPB}/src/libical/icalerror.h ${TOPS}/src/libical/icalrestriction.h ${TOPS}/src/libical/sspm.h ${TOPS}/src/libical/icalmime.h ${TOPS}/src/libical/icallangbind.h ) FILE(WRITE ${ICAL_FILE_H_FILE} "#ifndef LIBICAL_ICAL_H\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#define LIBICAL_ICAL_H\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#ifdef __cplusplus\n") FILE(APPEND ${ICAL_FILE_H_FILE} "extern \"C\" {\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#endif\n") foreach (_current_FILE ${COMBINEDHEADERSICAL}) FILE(READ ${_current_FILE} _contents) STRING(REGEX REPLACE "#include *\"ical.*\\.h\"" "" _contents "${_contents}") STRING(REGEX REPLACE "#include *\"config.*\\.h\"" "" _contents "${_contents}") STRING(REGEX REPLACE "#include *\"pvl\\.h\"" "" _contents "${_contents}" ) FILE(APPEND ${ICAL_FILE_H_FILE} "${_contents}") endforeach (_current_FILE) FILE(APPEND ${ICAL_FILE_H_FILE} "\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#ifdef __cplusplus\n") FILE(APPEND ${ICAL_FILE_H_FILE} "}\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#endif\n") FILE(APPEND ${ICAL_FILE_H_FILE} "#endif\n") libical-1.0/src/libical/icalproperty_cxx.h0000664000076400007640000002100412132563130017662 0ustar allenallen/* -*- Mode: C++ -*- */ /** * @file icalproperty_cxx.h * @author fnguyen (12/10/01) * @brief Definition of C++ Wrapper for icalproperty.c * * (C) COPYRIGHT 2001, Critical Path This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ */ #ifndef ICALPROPERTY_CXX_H #define ICALPROPERTY_CXX_H #include "ical.h" #include "icptrholder.h" typedef char* string; // Will use the string library from STL class ICalParameter; class ICalValue; class ICalProperty { public: ICalProperty(); ICalProperty(const ICalProperty&) throw(icalerrorenum); ICalProperty& operator=(const ICalProperty&) throw(icalerrorenum); ~ICalProperty(); ICalProperty(icalproperty* v); ICalProperty(string str); ICalProperty(icalproperty_kind kind); ICalProperty(icalproperty_kind kind, string str); operator icalproperty*() {return imp;} int operator==(ICalProperty& rhs); void detach() { imp = NULL; } public: string as_ical_string(); icalproperty_kind isa(); int isa_property(void* property); void add_parameter(ICalParameter& parameter); void set_parameter(ICalParameter& parameter); void set_parameter_from_string(string name, string val); string get_parameter_as_string(string name); void remove_parameter(icalparameter_kind kind); int count_parameters(); /** Iterate through the parameters */ ICalParameter* get_first_parameter(icalparameter_kind kind); ICalParameter* get_next_parameter(icalparameter_kind kind); /** Access the value of the property */ void set_value(const ICalValue& val); void set_value_from_string(string val, string kind); ICalValue* get_value(); string get_value_as_string(); /** Return the name of the property -- the type name converted * to a string, or the value of get_x_name if the type is X * property */ string get_name(); public: /* Deal with X properties */ static void set_x_name(ICalProperty &prop, string name); static string get_x_name(ICalProperty &prop); static icalvalue_kind icalparameter_value_to_value_kind(icalparameter_value val); /* Convert kinds to string and get default value type */ static icalvalue_kind kind_to_value_kind(icalproperty_kind kind); static icalproperty_kind value_kind_to_kind(icalvalue_kind kind); static string kind_to_string(icalproperty_kind kind); static icalproperty_kind string_to_kind(string str); static icalproperty_method string_to_method(string str); static string method_to_string(icalproperty_method method); static string enum_to_string(int e); static int string_to_enum(string str); static string status_to_string(icalproperty_status); static icalproperty_status string_to_status(string str); static int enum_belongs_to_property(icalproperty_kind kind, int e); public: /* ACTION */ void set_action(enum icalproperty_action v); enum icalproperty_action get_action(); /* ATTACH */ void set_attach(icalattach *v); icalattach *get_attach(); /* ATTENDEE */ void set_attendee(string val); string get_attendee(); /* CALSCALE */ void set_calscale(string val); string get_calscale(); /* CATEGORIES */ void set_categories(string val); string get_categories(); /* CLASS */ void set_class(enum icalproperty_class val); enum icalproperty_class get_class(); /* COMMENT */ void set_comment(string val); string get_comment(); /* COMPLETED */ void set_completed(struct icaltimetype val); struct icaltimetype get_completed(); /* CONTACT */ void set_contact(string val); string get_contact(); /* CREATED */ void set_created(struct icaltimetype val); struct icaltimetype get_created(); /* DESCRIPTION */ void set_description(string val); string get_description(); /* DTEND */ void set_dtend(struct icaltimetype val); struct icaltimetype get_dtend(); /* DTSTAMP */ void set_dtstamp(struct icaltimetype val); struct icaltimetype get_dtstamp(); /* DTSTART */ void set_dtstart(struct icaltimetype val); struct icaltimetype get_dtstart(); /* DUE */ void set_due(struct icaltimetype val); struct icaltimetype get_due(); /* DURATION */ void set_duration(struct icaldurationtype val); struct icaldurationtype get_duration(); /* EXDATE */ void set_exdate(struct icaltimetype val); struct icaltimetype get_exdate(); /* EXPAND */ void set_expand(int val); int get_expand(); /* EXRULE */ void set_exrule(struct icalrecurrencetype val); struct icalrecurrencetype get_exrule(); /* FREEBUSY */ void set_freebusy(struct icalperiodtype val); struct icalperiodtype get_freebusy(); /* GEO */ void set_geo(struct icalgeotype val); struct icalgeotype get_geo(); /* GRANT */ void set_grant(string val); string get_grant(); /* LAST-MODIFIED */ void set_lastmodified(struct icaltimetype val); struct icaltimetype get_lastmodified(); /* LOCATION */ void set_location(string val); string get_location(); /* MAXRESULTS */ void set_maxresults(int val); int get_maxresults(); /* MAXRESULTSSIZE */ void set_maxresultsize(int val); int get_maxresultsize(); /* METHOD */ void set_method(enum icalproperty_method val); enum icalproperty_method get_method(); /* OWNER */ void set_owner(string val); string get_owner(); /* ORGANIZER */ void set_organizer(string val); string get_organizer(); /* PERCENT-COMPLETE */ void set_percentcomplete(int val); int get_percentcomplete(); /* PRIORITY */ void set_priority(int val); int get_priority(); /* PRODID */ void set_prodid(string val); string get_prodid(); /* QUERY */ void set_query(string val); string get_query(); /* QUERYNAME */ void set_queryname(string val); string get_queryname(); /* RDATE */ void set_rdate(struct icaldatetimeperiodtype val); struct icaldatetimeperiodtype get_rdate(); /* RECURRENCE-ID */ void set_recurrenceid(struct icaltimetype val); struct icaltimetype get_recurrenceid(); /* RELATED-TO */ void set_relatedto(string val); string get_relatedto(); /* RELCALID */ void set_relcalid(string val); string get_relcalid(); /* REPEAT */ void set_repeat(int val); int get_repeat(); /* REQUEST-STATUS */ void set_requeststatus(string val); string get_requeststatus(); /* RESOURCES */ void set_resources(string val); string get_resources(); /* RRULE */ void set_rrule(struct icalrecurrencetype val); struct icalrecurrencetype get_rrule(); /* SCOPE */ void set_scope(string val); string get_scope(); /* SEQUENCE */ void set_sequence(int val); int get_sequence(); /* STATUS */ void set_status(enum icalproperty_status val); enum icalproperty_status get_status(); /* SUMMARY */ void set_summary(string val); string get_summary(); /* TARGET */ void set_target(string val); string get_target(); /* TRANSP */ void set_transp(enum icalproperty_transp val); enum icalproperty_transp get_transp(); /* TRIGGER */ void set_trigger(struct icaltriggertype val); struct icaltriggertype get_trigger(); /* TZID */ void set_tzid(string val); string get_tzid(); /* TZNAME */ void set_tzname(string val); string get_tzname(); /* TZOFFSETFROM */ void set_tzoffsetfrom(int val); int get_tzoffsetfrom(); /* TZOFFSETTO */ void set_tzoffsetto(int val); int get_tzoffsetto(); /* TZURL */ void set_tzurl(string val); string get_tzurl(); /* UID */ void set_uid(string val); string get_uid(); /* URL */ void set_url(string val); string get_url(); /* VERSION */ void set_version(string val); string get_version(); /* X */ void set_x(string val); string get_x(); /* X-LIC-CLUSTERCOUNT */ void set_xlicclustercount(string val); string get_xlicclustercount(); /* X-LIC-ERROR */ void set_xlicerror(string val); string get_xlicerror(); /* X-LIC-MIMECHARSET */ void set_xlicmimecharset(string val); string get_xlicmimecharset(); /* X-LIC-MIMECID */ void set_xlicmimecid(string val); string get_xlicmimecid(); /* X-LIC-MIMECONTENTTYPE */ void set_xlicmimecontenttype(string val); string get_xlicmimecontenttype(); /* X-LIC-MIMEENCODING */ void set_xlicmimeencoding(string val); string get_xlicmimeencoding(); /* X-LIC-MIMEFILENAME */ void set_xlicmimefilename(string val); string get_xlicmimefilename(); /* X-LIC-MIMEOPTINFO */ void set_xlicmimeoptinfo(string val); string get_xlicmimeoptinfo(); private: icalproperty* imp; /**< The actual C based icalproperty */ }; typedef ICPointerHolder ICalPropertyTmpPtr; /* see icptrholder.h for comments */ #endif /* ICalProperty_H */ libical-1.0/src/libical/vsnprintf.h0000664000076400007640000000071512132563132016324 0ustar allenallen#ifdef WIN32 #ifndef roundup #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) #endif #include #include int #if __STDC__ vsnprintf(char *str, size_t n, char const *fmt, va_list ap); #else vsnprintf(str, n, fmt, ap); char *str; size_t n; char *fmt; char *ap; #endif int #if __STDC__ snprintf(char *str, size_t n, char const *fmt, ...); #else snprintf(str, n, fmt, va_alist); char *str; size_t n; char *fmt; va_dcl #endif #endif libical-1.0/src/CMakeLists.txt0000664000076400007640000000035112132563133015260 0ustar allenallenadd_subdirectory(libical) add_subdirectory(libicalss) add_subdirectory(libicalvcal) add_subdirectory(test) if(MSVC) install(FILES ical.def icalss.def icalvcal.def DESTINATION ${LIB_INSTALL_DIR} ) endif(MSVC) libical-1.0/src/libicalvcal/0000775000076400007640000000000012141277614014774 5ustar allenallenlibical-1.0/src/libicalvcal/vcc.c0000664000076400007640000011645112132563133015715 0ustar allenallen#ifndef lint static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #endif #include #include #include /* for ptrdiff_h */ #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYPATCH 20070509 #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING (yyerrflag != 0) extern int yyparse(void); static int yygrowstack(void); /*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ /* * src: vcc.c * doc: Parser for vCard and vCalendar. Note that this code is * generated by a yacc parser generator. Generally it should not * be edited by hand. The real source is vcc.y. The #line directives * can be commented out here to make it easier to trace through * in a debugger. However, if a bug is found it should * be fixed in vcc.y and this file regenerated. */ /* debugging utilities */ #if __DEBUG #define DBG_(x) printf x #else #define DBG_(x) #endif #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif /**** External Functions ****/ /* assign local name to parser variables and functions so that we can use more than one yacc based parser. */ #define yyparse mime_parse #define yylex mime_lex #define yyerror mime_error #define yychar mime_char /* #define p_yyval p_mime_val */ #undef yyval #define yyval mime_yyval /* #define p_yylval p_mime_lval */ #undef yylval #define yylval mime_yylval #define yydebug mime_debug #define yynerrs mime_nerrs #define yyerrflag mime_errflag #define yyss mime_ss #define yyssp mime_ssp #define yyvs mime_vs #define yyvsp mime_vsp #define yylhs mime_lhs #define yylen mime_len #define yydefred mime_defred #define yydgoto mime_dgoto #define yysindex mime_sindex #define yyrindex mime_rindex #define yygindex mime_gindex #define yytable mime_table #define yycheck mime_check #define yyname mime_name #define yyrule mime_rule #define YYPREFIX "mime_" #ifndef _NO_LINE_FOLDING #define _SUPPORT_LINE_FOLDING 1 #endif /* undef below if compile with MFC */ /* #define INCLUDEMFC 1 */ #if defined(WIN32) || defined(_WIN32) #ifdef INCLUDEMFC #include #endif #endif #include #include #include #include #include "vcc.h" /**** Types, Constants ****/ #define YYDEBUG 1 /* 1 to compile in some debugging code */ #define MAXTOKEN 256 /* maximum token (line) length */ #define YYSTACKSIZE 50 /* ~unref ? */ #define MAXLEVEL 10 /* max # of nested objects parseable */ /* (includes outermost) */ /**** Global Variables ****/ int mime_lineNum, mime_numErrors; /* yyerror() can use these */ static VObject* vObjList; static VObject *curProp; static VObject *curObj; static VObject* ObjStack[MAXLEVEL]; static int ObjStackTop; /* A helpful utility for the rest of the app. */ #if __CPLUSPLUS__ extern "C" { #endif extern void Parse_Debug(const char *s); static void yyerror(char *s); #if __CPLUSPLUS__ }; #endif int yylex(void); int yyparse(void); enum LexMode { L_NORMAL, L_VCARD, L_VCAL, L_VEVENT, L_VTODO, L_VALUES, L_BASE64, L_QUOTED_PRINTABLE }; /**** Private Forward Declarations ****/ static void lexClearToken(void); static char* lexGet1Value(void); static int lexGeta(void); static int lexGetc(void); static char lexGetc_(void); static char* lexGetDataFromBase64(void); static char* lexGetQuotedPrintable(void); static char* lexGetWord(void); static int lexLookahead(void); static char* lexLookaheadWord(void); static void lexPopMode(int top); static void lexPushMode(enum LexMode mode); static void lexSkipLookahead(void); static void lexSkipLookaheadWord(void); static void lexSkipWhite(void); static char* lexStr(void); static int lexWithinMode(enum LexMode mode); static void enterAttr(const char *s1, const char *s2); static void enterProps(const char *s); static void enterValues(const char *value); static void finiLex(void); static void mime_error_(char *s); static VObject* Parse_MIMEHelper(void); static VObject* popVObject(void); static int pushVObject(const char *prop); typedef union { char *str; VObject *vobj; } YYSTYPE; #define EQ 257 #define COLON 258 #define DOT 259 #define SEMICOLON 260 #define SPACE 261 #define HTAB 262 #define LINESEP 263 #define NEWLINE 264 #define BEGIN_VCARD 265 #define END_VCARD 266 #define BEGIN_VCAL 267 #define END_VCAL 268 #define BEGIN_VEVENT 269 #define END_VEVENT 270 #define BEGIN_VTODO 271 #define END_VTODO 272 #define ID 273 #define STRING 274 #define YYERRCODE 256 short yylhs[] = { -1, 0, 7, 6, 6, 5, 5, 9, 3, 10, 3, 8, 8, 14, 11, 11, 16, 12, 12, 15, 15, 17, 18, 18, 1, 19, 13, 13, 2, 2, 21, 4, 22, 4, 20, 20, 23, 23, 23, 26, 24, 27, 24, 28, 25, 29, 25, }; short yylen[] = { 2, 1, 0, 3, 1, 1, 1, 0, 4, 0, 3, 2, 1, 0, 5, 1, 0, 3, 1, 2, 1, 2, 1, 3, 1, 0, 4, 1, 1, 0, 0, 4, 0, 3, 2, 1, 1, 1, 1, 0, 4, 0, 3, 0, 4, 0, 3, }; short yydefred[] = { 0, 0, 0, 0, 5, 6, 0, 1, 0, 0, 0, 0, 0, 15, 24, 0, 0, 0, 0, 10, 0, 0, 38, 0, 0, 36, 37, 33, 3, 0, 8, 11, 13, 0, 0, 0, 0, 31, 34, 0, 17, 0, 0, 0, 42, 0, 46, 0, 21, 19, 28, 0, 0, 40, 44, 0, 25, 14, 23, 0, 26, }; short yydgoto[] = { 3, 15, 51, 4, 5, 6, 7, 12, 22, 8, 9, 17, 18, 52, 42, 40, 29, 41, 48, 59, 23, 10, 11, 24, 25, 26, 33, 34, 35, 36, }; short yysindex[] = { -227, 0, 0, 0, 0, 0, 0, 0, -249, -262, -253, -258, -227, 0, 0, 0, -234, -249, -215, 0, 0, 0, 0, -223, -253, 0, 0, 0, 0, -247, 0, 0, 0, -249, -222, -249, -225, 0, 0, -224, 0, -247, -221, -220, 0, -218, 0, -206, 0, 0, 0, -208, -207, 0, 0, -224, 0, 0, 0, -221, 0, }; short yyrindex[] = { 0, -245, -254, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -219, 0, -235, 0, 0, -244, -250, 0, 0, -213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -201, -255, 0, 0, 0, 0, -216, 0, 0, 0, -205, 0, 0, 0, 0, 0, 0, 0, -255, 0, }; short yygindex[] = { 0, -9, 0, 0, 0, 0, 47, 0, -8, 0, 0, 0, 0, 2, 0, 19, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 268 short yytable[] = { 16, 4, 30, 13, 19, 29, 43, 13, 29, 31, 27, 7, 39, 39, 32, 30, 20, 30, 21, 30, 14, 9, 45, 43, 14, 43, 41, 45, 7, 39, 47, 12, 30, 12, 12, 12, 12, 12, 1, 18, 2, 16, 22, 32, 22, 37, 58, 46, 44, 14, 53, 55, 56, 50, 54, 35, 57, 20, 27, 28, 49, 60, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, }; short yycheck[] = { 8, 0, 256, 256, 266, 260, 256, 256, 263, 17, 268, 256, 256, 260, 268, 269, 269, 271, 271, 273, 273, 266, 272, 273, 273, 33, 270, 35, 273, 273, 39, 266, 266, 268, 269, 270, 271, 272, 265, 258, 267, 260, 258, 258, 260, 268, 55, 272, 270, 273, 270, 257, 260, 274, 272, 268, 263, 258, 263, 12, 41, 59, 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 265, -1, 267, }; #define YYFINAL 3 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 274 #if YYDEBUG char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EQ","COLON","DOT","SEMICOLON", "SPACE","HTAB","LINESEP","NEWLINE","BEGIN_VCARD","END_VCARD","BEGIN_VCAL", "END_VCAL","BEGIN_VEVENT","END_VEVENT","BEGIN_VTODO","END_VTODO","ID","STRING", }; char *yyrule[] = { "$accept : mime", "mime : vobjects", "$$1 :", "vobjects : vobject $$1 vobjects", "vobjects : vobject", "vobject : vcard", "vobject : vcal", "$$2 :", "vcard : BEGIN_VCARD $$2 items END_VCARD", "$$3 :", "vcard : BEGIN_VCARD $$3 END_VCARD", "items : item items", "items : item", "$$4 :", "item : prop COLON $$4 values LINESEP", "item : error", "$$5 :", "prop : name $$5 attr_params", "prop : name", "attr_params : attr_param attr_params", "attr_params : attr_param", "attr_param : SEMICOLON attr", "attr : name", "attr : name EQ name", "name : ID", "$$6 :", "values : value SEMICOLON $$6 values", "values : value", "value : STRING", "value :", "$$7 :", "vcal : BEGIN_VCAL $$7 calitems END_VCAL", "$$8 :", "vcal : BEGIN_VCAL $$8 END_VCAL", "calitems : calitem calitems", "calitems : calitem", "calitem : eventitem", "calitem : todoitem", "calitem : items", "$$9 :", "eventitem : BEGIN_VEVENT $$9 items END_VEVENT", "$$10 :", "eventitem : BEGIN_VEVENT $$10 END_VEVENT", "$$11 :", "todoitem : BEGIN_VTODO $$11 items END_VTODO", "$$12 :", "todoitem : BEGIN_VTODO $$12 END_VTODO", }; #endif #if YYDEBUG #include #endif /* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 #define YYMAXDEPTH 500 #endif #endif #define YYINITSTACKSIZE 500 int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; /* variables for the parser stack */ static short *yyss; static short *yysslim; static YYSTYPE *yyvs; static int yystacksize; static int pushVObject(const char *prop) { VObject *newObj; if (ObjStackTop == MAXLEVEL) return FALSE; ObjStack[++ObjStackTop] = curObj; if (curObj) { newObj = addProp(curObj,prop); curObj = newObj; } else curObj = newVObject(prop); return TRUE; } /* This pops the recently built vCard off the stack and returns it. */ static VObject* popVObject() { VObject *oldObj; if (ObjStackTop < 0) { yyerror("pop on empty Object Stack\n"); return 0; } oldObj = curObj; curObj = ObjStack[ObjStackTop--]; return oldObj; } static void enterValues(const char *value) { if (fieldedProp && *fieldedProp) { if (value) { addPropValue(curProp,*fieldedProp,value); } /* else this field is empty, advance to next field */ fieldedProp++; } else { if (value) { char *p1, *p2; wchar_t *p3; size_t i; /* If the property already has a string value, we append this one, using ';' to separate the values. */ if (vObjectUStringZValue(curProp)) { p1 = fakeCString(vObjectUStringZValue(curProp)); i = strlen(p1)+strlen(value)+2; p2 = malloc(i); snprintf(p2,i,"%s;%s",p1,value); deleteStr(p1); p3 = (wchar_t *) vObjectUStringZValue(curProp); free(p3); setVObjectUStringZValue_(curProp,fakeUnicode(p2,0)); deleteStr(p2); } else { setVObjectUStringZValue_(curProp,fakeUnicode(value,0)); } } } deleteStr(value); } static void enterProps(const char *s) { curProp = addGroup(curObj,s); deleteStr(s); } static void enterAttr(const char *s1, const char *s2) { const char *p1, *p2 = NULL; p1 = lookupProp_(s1); if (s2) { VObject *a; p2 = lookupProp_(s2); a = addProp(curProp,p1); setVObjectStringZValue(a,p2); } else addProp(curProp,p1); if (stricmp(p1,VCBase64Prop) == 0 || (s2 && stricmp(p2,VCBase64Prop)==0)) lexPushMode(L_BASE64); else if (stricmp(p1,VCQuotedPrintableProp) == 0 || (s2 && stricmp(p2,VCQuotedPrintableProp)==0)) lexPushMode(L_QUOTED_PRINTABLE); deleteStr(s1); deleteStr(s2); } #define MAX_LEX_LOOKAHEAD_0 32 #define MAX_LEX_LOOKAHEAD 64 #define MAX_LEX_MODE_STACK_SIZE 10 #define LEXMODE() (lexBuf.lexModeStack[lexBuf.lexModeStackTop]) struct LexBuf { /* input */ #ifdef INCLUDEMFC CFile *inputFile; #else FILE *inputFile; #endif char *inputString; unsigned long curPos; unsigned long inputLen; /* lookahead buffer */ /* -- lookahead buffer is short instead of char so that EOF / can be represented correctly. */ unsigned long len; short buf[MAX_LEX_LOOKAHEAD]; unsigned long getPtr; /* context stack */ unsigned long lexModeStackTop; enum LexMode lexModeStack[MAX_LEX_MODE_STACK_SIZE]; /* token buffer */ unsigned long maxToken; char *strs; unsigned long strsLen; } lexBuf; static void lexPushMode(enum LexMode mode) { if (lexBuf.lexModeStackTop == (MAX_LEX_MODE_STACK_SIZE-1)) yyerror("lexical context stack overflow"); else { lexBuf.lexModeStack[++lexBuf.lexModeStackTop] = mode; } } static void lexPopMode(int top) { /* special case of pop for ease of error recovery -- this version will never underflow */ if (top) lexBuf.lexModeStackTop = 0; else if (lexBuf.lexModeStackTop > 0) lexBuf.lexModeStackTop--; } static int lexWithinMode(enum LexMode mode) { unsigned long i; for (i=0;iRead(&result, 1) == 1 ? result : EOF; #else return fgetc(lexBuf.inputFile); #endif } } static int lexGeta() { ++lexBuf.len; return (lexBuf.buf[lexBuf.getPtr] = lexGetc_()); } static int lexGeta_(int i) { ++lexBuf.len; return (lexBuf.buf[(lexBuf.getPtr+i)%MAX_LEX_LOOKAHEAD] = lexGetc_()); } static void lexSkipLookahead() { if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { /* don't skip EOF. */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; } } static int lexLookahead() { int c = (lexBuf.len)? lexBuf.buf[lexBuf.getPtr]: lexGeta(); /* do the \r\n -> \n or \r -> \n translation here */ if (c == '\r') { int a = (lexBuf.len>1)? lexBuf.buf[(lexBuf.getPtr+1)%MAX_LEX_LOOKAHEAD]: lexGeta_(1); if (a == '\n') { lexSkipLookahead(); } lexBuf.buf[lexBuf.getPtr] = c = '\n'; } else if (c == '\n') { int a = (lexBuf.len>1)? lexBuf.buf[lexBuf.getPtr+1]: lexGeta_(1); if (a == '\r') { lexSkipLookahead(); } lexBuf.buf[lexBuf.getPtr] = '\n'; } return c; } static int lexGetc() { int c = lexLookahead(); if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { /* EOF will remain in lookahead buffer */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; } return c; } static void lexSkipLookaheadWord() { if (lexBuf.strsLen <= lexBuf.len) { lexBuf.len -= lexBuf.strsLen; lexBuf.getPtr = (lexBuf.getPtr + lexBuf.strsLen) % MAX_LEX_LOOKAHEAD; } } static void lexClearToken() { lexBuf.strsLen = 0; } static void lexAppendc(int c) { lexBuf.strs[lexBuf.strsLen] = c; /* append up to zero termination */ if (c == 0) return; lexBuf.strsLen++; if (lexBuf.strsLen >= lexBuf.maxToken) { /* double the token string size */ lexBuf.maxToken <<= 1; lexBuf.strs = (char*) realloc(lexBuf.strs,(size_t)lexBuf.maxToken); } } static char* lexStr() { return dupStr(lexBuf.strs,(size_t)lexBuf.strsLen+1); } static void lexSkipWhite() { int c = lexLookahead(); while (c == ' ' || c == '\t') { lexSkipLookahead(); c = lexLookahead(); } } static char* lexGetWord() { int c; lexSkipWhite(); lexClearToken(); c = lexLookahead(); while (c != EOF && !strchr("\t\n ;:=",c)) { lexAppendc(c); lexSkipLookahead(); c = lexLookahead(); } lexAppendc(0); return lexStr(); } static void lexPushLookaheadc(int c) { int putptr; /* can't putback EOF, because it never leaves lookahead buffer */ if (c == EOF) return; putptr = (int)lexBuf.getPtr - 1; if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; lexBuf.getPtr = putptr; lexBuf.buf[putptr] = c; lexBuf.len += 1; } static char* lexLookaheadWord() { /* this function can lookahead word with max size of MAX_LEX_LOOKAHEAD_0 / and thing bigger than that will stop the lookahead and return 0; / leading white spaces are not recoverable. */ int c; int len = 0; int curgetptr = 0; lexSkipWhite(); lexClearToken(); curgetptr = (int)lexBuf.getPtr; /* remember! */ while (len < (MAX_LEX_LOOKAHEAD_0)) { c = lexGetc(); len++; if (c == EOF || strchr("\t\n ;:=", c)) { lexAppendc(0); /* restore lookahead buf. */ lexBuf.len += len; lexBuf.getPtr = curgetptr; return lexStr(); } else lexAppendc(c); } lexBuf.len += len; /* char that has been moved to lookahead buffer */ lexBuf.getPtr = curgetptr; return 0; } #ifdef _SUPPORT_LINE_FOLDING static void handleMoreRFC822LineBreak(int c) { /* suport RFC 822 line break in cases like * ADR: foo; * morefoo; * more foo; */ if (c == ';') { int a; lexSkipLookahead(); /* skip white spaces */ a = lexLookahead(); while (a == ' ' || a == '\t') { lexSkipLookahead(); a = lexLookahead(); } if (a == '\n') { lexSkipLookahead(); a = lexLookahead(); if (a == ' ' || a == '\t') { /* continuation, throw away all the \n and spaces read so * far */ lexSkipWhite(); lexPushLookaheadc(';'); } else { lexPushLookaheadc('\n'); lexPushLookaheadc(';'); } } else { lexPushLookaheadc(';'); } } } static char* lexGet1Value() { int c; lexSkipWhite(); c = lexLookahead(); lexClearToken(); while (c != EOF && c != ';') { if (c == '\n') { int a; lexSkipLookahead(); a = lexLookahead(); if (a == ' ' || a == '\t') { lexAppendc(' '); lexSkipLookahead(); } else { lexPushLookaheadc('\n'); break; } } else { lexAppendc(c); lexSkipLookahead(); } c = lexLookahead(); } lexAppendc(0); handleMoreRFC822LineBreak(c); return c==EOF?0:lexStr(); } #endif static int match_begin_name(int end) { char *n = lexLookaheadWord(); int token = ID; if (n) { if (!stricmp(n,"vcard")) token = end?END_VCARD:BEGIN_VCARD; else if (!stricmp(n,"vcalendar")) token = end?END_VCAL:BEGIN_VCAL; else if (!stricmp(n,"vevent")) token = end?END_VEVENT:BEGIN_VEVENT; else if (!stricmp(n,"vtodo")) token = end?END_VTODO:BEGIN_VTODO; deleteStr(n); return token; } return 0; } #ifdef INCLUDEMFC void initLex(const char *inputstring, unsigned long inputlen, CFile *inputfile) #else void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) #endif { /* initialize lex mode stack */ lexBuf.lexModeStack[lexBuf.lexModeStackTop=0] = L_NORMAL; /* iniatialize lex buffer. */ lexBuf.inputString = (char*) inputstring; lexBuf.inputLen = inputlen; lexBuf.curPos = 0; lexBuf.inputFile = inputfile; lexBuf.len = 0; lexBuf.getPtr = 0; lexBuf.maxToken = MAXTOKEN; lexBuf.strs = (char*)malloc(MAXTOKEN); lexBuf.strsLen = 0; } static void finiLex() { free(lexBuf.strs); } /* This parses and converts the base64 format for binary encoding into * a decoded buffer (allocated with new). See RFC 1521. */ static char * lexGetDataFromBase64() { unsigned long bytesLen = 0, bytesMax = 0; int quadIx = 0, pad = 0; unsigned long trip = 0; unsigned char b; int c; unsigned char *bytes = NULL; unsigned char *oldBytes = NULL; DBG_(("db: lexGetDataFromBase64\n")); while (1) { c = lexGetc(); if (c == '\n') { ++mime_lineNum; if (lexLookahead() == '\n') { /* a '\n' character by itself means end of data */ break; } else continue; /* ignore '\n' */ } else { if ((c >= 'A') && (c <= 'Z')) b = (unsigned char)(c - 'A'); else if ((c >= 'a') && (c <= 'z')) b = (unsigned char)(c - 'a') + 26; else if ((c >= '0') && (c <= '9')) b = (unsigned char)(c - '0') + 52; else if (c == '+') b = 62; else if (c == '/') b = 63; else if (c == '=') { b = 0; pad++; } else if ((c == ' ') || (c == '\t')) { continue; } else { /* error condition */ if (bytes) free(bytes); else if (oldBytes) free(oldBytes); /* error recovery: skip until 2 adjacent newlines. */ DBG_(("db: invalid character 0x%x '%c'\n", c,c)); if (c != EOF) { c = lexGetc(); while (c != EOF) { if (c == '\n' && lexLookahead() == '\n') { ++mime_lineNum; break; } c = lexGetc(); } } return NULL; } trip = (trip << 6) | b; if (++quadIx == 4) { unsigned char outBytes[3]; int numOut; int i; for (i = 0; i < 3; i++) { outBytes[2-i] = (unsigned char)(trip & 0xFF); trip >>= 8; } numOut = 3 - pad; if (bytesLen + numOut > bytesMax) { if (!bytes) { bytesMax = 1024; bytes = (unsigned char*)malloc((size_t)bytesMax); } else { bytesMax <<= 2; oldBytes = bytes; bytes = (unsigned char*)realloc(bytes,(size_t)bytesMax); } if (bytes == 0) { mime_error("out of memory while processing BASE64 data\n"); } } if (bytes) { memcpy(bytes + bytesLen, outBytes, numOut); bytesLen += numOut; } trip = 0; quadIx = 0; } } } /* while */ DBG_(("db: bytesLen = %d\n", bytesLen)); /* kludge: all this won't be necessary if we have tree form representation */ if (bytes) { setValueWithSize(curProp,bytes,(unsigned int)bytesLen); free(bytes); } else if (oldBytes) { setValueWithSize(curProp,oldBytes,(unsigned int)bytesLen); free(oldBytes); } return 0; } static int match_begin_end_name(int end) { int token; lexSkipWhite(); if (lexLookahead() != ':') return ID; lexSkipLookahead(); lexSkipWhite(); token = match_begin_name(end); if (token == ID) { lexPushLookaheadc(':'); DBG_(("db: ID '%s'\n", yylval.str)); return ID; } else if (token != 0) { lexSkipLookaheadWord(); deleteStr(yylval.str); DBG_(("db: begin/end %d\n", token)); return token; } return 0; } static char* lexGetQuotedPrintable() { char cur; lexClearToken(); do { cur = lexGetc(); switch (cur) { case '=': { int c = 0; int next[2]; int i; for (i = 0; i < 2; i++) { next[i] = lexGetc(); if (next[i] >= '0' && next[i] <= '9') c = c * 16 + next[i] - '0'; else if (next[i] >= 'A' && next[i] <= 'F') c = c * 16 + next[i] - 'A' + 10; else break; } if (i == 0) { /* single '=' follow by LINESEP is continuation sign? */ if (next[0] == '\n') { ++mime_lineNum; } else { lexPushLookaheadc('='); goto EndString; } } else if (i == 1) { lexPushLookaheadc(next[1]); lexPushLookaheadc(next[0]); lexAppendc('='); } else { lexAppendc(c); } break; } /* '=' */ case '\n': { lexPushLookaheadc('\n'); goto EndString; } case (char)EOF: break; default: lexAppendc(cur); break; } /* switch */ } while (cur != (char)EOF); EndString: lexAppendc(0); return lexStr(); } /* LexQuotedPrintable */ int yylex() { int lexmode = LEXMODE(); if (lexmode == L_VALUES) { int c = lexGetc(); if (c == ';') { DBG_(("db: SEMICOLON\n")); lexPushLookaheadc(c); #ifdef _SUPPORT_LINE_FOLDING handleMoreRFC822LineBreak(c); #endif lexSkipLookahead(); return SEMICOLON; } else if (strchr("\n",c)) { ++mime_lineNum; /* consume all line separator(s) adjacent to each other */ c = lexLookahead(); while (strchr("\n",c)) { lexSkipLookahead(); c = lexLookahead(); ++mime_lineNum; } DBG_(("db: LINESEP\n")); return LINESEP; } else { char *p = 0; lexPushLookaheadc(c); if (lexWithinMode(L_BASE64)) { /* get each char and convert to bin on the fly... */ p = lexGetDataFromBase64(); yylval.str = p; return STRING; } else if (lexWithinMode(L_QUOTED_PRINTABLE)) { p = lexGetQuotedPrintable(); } else { #ifdef _SUPPORT_LINE_FOLDING p = lexGet1Value(); #else p = lexGetStrUntil(";\n"); #endif } if (p) { DBG_(("db: STRING: '%s'\n", p)); yylval.str = p; return STRING; } else return 0; } } else { /* normal mode */ while (1) { int c = lexGetc(); switch(c) { case ':': { /* consume all line separator(s) adjacent to each other */ /* ignoring linesep immediately after colon. */ /* c = lexLookahead(); while (strchr("\n",c)) { lexSkipLookahead(); c = lexLookahead(); ++mime_lineNum; }*/ DBG_(("db: COLON\n")); return COLON; } case ';': DBG_(("db: SEMICOLON\n")); return SEMICOLON; case '=': DBG_(("db: EQ\n")); return EQ; /* ignore whitespace in this mode */ case '\t': case ' ': continue; case '\n': { ++mime_lineNum; continue; } case EOF: return 0; break; default: { lexPushLookaheadc(c); if (isalpha(c)) { char *t = lexGetWord(); yylval.str = t; if (!stricmp(t, "begin")) { return match_begin_end_name(0); } else if (!stricmp(t,"end")) { return match_begin_end_name(1); } else { DBG_(("db: ID '%s'\n", t)); return ID; } } else { /* unknow token */ return 0; } break; } } } } return 0; } /***************************************************************************/ /*** Public Functions ****/ /***************************************************************************/ static VObject* Parse_MIMEHelper() { ObjStackTop = -1; mime_numErrors = 0; mime_lineNum = 1; vObjList = 0; curObj = 0; if (yyparse() != 0) return 0; finiLex(); return vObjList; } DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len) { initLex(input, len, 0); return Parse_MIMEHelper(); } #if INCLUDEMFC DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file) { unsigned long startPos; VObject *result; initLex(0,-1,file); startPos = file->GetPosition(); if (!(result = Parse_MIMEHelper())) file->Seek(startPos, CFile::begin); return result; } #else VObject* Parse_MIME_FromFile(FILE *file) { VObject *result; long startPos; initLex(0,(unsigned long)-1,file); startPos = ftell(file); if (!(result = Parse_MIMEHelper())) { if (startPos >= 0) fseek(file,startPos,SEEK_SET); } return result; } DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname) { FILE *fp = fopen(fname,"r"); if (fp) { VObject* o = Parse_MIME_FromFile(fp); fclose(fp); return o; } else { char msg[256]; snprintf(msg, sizeof(msg), "can't open file '%s' for reading\n", fname); mime_error_(msg); return 0; } } #endif static MimeErrorHandler mimeErrorHandler; DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me) { mimeErrorHandler = me; } static void mime_error(char *s) { char msg[256]; if (mimeErrorHandler) { snprintf(msg,sizeof(msg),"%s at line %d", s, mime_lineNum); mimeErrorHandler(msg); } } static void mime_error_(char *s) { if (mimeErrorHandler) { mimeErrorHandler(s); } } /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { int newsize; ptrdiff_t i; short *newss; YYSTYPE *newvs; if ((newsize = yystacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return -1; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = yyssp - yyss; newss = (yyss != 0) ? (short *)realloc(yyss, newsize * sizeof(*newss)) : (short *)malloc(newsize * sizeof(*newss)); if (newss == 0) return -1; yyss = newss; yyssp = newss + i; newvs = (yyvs != 0) ? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs)) : (YYSTYPE *)malloc(newsize * sizeof(*newvs)); if (newvs == 0) return -1; yyvs = newvs; yyvsp = newvs + i; yystacksize = newsize; yysslim = yyss + newsize - 1; return 0; } #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int yyparse(void) { register int yym, yyn, yystate; #if YYDEBUG register const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = YYEMPTY; if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; yyerror("syntax error"); #ifdef lint goto yyerrlab; #endif yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = YYEMPTY; goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; if (yym) yyval = yyvsp[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 2: { addList(&vObjList, yyvsp[0].vobj); curObj = 0; } break; case 4: { addList(&vObjList, yyvsp[0].vobj); curObj = 0; } break; case 7: { lexPushMode(L_VCARD); if (!pushVObject(VCCardProp)) YYERROR; } break; case 8: { lexPopMode(0); yyval.vobj = popVObject(); } break; case 9: { lexPushMode(L_VCARD); if (!pushVObject(VCCardProp)) YYERROR; } break; case 10: { lexPopMode(0); yyval.vobj = popVObject(); } break; case 13: { lexPushMode(L_VALUES); } break; case 14: { if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE)) lexPopMode(0); lexPopMode(0); } break; case 16: { enterProps(yyvsp[0].str); } break; case 18: { enterProps(yyvsp[0].str); } break; case 22: { enterAttr(yyvsp[0].str,0); } break; case 23: { enterAttr(yyvsp[-2].str,yyvsp[0].str); } break; case 25: { enterValues(yyvsp[-1].str); } break; case 27: { enterValues(yyvsp[0].str); } break; case 29: { yyval.str = 0; } break; case 30: { if (!pushVObject(VCCalProp)) YYERROR; } break; case 31: { yyval.vobj = popVObject(); } break; case 32: { if (!pushVObject(VCCalProp)) YYERROR; } break; case 33: { yyval.vobj = popVObject(); } break; case 39: { lexPushMode(L_VEVENT); if (!pushVObject(VCEventProp)) YYERROR; } break; case 40: { lexPopMode(0); popVObject(); } break; case 41: { lexPushMode(L_VEVENT); if (!pushVObject(VCEventProp)) YYERROR; } break; case 42: { lexPopMode(0); popVObject(); } break; case 43: { lexPushMode(L_VTODO); if (!pushVObject(VCTodoProp)) YYERROR; } break; case 44: { lexPopMode(0); popVObject(); } break; case 45: { lexPushMode(L_VTODO); if (!pushVObject(VCTodoProp)) YYERROR; } break; case 46: { lexPopMode(0); popVObject(); } break; } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); } libical-1.0/src/libicalvcal/vctest.c0000664000076400007640000000312512132563133016443 0ustar allenallen #include #include #include "vcc.h" FILE *cfp; void myMimeErrorHandler(char *s) { printf("%s\n", s); } void main(int argc, char **argv) { int testmem = 0; char * foo[2] = {"foo","alden.vcf"}; argc = 2; argv = foo; #ifdef _CONSOLE cfp = stdout; registerMimeErrorHandler(myMimeErrorHandler); #else cfp = fopen("vctest.out", "w"); if (!cfp) return; #endif ++argv; while (--argc) { FILE *fp; if (strcmp(*argv,"-testmem") == 0) { testmem = 1; argv++; continue; } fprintf(cfp,"processing %s\n",*argv); fp = fopen(*argv,"r"); if (!fp) { fprintf(cfp,"error opening file\n"); } else { VObject *v, *t; FILE *ofp; char buf[256]; char *p; strcpy(buf,*argv); p = strchr(buf,'.'); if (p) *p = 0; strcat(buf,".out"); fprintf(cfp,"reading text input from '%s'...\n", *argv); /*v = Parse_MIME_FromFile(fp); */ v = Parse_MIME_FromFileName(*argv); writeVObjectToFile(buf,v); cleanVObject(v); /* fprintf(cfp,"pretty print internal format of '%s'...\n", *argv); ofp = fopen(buf,"w"); while (v) { printVObject(cfp,v); if (testmem) { char *s, *p; fprintf(cfp,"test writing to mem...\n"); p = s = writeMemVObject(0,0,v); if (s) { while (*s) { fputc(*s,ofp); s++; } free(p); } } else { writeVObject(ofp,v); } t = v; v = nextVObjectInList(v); cleanVObject(t); } fclose(ofp); fclose(fp); */ } cleanStrTbl(); argv++; } if (cfp != stdout) fclose(cfp); } libical-1.0/src/libicalvcal/libicalvcal.dsp0000664000076400007640000000642112132563133017746 0ustar allenallen# Microsoft Developer Studio Project File - Name="libicalvcal" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=libicalvcal - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "libicalvcal.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "libicalvcal.mak" CFG="libicalvcal - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "libicalvcal - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "libicalvcal - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "libicalvcal - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\libical" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ELSEIF "$(CFG)" == "libicalvcal - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\libical" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo !ENDIF # Begin Target # Name "libicalvcal - Win32 Release" # Name "libicalvcal - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\icalvcal.c # End Source File # Begin Source File SOURCE=.\vcaltest.c # End Source File # Begin Source File SOURCE=.\vcaltmp.c # End Source File # Begin Source File SOURCE=.\vcc.c # End Source File # Begin Source File SOURCE=.\vobject.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\icalvcal.h # End Source File # Begin Source File SOURCE=.\port.h # End Source File # Begin Source File SOURCE=.\vcaltmp.h # End Source File # Begin Source File SOURCE=.\vcc.h # End Source File # Begin Source File SOURCE=.\vobject.h # End Source File # End Group # End Target # End Project libical-1.0/src/libicalvcal/icalvcal.c0000664000076400007640000014131612132563133016716 0ustar allenallen/*====================================================================== FILE: icalvcal.c CREATOR: eric 25 May 00 $Id: icalvcal.c,v 1.9 2008-02-03 16:10:46 dothebart Exp $ (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvcal.c The icalvcal_convert routine calls icalvcal_traverse_objects to do its work.s his routine steps through through all of the properties and components of a VObject. For each name of a property or a component, icalvcal_traverse_objects looks up the name in conversion_table[]. This table indicates wether the name is of a component or a property, lists a routine to handle conversion, and has extra data for the conversion. The conversion routine will create new iCal components or properties and add them to the iCal component structure. The most common conversion routine is dc_prop. This routine converts properties for which the text representation of the vCal component is identical the iCal representation. ======================================================================*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "icalvcal.h" #include #include /* for ptrdiff_h */ #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif #ifdef _WIN32_WCE #undef IGNORE #endif enum datatype { COMPONENT, PROPERTY, PARAMETER, UNSUPPORTED, IGNORE }; /* The indices must match between the strings and the codes. */ char *weekdays[] = { "SU", "MO", "TU", "WE", "TH", "FR", "SA" }; int weekday_codes[] = { ICAL_SUNDAY_WEEKDAY, ICAL_MONDAY_WEEKDAY, ICAL_TUESDAY_WEEKDAY, ICAL_WEDNESDAY_WEEKDAY, ICAL_THURSDAY_WEEKDAY, ICAL_FRIDAY_WEEKDAY, ICAL_SATURDAY_WEEKDAY }; struct conversion_table_struct { char* vcalname; enum datatype type; void* (*conversion_func)(int icaltype, VObject *o, icalcomponent *comp, icalvcal_defaults *defaults); int icaltype; }; void* dc_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults); /* Creates an error property with the given message. */ static icalproperty* create_parse_error_property (const char *message, const char *property_name, const char *property_value) { char temp[4096]; icalparameter *error_param; icalproperty *error_prop; snprintf (temp, 1024, "%s: %s:%s", message, property_name, property_value); error_param = icalparameter_new_xlicerrortype (ICAL_XLICERRORTYPE_VCALPROPPARSEERROR); error_prop = icalproperty_new_xlicerror (temp); icalproperty_add_parameter (error_prop, error_param); return error_prop; } char* get_string_value (VObject *object, int *free_string) { switch (vObjectValueType(object)) { case VCVT_USTRINGZ: *free_string = 1; return fakeCString(vObjectUStringZValue(object)); case VCVT_STRINGZ: *free_string = 0; return (char*) vObjectStringZValue(object); } *free_string = 0; /* We return "" here, to cut down on the risk of crashing. */ return ""; } static void convert_floating_time_to_utc (struct icaltimetype *itt) { struct tm tmp_tm = { 0 }, *utc_tm; time_t t; /* We assume the floating time is using the current Unix timezone. So we convert to a time_t using mktime(), and then back to a struct tm using gmtime, so it is the UTC time. */ tmp_tm.tm_year = itt->year - 1900; tmp_tm.tm_mon = itt->month - 1; tmp_tm.tm_mday = itt->day; tmp_tm.tm_hour = itt->hour; tmp_tm.tm_min = itt->minute; tmp_tm.tm_sec = itt->second; tmp_tm.tm_isdst = -1; /* Convert to a time_t. */ t = mktime (&tmp_tm); /* Now convert back to a struct tm, but with a UTC time. */ utc_tm = gmtime (&t); /* Now put it back into the icaltime. */ itt->year = utc_tm->tm_year + 1900; itt->month = utc_tm->tm_mon + 1; itt->day = utc_tm->tm_mday; itt->hour = utc_tm->tm_hour; itt->minute = utc_tm->tm_min; itt->second = utc_tm->tm_sec; /* Set the is_utc flag. */ itt->is_utc = 1; } static void icalvcal_traverse_objects(VObject *, icalcomponent *, icalproperty *, icalvcal_defaults *); icalcomponent* icalvcal_convert_with_defaults (VObject *object, icalvcal_defaults *defaults) { char* name = (char*)vObjectName(object); icalcomponent* container; icalcomponent* root; icalproperty *prop; icalerror_check_arg_rz( (object!=0),"Object"); container = icalcomponent_new(ICAL_XROOT_COMPONENT); /* The root object must be a VCALENDAR */ if(*name==0 || strcmp(name,VCCalProp) != 0){ icalcomponent_free(container); return 0; /* HACK. Should return an error */ } #if 0 /* Just for testing. */ printf ("This is the internal VObject representation:\n"); printf ("===========================================\n"); printVObject(stdout, object); printf ("===========================================\n"); #endif icalvcal_traverse_objects(object,container,0,defaults); /* HACK. I am using the extra 'container' component because I am lazy. I know there is a way to get rid of it, but I did not care to find it. */ root = icalcomponent_get_first_component(container,ICAL_ANY_COMPONENT); icalcomponent_remove_component(container, root); icalcomponent_free(container); /* We add a VERSION and PRODID here, to make it a valid iCalendar object, but the application may change them if necessary. */ prop = icalproperty_new_prodid ("-//Softwarestudio.org//" ICAL_PACKAGE " version " ICAL_VERSION "//EN"); icalcomponent_add_property (root, prop); prop = icalproperty_new_version ("2.0"); icalcomponent_add_property (root, prop); return root; } icalcomponent* icalvcal_convert (VObject *object) { return icalvcal_convert_with_defaults (object, NULL); } /* comp() is useful for most components, but alarm, daylight and * timezone are different. In vcal, they are properties, and in ical, * they are components. Although because of the way that vcal treats * everything as a property, alarm_comp() daylight_comp() and * timezone_comp() may not really be necessary, I think it would be * easier to use them. */ void* comp(int icaltype, VObject *o, icalcomponent *comp, icalvcal_defaults *defaults) { icalcomponent_kind kind = (icalcomponent_kind)icaltype; icalcomponent* c = icalcomponent_new(kind); return (void* )c; } /* vCalendar has 4 properties for alarms: AALARM, DALARM, MALARM, PALARM (for audio, display, mail, and procedure alarms). AALARM has Run Time, Snooze Time, Repeat Count, Audio Content. It may also have a TYPE parameter specifying the MIME type, e.g. AALARM;TYPE=WAVE;VALUE=URL:19960415T235959; ; ; file:///mmedia/taps.wav AALARM;TYPE=WAVE;VALUE=CONTENT-ID:19960903T060000;PT15M;4; DALARM has Run Time, Snooze Time, Repeat Count, Display String. DALARM:19960415T235000;PT5M;2;Your Taxes Are Due !!! MALARM has Run Time, Snooze Time, Repeat Count, Email Address, Note. MALARM:19960416T000000;PT1H;24;IRS@us.gov;The Check Is In The Mail! PALARM has Run Time, Snooze Time, Repeat Count, Procedure Name. PALARM;VALUE=URL:19960415T235000;PT5M;2;file:///myapps/shockme.exe AALARM and PALARM: Check the VALUE is a URL. We won't support CONTENT-ID. iCalendar uses one component, VALARM, for all of these, and uses an ACTION property of "AUDIO", "DISPLAY", "EMAIL" or "PROCEDURE". The Run Time value can be copied into the iCalendar TRIGGER property, except it must be UTC in iCalendar. If it is floating, we'll convert to UTC using the current Unix timezone. The Snooze Time becomes DURATION, and the Repeat Count becomes REPEAT. For AALARM, the Audio Content becomes the ATTACH property, and the TYPE becomes a FMTTYPE of this property (PCM -> 'audio/basic' (?), WAVE -> 'audio/x-wav', AIFF -> 'audio/x-aiff'), e.g. ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud For DALARM, Display String becomes the DESCRIPTION property. For MALARM, Email Address becomes an ATTENDEE property, e.g. ATTENDEE:MAILTO:john_doe@host.com For PALARM, the Procedure Name becomes an ATTACH property, like AALARM, e.g. ATTACH;FMTTYPE=application/binary:ftp://host.com/novo-procs/felizano.exe */ /* This converts the vCalendar alarm properties into iCalendar properties and adds them to the component. It returns 1 if the alarm is valid, 0 if not. */ static int get_alarm_properties (icalcomponent *comp, VObject *object, int icaltype, icalvcal_defaults *defaults) { VObjectIterator iterator; icalproperty *trigger_prop = NULL, *duration_prop = NULL; icalproperty *repeat_prop = NULL, *attach_prop = NULL; icalproperty *summary_prop = NULL, *description_prop = NULL; icalproperty *action_prop, *attendee_prop = NULL; icalparameter *fmttype_param = NULL; enum icalproperty_action action; int value_is_url = 0, is_valid_alarm = 1; initPropIterator (&iterator, object); while (moreIteration (&iterator)) { VObject *eachProp = nextVObject (&iterator); const char *name = vObjectName (eachProp); char *s; int free_string; s = get_string_value (eachProp, &free_string); /* Common properties. */ if (!strcmp (name, VCRunTimeProp)) { if (*s) { struct icaltriggertype t; icalparameter *param; /* Convert it to an icaltimetype. */ t.time = icaltime_from_string (s); /* If it is a floating time, convert it to a UTC time. */ if (!t.time.is_utc) convert_floating_time_to_utc (&t.time); /* Create a TRIGGER property. */ trigger_prop = icalproperty_new_trigger (t); /* vCalendar triggers are always specific DATE-TIME values. */ param = icalparameter_new_value (ICAL_VALUE_DATETIME); icalproperty_add_parameter (trigger_prop, param); icalcomponent_add_property (comp, trigger_prop); } } else if (!strcmp (name, VCSnoozeTimeProp)) { struct icaldurationtype d; /* Parse the duration string. FIXME: vCalendar also permits 'Y' (Year) and 'M' (Month) here, which we don't handle at present. Though it is unlikely they will be used as a snooze time between repeated alarms! */ d = icaldurationtype_from_string (s); duration_prop = icalproperty_new_duration (d); icalcomponent_add_property (comp, duration_prop); } else if (!strcmp (name, VCRepeatCountProp)) { /* If it starts with a digit convert it into a REPEAT property. */ if (*s && *s >= '0' && *s <= '9') { repeat_prop = icalproperty_new_repeat (atoi (s)); icalcomponent_add_property (comp, repeat_prop); } } else if (!strcmp (name, VCValueProp)) { /* We just remember if the value is a URL. */ if (!strcmp (s, "URL")) { value_is_url = 1; } /* Audio properties && Procedure properties. */ } else if (!strcmp (name, VCAudioContentProp) || !strcmp (name, VCProcedureNameProp)) { if (*s && !attach_prop) { icalattach *attach; attach = icalattach_new_from_url (s); attach_prop = icalproperty_new_attach (attach); icalcomponent_add_property (comp, attach_prop); icalattach_unref(attach); /* We output a "application/binary" FMTTYPE for Procedure alarms. */ if (!strcmp (name, VCProcedureNameProp) && !fmttype_param) fmttype_param = icalparameter_new_fmttype ("application/binary"); } } else if (!strcmp (name, "TYPE")) { char *fmttype = NULL; if (!strcmp (s, "PCM")) fmttype = "audio/basic"; else if (!strcmp (s, "AIFF")) fmttype = "audio/x-aiff"; else if (!strcmp (s, "WAVE")) fmttype = "audio/x-wav"; if (fmttype) fmttype_param = icalparameter_new_fmttype (fmttype); /* Display properties. */ } else if (!strcmp (name, VCDisplayStringProp)) { if (!description_prop) { description_prop = icalproperty_new_description (s); icalcomponent_add_property (comp, description_prop); } /* Mail properties. */ } else if (!strcmp (name, VCEmailAddressProp)) { if (*s && strlen (s) < 1000) { char buffer[1024]; /* We need to add 'MAILTO:' before the email address, to make it valid iCalendar. */ sprintf (buffer, "MAILTO:%s", s); attendee_prop = icalproperty_new_attendee (buffer); icalcomponent_add_property (comp, attendee_prop); } } else if (!strcmp (name, VCNoteProp)) { if (!description_prop) { description_prop = icalproperty_new_description (s); icalcomponent_add_property (comp, description_prop); } /* We also copy the Note to the SUMMARY property, since that is required in iCalendar. */ if (!summary_prop) { summary_prop = icalproperty_new_summary (s); icalcomponent_add_property (comp, summary_prop); } } if (free_string) deleteStr (s); } /* Add the FMTTYPE parameter to the ATTACH property if it exists. */ if (fmttype_param) { if (attach_prop) { icalproperty_add_parameter (attach_prop, fmttype_param); } else { icalparameter_free (fmttype_param); } } /* Now check if the alarm is valid, i.e. it has the required properties according to its type. */ /* All alarms must have a trigger. */ if (!trigger_prop) is_valid_alarm = 0; /* If there is a Duration but not a Repeat Count, we just remove the Duration so the alarm only occurs once. */ if (duration_prop && !repeat_prop) { icalcomponent_remove_property (comp, duration_prop); icalproperty_free (duration_prop); duration_prop = NULL; } /* Similarly if we have a Repeat Count but no Duration, we remove it. */ if (repeat_prop && !duration_prop) { icalcomponent_remove_property (comp, repeat_prop); icalproperty_free (repeat_prop); repeat_prop = NULL; } switch (icaltype) { case ICAL_XAUDIOALARM_COMPONENT: action = ICAL_ACTION_AUDIO; /* Audio alarms must have an ATTACH property, which is a URL. If they don't have one, we use the default alarm URL. */ if (!attach_prop || !value_is_url) { if (defaults && defaults->alarm_audio_url && defaults->alarm_audio_fmttype) { icalattach *attach; if (attach_prop) { icalcomponent_remove_property (comp, attach_prop); icalproperty_free (attach_prop); } attach = icalattach_new_from_url (defaults->alarm_audio_url); attach_prop = icalproperty_new_attach (attach); icalcomponent_add_property (comp, attach_prop); fmttype_param = icalparameter_new_fmttype (defaults->alarm_audio_fmttype); icalproperty_add_parameter (attach_prop, fmttype_param); icalattach_unref(attach); } else { is_valid_alarm = 0; } } break; case ICAL_XDISPLAYALARM_COMPONENT: action = ICAL_ACTION_DISPLAY; /* Display alarms must have a DESCRIPTION. */ if (!description_prop) { if (defaults && defaults->alarm_description) { description_prop = icalproperty_new_description (defaults->alarm_description); icalcomponent_add_property (comp, description_prop); } else { is_valid_alarm = 0; } } break; case ICAL_XEMAILALARM_COMPONENT: action = ICAL_ACTION_EMAIL; /* Email alarms must have a SUMMARY, a DESCRIPTION, and an ATTENDEE. */ if (!attendee_prop) { is_valid_alarm = 0; } else if (!summary_prop || !description_prop) { if (!summary_prop && defaults->alarm_description) { summary_prop = icalproperty_new_summary (defaults->alarm_description); icalcomponent_add_property (comp, summary_prop); } if (!description_prop && defaults->alarm_description) { description_prop = icalproperty_new_description (defaults->alarm_description); icalcomponent_add_property (comp, description_prop); } if (!summary_prop || !description_prop) is_valid_alarm = 0; } break; case ICAL_XPROCEDUREALARM_COMPONENT: action = ICAL_ACTION_PROCEDURE; /* Procedure alarms must have an ATTACH property, which is a URL. We don't support inline data. */ if (!attach_prop) { is_valid_alarm = 0; } else if (!value_is_url) { icalattach *attach; const char *url; attach = icalproperty_get_attach (attach_prop); url = icalattach_get_url (attach); /* Check for Gnome Calendar, which will just save a pathname. */ if (url && url[0] == '/') { size_t len; char *new_url; icalattach *new_attach; /* Turn it into a proper file: URL. */ len = strlen (url) + 12; new_url = malloc (len); strcpy (new_url, "file://"); strcat (new_url, url); new_attach = icalattach_new_from_url (new_url); free (new_url); icalproperty_set_attach (attach_prop, new_attach); icalattach_unref(attach); } else { is_valid_alarm = 0; } } break; default: /* Shouldn't reach here ever. */ assert(0); break; } action_prop = icalproperty_new_action (action); icalcomponent_add_property (comp, action_prop); return is_valid_alarm; } void* alarm_comp(int icaltype, VObject *o, icalcomponent *comp, icalvcal_defaults *defaults) { /* icalcomponent_kind kind = (icalcomponent_kind)icaltype; */ int is_valid_alarm; icalcomponent* c = icalcomponent_new(ICAL_VALARM_COMPONENT); is_valid_alarm = get_alarm_properties (c, o, icaltype, defaults); if (is_valid_alarm) { return (void*)c; } else { icalcomponent_free (c); return NULL; } } /* These #defines indicate conversion routines that are not defined yet. */ #define parameter 0 #define rsvp_parameter 0 void* transp_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults) { icalproperty *prop = NULL; char *s; int free_string; s = get_string_value (object, &free_string); /* In vCalendar "0" means opaque, "1" means transparent, and >1 is implementation-specific. So we just check for "1" and output TRANSPARENT. For anything else, the default OPAQUE will be used. */ if (!strcmp (s, "1")) { prop = icalproperty_new_transp (ICAL_TRANSP_TRANSPARENT); } if (free_string) deleteStr (s); return (void*)prop; } void* sequence_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults) { icalproperty *prop = NULL; char *s; int free_string, sequence; s = get_string_value (object, &free_string); /* GnomeCalendar outputs '-1' for this. I have no idea why. So we just check it is a valid +ve integer, and output 0 if it isn't. */ sequence = atoi (s); if (sequence < 0) sequence = 0; prop = icalproperty_new_sequence (sequence); if (free_string) deleteStr (s); return (void*)prop; } /* This handles properties which have multiple values, which are separated by ';' in vCalendar but ',' in iCalendar. So we just switch those. */ void* multivalued_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults) { icalproperty_kind kind = (icalproperty_kind)icaltype; icalproperty *prop = NULL; icalvalue *value; icalvalue_kind value_kind; char *s, *tmp_copy, *p; int free_string; s = get_string_value (object, &free_string); tmp_copy = strdup (s); if (free_string) deleteStr (s); if (tmp_copy) { prop = icalproperty_new(kind); value_kind = icalenum_property_kind_to_value_kind (icalproperty_isa (prop)); for (p = tmp_copy; *p; p++) { if (*p == ';') *p = ','; } value = icalvalue_new_from_string (value_kind, tmp_copy); icalproperty_set_value (prop, value); free (tmp_copy); } return (void*)prop; } void* status_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults) { icalproperty *prop = NULL; char *s; int free_string; icalcomponent_kind kind; kind = icalcomponent_isa (comp); s = get_string_value (object, &free_string); /* In vCalendar: VEVENT can have: "NEEDS ACTION" (default), "SENT", "TENTATIVE", "CONFIRMED", "DECLINED", "DELEGATED". VTODO can have: "ACCEPTED", "NEEDS ACTION" (default), "SENT", "DECLINED", "COMPLETED", "DELEGATED". (Those are the only 2 components - there is no VJOURNAL) In iCalendar: VEVENT can have: "TENTATIVE", "CONFIRMED", "CANCELLED". VTODO can have: "NEEDS-ACTION", "COMPLETED", "IN-PROCESS", "CANCELLED". So for VEVENT if it is "TENTATIVE" or "CONFIRMED" we keep it, otherwise we skip it. For a VTODO if it is "NEEDS ACTION" we convert to "NEEDS-ACTION", if it is "COMPLETED" we keep it, otherwise we skip it. */ if (kind == ICAL_VEVENT_COMPONENT) { if (!strcmp (s, "TENTATIVE")) prop = icalproperty_new_status (ICAL_STATUS_TENTATIVE); else if (!strcmp (s, "CONFIRMED")) prop = icalproperty_new_status (ICAL_STATUS_CONFIRMED); } else if (kind == ICAL_VTODO_COMPONENT) { if (!strcmp (s, "NEEDS ACTION")) prop = icalproperty_new_status (ICAL_STATUS_NEEDSACTION); else if (!strcmp (s, "COMPLETED")) prop = icalproperty_new_status (ICAL_STATUS_COMPLETED); } if (free_string) deleteStr (s); return (void*)prop; } void* utc_datetime_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults) { icalproperty_kind kind = (icalproperty_kind)icaltype; icalproperty *prop; icalvalue *value; icalvalue_kind value_kind; char *s; int free_string; struct icaltimetype itt; prop = icalproperty_new(kind); value_kind = icalenum_property_kind_to_value_kind (icalproperty_isa(prop)); s = get_string_value (object, &free_string); /* Convert it to an icaltimetype. */ itt = icaltime_from_string (s); /* If it is a floating time, convert it to a UTC time. */ if (!itt.is_utc) convert_floating_time_to_utc (&itt); value = icalvalue_new_datetime (itt); icalproperty_set_value(prop,value); if (free_string) deleteStr (s); return (void*)prop; } /* Parse the interval from the RRULE, returning a pointer to the first char after the interval and any whitespace. s points to the start of the interval. error_message is set if an error occurs. */ static char* rrule_parse_interval (char *s, struct icalrecurrencetype *recur, char **error_message) { int interval = 0; /* It must start with a digit. */ if (*s < '0' || *s > '9') { *error_message = "Invalid Interval"; return NULL; } while (*s >= '0' && *s <= '9') interval = (interval * 10) + (*s++ - '0'); /* It must be followed by whitespace. I'm not sure if anything else is allowed. */ if (*s != ' ' && *s != '\t') { *error_message = "Invalid Interval"; return NULL; } /* Skip any whitespace. */ while (*s == ' ' || *s == '\t') s++; recur->interval = interval; return s; } /* Parse the duration from the RRULE, either a COUNT, e.g. '#5', or an UNTIL date, e.g. 20020124T000000. error_message is set if an error occurs. If no duration is given, '#2' is assumed. */ static char* rrule_parse_duration (char *s, struct icalrecurrencetype *recur, char **error_message) { /* If we've already found an error, just return. */ if (*error_message) return NULL; if (!s || *s == '\0') { /* If we are at the end of the string, assume '#2'. */ recur->count = 2; } else if (*s == '#') { /* If it starts with a '#' it is the COUNT. Note that in vCalendar #0 means forever, and setting recur->count to 0 means the same. */ int count = 0; s++; while (*s >= '0' && *s <= '9') count = (count * 10) + (*s++ - '0'); recur->count = count; } else if (*s >= '0' && *s <= '9') { /* If it starts with a digit it must be the UNTIL date. */ char *e, buffer[20]; ptrdiff_t len; /* Find the end of the date. */ e = s; while ((*e >= '0' && *e <= '9') || *e == 'T' || *e == 'Z') e++; /* Check it is a suitable length. */ len = e - s; if (len != 8 && len != 15 && len != 16) { *error_message = "Invalid End Date"; return NULL; } /* Copy the date to our buffer and null-terminate it. */ strncpy (buffer, s, len); buffer[len] = '\0'; /* Parse it into the until field. */ recur->until = icaltime_from_string (buffer); /* In iCalendar UNTIL must be UTC if it is a DATE-TIME. But we don't really know what timezone the vCalendar times are in. So if it can be converted to a DATE value, we do that. Otherwise we just use the current Unix timezone. Should be OK 99% of the time. */ if (!recur->until.is_utc) { if (recur->until.hour == 0 && recur->until.minute == 0 && recur->until.second == 0) recur->until.is_date = 1; else convert_floating_time_to_utc (&recur->until); } s = e; } else { *error_message = "Invalid Duration"; return NULL; } /* It must be followed by whitespace or the end of the string. I'm not sure if anything else is allowed. */ if (s && *s != '\0' && *s != ' ' && *s != '\t') { *error_message = "Invalid Duration"; return NULL; } return s; } static char* rrule_parse_weekly_days (char *s, struct icalrecurrencetype *recur, char **error_message) { int i; /* If we've already found an error, just return. */ if (*error_message) return NULL; for (i = 0; i < ICAL_BY_DAY_SIZE; i++) { char *e = s; int found_day, day; found_day = -1; for (day = 0; day < 7; day++) { if (!strncmp (weekdays[day], s, 2)) { /* Check the next char is whitespace or the end of string. */ e = s + 2; if (*e == ' ' || *e == '\t' || *e == '\0') { found_day = day; break; } } } if (found_day == -1) break; recur->by_day[i] = weekday_codes[day]; s = e; /* Skip any whitespace. */ while (*s == ' ' || *s == '\t') s++; } /* Terminate the array, if it isn't full. */ if (i < ICAL_BY_DAY_SIZE) recur->by_day[i] = ICAL_RECURRENCE_ARRAY_MAX; return s; } static char* rrule_parse_monthly_days (char *s, struct icalrecurrencetype *recur, char **error_message) { int i; /* If we've already found an error, just return. */ if (*error_message) return NULL; for (i = 0; i < ICAL_BY_MONTHDAY_SIZE; i++) { char *e; int month_day; if (!strncmp (s, "LD", 2)) { month_day = -1; e = s + 2; } else { month_day = strtol (s, &e, 10); /* Check we got a valid day. */ if (month_day < 1 || month_day > 31) break; /* See if it is followed by a '+' or '-'. */ if (*e == '+') { e++; } else if (*e == '-') { e++; month_day = -month_day; } } /* Check the next char is whitespace or the end of the string. */ if (*e != ' ' && *e != '\t' && *e != '\0') break; recur->by_month_day[i] = month_day; s = e; /* Skip any whitespace. */ while (*s == ' ' || *s == '\t') s++; } /* Terminate the array, if it isn't full. */ if (i < ICAL_BY_MONTHDAY_SIZE) recur->by_month_day[i] = ICAL_RECURRENCE_ARRAY_MAX; return s; } static char* rrule_parse_monthly_positions (char *s, struct icalrecurrencetype *recur, char **error_message) { int occurrences[ICAL_BY_DAY_SIZE]; int found_weekdays[7] = { 0 }; int i, num_positions, elems, month_position, day; int num_weekdays, only_weekday = 0; char *e; /* If we've already found an error, just return. */ if (*error_message) return NULL; /* First read the month position into our local occurrences array. */ for (i = 0; i < ICAL_BY_DAY_SIZE; i++) { int month_position; /* Check we got a valid position number. */ month_position = *s - '0'; if (month_position < 0 || month_position > 5) break; /* See if it is followed by a '+' or '-'. */ e = s + 1; if (*e == '+') { e++; } else if (*e == '-') { e++; month_position = -month_position; } /* Check the next char is whitespace or the end of the string. */ if (*e != ' ' && *e != '\t' && *e != '\0') break; occurrences[i] = month_position; s = e; /* Skip any whitespace. */ while (*s == ' ' || *s == '\t') s++; } num_positions = i; /* Now read the weekdays in. */ for (;;) { char *e = s; int found_day, day; found_day = -1; for (day = 0; day < 7; day++) { if (!strncmp (weekdays[day], s, 2)) { /* Check the next char is whitespace or the end of string. */ e = s + 2; if (*e == ' ' || *e == '\t' || *e == '\0') { found_day = day; break; } } } if (found_day == -1) break; found_weekdays[found_day] = 1; s = e; /* Skip any whitespace. */ while (*s == ' ' || *s == '\t') s++; } /* Now merge them together into the recur->by_day array. If there is a single position & weekday we output something like 'BYDAY=TU;BYSETPOS=2', so Outlook will understand it. */ num_weekdays = 0; for (day = 0; day < 7; day++) { if (found_weekdays[day]) { num_weekdays++; only_weekday = day; } } if (num_positions == 1 && num_weekdays == 1) { recur->by_day[0] = weekday_codes[only_weekday]; recur->by_day[1] = ICAL_RECURRENCE_ARRAY_MAX; recur->by_set_pos[0] = occurrences[0]; recur->by_set_pos[1] = ICAL_RECURRENCE_ARRAY_MAX; } else { elems = 0; for (i = 0; i < num_positions; i++) { month_position = occurrences[i]; for (day = 0; day < 7; day++) { if (found_weekdays[day]) { recur->by_day[elems] = (abs (month_position) * 8 + weekday_codes[day]) * ((month_position < 0) ? -1 : 1); elems++; if (elems == ICAL_BY_DAY_SIZE) break; } } if (elems == ICAL_BY_DAY_SIZE) break; } /* Terminate the array, if it isn't full. */ if (elems < ICAL_BY_DAY_SIZE) recur->by_day[elems] = ICAL_RECURRENCE_ARRAY_MAX; } return s; } static char* rrule_parse_yearly_months (char *s, struct icalrecurrencetype *recur, char **error_message) { int i; /* If we've already found an error, just return. */ if (*error_message) return NULL; for (i = 0; i < ICAL_BY_MONTH_SIZE; i++) { char *e; int month; month = strtol (s, &e, 10); /* Check we got a valid month. */ if (month < 1 || month > 12) break; /* Check the next char is whitespace or the end of the string. */ if (*e != ' ' && *e != '\t' && *e != '\0') break; recur->by_month[i] = month; s = e; /* Skip any whitespace. */ while (*s == ' ' || *s == '\t') s++; } /* Terminate the array, if it isn't full. */ if (i < ICAL_BY_MONTH_SIZE) recur->by_month[i] = ICAL_RECURRENCE_ARRAY_MAX; return s; } static char* rrule_parse_yearly_days (char *s, struct icalrecurrencetype *recur, char **error_message) { int i; /* If we've already found an error, just return. */ if (*error_message) return NULL; for (i = 0; i < ICAL_BY_YEARDAY_SIZE; i++) { char *e; int year_day; year_day = strtol (s, &e, 10); /* Check we got a valid year_day. */ if (year_day < 1 || year_day > 366) break; /* Check the next char is whitespace or the end of the string. */ if (*e != ' ' && *e != '\t' && *e != '\0') break; recur->by_year_day[i] = year_day; s = e; /* Skip any whitespace. */ while (*s == ' ' || *s == '\t') s++; } /* Terminate the array, if it isn't full. */ if (i < ICAL_BY_YEARDAY_SIZE) recur->by_year_day[i] = ICAL_RECURRENCE_ARRAY_MAX; return s; } /* Converts an RRULE/EXRULE property. NOTE: There are a few things that this doesn't handle: 1) vCalendar RRULE properties can contain an UNTIL date and a COUNT, and the first to occur specifies the end of the recurrence. However they are mutually exclusive in iCalendar. For now we just use the COUNT. 2) For MONTHLY By Position recurrences, if no modifiers are given they are to be calculated based on the DTSTART, e.g. if DTSTART is on the 3rd Wednesday of the month then all occurrences are on the 3rd Wed. This is awkward to do as we need to access the DTSTART property, which may be after the RRULE property. So we don't do this at present. 3) The Extended Recurrence Rule Grammar - we only support the Basic rules. The extended grammar supports rules embedded in other rules, MINUTELY recurrences, time modifiers in DAILY rules and maybe other stuff. */ void* rule_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults) { /* icalproperty_kind kind = (icalproperty_kind)icaltype;*/ icalproperty *prop = NULL; /* icalvalue *value; */ /* icalvalue_kind value_kind; */ char *s, *p, *error_message = NULL; const char *property_name; int free_string; struct icalrecurrencetype recur; s = get_string_value (object, &free_string); property_name = vObjectName (object); icalrecurrencetype_clear (&recur); if (*s == 'D') { /* The DAILY RRULE only has an interval and duration (COUNT/UNTIL). */ recur.freq = ICAL_DAILY_RECURRENCE; p = rrule_parse_interval (s + 1, &recur, &error_message); p = rrule_parse_duration (p, &recur, &error_message); } else if (*s == 'W') { /* The WEEKLY RRULE has weekday modifiers - MO TU WE. */ recur.freq = ICAL_WEEKLY_RECURRENCE; p = rrule_parse_interval (s + 1, &recur, &error_message); p = rrule_parse_weekly_days (p, &recur, &error_message); p = rrule_parse_duration (p, &recur, &error_message); } else if (*s == 'M' && *(s + 1) == 'D') { /* The MONTHLY By Day RRULE has day number modifiers - 1 1- LD. */ recur.freq = ICAL_MONTHLY_RECURRENCE; p = rrule_parse_interval (s + 2, &recur, &error_message); p = rrule_parse_monthly_days (p, &recur, &error_message); p = rrule_parse_duration (p, &recur, &error_message); } else if (*s == 'M' && *(s + 1) == 'P') { /* The MONTHLY By Position RRULE has position modifiers - 1 2- and weekday modifiers - MO TU. */ recur.freq = ICAL_MONTHLY_RECURRENCE; p = rrule_parse_interval (s + 2, &recur, &error_message); p = rrule_parse_monthly_positions (p, &recur, &error_message); p = rrule_parse_duration (p, &recur, &error_message); } else if (*s == 'Y' && *(s + 1) == 'M') { /* The YEARLY By Month RRULE has month modifiers - 1 3 12. */ recur.freq = ICAL_YEARLY_RECURRENCE; p = rrule_parse_interval (s + 2, &recur, &error_message); p = rrule_parse_yearly_months (p, &recur, &error_message); p = rrule_parse_duration (p, &recur, &error_message); } else if (*s == 'Y' && *(s + 1) == 'D') { /* The YEARLY By Day RRULE has day number modifiers - 100 200. */ recur.freq = ICAL_YEARLY_RECURRENCE; p = rrule_parse_interval (s + 2, &recur, &error_message); p = rrule_parse_yearly_days (p, &recur, &error_message); p = rrule_parse_duration (p, &recur, &error_message); } else { error_message = "Invalid RRULE Frequency"; } if (error_message) { prop = create_parse_error_property (error_message, property_name, s); } else { if (!strcmp (property_name, "RRULE")) prop = icalproperty_new_rrule (recur); else prop = icalproperty_new_exrule (recur); } if (free_string) deleteStr (s); return (void*)prop; } /* directly convertable property. The string representation of vcal is the same as ical */ void* dc_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults) { icalproperty_kind kind = (icalproperty_kind)icaltype; icalproperty *prop; icalvalue *value; icalvalue_kind value_kind; char *s; /*/,*t=0; */ int free_string; prop = icalproperty_new(kind); value_kind = icalenum_property_kind_to_value_kind (icalproperty_isa(prop)); s = get_string_value (object, &free_string); value = icalvalue_new_from_string(value_kind,s); if (free_string) deleteStr (s); icalproperty_set_value(prop,value); return (void*)prop; } /* My extraction program screwed up, so this table does not have all of the vcal properties in it. I didn't feel like re-doing the entire table, so you'll have to find the missing properties the hard way -- the code will assert */ static const struct conversion_table_struct conversion_table[] = { {VCCalProp, COMPONENT, comp, ICAL_VCALENDAR_COMPONENT}, {VCTodoProp, COMPONENT, comp, ICAL_VTODO_COMPONENT}, {VCEventProp, COMPONENT, comp, ICAL_VEVENT_COMPONENT}, {VCAAlarmProp, COMPONENT, alarm_comp, ICAL_XAUDIOALARM_COMPONENT}, {VCDAlarmProp, COMPONENT, alarm_comp, ICAL_XDISPLAYALARM_COMPONENT}, {VCMAlarmProp, COMPONENT, alarm_comp, ICAL_XEMAILALARM_COMPONENT}, {VCPAlarmProp, COMPONENT, alarm_comp, ICAL_XPROCEDUREALARM_COMPONENT}, /* These can all be converted directly by parsing the string into a libical value. */ {VCClassProp, PROPERTY, dc_prop, ICAL_CLASS_PROPERTY}, {VCDescriptionProp, PROPERTY, dc_prop, ICAL_DESCRIPTION_PROPERTY}, {VCAttendeeProp, PROPERTY, dc_prop, ICAL_ATTENDEE_PROPERTY}, {VCDTendProp, PROPERTY, dc_prop, ICAL_DTEND_PROPERTY}, {VCDTstartProp, PROPERTY, dc_prop, ICAL_DTSTART_PROPERTY}, {VCDueProp, PROPERTY, dc_prop, ICAL_DUE_PROPERTY}, {VCLocationProp, PROPERTY, dc_prop, ICAL_LOCATION_PROPERTY}, {VCSummaryProp, PROPERTY, dc_prop, ICAL_SUMMARY_PROPERTY}, {VCUniqueStringProp, PROPERTY, dc_prop, ICAL_UID_PROPERTY}, {VCURLProp, PROPERTY, dc_prop, ICAL_URL_PROPERTY}, {VCPriorityProp, PROPERTY, dc_prop, ICAL_PRIORITY_PROPERTY}, /* These can contain multiple values, which are separated in ';' in vCalendar but ',' in iCalendar. */ {VCCategoriesProp, PROPERTY, multivalued_prop,ICAL_CATEGORIES_PROPERTY}, {VCRDateProp, PROPERTY, multivalued_prop,ICAL_RDATE_PROPERTY}, {VCExpDateProp, PROPERTY, multivalued_prop,ICAL_EXDATE_PROPERTY}, /* These can be in floating time in vCalendar, but must be in UTC in iCalendar. */ {VCDCreatedProp, PROPERTY, utc_datetime_prop,ICAL_CREATED_PROPERTY}, {VCLastModifiedProp, PROPERTY, utc_datetime_prop,ICAL_LASTMODIFIED_PROPERTY}, {VCCompletedProp, PROPERTY, utc_datetime_prop,ICAL_COMPLETED_PROPERTY}, {VCTranspProp, PROPERTY, transp_prop, ICAL_TRANSP_PROPERTY}, {VCSequenceProp, PROPERTY, sequence_prop, ICAL_SEQUENCE_PROPERTY}, {VCStatusProp, PROPERTY, status_prop, ICAL_STATUS_PROPERTY}, {VCRRuleProp, PROPERTY, rule_prop, ICAL_RRULE_PROPERTY}, {VCXRuleProp, PROPERTY, rule_prop, ICAL_EXRULE_PROPERTY}, {VCRSVPProp, UNSUPPORTED, rsvp_parameter,ICAL_RSVP_PARAMETER }, {VCEncodingProp, UNSUPPORTED, parameter, ICAL_ENCODING_PARAMETER}, {VCRoleProp, UNSUPPORTED, parameter, ICAL_ROLE_PARAMETER}, /* We don't want the old VERSION or PRODID properties copied across as they are now incorrect. New VERSION & PRODID properties are added instead. */ {VCVersionProp, IGNORE, 0, 0}, {VCProdIdProp, IGNORE, 0, 0}, /* We ignore DAYLIGHT and TZ properties of the toplevel object, since we can't really do much with them. */ {VCDayLightProp, IGNORE, 0, 0}, {VCTimeZoneProp, IGNORE, 0, 0}, /* These are all alarm properties. We handle these when the alarm component is created, so we ignore them when doing the automatic conversions. "TYPE" is used in AALARM, but doesn't seem to have a name in vobject.h. */ {"TYPE", IGNORE,0, 0}, {VCRunTimeProp, IGNORE,0, 0}, {VCSnoozeTimeProp, IGNORE,0, 0}, {VCRepeatCountProp, IGNORE,0, 0}, {VCValueProp, IGNORE,0, 0}, {VCProcedureNameProp, IGNORE,0, 0}, {VCDisplayStringProp, IGNORE,0, 0}, {VCEmailAddressProp, IGNORE,0, 0}, {VCNoteProp, IGNORE,0, 0}, {VCQuotedPrintableProp,UNSUPPORTED,0, 0}, {VC7bitProp, UNSUPPORTED,0, 0}, {VC8bitProp, UNSUPPORTED,0, 0}, {VCAdditionalNamesProp,UNSUPPORTED,0, 0}, {VCAdrProp, UNSUPPORTED,0, 0}, {VCAgentProp, UNSUPPORTED,0, 0}, {VCAIFFProp, UNSUPPORTED,0, 0}, {VCAOLProp, UNSUPPORTED,0, 0}, {VCAppleLinkProp, UNSUPPORTED,0, 0}, {VCAttachProp, UNSUPPORTED,0, 0}, {VCATTMailProp, UNSUPPORTED,0, 0}, {VCAudioContentProp, UNSUPPORTED,0, 0}, {VCAVIProp, UNSUPPORTED,0, 0}, {VCBase64Prop, UNSUPPORTED,0, 0}, {VCBBSProp, UNSUPPORTED,0, 0}, {VCBirthDateProp, UNSUPPORTED,0, 0}, {VCBMPProp, UNSUPPORTED,0, 0}, {VCBodyProp, UNSUPPORTED,0, 0}, {VCCaptionProp, UNSUPPORTED,0, 0}, {VCCarProp, UNSUPPORTED,0, 0}, {VCCellularProp, UNSUPPORTED,0, 0}, {VCCGMProp, UNSUPPORTED,0, 0}, {VCCharSetProp, UNSUPPORTED,0, 0}, {VCCIDProp, UNSUPPORTED,0, 0}, {VCCISProp, UNSUPPORTED,0, 0}, {VCCityProp, UNSUPPORTED,0, 0}, {VCCommentProp, UNSUPPORTED,0, 0}, {VCCountryNameProp, UNSUPPORTED,0, 0}, {VCDataSizeProp, UNSUPPORTED,0, 0}, {VCDeliveryLabelProp, UNSUPPORTED,0, 0}, {VCDIBProp, UNSUPPORTED,0, 0}, {VCDomesticProp, UNSUPPORTED,0, 0}, {VCEndProp, UNSUPPORTED,0, 0}, {VCEWorldProp, UNSUPPORTED,0, 0}, {VCExNumProp, UNSUPPORTED,0, 0}, {VCExpectProp, UNSUPPORTED,0, 0}, {VCFamilyNameProp, UNSUPPORTED,0, 0}, {VCFaxProp, UNSUPPORTED,0, 0}, {VCFullNameProp, UNSUPPORTED,0, 0}, {VCGeoProp, UNSUPPORTED,0, 0}, {VCGeoLocationProp, UNSUPPORTED,0, 0}, {VCGIFProp, UNSUPPORTED,0, 0}, {VCGivenNameProp, UNSUPPORTED,0, 0}, {VCGroupingProp, UNSUPPORTED,0, 0}, {VCHomeProp, UNSUPPORTED,0, 0}, {VCIBMMailProp, UNSUPPORTED,0, 0}, {VCInlineProp, UNSUPPORTED,0, 0}, {VCInternationalProp, UNSUPPORTED,0, 0}, {VCInternetProp, UNSUPPORTED,0, 0}, {VCISDNProp, UNSUPPORTED,0, 0}, {VCJPEGProp, UNSUPPORTED,0, 0}, {VCLanguageProp, UNSUPPORTED,0, 0}, {VCLastRevisedProp, UNSUPPORTED,0, 0}, {VCLogoProp, UNSUPPORTED,0, 0}, {VCMailerProp, UNSUPPORTED,0, 0}, {VCMCIMailProp, UNSUPPORTED,0, 0}, {VCMessageProp, UNSUPPORTED,0, 0}, {VCMETProp, UNSUPPORTED,0, 0}, {VCModemProp, UNSUPPORTED,0, 0}, {VCMPEG2Prop, UNSUPPORTED,0, 0}, {VCMPEGProp, UNSUPPORTED,0, 0}, {VCMSNProp, UNSUPPORTED,0, 0}, {VCNamePrefixesProp, UNSUPPORTED,0, 0}, {VCNameProp, UNSUPPORTED,0, 0}, {VCNameSuffixesProp, UNSUPPORTED,0, 0}, {VCOrgNameProp, UNSUPPORTED,0, 0}, {VCOrgProp, UNSUPPORTED,0, 0}, {VCOrgUnit2Prop, UNSUPPORTED,0, 0}, {VCOrgUnit3Prop, UNSUPPORTED,0, 0}, {VCOrgUnit4Prop, UNSUPPORTED,0, 0}, {VCOrgUnitProp, UNSUPPORTED,0, 0}, {VCPagerProp, UNSUPPORTED,0, 0}, {VCParcelProp, UNSUPPORTED,0, 0}, {VCPartProp, UNSUPPORTED,0, 0}, {VCPCMProp, UNSUPPORTED,0, 0}, {VCPDFProp, UNSUPPORTED,0, 0}, {VCPGPProp, UNSUPPORTED,0, 0}, {VCPhotoProp, UNSUPPORTED,0, 0}, {VCPICTProp, UNSUPPORTED,0, 0}, {VCPMBProp, UNSUPPORTED,0, 0}, {VCPostalBoxProp, UNSUPPORTED,0, 0}, {VCPostalCodeProp, UNSUPPORTED,0, 0}, {VCPostalProp, UNSUPPORTED,0, 0}, {VCPowerShareProp, UNSUPPORTED,0, 0}, {VCPreferredProp, UNSUPPORTED,0, 0}, {VCProdigyProp, UNSUPPORTED,0, 0}, {VCPronunciationProp, UNSUPPORTED,0, 0}, {VCPSProp, UNSUPPORTED,0, 0}, {VCPublicKeyProp, UNSUPPORTED,0, 0}, {VCQPProp, UNSUPPORTED,0, 0}, {VCQuickTimeProp, UNSUPPORTED,0, 0}, {VCRegionProp, UNSUPPORTED,0, 0}, {VCResourcesProp, UNSUPPORTED,0, 0}, {VCRNumProp, UNSUPPORTED,0, 0}, {VCStartProp, UNSUPPORTED,0, 0}, {VCStreetAddressProp, UNSUPPORTED,0, 0}, {VCSubTypeProp, UNSUPPORTED,0, 0}, {VCTelephoneProp, UNSUPPORTED,0, 0}, {VCTIFFProp, UNSUPPORTED,0, 0}, {VCTitleProp, UNSUPPORTED,0, 0}, {VCTLXProp, UNSUPPORTED,0, 0}, {VCURLValueProp, UNSUPPORTED,0, 0}, {VCVideoProp, UNSUPPORTED,0, 0}, {VCVoiceProp, UNSUPPORTED,0, 0}, {VCWAVEProp, UNSUPPORTED,0, 0}, {VCWMFProp, UNSUPPORTED,0, 0}, {VCWorkProp, UNSUPPORTED,0, 0}, {VCX400Prop, UNSUPPORTED,0, 0}, {VCX509Prop, UNSUPPORTED,0, 0}, {0,0,0,0} }; static void icalvcal_traverse_objects(VObject *object, icalcomponent* last_comp, icalproperty* last_prop, icalvcal_defaults *defaults) { VObjectIterator iterator; char* name = "[No Name]"; icalcomponent* subc = 0; int i; if ( vObjectName(object)== 0){ printf("ERROR, object has no name"); assert(0); return; } name = (char*)vObjectName(object); /* Lookup this object in the conversion table */ for (i = 0; conversion_table[i].vcalname != 0; i++){ if(strcmp(conversion_table[i].vcalname, name) == 0){ break; } } /* Did not find the object. It may be an X-property, or an unknown property */ if (conversion_table[i].vcalname == 0){ /* Handle X properties */ if(strncmp(name, "X-",2) == 0){ icalproperty* prop = (icalproperty*)dc_prop(ICAL_X_PROPERTY,object, last_comp, defaults); icalproperty_set_x_name(prop,name); icalcomponent_add_property(last_comp,prop); } else { return; } } else { /* The vCal property is in the table, and it is not an X property, so try to convert it to an iCal component, property or parameter. */ switch(conversion_table[i].type){ case COMPONENT: { subc = (icalcomponent*)(conversion_table[i].conversion_func (conversion_table[i].icaltype, object, last_comp, defaults)); if (subc) { icalcomponent_add_component(last_comp,subc); } break; } case PROPERTY: { if (vObjectValueType(object) && conversion_table[i].conversion_func != 0 ) { icalproperty* prop = (icalproperty*)(conversion_table[i].conversion_func (conversion_table[i].icaltype, object, last_comp, defaults)); if (prop) icalcomponent_add_property(last_comp,prop); last_prop = prop; } break; } case PARAMETER: { break; } case UNSUPPORTED: { /* If the property is listed as UNSUPPORTED, insert a X_LIC_ERROR property to note this fact. */ char temp[1024]; char* message = "Unsupported vCal property"; icalparameter *error_param; icalproperty *error_prop; snprintf(temp,1024,"%s: %s",message,name); error_param = icalparameter_new_xlicerrortype( ICAL_XLICERRORTYPE_UNKNOWNVCALPROPERROR ); error_prop = icalproperty_new_xlicerror(temp); icalproperty_add_parameter(error_prop, error_param); icalcomponent_add_property(last_comp,error_prop); break; } case IGNORE: { /* Do Nothing. */ break; } } } /* Now, step down into the next vCalproperty */ initPropIterator(&iterator,object); while (moreIteration(&iterator)) { VObject *eachProp = nextVObject(&iterator); /* If 'object' is a component, then the next traversal down should use it as the 'last_comp' */ if(subc!=0){ icalvcal_traverse_objects(eachProp,subc,last_prop,defaults); } else { icalvcal_traverse_objects(eachProp,last_comp,last_prop,defaults); } } } #if 0 switch (vObjectValueType(object)) { case VCVT_USTRINGZ: { char c; char *t,*s; s = t = fakeCString(vObjectUStringZValue(object)); printf(" ustringzstring:%s\n",s); deleteStr(s); break; } case VCVT_STRINGZ: { char c; const char *s = vObjectStringZValue(object); printf(" stringzstring:%s\n",s); break; } case VCVT_UINT: { int i = vObjectIntegerValue(object); printf(" int:%d\n",i); break; } case VCVT_ULONG: { long l = vObjectLongValue(object); printf(" int:%d\n",l); break; } case VCVT_VOBJECT: { printf("ERROR, should not get here\n"); break; } case VCVT_RAW: case 0: default: break; } #endif libical-1.0/src/libicalvcal/vcc.h0000664000076400007640000000746512132563133015726 0ustar allenallen/*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ #ifndef __VCC_H__ #define __VCC_H__ 1 #include "vobject.h" #if defined(__CPLUSPLUS__) || defined(__cplusplus) extern "C" { #endif typedef void (*MimeErrorHandler)(char *); extern DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler); extern DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len); extern DLLEXPORT(VObject*) Parse_MIME_FromFileName(char* fname); /* NOTE regarding Parse_MIME_FromFile The function above, Parse_MIME_FromFile, comes in two flavors, neither of which is exported from the DLL. Each version takes a CFile or FILE* as a parameter, neither of which can be passed across a DLL interface (at least that is my experience). If you are linking this code into your build directly then you may find them a more convenient API that the other flavors that take a file name. If you use them with the DLL LIB you will get a link error. */ #if INCLUDEMFC extern VObject* Parse_MIME_FromFile(CFile *file); #else extern VObject* Parse_MIME_FromFile(FILE *file); #endif #if defined(__CPLUSPLUS__) || defined(__cplusplus) } #endif #endif /* __VCC_H__ */ libical-1.0/src/libicalvcal/vobject.h0000664000076400007640000003370612132563133016604 0ustar allenallen/*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ /* The vCard/vCalendar C interface is implemented in the set of files as follows: vcc.y, yacc source, and vcc.c, the yacc output you will use implements the core parser vobject.c implements an API that insulates the caller from the parser and changes in the vCard/vCalendar BNF port.h defines compilation environment dependent stuff vcc.h and vobject.h are header files for their .c counterparts vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions which you may find useful. test.c is a standalone test driver that exercises some of the features of the APIs provided. Invoke test.exe on a VCARD/VCALENDAR input text file and you will see the pretty print output of the internal representation (this pretty print output should give you a good idea of how the internal representation looks like -- there is one such output in the following too). Also, a file with the .out suffix is generated to show that the internal representation can be written back in the original text format. For more information on this API see the readme.txt file which accompanied this distribution. Also visit: http://www.versit.com http://www.ralden.com */ #ifndef __VOBJECT_H__ #define __VOBJECT_H__ 1 #include "port.h" #include #include #if defined(__CPLUSPLUS__) || defined(__cplusplus) extern "C" { #endif #define VC7bitProp "7BIT" #define VC8bitProp "8BIT" #define VCAAlarmProp "AALARM" #define VCAdditionalNamesProp "ADDN" #define VCAdrProp "ADR" #define VCAgentProp "AGENT" #define VCAIFFProp "AIFF" #define VCAOLProp "AOL" #define VCAppleLinkProp "APPLELINK" #define VCAttachProp "ATTACH" #define VCAttendeeProp "ATTENDEE" #define VCATTMailProp "ATTMAIL" #define VCAudioContentProp "AUDIOCONTENT" #define VCAVIProp "AVI" #define VCBase64Prop "BASE64" #define VCBBSProp "BBS" #define VCBirthDateProp "BDAY" #define VCBMPProp "BMP" #define VCBodyProp "BODY" #define VCBusinessRoleProp "ROLE" #define VCCalProp "VCALENDAR" #define VCCaptionProp "CAP" #define VCCardProp "VCARD" #define VCCarProp "CAR" #define VCCategoriesProp "CATEGORIES" #define VCCellularProp "CELL" #define VCCGMProp "CGM" #define VCCharSetProp "CS" #define VCCIDProp "CID" #define VCCISProp "CIS" #define VCCityProp "L" #define VCClassProp "CLASS" #define VCCommentProp "NOTE" #define VCCompletedProp "COMPLETED" #define VCContentIDProp "CONTENT-ID" #define VCCountryNameProp "C" #define VCDAlarmProp "DALARM" #define VCDataSizeProp "DATASIZE" #define VCDayLightProp "DAYLIGHT" #define VCDCreatedProp "DCREATED" #define VCDeliveryLabelProp "LABEL" #define VCDescriptionProp "DESCRIPTION" #define VCDIBProp "DIB" #define VCDisplayStringProp "DISPLAYSTRING" #define VCDomesticProp "DOM" #define VCDTendProp "DTEND" #define VCDTstartProp "DTSTART" #define VCDueProp "DUE" #define VCEmailAddressProp "EMAIL" #define VCEncodingProp "ENCODING" #define VCEndProp "END" #define VCEventProp "VEVENT" #define VCEWorldProp "EWORLD" #define VCExNumProp "EXNUM" #define VCExpDateProp "EXDATE" #define VCExpectProp "EXPECT" #define VCExtAddressProp "EXT ADD" #define VCFamilyNameProp "F" #define VCFaxProp "FAX" #define VCFullNameProp "FN" #define VCGeoProp "GEO" #define VCGeoLocationProp "GEO" #define VCGIFProp "GIF" #define VCGivenNameProp "G" #define VCGroupingProp "Grouping" #define VCHomeProp "HOME" #define VCIBMMailProp "IBMMail" #define VCInlineProp "INLINE" #define VCInternationalProp "INTL" #define VCInternetProp "INTERNET" #define VCISDNProp "ISDN" #define VCJPEGProp "JPEG" #define VCLanguageProp "LANG" #define VCLastModifiedProp "LAST-MODIFIED" #define VCLastRevisedProp "REV" #define VCLocationProp "LOCATION" #define VCLogoProp "LOGO" #define VCMailerProp "MAILER" #define VCMAlarmProp "MALARM" #define VCMCIMailProp "MCIMAIL" #define VCMessageProp "MSG" #define VCMETProp "MET" #define VCModemProp "MODEM" #define VCMPEG2Prop "MPEG2" #define VCMPEGProp "MPEG" #define VCMSNProp "MSN" #define VCNamePrefixesProp "NPRE" #define VCNameProp "N" #define VCNameSuffixesProp "NSUF" #define VCNoteProp "NOTE" #define VCOrgNameProp "ORGNAME" #define VCOrgProp "ORG" #define VCOrgUnit2Prop "OUN2" #define VCOrgUnit3Prop "OUN3" #define VCOrgUnit4Prop "OUN4" #define VCOrgUnitProp "OUN" #define VCPagerProp "PAGER" #define VCPAlarmProp "PALARM" #define VCParcelProp "PARCEL" #define VCPartProp "PART" #define VCPCMProp "PCM" #define VCPDFProp "PDF" #define VCPGPProp "PGP" #define VCPhotoProp "PHOTO" #define VCPICTProp "PICT" #define VCPMBProp "PMB" #define VCPostalBoxProp "BOX" #define VCPostalCodeProp "PC" #define VCPostalProp "POSTAL" #define VCPowerShareProp "POWERSHARE" #define VCPreferredProp "PREF" #define VCPriorityProp "PRIORITY" #define VCProcedureNameProp "PROCEDURENAME" #define VCProdIdProp "PRODID" #define VCProdigyProp "PRODIGY" #define VCPronunciationProp "SOUND" #define VCPSProp "PS" #define VCPublicKeyProp "KEY" #define VCQPProp "QP" #define VCQuickTimeProp "QTIME" #define VCQuotedPrintableProp "QUOTED-PRINTABLE" #define VCRDateProp "RDATE" #define VCRegionProp "R" #define VCRelatedToProp "RELATED-TO" #define VCRepeatCountProp "REPEATCOUNT" #define VCResourcesProp "RESOURCES" #define VCRNumProp "RNUM" #define VCRoleProp "ROLE" #define VCRRuleProp "RRULE" #define VCRSVPProp "RSVP" #define VCRunTimeProp "RUNTIME" #define VCSequenceProp "SEQUENCE" #define VCSnoozeTimeProp "SNOOZETIME" #define VCStartProp "START" #define VCStatusProp "STATUS" #define VCStreetAddressProp "STREET" #define VCSubTypeProp "SUBTYPE" #define VCSummaryProp "SUMMARY" #define VCTelephoneProp "TEL" #define VCTIFFProp "TIFF" #define VCTimeZoneProp "TZ" #define VCTitleProp "TITLE" #define VCTLXProp "TLX" #define VCTodoProp "VTODO" #define VCTranspProp "TRANSP" #define VCUniqueStringProp "UID" #define VCURLProp "URL" #define VCURLValueProp "URLVAL" #define VCValueProp "VALUE" #define VCVersionProp "VERSION" #define VCVideoProp "VIDEO" #define VCVoiceProp "VOICE" #define VCWAVEProp "WAVE" #define VCWMFProp "WMF" #define VCWorkProp "WORK" #define VCX400Prop "X400" #define VCX509Prop "X509" #define VCXRuleProp "XRULE" /* Extensions */ #define XPilotIdProp "X-PILOTID" #define XPilotStatusProp "X-PILOTSTAT" typedef struct VObject VObject; typedef struct VObjectIterator { VObject* start; VObject* next; } VObjectIterator; extern DLLEXPORT(VObject*) newVObject(const char *id); extern DLLEXPORT(void) deleteVObject(VObject *p); extern DLLEXPORT(char*) dupStr(const char *s, size_t size); extern DLLEXPORT(void) deleteStr(const char *p); extern DLLEXPORT(void) unUseStr(const char *s); extern DLLEXPORT(void) setVObjectName(VObject *o, const char* id); extern DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s); extern DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s); extern DLLEXPORT(void) setVObjectUStringZValue(VObject *o, const wchar_t *s); extern DLLEXPORT(void) setVObjectUStringZValue_(VObject *o, const wchar_t *s); extern DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i); extern DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l); extern DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t); extern DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size); extern DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size); extern DLLEXPORT(const char*) vObjectName(VObject *o); extern DLLEXPORT(const char*) vObjectStringZValue(VObject *o); extern DLLEXPORT(const wchar_t*) vObjectUStringZValue(VObject *o); extern DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o); extern DLLEXPORT(unsigned long) vObjectLongValue(VObject *o); extern DLLEXPORT(void*) vObjectAnyValue(VObject *o); extern DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o); extern DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p); extern DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p); extern DLLEXPORT(VObject*) addProp(VObject *o, const char *id); extern DLLEXPORT(VObject*) addProp_(VObject *o, const char *id); extern DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v); extern DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size); extern DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size); extern DLLEXPORT(VObject*) addGroup(VObject *o, const char *g); extern DLLEXPORT(void) addList(VObject **o, VObject *p); extern DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id); extern DLLEXPORT(VObject*) nextVObjectInList(VObject *o); extern DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o); extern DLLEXPORT(int) moreIteration(VObjectIterator *i); extern DLLEXPORT(VObject*) nextVObject(VObjectIterator *i); extern DLLEXPORT(char*) writeMemVObject(char *s, int *len, VObject *o); extern DLLEXPORT(char*) writeMemVObjects(char *s, int *len, VObject *list); extern DLLEXPORT(const char*) lookupStr(const char *s); extern DLLEXPORT(void) cleanStrTbl(); extern DLLEXPORT(void) cleanVObject(VObject *o); extern DLLEXPORT(void) cleanVObjects(VObject *list); extern DLLEXPORT(const char*) lookupProp(const char* str); extern DLLEXPORT(const char*) lookupProp_(const char* str); extern DLLEXPORT(wchar_t*) fakeUnicode(const char *ps, size_t *bytes); extern DLLEXPORT(int) uStrLen(const wchar_t *u); extern DLLEXPORT(char*) fakeCString(const wchar_t *u); extern DLLEXPORT(void) printVObjectToFile(char *fname,VObject *o); extern DLLEXPORT(void) printVObjectsToFile(char *fname,VObject *list); extern DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o); extern DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list); extern DLLEXPORT(int) vObjectValueType(VObject *o); /* return type of vObjectValueType: */ #define VCVT_NOVALUE 0 /* if the VObject has no value associated with it. */ #define VCVT_STRINGZ 1 /* if the VObject has value set by setVObjectStringZValue. */ #define VCVT_USTRINGZ 2 /* if the VObject has value set by setVObjectUStringZValue. */ #define VCVT_UINT 3 /* if the VObject has value set by setVObjectIntegerValue. */ #define VCVT_ULONG 4 /* if the VObject has value set by setVObjectLongValue. */ #define VCVT_RAW 5 /* if the VObject has value set by setVObjectAnyValue. */ #define VCVT_VOBJECT 6 /* if the VObject has value set by setVObjectVObjectValue. */ extern const char** fieldedProp; /* NOTE regarding printVObject and writeVObject The functions below are not exported from the DLL because they take a FILE* as a parameter, which cannot be passed across a DLL interface (at least that is my experience). Instead you can use their companion functions which take file names or pointers to memory. However, if you are linking this code into your build directly then you may find them a more convenient API and you can go ahead and use them. If you try to use them with the DLL LIB you will get a link error. */ extern void printVObject(FILE *fp,VObject *o); extern void writeVObject(FILE *fp, VObject *o); #if defined(__CPLUSPLUS__) || defined(__cplusplus) } #endif #endif /* __VOBJECT_H__ */ libical-1.0/src/libicalvcal/Makefile.am0000664000076400007640000000157312132563133017030 0ustar allenallenAM_YFLAGS = -l AM_LFLAGS = -L -R lib_LTLIBRARIES = libicalvcal.la INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ -I$(top_srcdir)/src/libicalss libicalvcal_la_LDFLAGS = -version-info 48:0:48 if OS_WIN32 libicalvcal_la_LDFLAGS += -no-undefined endif libicalvcal_la_LIBADD = $(top_builddir)/src/libical/libical.la if DEV libicalvcal_la_DEVSOURCES = vcc.y else libicalvcal_la_DEVSOURCES = vcc.c endif libicalvcal_la_SOURCES = \ icalvcal.h \ icalvcal.c \ port.h \ vcc.h \ vobject.h \ vobject.c \ vcaltmp.h \ vcaltmp.c \ $(libicalvcal_la_DEVSOURCES) libicalvcalincludedir = $(includedir)/libical libicalvcalinclude_HEADERS = \ icalvcal.h \ port.h \ vcc.h \ vobject.h \ vcaltmp.h EXTRA_DIST = \ README.TXT \ vcaltest.c \ vctest.c distclean: clean libical-1.0/src/libicalvcal/vcaltest.c0000664000076400007640000000551712132563133016767 0ustar allenallen#include #include #include "vcaltmp.h" #if 0 This testcase would generate a file call "frankcal.vcf" with the following content: BEGIN:VCALENDAR DCREATED:19960523T100522 GEO:37.24,-17.87 PRODID:-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN VERSION:0.3 BEGIN:VEVENT DTSTART:19960523T120000 DTEND:19960523T130000 DESCRIPTION;QUOTED-PRINTABLE:VERSIT PDI PR Teleconference/Interview =0A= With Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar=0A= activities with European Press representatives. SUMMARY:VERSIT PDI PR Teleconference/Interview SUBTYPE:PHONE CALL STATUS:CONFIRMED TRANSP:19960523T100522-4000F100582713-009251 UID:http://www.ibm.com/raleigh/fdawson/~c:\or2\orgfiles\versit.or2 DALARM:19960523T114500;5;3;Your Telecon Starts At Noon!!!; MALARM:19960522T120000;;;fdawson@raleigh.ibm.com;Remember 05/23 Noon Telecon!!!; PALARM:19960523T115500;;;c:\or2\organize.exe c:\or2\orgfiles\versit.or2; X-LDC-OR2-OLE:c:\temp\agenda.doc END:VEVENT BEGIN:VTODO DUE:19960614T0173000 DESCRIPTION:Review VCalendar helper API. END:VTODO END:VCALENDAR #endif FILE *cfp; void testVcalAPIs() { FILE *fp; VObject *vcal, *vevent; #if _CONSOLE cfp = stdout; #else cfp = fopen("vcaltest.out","w"); #endif if (cfp == 0) return; vcal = vcsCreateVCal( "19960523T100522", "37.24,-17.87", "-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN", 0, "0.3" ); vevent = vcsAddEvent( vcal, "19960523T120000", "19960523T130000", "VERSIT PDI PR Teleconference/Interview \nWith Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar\nactivities with European Press representatives.", "VERSIT PDI PR Teleconference/Interview", "PHONE CALL", 0, "CONFIRMED", "19960523T100522-4000F100582713-009251", "http://www.ibm.com/raleigh/fdawson/~c:\\or2\\orgfiles\\versit.or2", 0 ); vcsAddDAlarm(vevent, "19960523T114500", "5", "3", "Your Telecon Starts At Noon!!!"); vcsAddMAlarm(vevent, "19960522T120000", 0, 0, "fdawson@raleigh.ibm.com", "Remember 05/23 Noon Telecon!!!"); vcsAddPAlarm(vevent, "19960523T115500", 0 ,0, "c:\\or2\\organize.exe c:\\or2\\orgfiles\\versit.or2"); addPropValue(vevent, "X-LDC-OR2-OLE", "c:\\temp\\agenda.doc"); vcsAddTodo( vcal, 0, "19960614T0173000", 0, "Review VCalendar helper API.", 0, 0, 0, 0, 0, 0 ); /* now do something to the resulting VObject */ /* pretty print on stdout for fun */ printVObject(cfp,vcal); /* open the output text file */ #define OUTFILE "frankcal.vcf" fp = fopen(OUTFILE, "w"); if (fp) { /* write it in text form */ writeVObject(fp,vcal); fclose(fp); } else { fprintf(cfp,"open output file '%s' failed\n", OUTFILE); } if (cfp != stdout) fclose(cfp); } void main() { testVcalAPIs(); } libical-1.0/src/libicalvcal/vobject.c0000664000076400007640000010136312132563133016572 0ustar allenallen/*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ /* * src: vobject.c * doc: vobject and APIs to construct vobject, APIs pretty print * vobject, and convert a vobject into its textual representation. */ #if defined(_MSC_VER) #define snprintf _snprintf #define strcasecmp stricmp #endif #include "vobject.h" #include #include #include #include #define NAME_OF(o) o->id #define VALUE_TYPE(o) o->valType #define STRINGZ_VALUE_OF(o) o->val.strs #define USTRINGZ_VALUE_OF(o) o->val.ustrs #define INTEGER_VALUE_OF(o) o->val.i #define LONG_VALUE_OF(o) o->val.l #define ANY_VALUE_OF(o) o->val.any #define VOBJECT_VALUE_OF(o) o->val.vobj typedef union ValueItem { const char *strs; const wchar_t *ustrs; unsigned int i; unsigned long l; void *any; VObject *vobj; } ValueItem; struct VObject { VObject *next; const char *id; VObject *prop; unsigned short valType; ValueItem val; }; typedef struct StrItem StrItem; struct StrItem { StrItem *next; const char *s; unsigned int refCnt; }; const char** fieldedProp; /*---------------------------------------------------------------------- The following functions involve with memory allocation: newVObject deleteVObject dupStr deleteStr newStrItem deleteStrItem ----------------------------------------------------------------------*/ DLLEXPORT(VObject*) newVObject_(const char *id) { VObject *p = (VObject*)malloc(sizeof(VObject)); p->next = 0; p->id = id; p->prop = 0; VALUE_TYPE(p) = 0; ANY_VALUE_OF(p) = 0; return p; } DLLEXPORT(VObject*) newVObject(const char *id) { return newVObject_(lookupStr(id)); } DLLEXPORT(void) deleteVObject(VObject *p) { unUseStr(p->id); free(p); } DLLEXPORT(char*) dupStr(const char *s, size_t size) { char *t; if (size == 0) { size = strlen(s); } t = (char*)malloc(size+1); if (t) { memcpy(t,s,size); t[size] = 0; return t; } else { return (char*)0; } } DLLEXPORT(void) deleteStr(const char *p) { if (p) free((void*)p); } static StrItem* newStrItem(const char *s, StrItem *next) { StrItem *p = (StrItem*)malloc(sizeof(StrItem)); p->next = next; p->s = s; p->refCnt = 1; return p; } static void deleteStrItem(StrItem *p) { free((void*)p); } /*---------------------------------------------------------------------- The following function provide accesses to VObject's value. ----------------------------------------------------------------------*/ DLLEXPORT(const char*) vObjectName(VObject *o) { return NAME_OF(o); } DLLEXPORT(void) setVObjectName(VObject *o, const char* id) { NAME_OF(o) = id; } DLLEXPORT(const char*) vObjectStringZValue(VObject *o) { return STRINGZ_VALUE_OF(o); } DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s) { STRINGZ_VALUE_OF(o) = dupStr(s,0); VALUE_TYPE(o) = VCVT_STRINGZ; } DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s) { STRINGZ_VALUE_OF(o) = s; VALUE_TYPE(o) = VCVT_STRINGZ; } DLLEXPORT(const wchar_t*) vObjectUStringZValue(VObject *o) { return USTRINGZ_VALUE_OF(o); } DLLEXPORT(void) setVObjectUStringZValue(VObject *o, const wchar_t *s) { USTRINGZ_VALUE_OF(o) = (wchar_t*) dupStr((char*)s,(uStrLen(s)+1)*2); VALUE_TYPE(o) = VCVT_USTRINGZ; } DLLEXPORT(void) setVObjectUStringZValue_(VObject *o, const wchar_t *s) { USTRINGZ_VALUE_OF(o) = s; VALUE_TYPE(o) = VCVT_USTRINGZ; } DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o) { return INTEGER_VALUE_OF(o); } DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i) { INTEGER_VALUE_OF(o) = i; VALUE_TYPE(o) = VCVT_UINT; } DLLEXPORT(unsigned long) vObjectLongValue(VObject *o) { return LONG_VALUE_OF(o); } DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l) { LONG_VALUE_OF(o) = l; VALUE_TYPE(o) = VCVT_ULONG; } DLLEXPORT(void*) vObjectAnyValue(VObject *o) { return ANY_VALUE_OF(o); } DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t) { ANY_VALUE_OF(o) = t; VALUE_TYPE(o) = VCVT_RAW; } DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o) { return VOBJECT_VALUE_OF(o); } DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p) { VOBJECT_VALUE_OF(o) = p; VALUE_TYPE(o) = VCVT_VOBJECT; } DLLEXPORT(int) vObjectValueType(VObject *o) { return VALUE_TYPE(o); } /*---------------------------------------------------------------------- The following functions can be used to build VObject. ----------------------------------------------------------------------*/ DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p) { /* circular link list pointed to tail */ /* o {next,id,prop,val} V pn {next,id,prop,val} V ... p1 {next,id,prop,val} V pn --> o {next,id,prop,val} V pn {next,id,prop,val} V p {next,id,prop,val} ... p1 {next,id,prop,val} V pn */ VObject *tail = o->prop; if (tail) { p->next = tail->next; o->prop = tail->next = p; } else { o->prop = p->next = p; } return p; } DLLEXPORT(VObject*) addProp(VObject *o, const char *id) { return addVObjectProp(o,newVObject(id)); } DLLEXPORT(VObject*) addProp_(VObject *o, const char *id) { return addVObjectProp(o,newVObject_(id)); } DLLEXPORT(void) addList(VObject **o, VObject *p) { p->next = 0; if (*o == 0) { *o = p; } else { VObject *t = *o; while (t->next) { t = t->next; } t->next = p; } } DLLEXPORT(VObject*) nextVObjectInList(VObject *o) { return o->next; } DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size) { VObject *sizeProp; setVObjectAnyValue(prop, val); sizeProp = addProp(prop,VCDataSizeProp); setVObjectLongValue(sizeProp, size); return prop; } DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size) { void *p = dupStr((const char *)val,size); return setValueWithSize_(prop,p,p?size:0); } DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o) { i->start = o->prop; i->next = 0; } DLLEXPORT(void) initVObjectIterator(VObjectIterator *i, VObject *o) { i->start = o->next; i->next = 0; } DLLEXPORT(int) moreIteration(VObjectIterator *i) { return (i->start && (i->next==0 || i->next!=i->start)); } DLLEXPORT(VObject*) nextVObject(VObjectIterator *i) { if (i->start && i->next != i->start) { if (i->next == 0) { i->next = i->start->next; return i->next; } else { i->next = i->next->next; return i->next; } } else return (VObject*)0; } DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id) { VObjectIterator i; initPropIterator(&i,o); while (moreIteration(&i)) { VObject *each = nextVObject(&i); if (!stricmp(id,each->id)) return each; } return (VObject*)0; } DLLEXPORT(VObject*) addGroup(VObject *o, const char *g) { /* a.b.c --> prop(c) prop(VCGrouping=b) prop(VCGrouping=a) */ char *dot = strrchr(g,'.'); if (dot) { VObject *p, *t; char *gs, *n = dot+1; gs = dupStr(g,0); /* so we can write to it. */ /* used to be * t = p = addProp_(o,lookupProp_(n)); */ t = p = addProp_(o,lookupProp(n)); dot = strrchr(gs,'.'); *dot = 0; do { dot = strrchr(gs,'.'); if (dot) { n = dot+1; *dot=0; } else n = gs; /* property(VCGroupingProp=n); * and the value may have VCGrouping property */ t = addProp(t,VCGroupingProp); setVObjectStringZValue(t,lookupProp_(n)); } while (n != gs); deleteStr(gs); return p; } else return addProp_(o,lookupProp(g)); } DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v) { VObject *prop; prop = addProp(o,p); setVObjectUStringZValue_(prop, fakeUnicode(v,0)); return prop; } DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size) { VObject *prop; prop = addProp(o,p); setValueWithSize_(prop, (void*)v, size); return prop; } DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size) { return addPropSizedValue_(o,p,dupStr(v,size),size); } /*---------------------------------------------------------------------- The following pretty print a VObject ----------------------------------------------------------------------*/ static void printVObject_(FILE *fp, VObject *o, int level); static void indent(FILE *fp, int level) { int i; for (i=0;i */ appendcOFile_(fp,0xd); appendcOFile_(fp,0xa); } else appendcOFile_(fp,c); } static void appendsOFile(OFile *fp, const char *s) { size_t i, slen; slen = strlen(s); for (i=0; ifp = ofp; fp->s = 0; fp->len = 0; fp->limit = 0; fp->alloc = 0; fp->fail = 0; } static void initMemOFile(OFile *fp, char *s, int len) { fp->fp = 0; fp->s = s; fp->len = 0; fp->limit = s?len:0; fp->alloc = s?0:1; fp->fail = 0; } static int writeBase64(OFile *fp, unsigned char *s, long len) { long cur = 0; int i, numQuads = 0; unsigned long trip; unsigned char b; char quad[5]; #define MAXQUADS 16 quad[4] = 0; while (cur < len) { /* collect the triplet of bytes into 'trip' */ trip = 0; for (i = 0; i < 3; i++) { b = (cur < len) ? *(s + cur) : 0; cur++; trip = trip << 8 | b; } /* fill in 'quad' with the appropriate four characters */ for (i = 3; i >= 0; i--) { b = (unsigned char)(trip & 0x3F); trip = trip >> 6; if ((3 - i) < (cur - len)) quad[i] = '='; /* pad char */ else if (b < 26) quad[i] = (char)b + 'A'; else if (b < 52) quad[i] = (char)(b - 26) + 'a'; else if (b < 62) quad[i] = (char)(b - 52) + '0'; else if (b == 62) quad[i] = '+'; else quad[i] = '/'; } /* now output 'quad' with appropriate whitespace and line ending */ appendsOFile(fp, (numQuads == 0 ? " " : "")); appendsOFile(fp, quad); appendsOFile(fp, ((cur >= len)?"\n" :(numQuads==MAXQUADS-1?"\n" : ""))); numQuads = (numQuads + 1) % MAXQUADS; } appendcOFile(fp,'\n'); return 1; } static void writeString(OFile *fp, const char *s) { appendsOFile(fp,s); } static void writeQPString(OFile *fp, const char *s) { char buf[4]; int count=0; const char *p = s; while (*p) { /* break up lines biggger than 75 chars */ if(count >=74){ count=0; appendsOFile(fp,"=\n"); } /* escape any non ASCII characters and '=' as per rfc1521 */ if (*p<= 0x1f || *p >=0x7f || *p == '=' ) { snprintf(buf,sizeof(buf),"=%02X",(unsigned char)*p); appendsOFile(fp,buf); count+=3; } else { appendcOFile(fp,*p); count++; } p++; } } static void writeVObject_(OFile *fp, VObject *o); static void writeValue(OFile *fp, VObject *o, unsigned long size,int quote) { if (o == 0) return; switch (VALUE_TYPE(o)) { case VCVT_USTRINGZ: { char *s = fakeCString(USTRINGZ_VALUE_OF(o)); if(quote) writeQPString(fp, s); else writeString(fp,s); deleteStr(s); break; } case VCVT_STRINGZ: { if(quote) writeQPString(fp, STRINGZ_VALUE_OF(o)); else writeString(fp,STRINGZ_VALUE_OF(o)); break; } case VCVT_UINT: { char buf[16]; snprintf(buf,sizeof(buf),"%u", INTEGER_VALUE_OF(o)); appendsOFile(fp,buf); break; } case VCVT_ULONG: { char buf[16]; snprintf(buf,sizeof(buf),"%lu", LONG_VALUE_OF(o)); appendsOFile(fp,buf); break; } case VCVT_RAW: { appendcOFile(fp,'\n'); writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size); break; } case VCVT_VOBJECT: appendcOFile(fp,'\n'); writeVObject_(fp,VOBJECT_VALUE_OF(o)); break; } } static void writeAttrValue(OFile *fp, VObject *o) { if (NAME_OF(o)) { const struct PreDefProp *pi; pi = lookupPropInfo(NAME_OF(o)); if (pi && ((pi->flags & PD_INTERNAL) != 0)) return; appendcOFile(fp,';'); appendsOFile(fp,NAME_OF(o)); } else appendcOFile(fp,';'); if (VALUE_TYPE(o)) { appendcOFile(fp,'='); writeValue(fp,o,0,0); } } static void writeGroup(OFile *fp, VObject *o) { char buf1[256]; char buf2[256]; strncpy(buf1,NAME_OF(o),sizeof(buf1)-1); buf1[sizeof(buf1)-1]='\0'; while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) { strncpy(buf2,STRINGZ_VALUE_OF(o),sizeof(buf2)-1); buf2[sizeof(buf2)-1] = '\0'; strncat(buf2,".",sizeof(buf2)-strlen(buf2)-1); strncat(buf2,buf1,sizeof(buf2)-strlen(buf2)-1); strcpy(buf1,buf2); } appendsOFile(fp,buf1); } static int inList(const char **list, const char *s) { if (list == 0) return 0; while (*list) { if (stricmp(*list,s) == 0) return 1; list++; } return 0; } static void writeProp(OFile *fp, VObject *o) { int isQuoted=0; if (NAME_OF(o)) { const struct PreDefProp *pi; VObjectIterator t; const char **fields_ = 0; pi = lookupPropInfo(NAME_OF(o)); if (pi && ((pi->flags & PD_BEGIN) != 0)) { writeVObject_(fp,o); return; } if (isAPropertyOf(o,VCGroupingProp)) writeGroup(fp,o); else appendsOFile(fp,NAME_OF(o)); if (pi) fields_ = pi->fields; initPropIterator(&t,o); while (moreIteration(&t)) { const char *s; VObject *eachProp = nextVObject(&t); s = NAME_OF(eachProp); if (stricmp(VCGroupingProp,s) && !inList(fields_,s)) writeAttrValue(fp,eachProp); if (stricmp(VCQPProp,s)==0 || stricmp(VCQuotedPrintableProp,s)==0) isQuoted=1; } if (fields_) { int i = 0, n = 0; const char** fields = fields_; /* output prop as fields */ appendcOFile(fp,':'); while (*fields) { VObject *t = isAPropertyOf(o,*fields); i++; if (t) n = i; fields++; } fields = fields_; for (i=0;iflags & PD_BEGIN) != 0)) { VObjectIterator t; const char *begin = NAME_OF(o); appendsOFile(fp,"BEGIN:"); appendsOFile(fp,begin); appendcOFile(fp,'\n'); initPropIterator(&t,o); while (moreIteration(&t)) { VObject *eachProp = nextVObject(&t); writeProp(fp, eachProp); } appendsOFile(fp,"END:"); appendsOFile(fp,begin); appendsOFile(fp,"\n\n"); } } } void writeVObject(FILE *fp, VObject *o) { OFile ofp; initOFile(&ofp,fp); writeVObject_(&ofp,o); } DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o) { FILE *fp = fopen(fname,"w"); if (fp) { writeVObject(fp,o); fclose(fp); } } DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list) { FILE *fp = fopen(fname,"w"); if (fp) { while (list) { writeVObject(fp,list); list = nextVObjectInList(list); } fclose(fp); } } DLLEXPORT(char*) writeMemVObject(char *s, int *len, VObject *o) { OFile ofp; initMemOFile(&ofp,s,len?*len:0); writeVObject_(&ofp,o); if (len) *len = ofp.len; appendcOFile(&ofp,0); return ofp.s; } DLLEXPORT(char*) writeMemVObjects(char *s, int *len, VObject *list) { OFile ofp; initMemOFile(&ofp,s,len?*len:0); while (list) { writeVObject_(&ofp,list); list = nextVObjectInList(list); } if (len) *len = ofp.len; appendcOFile(&ofp,0); return ofp.s; } /*---------------------------------------------------------------------- APIs to do fake Unicode stuff. ----------------------------------------------------------------------*/ DLLEXPORT(wchar_t*) fakeUnicode(const char *ps, size_t *bytes) { wchar_t *r, *pw; size_t len = strlen(ps)+1; pw = r = (wchar_t*)malloc(sizeof(wchar_t)*len); if (bytes) *bytes = len * sizeof(wchar_t); while (*ps) { if (*ps == '\n') *pw = (wchar_t)0x2028; else if (*ps == '\r') *pw = (wchar_t)0x2029; else *pw = (wchar_t)(unsigned char)*ps; ps++; pw++; } *pw = (wchar_t)0; return r; } DLLEXPORT(int) uStrLen(const wchar_t *u) { int i = 0; while (*u != (wchar_t)0) { u++; i++; } return i; } DLLEXPORT(char*) fakeCString(const wchar_t *u) { char *s, *t; int len = uStrLen(u) + 1; t = s = (char*)malloc(len); while (*u) { if (*u == (wchar_t)0x2028) *t = '\n'; else if (*u == (wchar_t)0x2029) *t = '\r'; else *t = (char)*u; u++; t++; } *t = 0; return s; } /* end of source file vobject.c */ libical-1.0/src/libicalvcal/Makefile.in0000664000076400007640000005242512141277614017051 0ustar allenallen# Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @OS_WIN32_TRUE@am__append_1 = -no-undefined subdir = src/libicalvcal DIST_COMMON = $(libicalvcalinclude_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/ylwrap vcc.c ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(libicalvcalincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libicalvcal_la_DEPENDENCIES = $(top_builddir)/src/libical/libical.la am__libicalvcal_la_SOURCES_DIST = icalvcal.h icalvcal.c port.h vcc.h \ vobject.h vobject.c vcaltmp.h vcaltmp.c vcc.c vcc.y @DEV_FALSE@am__objects_1 = vcc.lo @DEV_TRUE@am__objects_1 = vcc.lo am_libicalvcal_la_OBJECTS = icalvcal.lo vobject.lo vcaltmp.lo \ $(am__objects_1) libicalvcal_la_OBJECTS = $(am_libicalvcal_la_OBJECTS) libicalvcal_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libicalvcal_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ @MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ || am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) YLWRAP = $(top_srcdir)/ylwrap SOURCES = $(libicalvcal_la_SOURCES) DIST_SOURCES = $(am__libicalvcal_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(libicalvcalinclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BDB_DIR = @BDB_DIR@ BDB_DIR_INCLUDE = @BDB_DIR_INCLUDE@ BDB_DIR_LIB = @BDB_DIR_LIB@ BDB_LIB = @BDB_LIB@ BDB_VERSION = @BDB_VERSION@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ JAVAH = @JAVAH@ JAVA_PLATFORM = @JAVA_PLATFORM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ PY_CFLAGS = @PY_CFLAGS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ ZONE_INFO = @ZONE_INFO@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ swig_val = @swig_val@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_YFLAGS = -l AM_LFLAGS = -L -R lib_LTLIBRARIES = libicalvcal.la INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/src/libical \ -I$(top_srcdir)/src/libicalss libicalvcal_la_LDFLAGS = -version-info 48:0:48 $(am__append_1) libicalvcal_la_LIBADD = $(top_builddir)/src/libical/libical.la @DEV_FALSE@libicalvcal_la_DEVSOURCES = vcc.c @DEV_TRUE@libicalvcal_la_DEVSOURCES = vcc.y libicalvcal_la_SOURCES = \ icalvcal.h \ icalvcal.c \ port.h \ vcc.h \ vobject.h \ vobject.c \ vcaltmp.h \ vcaltmp.c \ $(libicalvcal_la_DEVSOURCES) libicalvcalincludedir = $(includedir)/libical libicalvcalinclude_HEADERS = \ icalvcal.h \ port.h \ vcc.h \ vobject.h \ vcaltmp.h EXTRA_DIST = \ README.TXT \ vcaltest.c \ vctest.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj .y $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libicalvcal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libicalvcal/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libicalvcal.la: $(libicalvcal_la_OBJECTS) $(libicalvcal_la_DEPENDENCIES) $(EXTRA_libicalvcal_la_DEPENDENCIES) $(libicalvcal_la_LINK) -rpath $(libdir) $(libicalvcal_la_OBJECTS) $(libicalvcal_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icalvcal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcaltmp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vobject.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .y.c: $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libicalvcalincludeHEADERS: $(libicalvcalinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libicalvcalinclude_HEADERS)'; test -n "$(libicalvcalincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libicalvcalincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libicalvcalincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libicalvcalincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libicalvcalincludedir)" || exit $$?; \ done uninstall-libicalvcalincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libicalvcalinclude_HEADERS)'; test -n "$(libicalvcalincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libicalvcalincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libicalvcalincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f vcc.c clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libicalvcalincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES \ uninstall-libicalvcalincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-libicalvcalincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-libLTLIBRARIES \ uninstall-libicalvcalincludeHEADERS distclean: clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libical-1.0/src/libicalvcal/README.TXT0000664000076400007640000010126312132563133016327 0ustar allenallenNOTE: If you used the earlier APIs released by Versit then you will want to look at the document "migrate.doc" included with this package. It contains a discussion of the differences between the old API and this one. ---------------------------------------------------------------- The vCard/vCalendar C interface is implemented in the set of files as follows: vcc.y, yacc source, and vcc.c, the yacc output you will use implements the core parser vobject.c implements an API that insulates the caller from the parser and changes in the vCard/vCalendar BNF port.h defines compilation environment dependent stuff vcc.h and vobject.h are header files for their .c counterparts vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions which you may find useful. test.c is a standalone test driver that exercises some of the features of the APIs provided. Invoke test.exe on a VCARD/VCALENDAR input text file and you will see the pretty print output of the internal representation (this pretty print output should give you a good idea of how the internal representation looks like -- there is one such output in the following too). Also, a file with the .out suffix is generated to show that the internal representation can be written back in the original text format. ----------------------------------------------------------------- VObject for VCard/VCalendar Table of Contents ================= 1. VObject 2. Internal Representations of VCard/VCalendar 3. Iterating Through VObject's Properties or Values 4. Pretty Printing a VObject Tree 5. Building A VObject Representation of A VCard/VCalendar 6. Converting A VObject Representation Into Its Textual Representation 7. Miscellaneous Notes On VObject APIs usages 8. Brief descriptions of each APIs 9. Additional Programming Notes. This document is mainly about the VObject and its APIs. The main use of a VObject is to represent a VCard or a VCalendar inside a program. However, its use is not limited to aforemention as it can represent an arbitrary information that makes up of a tree or forest of properties/values. 1. VObject ======= A VObject can have a name (id) and a list of associated properties and a value. Each property is itself a VObject. 2. Internal Representations of VCard/VCalendar =========================================== A list of VCard or a VCalendar is represented by a list of VObjects. The name (id) of the VObjects in the list is either VCCardProp or VCCalProp. Each of these VObjects can have a list of properties. Since a property is represented as a VObject, each of these properties can have a name, a list of properties, and a value. For example, the input file "vobject.vcf": BEGIN:VCARD N:Alden;Roland FN:Roland H. Alden ORG:AT&T;Versit Project Office TITLE:Consultant EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com EMAIL;INTERNET:ralden@sfgate.com EMAIL;MCIMail:242-2200 LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= Suite 2208=0A= One Pine Street=0A= San Francisco, CA 94111 LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= Suite 2208=0A= One Pine Street=0A= San Francisco, CA 94111=0A= U.S.A. TEL;WORK;PREF;MSG:+1 415 296 9106 TEL;WORK;FAX:+1 415 296 9016 TEL;MSG;CELL:+1 415 608 5981 ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. SOUND:ROW-LAND H ALL-DIN LOGO;GIF;BASE64: R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC QjExMSEhIRAQEO///87v9973/73n95zW71K13jGl1nvG50Kt3iGc1gCMzq3e94zO 7xCU1nO952O15wAAACwAAAAApgBOAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv /8CgcEj8QTaeywWTyWCUno2kSK0KI5tLc8vtNi+WiHVMlj0mFK96nalsxOW4fPSw cNj4tQc+7xcjGh4WExJTJYUTFkp3eU0eEH6RkpOUlTARhRoWm5ydFpCWoS0QEqAu ARKaHRcVjV0borEoFl0cSre4Sq67FA+yvwAeTU8XHZ7HmxS6u2wVfMCVpAE3pJoW ylrMptDcOqSF4OHg3eQ5pInInb7lcc86mNbLzBXsZbRfUOn6ucyNHvVWJHCpQFDf MWwEEzLqx2YCQCqF3OnItClJNmYcJD7cSAKTuI/gtnEcOQKkyVIk6/+ds5CkFcMM 61LiENikwi1jBnNyuvUSjwWZOS5uIZarqNFcNl32XMMB6I06GgoJ+bZp1ZKeDl8E +MC1K1cBIhZ4HUu2LAsCZdOWRQDt20lxIlccSHsgrNq7Xc/ixcsWmNu34WKyYJCW gQjCe9XqTZy2L4pv04gg2sSKSc8OLgTcBSuWsdkVaD2TdXyiQxebFyjo1Gnx6tJm LuaqrdtZtNfFtruSNmF5IKujwIsmJbjwtRqNJhrcNVw79wcRAgogmE4ArIjQzj/s JvHAGCFDQR4UqigPK4sBe62XwO51OwADiMcqUG+iOdcFAL+hW20BfAoEexlwAnu6 mZDAXQ1EVh//WfhxJB5gIbHgwFgOTOiVAgOuVQKAfKFg3weGwSBYFZMp4hpDGKyA 3lgJKECWgiMQyBVpW+0V4oJjNfhCNkR1IgWEb21QlRK9GdfFCgeOZYBsXgm4noYj GEBhAQHYh0J8XenoQnFGdrkUciJY6FUAK15ogozakcBhliKsyZWHDMZQ0wWC/Aim DB6h01KRr/lXQgFxAqDcWDACgCZpUnrVQJtjwTnWjS6MWAYqqfDnSaEkJOlVXQBo 2pWTMUJ53WgAuPncCR9q6VQMAYjZlXWJmknCoSUM2p4BC+SaKwG88hoZlvfFMM4f hQh5TXkv+RklWYtC91mopJIAKFkJlDAW/wF25ShnLbeo5gmQ+1FGkJdrKCuCi2OR BuwHBcwqKgABrMtVAgpem61XkLbAJ7n8uiIpvGVhO4KpH1QLbbpqLheZvQCkGoNL thSzSTg2UGVBBzbtaxwKsYrmgLvRAlCmWgwMAADD66rKAgR3XlGspcdkZYK8ibU7 asgEl+XAyB8I7PCqMWiWncGGimpfAgO4ypXSPpOVLwsRCDJxRD2AoyeRRv5kApO5 fXwzwvfOKLKtaTWtbQxccmGLTZy8xYlVSvXbhbk0M2YzrYfJJ0K8m+V9NgxpyC04 UycI/aiuiH9Y8NftDUwWp1Wm5UABnAUKwwRsPFGBt4Oc9PZvGvNLwf8JOZt8Arpe eY23yDovwIDiBX74NAsPVLDJj3Hh4JEExsKcjrlKf9DsCVx3ZfLqAKBuG1s/A90C z2KjYHjjyPOdG1spz6BBUr+BcUxUb1nDCTa/VZD2Uv+YkLPAKJC9dNEh7628WgqI ybzlaA+ufxMa6bxC6ciLUQLcx5UGIAAsAkDA6wQkOxrcY39yo4cQMNWCAPTKV1R4 wPkgaBxzOc8FtMiF1NoGoXBRJjgoPApmPsjCFlbMdzCM4TFy50IXxI2DPcHAv2rY gghsEIeu8CAPW6ABIPYEFkOsAeaMyIz0JfGJUExBBGRIRX0IMYovWCIT1eBELNpA i1vcgta8iANPCIQOghzQABl30J0tXqBla4wjFLFQxZzAUY42CIAd5OYBCuKxB2c4 I0b28EcrQKADgmSKB9RYyDhA4BqCxIBqrtjIMTwoFeCjYSU3KZMQAAA7 BEGIN:VCALENDAR DCREATED:19960523T100522 PRODID:-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN VERSION:0.3 BEGIN:VEVENT START:19960523T120000 END:19960523T130000 SUBTYPE:PHONE CALL SUMMARY:VERSIT PDI PR Teleconference/Interview DESCRIPTION:VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland END:VEVENT BEGIN:VEVENT START:19960523T113000 END:19960523T115500 SUBTYPE:LUNCH SUMMARY:Eat in the cafeteria today END:VEVENT END:VCALENDAR END:VCARD will conceptually be be represented as vcard VCNameProp VCFamilyNameProp=Alden VCGivenNameProp=Roland VCFullNameProp=Roland H.Alden .... note that EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com will be represented as: VCEmailAddress=sf!rincon!ralden@alden.attmail.com VCWork VCPreferred VCInternet where the lower level properties are properties of the property VCEmailAddress. Groupings are flattened out in the VObject representation such that: a.b:blah a.c:blahblah are represented as: b=blah VCGrouping=a c=blahblah VCGrouping=a i.e. one can read the above as: the property "b" has value "blah" and property "VCGrouping" with the value "a". the property "c" has value "blahblah" and property "VCGrouping" with the value "a". likewise, multi-level groupings are flatten similarly. e.g. a.b.c:blah a.b.e:blahblah --> c=blah VCGrouping=b VCGrouping=a e=blahblah VCGrouping=b VCGrouping=a which read: the property "c" has value "blah" and property "VCGrouping" with the value "b" which has property "VCGrouping" with value "a". the property "e" has value "blahblah" and property "VCGrouping" with the value "b" which has property "VCGrouping" with value "a". 3. Iterating Through VObject's Properties or Values ================================================ The following is a skeletal form of iterating through all properties of a vobject, o: // assume the object of interest, o, is of type VObject VObjectIterator i; initPropIterator(&i,o); while (moreIteration(&i)) { VObject *each = nextVObject(&i); // ... do something with "each" property } Use the API vObjectName() to access a VObject's name. Use the API vObjectValueType() to determine if a VObject has a value. For VCard/VCalendar application, you should not need this function as practically all values are either of type VCVT_USTRINGZ or VCVT_RAW (i.e set by setVObjectUStringZValue and setVObjectAnyValue APIs respectively), and the value returned by calls to vObjectUStringZValue and vObjectAnyValue are 0 if a VObject has no value. (There is a minor exception where VObject with VCDataSizeProp has value that is set by setVObjectLongValue). Use the APIs vObject???Value() to access a VObject's value. where ??? is the expected type. Use the APIs setvObject???Value() to set or modify a VObject's value. where ??? is the expected type. Use the API isAPropertyOf() to query if a name match the name of a property of a VObject. Since isAPropertyOf() return the matching property, we can use that to retrieve a property and subsequently the value of the property. 4. Pretty Printing a VObject Tree ============================== VObject tree can be pretty printed with the printVObject() function. The output of pretty printing a VObject representation of the input test file "vobject.vcf" is shown below. Note that the indentation indicates the tree hirerarchy where the immediate children nodes of a parent node is all at the same indentation level and the immediate children nodes are the immediate properties of the associated parent nodes. In the following, {N,FN,ORG,TITLE,...} are immediate properties of VCARD. {F and G} are properties of N with value {"Alden" and "Roland"} respectively; FN has no property but has the value "Roland H. Alden"; EMAIL has value and the properties WORK, PREF, and INTERNET. VCARD N F="Alden" G="Roland" FN="Roland H. Alden" ORG ORGNAME="AT&T" OUN="Versit Project Office" TITLE="Consultant" EMAIL="sf!rincon!ralden@alden.attmail.com" WORK PREF INTERNET EMAIL="ralden@sfgate.com" INTERNET EMAIL="242-2200" MCIMail LABEL="Roland H. Alden Suite 2208 One Pine Street San Francisco, CA 94111" DOM POSTAL PARCEL HOME WORK QP LABEL="Roland H. Alden Suite 2208 One Pine Street San Francisco, CA 94111 U.S.A." POSTAL PARCEL HOME WORK QP TEL="+1 415 296 9106" WORK PREF MSG TEL="+1 415 296 9016" WORK FAX TEL="+1 415 608 5981" MSG CELL ADR EXT ADD="Suite 2208" STREET="One Pine Street" L="San Francisco" R="CA" PC="94111" C="U.S.A." SOUND="ROW-LAND H ALL-DIN" LOGO=[raw data] GIF BASE64 DataSize=1482 VCALENDAR DCREATED="19960523T100522" PRODID="-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN" VERSION="0.3" VEVENT START="19960523T120000" END="19960523T130000" SUBTYPE="PHONE CALL" SUMMARY="VERSIT PDI PR Teleconference/Interview" DESCRIPTION="VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland" VEVENT START="19960523T113000" END="19960523T115500" SUBTYPE="LUNCH" SUMMARY="Eat in the cafeteria today" 5. Building A VObject Representation of A VCard/VCalendar ====================================================== The parser in vcc.y converts an input file with one or more VCard/VCalendar that is in their textual representation into their corresponding VObject representation. VObject representation of a VCard/VCalendar can also be built directly with calls to the VObject building APIs. e.g. VObject *prop; VObject *vcard = newVObject(VCCardProp); prop = addProp(vcard,VCNameProp); addPropValue(prop,VCFamilyNameProp,"Alden"); addPropValue(prop,VCGivenNameProp,"Roland"); addPropValue(vcard,VCFullNameProp,"Roland H. Alden"); .... 6. Converting A VObject Representation Into Its Textual Representation =================================================================== The VObject representation can be converted back to its textual representation via the call to writeVObject() or writeMemVObject() API. e.g. a. to write to a file: // assume vcard is of type VObject FILE *fp = fopen("alden.vcf","w"); writeVObject(fp,vcard); a. to write to memory, and let the API allocate the required memory. char* clipboard = writeVObject(0,0,vcard); ... do something to clipboard free(clipboard); b. to write to a user allocated buffer: char clipboard[16384]; int len = 16384; char *buf = writeVObject(clipboard,&len,vcard); ... buf will be equal to clipboard if the write is successful otherwise 0. In the case of writing to memory, the memory buffer can be either allocated by the API or the user. If the user allocate the memory for the buffer, then the length of the buffer needs to be communicated to the API via a variable. The variable passed as the length argument will be overwritten with the actual size of the text output. A 0 return value from writeMemVObject() indicates an error which could be caused by overflowing the size of the buffer or lack of heap memory. 7. Miscellaneous Notes On VObject APIs usages ========================================== a. vcc.h -- contains basic interfaces to the parser: VObject* Parse_MIME(const char *input, unsigned long len); VObject* Parse_MIME_FromFile(FILE *file); -- both of this return a null-terminated list of VObject that is either a VCARD or VCALENDAR. To iterate through this list, do VObject *t, *v; v = Parse_Mime_FromFile(fp); while (v) { // ... do something to v. t = v; v = nextVObjectInList(v); cleanVObject(t); } note that call to cleanVObject will release resource used to represent the VObject. b. vobject.h -- contains basic interfaces to the VObject APIs. see the header for more details. The structure of VObject is purposely (hiddened) not exposed to the user. Every access has to be done via the APIs. This way, if we need to change the structure or implementation, the client need not recompile as long as the interfaces remain the same. c. values of a property is determined by the property definition itself. The vobject APIs does not attempt to enforce any of such definition. It is the consumer responsibility to know what value is expected from a property. e.g most properties have unicode string value, so to access the value of these type of properties, you will use the vObjectUStringZValue() to read the value and setVObjectUStringZValue() to set or modify the value. Refer to the VCard and VCalendar specifications for the definition of each property. d. properties name (id) are case incensitive. 8. Brief descriptions of each APIs =============================== * the predefined properties' names (id) are listed under vobject.h each is of the form VC*Prop. e.g. #define VC7bitProp "7BIT" #define VCAAlarmProp "AALARM" .... * consumer of a VObject can only define pointers to VObject. * a variable of type VObjectIterator, say "i", can be used to iterate through a VObject's properties, say "o". The APIs related to VObjectIterator are: void initPropIterator(VObjectIterator *i, VObject *o); -- e.g. usage initPropIterator(&i,o); int moreIteration(VObjectIterator *i); -- e.g. usage while (moreIteration(&i)) { ... } VObject* nextVObject(VObjectIterator *i); -- e.g. usage while (moreIteration(&i)) { VObject *each = nextVObject(&i); } * VObject can be chained together to form a list. e.g. of such use is in the parser where the return value of the parser is a link list of VObject. A link list of VObject can be built by: void addList(VObject **o, VObject *p); and iterated by VObject* nextVObjectInList(VObject *o); -- next VObjectInList return 0 if the list is exhausted. * the following APIs are mainly used to construct a VObject tree: VObject* newVObject(const char *id); -- used extensively internally by VObject APIs but when used externally, its use is mainly limited to the construction of top level object (e.g. an object with VCCardProp or VCCalendarProp id). void deleteVObject(VObject *p); -- to deallocate single VObject, for most user, use cleanVObject(VObject *o) instead for freeing all resources associated with the VObject. char* dupStr(const char *s, unsigned int size); -- duplicate a string s. If size is 0, the string is assume to be a null-terminated. void deleteStr(const char *p); -- used to deallocate a string allocated by dupStr(); void setVObjectName(VObject *o, const char* id); -- set the id of VObject o. This function is not normally used by the user. The setting of id is normally done as part of other APIs (e.g. addProp()). void setVObjectStringZValue(VObject *o, const char *s); -- set a string value of a VObject. void setVObjectUStringZValue(VObject *o, const wchar_t *s); -- set a Unicode string value of a VObject. void setVObjectIntegerValue(VObject *o, unsigned int i); -- set an integer value of a VObject. void setVObjectLongValue(VObject *o, unsigned long l); -- set an long integer value of a VObject. void setVObjectAnyValue(VObject *o, void *t); -- set any value of a VObject. The value type is unspecified. VObject* setValueWithSize(VObject *prop, void *val, unsigned int size); -- set a raw data (stream of bytes) value of a VObject whose size is size. The internal VObject representation is this object = val VCDataSizeProp=size i.e. the value val will be attached to the VObject prop and a property of VCDataSize whose value is size is also added to the object. void setVObjectVObjectValue(VObject *o, VObject *p); -- set a VObject as the value of another VObject. const char* vObjectName(VObject *o); -- retrieve the VObject's Name (i.e. id). const char* vObjectStringZValue(VObject *o); -- retrieve the VObject's value interpreted as null-terminated string. const wchar_t* vObjectUStringZValue(VObject *o); -- retrieve the VObject's value interpreted as null-terminated unicode string. unsigned int vObjectIntegerValue(VObject *o); -- retrieve the VObject's value interpreted as integer. unsigned long vObjectLongValue(VObject *o); -- retrieve the VObject's value interpreted as long integer. void* vObjectAnyValue(VObject *o); -- retrieve the VObject's value interpreted as any value. VObject* vObjectVObjectValue(VObject *o); -- retrieve the VObject's value interpreted as a VObject. VObject* addVObjectProp(VObject *o, VObject *p); -- add a VObject p as a property of VObject o. (not normally used externally for building a VObject). VObject* addProp(VObject *o, const char *id); -- add a property whose name is id to VObject o. VObject* addPropValue(VObject *o, const char *id, const char *v); -- add a property whose name is id and whose value is a null-terminated string to VObject o. VObject* addPropSizedValue(VObject *o, const char *id, const char *v, unsigned int size); -- add a property whose name is id and whose value is a stream of bytes of size size, to VObject o. VObject* addGroup(VObject *o, const char *g); -- add a group g to VObject o. e.g. if g is a.b.c, you will have o c VCGroupingProp=b VCGroupingProp=a and the object c is returned. VObject* isAPropertyOf(VObject *o, const char *id); -- query if a property by the name id is in o and return the VObject that represent that property. void printVObject(VObject *o); -- pretty print VObject o to stdout (for debugging use). void writeVObject(FILE *fp, VObject *o); -- convert VObject o to its textual representation and write it to file. char* writeMemVObject(char *s, int *len, VObject *o); -- convert VObject o to its textual representation and write it to memory. If s is 0, then memory required to hold the textual representation will be allocated by this API. If a variable len is passed, len will be overwriten with the byte size of the textual representation. If s is non-zero, then s has to be a user allocated buffer whose size has be passed in len as a variable. Memory allocated by the API has to be freed with call to free. The return value of this API is either the user supplied buffer, the memory allocated by the API, or 0 (in case of failure). void cleanStrTbl(); -- this function has to be called when all VObject has been destroyed. void cleanVObject(VObject *o); -- release all resources used by VObject o. wchar_t* fakeUnicode(const char *ps, int *bytes); -- convert char* to wchar_t*. extern int uStrLen(const wchar_t *u); -- length of unicode u. char *fakeCString(const wchar_t *u); -- convert wchar_t to CString (blindly assumes that this could be done). 9. Additional Programming Notes ============================ In the following notes, please refers to the listing of Example.vcf and its VObject Representation (shown at the end of this section). * Handling the Return Value of the VCard/VCalendar Parser The example input text file contains two root VObjects (a VCalendar and a VCard). The output of the VCard/VCalendar parser is a null-terminated list of VObjects. For this particular input file, the list will have two VObjects. The following shows a template for iterating through the output of the Parser: VObject *t, *v; v = Parse_Mime_fromFileName("example.vcf"); while (v) { // currently, v will either be a VCard or a VCalendar // do whatever your application need to do to // v here ... t = v; v = nextVObjectInList(v); cleanVObject(t); } * Iterating Through a VCard/VCalendar VObject From the VObject APIs point of view, a VCard VObject is the same as a VCalendar VObject. However, the application needs to know what are in a VCard or a VCalendar. For example, A VCalendar VObject can have VCDCreatedProp, a VCGEOLocationProp, etc, and one or more VCEventProp and or VCTodoProp. The VCEventProp and VCTodoProp can have many properties of their own, which in turn could have more properties (e.g. VCDAlarmProp can be a VCEventProp VObject's property, and VCRunTimeProp can be a VCDAlarmProp VObject's property. Because a VObject tree can be arbitrarily complex, in general, to process all properties and values of a VObject tree, a recursive walk is desirable. An example recursive VObject tree walk can be found in the vobject.c source lines for printVObject* and writeVObject* APIs. Depending on what the application need to do with a VCard or a VCalendar, a recursive walk of the VObject tree may or may not be desirable. An example template of a non-recursive walk is shown below: void processVCardVCalendar(char *inputFile) { VObject *t, *v; v = Parse_Mime_fromFileName(inputFile); while (v) { char *n = vObjectName(v); if (strcmp(n,VCCardProp) == 0) { do_VCard(v); } else if (strcmp(n,VCCalendarProp) == 0) { do_VCalendar(v); } else { // don't know how to handle anything else! } t = v; v = nextVObjectInList(v); cleanVObject(t); } } void do_VCard(VObject *vcard) { VObjectIterator t; initPropIterator(&t,vcard); while (moreIteration(&t)) { VObject *eachProp = nextVObject(&t); // The primarly purpose of this example is to // show how to iterate through a VCard VObject, // it is not meant to be efficient at all. char *n = vObjectName(eachProp); if (strcmp(n,VCNameProp)==0) { do_name(eachProp); } else if (strcmp(n,VCEmailProp)==0) { do_email(eachProp); } else if (strcmp(n,VCLabelProp)==0) { do_label(eachProp); } else if .... } } void do_VCalendar(VObject *vcal) { VObjectIterator t; initPropIterator(&t,vcard); while (moreIteration(&t)) { VObject *eachProp = nextVObject(&t); // The primarly purpose of this example is to // show how to iterate through a VCalendar VObject, // it is not meant to be efficient at all. char *n = vObjectName(eachProp); if (strcmp(n,VCDCreatedProp)==0) { do_DCreated(eachProp); } else if (strcmp(n,VCVersionProp)==0) { do_Version(eachProp); } else if (strcmp(n,VCTodoProp)==0) { do_Todo(eachProp); } else if (strcmp(n,VCEventProp)==0) { do_Event(eachProp); } else if .... } } void do_Todo(VObject *vtodo) { ... } void do_Event(VObject *vevent) { ... } ... * Property's Values and Properties The VObject APIs do not attempt to check for the correctness of the values of a property. Nor do they will prevent the user from attaching a non-VCard/VCalendar standard property to a VCard/VCalendar property. Take the example of line [11] of the example, "O.K" is not a valid value of VCStatusProp. It is up to the application to accept or reject the value of a property. * Output of printVObject PrintVObject pretty prints a VObject tree in human readable form. See the listing at the end of the file for an example output of printVObject on the example input file "Example.vcf". Note that binary data are not shown in the output of printVObject. Instead, a note is made ([raw data]) to indicate that there exists such a binary data. * Note on Binary Data When the value of a property is a binary data, it is only useful to know the size of the binary data. In the case of the VCard/VCalendar parser, it chooses to represent the size information as a separate property called VCDataSizeProp whose value is the size of the binary data. The APIs sequence to construct the VObject subtree of line [44] of Example.vcf is // VObject *vcard; VObject *p1 = addProp(vcard,VCLogoProp); (void) addProp(p1,VCGIFProp); (void) addProp(p1,VCBASE64Prop); VObject *p2 = addProp(p1,VCDataSizeProp); (void) setVObjectLongValue(p2,1482); setVObjectAnyValue(vcard,...pointer to binary data); Note the presence of VCBase64Prop will cause the writeVObject API to output the binary data as BASE64 text. For VCard/VCalendar application, having the VCBase64Prop property is practically always necessary for property with binary data as its value. * Note on Quoted-Printable String String value with embedded newline are written out as quoted-prinatable string. It is therefore important to mark a property with a string value that has one or more embedded newlines, with the VCQutedPrintableProp property. e.g. // VObject *root; char *msg="To be\nor\nnot to be"; VObject *p = addPropValue(root,VCDescriptionProp,msg); // the following is how you mark a property with // a property. In this case, the marker is // VCQuotedPrintableProp addProp(p,VCQuotedPrintableProp); * Note on Unicode Although, the current parser takes ASCII text file only, string values are all stored as Unicode in the VObject tree. For now, when using the VObject APIs to construct a VObject tree, one should always convert ASCII string value to a Unicode string value: // VObject *root; VObject *p = addProp(root,VCSomeProp); setVObjectUStringZValue(p,fakeUnicode(someASCIIStringZvalue)); An API is provided to simplify the above process: addPropValue(root,VCSomeProp,someASCIIStringZValue); Note that someASCIISTringZValue is automatically converted to Unicode by addPropValue API, where as, the former code sequence do an explicit call to fakeUnicode. To read back the value, one should use the vObjectUStringZValue API not vObjectStringZValue API. The value returned by the vObjectUStringZValue API is a Unicode string. If the application do not know how to handle Unicode string, it can use the fakeCString API to convert it back to ASCII string (as long as the conversion is meaningful). Note that fakeCString return a heap allocated memory. It is important to call deleteStr on fakeCString return value if it is not longer required (or there will be memory leak). NOTE: Unfortunately, at the point when this document is written, there is still no consensus on how Unicode is to be handled in the textual representation of VCard/VCalendar. So, there is no version of writeVObject and the parser to output and input Unicode textual representation of VCard/VCalendar. Example.vcf ----------- line number Input Text (example.vcf) ------ ---------- 1 BEGIN:VCALENDAR 2 DCREATED:19961102T100522 3 GEO:0,0 4 VERSION:1.0 5 BEGIN:VEVENT 6 DTSTART:19961103T000000 7 DTEND:20000101T000000 8 DESCRIPTION;QUOTED-PRINTABLE:To be =0A= 9 or =0A= 10 not to be 11 STATUS:O.K. 12 X-ACTION:No action required 13 DALARM:19961103T114500;5;3;Enjoy 14 MALARM:19970101T120000;;;johny@nowhere.com;Call Mom. 15 END:VEVENT 16 17 BEGIN:VTODO 18 DUE:19960614T0173000 19 DESCRIPTION:Relex. 20 END:VTODO 21 22 END:VCALENDAR 23 24 BEGIN:VCARD 25 N:Alden;Roland 26 FN:Roland H. Alden 27 ORG:AT&T;Versit Project Office 28 TITLE:Consultant 29 EMAIL;WORK;PREF;INTERNET:ralden@ralden.com 30 LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= 31 Suite 2208=0A= 32 One Pine Street=0A= 33 San Francisco, CA 94111 34 LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= 35 Suite 2208=0A= 36 One Pine Street=0A= 37 San Francisco, CA 94111=0A= 38 U.S.A. 39 TEL;WORK;PREF;MSG:+1 415 296 9106 40 TEL;WORK;FAX:+1 415 296 9016 41 TEL;MSG;CELL:+1 415 608 5981 42 ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. 43 SOUND:ROW-LAND H ALL-DIN 44 LOGO;GIF;BASE64: 45 R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC ... 30 lines of BASE64 data not shown here. 76 END:VCARD VObject Representation of Example.vcf: ------------------------------------- line in text file VObject Tree as Printed by printVObject API ---- ------------------------------------------- 1 VCALENDAR 2 DCREATED="19961102T100522" 3 GEO="0,0" 4 VERSION="1.0" 5 VEVENT 6 DTSTART="19961103T000000" 7 DTEND="20000101T000000" 8 DESCRIPTION="To be 9 or 10 not to be" 8 QUOTED-PRINTABLE 11 STATUS="O.K." 12 X-ACTION="No action required" 13 DALARM 13 RUNTIME="19961103T114500" 13 SNOOZETIME="5" 13 REPEATCOUNT="3" 13 DISPLAYSTRING="Enjoy" 14 MALARM 14 RUNTIME="19970101T120000" 14 EMAIL="johny@nowhere.com" 14 NOTE="Call Mom" 17 VTODO 18 DUE="19960614T0173000" 19 DESCRIPTION="Relex." 24 VCARD 25 N 25 F="Alden" 25 G="Roland" 26 FN="Roland H. Alden" 27 ORG 27 ORGNAME="AT&T" 27 OUN="Versit Project Office" 28 TITLE="Consultant" 29 EMAIL="ralden@alden.com" 29 WORK 29 PREF 29 INTERNET 30 LABEL="Roland H. Alden 31 Suite 2208 32 One Pine Street 33 San Francisco, CA 94111" 30 DOM 30 POSTAL 30 PARCEL 30 HOME 30 WORK 30 QUOTED-PRINTABLE 34 LABEL="Roland H. Alden 35 Suite 2208 36 One Pine Street 37 San Francisco, CA 94111 38 U.S.A." 34 POSTAL 34 PARCEL 34 HOME 34 WORK 34 QUOTED-PRINTABLE 39 TEL="+1 415 296 9106" 39 WORK 39 PREF 39 MSG 40 TEL="+1 415 296 9016" 40 WORK 40 FAX 41 TEL="+1 415 608 5981" 41 MSG 41 CELL 42 ADR 42 EXT ADD="Suite 2208" 42 STREET="One Pine Street" 42 L="San Francisco" 42 R="CA" 42 PC="94111" 42 C="U.S.A." 43 SOUND="ROW-LAND H ALL-DIN" 44 LOGO=[raw data] 44 GIF 44 BASE64 44 DATASIZE=1482 libical-1.0/src/libicalvcal/vcaltmp.h0000664000076400007640000001022212132563133016602 0ustar allenallen/*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ #include "vcc.h" #ifndef __VCALTMP_H__ #define __VCALTMP_H__ #if defined(__CPLUSPLUS__) || defined(__cplusplus) extern "C" { #endif extern DLLEXPORT(VObject*) vcsCreateVCal( char *date_created, char *location, char *product_id, char *time_zone, char *version ); extern DLLEXPORT(VObject*) vcsAddEvent( VObject *vcal, char *start_date_time, char *end_date_time, char *description, char *summary, char *categories, char *classification, char *status, char *transparency, char *uid, char *url ); extern DLLEXPORT(VObject*) vcsAddTodo( VObject *vcal, char *start_date_time, char *due_date_time, char *date_time_complete, char *description, char *summary, char *priority, char *classification, char *status, char *uid, char *url ); extern DLLEXPORT(VObject*) vcsAddAAlarm( VObject *vevent, char *run_time, char *snooze_time, char *repeat_count, char *audio_content ); extern DLLEXPORT(VObject*) vcsAddMAlarm( VObject *vevent, char *run_time, char *snooze_time, char *repeat_count, char *email_address, char *note ); extern DLLEXPORT(VObject*) vcsAddDAlarm( VObject *vevent, char *run_time, char *snooze_time, char *repeat_count, char *display_string ); extern DLLEXPORT(VObject*) vcsAddPAlarm( VObject *vevent, char *run_time, char *snooze_time, char *repeat_count, char *procedure_name ); #if defined(__CPLUSPLUS__) || defined(__cplusplus) } #endif #endif /* __VCALTMP_H__ */ libical-1.0/src/libicalvcal/CMakeLists.txt0000664000076400007640000000315612132563133017533 0ustar allenalleninclude_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/src ${CMAKE_SOURCE_DIR}/src/libicalss ${CMAKE_BINARY_DIR}/src/libicalss ${CMAKE_SOURCE_DIR}/src/libical ${CMAKE_BINARY_DIR}/src/libical ${CMAKE_SOURCE_DIR}/src/libicalvcal ${CMAKE_BINARY_DIR}/src/libicalvcal ) #these are generated sources, but we keep them in the repo set(icalvcal_LIB_DEVSRCS vcc.c) ########### next target ############### set(icalvcal_LIB_SRCS icalvcal.h icalvcal.c port.h vcc.h vobject.h vobject.c vcaltmp.h vcaltmp.c ${icalvcal_LIB_DEVSRCS} ) if(MSVC) list(APPEND icalvcal_LIB_SRCS ../icalvcal.def) endif(MSVC) add_library(icalvcal ${LIBRARY_TYPE} ${icalvcal_LIB_SRCS}) add_library(icalvcal-static STATIC ${icalvcal_LIB_SRCS}) add_dependencies(icalvcal ical-header) add_dependencies(icalvcal-static ical-header) target_link_libraries(icalvcal ical) if(MSVC) set_target_properties(icalvcal PROPERTIES OUTPUT_NAME "libicalvcal") set_target_properties(icalvcal-static PROPERTIES OUTPUT_NAME "libicalvcal-static") else(MSVC) set_target_properties(icalvcal-static PROPERTIES OUTPUT_NAME "icalvcal") endif(MSVC) set_target_properties(icalvcal PROPERTIES VERSION ${LIBICAL_LIB_VERSION_STRING} SOVERSION ${LIBICAL_LIB_MAJOR_VERSION} ) set_target_properties(icalvcal PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(icalvcal-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) install(TARGETS icalvcal icalvcal-static ${INSTALL_TARGETS_DEFAULT_ARGS}) ########### install files ############### install(FILES icalvcal.h port.h vcc.h vobject.h vcaltmp.h DESTINATION ${INCLUDE_INSTALL_DIR}/libical ) libical-1.0/src/libicalvcal/vcc.y0000664000076400007640000006250312132563133015741 0ustar allenallen%{ /*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ /* * src: vcc.c * doc: Parser for vCard and vCalendar. Note that this code is * generated by a yacc parser generator. Generally it should not * be edited by hand. The real source is vcc.y. The #line directives * can be commented out here to make it easier to trace through * in a debugger. However, if a bug is found it should * be fixed in vcc.y and this file regenerated. */ /* debugging utilities */ #if __DEBUG #define DBG_(x) printf x #else #define DBG_(x) #endif #ifdef WIN32 #define snprintf _snprintf #endif #ifdef _MSC_VER #define strcasecmp stricmp #endif /**** External Functions ****/ /* assign local name to parser variables and functions so that we can use more than one yacc based parser. */ #define yyparse mime_parse #define yylex mime_lex #define yyerror mime_error #define yychar mime_char /* #define p_yyval p_mime_val */ #undef yyval #define yyval mime_yyval /* #define p_yylval p_mime_lval */ #undef yylval #define yylval mime_yylval #define yydebug mime_debug #define yynerrs mime_nerrs #define yyerrflag mime_errflag #define yyss mime_ss #define yyssp mime_ssp #define yyvs mime_vs #define yyvsp mime_vsp #define yylhs mime_lhs #define yylen mime_len #define yydefred mime_defred #define yydgoto mime_dgoto #define yysindex mime_sindex #define yyrindex mime_rindex #define yygindex mime_gindex #define yytable mime_table #define yycheck mime_check #define yyname mime_name #define yyrule mime_rule #define YYPREFIX "mime_" #ifndef _NO_LINE_FOLDING #define _SUPPORT_LINE_FOLDING 1 #endif /* undef below if compile with MFC */ /* #define INCLUDEMFC 1 */ #if defined(WIN32) || defined(_WIN32) #ifdef INCLUDEMFC #include #endif #endif #include #include #include #include #include "vcc.h" /**** Types, Constants ****/ #define YYDEBUG 1 /* 1 to compile in some debugging code */ #define MAXTOKEN 256 /* maximum token (line) length */ #define YYSTACKSIZE 50 /* ~unref ? */ #define MAXLEVEL 10 /* max # of nested objects parseable */ /* (includes outermost) */ /**** Global Variables ****/ int mime_lineNum, mime_numErrors; /* yyerror() can use these */ static VObject* vObjList; static VObject *curProp; static VObject *curObj; static VObject* ObjStack[MAXLEVEL]; static int ObjStackTop; /* A helpful utility for the rest of the app. */ #if __CPLUSPLUS__ extern "C" { #endif extern void Parse_Debug(const char *s); static void yyerror(char *s); #if __CPLUSPLUS__ }; #endif int yylex(void); int yyparse(void); enum LexMode { L_NORMAL, L_VCARD, L_VCAL, L_VEVENT, L_VTODO, L_VALUES, L_BASE64, L_QUOTED_PRINTABLE }; /**** Private Forward Declarations ****/ static void lexClearToken(void); static char* lexGet1Value(void); static int lexGeta(void); static int lexGetc(void); static char lexGetc_(void); static char* lexGetDataFromBase64(void); static char* lexGetQuotedPrintable(void); static char* lexGetWord(void); static int lexLookahead(void); static char* lexLookaheadWord(void); static void lexPopMode(int top); static void lexPushMode(enum LexMode mode); static void lexSkipLookahead(void); static void lexSkipLookaheadWord(void); static void lexSkipWhite(void); static char* lexStr(void); static int lexWithinMode(enum LexMode mode); static void enterAttr(const char *s1, const char *s2); static void enterProps(const char *s); static void enterValues(const char *value); static void finiLex(void); static void mime_error_(char *s); static VObject* Parse_MIMEHelper(void); static VObject* popVObject(void); static int pushVObject(const char *prop); %} /***************************************************************************/ /*** The grammar ****/ /***************************************************************************/ %union { char *str; VObject *vobj; } %token EQ COLON DOT SEMICOLON SPACE HTAB LINESEP NEWLINE BEGIN_VCARD END_VCARD BEGIN_VCAL END_VCAL BEGIN_VEVENT END_VEVENT BEGIN_VTODO END_VTODO ID /* * NEWLINE is the token that would occur outside a vCard, * while LINESEP is the token that would occur inside a vCard. */ %token STRING ID %type name value %type vcard vcal vobject %start mime %% mime: vobjects ; vobjects: vobject { addList(&vObjList, $1); curObj = 0; } vobjects | vobject { addList(&vObjList, $1); curObj = 0; } ; vobject: vcard | vcal ; vcard: BEGIN_VCARD { lexPushMode(L_VCARD); if (!pushVObject(VCCardProp)) YYERROR; } items END_VCARD { lexPopMode(0); $$ = popVObject(); } | BEGIN_VCARD { lexPushMode(L_VCARD); if (!pushVObject(VCCardProp)) YYERROR; } END_VCARD { lexPopMode(0); $$ = popVObject(); } ; items: item items | item ; item: prop COLON { lexPushMode(L_VALUES); } values LINESEP { if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE)) lexPopMode(0); lexPopMode(0); } | error ; prop: name { enterProps($1); } attr_params | name { enterProps($1); } ; attr_params: attr_param attr_params | attr_param ; attr_param: SEMICOLON attr ; attr: name { enterAttr($1,0); } | name EQ name { enterAttr($1,$3); } ; name: ID ; values: value SEMICOLON { enterValues($1); } values | value { enterValues($1); } ; value: STRING | { $$ = 0; } ; vcal: BEGIN_VCAL { if (!pushVObject(VCCalProp)) YYERROR; } calitems END_VCAL { $$ = popVObject(); } | BEGIN_VCAL { if (!pushVObject(VCCalProp)) YYERROR; } END_VCAL { $$ = popVObject(); } ; calitems: calitem calitems | calitem ; calitem: eventitem | todoitem | items ; eventitem: BEGIN_VEVENT { lexPushMode(L_VEVENT); if (!pushVObject(VCEventProp)) YYERROR; } items END_VEVENT { lexPopMode(0); popVObject(); } | BEGIN_VEVENT { lexPushMode(L_VEVENT); if (!pushVObject(VCEventProp)) YYERROR; } END_VEVENT { lexPopMode(0); popVObject(); } ; todoitem: BEGIN_VTODO { lexPushMode(L_VTODO); if (!pushVObject(VCTodoProp)) YYERROR; } items END_VTODO { lexPopMode(0); popVObject(); } | BEGIN_VTODO { lexPushMode(L_VTODO); if (!pushVObject(VCTodoProp)) YYERROR; } END_VTODO { lexPopMode(0); popVObject(); } ; %% static int pushVObject(const char *prop) { VObject *newObj; if (ObjStackTop == MAXLEVEL) return FALSE; ObjStack[++ObjStackTop] = curObj; if (curObj) { newObj = addProp(curObj,prop); curObj = newObj; } else curObj = newVObject(prop); return TRUE; } /* This pops the recently built vCard off the stack and returns it. */ static VObject* popVObject() { VObject *oldObj; if (ObjStackTop < 0) { yyerror("pop on empty Object Stack\n"); return 0; } oldObj = curObj; curObj = ObjStack[ObjStackTop--]; return oldObj; } static void enterValues(const char *value) { if (fieldedProp && *fieldedProp) { if (value) { addPropValue(curProp,*fieldedProp,value); } /* else this field is empty, advance to next field */ fieldedProp++; } else { if (value) { char *p1, *p2; wchar_t *p3; int i; /* If the property already has a string value, we append this one, using ';' to separate the values. */ if (vObjectUStringZValue(curProp)) { p1 = fakeCString(vObjectUStringZValue(curProp)); i = strlen(p1)+strlen(value)+2; p2 = malloc(i); snprintf(p2,i,"%s;%s",p1,value); deleteStr(p1); p3 = (wchar_t *) vObjectUStringZValue(curProp); free(p3); setVObjectUStringZValue_(curProp,fakeUnicode(p2,0)); deleteStr(p2); } else { setVObjectUStringZValue_(curProp,fakeUnicode(value,0)); } } } deleteStr(value); } static void enterProps(const char *s) { curProp = addGroup(curObj,s); deleteStr(s); } static void enterAttr(const char *s1, const char *s2) { const char *p1, *p2 = NULL; p1 = lookupProp_(s1); if (s2) { VObject *a; p2 = lookupProp_(s2); a = addProp(curProp,p1); setVObjectStringZValue(a,p2); } else addProp(curProp,p1); if (stricmp(p1,VCBase64Prop) == 0 || (s2 && stricmp(p2,VCBase64Prop)==0)) lexPushMode(L_BASE64); else if (stricmp(p1,VCQuotedPrintableProp) == 0 || (s2 && stricmp(p2,VCQuotedPrintableProp)==0)) lexPushMode(L_QUOTED_PRINTABLE); deleteStr(s1); deleteStr(s2); } #define MAX_LEX_LOOKAHEAD_0 32 #define MAX_LEX_LOOKAHEAD 64 #define MAX_LEX_MODE_STACK_SIZE 10 #define LEXMODE() (lexBuf.lexModeStack[lexBuf.lexModeStackTop]) struct LexBuf { /* input */ #ifdef INCLUDEMFC CFile *inputFile; #else FILE *inputFile; #endif char *inputString; unsigned long curPos; unsigned long inputLen; /* lookahead buffer */ /* -- lookahead buffer is short instead of char so that EOF / can be represented correctly. */ unsigned long len; short buf[MAX_LEX_LOOKAHEAD]; unsigned long getPtr; /* context stack */ unsigned long lexModeStackTop; enum LexMode lexModeStack[MAX_LEX_MODE_STACK_SIZE]; /* token buffer */ unsigned long maxToken; char *strs; unsigned long strsLen; } lexBuf; static void lexPushMode(enum LexMode mode) { if (lexBuf.lexModeStackTop == (MAX_LEX_MODE_STACK_SIZE-1)) yyerror("lexical context stack overflow"); else { lexBuf.lexModeStack[++lexBuf.lexModeStackTop] = mode; } } static void lexPopMode(int top) { /* special case of pop for ease of error recovery -- this version will never underflow */ if (top) lexBuf.lexModeStackTop = 0; else if (lexBuf.lexModeStackTop > 0) lexBuf.lexModeStackTop--; } static int lexWithinMode(enum LexMode mode) { unsigned long i; for (i=0;iRead(&result, 1) == 1 ? result : EOF; #else return fgetc(lexBuf.inputFile); #endif } } static int lexGeta() { ++lexBuf.len; return (lexBuf.buf[lexBuf.getPtr] = lexGetc_()); } static int lexGeta_(int i) { ++lexBuf.len; return (lexBuf.buf[(lexBuf.getPtr+i)%MAX_LEX_LOOKAHEAD] = lexGetc_()); } static void lexSkipLookahead() { if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { /* don't skip EOF. */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; } } static int lexLookahead() { int c = (lexBuf.len)? lexBuf.buf[lexBuf.getPtr]: lexGeta(); /* do the \r\n -> \n or \r -> \n translation here */ if (c == '\r') { int a = (lexBuf.len>1)? lexBuf.buf[(lexBuf.getPtr+1)%MAX_LEX_LOOKAHEAD]: lexGeta_(1); if (a == '\n') { lexSkipLookahead(); } lexBuf.buf[lexBuf.getPtr] = c = '\n'; } else if (c == '\n') { int a = (lexBuf.len>1)? lexBuf.buf[lexBuf.getPtr+1]: lexGeta_(1); if (a == '\r') { lexSkipLookahead(); } lexBuf.buf[lexBuf.getPtr] = '\n'; } return c; } static int lexGetc() { int c = lexLookahead(); if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { /* EOF will remain in lookahead buffer */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; } return c; } static void lexSkipLookaheadWord() { if (lexBuf.strsLen <= lexBuf.len) { lexBuf.len -= lexBuf.strsLen; lexBuf.getPtr = (lexBuf.getPtr + lexBuf.strsLen) % MAX_LEX_LOOKAHEAD; } } static void lexClearToken() { lexBuf.strsLen = 0; } static void lexAppendc(int c) { lexBuf.strs[lexBuf.strsLen] = c; /* append up to zero termination */ if (c == 0) return; lexBuf.strsLen++; if (lexBuf.strsLen >= lexBuf.maxToken) { /* double the token string size */ lexBuf.maxToken <<= 1; lexBuf.strs = (char*) realloc(lexBuf.strs,(size_t)lexBuf.maxToken); } } static char* lexStr() { return dupStr(lexBuf.strs,(size_t)lexBuf.strsLen+1); } static void lexSkipWhite() { int c = lexLookahead(); while (c == ' ' || c == '\t') { lexSkipLookahead(); c = lexLookahead(); } } static char* lexGetWord() { int c; lexSkipWhite(); lexClearToken(); c = lexLookahead(); while (c != EOF && !strchr("\t\n ;:=",c)) { lexAppendc(c); lexSkipLookahead(); c = lexLookahead(); } lexAppendc(0); return lexStr(); } static void lexPushLookaheadc(int c) { int putptr; /* can't putback EOF, because it never leaves lookahead buffer */ if (c == EOF) return; putptr = (int)lexBuf.getPtr - 1; if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; lexBuf.getPtr = putptr; lexBuf.buf[putptr] = c; lexBuf.len += 1; } static char* lexLookaheadWord() { /* this function can lookahead word with max size of MAX_LEX_LOOKAHEAD_0 / and thing bigger than that will stop the lookahead and return 0; / leading white spaces are not recoverable. */ int c; int len = 0; int curgetptr = 0; lexSkipWhite(); lexClearToken(); curgetptr = (int)lexBuf.getPtr; /* remember! */ while (len < (MAX_LEX_LOOKAHEAD_0)) { c = lexGetc(); len++; if (c == EOF || strchr("\t\n ;:=", c)) { lexAppendc(0); /* restore lookahead buf. */ lexBuf.len += len; lexBuf.getPtr = curgetptr; return lexStr(); } else lexAppendc(c); } lexBuf.len += len; /* char that has been moved to lookahead buffer */ lexBuf.getPtr = curgetptr; return 0; } #ifdef _SUPPORT_LINE_FOLDING static void handleMoreRFC822LineBreak(int c) { /* suport RFC 822 line break in cases like * ADR: foo; * morefoo; * more foo; */ if (c == ';') { int a; lexSkipLookahead(); /* skip white spaces */ a = lexLookahead(); while (a == ' ' || a == '\t') { lexSkipLookahead(); a = lexLookahead(); } if (a == '\n') { lexSkipLookahead(); a = lexLookahead(); if (a == ' ' || a == '\t') { /* continuation, throw away all the \n and spaces read so * far */ lexSkipWhite(); lexPushLookaheadc(';'); } else { lexPushLookaheadc('\n'); lexPushLookaheadc(';'); } } else { lexPushLookaheadc(';'); } } } static char* lexGet1Value() { int c; lexSkipWhite(); c = lexLookahead(); lexClearToken(); while (c != EOF && c != ';') { if (c == '\n') { int a; lexSkipLookahead(); a = lexLookahead(); if (a == ' ' || a == '\t') { lexAppendc(' '); lexSkipLookahead(); } else { lexPushLookaheadc('\n'); break; } } else { lexAppendc(c); lexSkipLookahead(); } c = lexLookahead(); } lexAppendc(0); handleMoreRFC822LineBreak(c); return c==EOF?0:lexStr(); } #endif static int match_begin_name(int end) { char *n = lexLookaheadWord(); int token = ID; if (n) { if (!stricmp(n,"vcard")) token = end?END_VCARD:BEGIN_VCARD; else if (!stricmp(n,"vcalendar")) token = end?END_VCAL:BEGIN_VCAL; else if (!stricmp(n,"vevent")) token = end?END_VEVENT:BEGIN_VEVENT; else if (!stricmp(n,"vtodo")) token = end?END_VTODO:BEGIN_VTODO; deleteStr(n); return token; } return 0; } #ifdef INCLUDEMFC void initLex(const char *inputstring, unsigned long inputlen, CFile *inputfile) #else void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) #endif { /* initialize lex mode stack */ lexBuf.lexModeStack[lexBuf.lexModeStackTop=0] = L_NORMAL; /* iniatialize lex buffer. */ lexBuf.inputString = (char*) inputstring; lexBuf.inputLen = inputlen; lexBuf.curPos = 0; lexBuf.inputFile = inputfile; lexBuf.len = 0; lexBuf.getPtr = 0; lexBuf.maxToken = MAXTOKEN; lexBuf.strs = (char*)malloc(MAXTOKEN); lexBuf.strsLen = 0; } static void finiLex() { free(lexBuf.strs); } /* This parses and converts the base64 format for binary encoding into * a decoded buffer (allocated with new). See RFC 1521. */ static char * lexGetDataFromBase64() { unsigned long bytesLen = 0, bytesMax = 0; int quadIx = 0, pad = 0; unsigned long trip = 0; unsigned char b; int c; unsigned char *bytes = NULL; unsigned char *oldBytes = NULL; DBG_(("db: lexGetDataFromBase64\n")); while (1) { c = lexGetc(); if (c == '\n') { ++mime_lineNum; if (lexLookahead() == '\n') { /* a '\n' character by itself means end of data */ break; } else continue; /* ignore '\n' */ } else { if ((c >= 'A') && (c <= 'Z')) b = (unsigned char)(c - 'A'); else if ((c >= 'a') && (c <= 'z')) b = (unsigned char)(c - 'a') + 26; else if ((c >= '0') && (c <= '9')) b = (unsigned char)(c - '0') + 52; else if (c == '+') b = 62; else if (c == '/') b = 63; else if (c == '=') { b = 0; pad++; } else if ((c == ' ') || (c == '\t')) { continue; } else { /* error condition */ if (bytes) free(bytes); else if (oldBytes) free(oldBytes); /* error recovery: skip until 2 adjacent newlines. */ DBG_(("db: invalid character 0x%x '%c'\n", c,c)); if (c != EOF) { c = lexGetc(); while (c != EOF) { if (c == '\n' && lexLookahead() == '\n') { ++mime_lineNum; break; } c = lexGetc(); } } return NULL; } trip = (trip << 6) | b; if (++quadIx == 4) { unsigned char outBytes[3]; int numOut; int i; for (i = 0; i < 3; i++) { outBytes[2-i] = (unsigned char)(trip & 0xFF); trip >>= 8; } numOut = 3 - pad; if (bytesLen + numOut > bytesMax) { if (!bytes) { bytesMax = 1024; bytes = (unsigned char*)malloc((size_t)bytesMax); } else { bytesMax <<= 2; oldBytes = bytes; bytes = (unsigned char*)realloc(bytes,(size_t)bytesMax); } if (bytes == 0) { mime_error("out of memory while processing BASE64 data\n"); } } if (bytes) { memcpy(bytes + bytesLen, outBytes, numOut); bytesLen += numOut; } trip = 0; quadIx = 0; } } } /* while */ DBG_(("db: bytesLen = %d\n", bytesLen)); /* kludge: all this won't be necessary if we have tree form representation */ if (bytes) { setValueWithSize(curProp,bytes,(unsigned int)bytesLen); free(bytes); } else if (oldBytes) { setValueWithSize(curProp,oldBytes,(unsigned int)bytesLen); free(oldBytes); } return 0; } static int match_begin_end_name(int end) { int token; lexSkipWhite(); if (lexLookahead() != ':') return ID; lexSkipLookahead(); lexSkipWhite(); token = match_begin_name(end); if (token == ID) { lexPushLookaheadc(':'); DBG_(("db: ID '%s'\n", yylval.str)); return ID; } else if (token != 0) { lexSkipLookaheadWord(); deleteStr(yylval.str); DBG_(("db: begin/end %d\n", token)); return token; } return 0; } static char* lexGetQuotedPrintable() { char cur; lexClearToken(); do { cur = lexGetc(); switch (cur) { case '=': { int c = 0; int next[2]; int i; for (i = 0; i < 2; i++) { next[i] = lexGetc(); if (next[i] >= '0' && next[i] <= '9') c = c * 16 + next[i] - '0'; else if (next[i] >= 'A' && next[i] <= 'F') c = c * 16 + next[i] - 'A' + 10; else break; } if (i == 0) { /* single '=' follow by LINESEP is continuation sign? */ if (next[0] == '\n') { ++mime_lineNum; } else { lexPushLookaheadc('='); goto EndString; } } else if (i == 1) { lexPushLookaheadc(next[1]); lexPushLookaheadc(next[0]); lexAppendc('='); } else { lexAppendc(c); } break; } /* '=' */ case '\n': { lexPushLookaheadc('\n'); goto EndString; } case (char)EOF: break; default: lexAppendc(cur); break; } /* switch */ } while (cur != (char)EOF); EndString: lexAppendc(0); return lexStr(); } /* LexQuotedPrintable */ int yylex() { int lexmode = LEXMODE(); if (lexmode == L_VALUES) { int c = lexGetc(); if (c == ';') { DBG_(("db: SEMICOLON\n")); lexPushLookaheadc(c); #ifdef _SUPPORT_LINE_FOLDING handleMoreRFC822LineBreak(c); #endif lexSkipLookahead(); return SEMICOLON; } else if (strchr("\n",c)) { ++mime_lineNum; /* consume all line separator(s) adjacent to each other */ c = lexLookahead(); while (strchr("\n",c)) { lexSkipLookahead(); c = lexLookahead(); ++mime_lineNum; } DBG_(("db: LINESEP\n")); return LINESEP; } else { char *p = 0; lexPushLookaheadc(c); if (lexWithinMode(L_BASE64)) { /* get each char and convert to bin on the fly... */ p = lexGetDataFromBase64(); yylval.str = p; return STRING; } else if (lexWithinMode(L_QUOTED_PRINTABLE)) { p = lexGetQuotedPrintable(); } else { #ifdef _SUPPORT_LINE_FOLDING p = lexGet1Value(); #else p = lexGetStrUntil(";\n"); #endif } if (p) { DBG_(("db: STRING: '%s'\n", p)); yylval.str = p; return STRING; } else return 0; } } else { /* normal mode */ while (1) { int c = lexGetc(); switch(c) { case ':': { /* consume all line separator(s) adjacent to each other */ /* ignoring linesep immediately after colon. */ /* c = lexLookahead(); while (strchr("\n",c)) { lexSkipLookahead(); c = lexLookahead(); ++mime_lineNum; }*/ DBG_(("db: COLON\n")); return COLON; } case ';': DBG_(("db: SEMICOLON\n")); return SEMICOLON; case '=': DBG_(("db: EQ\n")); return EQ; /* ignore whitespace in this mode */ case '\t': case ' ': continue; case '\n': { ++mime_lineNum; continue; } case EOF: return 0; break; default: { lexPushLookaheadc(c); if (isalpha(c)) { char *t = lexGetWord(); yylval.str = t; if (!stricmp(t, "begin")) { return match_begin_end_name(0); } else if (!stricmp(t,"end")) { return match_begin_end_name(1); } else { DBG_(("db: ID '%s'\n", t)); return ID; } } else { /* unknow token */ return 0; } break; } } } } return 0; } /***************************************************************************/ /*** Public Functions ****/ /***************************************************************************/ static VObject* Parse_MIMEHelper() { ObjStackTop = -1; mime_numErrors = 0; mime_lineNum = 1; vObjList = 0; curObj = 0; if (yyparse() != 0) return 0; finiLex(); return vObjList; } DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len) { initLex(input, len, 0); return Parse_MIMEHelper(); } #if INCLUDEMFC DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file) { unsigned long startPos; VObject *result; initLex(0,-1,file); startPos = file->GetPosition(); if (!(result = Parse_MIMEHelper())) file->Seek(startPos, CFile::begin); return result; } #else VObject* Parse_MIME_FromFile(FILE *file) { VObject *result; long startPos; initLex(0,(unsigned long)-1,file); startPos = ftell(file); if (!(result = Parse_MIMEHelper())) { if (startPos >= 0) fseek(file,startPos,SEEK_SET); } return result; } DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname) { FILE *fp = fopen(fname,"r"); if (fp) { VObject* o = Parse_MIME_FromFile(fp); fclose(fp); return o; } else { char msg[256]; snprintf(msg, sizeof(msg), "can't open file '%s' for reading\n", fname); mime_error_(msg); return 0; } } #endif static MimeErrorHandler mimeErrorHandler; DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me) { mimeErrorHandler = me; } static void mime_error(char *s) { char msg[256]; if (mimeErrorHandler) { snprintf(msg,sizeof(msg),"%s at line %d", s, mime_lineNum); mimeErrorHandler(msg); } } static void mime_error_(char *s) { if (mimeErrorHandler) { mimeErrorHandler(s); } } libical-1.0/src/libicalvcal/port.h0000664000076400007640000000765712132563133016142 0ustar allenallen/*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ #ifndef __PORT_H__ #define __PORT_H__ 1 #if defined(__CPLUSPLUS__) || defined(__cplusplus) extern "C" { #endif /* some of these #defines are commented out because */ /* Visual C++ sets them on the compiler command line instead */ /* #define _DEBUG */ /* #define WIN32 */ /* #define WIN16 */ /* #define _WINDOWS */ /* #define __MWERKS__ */ /* #define INCLUDEMFC */ #define vCardClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCard" #define vCalendarClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCalendar" /* The above strings vCardClipboardFormat and vCalendarClipboardFormat are globally unique IDs which can be used to generate clipboard format ID's as per the requirements of a specific platform. For example, in Windows they are used as the parameter in a call to RegisterClipboardFormat. For example: CLIPFORMAT foo = RegisterClipboardFormat(vCardClipboardFormat); */ #define vCardMimeType "text/x-vCard" #define vCalendarMimeType "text/x-vCalendar" #define DLLEXPORT(t) t #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #define stricmp strcasecmp #if defined(__CPLUSPLUS__) || defined(__cplusplus) } #endif #endif /* __PORT_H__ */ libical-1.0/src/libicalvcal/icalvcal.h0000664000076400007640000000256312132563133016723 0ustar allenallen/* -*- Mode: C -*-*/ /*====================================================================== FILE: icalvcal.h CREATOR: eric 25 May 00 (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org This program is free software; you can redistribute it and/or modify it under the terms of either: The LGPL as published by the Free Software Foundation, version 2.1, available at: http://www.fsf.org/copyleft/lesser.html Or: The Mozilla Public License Version 1.0. You may obtain a copy of the License at http://www.mozilla.org/MPL/ The original code is icalvcal.h ======================================================================*/ #ifndef ICALVCAL_H #define ICALVCAL_H #include #include "vcc.h" /* These are used as default values if the values are missing in the vCalendar file. Gnome Calendar, for example, does not save the URL of the audio alarm, so we have to add a value here to make a valid iCalendar object. */ typedef struct _icalvcal_defaults icalvcal_defaults; struct _icalvcal_defaults { char *alarm_audio_url; char *alarm_audio_fmttype; char *alarm_description; }; /* Convert a vObject into an icalcomponent */ icalcomponent* icalvcal_convert(VObject *object); icalcomponent* icalvcal_convert_with_defaults (VObject *object, icalvcal_defaults *defaults); #endif /* !ICALVCAL_H */ libical-1.0/src/libicalvcal/vcaltmp.c0000664000076400007640000002303212132563133016600 0ustar allenallen/* This module provides some helper APIs for creating a VCalendar object. Note on APIs: 1. The APIs does not attempt to verify if the arguments passed are correct. 2. Where the argument to an API is not applicable, pass the value 0. 3. See the test program at the bottom of this file as an example of usage. 4. This code calls APIs in vobject.c. */ /*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ #include #include #include "vcaltmp.h" DLLEXPORT(VObject*) vcsCreateVCal( char *date_created, char *location, char *product_id, char *time_zone, char *version ) { VObject *vcal = newVObject(VCCalProp); #define Z(p,v) if (v) addPropValue(vcal,p,v); Z(VCDCreatedProp, date_created); Z(VCLocationProp, location) Z(VCProdIdProp, product_id) Z(VCTimeZoneProp, time_zone) Z(VCVersionProp, version) #undef Z return vcal; } DLLEXPORT(VObject*) vcsAddEvent( VObject *vcal, char *start_date_time, char *end_date_time, char *description, char *summary, char *categories, char *classification, char *status, char *transparency, char *uid, char *url ) { VObject *vevent = addProp(vcal,VCEventProp); #define Z(p,v) if (v) addPropValue(vevent,p,v); Z(VCDTstartProp,start_date_time); Z(VCDTendProp,end_date_time); if (description) { VObject *p = addPropValue(vevent,VCDescriptionProp,description); if (strchr(description,'\n')) addProp(p,VCQuotedPrintableProp); } Z(VCSummaryProp,summary); Z(VCCategoriesProp,categories); Z(VCClassProp,classification); Z(VCStatusProp,status); Z(VCTranspProp,transparency); Z(VCUniqueStringProp,uid); Z(VCURLProp,url); #undef Z return vevent; } DLLEXPORT(VObject*) vcsAddTodo( VObject *vcal, char *start_date_time, char *due_date_time, char *date_time_complete, char *description, char *summary, char *priority, char *classification, char *status, char *uid, char *url ) { VObject *vtodo = addProp(vcal,VCTodoProp); #define Z(p,v) if (v) addPropValue(vtodo,p,v); Z(VCDTstartProp,start_date_time); Z(VCDueProp,due_date_time); Z(VCCompletedProp,date_time_complete); if (description) { VObject *p = addPropValue(vtodo,VCDescriptionProp,description); if (strchr(description,'\n')) addProp(p,VCQuotedPrintableProp); } Z(VCSummaryProp,summary); Z(VCPriorityProp,priority); Z(VCClassProp,classification); Z(VCStatusProp,status); Z(VCUniqueStringProp,uid); Z(VCURLProp,url); #undef Z return vtodo; } DLLEXPORT(VObject*) vcsAddAAlarm( VObject *vevent, char *run_time, char *snooze_time, char *repeat_count, char *audio_content ) { VObject *aalarm= addProp(vevent,VCAAlarmProp); #define Z(p,v) if (v) addPropValue(aalarm,p,v); Z(VCRunTimeProp,run_time); Z(VCSnoozeTimeProp,snooze_time); Z(VCRepeatCountProp,repeat_count); Z(VCAudioContentProp,audio_content); #undef Z return aalarm; } DLLEXPORT(VObject*) vcsAddMAlarm( VObject *vevent, char *run_time, char *snooze_time, char *repeat_count, char *email_address, char *note ) { VObject *malarm= addProp(vevent,VCMAlarmProp); #define Z(p,v) if (v) addPropValue(malarm,p,v); Z(VCRunTimeProp,run_time); Z(VCSnoozeTimeProp,snooze_time); Z(VCRepeatCountProp,repeat_count); Z(VCEmailAddressProp,email_address); Z(VCNoteProp,note); #undef Z return malarm; } DLLEXPORT(VObject*) vcsAddDAlarm( VObject *vevent, char *run_time, char *snooze_time, char *repeat_count, char *display_string ) { VObject *dalarm= addProp(vevent,VCDAlarmProp); #define Z(p,v) if (v) addPropValue(dalarm,p,v); Z(VCRunTimeProp,run_time); Z(VCSnoozeTimeProp,snooze_time); Z(VCRepeatCountProp,repeat_count); Z(VCDisplayStringProp,display_string); #undef Z return dalarm; } DLLEXPORT(VObject*) vcsAddPAlarm( VObject *vevent, char *run_time, char *snooze_time, char *repeat_count, char *procedure_name ) { VObject *palarm= addProp(vevent,VCPAlarmProp); #define Z(p,v) if (v) addPropValue(palarm,p,v); Z(VCRunTimeProp,run_time); Z(VCSnoozeTimeProp,snooze_time); Z(VCRepeatCountProp,repeat_count); Z(VCProcedureNameProp,procedure_name); #undef Z return palarm; } #ifdef _TEST #if 0 This testcase would generate a file call "frankcal.vcf" with the following content: BEGIN:VCALENDAR DCREATED:19960523T100522 GEO:37.24,-17.87 PRODID:-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN VERSION:0.3 BEGIN:VEVENT DTSTART:19960523T120000 DTEND:19960523T130000 DESCRIPTION;QUOTED-PRINTABLE:VERSIT PDI PR Teleconference/Interview =0A= With Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar=0A= activities with European Press representatives. SUMMARY:VERSIT PDI PR Teleconference/Interview CATEGORIES:PHONE CALL STATUS:CONFIRMED TRANSP:19960523T100522-4000F100582713-009251 UID:http://www.ibm.com/raleigh/fdawson/~c:\or2\orgfiles\versit.or2 DALARM:19960523T114500;5;3;Your Telecon Starts At Noon!!!; MALARM:19960522T120000;;;fdawson@raleigh.ibm.com;Remember 05/23 Noon Telecon!!!; PALARM:19960523T115500;;;c:\or2\organize.exe c:\or2\orgfiles\versit.or2; X-LDC-OR2-OLE:c:\temp\agenda.doc END:VEVENT BEGIN:VTODO DUE:19960614T0173000 DESCRIPTION:Review VCalendar helper API. END:VTODO END:VCALENDAR #endif void testVcalAPIs() { FILE *fp; VObject *vcal = vcsCreateVCal( "19960523T100522", "37.24,-17.87", "-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN", 0, "0.3" ); VObject *vevent = vcsAddEvent( vcal, "19960523T120000", "19960523T130000", "VERSIT PDI PR Teleconference/Interview \nWith Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar\nactivities with European Press representatives.", "VERSIT PDI PR Teleconference/Interview", "PHONE CALL", 0, "CONFIRMED", "19960523T100522-4000F100582713-009251", "http://www.ibm.com/raleigh/fdawson/~c:\\or2\\orgfiles\\versit.or2", 0 ); vcsAddDAlarm(vevent, "19960523T114500", "5", "3", "Your Telecon Starts At Noon!!!"); vcsAddMAlarm(vevent, "19960522T120000", 0, 0, "fdawson@raleigh.ibm.com", "Remember 05/23 Noon Telecon!!!"); vcsAddPAlarm(vevent, "19960523T115500", 0 ,0, "c:\\or2\\organize.exe c:\\or2\\orgfiles\\versit.or2"); addPropValue(vevent, "X-LDC-OR2-OLE", "c:\\temp\\agenda.doc"); vcsAddTodo( vcal, 0, "19960614T0173000", 0, "Review VCalendar helper API.", 0, 0, 0, 0, 0, 0 ); /* now do something to the resulting VObject */ /* pretty print on stdout for fun */ printVObject(vcal); /* open the output text file */ #define OUTFILE "frankcal.vcf" fp = fopen(OUTFILE, "w"); if (fp) { /* write it in text form */ writeVObject(fp,vcal); fclose(fp); } else { printf("open output file '%s' failed\n", OUTFILE); } } void main() { testVcalAPIs(); } #endif /* end of source file vcaltmp.c */ libical-1.0/src/libicalcap/0000775000076400007640000000000012141276220014602 5ustar allenallenlibical-1.0/src/libicalcap/icalcap_utils.c0000664000076400007640000000621112132563127017567 0ustar allenallen/*- * $Id: icalcap_utils.c,v 1.3 2008-01-02 20:07:38 dothebart Exp $ * * See the file LICENSE for redistribution information. * * Copyright (c) 2002 Andrea Campi */ #include "config.h" #ifdef HAVE_STRING_H #include #endif #include "icalcap.h" #define CONTENT_TYPE "Content-Type: text/calendar" icalcomponent * icalcap_component_new_from_string(const char *data) { icalcomponent *ret = NULL; char *mtype; /* FIXME split the check */ if (strncmp(data, CONTENT_TYPE, strlen(CONTENT_TYPE))) { return NULL; } mtype = (char *)data+strlen(CONTENT_TYPE); ret = icalcomponent_new_from_string(mtype); if (ret == NULL) { return NULL; } #ifdef DEBUG g_message("icalcap_component_new_from_string icalcomponent_new_from_string = %p", ret); #endif /* FIXME * Validate here: should check at least the version */ if (icalcomponent_isa(ret) != ICAL_VCALENDAR_COMPONENT && icalcomponent_isa(ret) != ICAL_XROOT_COMPONENT) { icalcomponent_free(ret); return NULL; } return ret; } #if 0 RRCAPCmdArgs * msg_parse(RRCAP *cap, icalcomponent *comp) { icalproperty *prop; icalparameter *param; icalvalue *value; RRCAPCmdArgs *ret = g_new0(RRCAPCmdArgs, 1); char *str; ret->comp = comp; /* Find the command */ if ((prop = icalcomponent_get_first_property(comp, ICAL_CMD_PROPERTY)) == NULL) { rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "No CMD sent", NULL); goto FAILED; } if ((value = icalproperty_get_value(prop)) == NULL) { str = icalproperty_as_ical_string_r(prop); rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "CMD has no value", str); free(str); goto FAILED; } ret->cmd = icalvalue_get_cmd(value); /* Look for params */ /* ID */ if ((param = icalproperty_get_first_parameter(prop, ICAL_ID_PARAMETER)) != NULL) { if ((ret->id = icalparameter_get_id(param)) == NULL) { str = icalproperty_as_ical_string_r(prop); rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "ID param is garbled", str); free(str); goto FAILED; } } /* LATENCY */ if ((param = icalproperty_get_first_parameter(prop, ICAL_LATENCY_PARAMETER)) != NULL) { const char *tmp; if ((tmp = icalparameter_get_latency(param)) == NULL) { str = icalproperty_as_ical_string_r(prop); rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "LATENCY is garbled", str); free(str); goto FAILED; } ret->latency = atoi(tmp); } /* ACTION */ if ((param = icalproperty_get_first_parameter(prop, ICAL_ACTIONPARAM_PARAMETER)) != NULL) { if ((ret->action = icalparameter_get_actionparam(param)) == NULL) { str = icalproperty_as_ical_string_r(prop); rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "ACTION is garbled", str); free(str); goto FAILED; } } if ((ret->latency >= 0) ^ (ret->action != ICAL_ACTIONPARAM_NONE)) { str = icalproperty_as_ical_string_r(prop); rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "LATENCY and ACTION must be both present", str); free(str); goto FAILED; } return ret; FAILED: g_free(ret); return NULL; } #endif libical-1.0/src/libicalcap/client.c0000664000076400007640000001004612132563127016232 0ustar allenallen/*- * $Id: client.c,v 1.3 2008-01-02 20:07:33 dothebart Exp $ * * See the file LICENSE for redistribution information. * If you have not received a copy of the license, please contact CodeFactory * by email at info@codefactory.se, or on the web at http://www.codefactory.se/ * You may also write to: CodeFactory AB, SE-903 47, Umeå, Sweden. * * Copyright (c) 2002 Jonas Borgström * Copyright (c) 2002 Daniel Lundin * Copyright (c) 2002 CodeFactory AB. All rights reserved. */ #include #include #include #include "icalcap.h" #include "icalcap_session.h" #define CLIENT_CAPABILITY \ "Content-Type: text/html\n\n\ BEGIN:VCALENDAR\n\ VERSION:2.0\n\ PRODIR:rrcap-client\n\ CMD:REPLY\n\ BEGIN:VREPLY\n\ CAP-VERSION:1.0\n\ PRODID:rrcap-client\n\ QUERY-LEVEL:CAL-QL-NONE\n\ CAR-LEVEL:CAR-FULL-NONE\n\ DATE-MAX:99991231T235959Z\n\ DATE-MIN:00000101T000000Z\n\ MAX-COMPONENT-SIZE:0\n\ COMPONENTS:VCALENDAR,VTODO,VJOURNAL,VEVENT,VCAR,\n\ VALARM,VFREEBUSY,VTIMEZONE,STANDARD,DAYLIGHT,VREPLY\n\ ITIP-VERSION:2447\n\ RECUR-ACCEPTED:TRUE\n\ RECUR-EXPAND:TRUE\n\ RECUR-LIMIT:0\n\ STORES-EXPANDED:FALSE\n\ END:VREPLY\n\ END:VCALENDAR\n" icalcomponent * icalcap_send_cmd(const icalcap *cap, const gchar *cmd, const gchar *id, int timeout) { icalcap_message*capmsg; icalcomponent *comp, *ret = NULL; icalproperty *prop; prop = icalproperty_vanew_cmd( icalproperty_string_to_enum(cmd), icalparameter_new_id(id), 0); if (timeout > 0) { char buf[16]; snprintf(buf, 16, "%d", timeout); icalproperty_add_parameter(prop, icalparameter_new_latency(buf)); icalproperty_add_parameter(prop, icalparameter_new_actionparam(ICAL_ACTIONPARAM_ABORT)); } comp = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version("2.0"), icalproperty_new_prodid("-//I.Net spa//NONSGML//EN"), prop, 0); capmsg = icalcap_message_new(cap, comp); ret = icalcap_message_sync_send(capmsg, timeout); icalcap_message_free(capmsg); icalcomponent_free(comp); return ret; } icalcomponent * icalcap_new_reply_component(const char *id, const icalcomponent *comp) { if (comp == NULL) return NULL; return icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version("2.0"), icalproperty_new_prodid("-//I.Net spa//NONSGML//EN"), icalproperty_vanew_cmd( ICAL_CMD_REPLY, /* icalparameter_new_id(id), */ 0), comp, 0); } static int msg_handler(const icalcap_message *capmsg) { icalcomponent *reply; char *temp; temp = icalcomponent_as_ical_string_r(capmsg->comp); g_message("Got: %s", temp); free(temp); /* FIXME Check it's a GET-CAPABILITY */ reply = icalcap_new_reply_component(NULL, capmsg->comp); if (reply == NULL) { return FALSE; } icalcomponent_add_property(reply, icalproperty_new_prodid("client")); icalcomponent_free(reply); return TRUE; } int main (gint argc, gchar **argv) { icalcap_session*conn; icalcap *cap; icalcomponent *comp; int i, n; int verbose = 0; if ((conn = icalcap_session_new()) == NULL) { fprintf(stderr, "Init failed\n"); exit(0); } if (!icalcap_session_connect(conn, "gundam.inet.it", 0)) { fprintf(stderr, "Connect failed\n"); exit(0); } if (!icalcap_session_login(conn, "user@example.com", "user@example.com", "password")) { fprintf(stderr, "Login failed\n"); exit(0); } if ((cap = icalcap_session_start(conn, msg_handler)) == NULL) { fprintf(stderr, "Start failed\n"); exit(0); } if (argc > 1 && *argv[1] == '1') n = 100; else n = 1; for (i=0; i #include #include #include struct _icalcap { RRCAP *chan; const char *username, *authname; }; struct _icalerror { GError *err; }; void icalcap_free_rr(icalcap *cap); int icalcap_stop_rr(icalcap *cap); icalcomponent *icalcap_send_component_rr(const icalcap *cap, const icalcomponent *comp, int timeout); #else #error "No implementation of icalcap found!" #endif #endif libical-1.0/src/libicalcap/icalcap_rr.c0000664000076400007640000002743012132563127017060 0ustar allenallen#include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "icalcap.h" #include "icalcap_session.h" #include "icalcap_server.h" #include "icalcap_impl.h" #include "icalcap_message_impl.h" #include "icalcap_session_impl.h" #include "icalcap_server_impl.h" icalcomponent *icalcap_component_new_from_string(const char *data); static int default_msg_handler(RRCAP *cap, RRFrame *frame, GError **error); static void client_final_handler(RRCAP *cap); /** * Implementation of functions in icalcap */ void icalcap_free_rr(icalcap *cap) { g_return_if_fail(cap); if (cap->username) free(cap->username); if (cap->authname) free(cap->authname); g_free(cap); } /** * Implementation of functions in icalcap_session */ icalcap_session * icalcap_session_new_rr(void) { icalcap_session *sess; GError *error = NULL; /* Initialize roadrunner */ if (!rr_init(0, NULL, &error)) return 0; if ((sess = g_new0(icalcap_session, 1)) == NULL) { /* FIXME return an error */ return NULL; } sess->cfg = rr_cap_config_new(); /* Tell roadrunner which profiles we want to support */ sess->profreg = rr_profile_registry_new(); rr_profile_registry_add_profile(sess->profreg, RR_TYPE_CAP, NULL); rr_profile_registry_add_profile(sess->profreg, RR_TYPE_TLS, NULL); rr_profile_registry_add_profile(sess->profreg, RR_TYPE_SASL_DIGEST_MD5, NULL); return sess; } int icalcap_session_connect_rr(icalcap_session *sess, const char *hostname, const int port) { GError *error = NULL; if (sess == NULL) { /* FIXME return the error */ return FALSE; } /* Create a connection object */ sess->connection = rr_tcp_connection_new(sess->profreg, hostname, port, &error); if (sess->connection == NULL) { /* FIXME return the error */ return FALSE; } return TRUE; } int icalcap_session_login_rr(icalcap_session *sess, const char *username, const char *authname, const char *password) { /* assert cap != NULL */ GError *error = NULL; rr_sasl_set_username(sess->connection, username); rr_sasl_set_authname(sess->connection, authname); rr_sasl_set_password(sess->connection, password); /* FIXME */ if (!rr_sasl_login(sess->connection, RR_TYPE_SASL_DIGEST_MD5, "foo.example.com", NULL, &error)) { /* FIXME return the error */ return 0; } return 1; } icalcap * icalcap_session_start_rr(const icalcap_session *sess, icalcap_msg_handler handler) { /* assert sess != NULL */ icalcap *cap; RRCAP *channel; GError *error = NULL; if ((cap = g_new0(icalcap, 1)) == NULL) { /* FIXME return an error */ return NULL; } if (handler != NULL) { rr_cap_config_set_msg_handler(sess->cfg, default_msg_handler, (void *)handler); /* FIXME rr_cap_config_set_final_handler(cfg, client_final_handler); */ } if ((channel = rr_cap_client_start(sess->connection, sess->cfg, &error)) == NULL) { /* FIXME return the error */ goto FAILED; } cap->chan = channel; channel->hl = cap; return cap; FAILED: g_free(cap); return NULL; } int icalcap_stop_rr(icalcap *cap) { /* assert cap != NULL */ GError *error = NULL; if (!rr_cap_close(cap->chan, &error)) { /* FIXME return the error */ return 0; } cap->chan = NULL; g_free(cap); return 1; } int icalcap_session_disconnect_rr(icalcap_session *sess) { /* assert cap != NULL */ GError *error = NULL; if (!rr_connection_disconnect(sess->connection, &error)) { /* FIXME return the error */ return 0; } sess->connection = NULL; g_free(sess); if (!rr_exit(&error)) { /* FIXME return the error */ return 0; } return 1; } /** * Implementation of functions in icalcap_server */ /** * If the user properly authenticated (via SASL), initialize the channel * credentials. Otherwise, refuse to open the channel. */ static int server_init_handler(RRCAP *chan, const gchar *piggyback, GError **error) { icalcap *cap; RRConnection *connection; icalcap_auth_handler func; const gchar *username, *authname; int rc; g_return_val_if_fail(chan, FALSE); g_return_val_if_fail(chan->cfg, FALSE); g_return_val_if_fail(chan->cfg->server_init_data, FALSE); connection = rr_channel_get_connection(RR_CHANNEL(chan)); if ((username = rr_sasl_get_username(connection)) == NULL) return FALSE; if ((authname = rr_sasl_get_authname(connection)) == NULL) return FALSE; if ((cap = g_new0(icalcap, 1)) == NULL) { return FALSE; } cap->chan = chan; chan->hl = cap; cap->username = strdup(username); cap->authname = strdup(authname); func = (icalcap_auth_handler)chan->cfg->server_init_data; return func(cap, piggyback); } static void server_confirmation_handler(RRCAP *chan) { icalcap_chanup_handler func; g_return_if_fail(chan); g_return_if_fail(chan->cfg); g_return_if_fail(chan->cfg->server_confirmation_data); func = (icalcap_chanup_handler)chan->cfg->server_confirmation_data; func(chan->hl); } static gboolean server_frame_handler(RRCAP *cap, RRFrame *frame, GError **error) { if (frame->type == RR_FRAME_TYPE_MSG) /* FIXME */ return default_msg_handler(cap, frame, error); else return FALSE; } static void server_final_handler(RRCAP *cap) { g_return_if_fail(cap); g_return_if_fail(RR_CAP(cap)); if (cap->hl != NULL) { icalcap_free(cap->hl); cap->hl = NULL; } } /* * FIXME Do we want to pass argc and argv in? */ icalcap_server * icalcap_server_new_rr(icalcap_auth_handler auth_cb, icalcap_chanup_handler chanup_cb, icalcap_msg_handler msg_cb) { icalcap_server *serv; GError *error = NULL; /* Initialize roadrunner */ if (!rr_init(0, NULL, &error)) return 0; if ((serv = g_new0(icalcap_server, 1)) == NULL) { /* FIXME return an error */ return NULL; } serv->handler = msg_cb; /* This is somewhat hackish */ serv->cfg = rr_cap_config_new(); rr_cap_config_set_msg_handler(serv->cfg, NULL, (void *)msg_cb); rr_cap_config_set_frame_handler(serv->cfg, server_frame_handler); rr_cap_config_set_final_handler(serv->cfg, server_final_handler); rr_cap_config_set_server_init_handler(serv->cfg, server_init_handler, (void *)auth_cb); rr_cap_config_set_server_confirmation_handler(serv->cfg, server_confirmation_handler, (void *)chanup_cb); /* Tell roadrunner which profiles we want to support */ serv->profreg = rr_profile_registry_new(); rr_profile_registry_add_profile(serv->profreg, RR_TYPE_CAP, serv->cfg); rr_profile_registry_add_profile(serv->profreg, RR_TYPE_TLS, NULL); rr_profile_registry_add_profile(serv->profreg, RR_TYPE_SASL_DIGEST_MD5, NULL); return serv; } int icalcap_server_listen_rr(icalcap_server *serv, const char *hostname, const int port) { GError *error = NULL; g_return_val_if_fail(serv, FALSE); /* Create a listener object */ serv->listener = rr_tcp_listener_new(serv->profreg, hostname, port, &error); if (serv->listener == NULL) { /* FIXME return the error */ return FALSE; } return TRUE; } int icalcap_server_run_rr(const icalcap_server *serv) { /* assert cap != NULL */ GError *error = NULL; if (!rr_wait_until_done(&error)) { /* FIXME return the error */ return FALSE; } return TRUE; } int icalcap_server_shutdown_rr(icalcap_server *serv) { /* assert cap != NULL */ GError *error = NULL; if (!rr_listener_shutdown(serv->listener, &error)) { /* FIXME return the error */ return 0; } serv->listener = NULL; g_free(serv); return 1; } /* * icalcap_message.c */ /* * Internal constructor */ static struct _icalcap_message_rr * _icalcap_message_new_from_component_rr(const icalcap *cap, int type, icalcomponent *comp) { struct _icalcap_message_rr *ret; if ((ret = g_new0(struct _icalcap_message_rr, 1)) == NULL) { /* FIXME return an error */ return NULL; } ret->cap = cap; ret->type = type; ret->comp = comp; return ret; } static icalcap_message * _icalcap_message_new_from_frame_rr(const icalcap *cap, int type, RRFrame *frame) { struct _icalcap_message_rr *ret; if ((ret = g_new0(struct _icalcap_message_rr, 1)) == NULL) { /* FIXME return an error */ return NULL; } ret->cap = cap; ret->type = type; ret->frame = frame; ret->comp = icalcap_component_new_from_string(ret->frame->payload); return (icalcap_message *)ret; } icalcap_message * icalcap_message_new_rr(const icalcap *cap, const icalcomponent *comp) { struct _icalcap_message_rr *ret; gchar *str, *obj; if (comp == NULL) { /* FIXME return an error */ return NULL; } ret = _icalcap_message_new_from_component_rr(cap, ICALCAP_MESSAGE_CMD, NULL); obj = icalcomponent_as_ical_string_r(comp); str = g_strdup_printf("%s\n\n%s", "Content-Type: text/calendar", obj); free(obj); ret->msg = rr_message_static_new(RR_FRAME_TYPE_MSG, str, strlen(str), TRUE); return (icalcap_message *)ret; } /* * This method and its implementation are critical. It has the responsibility for * serializing the component. The tricky part is that we have a options for encoding XROOT. */ icalcap_message * icalcap_message_new_reply_rr(const icalcap_message *orig, const icalcomponent *comp) { struct _icalcap_message_rr *in, *ret; icalcomponent *cc; GString *str; if ((in = (struct _icalcap_message_rr *)orig) == NULL) { /* FIXME return an error */ return NULL; } ret = _icalcap_message_new_from_component_rr(in->cap, ICALCAP_MESSAGE_REPLY, NULL); /* FIXME */ if (icalcomponent_isa(comp) != ICAL_XROOT_COMPONENT) return NULL; /* FIXME don't hardcode */ str = g_string_new("Content-Type: text/calendar\n\n"); for (cc = icalcomponent_get_first_component(comp, ICAL_VCALENDAR_COMPONENT); cc != NULL; cc = icalcomponent_get_next_component(comp, ICAL_VCALENDAR_COMPONENT)) { char *obj; obj = icalcomponent_as_ical_string_r(cc); g_string_append(str, obj); free(obj); } ret->msg = rr_message_static_new(RR_FRAME_TYPE_RPY, str->str, strlen(str->str), TRUE); /* FIXME this should now be ok but if change the API we need to change */ ret->msg->msgno = in->frame->msgno; return (icalcap_message *)ret; } void icalcap_message_free_rr(icalcap_message *in) { struct _icalcap_message_rr *capmsg = (struct _icalcap_message_rr *)in; g_return_if_fail(capmsg); if (capmsg->comp != NULL) { icalcomponent_free(capmsg->comp); capmsg->comp = NULL; } if (capmsg->msg != NULL) { g_free(capmsg->msg); } g_free(capmsg); } int icalcap_message_send_reply_rr(icalcap_message *in) { struct _icalcap_message_rr *capmsg = (struct _icalcap_message_rr *)in; GError *error = NULL; int rc; if ((rc = rr_channel_send_message(RR_CHANNEL(capmsg->cap->chan), capmsg->msg, &error)) == 0) g_message("error = %s", error->message); /* FIXME handle error */ capmsg->msg = NULL; return rc; } icalcomponent * icalcap_message_sync_send_rr(icalcap_message *in, int timeout) { struct _icalcap_message_rr *capmsg = (struct _icalcap_message_rr *)in; icalcomponent *comp, *ret; gchar *str2; GError *error = NULL; int rc; /* FIXME */ rc = rr_cap_cmd(capmsg->cap->chan, capmsg->msg, 3 * timeout, &str2, &error); capmsg->msg = NULL; if (rc == 0) { g_message("error = %s", error->message); /* FIXME handle error */ return 0; } comp = icalcap_component_new_from_string(str2); g_free(str2); if (ret == NULL) return NULL; return comp; } /* * */ /* * FIXME We assume we can safely create an icalcap_message derived object * without calls to the base object */ int default_msg_handler(RRCAP *cap, RRFrame *frame, GError **error) { icalcap_msg_handler func; icalcap_message *msg; int ret; g_return_val_if_fail(cap, FALSE); g_return_val_if_fail(cap->cfg, FALSE); g_return_val_if_fail(cap->cfg->msg_handler_data, FALSE); func = (icalcap_msg_handler)cap->cfg->msg_handler_data; msg = _icalcap_message_new_from_frame_rr(cap->hl, ICALCAP_MESSAGE_CMD, frame); if (msg == NULL) { /* FIXME */ g_message("error"); return FALSE; } ret = func(msg); icalcap_message_free(msg); return ret; } libical-1.0/src/libicalcap/icalcap_session.h0000664000076400007640000000102512132563127020115 0ustar allenallen#ifndef __ICALCAP_SESSION_H__ #define __ICALCAP_SESSION_H__ #include "icalcap.h" typedef struct _icalcap_session icalcap_session; icalcap_session*icalcap_session_new(void); int icalcap_session_connect(icalcap_session *cap, const char *hostname, const int port); int icalcap_session_login(icalcap_session *cap, const char *username, const char *authname, const char *password); icalcap*icalcap_session_start(const icalcap_session *cap, icalcap_msg_handler handler); int icalcap_session_disconnect(icalcap_session *cap); #endif libical-1.0/src/libicalcap/Makefile.am0000664000076400007640000000332012132563127016641 0ustar allenallen#====================================================================== # FILE: Makefile.am # CREATOR: acampi # # $Id: Makefile.am,v 1.4 2008-01-02 20:07:33 dothebart Exp $ # # # (C) COPYRIGHT 2003, Andrea Campi, mailto:a.campi@inet.it # # This program is free software; you can redistribute it and/or modify # it under the terms of either: # # The LGPL as published by the Free Software Foundation, version # 2.1, available at: http://www.fsf.org/copyleft/lesser.html # # Or: # # The Mozilla Public License Version 1.0. You may obtain a copy of # the License at http://www.mozilla.org/MPL/ # # # #====================================================================== lib_LTLIBRARIES = libicalcap-evolution.la INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ -I$(top_builddir)/src \ -I$(top_srcdir)/src/libical \ -I$(top_builddir)/libical \ -I$(srcdir) \ -DWITH_RR $(RRCAP_CFLAGS) libicalcap_evolution_la_LDFLAGS = $(RRCAP_LIBS) -version-info 48:0:48 libicalcap_evolution_la_SOURCES = \ icalcap.c \ icalcap.h \ icalcap_impl.h \ icalcap_message.c \ icalcap_message_impl.h \ icalcap_rr.c \ icalcap_server.c \ icalcap_server.h \ icalcap_server_impl.h \ icalcap_session.c \ icalcap_session.h \ icalcap_session_impl.h \ icalcap_utils.c libicalcap_evolutionincludedir = $(includedir) libicalcap_evolutioninclude_HEADERS = \ icalcap.h \ icalcap_impl.h \ icalcap_message_impl.h \ icalcap_server.h \ icalcap_server_impl.h \ icalcap_session.h \ icalcap_session_impl.h noinst_PROGRAMS = client LDADD = ../libicalss/libicalss-evolution.la ../libicalvcal/libicalvcal-evolution.la ../libical/libical-evolution.la libicalcap-evolution.la $(RRCAP_LIBS) client_SOURCES = client.c libical-1.0/src/libicalcap/icalcap_server_impl.h0000664000076400007640000000137312132563127020767 0ustar allenallen#ifndef __ICALCAP_SERVER_IMPL_H__ #define __ICALCAP_SERVER_IMPL_H__ #ifdef WITH_RR #include #include #include #include struct _icalcap_server { RRProfileRegistry *profreg; RRListener *listener; RRCAPConfig *cfg; icalcap_msg_handler handler; }; icalcap_server *icalcap_server_new_rr(icalcap_auth_handler auth_cb, icalcap_chanup_handler chanup_cb, icalcap_msg_handler msg_cb); int icalcap_server_listen_rr(icalcap_server *cap, const char *hostname, const int port); int icalcap_server_run_rr(const icalcap_server *cap); int icalcap_server_shutdown_rr(icalcap_server *cap); #else #error "No implementation of icalcap found!" #endif #endif libical-1.0/src/libicalcap/icalcap.c0000664000076400007640000000111112132563127016341 0ustar allenallen#include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "icalcap.h" #include "icalcap_impl.h" #include "icalcap_session_impl.h" /* FIXME */ void icalcap_free(icalcap *cap) { #ifdef WITH_RR icalcap_free_rr(cap); #endif } int icalcap_stop(icalcap *cap) { #ifdef WITH_RR return icalcap_stop_rr(cap); #else return 0; #endif } const char * icalcap_get_username(const icalcap *cap) { #ifdef WITH_RR if (cap == NULL || cap->username == NULL) return NULL; return cap->username; #else return NULL; #endif } libical-1.0/src/libicalcap/icalcap.h0000664000076400007640000000227012132563127016355 0ustar allenallen#ifndef __ICALCAP_H__ #define __ICALCAP_H__ #include /* * Opaque objects */ typedef struct _icalcap icalcap; typedef struct _icalerror icalerror; typedef struct _icalcap_message icalcap_message; /* * Callback */ typedef int (*icalcap_msg_handler)(const icalcap_message *msg); /* * icalcap member functions */ void icalcap_free(icalcap *cap); int icalcap_stop(icalcap *cap); const char *icalcap_get_username(const icalcap *cap); /* * icalcap_message member functions */ struct _icalcap_message { icalcap *cap; int type; icalcomponent *comp; }; icalcap_message*icalcap_message_new(const icalcap *cap, const icalcomponent *comp); icalcap_message*icalcap_message_new_reply(const icalcap_message *capmsg, const icalcomponent *comp); void icalcap_message_free(icalcap_message *capmsg); int icalcap_message_reply_error(const icalcap_message *orig, enum icalrequeststatus status, const char *msg, const char *debug); int icalcap_message_reply_component(const icalcap_message *orig, icalcomponent *comp); int icalcap_message_send(icalcap_message *capmsg); icalcomponent *icalcap_message_sync_send(icalcap_message *capmsg, int timeout); #endif libical-1.0/src/libicalcap/CMakeLists.txt0000664000076400007640000000072112132563127017347 0ustar allenalleninclude_directories(${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/libical) ########### next target ############### set(client_SRCS client.c) add_executable(client ${client_SRCS}) target_link_libraries(client) ########### install files ############### install(FILES icalcap.h icalcap_impl.h icalcap_message_impl.h icalcap_server.h icalcap_server_impl.h icalcap_session.h icalcap_session_impl.h DESTINATION ${INCLUDE_INSTALL_DIR}/libicalcap ) libical-1.0/src/libicalcap/icalcap_session.c0000664000076400007640000000201612132563127020111 0ustar allenallen#include "config.h" #include "icalcap.h" #include "icalcap_session.h" #include "icalcap_session_impl.h" icalcap_session * icalcap_session_new(void) { #ifdef WITH_RR return icalcap_session_new_rr(); #else return NULL; #endif } int icalcap_session_connect(icalcap_session *sess, const char *hostname, const int _port) { int port = _port; if (port <= 0) port = 1026; #ifdef WITH_RR return icalcap_session_connect_rr(sess, hostname, port); #else return 0; #endif } int icalcap_session_login(icalcap_session *sess, const char *username, const char *authname, const char *password) { #ifdef WITH_RR return icalcap_session_login_rr(sess, username, authname, password); #else return 0; #endif } icalcap * icalcap_session_start(const icalcap_session *sess, icalcap_msg_handler handler) { #ifdef WITH_RR return icalcap_session_start_rr(sess, handler); #else return 0; #endif } int icalcap_session_disconnect(icalcap_session *sess) { #ifdef WITH_RR return icalcap_session_disconnect_rr(sess); #else return 0; #endif } libical-1.0/src/libicalcap/icalcap_server.h0000664000076400007640000000113612132563127017743 0ustar allenallen#ifndef __ICALCAP_SERVER_H__ #define __ICALCAP_SERVER_H__ #include "icalcap.h" typedef struct _icalcap_server icalcap_server; typedef int (*icalcap_auth_handler)(const icalcap *cap, const char *piggyback); typedef void (*icalcap_chanup_handler)(const icalcap *cap); icalcap_server*icalcap_server_new(icalcap_auth_handler auth_cb, icalcap_chanup_handler chanup_cb, icalcap_msg_handler msg_cb); int icalcap_server_listen(icalcap_server *cap, const char *hostname, const int port); int icalcap_server_run(const icalcap_server *cap); int icalcap_server_shutdown(icalcap_server *cap); #endif libical-1.0/src/libicalcap/icalcap_session_impl.h0000664000076400007640000000157312132563127021146 0ustar allenallen#ifndef __ICALCAP_SESSION_IMPL_H__ #define __ICALCAP_SESSION_IMPL_H__ #ifdef WITH_RR #include #include #include #include struct _icalcap_session { RRProfileRegistry *profreg; RRConnection *connection; RRCAPConfig *cfg; icalcap_msg_handler handler; char *username; }; icalcap_session*icalcap_session_new_rr(void); int icalcap_session_connect_rr(icalcap_session *cap, const char *hostname, const int port); int icalcap_session_login_rr(icalcap_session *cap, const char *username, const char *authname, const char *password); icalcap *icalcap_session_start_rr(const icalcap_session *cap, icalcap_msg_handler handler); int icalcap_session_disconnect_rr(icalcap_session *cap); #else #error "No implementation of icalcap found!" #endif #endif libical-1.0/src/libicalcap/icalcap_message.c0000664000076400007640000001067212132563127020061 0ustar allenallen#include "config.h" #ifdef HAVE_STRING_H #include #endif #include "ical.h" #include "icalcap.h" #include "icalcap_message_impl.h" /** * constructor * * Create a new icalcap_message from a component. This represents a command. */ icalcap_message * icalcap_message_new(const icalcap *cap, const icalcomponent *comp) { icalcap_message *ret = NULL; #ifdef WITH_RR ret = icalcap_message_new_rr(cap, comp); #else ret = NULL; #endif return ret; } /** * constructor * * Create a new icalcap_message from a component. This represents a reply. */ icalcap_message * icalcap_message_new_reply(const icalcap_message *capmsg, const icalcomponent *comp) { #ifdef WITH_RR return icalcap_message_new_reply_rr(capmsg, comp); #else return NULL; #endif } /** * destructor * * Delete icalcap_message */ void icalcap_message_free(icalcap_message *capmsg) { #ifdef WITH_RR icalcap_message_free_rr(capmsg); #else #endif } /** * Send the icalcap_message and wait for an answer. * The icalcap_message will be invalid after this call, and only valid call will be * icalcap_message_free(). */ icalcomponent * icalcap_message_sync_send(icalcap_message *capmsg, int timeout) { g_return_val_if_fail(capmsg, NULL); #ifdef WITH_RR return icalcap_message_sync_send_rr(capmsg, timeout); #else return NULL; #endif } /** * Send the icalcap_message. * The icalcap_message will be invalid after this call, and only valid call will be * icalcap_message_free(). */ int icalcap_message_send(icalcap_message *capmsg) { int rc = FALSE; char *str; g_return_val_if_fail(capmsg, FALSE); #ifdef WITH_RR rc = icalcap_message_send_reply_rr(capmsg); #else rc = FALSE; #endif return rc; } /** * Convenience method to send a component in reply to the given icalcap_message. * The icalcomponent is not modified in any way. * * FIXME should be const icalcomponent * */ int icalcap_message_reply_component(const icalcap_message *orig, icalcomponent *in) { icalcap_message*reply; int rc; reply = icalcap_message_new_reply(orig, in); if (reply == NULL) return FALSE; rc = icalcap_message_send(reply); icalcap_message_free(reply); return rc; } /* Only used by icalcap_message_reply_error */ static icalcomponent *new_reply_component(const icalcap_message *capmsg, const icalcomponent *comp); /** * Convenience method to send an error in reply to the given icalcap_message. */ int icalcap_message_reply_error(const icalcap_message *orig, enum icalrequeststatus status, const char *msg, const char *debug) { struct icalreqstattype stat; icalcomponent *comp, *vreply; int rc; /* Prepare the REQUEST-STATUS */ stat = icalreqstattype_from_string( icalenum_reqstat_code(status)); if (msg != NULL) { /* FIXME we used to do stat.desc = strdup(msg); but this created a memory leak. Maybe the destructor for reqstat? */ stat.desc = msg; } else { stat.desc = icalenum_reqstat_desc(status); } if (debug != NULL) stat.debug = debug; /* Prepare a VREPLY component */ vreply = icalcomponent_vanew( ICAL_VREPLY_COMPONENT, icalproperty_new_requeststatus(stat), 0); if (vreply == NULL) { /* FIXME */ return FALSE; } comp = new_reply_component(orig, vreply); rc = icalcap_message_reply_component(orig, comp); icalcomponent_free(comp); icalcomponent_free(vreply); return rc; } /* internal use */ /* only used by new_reply_component */ static const char * get_id(icalcomponent *comp) { icalproperty *prop; icalparameter *param; prop = icalcomponent_get_first_property(comp, ICAL_CMD_PROPERTY); if (prop == NULL) return NULL; param = icalproperty_get_first_parameter(prop, ICAL_ID_PARAMETER); if (param == NULL) return NULL; return icalparameter_get_id(param); } /* only used by icalcap_message_reply_error */ static icalcomponent * new_reply_component(const icalcap_message *capmsg, const icalcomponent *comp) { icalcomponent *clone, *cal, *root; icalproperty *cmd; const char *id; cmd = icalproperty_new_cmd(ICAL_CMD_REPLY); if (capmsg->comp != NULL) { id = get_id(capmsg->comp); if (id != NULL) icalproperty_add_parameter(cmd, icalparameter_new_id(id)); } cal = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalproperty_new_version("2.0"), icalproperty_new_prodid("-//I.Net spa//NONSGML//EN"), cmd, 0); if (comp != NULL) { clone = icalcomponent_new_clone(comp); icalcomponent_add_component(cal, clone); } root = icalcomponent_vanew( ICAL_XROOT_COMPONENT, cal, 0); return root; } libical-1.0/src/libicalcap/icalcap_message_impl.h0000664000076400007640000000146212132563127021104 0ustar allenallen#ifndef __ICALCAP_MESSAGE_IMPL_H__ #define __ICALCAP_MESSAGE_IMPL_H__ #ifdef WITH_RR #include #include #define ICALCAP_MESSAGE_CMD 1 #define ICALCAP_MESSAGE_REPLY 1 struct _icalcap_message_rr { const icalcap *cap; int type; icalcomponent *comp; RRFrame *frame; RRMessage *msg; }; icalcap_message*icalcap_message_new_rr(const icalcap *cap, const icalcomponent *comp); icalcap_message*icalcap_message_new_reply_rr(const icalcap_message *capmsg, const icalcomponent *comp); void icalcap_message_free_rr(icalcap_message *capmsg); int icalcap_message_send_reply_rr(icalcap_message *capmsg); icalcomponent *icalcap_message_sync_send_rr(icalcap_message *capmsg, int timeout); #else #error "No implementation of icalcap found!" #endif #endif libical-1.0/src/libicalcap/icalcap_server.c0000664000076400007640000000151412132563127017736 0ustar allenallen#include "config.h" #include "icalcap.h" #include "icalcap_server.h" #include "icalcap_server_impl.h" icalcap_server * icalcap_server_new(icalcap_auth_handler auth_cb, icalcap_chanup_handler chanup_cb, icalcap_msg_handler msg_cb) { #ifdef WITH_RR return icalcap_server_new_rr(auth_cb, chanup_cb, msg_cb); #else return NULL; #endif } int icalcap_server_listen(icalcap_server *cap, const char *hostname, const int _port) { int port = _port; if (port <= 0) port = 1026; #ifdef WITH_RR return icalcap_server_listen_rr(cap, hostname, port); #else return 0; #endif } int icalcap_server_run(const icalcap_server *cap) { #ifdef WITH_RR return icalcap_server_run_rr(cap); #else return 0; #endif } int icalcap_server_shutdown(icalcap_server *cap) { #ifdef WITH_RR return icalcap_server_shutdown_rr(cap); #else return 0; #endif } libical-1.0/src/Net-ICal-Libical/0000775000076400007640000000000012132563130015407 5ustar allenallenlibical-1.0/src/Net-ICal-Libical/Makefile.PL0000664000076400007640000000152312132563130017362 0ustar allenallen#!/usr/bin/perl # -*- Mode: perl -*- use ExtUtils::MakeMaker; WriteMakefile( 'MAKEFILE'=> 'Makefile', 'VERSION_FROM' => 'lib/Net/ICal/Libical.pm', 'NAME' => 'Net::ICal::Libical', 'INC' => '-I../libical -I ../libicalss', 'LIBS' => ['-L../libical/.libs -L../libicalss/.libs -lical -licalss -lm'], 'OBJECT' => 'netical_wrap.o', # Object files dist => { COMPRESS =>'gzip', SUFFIX =>'gz' }, ); sub MY::top_targets { my $self = shift; my $old = $self->MM::top_targets; return "all:: netical_wrap.o\n$old"; } sub MY::postamble { return <properties(); my $p; foreach $p (@props) { print $p->name()." ".$p->value()."\n"; } $inner = ($c->components())[0]; print "\n"; print " -------- Attendee \n"; $p = ($inner->properties('ATTENDEE'))[0]; print $p->as_ical_string(),"\n"; print $p->get_parameter('ROLE'),"\n"; die if $p->get_parameter('ROLE') ne 'REQ-PARTICIPANT'; $p->set_parameter('ROLE','INDIVIDUAL'); print $p->as_ical_string(),"\n"; print " -------- DTSTART \n"; $p = ($inner->properties('DTSTART'))[0]; print $p->as_ical_string()."\n"; print $p->as_ical_string()."\n"; print "hour: ". $p->hour()." \n"; $p->hour($p->hour() - 10); print $p->hour(),"\n"; $p->timezone('America/Los_Angeles'); print $p->as_ical_string()."\n"; print "----------- DURATION \n"; $p = ($inner->properties('DURATION'))[0]; print $p->as_ical_string()."\n"; print $p->seconds(),"\n"; $p->seconds(3630); print $p->as_ical_string()."\n"; print $p->seconds(),"\n"; libical-1.0/src/Net-ICal-Libical/MANIFEST0000664000076400007640000000043312132563130016540 0ustar allenallenMANIFEST Makefile.PL lib/Net/ICal/Libical.pm netical.i netical_wrap.c netical_wrap.doc test-data/2446.mime test-data/error test-data/mail-examples test-data/no-error test-data/rfc2445.ics test-data/rfc2446.ics test-data/single-with-error test/example.pl test/libical.pl test/swig.pl libical-1.0/src/Net-ICal-Libical/netical_wrap.c0000664000076400007640000030655712132563130020243 0ustar allenallen/* * FILE : netical_wrap.c * * This file was automatically generated by : * Simplified Wrapper and Interface Generator (SWIG) * Version 1.1 (Patch 5) * * Portions Copyright (c) 1995-1998 * The University of Utah and The Regents of the University of California. * Permission is granted to distribute this file in any manner provided * this notice remains intact. * * Do not make changes to this file--changes will be lost! * */ #define SWIGCODE /* Implementation : PERL 5 */ #define SWIGPERL #define SWIGPERL5 #ifdef __cplusplus #include #include extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #undef free #undef malloc #include #ifdef __cplusplus } #endif /* Definitions for compiling Perl extensions on a variety of machines */ #if defined(WIN32) || defined(__WIN32__) # if defined(_MSC_VER) # define SWIGEXPORT(a,b) __declspec(dllexport) a b # else # if defined(__BORLANDC__) # define SWIGEXPORT(a,b) a _export b # else # define SWIGEXPORT(a,b) a b # endif # endif #else # define SWIGEXPORT(a,b) a b #endif #ifdef PERL_OBJECT #define MAGIC_PPERL CPerl *pPerl = (CPerl *) this; #define MAGIC_CAST (int (CPerl::*)(SV *, MAGIC *)) #define SWIGCLASS_STATIC #else #define MAGIC_PPERL #define MAGIC_CAST #define SWIGCLASS_STATIC static #endif /***************************************************************************** * $Header: /tmp/freeassociation-cvsbackup/libical/src/Net-ICal-Libical/netical_wrap.c,v 1.6 2001-04-02 18:17:40 ebusboom Exp $ * * perl5ptr.swg * * This file contains supporting code for the SWIG run-time type checking * mechanism. The following functions are available : * * SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *)); * * Registers a new type-mapping with the type-checker. origtype is the * original datatype and newtype is an equivalent type. cast is optional * pointer to a function to cast pointer values between types (this * is only used to cast pointers from derived classes to base classes in C++) * * SWIG_MakePtr(char *buffer, void *ptr, char *typestring); * * Makes a pointer string from a pointer and typestring. The result is returned * in buffer. * * char * SWIG_GetPtr(SV *obj, void **ptr, char *type) * * Gets a pointer value from a Perl5 scalar value. If there is a * type-mismatch, returns a character string to the received type. * On success, returns NULL. * * * You can remap these functions by making a file called "swigptr.swg" in * your the same directory as the interface file you are wrapping. * * These functions are normally declared static, but this file can be * can be used in a multi-module environment by redefining the symbol * SWIGSTATIC. * * $Log: not supported by cvs2svn $ * Revision 1.1 1996/12/26 22:17:29 beazley * Initial revision * *****************************************************************************/ #include #ifdef SWIG_GLOBAL #ifdef __cplusplus #define SWIGSTATIC extern "C" #else #define SWIGSTATIC #endif #endif #ifndef SWIGSTATIC #define SWIGSTATIC static #endif /* These are internal variables. Should be static */ typedef struct SwigPtrType { char *name; int len; void *(*cast)(void *); struct SwigPtrType *next; } SwigPtrType; /* Pointer cache structure */ typedef struct { int stat; /* Status (valid) bit */ SwigPtrType *tp; /* Pointer to type structure */ char name[256]; /* Given datatype name */ char mapped[256]; /* Equivalent name */ } SwigCacheType; static int SwigPtrMax = 64; /* Max entries that can be currently held */ static int SwigPtrN = 0; /* Current number of entries */ static int SwigPtrSort = 0; /* Status flag indicating sort */ static SwigPtrType *SwigPtrTable = 0; /* Table containing pointer equivalences */ static int SwigStart[256]; /* Table containing starting positions */ /* Cached values */ #define SWIG_CACHESIZE 8 #define SWIG_CACHEMASK 0x7 static SwigCacheType SwigCache[SWIG_CACHESIZE]; static int SwigCacheIndex = 0; static int SwigLastCache = 0; /* Sort comparison function */ static int swigsort(const void *data1, const void *data2) { SwigPtrType *d1 = (SwigPtrType *) data1; SwigPtrType *d2 = (SwigPtrType *) data2; return strcmp(d1->name,d2->name); } /* Binary Search function */ static int swigcmp(const void *key, const void *data) { char *k = (char *) key; SwigPtrType *d = (SwigPtrType *) data; return strncmp(k,d->name,d->len); } /* Register a new datatype with the type-checker */ #ifndef PERL_OBJECT SWIGSTATIC void SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *)) { #else SWIGSTATIC #define SWIG_RegisterMapping(a,b,c) _SWIG_RegisterMapping(pPerl, a,b,c) void _SWIG_RegisterMapping(CPerl *pPerl, char *origtype, char *newtype, void *(*cast)(void *)) { #endif int i; SwigPtrType *t = 0, *t1; if (!SwigPtrTable) { SwigPtrTable = (SwigPtrType *) malloc(SwigPtrMax*sizeof(SwigPtrType)); SwigPtrN = 0; } if (SwigPtrN >= SwigPtrMax) { SwigPtrMax = 2*SwigPtrMax; SwigPtrTable = (SwigPtrType *) realloc(SwigPtrTable,SwigPtrMax*sizeof(SwigPtrType)); } for (i = 0; i < SwigPtrN; i++) if (strcmp(SwigPtrTable[i].name,origtype) == 0) { t = &SwigPtrTable[i]; break; } if (!t) { t = &SwigPtrTable[SwigPtrN]; t->name = origtype; t->len = strlen(t->name); t->cast = 0; t->next = 0; SwigPtrN++; } while (t->next) { if (strcmp(t->name,newtype) == 0) { if (cast) t->cast = cast; return; } t = t->next; } t1 = (SwigPtrType *) malloc(sizeof(SwigPtrType)); t1->name = newtype; t1->len = strlen(t1->name); t1->cast = cast; t1->next = 0; t->next = t1; SwigPtrSort = 0; } /* Make a pointer value string */ SWIGSTATIC void SWIG_MakePtr(char *_c, const void *_ptr, char *type) { static char _hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; unsigned long _p, _s; char _result[20], *_r; /* Note : a 64-bit hex number = 16 digits */ _r = _result; _p = (unsigned long) _ptr; if (_p > 0) { while (_p > 0) { _s = _p & 0xf; *(_r++) = _hex[_s]; _p = _p >> 4; } *_r = '_'; while (_r >= _result) *(_c++) = *(_r--); } else { strcpy (_c, "NULL"); } if (_ptr) strcpy (_c, type); } /* Define for backwards compatibility */ #define _swig_make_hex SWIG_MakePtr /* Function for getting a pointer value */ #ifndef PERL_OBJECT SWIGSTATIC char *SWIG_GetPtr(SV *sv, void **ptr, char *_t) #else SWIGSTATIC #define SWIG_GetPtr(a,b,c) _SWIG_GetPtr(pPerl,a,b,c) char *_SWIG_GetPtr(CPerl *pPerl, SV *sv, void **ptr, char *_t) #endif { char temp_type[256]; char *name,*_c; int len,i,start,end; IV tmp; SwigPtrType *sp,*tp; SwigCacheType *cache; /* If magical, apply more magic */ if (SvGMAGICAL(sv)) mg_get(sv); /* Check to see if this is an object */ if (sv_isobject(sv)) { SV *tsv = (SV*) SvRV(sv); if ((SvTYPE(tsv) == SVt_PVHV)) { MAGIC *mg; if (SvMAGICAL(tsv)) { mg = mg_find(tsv,'P'); if (mg) { SV *rsv = mg->mg_obj; if (sv_isobject(rsv)) { tmp = SvIV((SV*)SvRV(rsv)); } } } else { return "Not a valid pointer value"; } } else { tmp = SvIV((SV*)SvRV(sv)); } if (!_t) { *(ptr) = (void *) tmp; return (char *) 0; } } else if (sv == &sv_undef) { /* Check for undef */ *(ptr) = (void *) 0; return (char *) 0; } else if (SvTYPE(sv) == SVt_RV) { /* Check for NULL pointer */ *(ptr) = (void *) 0; if (!SvROK(sv)) return (char *) 0; else return "Not a valid pointer value"; } else { /* Don't know what it is */ *(ptr) = (void *) 0; return "Not a valid pointer value"; } if (_t) { /* Now see if the types match */ if (!sv_isa(sv,_t)) { _c = HvNAME(SvSTASH(SvRV(sv))); if (!SwigPtrSort) { qsort((void *) SwigPtrTable, SwigPtrN, sizeof(SwigPtrType), swigsort); for (i = 0; i < 256; i++) { SwigStart[i] = SwigPtrN; } for (i = SwigPtrN-1; i >= 0; i--) { SwigStart[SwigPtrTable[i].name[0]] = i; } for (i = 255; i >= 1; i--) { if (SwigStart[i-1] > SwigStart[i]) SwigStart[i-1] = SwigStart[i]; } SwigPtrSort = 1; for (i = 0; i < SWIG_CACHESIZE; i++) SwigCache[i].stat = 0; } /* First check cache for matches. Uses last cache value as starting point */ cache = &SwigCache[SwigLastCache]; for (i = 0; i < SWIG_CACHESIZE; i++) { if (cache->stat) { if (strcmp(_t,cache->name) == 0) { if (strcmp(_c,cache->mapped) == 0) { cache->stat++; *ptr = (void *) tmp; if (cache->tp->cast) *ptr = (*(cache->tp->cast))(*ptr); return (char *) 0; } } } SwigLastCache = (SwigLastCache+1) & SWIG_CACHEMASK; if (!SwigLastCache) cache = SwigCache; else cache++; } start = SwigStart[_t[0]]; end = SwigStart[_t[0]+1]; sp = &SwigPtrTable[start]; while (start < end) { if (swigcmp(_t,sp) == 0) break; sp++; start++; } if (start >= end) sp = 0; if (sp) { while (swigcmp(_t,sp) == 0) { name = sp->name; len = sp->len; tp = sp->next; while(tp) { if (tp->len >= 255) { return _c; } strcpy(temp_type,tp->name); strncat(temp_type,_t+len,255-tp->len); if (sv_isa(sv,temp_type)) { /* Get pointer value */ *ptr = (void *) tmp; if (tp->cast) *ptr = (*(tp->cast))(*ptr); strcpy(SwigCache[SwigCacheIndex].mapped,_c); strcpy(SwigCache[SwigCacheIndex].name,_t); SwigCache[SwigCacheIndex].stat = 1; SwigCache[SwigCacheIndex].tp = tp; SwigCacheIndex = SwigCacheIndex & SWIG_CACHEMASK; return (char *) 0; } tp = tp->next; } /* Hmmm. Didn't find it this time */ sp++; } } /* Didn't find any sort of match for this data. Get the pointer value and return the received type */ *ptr = (void *) tmp; return _c; } else { /* Found a match on the first try. Return pointer value */ *ptr = (void *) tmp; return (char *) 0; } } *ptr = (void *) tmp; return (char *) 0; } /* Compatibility mode */ #define _swig_get_hex SWIG_GetPtr /* Magic variable code */ #ifndef PERL_OBJECT #define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c) static void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *)) { #else #define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c) static void _swig_create_magic(CPerl *pPerl, SV *sv, char *name, int (CPerl::*set)(SV *, MAGIC *), int (CPerl::*get)(SV *, MAGIC *)) { #endif MAGIC *mg; sv_magic(sv,sv,'U',name,strlen(name)); mg = mg_find(sv,'U'); mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL)); mg->mg_virtual->svt_get = get; mg->mg_virtual->svt_set = set; mg->mg_virtual->svt_len = 0; mg->mg_virtual->svt_clear = 0; mg->mg_virtual->svt_free = 0; } #define SWIG_init boot_Net__ICal__Libical #define SWIG_name "Net::ICal::Libical::boot_Net__ICal__Libical" #define SWIG_varinit "Net::ICal::Libical::var_Net__ICal__Libical_init();" #ifdef __cplusplus extern "C" #endif #ifndef PERL_OBJECT SWIGEXPORT(void,boot_Net__ICal__Libical)(CV* cv); #else SWIGEXPORT(void,boot_Net__ICal__Libical)(CPerl *, CV *cv); #endif #include "ical.h" #include /* for size_t */ #include #ifndef PERL_OBJECT #define swig_setiv(a,b) _swig_setiv(a,b) static void _swig_setiv(char *name, long value) { #else #define swig_setiv(a,b) _swig_setiv(pPerl,a,b) static void _swig_setiv(CPerl *pPerl, char *name, long value) { #endif SV *sv; sv = perl_get_sv(name,TRUE | 0x2); sv_setiv(sv, (IV) value); SvREADONLY_on(sv); } #ifndef PERL_OBJECT #define swig_setpv(a,b) _swig_setpv(a,b) static void _swig_setpv(char *name, char *value) { #else #define swig_setpv(a,b) _swig_setpv(pPerl,a,b) static void _swig_setpv(CPerl *pPerl, char *name, char *value) { #endif SV *sv; sv = perl_get_sv(name,TRUE | 0x2); sv_setpv(sv, value); SvREADONLY_on(sv); } #ifdef PERL_OBJECT #define MAGIC_CLASS _wrap_Net__ICal__Libical_var:: class _wrap_Net__ICal__Libical_var : public CPerl { public: #else #define MAGIC_CLASS #endif SWIGCLASS_STATIC int swig_magic_readonly(SV *sv, MAGIC *mg) { MAGIC_PPERL sv = sv; mg = mg; croak("Value is read-only."); return 0; } #ifdef PERL_OBJECT }; #endif XS(_wrap_icalparser_parse_string) { icalcomponent * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalparser_parse_string(str);"); _arg0 = (char *) SvPV(ST(0),na); _result = (icalcomponent *)icalparser_parse_string(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_new) { icalcomponent * _result; icalcomponent_kind * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_new(kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalcomponent_kindPtr")) { croak("Type error in argument 1 of icalcomponent_new. Expected icalcomponent_kindPtr."); XSRETURN(1); } _result = (icalcomponent *)icalcomponent_new(*_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_new_clone) { icalcomponent * _result; icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_new_clone(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_new_clone. Expected icalcomponentPtr."); XSRETURN(1); } _result = (icalcomponent *)icalcomponent_new_clone(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_new_from_string) { icalcomponent * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_new_from_string(str);"); _arg0 = (char *) SvPV(ST(0),na); _result = (icalcomponent *)icalcomponent_new_from_string(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_as_ical_string) { char * _result; icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_as_ical_string(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_as_ical_string. Expected icalcomponentPtr."); XSRETURN(1); } _result = (char *)icalcomponent_as_ical_string(_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_free) { icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_free(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_free. Expected icalcomponentPtr."); XSRETURN(1); } icalcomponent_free(_arg0); XSRETURN(argvi); } XS(_wrap_icalcomponent_count_errors) { int _result; icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_count_errors(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_count_errors. Expected icalcomponentPtr."); XSRETURN(1); } _result = (int )icalcomponent_count_errors(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_strip_errors) { icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_strip_errors(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_strip_errors. Expected icalcomponentPtr."); XSRETURN(1); } icalcomponent_strip_errors(_arg0); XSRETURN(argvi); } XS(_wrap_icalcomponent_convert_errors) { icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_convert_errors(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_convert_errors. Expected icalcomponentPtr."); XSRETURN(1); } icalcomponent_convert_errors(_arg0); XSRETURN(argvi); } XS(_wrap_icalcomponent_get_current_property) { icalproperty * _result; icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_get_current_property(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_get_current_property. Expected icalcomponentPtr."); XSRETURN(1); } _result = (icalproperty *)icalcomponent_get_current_property(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_get_first_property) { icalproperty * _result; icalcomponent * _arg0; icalproperty_kind * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalcomponent_get_first_property(component,kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_get_first_property. Expected icalcomponentPtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"icalproperty_kindPtr")) { croak("Type error in argument 2 of icalcomponent_get_first_property. Expected icalproperty_kindPtr."); XSRETURN(1); } _result = (icalproperty *)icalcomponent_get_first_property(_arg0,*_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_get_next_property) { icalproperty * _result; icalcomponent * _arg0; icalproperty_kind * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalcomponent_get_next_property(component,kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_get_next_property. Expected icalcomponentPtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"icalproperty_kindPtr")) { croak("Type error in argument 2 of icalcomponent_get_next_property. Expected icalproperty_kindPtr."); XSRETURN(1); } _result = (icalproperty *)icalcomponent_get_next_property(_arg0,*_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_get_current_component) { icalcomponent * _result; icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_get_current_component(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_get_current_component. Expected icalcomponentPtr."); XSRETURN(1); } _result = (icalcomponent *)icalcomponent_get_current_component(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_get_first_component) { icalcomponent * _result; icalcomponent * _arg0; icalcomponent_kind * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalcomponent_get_first_component(component,kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_get_first_component. Expected icalcomponentPtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"icalcomponent_kindPtr")) { croak("Type error in argument 2 of icalcomponent_get_first_component. Expected icalcomponent_kindPtr."); XSRETURN(1); } _result = (icalcomponent *)icalcomponent_get_first_component(_arg0,*_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_get_next_component) { icalcomponent * _result; icalcomponent * _arg0; icalcomponent_kind * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalcomponent_get_next_component(component,kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_get_next_component. Expected icalcomponentPtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"icalcomponent_kindPtr")) { croak("Type error in argument 2 of icalcomponent_get_next_component. Expected icalcomponent_kindPtr."); XSRETURN(1); } _result = (icalcomponent *)icalcomponent_get_next_component(_arg0,*_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_add_property) { icalcomponent * _arg0; icalproperty * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalcomponent_add_property(component,property);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_add_property. Expected icalcomponentPtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,(char *) 0 )) { croak("Type error in argument 2 of icalcomponent_add_property. Expected icalpropertyPtr."); XSRETURN(1); } icalcomponent_add_property(_arg0,_arg1); XSRETURN(argvi); } XS(_wrap_icalcomponent_remove_property) { icalcomponent * _arg0; icalproperty * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalcomponent_remove_property(component,property);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_remove_property. Expected icalcomponentPtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,(char *) 0 )) { croak("Type error in argument 2 of icalcomponent_remove_property. Expected icalpropertyPtr."); XSRETURN(1); } icalcomponent_remove_property(_arg0,_arg1); XSRETURN(argvi); } XS(_wrap_icalcomponent_get_parent) { icalcomponent * _result; icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_get_parent(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_get_parent. Expected icalcomponentPtr."); XSRETURN(1); } _result = (icalcomponent *)icalcomponent_get_parent(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalcomponent_isa) { icalcomponent_kind * _result; icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalcomponent_isa(component);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalcomponent_isa. Expected icalcomponentPtr."); XSRETURN(1); } _result = (icalcomponent_kind *) malloc(sizeof(icalcomponent_kind )); *(_result) = icalcomponent_isa(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponent_kindPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalrestriction_check) { int _result; icalcomponent * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalrestriction_check(comp);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalrestriction_check. Expected icalcomponentPtr."); XSRETURN(1); } _result = (int )icalrestriction_check(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icalproperty_string_to_kind) { int _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalproperty_string_to_kind(string);"); _arg0 = (char *) SvPV(ST(0),na); _result = (int )icalproperty_string_to_kind(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icalproperty_new) { icalproperty * _result; int _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalproperty_new(kind);"); _arg0 = (int )SvIV(ST(0)); _result = (icalproperty *)icalproperty_new(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalproperty_new_from_string) { icalproperty * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalproperty_new_from_string(str);"); _arg0 = (char *) SvPV(ST(0),na); _result = (icalproperty *)icalproperty_new_from_string(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalproperty_as_ical_string) { char * _result; icalproperty * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalproperty_as_ical_string(prop);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalproperty_as_ical_string. Expected icalpropertyPtr."); XSRETURN(1); } _result = (char *)icalproperty_as_ical_string(_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalproperty_set_parameter_from_string) { icalproperty * _arg0; char * _arg1; char * _arg2; int argvi = 0; dXSARGS ; cv = cv; if ((items < 3) || (items > 3)) croak("Usage: icalproperty_set_parameter_from_string(prop,name,value);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalproperty_set_parameter_from_string. Expected icalpropertyPtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _arg2 = (char *) SvPV(ST(2),na); icalproperty_set_parameter_from_string(_arg0,_arg1,_arg2); XSRETURN(argvi); } XS(_wrap_icalproperty_set_value_from_string) { icalproperty * _arg0; char * _arg1; char * _arg2; int argvi = 0; dXSARGS ; cv = cv; if ((items < 3) || (items > 3)) croak("Usage: icalproperty_set_value_from_string(prop,value,kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalproperty_set_value_from_string. Expected icalpropertyPtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _arg2 = (char *) SvPV(ST(2),na); icalproperty_set_value_from_string(_arg0,_arg1,_arg2); XSRETURN(argvi); } XS(_wrap_icalproperty_get_value_as_string) { char * _result; icalproperty * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalproperty_get_value_as_string(prop);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalproperty_get_value_as_string. Expected icalpropertyPtr."); XSRETURN(1); } _result = (char *)icalproperty_get_value_as_string(_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalproperty_get_parameter_as_string) { char * _result; icalproperty * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalproperty_get_parameter_as_string(prop,name);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalproperty_get_parameter_as_string. Expected icalpropertyPtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (char *)icalproperty_get_parameter_as_string(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalproperty_get_parent) { icalcomponent * _result; icalproperty * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalproperty_get_parent(property);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icalproperty_get_parent. Expected icalpropertyPtr."); XSRETURN(1); } _result = (icalcomponent *)icalproperty_get_parent(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalerror_set_error_state) { icalerrorenum _arg0; icalerrorstate _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalerror_set_error_state(error,icalerrorstate );"); _arg0 = (icalerrorenum )SvIV(ST(0)); _arg1 = (icalerrorstate )SvIV(ST(1)); icalerror_set_error_state(_arg0,_arg1); XSRETURN(argvi); } XS(_wrap_icalerror_get_error_state) { icalerrorstate _result; icalerrorenum _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalerror_get_error_state(error);"); _arg0 = (icalerrorenum )SvIV(ST(0)); _result = (icalerrorstate )icalerror_get_error_state(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icalenum_property_kind_to_string) { char * _result; icalproperty_kind * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalenum_property_kind_to_string(kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalproperty_kindPtr")) { croak("Type error in argument 1 of icalenum_property_kind_to_string. Expected icalproperty_kindPtr."); XSRETURN(1); } _result = (char *)icalenum_property_kind_to_string(*_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalenum_string_to_property_kind) { icalproperty_kind * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalenum_string_to_property_kind(string);"); _arg0 = (char *) SvPV(ST(0),na); _result = (icalproperty_kind *) malloc(sizeof(icalproperty_kind )); *(_result) = icalenum_string_to_property_kind(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalproperty_kindPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalenum_value_kind_to_string) { char * _result; icalvalue_kind * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalenum_value_kind_to_string(kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalvalue_kindPtr")) { croak("Type error in argument 1 of icalenum_value_kind_to_string. Expected icalvalue_kindPtr."); XSRETURN(1); } _result = (char *)icalenum_value_kind_to_string(*_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalenum_parameter_kind_to_string) { char * _result; icalparameter_kind * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalenum_parameter_kind_to_string(kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalparameter_kindPtr")) { croak("Type error in argument 1 of icalenum_parameter_kind_to_string. Expected icalparameter_kindPtr."); XSRETURN(1); } _result = (char *)icalenum_parameter_kind_to_string(*_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalenum_string_to_parameter_kind) { icalparameter_kind * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalenum_string_to_parameter_kind(string);"); _arg0 = (char *) SvPV(ST(0),na); _result = (icalparameter_kind *) malloc(sizeof(icalparameter_kind )); *(_result) = icalenum_string_to_parameter_kind(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalparameter_kindPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalenum_component_kind_to_string) { char * _result; icalcomponent_kind * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalenum_component_kind_to_string(kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalcomponent_kindPtr")) { croak("Type error in argument 1 of icalenum_component_kind_to_string. Expected icalcomponent_kindPtr."); XSRETURN(1); } _result = (char *)icalenum_component_kind_to_string(*_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalenum_string_to_component_kind) { icalcomponent_kind * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalenum_string_to_component_kind(string);"); _arg0 = (char *) SvPV(ST(0),na); _result = (icalcomponent_kind *) malloc(sizeof(icalcomponent_kind )); *(_result) = icalenum_string_to_component_kind(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponent_kindPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalenum_property_kind_to_value_kind) { icalvalue_kind * _result; icalproperty_kind * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalenum_property_kind_to_value_kind(kind);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalproperty_kindPtr")) { croak("Type error in argument 1 of icalenum_property_kind_to_value_kind. Expected icalproperty_kindPtr."); XSRETURN(1); } _result = (icalvalue_kind *) malloc(sizeof(icalvalue_kind )); *(_result) = icalenum_property_kind_to_value_kind(*_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalvalue_kindPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icallangbind_new_array) { int * _result; int _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icallangbind_new_array(size);"); _arg0 = (int )SvIV(ST(0)); _result = (int *)icallangbind_new_array(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"intPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icallangbind_free_array) { int * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icallangbind_free_array(array);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"intPtr")) { croak("Type error in argument 1 of icallangbind_free_array. Expected intPtr."); XSRETURN(1); } icallangbind_free_array(_arg0); XSRETURN(argvi); } XS(_wrap_icallangbind_access_array) { int _result; int * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icallangbind_access_array(array,index);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"intPtr")) { croak("Type error in argument 1 of icallangbind_access_array. Expected intPtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icallangbind_access_array(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icalrecur_expand_recurrence) { int _result; char * _arg0; int _arg1; int _arg2; int * _arg3; int argvi = 0; dXSARGS ; cv = cv; if ((items < 4) || (items > 4)) croak("Usage: icalrecur_expand_recurrence(rule,start,count,array);"); _arg0 = (char *) SvPV(ST(0),na); _arg1 = (int )SvIV(ST(1)); _arg2 = (int )SvIV(ST(2)); if (SWIG_GetPtr(ST(3),(void **) &_arg3,"intPtr")) { croak("Type error in argument 4 of icalrecur_expand_recurrence. Expected intPtr."); XSRETURN(1); } _result = (int )icalrecur_expand_recurrence(_arg0,_arg1,_arg2,_arg3); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icallangbind_get_first_property) { icalproperty * _result; icalcomponent * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icallangbind_get_first_property(c,prop);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icallangbind_get_first_property. Expected icalcomponentPtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (icalproperty *)icallangbind_get_first_property(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icallangbind_get_next_property) { icalproperty * _result; icalcomponent * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icallangbind_get_next_property(c,prop);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icallangbind_get_next_property. Expected icalcomponentPtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (icalproperty *)icallangbind_get_next_property(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icallangbind_get_first_component) { icalcomponent * _result; icalcomponent * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icallangbind_get_first_component(c,comp);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icallangbind_get_first_component. Expected icalcomponentPtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (icalcomponent *)icallangbind_get_first_component(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icallangbind_get_next_component) { icalcomponent * _result; icalcomponent * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icallangbind_get_next_component(c,comp);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icallangbind_get_next_component. Expected icalcomponentPtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (icalcomponent *)icallangbind_get_next_component(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icallangbind_property_eval_string) { char * _result; icalproperty * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icallangbind_property_eval_string(prop,sep);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) { croak("Type error in argument 1 of icallangbind_property_eval_string. Expected icalpropertyPtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (char *)icallangbind_property_eval_string(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_from_timet) { struct icaltimetype * _result; int _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_from_timet(v,is_date);"); _arg0 = (int )SvIV(ST(0)); _arg1 = (int )SvIV(ST(1)); _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype )); *(_result) = icaltime_from_timet(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_as_timet) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_as_timet(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_as_timet. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltime_as_timet(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_as_ical_string) { char * _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_as_ical_string(tt);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_as_ical_string. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (char *)icaltime_as_ical_string(*_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_from_string) { struct icaltimetype * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_from_string(str);"); _arg0 = (char *) SvPV(ST(0),na); _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype )); *(_result) = icaltime_from_string(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_utc_offset) { int _result; struct icaltimetype * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_utc_offset(tt,tzid);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_utc_offset. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (int )icaltime_utc_offset(*_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_as_utc) { struct icaltimetype * _result; struct icaltimetype * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_as_utc(tt,tzid);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_as_utc. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype )); *(_result) = icaltime_as_utc(*_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_as_zone) { struct icaltimetype * _result; struct icaltimetype * _arg0; char * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_as_zone(tt,tzid);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_as_zone. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (char *) SvPV(ST(1),na); _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype )); *(_result) = icaltime_as_zone(*_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_null_time) { struct icaltimetype * _result; int argvi = 0; dXSARGS ; cv = cv; if ((items < 0) || (items > 0)) croak("Usage: icaltime_null_time();"); _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype )); *(_result) = icaltime_null_time(); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_is_null_time) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_is_null_time(t);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_is_null_time. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltime_is_null_time(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_is_valid_time) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_is_valid_time(t);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_is_valid_time. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltime_is_valid_time(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_normalize) { struct icaltimetype * _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_normalize(t);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_normalize. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype )); *(_result) = icaltime_normalize(*_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_day_of_year) { short _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_day_of_year(t);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_day_of_year. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (short )icaltime_day_of_year(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_from_day_of_year) { struct icaltimetype * _result; short _arg0; short _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_from_day_of_year(doy,year);"); _arg0 = (short )SvIV(ST(0)); _arg1 = (short )SvIV(ST(1)); _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype )); *(_result) = icaltime_from_day_of_year(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_day_of_week) { short _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_day_of_week(t);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_day_of_week. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (short )icaltime_day_of_week(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_start_doy_of_week) { short _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_start_doy_of_week(t);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_start_doy_of_week. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (short )icaltime_start_doy_of_week(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_as_ctime) { char * _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_as_ctime(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_as_ctime. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (char *)icaltime_as_ctime(*_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_week_number) { short _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltime_week_number(t);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_week_number. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (short )icaltime_week_number(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_compare) { int _result; struct icaltimetype * _arg0; struct icaltimetype * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_compare(a,b);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_compare. Expected struct icaltimetypePtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) { croak("Type error in argument 2 of icaltime_compare. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltime_compare(*_arg0,*_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_compare_date_only) { int _result; struct icaltimetype * _arg0; struct icaltimetype * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_compare_date_only(a,b);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_compare_date_only. Expected struct icaltimetypePtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) { croak("Type error in argument 2 of icaltime_compare_date_only. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltime_compare_date_only(*_arg0,*_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_days_in_month) { short _result; short _arg0; short _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_days_in_month(month,year);"); _arg0 = (short )SvIV(ST(0)); _arg1 = (short )SvIV(ST(1)); _result = (short )icaltime_days_in_month(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaldurationtype_from_int) { struct icaldurationtype * _result; int _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_from_int(t);"); _arg0 = (int )SvIV(ST(0)); _result = (struct icaldurationtype *) malloc(sizeof(struct icaldurationtype )); *(_result) = icaldurationtype_from_int(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaldurationtype_from_string) { struct icaldurationtype * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_from_string(char *);"); _arg0 = (char *) SvPV(ST(0),na); _result = (struct icaldurationtype *) malloc(sizeof(struct icaldurationtype )); *(_result) = icaldurationtype_from_string(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaldurationtype_as_int) { int _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_as_int(duration);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_as_int. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (int )icaldurationtype_as_int(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaldurationtype_as_ical_string) { char * _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_as_ical_string(d);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_as_ical_string. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (char *)icaldurationtype_as_ical_string(*_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icaldurationtype_null_duration) { struct icaldurationtype * _result; int argvi = 0; dXSARGS ; cv = cv; if ((items < 0) || (items > 0)) croak("Usage: icaldurationtype_null_duration();"); _result = (struct icaldurationtype *) malloc(sizeof(struct icaldurationtype )); *(_result) = icaldurationtype_null_duration(); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaldurationtype_is_null_duration) { int _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_is_null_duration(d);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_is_null_duration. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (int )icaldurationtype_is_null_duration(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icaltime_add) { struct icaltimetype * _result; struct icaltimetype * _arg0; struct icaldurationtype * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_add(t,d);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_add. Expected struct icaltimetypePtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaldurationtypePtr")) { croak("Type error in argument 2 of icaltime_add. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype )); *(_result) = icaltime_add(*_arg0,*_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icaltime_subtract) { struct icaldurationtype * _result; struct icaltimetype * _arg0; struct icaltimetype * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltime_subtract(t1,t2);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltime_subtract. Expected struct icaltimetypePtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) { croak("Type error in argument 2 of icaltime_subtract. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (struct icaldurationtype *) malloc(sizeof(struct icaldurationtype )); *(_result) = icaltime_subtract(*_arg0,*_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalperiodtype_from_string) { struct icalperiodtype * _result; char * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalperiodtype_from_string(str);"); _arg0 = (char *) SvPV(ST(0),na); _result = (struct icalperiodtype *) malloc(sizeof(struct icalperiodtype )); *(_result) = icalperiodtype_from_string(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icalperiodtypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalperiodtype_as_ical_string) { char * _result; struct icalperiodtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalperiodtype_as_ical_string(p);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_as_ical_string. Expected struct icalperiodtypePtr."); XSRETURN(1); } _result = (char *)icalperiodtype_as_ical_string(*_arg0); ST(argvi) = sv_newmortal(); sv_setpv((SV*)ST(argvi++),(char *) _result); XSRETURN(argvi); } XS(_wrap_icalperiodtype_null_period) { struct icalperiodtype * _result; int argvi = 0; dXSARGS ; cv = cv; if ((items < 0) || (items > 0)) croak("Usage: icalperiodtype_null_period();"); _result = (struct icalperiodtype *) malloc(sizeof(struct icalperiodtype )); *(_result) = icalperiodtype_null_period(); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icalperiodtypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_icalperiodtype_is_null_period) { int _result; struct icalperiodtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalperiodtype_is_null_period(p);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_is_null_period. Expected struct icalperiodtypePtr."); XSRETURN(1); } _result = (int )icalperiodtype_is_null_period(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } XS(_wrap_icalperiodtype_is_valid_period) { int _result; struct icalperiodtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalperiodtype_is_valid_period(p);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_is_valid_period. Expected struct icalperiodtypePtr."); XSRETURN(1); } _result = (int )icalperiodtype_is_valid_period(*_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_year_set(_swigobj,_swigval) (_swigobj->year = _swigval,_swigval) XS(_wrap_icaltimetype_year_set) { int _result; struct icaltimetype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltimetype_year_set(struct icaltimetype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_year_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaltimetype_year_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_year_get(_swigobj) ((int ) _swigobj->year) XS(_wrap_icaltimetype_year_get) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltimetype_year_get(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_year_get. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltimetype_year_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_month_set(_swigobj,_swigval) (_swigobj->month = _swigval,_swigval) XS(_wrap_icaltimetype_month_set) { int _result; struct icaltimetype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltimetype_month_set(struct icaltimetype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_month_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaltimetype_month_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_month_get(_swigobj) ((int ) _swigobj->month) XS(_wrap_icaltimetype_month_get) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltimetype_month_get(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_month_get. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltimetype_month_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_day_set(_swigobj,_swigval) (_swigobj->day = _swigval,_swigval) XS(_wrap_icaltimetype_day_set) { int _result; struct icaltimetype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltimetype_day_set(struct icaltimetype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_day_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaltimetype_day_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_day_get(_swigobj) ((int ) _swigobj->day) XS(_wrap_icaltimetype_day_get) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltimetype_day_get(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_day_get. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltimetype_day_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_hour_set(_swigobj,_swigval) (_swigobj->hour = _swigval,_swigval) XS(_wrap_icaltimetype_hour_set) { int _result; struct icaltimetype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltimetype_hour_set(struct icaltimetype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_hour_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaltimetype_hour_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_hour_get(_swigobj) ((int ) _swigobj->hour) XS(_wrap_icaltimetype_hour_get) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltimetype_hour_get(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_hour_get. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltimetype_hour_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_minute_set(_swigobj,_swigval) (_swigobj->minute = _swigval,_swigval) XS(_wrap_icaltimetype_minute_set) { int _result; struct icaltimetype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltimetype_minute_set(struct icaltimetype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_minute_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaltimetype_minute_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_minute_get(_swigobj) ((int ) _swigobj->minute) XS(_wrap_icaltimetype_minute_get) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltimetype_minute_get(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_minute_get. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltimetype_minute_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_second_set(_swigobj,_swigval) (_swigobj->second = _swigval,_swigval) XS(_wrap_icaltimetype_second_set) { int _result; struct icaltimetype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltimetype_second_set(struct icaltimetype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_second_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaltimetype_second_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_second_get(_swigobj) ((int ) _swigobj->second) XS(_wrap_icaltimetype_second_get) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltimetype_second_get(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_second_get. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltimetype_second_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_is_utc_set(_swigobj,_swigval) (_swigobj->is_utc = _swigval,_swigval) XS(_wrap_icaltimetype_is_utc_set) { int _result; struct icaltimetype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltimetype_is_utc_set(struct icaltimetype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_is_utc_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaltimetype_is_utc_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_is_utc_get(_swigobj) ((int ) _swigobj->is_utc) XS(_wrap_icaltimetype_is_utc_get) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltimetype_is_utc_get(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_is_utc_get. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltimetype_is_utc_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_is_date_set(_swigobj,_swigval) (_swigobj->is_date = _swigval,_swigval) XS(_wrap_icaltimetype_is_date_set) { int _result; struct icaltimetype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaltimetype_is_date_set(struct icaltimetype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_is_date_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaltimetype_is_date_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaltimetype_is_date_get(_swigobj) ((int ) _swigobj->is_date) XS(_wrap_icaltimetype_is_date_get) { int _result; struct icaltimetype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaltimetype_is_date_get(struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) { croak("Type error in argument 1 of icaltimetype_is_date_get. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (int )icaltimetype_is_date_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_is_neg_set(_swigobj,_swigval) (_swigobj->is_neg = _swigval,_swigval) XS(_wrap_icaldurationtype_is_neg_set) { int _result; struct icaldurationtype * _arg0; int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaldurationtype_is_neg_set(struct icaldurationtype *,int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_is_neg_set. Expected struct icaldurationtypePtr."); XSRETURN(1); } _arg1 = (int )SvIV(ST(1)); _result = (int )icaldurationtype_is_neg_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_is_neg_get(_swigobj) ((int ) _swigobj->is_neg) XS(_wrap_icaldurationtype_is_neg_get) { int _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_is_neg_get(struct icaldurationtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_is_neg_get. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (int )icaldurationtype_is_neg_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_days_set(_swigobj,_swigval) (_swigobj->days = _swigval,_swigval) XS(_wrap_icaldurationtype_days_set) { unsigned int _result; struct icaldurationtype * _arg0; unsigned int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaldurationtype_days_set(struct icaldurationtype *,unsigned int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_days_set. Expected struct icaldurationtypePtr."); XSRETURN(1); } _arg1 = (unsigned int )SvIV(ST(1)); _result = (unsigned int )icaldurationtype_days_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_days_get(_swigobj) ((unsigned int ) _swigobj->days) XS(_wrap_icaldurationtype_days_get) { unsigned int _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_days_get(struct icaldurationtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_days_get. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (unsigned int )icaldurationtype_days_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_weeks_set(_swigobj,_swigval) (_swigobj->weeks = _swigval,_swigval) XS(_wrap_icaldurationtype_weeks_set) { unsigned int _result; struct icaldurationtype * _arg0; unsigned int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaldurationtype_weeks_set(struct icaldurationtype *,unsigned int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_weeks_set. Expected struct icaldurationtypePtr."); XSRETURN(1); } _arg1 = (unsigned int )SvIV(ST(1)); _result = (unsigned int )icaldurationtype_weeks_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_weeks_get(_swigobj) ((unsigned int ) _swigobj->weeks) XS(_wrap_icaldurationtype_weeks_get) { unsigned int _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_weeks_get(struct icaldurationtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_weeks_get. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (unsigned int )icaldurationtype_weeks_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_hours_set(_swigobj,_swigval) (_swigobj->hours = _swigval,_swigval) XS(_wrap_icaldurationtype_hours_set) { unsigned int _result; struct icaldurationtype * _arg0; unsigned int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaldurationtype_hours_set(struct icaldurationtype *,unsigned int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_hours_set. Expected struct icaldurationtypePtr."); XSRETURN(1); } _arg1 = (unsigned int )SvIV(ST(1)); _result = (unsigned int )icaldurationtype_hours_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_hours_get(_swigobj) ((unsigned int ) _swigobj->hours) XS(_wrap_icaldurationtype_hours_get) { unsigned int _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_hours_get(struct icaldurationtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_hours_get. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (unsigned int )icaldurationtype_hours_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_minutes_set(_swigobj,_swigval) (_swigobj->minutes = _swigval,_swigval) XS(_wrap_icaldurationtype_minutes_set) { unsigned int _result; struct icaldurationtype * _arg0; unsigned int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaldurationtype_minutes_set(struct icaldurationtype *,unsigned int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_minutes_set. Expected struct icaldurationtypePtr."); XSRETURN(1); } _arg1 = (unsigned int )SvIV(ST(1)); _result = (unsigned int )icaldurationtype_minutes_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_minutes_get(_swigobj) ((unsigned int ) _swigobj->minutes) XS(_wrap_icaldurationtype_minutes_get) { unsigned int _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_minutes_get(struct icaldurationtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_minutes_get. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (unsigned int )icaldurationtype_minutes_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_seconds_set(_swigobj,_swigval) (_swigobj->seconds = _swigval,_swigval) XS(_wrap_icaldurationtype_seconds_set) { unsigned int _result; struct icaldurationtype * _arg0; unsigned int _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icaldurationtype_seconds_set(struct icaldurationtype *,unsigned int );"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_seconds_set. Expected struct icaldurationtypePtr."); XSRETURN(1); } _arg1 = (unsigned int )SvIV(ST(1)); _result = (unsigned int )icaldurationtype_seconds_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icaldurationtype_seconds_get(_swigobj) ((unsigned int ) _swigobj->seconds) XS(_wrap_icaldurationtype_seconds_get) { unsigned int _result; struct icaldurationtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icaldurationtype_seconds_get(struct icaldurationtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) { croak("Type error in argument 1 of icaldurationtype_seconds_get. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (unsigned int )icaldurationtype_seconds_get(_arg0); ST(argvi) = sv_newmortal(); sv_setiv(ST(argvi++),(IV) _result); XSRETURN(argvi); } #define icalperiodtype_start_set(_swigobj,_swigval) (_swigobj->start = *(_swigval),_swigval) XS(_wrap_icalperiodtype_start_set) { struct icaltimetype * _result; struct icalperiodtype * _arg0; struct icaltimetype * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalperiodtype_start_set(struct icalperiodtype *,struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_start_set. Expected struct icalperiodtypePtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) { croak("Type error in argument 2 of icalperiodtype_start_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (struct icaltimetype *)icalperiodtype_start_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } #define icalperiodtype_start_get(_swigobj) (&_swigobj->start) XS(_wrap_icalperiodtype_start_get) { struct icaltimetype * _result; struct icalperiodtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalperiodtype_start_get(struct icalperiodtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_start_get. Expected struct icalperiodtypePtr."); XSRETURN(1); } _result = (struct icaltimetype *)icalperiodtype_start_get(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } #define icalperiodtype_end_set(_swigobj,_swigval) (_swigobj->end = *(_swigval),_swigval) XS(_wrap_icalperiodtype_end_set) { struct icaltimetype * _result; struct icalperiodtype * _arg0; struct icaltimetype * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalperiodtype_end_set(struct icalperiodtype *,struct icaltimetype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_end_set. Expected struct icalperiodtypePtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) { croak("Type error in argument 2 of icalperiodtype_end_set. Expected struct icaltimetypePtr."); XSRETURN(1); } _result = (struct icaltimetype *)icalperiodtype_end_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } #define icalperiodtype_end_get(_swigobj) (&_swigobj->end) XS(_wrap_icalperiodtype_end_get) { struct icaltimetype * _result; struct icalperiodtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalperiodtype_end_get(struct icalperiodtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_end_get. Expected struct icalperiodtypePtr."); XSRETURN(1); } _result = (struct icaltimetype *)icalperiodtype_end_get(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result); XSRETURN(argvi); } #define icalperiodtype_duration_set(_swigobj,_swigval) (_swigobj->duration = *(_swigval),_swigval) XS(_wrap_icalperiodtype_duration_set) { struct icaldurationtype * _result; struct icalperiodtype * _arg0; struct icaldurationtype * _arg1; int argvi = 0; dXSARGS ; cv = cv; if ((items < 2) || (items > 2)) croak("Usage: icalperiodtype_duration_set(struct icalperiodtype *,struct icaldurationtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_duration_set. Expected struct icalperiodtypePtr."); XSRETURN(1); } if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaldurationtypePtr")) { croak("Type error in argument 2 of icalperiodtype_duration_set. Expected struct icaldurationtypePtr."); XSRETURN(1); } _result = (struct icaldurationtype *)icalperiodtype_duration_set(_arg0,_arg1); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result); XSRETURN(argvi); } #define icalperiodtype_duration_get(_swigobj) (&_swigobj->duration) XS(_wrap_icalperiodtype_duration_get) { struct icaldurationtype * _result; struct icalperiodtype * _arg0; int argvi = 0; dXSARGS ; cv = cv; if ((items < 1) || (items > 1)) croak("Usage: icalperiodtype_duration_get(struct icalperiodtype *);"); if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) { croak("Type error in argument 1 of icalperiodtype_duration_get. Expected struct icalperiodtypePtr."); XSRETURN(1); } _result = (struct icaldurationtype *)icalperiodtype_duration_get(_arg0); ST(argvi) = sv_newmortal(); sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result); XSRETURN(argvi); } XS(_wrap_perl5_Net__ICal__Libical_var_init) { dXSARGS; SV *sv; cv = cv; items = items; swig_setiv("ICAL_BADARG_ERROR", (long) ICAL_BADARG_ERROR); swig_setiv("ICAL_NEWFAILED_ERROR", (long) ICAL_NEWFAILED_ERROR); swig_setiv("ICAL_MALFORMEDDATA_ERROR", (long) ICAL_MALFORMEDDATA_ERROR); swig_setiv("ICAL_PARSE_ERROR", (long) ICAL_PARSE_ERROR); swig_setiv("ICAL_INTERNAL_ERROR", (long) ICAL_INTERNAL_ERROR); swig_setiv("ICAL_FILE_ERROR", (long) ICAL_FILE_ERROR); swig_setiv("ICAL_ALLOCATION_ERROR", (long) ICAL_ALLOCATION_ERROR); swig_setiv("ICAL_USAGE_ERROR", (long) ICAL_USAGE_ERROR); swig_setiv("ICAL_NO_ERROR", (long) ICAL_NO_ERROR); swig_setiv("ICAL_UNKNOWN_ERROR", (long) ICAL_UNKNOWN_ERROR); swig_setiv("ICAL_ERROR_FATAL", (long) ICAL_ERROR_FATAL); swig_setiv("ICAL_ERROR_NONFATAL", (long) ICAL_ERROR_NONFATAL); swig_setiv("ICAL_ERROR_DEFAULT", (long) ICAL_ERROR_DEFAULT); swig_setiv("ICAL_ERROR_UNKNOWN", (long) ICAL_ERROR_UNKNOWN); swig_setpv("icaltimetype_zone", "icaltimetype::zone"); XSRETURN(1); } #ifdef __cplusplus extern "C" #endif XS(boot_Net__ICal__Libical) { dXSARGS; char *file = __FILE__; cv = cv; items = items; newXS("Net::ICal::Libical::var_Net__ICal__Libical_init", _wrap_perl5_Net__ICal__Libical_var_init, file); newXS("Net::ICal::Libical::icalparser_parse_string", _wrap_icalparser_parse_string, file); newXS("Net::ICal::Libical::icalcomponent_new", _wrap_icalcomponent_new, file); newXS("Net::ICal::Libical::icalcomponent_new_clone", _wrap_icalcomponent_new_clone, file); newXS("Net::ICal::Libical::icalcomponent_new_from_string", _wrap_icalcomponent_new_from_string, file); newXS("Net::ICal::Libical::icalcomponent_as_ical_string", _wrap_icalcomponent_as_ical_string, file); newXS("Net::ICal::Libical::icalcomponent_free", _wrap_icalcomponent_free, file); newXS("Net::ICal::Libical::icalcomponent_count_errors", _wrap_icalcomponent_count_errors, file); newXS("Net::ICal::Libical::icalcomponent_strip_errors", _wrap_icalcomponent_strip_errors, file); newXS("Net::ICal::Libical::icalcomponent_convert_errors", _wrap_icalcomponent_convert_errors, file); newXS("Net::ICal::Libical::icalcomponent_get_current_property", _wrap_icalcomponent_get_current_property, file); newXS("Net::ICal::Libical::icalcomponent_get_first_property", _wrap_icalcomponent_get_first_property, file); newXS("Net::ICal::Libical::icalcomponent_get_next_property", _wrap_icalcomponent_get_next_property, file); newXS("Net::ICal::Libical::icalcomponent_get_current_component", _wrap_icalcomponent_get_current_component, file); newXS("Net::ICal::Libical::icalcomponent_get_first_component", _wrap_icalcomponent_get_first_component, file); newXS("Net::ICal::Libical::icalcomponent_get_next_component", _wrap_icalcomponent_get_next_component, file); newXS("Net::ICal::Libical::icalcomponent_add_property", _wrap_icalcomponent_add_property, file); newXS("Net::ICal::Libical::icalcomponent_remove_property", _wrap_icalcomponent_remove_property, file); newXS("Net::ICal::Libical::icalcomponent_get_parent", _wrap_icalcomponent_get_parent, file); newXS("Net::ICal::Libical::icalcomponent_isa", _wrap_icalcomponent_isa, file); newXS("Net::ICal::Libical::icalrestriction_check", _wrap_icalrestriction_check, file); newXS("Net::ICal::Libical::icalproperty_string_to_kind", _wrap_icalproperty_string_to_kind, file); newXS("Net::ICal::Libical::icalproperty_new", _wrap_icalproperty_new, file); newXS("Net::ICal::Libical::icalproperty_new_from_string", _wrap_icalproperty_new_from_string, file); newXS("Net::ICal::Libical::icalproperty_as_ical_string", _wrap_icalproperty_as_ical_string, file); newXS("Net::ICal::Libical::icalproperty_set_parameter_from_string", _wrap_icalproperty_set_parameter_from_string, file); newXS("Net::ICal::Libical::icalproperty_set_value_from_string", _wrap_icalproperty_set_value_from_string, file); newXS("Net::ICal::Libical::icalproperty_get_value_as_string", _wrap_icalproperty_get_value_as_string, file); newXS("Net::ICal::Libical::icalproperty_get_parameter_as_string", _wrap_icalproperty_get_parameter_as_string, file); newXS("Net::ICal::Libical::icalproperty_get_parent", _wrap_icalproperty_get_parent, file); newXS("Net::ICal::Libical::icalerror_set_error_state", _wrap_icalerror_set_error_state, file); newXS("Net::ICal::Libical::icalerror_get_error_state", _wrap_icalerror_get_error_state, file); newXS("Net::ICal::Libical::icalenum_property_kind_to_string", _wrap_icalenum_property_kind_to_string, file); newXS("Net::ICal::Libical::icalenum_string_to_property_kind", _wrap_icalenum_string_to_property_kind, file); newXS("Net::ICal::Libical::icalenum_value_kind_to_string", _wrap_icalenum_value_kind_to_string, file); newXS("Net::ICal::Libical::icalenum_parameter_kind_to_string", _wrap_icalenum_parameter_kind_to_string, file); newXS("Net::ICal::Libical::icalenum_string_to_parameter_kind", _wrap_icalenum_string_to_parameter_kind, file); newXS("Net::ICal::Libical::icalenum_component_kind_to_string", _wrap_icalenum_component_kind_to_string, file); newXS("Net::ICal::Libical::icalenum_string_to_component_kind", _wrap_icalenum_string_to_component_kind, file); newXS("Net::ICal::Libical::icalenum_property_kind_to_value_kind", _wrap_icalenum_property_kind_to_value_kind, file); newXS("Net::ICal::Libical::icallangbind_new_array", _wrap_icallangbind_new_array, file); newXS("Net::ICal::Libical::icallangbind_free_array", _wrap_icallangbind_free_array, file); newXS("Net::ICal::Libical::icallangbind_access_array", _wrap_icallangbind_access_array, file); newXS("Net::ICal::Libical::icalrecur_expand_recurrence", _wrap_icalrecur_expand_recurrence, file); newXS("Net::ICal::Libical::icallangbind_get_first_property", _wrap_icallangbind_get_first_property, file); newXS("Net::ICal::Libical::icallangbind_get_next_property", _wrap_icallangbind_get_next_property, file); newXS("Net::ICal::Libical::icallangbind_get_first_component", _wrap_icallangbind_get_first_component, file); newXS("Net::ICal::Libical::icallangbind_get_next_component", _wrap_icallangbind_get_next_component, file); newXS("Net::ICal::Libical::icallangbind_property_eval_string", _wrap_icallangbind_property_eval_string, file); newXS("Net::ICal::Libical::icaltime_from_timet", _wrap_icaltime_from_timet, file); newXS("Net::ICal::Libical::icaltime_as_timet", _wrap_icaltime_as_timet, file); newXS("Net::ICal::Libical::icaltime_as_ical_string", _wrap_icaltime_as_ical_string, file); newXS("Net::ICal::Libical::icaltime_from_string", _wrap_icaltime_from_string, file); newXS("Net::ICal::Libical::icaltime_utc_offset", _wrap_icaltime_utc_offset, file); newXS("Net::ICal::Libical::icaltime_as_utc", _wrap_icaltime_as_utc, file); newXS("Net::ICal::Libical::icaltime_as_zone", _wrap_icaltime_as_zone, file); newXS("Net::ICal::Libical::icaltime_null_time", _wrap_icaltime_null_time, file); newXS("Net::ICal::Libical::icaltime_is_null_time", _wrap_icaltime_is_null_time, file); newXS("Net::ICal::Libical::icaltime_is_valid_time", _wrap_icaltime_is_valid_time, file); newXS("Net::ICal::Libical::icaltime_normalize", _wrap_icaltime_normalize, file); newXS("Net::ICal::Libical::icaltime_day_of_year", _wrap_icaltime_day_of_year, file); newXS("Net::ICal::Libical::icaltime_from_day_of_year", _wrap_icaltime_from_day_of_year, file); newXS("Net::ICal::Libical::icaltime_day_of_week", _wrap_icaltime_day_of_week, file); newXS("Net::ICal::Libical::icaltime_start_doy_of_week", _wrap_icaltime_start_doy_of_week, file); newXS("Net::ICal::Libical::icaltime_as_ctime", _wrap_icaltime_as_ctime, file); newXS("Net::ICal::Libical::icaltime_week_number", _wrap_icaltime_week_number, file); newXS("Net::ICal::Libical::icaltime_compare", _wrap_icaltime_compare, file); newXS("Net::ICal::Libical::icaltime_compare_date_only", _wrap_icaltime_compare_date_only, file); newXS("Net::ICal::Libical::icaltime_days_in_month", _wrap_icaltime_days_in_month, file); newXS("Net::ICal::Libical::icaldurationtype_from_int", _wrap_icaldurationtype_from_int, file); newXS("Net::ICal::Libical::icaldurationtype_from_string", _wrap_icaldurationtype_from_string, file); newXS("Net::ICal::Libical::icaldurationtype_as_int", _wrap_icaldurationtype_as_int, file); newXS("Net::ICal::Libical::icaldurationtype_as_ical_string", _wrap_icaldurationtype_as_ical_string, file); newXS("Net::ICal::Libical::icaldurationtype_null_duration", _wrap_icaldurationtype_null_duration, file); newXS("Net::ICal::Libical::icaldurationtype_is_null_duration", _wrap_icaldurationtype_is_null_duration, file); newXS("Net::ICal::Libical::icaltime_add", _wrap_icaltime_add, file); newXS("Net::ICal::Libical::icaltime_subtract", _wrap_icaltime_subtract, file); newXS("Net::ICal::Libical::icalperiodtype_from_string", _wrap_icalperiodtype_from_string, file); newXS("Net::ICal::Libical::icalperiodtype_as_ical_string", _wrap_icalperiodtype_as_ical_string, file); newXS("Net::ICal::Libical::icalperiodtype_null_period", _wrap_icalperiodtype_null_period, file); newXS("Net::ICal::Libical::icalperiodtype_is_null_period", _wrap_icalperiodtype_is_null_period, file); newXS("Net::ICal::Libical::icalperiodtype_is_valid_period", _wrap_icalperiodtype_is_valid_period, file); newXS("Net::ICal::Libical::icaltimetype_year_set", _wrap_icaltimetype_year_set, file); newXS("Net::ICal::Libical::icaltimetype_year_get", _wrap_icaltimetype_year_get, file); newXS("Net::ICal::Libical::icaltimetype_month_set", _wrap_icaltimetype_month_set, file); newXS("Net::ICal::Libical::icaltimetype_month_get", _wrap_icaltimetype_month_get, file); newXS("Net::ICal::Libical::icaltimetype_day_set", _wrap_icaltimetype_day_set, file); newXS("Net::ICal::Libical::icaltimetype_day_get", _wrap_icaltimetype_day_get, file); newXS("Net::ICal::Libical::icaltimetype_hour_set", _wrap_icaltimetype_hour_set, file); newXS("Net::ICal::Libical::icaltimetype_hour_get", _wrap_icaltimetype_hour_get, file); newXS("Net::ICal::Libical::icaltimetype_minute_set", _wrap_icaltimetype_minute_set, file); newXS("Net::ICal::Libical::icaltimetype_minute_get", _wrap_icaltimetype_minute_get, file); newXS("Net::ICal::Libical::icaltimetype_second_set", _wrap_icaltimetype_second_set, file); newXS("Net::ICal::Libical::icaltimetype_second_get", _wrap_icaltimetype_second_get, file); newXS("Net::ICal::Libical::icaltimetype_is_utc_set", _wrap_icaltimetype_is_utc_set, file); newXS("Net::ICal::Libical::icaltimetype_is_utc_get", _wrap_icaltimetype_is_utc_get, file); newXS("Net::ICal::Libical::icaltimetype_is_date_set", _wrap_icaltimetype_is_date_set, file); newXS("Net::ICal::Libical::icaltimetype_is_date_get", _wrap_icaltimetype_is_date_get, file); newXS("Net::ICal::Libical::icaldurationtype_is_neg_set", _wrap_icaldurationtype_is_neg_set, file); newXS("Net::ICal::Libical::icaldurationtype_is_neg_get", _wrap_icaldurationtype_is_neg_get, file); newXS("Net::ICal::Libical::icaldurationtype_days_set", _wrap_icaldurationtype_days_set, file); newXS("Net::ICal::Libical::icaldurationtype_days_get", _wrap_icaldurationtype_days_get, file); newXS("Net::ICal::Libical::icaldurationtype_weeks_set", _wrap_icaldurationtype_weeks_set, file); newXS("Net::ICal::Libical::icaldurationtype_weeks_get", _wrap_icaldurationtype_weeks_get, file); newXS("Net::ICal::Libical::icaldurationtype_hours_set", _wrap_icaldurationtype_hours_set, file); newXS("Net::ICal::Libical::icaldurationtype_hours_get", _wrap_icaldurationtype_hours_get, file); newXS("Net::ICal::Libical::icaldurationtype_minutes_set", _wrap_icaldurationtype_minutes_set, file); newXS("Net::ICal::Libical::icaldurationtype_minutes_get", _wrap_icaldurationtype_minutes_get, file); newXS("Net::ICal::Libical::icaldurationtype_seconds_set", _wrap_icaldurationtype_seconds_set, file); newXS("Net::ICal::Libical::icaldurationtype_seconds_get", _wrap_icaldurationtype_seconds_get, file); newXS("Net::ICal::Libical::icalperiodtype_start_set", _wrap_icalperiodtype_start_set, file); newXS("Net::ICal::Libical::icalperiodtype_start_get", _wrap_icalperiodtype_start_get, file); newXS("Net::ICal::Libical::icalperiodtype_end_set", _wrap_icalperiodtype_end_set, file); newXS("Net::ICal::Libical::icalperiodtype_end_get", _wrap_icalperiodtype_end_get, file); newXS("Net::ICal::Libical::icalperiodtype_duration_set", _wrap_icalperiodtype_duration_set, file); newXS("Net::ICal::Libical::icalperiodtype_duration_get", _wrap_icalperiodtype_duration_get, file); /* * These are the pointer type-equivalency mappings. * (Used by the SWIG pointer type-checker). */ SWIG_RegisterMapping("unsigned short","short",0); SWIG_RegisterMapping("struct icaldurationtype","icaldurationtype",0); SWIG_RegisterMapping("icalperiodtype","struct icalperiodtype",0); SWIG_RegisterMapping("long","unsigned long",0); SWIG_RegisterMapping("long","signed long",0); SWIG_RegisterMapping("struct icaltimetype","icaltimetype",0); SWIG_RegisterMapping("icaldurationtype","struct icaldurationtype",0); SWIG_RegisterMapping("signed short","short",0); SWIG_RegisterMapping("struct icalperiodtype","icalperiodtype",0); SWIG_RegisterMapping("signed int","int",0); SWIG_RegisterMapping("short","unsigned short",0); SWIG_RegisterMapping("short","signed short",0); SWIG_RegisterMapping("unsigned long","long",0); SWIG_RegisterMapping("int","unsigned int",0); SWIG_RegisterMapping("int","signed int",0); SWIG_RegisterMapping("unsigned int","int",0); SWIG_RegisterMapping("icaltimetype","struct icaltimetype",0); SWIG_RegisterMapping("signed long","long",0); ST(0) = &sv_yes; XSRETURN(1); } libical-1.0/src/Net-ICal-Libical/lib/0000775000076400007640000000000012132563130016155 5ustar allenallenlibical-1.0/src/Net-ICal-Libical/lib/Net/0000775000076400007640000000000012132563130016703 5ustar allenallenlibical-1.0/src/Net-ICal-Libical/lib/Net/ICal/0000775000076400007640000000000012132563130017513 5ustar allenallenlibical-1.0/src/Net-ICal-Libical/lib/Net/ICal/Libical/0000775000076400007640000000000012132563130021052 5ustar allenallenlibical-1.0/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm0000664000076400007640000000651112132563130023200 0ustar allenallen#============================================================================= # # This package is free software and is provided "as is" without express # or implied warranty. It may be used, redistributed and/or modified # under the same terms as perl itself. (Either the Artistic License or # the GPL.) # #============================================================================= =head1 NAME Net::ICal::Duration -- represent a length of time =head1 SYNOPSIS use Net::ICal; $d = Net::ICal::Duration->new("P3DT6H15M10S"); $d = Net::ICal::Duration->new(3600); # 1 hour in seconds =head1 DESCRIPTION I Represents a length of time, such a 3 days, 30 seconds or 7 weeks. You would use this for representing an abstract block of time; "I want to have a 1-hour meeting sometime." If you want a calendar- and timezone-specific block of time, see Net::ICal::Period. =cut #============================================================================= package Net::ICal::Libical::Duration; use Net::ICal::Libical::Property; use strict; use Carp; @Net::ICal::Libical::Duration::ISA = qw ( Net::ICal::Libical::Property ); =head1 METHODS =head2 new Create a new I from: =over 4 =item * A string in RFC2445 duration format =item * An integer representing a number of seconds =cut sub new { my $package = shift; my $arg = shift; my $self; if (ref($arg) == 'HASH'){ # Construct from dictionary $self = Net::ICal::Libical::Property::new($package,$arg); my $val=Net::ICal::Libical::icalproperty_get_value_as_string($self->{'ref'}); $self->{'dur'} = Net::ICal::Libical::icaldurationtype_from_string($val); return $self; } elsif ($arg =~ /^[-+]?\d+$/){ # Seconds $self = Net::ICal::Libical::Property::new($package,'DURATION'); $self->{'dur'} = Net::ICal::Libical::icaldurationtype_new_from_int($arg); } elsif ($arg) { # iCalendar string $self = Net::ICal::Libical::Property::new($package,'DURATION'); $self->{'dur'} = Net::ICal::Libical::icaldurationtype_new_from_string($arg); } else { die; } $self->_update_value(); return $self; } sub _update_value { my $self = shift; die "Can't find internal icalduration reference" if !$self->{'dur'}; $self->value(Net::ICal::Libical::icaldurationtype_as_ical_string($self->{'dur'})); } =head2 clone() Return a new copy of the duration. =cut sub clone { die "Not Implemented"; } =head2 is_valid() Determine if this is a valid duration (given criteria TBD). =cut sub is_valid { die "Not Implemented;" } =head2 seconds() Set or Get the length of the duration as seconds. =cut sub seconds { my $self = shift; my $seconds = shift; if($seconds){ $self->{'dur'} = Net::ICal::Libical::icaldurationtype_from_int($seconds); $self->_update_value(); } return Net::ICal::Libical::icaldurationtype_as_int($self->{'dur'}); } =head2 add($duration) Return a new duration that is the sum of this and $duration. Does not modify this object. =cut sub add { my ($self, $duration) = @_; return new Duration($self->seconds() + $duration->seconds()); } =head2 subtract($duration) Return a new duration that is the difference between this and $duration. Does not modify this object. =cut sub subtract { my ($self, $duration) = @_; return new Duration($self->seconds() - $duration->seconds()); } 1; libical-1.0/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm0000664000076400007640000000624412132563130023242 0ustar allenallen#!/usr/bin/perl # -*- Mode: perl -*- #====================================================================== # FILE: Property.pm # CREATOR: eric 1 Mar 01 # # DESCRIPTION: # # # $Id: Property.pm,v 1.3 2001-03-03 05:44:03 ebusboom Exp $ # $Locker: $ # # (C) COPYRIGHT 2000, Eric Busboom, eric@softwarestudio.org # # This package is free software and is provided "as is" without express # or implied warranty. It may be used, redistributed and/or modified # under the same terms as perl itself. ( Either the Artistic License or the # GPL. ) # # #====================================================================== use Net::ICal::Libical::Property; package Net::ICal::Libical::Property; use strict; sub new { my $class = shift; my $arg = shift; my $self = {}; my $kind; if(ref($arg) == 'HASH'){ $self->{'ref'} = $arg->{'ref'}; } else { $kind = Net::ICal::Libical::icalproperty_string_to_kind($arg); $self->{'ref'} = Net::ICal::Libical::icalproperty_new($kind); } die "Did not get icalproperty ref in Net::ICal::Libical::Property::new " if !$self->{'ref'}; bless $self, $class; } sub DESTROY { my $self = shift; my $r = $self->{'ref'}; if($r && !Net::ICal::Libical::icalproperty_get_parent($r)){ Net::ICal::Libical::icalproperty_free($self->{'ref'}); } } sub name { my $self = shift; my $str; die if !$self->{'ref'}; $str = Net::ICal::Libical::icalproperty_as_ical_string($self->{'ref'}); $str =~ /^([A-Z\-]+)\n/; return $1; } #Get/Set the internal reference to the libical icalproperty """ sub prop_ref { my $self = shift; my $p_r = shift; if($p_r){ $self->{'ref'} = $p_r; } return $self->{'ref'}; } #Get/set the RFC2445 representation of the value. Dict value 'value' sub value { my $self = shift; my $v = shift; my $kind = shift; my $vt; if($v){ if ($kind) { $self->{'VALUE'} = $kind; $vt = $kind; } elsif ($self->{'VALUE'}) { $vt = $self->{'VALUE'}; } else { $vt = 'NO'; # Use the kind of the existing value } Net::ICal::Libical::icalproperty_set_value_from_string($self->{'ref'},$v,$vt); } return Net::ICal::Libical::icalproperty_get_value_as_string($self->{'ref'}); } # Get a named parameter sub get_parameter{ my $self = shift; my $key = shift; die "get_parameter: missing parameter name" if !$key; $key = uc($key); my $ref = $self->{'ref'}; my $str = Net::ICal::Libical::icalproperty_get_parameter_as_string($ref,$key); if($str eq 'NULL') { return undef; } return $str } # Set the value of the named parameter sub set_parameter{ my $self = shift; my $key = shift; my $value = shift; die "set_parameter: missing parameter name" if !$key; die "set_parameter: missing parameter value" if !$value; $key = uc($key); my $ref = $self->{'ref'}; my $str = Net::ICal::Libical::icalproperty_set_parameter_from_string($ref,$key,$value); return $self->get_parameter($self); } sub as_ical_string { my $self = shift; my $str = Net::ICal::Libical::icalproperty_as_ical_string($self->{'ref'}); $str =~ s/\r//g; $str =~ s/\n\s?//g; return $str; } 1; libical-1.0/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm0000664000076400007640000002041012132563130022627 0ustar allenallen#!/usr/bin/perl -w # -*- Mode: perl -*- #====================================================================== # # This package is free software and is provided "as is" without express # or implied warranty. It may be used, redistributed and/or modified # under the same terms as perl itself. ( Either the Artistic License or the # GPL. ) # # $Id: Period.pm,v 1.1 2001-03-02 19:50:31 ebusboom Exp $ # # (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org # # $Log #====================================================================== =pod =head1 NAME Net::ICal::Period -- represent a period of time =head1 SYNOPSIS use Net::ICal; $p = new Net::ICal::Period("19970101T120000","19970101T123000"); $p = new Net::ICal::Period("19970101T120000","PT3W2D40S"); $p = new Net::ICal::Period(time(),3600); $p = new Net::ICal::Period( new Net::ICal::Time("19970101T120000", "America/Los_Angeles"), new Net::ICal::Duration("2h")); =head1 DESCRIPTION Use this to make an object representing a block of time on a real schedule. You can either say, "This event starts at 12 and ends at 2" or "This event starts at 12 and lasts 2 hours." These two ways of specifying events can be treated differently in schedules. If you say, "The meeting is from 12 to 2, but I have to leave at 2," you are implying that the start date and end date are fixed. If you say, "I have a 2-hour drive to Chicago, and I need to leave at 4," you are saying that it will take 2 hours no matter when you leave, and that moving the start time will slide the end time correspondingly. =head1 BASIC METHODS =cut #========================================================================= package Net::ICal::Period; use strict; use Net::ICal::Time; use Net::ICal::Duration; use UNIVERSAL qw(isa); #------------------------------------------------------------------------- =pod =head2 new($time, $time|$duration) Creates a new period object given to parameters: The first must be a I