summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Schmidt <stefan@datenfreihafen.org>2009-12-10 11:08:51 +0100
committerStefan Schmidt <stefan@datenfreihafen.org>2009-12-10 11:08:51 +0100
commita79d5a546392cad57bb8855f88d4617caa852d27 (patch)
tree28a5b26bf27ff1e594e13e6eb5aa76891f8f8aab
parent09a85ada712374f567b276067805c19b091a518a (diff)
parent6e0172f360053c39bfad106592fbb55509167103 (diff)
Merge branch 'org.openembedded.dev' of git.openembedded.org:openembedded into org.openembedded.dev
-rw-r--r--MAINTAINERS4
-rw-r--r--classes/cmake.bbclass22
-rw-r--r--conf/bitbake.conf1
-rw-r--r--conf/checksums.ini492
-rw-r--r--conf/compatibility-providers.conf72
-rw-r--r--conf/distro/angstrom-2008.1.conf76
-rw-r--r--conf/distro/include/angstrom-2008-preferred-versions.inc6
-rw-r--r--conf/distro/include/angstrom-package-deb.inc4
-rw-r--r--conf/distro/include/angstrom-package-ipk.inc5
-rw-r--r--conf/distro/include/angstrom.inc6
-rw-r--r--conf/distro/include/preferred-slugos-versions.inc14
-rw-r--r--conf/distro/include/sane-feed-deb.inc4
-rw-r--r--conf/distro/include/sane-feed-ipk.inc5
-rw-r--r--conf/distro/include/sane-srcrevs-fso.inc2
-rw-r--r--conf/distro/include/sane-srcrevs.inc50
-rw-r--r--conf/distro/include/shr-autorev.inc1
-rw-r--r--conf/distro/include/slugos.inc6
-rw-r--r--conf/distro/jlime-2009.1.conf10
-rw-r--r--conf/distro/micro.conf6
-rw-r--r--conf/distro/minimal.conf14
-rw-r--r--conf/distro/shr.conf28
-rw-r--r--conf/distro/slugos.conf3
-rw-r--r--conf/machine/cm-t35.conf46
-rw-r--r--conf/machine/da830-omapl137-evm.conf1
-rw-r--r--conf/machine/da850-omapl138-evm.conf1
-rw-r--r--conf/machine/davinci-sffsdr.conf1
-rw-r--r--conf/machine/dm355-evm.conf2
-rw-r--r--conf/machine/dm365-evm.conf1
-rw-r--r--conf/machine/dm6446-evm.conf1
-rw-r--r--conf/machine/hawkboard.conf1
-rw-r--r--conf/machine/include/davinci.inc2
-rw-r--r--conf/machine/include/dm355.inc9
-rw-r--r--conf/machine/include/dm365.inc12
-rw-r--r--conf/machine/include/dm6446.inc13
-rw-r--r--conf/machine/include/omap3.inc13
-rw-r--r--conf/machine/include/omapl137.conf2
-rw-r--r--conf/machine/include/omapl138.conf1
-rw-r--r--conf/machine/include/tune-atom.inc5
-rw-r--r--conf/machine/include/zaurus-kernel.inc3
-rw-r--r--conf/machine/ion.conf2
-rw-r--r--conf/machine/neuros-osd2.conf1
-rw-r--r--conf/machine/omap3-pandora.conf12
-rw-r--r--conf/machine/simone.conf10
-rwxr-xr-xcontrib/angstrom/build-feeds.sh8
-rwxr-xr-xcontrib/angstrom/omap3-mkcard.sh52
-rwxr-xr-xcontrib/angstrom/sort.sh4
-rw-r--r--recipes/aceofpenguins/aceofpenguins-launcher_0.3.bb2
-rw-r--r--recipes/angstrom/angstrom-led-config.bb2
-rw-r--r--recipes/angstrom/angstrom-led-config/cm-t35/leds2
-rw-r--r--recipes/asio/asio.inc14
-rw-r--r--recipes/asio/asio_1.1.1.bb19
-rw-r--r--recipes/asio/asio_1.4.1.bb3
-rw-r--r--recipes/binutils/binutils-2.20/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch39
-rw-r--r--recipes/binutils/binutils-2.20/binutils-arm-pr7093.patch19
-rw-r--r--recipes/binutils/binutils-2.20/uclibc-segfault.patch23
-rw-r--r--recipes/binutils/binutils_2.20.bb3
-rw-r--r--recipes/boost/boost-14x.inc3
-rw-r--r--recipes/boost/boost_1.41.0.bb16
-rw-r--r--recipes/boost/files/1.41.0_uclibc.patch13
-rw-r--r--recipes/calc/calc_0.0.2.bb23
-rw-r--r--recipes/cdparanoia/cdparanoia/configure.in.patch13
-rw-r--r--recipes/cdparanoia/cdparanoia_10.2.bb3
-rw-r--r--recipes/cdparanoia/cdparanoia_svn.bb5
-rw-r--r--recipes/comic-reader/comic-reader_svn.bb2
-rw-r--r--recipes/connman/connman_0.46.bb3
-rw-r--r--recipes/connman/files/no_system_user_perms.patch14
-rw-r--r--recipes/coreutils/coreutils-native.inc5
-rw-r--r--recipes/devilspie/devilspie_0.22.bb13
-rw-r--r--recipes/dvnixload/dvnixload_0.2.6.bb9
-rw-r--r--recipes/e17/e-tasks_svn.bb28
-rw-r--r--recipes/e17/e-wm/drop-illume-keyboards.patch17
-rw-r--r--recipes/e17/e-wm_svn.bb11
-rw-r--r--recipes/e17/elmdentica_svn.bb2
-rw-r--r--recipes/e17/eve_svn.bb2
-rw-r--r--recipes/e17/illume-keyboard-default_svn.bb43
-rw-r--r--recipes/e17/illume-keyboards-shr_git.bb78
-rw-r--r--recipes/efl1/ecore_svn.bb2
-rw-r--r--recipes/efl1/elementary_svn.bb3
-rw-r--r--recipes/efl1/illume-keyboard-arabic_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-browse_git.bb20
-rw-r--r--recipes/efl1/illume-keyboard-danish_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-default-alt_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-dutch_git.bb22
-rw-r--r--recipes/efl1/illume-keyboard-dvorak_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-french_git.bb11
-rw-r--r--recipes/efl1/illume-keyboard-german_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-hebrew_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-numeric-alt_git.bb19
-rw-r--r--recipes/efl1/illume-keyboard-russian-terminal_git.bb10
-rw-r--r--recipes/efl1/illume-keyboard-russian_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard.inc14
-rw-r--r--recipes/eglibc/eglibc_2.10.bb4
-rw-r--r--recipes/eglibc/eglibc_2.11.bb4
-rw-r--r--recipes/eglibc/eglibc_svn.bb2
-rw-r--r--recipes/enotes/enotes_svn.bb2
-rw-r--r--recipes/epdfview/epdfview_0.1.7.bb15
-rw-r--r--recipes/epdfview/epdfview_svn.bb37
-rw-r--r--recipes/epdfview/files/acroread.pngbin0 -> 7670 bytes
-rw-r--r--recipes/euphony/euphony_0.1.3.bb1
-rw-r--r--recipes/ffalarms/ffalarms_svn.bb2
-rw-r--r--recipes/ffmpeg/ffmpeg_svn.bb2
-rw-r--r--recipes/fltk/fltkclock_svn.bb2
-rw-r--r--recipes/fltk/fltkcocktailbar_svn.bb2
-rw-r--r--recipes/fltk/fltkcurrency_svn.bb16
-rw-r--r--recipes/freesmartphone/fso-apm_git.bb6
-rw-r--r--recipes/freesmartphone/fsodeviced/fsodeviced3
-rw-r--r--recipes/freesmartphone/fsodeviced_git.bb2
-rw-r--r--recipes/gcc/gcc-configure-cross.inc3
-rw-r--r--recipes/glew/files/autotools.patch146
-rw-r--r--recipes/glew/libglew_1.5.1.bb17
-rw-r--r--recipes/glib-2.0/glib-2.0-2.22.1/uclibc-res_query.patch36
-rw-r--r--recipes/glib-2.0/glib-2.0_2.22.1.bb3
-rw-r--r--recipes/gstreamer/gst-plugins.inc1
-rw-r--r--recipes/gtk-webcore/midori-0.2.1/retain-navigationbar-in-fullwindow.patch39
-rw-r--r--recipes/gtk-webcore/midori/config11
-rw-r--r--recipes/gtk-webcore/midori_0.2.1.bb6
-rw-r--r--recipes/gypsy/files/remove-werror.patch13
-rw-r--r--recipes/gypsy/gypsy.inc10
-rw-r--r--recipes/gypsy/gypsy_svn.bb3
-rw-r--r--recipes/helloworld/helloworld_1.0.0.bb5
-rw-r--r--recipes/icu/icu-3.6.inc2
-rw-r--r--recipes/icu/icu-native_3.6.bb2
-rw-r--r--recipes/icu/icu_3.6.bb2
-rw-r--r--recipes/images/shr-image.inc15
-rw-r--r--recipes/intone-video/intone-video_svn.bb2
-rw-r--r--recipes/intone/intone_svn.bb2
-rw-r--r--recipes/ipaq-sleep/ipaq-sleep_0.9.bb5
-rw-r--r--recipes/jack/jack_0.116.2.bb9
-rw-r--r--recipes/kexecboot/kexecboot_git.bb4
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig1303
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.32.bb32
-rw-r--r--recipes/libcli/files/autotools.patch88
-rw-r--r--recipes/libcli/libcli_1.9.4.bb11
-rw-r--r--recipes/libdessert/files/0001-big-fat-autotools-patch.patch87483
-rw-r--r--recipes/libdessert/libdessert_0.86.14.bb15
-rw-r--r--recipes/libpng/libpng-native_1.2.40.bb4
-rw-r--r--recipes/libpng/libpng_1.2.40.bb14
-rw-r--r--recipes/librsvg/librsvg-native_2.26.0.bb10
-rw-r--r--recipes/libsdl/libsdl-mixer/fix-flac-madness.diff28
-rw-r--r--recipes/libsdl/libsdl-mixer_1.2.11.bb8
-rw-r--r--recipes/libsdl/libsdl-native_1.2.14.bb37
-rw-r--r--recipes/libsdl/libsdl-x11_1.2.14.bb51
-rw-r--r--recipes/linphone/files/b64_assert.patch11
-rw-r--r--recipes/linux/linux-2.6.24/hipox/defconfig14
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/edb9301-fix-machine-id.patch19
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/ep93xx-cpuinfo.patch43
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/ep93xx-dma.patch3641
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/ep93xx-eth.patch2718
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/ep93xx-i2c.patch234
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/ep93xx-regs.patch490
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/ep93xx-snd-ac97.patch3829
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/ep93xx-spi.patch721
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/ep93xx-touchscreen.patch1320
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/series7
-rw-r--r--recipes/linux/linux-2.6.32/ep93xx/simone-board-def.patch1653
-rw-r--r--recipes/linux/linux-bug_2.6.27.2.bb5
-rw-r--r--recipes/linux/linux-davinci_git.bb43
-rw-r--r--recipes/linux/linux-handhelds-2.6_cvs.bb8
-rw-r--r--recipes/linux/linux-omap-2.6.32/beagleboard/defconfig2899
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch159
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch30
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch153
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch307
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch145
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch427
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0006-omap3-cm-t35-update-defconfig.patch87
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/defconfig1823
-rw-r--r--recipes/linux/linux-omap-2.6.32/usb/ehci-omap.c-mach-to-plat.diff12
-rw-r--r--recipes/linux/linux-omap-2.6.32/usb/ehci.patch46
-rw-r--r--recipes/linux/linux-omap_2.6.32.bb33
-rw-r--r--recipes/linux/linux/simone/defconfig1751
-rw-r--r--recipes/linux/linux_2.6.32.bb46
-rw-r--r--recipes/matchbox2/matchbox2/matchbox-session-2.in2
-rw-r--r--recipes/matchbox2/matchbox2_2.0.bb2
-rw-r--r--recipes/moblin/librest_git.bb3
-rw-r--r--recipes/mokoeightball/files/fixpath.patch63
-rw-r--r--recipes/mokoeightball/mokoeightball_svn.bb34
-rw-r--r--recipes/mythtv/mythtv_0.22.bb34
-rw-r--r--recipes/navit/files/maps.xml24
-rw-r--r--recipes/navit/files/navit.desktop2
-rw-r--r--recipes/navit/files/navit.xml39
-rw-r--r--recipes/navit/files/osd.xml15
-rw-r--r--recipes/navit/files/shr/navit.desktop10
-rw-r--r--recipes/navit/files/shr/navit.launcher57
-rw-r--r--recipes/navit/files/shr/navit.pngbin0 -> 8299 bytes
-rw-r--r--recipes/navit/files/shr/navitD.desktop10
-rw-r--r--recipes/navit/files/shr/navitD.pngbin0 -> 8341 bytes
-rw-r--r--recipes/navit/files/shr/osd.xml44
-rw-r--r--recipes/navit/files/speech.xml8
-rw-r--r--recipes/navit/navit-icons/configure.in69
-rw-r--r--recipes/navit/navit-icons_svn.bb29
-rw-r--r--recipes/navit/navit.inc3
-rw-r--r--recipes/navit/navit_0.0.4.bb2
-rw-r--r--recipes/navit/navit_0.1.0.bb2
-rw-r--r--recipes/navit/navit_svn.bb55
-rw-r--r--recipes/nfs-utils/nfs-utils-1.1.2/nfsserver149
-rw-r--r--recipes/nfs-utils/nfs-utils_1.1.2.bb26
-rw-r--r--recipes/obexpush/obexpush_1.0.0.bb5
-rw-r--r--recipes/openmax/libomxil-bellagio_0.9.2.bb17
-rw-r--r--recipes/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb40
-rw-r--r--recipes/openmoko-3rdparty/calc_0.0.4.bb (renamed from recipes/calc/calc_0.0.3.bb)0
-rw-r--r--recipes/openmoko-3rdparty/calc_git.bb (renamed from recipes/calc/calc_git.bb)0
-rw-r--r--recipes/openmoko-3rdparty/epiano_0.3.1.bb2
-rw-r--r--recipes/openmoko-projects/diversity-radar_svn.bb2
-rw-r--r--recipes/openmoko-projects/enlazar_svn.bb2
-rw-r--r--recipes/openmoko-projects/om-locations_git.bb2
-rw-r--r--recipes/openmoko-projects/pyefl-sudoku_svn.bb2
-rw-r--r--recipes/openmoko-system/ompower_svn.bb2
-rw-r--r--recipes/openmoko2/neod_svn.bb6
-rw-r--r--recipes/openmoko2/openmoko-alsa-scenarios.bb1
-rw-r--r--recipes/openssl/openssl-native_0.9.8j.bb4
-rw-r--r--recipes/openttd/openttd_0.7.4.bb (renamed from recipes/openttd/openttd_0.7.4-RC1.bb)0
-rw-r--r--recipes/opkg/opkg-native_svn.bb1
-rw-r--r--recipes/opkg/opkg-nogpg-nocurl-slugos_svn.bb62
-rw-r--r--recipes/opkg/opkg.inc2
-rw-r--r--recipes/opkg/opkg_svn.bb2
-rw-r--r--recipes/performous/performous_0.4.0.bb29
-rw-r--r--recipes/php/php-5.2.11/acinclude-xml2-config.patch18
-rw-r--r--recipes/php/php-5.2.11/pear-makefile.patch13
-rw-r--r--recipes/php/php_5.2.11.bb87
-rw-r--r--recipes/php/php_5.2.6.bb5
-rw-r--r--recipes/poptop/poptop_1.3.4.bb2
-rw-r--r--recipes/powervr-drivers/libgles-omap3.inc4
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules/0001-Compile-fixes-for-recent-kernels.patch28
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb1
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb4
-rw-r--r--recipes/qt4/qt4-embedded-4.6.0/0006-freetype-host-includes.patch20
-rw-r--r--recipes/qt4/qt4-embedded-4.6.0/0008-qt-lib-infix.patch32
-rw-r--r--recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch9
-rw-r--r--recipes/qt4/qt4-embedded-4.6.0/linux.conf54
-rw-r--r--recipes/qt4/qt4-embedded.inc2
-rw-r--r--recipes/qt4/qt4-embedded_4.6.0.bb38
-rw-r--r--recipes/qt4/qt4-tools-native_4.6.0.bb15
-rw-r--r--recipes/qt4/qt4-x11-free-4.6.0/0008-qt-lib-infix.patch32
-rw-r--r--recipes/qt4/qt4-x11-free-4.6.0/linux.conf54
-rw-r--r--recipes/qt4/qt4-x11-free_4.6.0.bb45
-rw-r--r--recipes/rp-pppoe/rp-pppoe_3.8.bb2
-rw-r--r--recipes/shr/libframeworkd-phonegui-efl2_git.bb2
-rw-r--r--recipes/shr/libframeworkd-phonegui-efl_git.bb2
-rw-r--r--recipes/shr/libphone-ui-shr_git.bb2
-rw-r--r--recipes/shr/shr-config_git.bb2
-rw-r--r--recipes/shr/shr-launcher_svn.bb21
-rw-r--r--recipes/shr/shr-settings_git.bb2
-rw-r--r--recipes/shr/shr-splash-theme-logo_git.bb2
-rw-r--r--recipes/shr/shr-splash-theme.inc1
-rw-r--r--recipes/shr/shr-splash_git.bb6
-rw-r--r--recipes/shr/shr-wizard_git.bb16
-rw-r--r--recipes/sudo/libgksu_2.0.12.bb8
-rw-r--r--recipes/suspend-desktop/suspend-desktop_1.0.bb5
-rw-r--r--recipes/sysfsutils/sysfsutils.inc18
-rw-r--r--recipes/sysfsutils/sysfsutils_1.3.0.bb23
-rw-r--r--recipes/sysfsutils/sysfsutils_2.0.0.bb25
-rw-r--r--recipes/sysfsutils/sysfsutils_2.1.0.bb24
-rw-r--r--recipes/tasks/task-base.bb7
-rw-r--r--recipes/tasks/task-beagleboard-demo.bb3
-rw-r--r--recipes/tasks/task-boot.bb2
-rw-r--r--recipes/tasks/task-shr-feed.bb8
-rw-r--r--recipes/tasks/task-shr-minimal.bb3
-rw-r--r--recipes/tasks/task-slugos.bb4
-rw-r--r--recipes/tcltk/tcl_8.4.19.bb4
-rw-r--r--recipes/ti/bitblit_svn.bb12
-rw-r--r--[-rwxr-xr-x]recipes/ti/files/Makefile-dsplink-dsp0
-rw-r--r--[-rwxr-xr-x]recipes/ti/files/Makefile-dsplink-gpp0
-rw-r--r--recipes/ti/files/dm355mm.patch498
-rw-r--r--recipes/ti/files/loadmodules-ti-dmai-dm365_al.sh14
-rw-r--r--[-rwxr-xr-x]recipes/ti/files/mapdmaqbin7680 -> 7680 bytes
-rw-r--r--recipes/ti/files/mp3dec_cs1omap3530.patch41
-rw-r--r--[-rwxr-xr-x]recipes/ti/files/unloadmodules-ti-dmai-apps.sh0
-rw-r--r--recipes/ti/gstreamer-ti/gstreamer-ti-dm355-rc.sh61
-rw-r--r--recipes/ti/gstreamer-ti/gstreamer-ti-dm6446-rc.sh71
-rw-r--r--recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh10
-rw-r--r--recipes/ti/gstreamer-ti_svn.bb101
-rw-r--r--recipes/ti/ti-cgt6x-native_6.1.9.bb4
-rw-r--r--recipes/ti/ti-cgt6x.inc39
-rw-r--r--recipes/ti/ti-cmem-module_2.23.1.bb68
-rw-r--r--recipes/ti/ti-cmem-module_2.23.bb51
-rw-r--r--recipes/ti/ti-cmem-module_2.24.01.bb66
-rw-r--r--recipes/ti/ti-codec-combo-dm355.inc38
-rw-r--r--recipes/ti/ti-codec-combo-dm355_1.13.bb28
-rw-r--r--recipes/ti/ti-codec-combo-dm6446.inc39
-rw-r--r--recipes/ti/ti-codec-combo-omap3530.inc46
-rw-r--r--recipes/ti/ti-codec-combo-omap3530_3.16.1.bb51
-rw-r--r--recipes/ti/ti-codec-combos_3.16.bb90
-rw-r--r--recipes/ti/ti-codec-engine.inc27
-rw-r--r--recipes/ti/ti-codec-engine_2.21.bb278
-rw-r--r--recipes/ti/ti-codec-engine_2.23.1.bb32
-rw-r--r--recipes/ti/ti-codec-engine_2.24.01.bb66
-rw-r--r--recipes/ti/ti-codec-engine_2.25.01.bb7
-rw-r--r--recipes/ti/ti-codecs-dm355.inc37
-rw-r--r--recipes/ti/ti-codecs-dm355_1.13.bb6
-rw-r--r--recipes/ti/ti-codecs-dm365.inc26
-rw-r--r--recipes/ti/ti-codecs-dm365_1.0.6.bb6
-rw-r--r--recipes/ti/ti-codecs-dm6446_2.05.bb (renamed from recipes/ti/ti-codec-combo-dm6446_2.05.bb)6
-rw-r--r--recipes/ti/ti-codecs-omap3530_1.01.bb (renamed from recipes/ti/ti-cs1-omap3530_1.0.1.bb)8
-rw-r--r--recipes/ti/ti-codecs-omapl137_1.0.bb (renamed from recipes/ti/ti-codec-combo-omapl137_1.0.bb)2
-rw-r--r--recipes/ti/ti-cs1-omap3530.inc41
-rw-r--r--recipes/ti/ti-dm355mm-module_1.13.bb33
-rw-r--r--recipes/ti/ti-dm365mm-module.inc28
-rw-r--r--recipes/ti/ti-dm365mm-module_1.0.1.bb9
-rw-r--r--recipes/ti/ti-dmai.inc15
-rw-r--r--recipes/ti/ti-dmai_svn.bb47
-rw-r--r--recipes/ti/ti-dspbios-native_5.33.02.bb2
-rw-r--r--recipes/ti/ti-dspbios.inc38
-rw-r--r--recipes/ti/ti-dsplink-module_1.61.3.bb40
-rw-r--r--recipes/ti/ti-dvsdk-demos.inc41
-rw-r--r--recipes/ti/ti-dvsdk-demos_3.10.00.00.bb5
-rw-r--r--recipes/ti/ti-eula-unpack.inc62
-rw-r--r--recipes/ti/ti-framework-components.inc23
-rw-r--r--recipes/ti/ti-framework-components_2.25.00.04.bb5
-rw-r--r--recipes/ti/ti-linuxutils.inc82
-rw-r--r--recipes/ti/ti-linuxutils_2.25.01.06.bb3
-rw-r--r--recipes/ti/ti-lpm-module_2.23.1.bb65
-rw-r--r--recipes/ti/ti-lpm-module_2.24.01.bb45
-rw-r--r--recipes/ti/ti-multimedia-common.inc55
-rw-r--r--recipes/ti/ti-paths.inc45
-rw-r--r--recipes/ti/ti-sdma-module_2.23.1.bb56
-rw-r--r--recipes/ti/ti-sdma-module_2.24.01.bb54
-rw-r--r--recipes/ti/ti-xdais-native_6.23.bb13
-rw-r--r--recipes/ti/ti-xdais.inc10
-rw-r--r--recipes/ti/ti-xdctools-native_3.10.03.bb21
-rw-r--r--recipes/ti/ti-xdctools-native_3.15.01.59.bb20
-rw-r--r--recipes/ti/ti-xdctools.inc38
-rw-r--r--recipes/tslib/tslib.inc4
-rw-r--r--recipes/tslib/tslib/omap3-pandora/ts.conf8
-rw-r--r--recipes/tslib/tslib/omap3-pandora/tslib.sh7
-rw-r--r--recipes/ttf-fonts/ttf-freefonts_20090104.bb24
-rw-r--r--recipes/u-boot/u-boot-git/cm-t35/cm-t35.patch1487
-rw-r--r--recipes/u-boot/u-boot-mkimage-native_1.3.2.bb2
-rw-r--r--recipes/u-boot/u-boot-omap3pandora_git.bb4
-rw-r--r--recipes/u-boot/u-boot_git.bb2
-rw-r--r--recipes/uclibc/uclibc-nptl/installfix.patch13
-rw-r--r--recipes/uclibc/uclibc-nptl/uClibc.distro1
-rw-r--r--recipes/uclibc/uclibc-nptl/uclibc_rpc_thread.patch12
-rw-r--r--recipes/uclibc/uclibc_nptl.bb4
-rw-r--r--recipes/udev/udev-092/mtd-exclude-persistent.patch17
-rw-r--r--recipes/udev/udev-100/mtd-exclude-persistent.patch17
-rw-r--r--recipes/udev/udev-118/mtd-exclude-persistent.patch13
-rw-r--r--recipes/udev/udev-124/mtd-exclude-persistent.patch13
-rw-r--r--recipes/udev/udev_092.bb3
-rw-r--r--recipes/udev/udev_100.bb3
-rw-r--r--recipes/udev/udev_118.bb3
-rw-r--r--recipes/udev/udev_124.bb3
-rw-r--r--recipes/udev/udev_141.bb11
-rw-r--r--recipes/usb-gadget-mode/files/shr/usb-gadget.conf3
-rw-r--r--recipes/usb-gadget-mode/usb-gadget-mode.bb2
-rw-r--r--recipes/wesnoth/wesnoth_1.6.5.bb172
-rw-r--r--recipes/x-load/x-load-omap3pandora_git.bb4
-rw-r--r--recipes/xchat/xchat_2.8.6.bb3
-rw-r--r--recipes/xfce-extras/gigolo_0.3.2.bb6
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.2.6.bb4
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.3.0.bb6
-rw-r--r--recipes/xorg-font/encodings_1.0.2.bb7
-rw-r--r--recipes/xorg-font/encodings_1.0.3.bb5
-rw-r--r--recipes/xorg-font/font-adobe-100dpi_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-adobe-100dpi_1.0.1.bb3
-rw-r--r--recipes/xorg-font/font-adobe-75dpi_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-adobe-75dpi_1.0.1.bb3
-rw-r--r--recipes/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb1
-rw-r--r--recipes/xorg-font/font-adobe-utopia-100dpi_1.0.2.bb6
-rw-r--r--recipes/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb2
-rw-r--r--recipes/xorg-font/font-adobe-utopia-75dpi_1.0.2.bb6
-rw-r--r--recipes/xorg-font/font-adobe-utopia-type1_1.0.1.bb2
-rw-r--r--recipes/xorg-font/font-adobe-utopia-type1_1.0.2.bb6
-rw-r--r--recipes/xorg-font/font-alias_1.0.1.bb3
-rw-r--r--recipes/xorg-font/font-alias_1.0.2.bb9
-rw-r--r--recipes/xorg-font/font-arabic-misc_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-arabic-misc_1.0.1.bb7
-rw-r--r--recipes/xorg-font/font-bh-100dpi_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-bh-100dpi_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bh-75dpi_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-bh-75dpi_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bh-ttf_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-bh-ttf_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bh-type1_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-bh-type1_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bitstream-100dpi_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-bitstream-100dpi_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bitstream-75dpi_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-bitstream-75dpi_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bitstream-speedo_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-bitstream-speedo_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-bitstream-type1_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-bitstream-type1_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-cronyx-cyrillic_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-cronyx-cyrillic_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-cursor-misc_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-cursor-misc_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-daewoo-misc_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-daewoo-misc_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-dec-misc_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-dec-misc_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-ibm-type1_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-ibm-type1_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-isas-misc_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-isas-misc_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-jis-misc_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-jis-misc_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-micro-misc_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-micro-misc_1.0.1.bb6
-rw-r--r--recipes/xorg-font/font-misc-cyrillic_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-misc-cyrillic_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-misc-ethiopic_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-misc-ethiopic_1.0.1.bb3
-rw-r--r--recipes/xorg-font/font-misc-meltho_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-misc-meltho_1.0.1.bb5
-rw-r--r--recipes/xorg-font/font-misc-misc_1.0.0.bb6
-rw-r--r--recipes/xorg-font/font-misc-misc_1.0.1.bb3
-rw-r--r--recipes/xorg-font/font-mutt-misc_1.0.0.bb2
-rw-r--r--recipes/xorg-font/font-mutt-misc_1.0.1.bb7
-rw-r--r--recipes/xorg-font/font-schumacher-misc_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-schumacher-misc_1.1.0.bb3
-rw-r--r--recipes/xorg-font/font-screen-cyrillic_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-screen-cyrillic_1.0.2.bb3
-rw-r--r--recipes/xorg-font/font-sony-misc_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-sony-misc_1.0.1.bb3
-rw-r--r--recipes/xorg-font/font-sun-misc_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-sun-misc_1.0.1.bb3
-rw-r--r--recipes/xorg-font/font-util-native_1.0.1.bb1
-rw-r--r--recipes/xorg-font/font-util-native_1.1.1.bb13
-rw-r--r--recipes/xorg-font/font-util_1.0.1.bb2
-rw-r--r--recipes/xorg-font/font-util_1.1.1.bb15
-rw-r--r--recipes/xorg-font/font-winitzki-cyrillic_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-winitzki-cyrillic_1.0.1.bb4
-rw-r--r--recipes/xorg-font/font-xfree86-type1_1.0.0.bb1
-rw-r--r--recipes/xorg-font/font-xfree86-type1_1.0.1.bb1
-rw-r--r--recipes/xorg-font/font-xfree86-type1_1.0.2.bb4
-rw-r--r--recipes/xorg-font/xorg-font-common.inc23
-rw-r--r--recipes/xorg-font/xorg-minimal-fonts.bb2
-rw-r--r--recipes/xorg-util/util-macros-native_1.3.0.bb7
-rw-r--r--recipes/xorg-util/util-macros_1.3.0.bb6
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf/cm-t35/xorg.conf29
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf_0.1.bb2
-rw-r--r--recipes/zsh/zsh_4.3.10.bb23
-rw-r--r--site/arm-common3
-rw-r--r--site/mips-linux2
-rw-r--r--site/mipsel-linux2
-rw-r--r--site/powerpc-common2
-rw-r--r--site/x86_64-linux24
442 files changed, 118082 insertions, 2240 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 9b15080612..5a26dee320 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -129,6 +129,10 @@ Person: Joaquim Duran
Mail: joaquinduran@adtelecom.es
Recipes: gtk+, gtkmm
+Person: John Willis 'DJWillis'
+Mail: source@distant-earth.com
+Machines: omap3-pandora
+
Person: Junqian Gordon Xu 'xjqian'
Mail: xjqian@gmail.com
Machines: tosa, borzoi, nokia770
diff --git a/classes/cmake.bbclass b/classes/cmake.bbclass
index 4978421b63..f21c4d6545 100644
--- a/classes/cmake.bbclass
+++ b/classes/cmake.bbclass
@@ -20,9 +20,27 @@ cmake_do_configure() {
cmake ${OECMAKE_SOURCEPATH} \
-DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
- -DCMAKE_FIND_ROOT_PATH=${STAGING_DIR_HOST} \
+ -DCMAKE_FIND_ROOT_PATH:PATH=${STAGING_DIR_HOST} \
${EXTRA_OECMAKE} \
-Wno-dev
}
-EXPORT_FUNCTIONS do_configure
+cmake_do_compile() {
+ if [ ${OECMAKE_BUILDPATH} ]
+ then
+ cd ${OECMAKE_BUILDPATH}
+ fi
+
+ base_do_compile
+}
+
+cmake_do_install() {
+ if [ ${OECMAKE_BUILDPATH} ];
+ then
+ cd ${OECMAKE_BUILDPATH}
+ fi
+
+ autotools_do_install
+}
+
+EXPORT_FUNCTIONS do_configure do_compile do_install
diff --git a/conf/bitbake.conf b/conf/bitbake.conf
index b69b6757db..48e098db44 100644
--- a/conf/bitbake.conf
+++ b/conf/bitbake.conf
@@ -688,6 +688,7 @@ include conf/documentation.conf
require conf/sanity.conf
require conf/abi_version.conf
require conf/enterprise.conf
+require conf/compatibility-providers.conf
##################################################################
# Weak variables (usually to retain backwards compatibility)
diff --git a/conf/checksums.ini b/conf/checksums.ini
index 994389753e..1cd45c9d1b 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -858,6 +858,10 @@ sha256=7bae2d456ede67312e1b34e4bfc277af7331e0eee55b95226de392e2d4fee340
md5=5e47d51daf090c25635cf2c3597150bc
sha256=5194ae0f07aaf274e46712cd3f2be553ca75970d2124ac388ce444adee5e2878
+[http://downloads.sourceforge.net/project/performous/performous/0.4.0/Performous-0.4.0-Source.tar.bz2]
+md5=d7eafad29a94e3099c849d3c7208bfac
+sha256=4688546a70b09837311e428c233bac091ce5301c7dd4efe21137ca8867af8be0
+
[http://search.cpan.org/CPAN/authors/id/C/CF/CFRANKS/Perl6-Junction-1.10.tar.gz]
md5=b014170483cf85a93d08ee59196c53f9
sha256=1428a61246a98411c2f16fcaf051c7acb53fb1507b1982da52d5b6aa70f78c2b
@@ -1054,6 +1058,10 @@ sha256=df77eb883efdcc61220eaf7ade38324629c273c278ce8d700a5530369e9b6df9
md5=c6660feea2a6834de10bc71b2f8e4d88
sha256=94f99df1d60f296b57f4740650a71b6425da654044ca30f8f0ce34934429e132
+[http://www.libsdl.org/release/SDL-1.2.14.tar.gz]
+md5=e52086d1b508fa0b76c52ee30b55bec4
+sha256=5d927e287034cb6bb0ebccfa382cb1d185cb113c8ab5115a0759798642eed9b6
+
[http://www.libsdl.org/release/SDL-1.2.7.tar.gz]
md5=d29b34b6ba3ed213893fc9d8d35e357a
sha256=f5708b3909261df2043859e771601a5ec973197b2c59d18c6649c1096b5151bd
@@ -1846,6 +1854,10 @@ sha256=a938c07ea331359f379802c50c33aa0307b913f742ad74087d45e7fb2a1f4d50
md5=44e18d01857f9dfeb8628e317e786f31
sha256=4f549083df9db85e61d0b272645e3dc71bacde9b9156ca20a57440e794b71042
+[http://xorg.freedesktop.org/releases/individual/proto/applewmproto-1.4.1.tar.bz2]
+md5=76ca1c6e1d8904d2d885f81f7332eba6
+sha256=08069e1b7dd0e357c1ac7fa63aadcae094dc131d2a578eb1600a9bd16b8fde19
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/proto/applewmproto-X11R7.0-1.0.3.tar.bz2]
md5=2acf46c814a27c40acd3e448ed17fee3
sha256=db738777fd573bede8e41f121f31692e8ec70bb822b5dcd263973533273fc5ec
@@ -1854,6 +1866,10 @@ sha256=db738777fd573bede8e41f121f31692e8ec70bb822b5dcd263973533273fc5ec
md5=420e6cdf38bb771ec8b00228bf09e8ff
sha256=15fef83a202b8dcee3420c88dba4aeed1f8fc840ab537487fb5411b99a2eb962
+[http://xorg.freedesktop.org/releases/individual/app/appres-1.0.2.tar.bz2]
+md5=6f2f5d9f41669d498b56d73dc3206951
+sha256=37d0fbb16c553fa09878d107f29f26c2ca4206c98dd23c44a0cb670ace531e36
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/appres-X11R7.0-1.0.0.tar.bz2]
md5=3327357fc851a49e8e5dc44405e7b862
sha256=bbc15785d609c7f26176b91d26354ca7bfcc5d9fe72d15a78f2809eeba1cb6b0
@@ -2062,6 +2078,10 @@ sha256=f6277da4651bceaeab442f864b735a5d7b0998d55f9209e37cf18f7464320e3e
md5=3e6bcedc549cb4c014227f882969db5c
sha256=f6277da4651bceaeab442f864b735a5d7b0998d55f9209e37cf18f7464320e3e
+[http://downloads.sourceforge.net/asio/asio-1.4.1.tar.bz2]
+md5=1879b246f9217d64bd3126aa16488bc2
+sha256=aeb5c997940e6afd399c62316f03f480557f2b721354adff065d230183ff2782
+
[http://802.11ninja.net/~jwright/code/asleap-2.1.tgz]
md5=eb74eca847fa71ba89a965548526f7ac
sha256=ba77747cfb107d31cf4ae2eb27839cfa196c0fca08c98465256a4820b9d85d29
@@ -3046,6 +3066,10 @@ sha256=83719927ac4309f42e3cadde125a52cfba2e9c951115ac4c017f292f6e4c14bc
md5=98200c358e5401d648b980564d9ae39d
sha256=863f673518af19f9ae35ee221b30bf8c8b695c76c543d18b3ac400a51b855c41
+[http://xorg.freedesktop.org/releases/individual/app/bitmap-1.0.4.tar.bz2]
+md5=7d0c1ac193be2491c72a91ccf37ef18e
+sha256=2517aaa015795a348435e4e83bafe7642d4b2fe1976ee982a5d652cf417f79d8
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/bitmap-X11R7.0-1.0.1.tar.bz2]
md5=bbb3df097821d3edb4d5a4b2ae731de6
sha256=ac6a5c3f4aa88f39e8f04fe43f00972f0235674ac3edb994c70ac802a1ed0219
@@ -4554,6 +4578,10 @@ sha256=e77e1cb6cdeb30367f75accf62a7b94598ece4400c42eb9d8181b7da4fc87f82
md5=9f99bee77ff3c565b4898663810fbef5
sha256=11403054cb407cdf31da48216f55d1b5943798cb442bcab69faa0a3d7d167541
+[http://xorg.freedesktop.org/releases/individual/app/constype-1.0.2.tar.bz2]
+md5=83f623f961400ecc56ff52a716308173
+sha256=70375ea6b3e17cabc35492f87b5b138295c8f0258d65b0fbba998e3ff69bb634
+
[http://projects.o-hand.com/sources/contacts/contacts-0.4.tar.gz]
md5=7d72fac4f0d6e1c771c37e4e80093e70
sha256=e090ab64a02e4918f78312df19715bc2008aae7d44f6b0913c2a46a13d1881c4
@@ -5190,6 +5218,10 @@ sha256=24c7887fe896325a6cdc86b8beeb0d9c2de8b1c4cb20f53c2dc8f90963fc39bf
md5=c0124afc760d4fe8c24ffcf15ba7f391
sha256=4e0c1726f9c565deec6d6af9eebda47ca6dea473f3280cc89beb321ae33ff962
+[http://www.burtonini.com/computing/devilspie-0.22.tar.gz]
+md5=4190e12f99ab92c0427e457d9fbfe231
+sha256=e06aba1d96889e1b58bd1b0ba4d3015f50adc3ade2824b5cb37a0ee7f2490aaf
+
[http://downloads.sourceforge.net/devio/devio-1.0.tar.gz]
md5=3f421c80bce00b8bfe68ef9f453932b7
sha256=25380c3722c75b993d530c09d48f5941c0a640a4382f6a0e1878c4ee8459dd16
@@ -5750,6 +5782,10 @@ sha256=6d851f4117002d3523354b70c3f9be4abe5325b084ff54d01ac6daa5ce9a5944
md5=cc101da3b436607ee2265b5af5001484
sha256=ab7c305be32708c4ede670e13783b718e6a28e35b5495e6c42c31c35a8b512a6
+[http://www.hugovil.com/repository/dvnixload-0.2.6.tar.gz]
+md5=33308f47405c0e96a8248c7b1229dee5
+sha256=5b76e9cb0ee843208c17053315926e0e168db8a89fe960655a0d0f4871e2b9da
+
[http://www.threekong.com/download/dweba/dweba-1.0.0-pre14.tar.gz]
md5=6f0bd0bcda35c6a96cc3853f16ba82d4
sha256=ea32ca58b6500d9061177da23ef03f918ef0c5bbbdd082a843f4834cef9c4957
@@ -5930,6 +5966,10 @@ sha256=978fbc134eef3da8a5f363c9e93494a3d7399e8f2b435ac6b1f2c63f09c167df
md5=a25f931cc6c8d03daaed434f5db5df2d
sha256=a2a56b32eaa92ad6f667853f023177ffad9128cfa0361afc2872323598aeceae
+[http://xorg.freedesktop.org/releases/individual/app/editres-1.0.4.tar.bz2]
+md5=1800dda934ebb7c588ea686278a10e9f
+sha256=d7ce4c0bb214e055cb7680d8b88b9f551610fc40c28269cb51649133862f3302
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/editres-X11R7.0-1.0.1.tar.bz2]
md5=a9dc7f3b0cb59f08ab1e6554a5e60721
sha256=1373ded7c35c38e479122ac1fd8a85682a533612538645c79d09992abcbaab10
@@ -7126,6 +7166,10 @@ sha256=168b326dbad59381d0e0a9544d26f1fb8bd23d3b5478fcc426f7ce470ee8a2f7
md5=aa7ff4bd20b961afda9c15d103b972a5
sha256=e9c672c8ff275fd5c2d76dda9a9f11138766e246e31e45763cd7e14d8824c0dc
+[http://xorg.freedesktop.org/releases/individual/font/font-adobe-utopia-type1-1.0.2.tar.bz2]
+md5=ad945b19b2db64dec3a19507848ff63b
+sha256=8c5f2752e44af6219c1b4cfc178f9721f6dd573039e973f61029136c2756e233
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-adobe-utopia-type1-X11R7.0-1.0.1.tar.bz2]
md5=db1cc2f707cffd08a461f093b55ced5e
sha256=0ba76231d9af3422376d9c1652ab3f8614bdd52acc2e2a839d911e1a54b5d5b6
@@ -7206,6 +7250,10 @@ sha256=8d55580d9cf032127bd17b8d4a6bdcdb09392e76fe8ec075ce7472bc3de8e5d6
md5=ad43cf739b3d46ba1e7dc778a0608a52
sha256=7a1a5e72f7e42398b98d70aa64252837e85ed76eea77a1b9a4cd0f1203d7d644
+[http://xorg.freedesktop.org/releases/individual/font/font-bh-ttf-1.0.1.tar.bz2]
+md5=664df71cb510b744b4a10e778445c37b
+sha256=1ce72f84a6c4df7f0e949f915346026ebfeaa5b2e47f7bbc29117ebbf3a7a7c8
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-bh-ttf-X11R7.0-1.0.0.tar.bz2]
md5=53b984889aec3c0c2eb07f8aaa49dba9
sha256=a268245101a49b1e4c2785a9d809d43fe8564b8243dcf7898a37f25abf4d9edf
@@ -7214,6 +7262,10 @@ sha256=a268245101a49b1e4c2785a9d809d43fe8564b8243dcf7898a37f25abf4d9edf
md5=46588b22678e440741d6220bc3945cbf
sha256=5a8a5513f2c829d56043a0f74980efc11b4b4522f21116f16711998f72c3645b
+[http://xorg.freedesktop.org/releases/individual/font/font-bh-type1-1.0.1.tar.bz2]
+md5=374d954c61363206c93d1ce7e9445c31
+sha256=da3b5f26c6cde0baf3831f50c79a7a107806f885e0205073855bfbc5a357bb45
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-bh-type1-X11R7.0-1.0.0.tar.bz2]
md5=302111513d1e94303c0ec0139d5ae681
sha256=f7cede14e92d83d6c3d36eeb9d3d66fdd60372c39e8571cb9ae40a7d8c5182d5
@@ -7246,6 +7298,10 @@ sha256=71b1b6416e0018ad954225f53c0c9f2eaf8d663e1084657f3cb9b930073b7f6b
md5=1399dc18aeb9571b0951d9570ea1059d
sha256=99ac01786ac400cc7407f1c427b92c5ff1ac5a31ce7d5907b7ad3c969214f6e6
+[http://xorg.freedesktop.org/releases/individual/font/font-bitstream-speedo-1.0.1.tar.bz2]
+md5=5b1856a24b1b46414950febc63880307
+sha256=3d231566856c754f48f568f41c15376730d45d9c3ffd37e1d2476097519f22b8
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-bitstream-speedo-X11R7.0-1.0.0.tar.bz2]
md5=068c78ce48e5e6c4f25e0bba839a6b7a
sha256=f44bc571753fd04c09eac7b266d1e0256db9efd0d40ab834920b9dfbb4297d52
@@ -7254,6 +7310,10 @@ sha256=f44bc571753fd04c09eac7b266d1e0256db9efd0d40ab834920b9dfbb4297d52
md5=6610475e2e231242f8f2122a709c3695
sha256=4fce492dcf168837342ea1787ac35b53e4d30361239cba207c9520c42454d903
+[http://xorg.freedesktop.org/releases/individual/font/font-bitstream-type1-1.0.1.tar.bz2]
+md5=a4e8e229a051c0ede9eb525e4006d93a
+sha256=51027cc1d49140153620c1a2b653f1773fe92cb694b221396d68265343e113ab
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-bitstream-type1-X11R7.0-1.0.0.tar.bz2]
md5=f4881a7e28eaeb7580d5eaf0f09239da
sha256=f6f09d398a89595bec5825043d36056c0a080aa2d47ae3e52c01a7258119fd6d
@@ -7310,6 +7370,10 @@ sha256=e7ee982884f0c1fca409b6b9a946493afb23c9e61d33ac84ec29819717a66b75
md5=8e8733051371e2b51123376b49f5d3ea
sha256=30d091c2e3506943f8a6e152c4be973c462ba19293a864bbb48b82c6cf9c461e
+[http://xorg.freedesktop.org/releases/individual/font/font-ibm-type1-1.0.1.tar.bz2]
+md5=1646179ff224b3e2c9b1e7f59042897f
+sha256=887ea895cc0fdd5c50d4960aee7cb6ed813cf90f53b53ce0e0e068dd606cc919
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-ibm-type1-X11R7.0-1.0.0.tar.bz2]
md5=fab2c49cb0f9fcee0bc0ac77e510d4e5
sha256=534210f571a2166f3b6d4d8e1c37f74574c0130a4a1ed4c7d37b50a98fc95cfc
@@ -7366,6 +7430,10 @@ sha256=e332497fe6220c019c411912653a96d26c8706c03456ac8ff3ff5ef38b1cc77c
md5=0b271fc617087d77560bdca20c0cdbb0
sha256=58d2868801ca063797fa88fb4aea59f7c550473be4e9a4f96d84fe39b967d141
+[http://xorg.freedesktop.org/releases/individual/font/font-misc-ethiopic-1.0.1.tar.bz2]
+md5=4c88c79b8e5d47af90b21e948d42755f
+sha256=bf3b3a994b6c4047b2d79f590e7113ed429b8b7a83992cb753a83e6e8bd3d948
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-misc-ethiopic-X11R7.0-1.0.0.tar.bz2]
md5=190738980705826a27fbf4685650d3b9
sha256=04025084b8f4e7559e34938cab9a70b28cad8174ef5f5f6103abd633b54048d9
@@ -7374,6 +7442,10 @@ sha256=04025084b8f4e7559e34938cab9a70b28cad8174ef5f5f6103abd633b54048d9
md5=ccb212a7badf7aefdc9f9a92af428d32
sha256=c7e12b9926b6053f3567eae548840f0b3d283ce34f842b06309a81c1d98d3924
+[http://xorg.freedesktop.org/releases/individual/font/font-misc-meltho-1.0.1.tar.bz2]
+md5=345f1a78312e30cd2c41d24ea3f3276f
+sha256=5366d7a0f38a189e504676a9cddd8430113f9957919f0a3dc181bcaaaed92618
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-misc-meltho-X11R7.0-1.0.0.tar.bz2]
md5=8812c57220bcd139b4ba6266eafbd712
sha256=cacbf0c055b95db07e4e61716a549195f6ed054ba98d0b443879f57876ca253d
@@ -7494,6 +7566,10 @@ sha256=ef76d3b91d1bdaa9ff73cc1e5905ad4bbdc028f06157d0d2319d38e7b7f84a4d
md5=d7e965776c7f0c30b0f09742176fb77a
sha256=8fd9f9b81120d8afc25ea8901a8a91d7428c45cd9cfe7a7bef2b15c8b8d5f341
+[http://xorg.freedesktop.org/releases/individual/font/font-xfree86-type1-1.0.2.tar.bz2]
+md5=a966f5a8aade9e63af86d8a6bf3e8586
+sha256=7a026aeaafe5a619b2c1b35cd361125b169b2212eaf0f2f5ce796038b1cf06cd
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/font/font-xfree86-type1-X11R7.0-1.0.0.tar.bz2]
md5=27a6bbf5c8bbe998ff7e8537929ccbc8
sha256=cda4fed7e7d462257f7282db3459fa94f94ab70934a401b7a90f5decb044f94f
@@ -7502,6 +7578,10 @@ sha256=cda4fed7e7d462257f7282db3459fa94f94ab70934a401b7a90f5decb044f94f
md5=60df6b625074a9790e28543dcea71651
sha256=48063ed49b200927376645f9ffe65faa39af84d59ba6f60f2abb2f9c6fa3d9f9
+[http://xorg.freedesktop.org/releases/individual/proto/fontcacheproto-0.1.3.tar.bz2]
+md5=a8a50e5e995bfacb0359575faf7f6906
+sha256=1dcaa659d416272ff68e567d1910ccc1e369768f13b983cffcccd6c563dbe3cb
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/proto/fontcacheproto-X11R7.0-0.1.2.tar.bz2]
md5=116997d63cf6f65b75593ff5ae7afecb
sha256=72a6200a586f27c55b837cc6e537f15499a2f07783a826521c9ad2eaf35a6461
@@ -7606,6 +7686,10 @@ sha256=44b7e18ba9ae5667dd64c89f7b04627bda5807a3a90255a125702d63c0c4ee17
md5=d5e8be59e307cef76bc479e1684df705
sha256=9f3b3ed7c9fffccefefa9af432eee7244a65592118851f75b5897814cb79b86f
+[http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc/2_25_00_04/exports/framework_components_2_25_00_04.tar.gz]
+md5=11410b5cf4142ae415b683af0e9929b5
+sha256=161432f5cf184f96de290f807a4a6fddf11f2612d5b2efd91f8187c0ac612a40
+
[http://downloads.sourceforge.net/free42/free42.tgz]
md5=1fc21e04b3b77150846027dc7cb5210d
sha256=9d348a9d2d5bf8eabc7e7bb6f0907e611403e4abe6dc1e11b1b2ad1118b3088a
@@ -8306,6 +8390,10 @@ sha256=ccff6cab0e847c486d30b70bdddac4e6646bafcecaa3b63134d6e3d4d5a4b91d
md5=1d1b1d5c0245b1c00aff92da751e9aa1
sha256=cc340338a2e28b40058ab9eb5354a21d53f88a1582ea21ba0bb185c37a281dc9
+[http://gdevilspie.googlecode.com/files/gdevilspie-0.31.tar.bz2]
+md5=a414f4ed6c2ab135b9be3d2cc27e3c4d
+sha256=1e677b41a6f3f256f759a48f92c613e68dafc3c5a2586230c61591481faf76b2
+
[http://ftp.gnome.org/pub/GNOME/sources/gdm/2.14/gdm-2.14.9.tar.bz2]
md5=7e46bc3b0a5b08e79f1f2f1b869caf40
sha256=0483dac71c88ca0da5ee85729c0c1dd6793d928109ac79ad56583aa1a5ff43d2
@@ -8674,6 +8762,10 @@ sha256=f921da7c8beb396278591b5ca7159b432a38902f1f872c4ae2d40aeb38f9cf01
md5=cacbcac3fc272dce01c6ea38354489e2
sha256=a1de3dca039d88c195fcdc9516379439a1d699750417f1e655aa2101a955ee5a
+[http://downloads.sourceforge.net/project/glew/glew/1.5.1/glew-1.5.1-src.tgz]
+md5=759a59853dfaae4d007b414a3c1712f2
+sha256=89e63d085cb563c32a191e3cd4907a192484f10438a6679f1349456db4b9c10a
+
[ftp://ftp.gtk.org/pub/gtk/v1.2/glib-1.2.10.tar.gz]
md5=6fe30dad87c77b91b632def29dd69ef9
sha256=6e1ce7eedae713b11db82f11434d455d8a1379f783a79812cd2e05fc024a8d9f
@@ -12174,6 +12266,10 @@ sha256=754038a9eb8f1d0d6559d5b124a68e1e530a76366cff251d79536ec89e2fda21
md5=7ab8b64edf0212a9d9a3c8129901a450
sha256=06401591de57a2c4cf2255e3d5230ea19351c5516cf8dae98c61092392bab5bb
+[http://xorg.freedesktop.org/releases/individual/app/iceauth-1.0.3.tar.bz2]
+md5=975ade3f238c1eb10705da0a91e6e8e7
+sha256=abca3ff6c9f2da2600a474f0e92ae5e62c43914f7bd3d948b91b0a7f9117d81e
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/iceauth-X11R7.0-1.0.1.tar.bz2]
md5=92035bd69b4c9aba47607ba0efcc8530
sha256=46a02c0dddbe80fbd802da47d0a9eac03002deb538b109dae804553fbbdfa7bd
@@ -13322,6 +13418,10 @@ sha256=3e406c76874827c236c7070c1349f8b4ee058aa664fc3066435c938bf6d5f0e8
md5=9d5045a5c76b1fe360221b967a5aa0e9
sha256=e2e757986724a5d2ee299aa7616a3d9985af45e363021b486b7abbcac4ca01c2
+[http://xorg.freedesktop.org/releases/individual/app/lbxproxy-1.0.2.tar.bz2]
+md5=0aa9284354552ce6700485a36d2803c3
+sha256=7ec5dee387bb6f3125392c0faca1c9712898b31e1410de9767e0d933b21cb679
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/lbxproxy-X11R7.0-1.0.1.tar.bz2]
md5=d9c05283660eae742a77dcbc0091841a
sha256=35360dd6160d94a981d923486a026fe91dfc3e0db2f5923aeb782b7e9c5e606f
@@ -13430,6 +13530,10 @@ sha256=ecd2ff407a418eb4ac673f48b4d0a9c5b6860a13cef7211a32fe8f3d3db0407e
md5=d58b5a03ba36c661ff48f38048c2edd3
sha256=82f9b9dff544fc3d8bcda5878930cdc3817d478f34b3790c599fe185c138f160
+[http://xorg.freedesktop.org/releases/individual/lib/libAppleWM-1.4.0.tar.bz2]
+md5=75e27245bc15aed845fe0505f4f21ca6
+sha256=c8e92616ad465ce2ae86360ff216a9711bdd1156dbb06af6d86009c6773e1c82
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libAppleWM-X11R7.0-1.0.0.tar.bz2]
md5=8af30932ebc278835375fca34a2790f5
sha256=66d5b9d53816cc158a0f241772cbde60a52aa0a722e28d3ef76a5eb6c82840d5
@@ -13442,6 +13546,10 @@ sha256=2f18f9fa0e18a3eab3c154ba820ad64b5c6ee364e147524055a553a130ccfdde
md5=81521249353fa33be7a4bb0062c2fbb9
sha256=9bf92ffdb51e69e07682cd1a6c0101f2a833b16b9bfa5d601491ff46a35a2cf5
+[http://xorg.freedesktop.org/releases/individual/lib/libFS-1.0.2.tar.bz2]
+md5=ecf2d6a27da053500283e803efa2a808
+sha256=af2a5fe5eaa2b026e10bddb4e3f39976dc13deb5dbdc714abe1f016435ce3049
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libFS-X11R7.0-1.0.0.tar.bz2]
md5=12d2d89e7eb6ab0eb5823c3296f4e7a5
sha256=15bedd7f892fbb130e2b9c17d4f927c4904362a7be5b73d07d56d8aa7025f6f1
@@ -13518,6 +13626,10 @@ sha256=efde1a974723b9a0bf3c731903766bce9dd1ead3d0550eb2a4f2396d7b402e17
md5=337b379fd00a67345b083100c4e6ba95
sha256=6ad87266173d21ba7e0e4506db0c094769fd58c3f0b741b37f30c297deec166a
+[http://xorg.freedesktop.org/releases/individual/lib/libWindowsWM-1.0.1.tar.bz2]
+md5=274b2b5620a524fd7bb739edb97317f5
+sha256=25f07cf847cbe91d36c20f348b4b9494c4504fe02966e8cdf65cf56316a70edc
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libWindowsWM-X11R7.0-1.0.0.tar.bz2]
md5=d94f0389cd655b50e2987d5b988b82a5
sha256=76ccdb6adfc51a4c40e90fe66f599ee4de4787fca44860b851dd4bbf97f7889d
@@ -14098,6 +14210,10 @@ sha256=b3bcacd212b1aac947cdfe7e64175255f0302bc5a461e2c8925e3cf491532b10
md5=b54600573daf9d1a29b952e8d35b389e
sha256=1217825ba8d66198466ee8306d0d6d237d2dd80d0f0783c98701296791833abb
+[http://xorg.freedesktop.org/releases/individual/lib/libXvMC-1.0.5.tar.bz2]
+md5=16c3a11add14979beb7510e44623cac6
+sha256=0644c768d28343af0efe0cb09fc9e0220b8ad755642bb498a3038cee328fde7f
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXvMC-X11R7.0-1.0.1.tar.bz2]
md5=c3eb4f526f08862489355a99e3eda1bd
sha256=fa18853a6cb877e59433fdc1455e5b7fde9bd47c617d97208c7e3e32ff84d774
@@ -14366,6 +14482,10 @@ sha256=03d751bd836174e2d6766d8036fc72e130dd090b13256d40a58ba6ab659475ef
md5=866fd13611a8de946428db1df9be8468
sha256=74def55ba6a61e966e0873a4081fd3dd65089b94b837810d3bc056221d7e41c7
+[http://libcli.googlecode.com/files/libcli-1.9.4.tar.gz]
+md5=b917617d21b90db214971efe64a33416
+sha256=c1e56ff2e55a879b7c89b5808aea76063512d9a24cffd601aa3d9a84cd6a7928
+
[http://repository.maemo.org/pool/maemo5.0alpha/free/libc/libconbtui/libconbtui_1.4.1.tar.gz]
md5=68ac3177685c577aadf8d2e9f47b1878
sha256=c3540df46bd9716c6a6f521806c70ae548822a5e62d245900cc28b5fa9fc3eb3
@@ -14478,6 +14598,10 @@ sha256=9422e73c55aa921fbbce06e5e01bba0b98bb7a0f1640c27cfd307c290dba792c
md5=6c5b6fff276c3a1171ceb41c6d4b6e34
sha256=76866075a54aa04f4f18f2cf09cf19c84dee4ed22c45b741dc4067f5e224430d
+[http://www.des-testbed.net/sites/default/files/libdessert0.86.14.tar.gz]
+md5=7c9f9ecfcc36217ac2af3dba7828e284
+sha256=4cea899ab0fc3d96a6ba1e5e7e28253636f4ceb3ed3cba88da4cbaa328e42285
+
[http://handhelds.org/~paxanima/files/libdictionary.tar.gz]
md5=10ee733c70e96e8e9f01d3de2cc0c78c
sha256=46f0a85f340e099e9010c8eb9a28d727830aedb32be48fe0a2f0cd081e0623fd
@@ -15770,6 +15894,10 @@ sha256=07128710a699b453dcd7b92e33f2aa8dcbbfe0a657d33040803cdaf0997e442c
md5=757371e21e4f3653ce4d12d3ba0be1e0
sha256=9a0864cd442c43e5b69072dc0617b56252bc933fce26f6bfd6d47909287a353a
+[http://downloads.sourceforge.net/omxil/libomxil-bellagio-0.9.2.tar.gz]
+md5=42ab7383c4ca4093000ec7062289112b
+sha256=dc5d3cf256390d5419ea7dc3fc35761999a1da99fa4b645ac3e92a6a279c38fc
+
[http://ftp.gnome.org/pub/GNOME/sources/liboobs/2.22/liboobs-2.22.0.tar.bz2]
md5=1b090ecd6c0df58b131795ff9a5c9057
sha256=b35760855d7d1def532e9e808cecde29b75cec455b238590072abf4a8206536e
@@ -16010,6 +16138,10 @@ sha256=24b354dcd8843274a20e1625e04d618d43f9851082254cb9dae6f33f15c2a5cd
md5=b8b8d09adf6bee2c5902c8e54c4f2e68
sha256=cafe6431f9e6d561fb7b396bf94ff73a9cd0f4279f3eea2fc714ab90e345eee6
+[http://downloads.sourceforge.net/libpng/libpng-1.2.40.tar.bz2]
+md5=29bbd1c3cbe54b04bfc2bda43067ccb5
+sha256=a6197352ad5b79a9a1ce0dd59f5e737cfbf909e0f3c5f64631cf0d93549e4e40
+
[http://downloads.sourceforge.net/libpng/libpng-1.2.8.tar.bz2]
md5=00cea4539bea4bd34cbf8b82ff9589cd
sha256=9bec729a1e77d8bbc5800b14aa81f09290aa18daa40f344103f2c0d1d681531b
@@ -16974,6 +17106,10 @@ sha256=ba1c32207fd62d374c9397a81fb1247da93edb859e30d0d855dc65e5457f690b
md5=ed40cf4088c306400b005bbd63ac36be
sha256=e41e99925e8c81a9e6c7f4cf399da1d9f571927413196898af46ecbebee6a91b
+[http://mirror.lihnidos.org/GNU/savannah/linphone/3.1.x/sources/linphone-3.1.0.tar.gz]
+md5=ed40cf4088c306400b005bbd63ac36be
+sha256=e41e99925e8c81a9e6c7f4cf399da1d9f571927413196898af46ecbebee6a91b
+
[http://developer.ezaurus.com/sl_j/source/c860/20031107/linux-2.4.18-rmk7-pxa3-embedix-slc860-20031107-rom1_10.bz2]
md5=d74fc9ea01384bead3925434b932d6b7
sha256=3dcafe41355fcc688f4a376a5dc71901ea2fbb95698397c87c6a6b12aa058c69
@@ -17294,6 +17430,10 @@ sha256=e4b6ab08eaff2766c3bf85ea8d63ab31ae774266b8351772117fcc94d1318ade
md5=de958cdb8d00e74792dd69f3c945b037
sha256=371f8133db705bde6c2f79cccb0b1a1f626a0d94bf41acceba5d76a69155f057
+[http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/2_25_01_06/exports/linuxutils_2_25_01_06.tar.gz]
+md5=15486b27c9960f06b53f8a60e90f941d
+sha256=61b86cdb5c1b2f9eb766fece6ea5ae89f29cf84d0c3eecbcc9b5d0ffd42d2bcb
+
[http://gpephone.linuxtogo.org/download/gpephone/liblipsevent-0.1/lips_event-0.1.tar.gz]
md5=1fd0f41f9676ef0c882921bc37628d07
sha256=7182cf3f63e11e7ea6c6a994f9e70ef3bf6e430a5db643f5b29a0fd0996ddfd5
@@ -17650,6 +17790,10 @@ sha256=c0c4d76df0350c626df7ce62bf3df7915f9959557d76abce96222857d782389c
md5=b01e4f71c20fc1c79ed727759c1df40c
sha256=2010f2152eee89a67f02edc3041574fb07442d075ca46fbcf84f981f0977a5d7
+[http://xorg.freedesktop.org/releases/individual/app/luit-1.0.4.tar.bz2]
+md5=4e45233e310d72dce307709761cf241b
+sha256=d11cd500975f652060f89d79cb8034011d99ee9aa6c82951680fc0621ecb8252
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/luit-X11R7.0-1.0.1.tar.bz2]
md5=30428b8ff783a0cfd61dab05a17cfaa7
sha256=fb423dc3ae75e64a256172c873732fe869ae482409cf1f3e7d980d222f070cee
@@ -18050,6 +18194,10 @@ sha256=16ff3ea972065925338da1a1f37322dc4d8774f6d34d2dde2ce85121c08c99e0
md5=90f5f3b987497a481b94d49372f17dce
sha256=0a4a0d4e2613b0cd4321e55fd4741788b728736fc8a517996e2015fa49862e61
+[http://xorg.freedesktop.org/releases/individual/util/makedepend-1.0.2.tar.gz]
+md5=905bfeb1a59929d950e5d638fbadcf39
+sha256=008e6e117372e04cdc9a72ffc7dfae2e2d6617c9b399e052ae12dc2a1a03079a
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/util/makedepend-X11R7.0-1.0.0.tar.bz2]
md5=7494c7ff65d8c31ef8db13661487b54c
sha256=1caf464a967ff9335a040f2d3ffe050c881efda13c14531be49cf1aa8dabda92
@@ -18670,6 +18818,10 @@ sha256=7fbadfa5cb38f7d754214b792854c4a0cb32fd1c9b5ae8ff05434cb3b3acbe01
md5=912e6305998441c26852309403742bec
sha256=25cba395022c878cf0323da5b2b4aba1cca03001311a4e2d7632d6a199806294
+[http://xorg.freedesktop.org/releases/individual/app/mkcomposecache-1.2.1.tar.bz2]
+md5=25b774e1b64833d0cdc00663931efc73
+sha256=c9ee54d18cb9a8a0c5fcd8d2dd08ed8ed869f3a538af46caff08ca9bc9cf2caf
+
[http://xorg.freedesktop.org/releases/individual/app/mkcomposecache-1.2.tar.bz2]
md5=c8237b4aea1ae0c15441deab6b12c5c0
sha256=8c34cdd03f7d11ac86c681349d39a4faf88854faaad928f0663da55f125aedfb
@@ -21338,6 +21490,10 @@ sha256=3e9510ce715f28b7e6b803fcdadb73b37c83792c0b5e1e9bcb066ab972649996
md5=e6029fafcee029edcfa2ceed7a005333
sha256=e105b6aad55589aecf20ae70ab7aa81eb202296fc52531f62e546af23077cca1
+[http://us2.php.net/distributions/php-5.2.11.tar.bz2]
+md5=286bf34630f5643c25ebcedfec5e0a09
+sha256=9bcd14ceda2b4bd7abcc7eb59bd74bae490d9335e4207580de783b48aa7e8f23
+
[http://us2.php.net/distributions/php-5.2.5.tar.bz2]
md5=1fe14ca892460b09f06729941a1bb605
sha256=5cac1e70df5019ebdfdab2e0b8b216f7fdf56b9895c9f68c993313918249bba3
@@ -22982,6 +23138,10 @@ sha256=272301a27e2f7bcd44c8d09f496e1c749c80b86d9489ea9c30bb265bf2dd02fc
md5=61784f1bcac80f18f468b8dd013eab4f
sha256=9cfe0418699e231587182b441c8f6ca68f109059c62bfc8dd9daeafb8277d211
+[ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-4.6.0.tar.gz]
+md5=2a7b5126f2450d8525af355fc4c12ad6
+sha256=55259c813324f6383cbd441aa2f23e01c320b6d63fbe3b5d52a7715055d28589
+
[ftp://ftp.trolltech.com/qt/source/qt-x11-free-3.3.5.tar.bz2]
md5=05d04688c0c0230ed54e89102d689ca4
sha256=aac89e862c74b2f3ead768e50e9fa7ada1e4225fe9d1d9e05723a3279259eb96
@@ -23530,6 +23690,10 @@ sha256=b02eff373fd66daec2ffd75afd3ad97c32c45679883ee65b21aa50fec92fc752
md5=99aea04a27197056368a4431f30f9cdb
sha256=02fc48b5069018e4262f0e5ebb669acedc04167307c98f0fdb2ca22e568e9596
+[http://xorg.freedesktop.org/releases/individual/app/rstart-1.0.3.tar.bz2]
+md5=e09c14cf1ac78260f95a9aa45bccab4c
+sha256=d6ee7becf9ece2fcc30ce50f7e9be31f231cce0cb3a8ba09d1697ac2822c3fcc
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/rstart-X11R7.0-1.0.1.tar.bz2]
md5=6f33a1bd8e99372b7544ddfcad456369
sha256=d662e932154df4d99ffcf29cd1efe5adb7b0eb1841ccffe9155b9c5d8055434c
@@ -24110,6 +24274,10 @@ sha256=7d0c145d53246ddf09fc749f91324897ed9a3da0064808f99b789c37470080dc
md5=839e968d7197b9563f0fd8a5a3aac2e3
sha256=23e163502e208ac16f04a12b15f7f8dcd9919f0149c714353b7f92539b7e9802
+[http://xorg.freedesktop.org/releases/individual/app/sessreg-1.0.5.tar.bz2]
+md5=00e834c3cbfd990e9d7d5ddc834242df
+sha256=3308fbd0018d53bb818fee9de1cde484965b740073d5d240efa4cfc881c9d1a9
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/sessreg-X11R7.0-1.0.0.tar.bz2]
md5=8289a5b947165449c23bdfad9af02b4c
sha256=3769ad5059a2841a8ee28fc8a7d3a3ca8eb59f4fd46d0bd629829f3841202734
@@ -24174,6 +24342,10 @@ sha256=086f67c8272ceca059c64e127dbdb66ccad8de6f532aee02d22786543718a508
md5=6fab3bb176be9e510c5613d054ef1ca4
sha256=9b5b139238419757d57de584c2ad30b853367245eef49221ce02a3b403cf2bac
+[http://xorg.freedesktop.org/releases/individual/app/setxkbmap-1.1.0.tar.bz2]
+md5=2f902e0a89aaf2b19e06e7f26c6efb3a
+sha256=932f2b314a4bf6dfccd16d63c633073abf650d8e136f481904e972ef3d4faf64
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/setxkbmap-X11R7.0-1.0.1.tar.bz2]
md5=28b141ab0b1c44a5e90d31ad73bd1078
sha256=4d710b17c5440518b43d3d1f7cbcb78a62c72f25e48a1b385a0ae3872ec8b40b
@@ -27190,6 +27362,10 @@ sha256=00b2384e225d6a1cbda4994c63103ac229269bb2946537e9357655e5c5b84333
md5=ed5416cf7e2ba6e66641c88f12768c0c
sha256=780d249696bb2de7acabded90a465a62cd6cbda3b7f0ccff6ebfdf0d8180f151
+[http://xorg.freedesktop.org/releases/individual/proto/windowswmproto-1.0.4.tar.bz2]
+md5=e74b2ff3172a6117f2a62b655ef99064
+sha256=c05bb0edb627554fe97aa1516aed44accf6566b1db0e50332689a24afcebd26b
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/proto/windowswmproto-X11R7.0-1.0.3.tar.bz2]
md5=ea2f71075f68371fec22eb98a6af8074
sha256=e575dc15f7ac3bd4dd4241be617bd88806506cf6ff1fc9332a42ae2275a5118c
@@ -27454,6 +27630,10 @@ sha256=b31c3bc4e85e7f972db1dfb7b447d213694569e2a5794a84116295c334a11f43
md5=43cbe5c7508f7dc3e141c346a897fbe7
sha256=b31c3bc4e85e7f972db1dfb7b447d213694569e2a5794a84116295c334a11f43
+[http://downloads.sourceforge.net/wxwindows/wxWidgets-2.8.10.tar.bz2]
+md5=0461c2085ac1ad7e648aa84c4ba51dd1
+sha256=b84617a2fd219153a6df95dc7f4aa1ba9c07af5859a3d00fc23f9aaed2a1e3d5
+
[http://downloads.sourceforge.net/wxwindows/wxWidgets-2.8.10.tar.gz]
md5=05b32ca051651f4b1885a90f62969faf
sha256=4a65573bc12e15b21a4acdce89e7e6b71edbe214817457f90fcf855220bafe66
@@ -27566,6 +27746,10 @@ sha256=019578691e8ab02532e35033331e275b658b360033e9e34dfdecf4774d161e3c
md5=8d2731e6e95f173f41a0ddc875d55804
sha256=d5e333bc74c0a534bf96f40ea89b7e700f137d46f1fdbaea13fa552ad6227af8
+[http://xorg.freedesktop.org/releases/individual/app/xbacklight-1.1.1.tar.bz2]
+md5=3e39eec6d0fd5c587ca6d55aa7bb8fe1
+sha256=5d32d891c83b9c0089231f4f1c424ab02301b627ce26e5c2e6e397b8ea606fb2
+
[http://xorg.freedesktop.org/releases/individual/app/xbacklight-1.1.tar.bz2]
md5=51b4a1c0ae2b3bd77417306fd78a3e94
sha256=c795001f15974569e16f25b201ac2ac7666c5a646f8d0de3afa0c3a1ba5d64a4
@@ -27666,6 +27850,10 @@ sha256=b7c7fad059ba446df5692d175c2a1d3816e542549661224806db369a0d716c45
md5=2c6ecedb10dc51adbb64c95f22fd99c2
sha256=3399a27101285112ea578e1855c8374254afa8d427a3c5943458abc27c4d70fc
+[http://xorg.freedesktop.org/releases/individual/app/xclipboard-1.1.0.tar.bz2]
+md5=113eccea3ee73a1ef7b43d2291ca1e09
+sha256=de0f37c7bf69c3aac3362bc0cbe470a622c2a85b62c5483c113ea88512232710
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xclipboard-X11R7.0-1.0.1.tar.bz2]
md5=a661b0f922cbdc62514bfd3e700d00fd
sha256=74e949dc0fc1d275b60a170975a9bb99a12153687f2a3478b963b1ae4c607d96
@@ -27678,6 +27866,10 @@ sha256=ced648762382eab09e0ccb87371cb745646ede08ffcb068faa6025d20c4d1f3d
md5=2b1a3d030d87e62a591db8ee4c0072e6
sha256=10b5777ae9ef2a10d4cf447bd1bf13372d7061573835c2c87d5c948b65e9577f
+[http://xorg.freedesktop.org/releases/individual/app/xclock-1.0.4.tar.bz2]
+md5=bb9fd5e00d39c348a0078b97fdf8258f
+sha256=69b903b6305211c9fc5db394f3d08c0a696aa51942d73db7f594422e7be6edf0
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xclock-X11R7.0-1.0.1.tar.bz2]
md5=00444fed4bf5cd51624476ee11dd1fab
sha256=eb93d5278f5e46f8d7ff5b53a10a03fef09326e72966c3a0b8faa255436ee6b9
@@ -27714,6 +27906,10 @@ sha256=6e1cdf207ca998acd4e1cc991bde47fcf9d01d24ba733f9d3afe3c64843ef838
md5=3eb1c2b7a6ceaec4ee872cb06d202d91
sha256=4bf647745b4de940ef75796fc8ad4e1f83c276e474f7b6779f317fcd070de884
+[http://xorg.freedesktop.org/releases/individual/app/xcompmgr-1.1.5.tar.bz2]
+md5=bf8faa8c540bfdcd0252801d8f16d868
+sha256=bb20737a6f9e0cdf5cfbd5288b6a9a4b16ca18d2be19444549c1d6be2a90b571
+
[http://xorg.freedesktop.org/releases/individual/app/xconsole-1.0.2.tar.bz2]
md5=8678ddd23573022d68dcd883ae239be8
sha256=45db847e810a932bb962041a4c242f97779142f7e36feec64ec5f9073bd9b377
@@ -27738,6 +27934,10 @@ sha256=e0dd4b753690c650c6bfbb5af9d190fa6bb3d889a491c8553a34ba397ede8bbc
md5=014bad415e64c49994679cdb71a97e37
sha256=4e7dcd402cd045ce1bd1a3de496270e78d6ead2478a0bcb3404072b33c5c9ea0
+[http://xorg.freedesktop.org/releases/individual/data/xcursor-themes-1.0.2.tar.bz2]
+md5=e8929a1bb4d98d1a3991fd340d0b5f09
+sha256=5f798c2f1d2794c09fa0a40700c40359b725107608012866828015dca47514d6
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/data/xcursor-themes-X11R7.0-1.0.1.tar.bz2]
md5=c39afeae55a7d330297b2fec3d113634
sha256=730029a4f23661094f0d246595041e51ec0b55e7405fcd5affee1ec7f9aba813
@@ -27770,6 +27970,10 @@ sha256=8290616302932e72d4224cbe27d872efa5f44b0b8553ded0bbfb3537abe76907
md5=59d8d79fb950a55722c0089496fd18b1
sha256=ae38043c9dbf99a516f4edc58ef6235ceba975d8b5f374244a2b3e96793d7d5a
+[http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/6_23/exports/xdais_6_23.tar.gz]
+md5=09b0a14b9f8fb98686a98857eedd10a1
+sha256=12e60870930d9392c37dabdd25988e6dd5fb66ce0fe1e3b0d72250c90c8c26b7
+
[http://xorg.freedesktop.org/releases/individual/app/xdbedizzy-1.0.2.tar.bz2]
md5=ecef9cfd197d00980e0d69ee4126d890
sha256=74e882e9fee7ebeb274caf43071afff92531b8a41f34650376146a131166012d
@@ -27790,6 +27994,10 @@ sha256=d398bfb7a5d9657b802db835c28db892ec8fe54cf332420edef0b3ba1c231fcb
md5=c7cd094cdc49459018b6f0e1eb95af30
sha256=0d5fbc8cfdaa968090ad11b0b84cfb122e2a1c54c4d261fd722b27c6d6972c23
+[http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/xdctools_3_15/exports/xdctools_setuplinux_3_15_01_59.bin]
+md5=c7cd094cdc49459018b6f0e1eb95af30
+sha256=0d5fbc8cfdaa968090ad11b0b84cfb122e2a1c54c4d261fd722b27c6d6972c23
+
[http://gpe.linuxtogo.org/download/source/xdemineur-2.1.1.tar.bz2]
md5=b3884eaec59a63691f66bc29ce57a56d
sha256=75378ad3eacbe32c625de3b4af3e1f6fc9772ab45c1cd1393483d95ac4da3b22
@@ -27834,6 +28042,10 @@ sha256=6a7bceccb1eb9ce3d14259be7a6cc8268bc9e1f127298480b9322ceb6f032d6d
md5=cc1816bc62a3722ad509373b0b7f30fe
sha256=e1169058775a44b0898351d2f645039b4d8946360285831e553587a147b735e9
+[http://xorg.freedesktop.org/releases/individual/app/xdm-1.1.9.tar.bz2]
+md5=030ae4bd9b8d428749d68bfdf56ce8a5
+sha256=e7b1db0e1b0d0113a301d94e40b0314e55f7e0006415f50a9cf06f636b11b134
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xdm-X11R7.0-1.0.1.tar.bz2]
md5=9ac363721dbb8cd39aa1064b260624a6
sha256=9bf8895b98fb35ee38ac713ce83c80abdd8e33de278e1ddf982a293c31b56b81
@@ -27882,6 +28094,10 @@ sha256=9049146404b9596d70f77a0250d26aff93ba7ba6f42e99f7ee2302a757dfd362
md5=c56160e93c24ddf17e69891ed50deb72
sha256=2658d78bbaf8c9effac261f3c229c035fbfda817fa9636dea1e46078213362df
+[http://xorg.freedesktop.org/releases/individual/app/xedit-1.1.2.tar.bz2]
+md5=67193be728414d45a1922911e6437991
+sha256=a38823a8b7919e2efa689bc4c279e12314e45b41131c39ce9ca523e54f42fa1f
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xedit-X11R7.0-1.0.1.tar.bz2]
md5=19f607d033f62fb1ee5965f4236b19d4
sha256=cfbea0872e9963ae3ff61b07000f92d840b65244eec0e1a9750a58a03d70db93
@@ -27942,6 +28158,10 @@ sha256=41c091d05943817c0b667192dab8c8f3a3a59c04a66dd311a9573f48a7b70b3b
md5=033f14f7c4e30d1f4edbb22d5ef86883
sha256=530902e8732130e37d9b46e73eecff90d6dbc5d5628620fded74a4e054aa8029
+[http://xorg.freedesktop.org/releases/individual/app/xeyes-1.0.991.tar.bz2]
+md5=ba1b886bd6104018fe78ab431d83ce4d
+sha256=594324114bb20a502102a9a584dfa5c63d85aa60b7975fd7587d82d42c8ef115
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xeyes-X11R7.0-1.0.1.tar.bz2]
md5=3ffafa7f222ea799bcd9fcd85c60ab98
sha256=e93bb322fe96ceabd0581bb70101aaa1001b0b8f894b3ae0e1fa2e4b38f41af2
@@ -27958,6 +28178,10 @@ sha256=07d2f8a1153d34a6516b8f1129fc32a18f2862bbb58c9bad4637fb282d60385a
md5=2d6596b2b0cfa527b5ed4df2014684bf
sha256=953ebb7d7ed579ce648dd6f6a25307c37ad8230a0336ec6fc58247732835f26e
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-acecad-1.4.0.tar.bz2]
+md5=51247dc0d73185e35bec326283bc49a5
+sha256=48341d8b6b0060228134b36543986c949ea828d6ce6d0484d29b3dde9ddbd556
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-acecad-X11R7.0-1.0.0.5.tar.bz2]
md5=b35b1756579ebe296801622bdf063ab1
sha256=699ba1716f74db0aaa66aa510ebf195560ff09f88001f98bde9275d2826f30ea
@@ -27974,6 +28198,10 @@ sha256=3db0e3259034d838c2ff7ae26718422db6d33d89cd1a2defa0efdddbbbfcc28a
md5=2aa75313ea5652a8cf93581c65ee6493
sha256=219116b0275b93333b8471fc94d97320a116d695c4249837fd97763f00a85d77
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-aiptek-1.3.0.tar.bz2]
+md5=ae3ec07aff6c156cf5307f53feb6b293
+sha256=b37f35bb021dffc337c731bfbbb6ce7c0953dc69f7c660cbe48b0f84a07b5e5c
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-aiptek-X11R7.0-1.0.0.5.tar.bz2]
md5=9ee5109ef33e281ce0784ad077f26cee
sha256=62d1dfdc2f902d016999861ec3fd58b4630341e8f4df45e65c7bee730b51fd8e
@@ -28010,6 +28238,10 @@ sha256=26cfa755d3a383f80039fcd286c44ba5f7b353feb8c674f386bb08d741d2c3fe
md5=4e254fcefb3bea55772e63c12570f6d9
sha256=1480ba63b342c00a53292d513bd79a69e1ea7c01a0c77d1a368ffb22e37c1a83
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-citron-2.2.2.tar.bz2]
+md5=8cad35da16ea4688ebb74533ccc7f190
+sha256=6d1908d1f1be1ce94fdc946f47d163c45b0a1fc4b9ffb05cc436bac865e1ecaf
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-citron-X11R7.0-2.1.1.5.tar.bz2]
md5=62b5405d337bc055bc9345565cc0da8c
sha256=fbac5de06334b6757d91fcc2abc08e2c56c7a57dcba1abdb5c99133decf7f795
@@ -28150,6 +28382,10 @@ sha256=dbf3799e207175e91f50492d51343e5cfdc706f637f6e9f14257b764e86bb3f9
md5=21dac6461379d67ee3b333c77f63e7bf
sha256=6d57420cce9201a14f2fb5c5f6bc8999ffdcc9520020d54290eb22db27c366c8
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.3.1.tar.bz2]
+md5=e56ce4424b89b2409c6e73e007a85da7
+sha256=462f2ae2fd389a87e09fa764a236cd04dcbf85bcfcd8000aa9a3810055511d8f
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-evdev-X11R7.0-1.0.0.5.tar.bz2]
md5=d982c6f185f4c75a4b65703ceed7be06
sha256=ba53e8ce6bfa01da7fa86a31853542a71722b41b511041bdb58cf66c10f3edb4
@@ -28170,6 +28406,10 @@ sha256=8ee3b2df90516182460fbda025153aa7fb2c6ba343e4239d225963a287f694f8
md5=0f3e013d5ff58e0aba3d9e1d18830291
sha256=87e3dd97d57ddb520cafa5e68fa7846cfc3d9d71cb054cdf0e1d650c7b1cff7e
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-fpit-1.3.0.tar.bz2]
+md5=e5bfda480f25121e3c4222e5e1eb5880
+sha256=d1ced3b8c6d799c3af1c93e72dc571cb30d38083e1221b8ea0b2d4fc48a7eef8
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-fpit-X11R7.0-1.0.0.5.tar.bz2]
md5=fc0e11fefc322623914a2d819d5b6d51
sha256=8f131c2b26b1e0e16e9dfacc73d457bb16cf6e455a1dbdc382f4a3e3b219c703
@@ -28186,6 +28426,10 @@ sha256=d1c20a3340e06c5634759832dcf2edc6acb41476a4f637eba6880730e607f493
md5=175c1e1ad668ebbbe212c1e975dd14f9
sha256=689d1c5c1f21eed00ae03a01c57482f7bbef36d7e07156556c99febe28c7d413
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-hyperpen-1.3.0.tar.bz2]
+md5=c50d0da3206d18d9d94f720e3688eca5
+sha256=e7a13a7597fa32f05d595d05a66cf94c529ba8ce1d03249bb9da5be9512c4b7b
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-hyperpen-X11R7.0-1.0.0.5.tar.bz2]
md5=0c4f2a6390e3045e4c48a48b47b6332c
sha256=708011ed8fdb6d321e7ca91787ff06c7bcb011cc4a3b5d6c0c02562222da7ef4
@@ -28222,6 +28466,14 @@ sha256=1d33b9668e039ea9adc0680c1f2971785508cfd74b2215749db23af23ef8f9ce
md5=e48b99e55093525ebb7811a014391a0b
sha256=6cad238e0a54dec75c5224f9c0774b4fce2a03b06f1c61b404e9ea97d4941d4b
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-joystick-1.4.99.2.tar.bz2]
+md5=29cce86738411c9f8de04375090bbbec
+sha256=7224e93a8560362d454a104e8bb481213dcb559b41516c7b883c0881e25252bb
+
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-joystick-1.5.0.tar.bz2]
+md5=79b20f86d1b2e625ae65e35c3457027f
+sha256=718118c5d769529f604c1ff099fe637173442cf01fc40bdef7d45f4baea282a9
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-joystick-X11R7.0-1.0.0.5.tar.bz2]
md5=9e3ba60836f4c1d2e4cebc63a28321b4
sha256=9b69192a4368bafeaf94432ec50025dd3f60340290ef2500f6032159870ed489
@@ -28358,6 +28610,10 @@ sha256=cc67e0dd4f4fcc8d798f0bfe42b975132c5739bdd80809580a74182e4d1b62ea
md5=50711d390d2867e3fa7e06b59b2d575b
sha256=214f0831f36ebfc081b9f31f91ae27972ced9371b9b2256650998596a097061d
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-mutouch-1.2.1.tar.bz2]
+md5=f28998cdfae2a4c41589299a4ee1f459
+sha256=53bfe976042de69f87e28261ad581cf418c67b5cb69a09cfe1eea169021db35b
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-mutouch-X11R7.0-1.0.0.5.tar.bz2]
md5=4758e667bfbba517df2a58d51270cfe2
sha256=f46f328c9d8ef4dd6fe118121831ff4cd34ea9f06b198f548af4c703a1aab771
@@ -28394,6 +28650,10 @@ sha256=fab08de727da6f56b82d8ecee451a52e7129ff80522e711c5322f1bd2fa9970a
md5=24594c0222e631fedccc7c540c420b03
sha256=9cb4e0e83dcefe1ece814d638bd186785b6bc1debe1aa2101ce2a4ea0376805a
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-penmount-1.4.0.tar.bz2]
+md5=d5f1395b2dcefc7533ff5580e63f2066
+sha256=8cb15e9a30f3602d22eba6c7bcca2c1040889ed0851c7b575273671c2da1bff1
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-penmount-X11R7.0-1.0.0.5.tar.bz2]
md5=065b1cf862864741aebcfefcc7c09539
sha256=314492cea0998182623f2a67461d64df00b910acd052c3a50f9349ead740151a
@@ -28438,6 +28698,10 @@ sha256=57460dfa0429c58d598f192aa65661300dd104953073d977ad4f4b15a596eda8
md5=939f1c831c5cd3a6f027e982592dfc5b
sha256=e7d481c375a11df55eb8f12390c329c2bfda3258c689cec11cfec27cb5895c8b
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-synaptics-1.2.0.tar.bz2]
+md5=2cf0a2b0b3006bcfcd85bb77d966244a
+sha256=ddd5ad4c25ad2f2e46134272bf047522882deba8ac3ac04d5e11f8bd9718620c
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-tek4957-1.1.0.tar.bz2]
md5=be8a4bd474ad6c85b93f66dd6fcfa6ee
sha256=09b9506d1bb1deaaf69872392bc56e1d75997bb8157e85a9121749bf5fe15727
@@ -28494,6 +28758,10 @@ sha256=b43c5d920821bd06b6a1a131dd071ab838bf024c3cb092c6d1f10d57b648b0e4
md5=862c230f5f6e0c545f232b4c0fa9537a
sha256=dde062d6267a3fd9d51b0daee88fd84fceea52a6019de51dece46e92012dbc4f
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-void-1.3.0.tar.bz2]
+md5=53bdac9ca56418f4675810ed8a78b3e8
+sha256=e2165ddf637703e21b3c45d83d56485c39b082b9440053d3885557c4d52b130f
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-void-X11R7.0-1.0.0.5.tar.bz2]
md5=c7ae53dee1f3e95fa5ce9659b34d8446
sha256=ca90a522b78114d72748164c7a99274634cd2b50953f9c52f91b31746c790b5e
@@ -28510,6 +28778,10 @@ sha256=09d7e6cf30b94f141f8ebe2560b301a058f645e74108edc28c908e750865dcec
md5=4f78650d79656dc803a720049d65682e
sha256=f0fe020f892e6e3a696a490c86312a1b32672bffb7dead153c24f103540a6185
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-apm-1.2.2.tar.bz2]
+md5=48441a19aaf015570b267f2a8e67d8ab
+sha256=678edd063e1d5e7c7f72ccdda2388c5857559847b3d313c94d659f9bd51c1752
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-apm-X11R7.0-1.0.1.5.tar.bz2]
md5=323911ab16a6147d3cabceff9336a3d2
sha256=ceaf4a611b8ee8bc31bc784f1012b0d6be6380e8823f6bf03a9a1ee737264a78
@@ -28526,6 +28798,10 @@ sha256=e5abc4f4ae643ce56d5773f052515196f05786235e4afd155a3232e20dbc84d7
md5=6826c556ebe9a1248cbc7f7edd44f956
sha256=8e65e73045fabe37c15f6d4895baa09346bdac2f7537607b523aacd7bcf57594
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ark-0.7.2.tar.bz2]
+md5=4745f5c722b030962cc56eb2443894a0
+sha256=db1ef3e15ebd382837f16c1143035dfd9fa6465a77ae2e850201f71508065741
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-ark-X11R7.0-0.5.0.5.tar.bz2]
md5=342937e275dbc92f437417a3186a8222
sha256=47aa2ecf4129e72e049796571e3125ff3bc8dae7fe31e27d361470d4a3b8d548
@@ -28542,10 +28818,18 @@ sha256=b95553aaf89bef28051c82914cee2b91102dbc2370d0d855404ba453902459b8
md5=b415bf3259ad0acdaf62e3dde76e3289
sha256=9018ff84e4866d895c037aad33fb31c79d5f47d3f54707600cc3fe6076485b28
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ast-0.89.9.tar.bz2]
+md5=619f6ff15db869be3800bb001d5b0468
+sha256=880f16d32a373a052515f4ae28a3f1a97543d0d73d2ea5d74baf23bdc3a6b401
+
[http://xorg.freedesktop.org/releases/X11R7.1/src/driver/xf86-video-ast-X11R7.1-0.81.0.tar.bz2]
md5=ac1595de8397efd740038994b1e9ef67
sha256=f0020c88ca3f86b4826c556888b476f081b80010ba78239f95e5349835ad8811
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ati-6.12.4.tar.bz2]
+md5=e662348f6f957fcedf52818d668ab9f5
+sha256=cfde066a7087a19b624f79e95cb9a6c97a847b8802cf38d4ae6022758bf338f6
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-ati-6.6.193.tar.bz2]
md5=102b781f543213852401f3422b18ccc7
sha256=9b0899694000cb91d5643e2482376af24bd495cb01b4c9dcdd6ee3545b0aefae
@@ -28582,6 +28866,10 @@ sha256=16a81cdb6b311176936c3326d279c0d75530adbcf9a3489eea55992ac5bc7494
md5=0fec6bee65383790485d917247a61629
sha256=05f38c49b23be36afa68b738faf520b8dbf05b92c769107039426651801d4f99
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-chips-1.2.2.tar.bz2]
+md5=a3969c28c3b36ab2caa852a9324e9b70
+sha256=ff6fef2cffc62feb3b23f3fee375e502ab7356d571517a89b4de67f0f6037f0e
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-chips-X11R7.0-1.0.1.3.tar.bz2]
md5=90f23505faceac30d3f46ab94f7293e1
sha256=2df2e34dc61907fb3c41b4590f51d39f951d2d74422d84f1f7d53ef6f5b25352
@@ -28638,6 +28926,14 @@ sha256=46013885696f3c1a5e05c5d503abc69e691443319a97cf2c6a01ec031e06c910
md5=3d96297556846bee02a74166ffb5d052
sha256=5a4bbde0b7f0334bb63b159e5ef6e164be3699e3424734c2bd9823f20a30a278
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-dummy-0.3.2.tar.bz2]
+md5=2a6f1f07462fbe336865068cd69c8593
+sha256=9389cbc21b0b5f90920fdfaad4466f4ec07674bb1ddbbf63cbb8759ace5c45fa
+
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-dummy-0.3.3.tar.bz2]
+md5=3ffe3a28f4452e66bf56180e7da9cbc5
+sha256=df3f55de7953dba6d7ce10cc5f355da1a6164f781ad9393a38dae502dba4955d
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-dummy-X11R7.0-0.1.0.5.tar.bz2]
md5=462654f9be7e3022f97147e3390db97a
sha256=f50f6d3d7fd79c5ce40ea6039a2fb82f136b13c18afbc2b7e941d41d6568b698
@@ -28698,6 +28994,10 @@ sha256=a0edd1109c03efdb0f6defc18745f89fb3c11142381e2657f94d492ddd1e7419
md5=6d7afdac0a26cf201c3f3b417c31c5e1
sha256=161780d2127d0548a2017ca461ce38e7a69afce5d921a08604e91478c6be1cda
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-glint-1.2.4.tar.bz2]
+md5=960df34e129faa411e58c0d6b56d79a3
+sha256=5f8d6e3b02c261d235bae63d95510b940b6c9a775301146b3c229926ed99d76f
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-glint-X11R7.0-1.0.1.3.tar.bz2]
md5=f14c2f1696c05760207adcaac856e5e5
sha256=d5b4cb7b490edc3be57c40a00299002b60b8060396b3c902b2bf92090fcbd940
@@ -28726,6 +29026,10 @@ sha256=62eadebd3417ffb3857f10f16597c59541ceb135ddbc30b2140f46d9eb7dddd7
md5=3b170a6df5114420cd4021a057918a09
sha256=49bb23625654ebcd74d0d23f534b074188f4b21c3cd443b06ac83b9485bf9a75
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i128-1.3.3.tar.bz2]
+md5=a597e8efeec6ab8bc6ba6d87fceb2dba
+sha256=4d0691ce8e3b54075d05cc34717350be42915174b3930b2c9b7f5e309b32b02e
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-i128-X11R7.0-1.1.0.5.tar.bz2]
md5=078eed8c3673488ee618dfc7a3ef101b
sha256=543d7b8bc0c9e7889c686a647f98641f0a9b052e58321a8a17518d680e6db95a
@@ -28742,6 +29046,10 @@ sha256=b8f2144c987d8a14f8b477ee3aa43fc1c76d040a77e40938c3c97c8e34e2b7c5
md5=d0e5a805c546b29b1dd3b55a68d16dc4
sha256=59c8f6ee465bef033c1c20bfff8121a318efda9656d5dc29f674bb655f18486f
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-i740-1.3.2.tar.bz2]
+md5=4ac1318788f62159965f15131c869e7a
+sha256=48549c6a3d8c0a0d417fc486e77f3f7c6815df7e8ede04bb4c539666be2bf943
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-i740-X11R7.0-1.0.0.5.tar.bz2]
md5=625448b13ebe2a13b7defad1efec05c4
sha256=b0f2f2dd17bd01018fa91d042214b596f9d2303a81a0b86de102400b00f87d09
@@ -28802,6 +29110,10 @@ sha256=95347c88854c2b41c07ab3bcdfadd1b8d27fb181a20520f185892877eb8d9d76
md5=6081b8fa50c689d51f85c2fbaf93867e
sha256=fba616f88d351759e00a90965e38a0d82608698ae36fc2a18df4036cd384e1a1
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mach64-6.8.2.tar.bz2]
+md5=6c0522b2b72a0a47c48d718443616651
+sha256=b91194033023a41793a525a631789df1d229b228af0d44dcbe20b06ed66c671d
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mga-1.4.1.tar.bz2]
md5=ba373233a7d13084d14046a17b02e248
sha256=5becb5f0caf0f99296db28b32be46eb95d0a88ac8e4829c47cb637fb52d06564
@@ -28814,6 +29126,10 @@ sha256=c91922316f486f74d41ddbda92ff94a7917cea151ad802cf25603ab6b90f97e6
md5=11066b84b949cd04300ec819c9c51532
sha256=d57dd2323052f064092167a232fb7576f46e5d62e98bc9cc6a7f270cc8d0fdc0
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mga-1.9.100.tar.bz2]
+md5=3e80cfb84b62866d2f94774ecbf3e46c
+sha256=e8efee8d5269eb29f9bd499db3d47a6a4d3c320d4b0a24874cdf7b598ad77a5c
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-mga-1.9.99.tar.bz2]
md5=29785ff1de2b0f7b7f1c48350449447c
sha256=82a91e523d40625c9e042ee640276756d1169cca7eb305c691a3378805c4c81c
@@ -28834,6 +29150,10 @@ sha256=d6497080967b8285b663fedd7cafd4457578282ebd7da0b216b6fa214dd88a86
md5=a72f57fca4f4dff9a2c82eb1fe7456f4
sha256=96e38d5378596174f76c735c4723ff2ac336f9069644502a9b706586b845e0a5
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-neomagic-1.2.4.tar.bz2]
+md5=2d722ee9b9fe8da49109f280689c9c25
+sha256=434da2986d007243f4590a86d16a1632a9611b71de44d6e46f28bd3cdb898353
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-neomagic-X11R7.0-1.0.0.5.tar.bz2]
md5=ffe9015678a41e97bdbd2825066bb47b
sha256=cfaa594be277cd2a1bf9d796bb398e07319e9b34cff306b408145a37925dc97f
@@ -28846,6 +29166,10 @@ sha256=2f3ba4a6775c66de2b269179a219bf1fcfee85c74db273c85784d80209e1ce81
md5=2bd8e5b9ea68e0dcd80dfcaca0eff82c
sha256=66ac855452690ef896400577806dc1dd86318940f8a62ce20039037318b1ce08
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-newport-0.2.3.tar.bz2]
+md5=923baa1ee0429f03ed19ec0be6a4f62b
+sha256=e6caeb4f95adfd9d2046d24f5f3688092ea4e3fb63aa3d0675f6c697c8cf0270
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-newport-X11R7.0-0.1.4.1.tar.bz2]
md5=d74d9896d57c3caf224ba3472630d874
sha256=88d4b58efd0dca626e926ce6dc531026c8a10e7126f2e6544e31a2fc00001c67
@@ -28878,6 +29202,10 @@ sha256=97d47df7720d3cfcb56c4debca9218c3fc5352d34d82bc4880c8a620185f8c5e
md5=42f12a36d7afc26c817e8e8f5c8b7274
sha256=f56d2bb42f6c4369dd3c6adc30988c53a229650f910b0db1bb3bf9376054011e
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.15.tar.bz2]
+md5=1b22188bd9012a148206940708b52ea6
+sha256=c18ce0410437ced9c171d2d6328a8406b79b6edacf55b9526594b446ee5a3641
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.3.tar.bz2]
md5=f9b38e24157c3aac6014119ac18d76da
sha256=8d9b5ea137c31919f7821e7f3ecbd133158813c1059f4a8ed0a723535d969952
@@ -28910,14 +29238,26 @@ sha256=f645da4120b3ad5356b46269ae13ef8e2315bbb443a8c147e05c611f7fa21df7
md5=c0820787e89958c9114d359b6a3cd464
sha256=b7e4858d6b5c6428fae2485a2c2097cdf6073268ef812aae2ccbc3d936db7410
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-openchrome-0.2.904.tar.bz2]
+md5=f2481d98ef54febf5bffbb88a2a2426d
+sha256=c7bdf7c48365b1d077a4be7ccc652cf3f7a0f385fddeb2d4fe71b00b6c6b7aea
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-r128-6.8.0.tar.bz2]
md5=007bec0c6b07d9d3aeca4da18e561efb
sha256=5689ca714fee9c9272bee12883b07a0ef2c40358ffb19fa684e963027b56567b
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-r128-6.8.1.tar.bz2]
+md5=2b90854a62a4d45d652062f582dc8d13
+sha256=517e21cc83850b903549d698c9daeb633e8b9ba5b187fe298409cc51975a9eca
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-radeonhd-1.2.0.tar.bz2]
md5=6a932ec17da9ce5a6d9000c1649c3a7e
sha256=87c6353dd52bbe22d3a45f28fb39de1dd44f41568aaf8a9b0d45a7ed62313e27
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-radeonhd-1.3.0.tar.bz2]
+md5=7b6641aa9d836f1621b9b220ad6771b8
+sha256=5adad675e60e973f2e3522a01457d9214157fbb5005090fe48092e6e5e698ad5
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-rendition-4.1.3.tar.bz2]
md5=a8b97feccb32184820d5856fe78d34db
sha256=37e7aef72f7466485f5a3bafd0d43190cb7439de16868bfba2c59bb4c9df4408
@@ -28926,6 +29266,10 @@ sha256=37e7aef72f7466485f5a3bafd0d43190cb7439de16868bfba2c59bb4c9df4408
md5=7c03de3804d4c4f6ff59f74050d24b2b
sha256=b57b62f707d87534a799170e31b33311449cfd7019a56e6b4fa85a4c7faaae15
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-rendition-4.2.3.tar.bz2]
+md5=9a0a916fe1e7b5c81cd4c80a08e646cc
+sha256=9d5559fd3029feee5af2493ab8f558c58c426fc89776a1109dab97e3a4764d94
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-rendition-X11R7.0-4.0.1.3.tar.bz2]
md5=f1a25db74a148dea45115e813027b932
sha256=4ad42c65f60bc7f3f37f636eae5ae5a9049cdd4df5c546f93f201fdf16213f48
@@ -28942,6 +29286,10 @@ sha256=4a1206cb1a200aad8881216547d9913d0e24928138f3b1bb912a3336b9c05c97
md5=d05e7c3cb044437eda8663e174ba913c
sha256=ed07e4648b0f405fddd563783b49f971d649dd07cc8bc7737a93ff3d90f6c067
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3-0.6.3.tar.bz2]
+md5=5eb06d88533fb327d067928faeb20860
+sha256=ed9f65aa6eb1811d8c16cddfce00c5fc5880d6d46b907a83ef77700610085144
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-s3-X11R7.0-0.3.5.5.tar.bz2]
md5=83b9e8a9b8fc1c49bda2811358e5007c
sha256=3e11f78c39eb03fe4b9e6a2b68347420297fa38cd36f42235ee4be9c87175103
@@ -28954,6 +29302,10 @@ sha256=b9b9abdd80c00782ca2e1313016c3d3904dc10a1de1c94d29cd4efafeb1f52f3
md5=4a293047e988d4ea1e9e96d3b5793f43
sha256=9094115621ef73c957cf887332717ec727c751959b1059e3d00fbfe0114a978a
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3virge-1.10.4.tar.bz2]
+md5=6517bbbf808c700502d51acdc44662f8
+sha256=1cd00d6e71fdbd70dafe3beb8911d22cbdc5ef7b32d2d81c454ac8a18c967fb8
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-s3virge-1.9.1.tar.bz2]
md5=a91c73285ef67ee7cd9e2da28acb6cc4
sha256=cef5702963f49e737fb8b1472dc0241f7a5da49f844ac77f2df3e693a84bc822
@@ -28978,6 +29330,10 @@ sha256=f5f154df377cb445935d1453d6b7095d63912d5776dcb44f8d3c2f10ab1a3cc5
md5=62b8aba48b54eaefeae87df502bf219c
sha256=adf95cae0fbaf72326c51c4c9e61486eef062bb1706f6ab46d942f2c36d8a37e
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-savage-2.3.1.tar.bz2]
+md5=66c319f610e3699c3de0f3ef630abb32
+sha256=2b4adcdd820a6f3acba6f3c0995f5899edc8f5e33fb4c4666c4c7a78090ddaab
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-savage-X11R7.0-2.0.2.3.tar.bz2]
md5=6b638dd500d10dba1822d3ea5061fc65
sha256=e4ee3af5989cc9b0c8ff59082f64a564420dc22a2eb9fd53e41da24260a65e98
@@ -28994,6 +29350,10 @@ sha256=54cf791695a53d4836d32f899b7d34b969edf5415f02e36956b6e72993e21cd7
md5=a8419a8ed17b02b2a6dd4d30d5e94b00
sha256=cc5301b9c6adb9a0770509b8570d38730d43e9ffce6d6886cd9a090965017e53
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-siliconmotion-1.7.3.tar.bz2]
+md5=29fb322cd3adab52cc7f1ac86f9315bb
+sha256=ebda468be42695c08ceaa4043da3cf5bcd5f9ab15d1482311fd6e826a8060b2b
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-siliconmotion-X11R7.0-1.3.1.5.tar.bz2]
md5=957de4e2a3c687dbb2e9e18582397804
sha256=6723b5b7e9ea5b3aebcbbaeaca59790e6a9ab6a7d5324c671454e426854aef3f
@@ -29010,6 +29370,10 @@ sha256=bcc0dcde5d469cc2500676e0ad29dcd12b1370066289902387ead762260e4b40
md5=9f57c2f5ccbd8340db32da1c74083771
sha256=11529f094cbdcdaba505596488eda623e0f0bd3c51139359d587ea58b6527307
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sis-0.10.2.tar.bz2]
+md5=f04baa307e49e9f0e5a5c3d2e89a5576
+sha256=3aad701799e355669b9027a9baedd623fe6b7ce93da9ac22b6902fd7e38128c2
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sis-0.9.3.tar.bz2]
md5=e35d817fa4ee7beb6cd5aa744b9c0783
sha256=898ee8fb16fff89ba8ac5c83b9f5a2371084719db0cf034140427229191436f6
@@ -29038,6 +29402,10 @@ sha256=76b79c9b7d3b35b8e2e5354569bf0936c4afd39a9dcbdf66327714d75137930a
md5=42069e70578bf3fb353cdacad186f6c0
sha256=b3ca934ce3e31f4a162bf263cad3913edccc46906d09132118b74a2095c157d9
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sisusb-0.9.3.tar.bz2]
+md5=be59e9c2d9458cee0b5006549c14a95d
+sha256=1df9a90ecc31d5fb63de7c970555f166dab24c0f633b54aaac4ee82fa7b49bb2
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-sisusb-X11R7.0-0.7.1.3.tar.bz2]
md5=781d726a0ca54b65521e383ab99043c8
sha256=6f972b126774d3d051b2f683e82661c07a1b4787b8ce04847eae80b283c5feb3
@@ -29062,6 +29430,10 @@ sha256=aa656c99ff6ba9c1013b6060c92bbcda2c30ceff72ecc49139c65eb935844f43
md5=9e25784e912cb2f0493b87431fd60773
sha256=1eca2b0970e725db49f9e462a0c2e618b2616389647335b5aec9d6e495e40527
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg14-1.1.1.tar.bz2]
+md5=8e4bd0a6b155cb861356e7430d667aee
+sha256=cb43007920394b000be98ea0eac16a1cc16b4ca7ea8532b5d803a0c7574720d8
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-suncg14-X11R7.0-1.0.0.5.tar.bz2]
md5=8f3a734d02ae716415f9c6344fa661bd
sha256=809a8d57a49c07991d350d4bff955656256afa2c99978050d2aa320d071ef52d
@@ -29074,6 +29446,10 @@ sha256=f9a1ee987c554607c6fed4ae27adbf75c825d628fe522802a717429a85327487
md5=b9cb8cfb6a4234bebc434f744af53208
sha256=3564ebc8ccdfea872d46559166d881e93ac7c17e3ed46bb4087960f491c37df9
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg3-1.1.1.tar.bz2]
+md5=bb6c4def5cfb0959b72dccb661473d4a
+sha256=d56fe98c34f2af1b6424e3fcaa22a31402a4b59d63679f0e5fdfb1d2ea878419
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-suncg3-X11R7.0-1.0.0.5.tar.bz2]
md5=799a54cef1f4435e00fa94a1d97d056f
sha256=31831c2f44e7d28c928d816c2c5074cc0ec1f0cc83994bf28e46c7f840ab8866
@@ -29086,6 +29462,10 @@ sha256=9be5402d4f8f32154c01065f7b01a99e61c2deff959715eb8656259c63195adb
md5=aa6b7836fe6ccc99994bf15ff2b74e86
sha256=d6b1f3b79c57ef5281e0204b2847812cf9fa5df616478f01591445a36537194b
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suncg6-1.1.1.tar.bz2]
+md5=bc9904a9129aaf73408568ae1e2fa65f
+sha256=d1216c7c2be78d1dafad0cd46e464e9fa08f5e04544b76d9a0c547374c85801f
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-suncg6-X11R7.0-1.0.0.5.tar.bz2]
md5=2227f3fb86b02148f347e002662e53c8
sha256=f6ddac6bc0b0a446ff9401467e4219340151498824d98c9274ed38a959330aea
@@ -29102,6 +29482,10 @@ sha256=f897a427e83cf6965fd82724e3298aea44eb3131ba62f904cb514dfd0a879029
md5=816842de26bce8a935f3c9c3cfedbc42
sha256=59f2f8fc2399a4d6b0ce733481c58694e723a989f4712c00436d35e27c059292
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-sunffb-1.2.1.tar.bz2]
+md5=1bb374fe5ab3ed780d353b2b12ba6255
+sha256=fd377af6e366e8e3a77c8ff825a009138c8343c0007bbf070ad605a649577e11
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-sunffb-X11R7.0-1.0.1.3.tar.bz2]
md5=bb5182e3b74b3baa6fee245ac8bbf09a
sha256=318bd61c8da6e938d5c707a0c70ba3ada1c053ff3172a918f821a1a015b7b6ce
@@ -29130,6 +29514,10 @@ sha256=6c7339466d5b3cfc3c6ea3ca4ec4bad2f16666f1c472efc4f3048c1f711c67d4
md5=779a31151e44d2fd2a5ee1794f836889
sha256=72986a3981b746f60df1aba443d610db437fe8d5053e64630686f471c47b01cf
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-suntcx-1.1.1.tar.bz2]
+md5=b064a8d2f3d481ec36ef9ac17e13a77d
+sha256=543115c4b3a8603dcc9d7a3030c9e7ce20baf6e3976d92ff951cfea80b54981e
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-suntcx-X11R7.0-1.0.0.5.tar.bz2]
md5=74d6ba5e55afdfebff84db08b6589e26
sha256=38eb95f2991fab51c3442022bcef258de508ebfa0c631024edbdf55a1c4f24fd
@@ -29146,6 +29534,10 @@ sha256=6b1a00df5c9628817d08f07c6f18f578950744f3eb63b4397be8b0754e728624
md5=b13132f24683ef759bfb0c1db5096496
sha256=c3be06d324f2e49ece1f243b10d7180a32fbe65dbbb81e162279c8608800dead
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tdfx-1.4.3.tar.bz2]
+md5=8161bbf2b100c21b609163f0010766b3
+sha256=3ad935ca0aa306d10d1e6125a6bd485a3948c184dcfda01670961dc4740ebf33
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-tdfx-X11R7.0-1.1.1.3.tar.bz2]
md5=0201415230bf0454384c3bad099520d2
sha256=65e95c95bc4fa5fdb766b7edf8f39253cf8496fca66bc4bc06f260ab9e9ce504
@@ -29162,6 +29554,10 @@ sha256=50143dfdd259fd114dc2f41518a4898d5407bf55422251df75812b96a1fa6e9b
md5=f3bddf0a64932ca9bd72041ccd3b5501
sha256=a92f8cad0e21318be465719a9f30a50d5719b0b70bf8e15f3937e7850cf1aea6
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tga-1.2.1.tar.bz2]
+md5=bcbceda78395de74544c83b46a7700cd
+sha256=70a4754ef6602cf48d910b9727d015cb3cae946c096ef260b56dfe2f80cdb855
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-tga-X11R7.0-1.0.0.5.tar.bz2]
md5=fa67bf34454888d38e15708395cfed87
sha256=96b071b4e12dcfd027402621b897c6d73818aada4d66f77a8802cc46b9efe206
@@ -29182,6 +29578,10 @@ sha256=f942596e7427a089be9c9353c45c22002999580197c9715d9363d19ee170ba8d
md5=e89799579d0cf3858362bd751469e0bf
sha256=a4f66c9f46f6e93c2c1f10e782a211ddc338b0ff9f0a2ccd2d660db031d3ddb5
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-trident-1.3.3.tar.bz2]
+md5=47f3c5da1942017218355f178f02ef84
+sha256=6241eab6f3f0a075380be6b614e33ad72256242c865115bc8b696f83a75d11f5
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-trident-X11R7.0-1.0.1.2.tar.bz2]
md5=69f28afc7b585d01bb06b1e2f872f8ea
sha256=b7958afb0204bb1d3c8a33e7a56b94a6d4f09426dbcd141ef327e28f523d42eb
@@ -29198,6 +29598,10 @@ sha256=c9c1f3318715b7268068bc733d00bcab93924e97eb38f94548e442fd6cdfd56e
md5=f98fc22142a009dc3a6cdf930c95203f
sha256=1090d9100934329000ac330d0c66a0ac4f60d2ba83196ea15c2833a28a18b1e3
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-tseng-1.2.3.tar.bz2]
+md5=79f63999c88477801ae54dc486272ad6
+sha256=0556bb3e79da4be87e880f82e2b8504527e760e284680f9463a08f9572507187
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-tseng-X11R7.0-1.0.0.5.tar.bz2]
md5=981f46914c1e54742418f0444ea2e092
sha256=5e67a6893375585be731b0fd822e9c3407a0930f7addbc8cf01fffad57f9d0b6
@@ -29238,6 +29642,10 @@ sha256=f20b2e429657552eea207fb8bc4b47c8e293d99c229dcb4da11b7c5bfdc1e165
md5=9a86b683f73f3806f55d05cd804a6f4a
sha256=8b3e077d2534722033d7b1c647aa7f31fc7fbb5014da096b7a53170005e80226
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vesa-2.2.1.tar.bz2]
+md5=61a1dc9a22991bd04d0ff98f800775c1
+sha256=a3657971232e9c7db3e7517a8aedd86d3ef4d159f7099ec974cdd03aafa41080
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-vesa-X11R7.0-1.0.1.3.tar.bz2]
md5=049ada4df1abb5aa2b6633ba90353e78
sha256=c6601cd278ebc30a0d20b49b6284bc21b4910f8ef5d24d1c62daa1591a251452
@@ -29286,6 +29694,10 @@ sha256=91ed99ae936be5df25d310d81e31e0a7efefc023e462d93a9289ac18ebdf4e89
md5=6d78c82ea7c2bb0fcb587d7bb4e8f60a
sha256=3e4e9abfd806b36076083ef6cacc93b713bfa4ddefe7005edfc15c64f5174366
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-vmware-10.16.8.tar.bz2]
+md5=25287a202c986b33bd79fbe379c96a16
+sha256=956443948d94f7459b0056d8cb8ff2cd9fba4621d8b61f0257cb84469ea7da07
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-vmware-X11R7.0-10.11.1.3.tar.bz2]
md5=4df79349e26add4c23f6be8bec347ad4
sha256=79b0bf59d866d3760fa8a55b4a19d56ae7fa6a962d629a9de5c188cec5c98c9a
@@ -29302,6 +29714,10 @@ sha256=3975601baee674b2bad0dfe696586f17cc913f1dc7f1d5c4e184623e0461751c
md5=7c681d9b57f5e1f798263fc1a9d99245
sha256=b79ba6d5d4300570c00f8be37c536f47f2d78c18845f70f525da2a29e47c4b8c
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-voodoo-1.2.3.tar.bz2]
+md5=c164effcc839eca1fc1d43a42f4086db
+sha256=025d4d99ab19325b72417fadbb099c757412988f800c9511be3e2c3993ae29e9
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-video-voodoo-X11R7.0-1.0.0.5.tar.bz2]
md5=e00cc814ebdb3f3067e075bc93b26199
sha256=2241fd7e5ae8de43f109f712f5125afa6ec5156068c941d7b65981ac7ce7548a
@@ -29314,14 +29730,26 @@ sha256=35409b42f843ac3b352e344253f3075b2d9c8ae2ac5af02962fd67575427e066
md5=c159af867a9af3abc4da332189213a76
sha256=39e358aa17d939f561a28c82b9e7beca202d7ebd7d40d401c88a9dff3d90d148
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-wsfb-0.3.0.tar.bz2]
+md5=d6b5d25dfd61fa5113216d10a6dcbb50
+sha256=78bdb6d397869dbd8560ae1f0ee65473977d19ca5afc9fa7638c35057284989e
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-xgi-1.5.0.tar.bz2]
md5=08529fd015191be9244f598aa0894aa6
sha256=5fb23432ee8940c04494744da8b5f58bebc6ef113e96a50a74f0aa7d98a69194
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-xgi-1.5.1.tar.bz2]
+md5=65a8d94d360b51690f8d4b2e7bfa036a
+sha256=cb19f5287f9d345fc4fe15ba7c9344a3be2d8395ebf19a139899d1566d7c9e18
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-xgixp-1.7.99.3.tar.bz2]
md5=c541152aee693fad743ef7cbf75a7ffc
sha256=13a1658ee3ead0ab8e8bf7a9c8f8f0e3e40e38138f45d8431e735cd7184fbbd8
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-xgixp-1.7.99.4.tar.bz2]
+md5=0e7d0df07528c57304900da3acafc1a2
+sha256=ee0a178c89ff10d679e6f174d2a2e5cc7b89c7c7d5c115d48e9c75942f487395
+
[http://xorg.freedesktop.org/releases/individual/proto/xf86bigfontproto-1.1.2.tar.bz2]
md5=a318c1e86123832d7b0c95fc7d47ef35
sha256=01b475b5b27709a738db6f94ce2ded37f5db0792e8d9318069ecf1690a15f124
@@ -29686,6 +30114,10 @@ sha256=5a3ad18fdc67e261454740217f7c02d1b6825013abcebdcd778a4865fd823353
md5=f10717e45535b64eb45226aac571dac2
sha256=34b5040b3db7552fc1cdfa46f926ce5b7217ea5d77cfafbbddf94fbae6b4f482
+[http://xorg.freedesktop.org/releases/individual/app/xfs-1.1.0.tar.bz2]
+md5=5cfc06a320f74f07a0aa73da62307e9a
+sha256=47bad4bbcd0488a8e573aa6efe3438076c4d27c498d6f642f3aa27262eb95f6d
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xfs-X11R7.0-1.0.1.tar.bz2]
md5=a297da3d906110e9c29ec56c5ea578a8
sha256=5d9df9048863f6d281fc1b71601ff7d31d5075eceeba462b3a32dd4734440c6a
@@ -29794,6 +30226,10 @@ sha256=ec744335f06c070d30f7f256262f6326c2cfff35a0ed6178e7be18ad44ad8a86
md5=72fc8dd68f585000c0a542eba0264571
sha256=7caddfc6c34f62a4ab2dba2ba34085f6b2343b36ec1bec3b522a2188170e1093
+[http://xorg.freedesktop.org/releases/individual/app/xgc-1.0.2.tar.bz2]
+md5=fec79887ca14575bef4c757b4e95a693
+sha256=fed1be13409b6963d88ee668da4670cd6da5bd9aff95576234df8849e2084002
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xgc-X11R7.0-1.0.1.tar.bz2]
md5=8cd01cf558c3eed738115abcf720277d
sha256=6151d08a12e7a9874738c46119c6ffe8383d1fe6c5d10ffc9d88e2adc8e454e8
@@ -29874,6 +30310,14 @@ sha256=b4218fd4ca5e431bf69cba848c21e91235fda30504634b9f6b6cd011dcbd8999
md5=9144097186c3d2454beffe8ac3b53c6e
sha256=c79ec1a4d60404715a626f2832f1b62f43b9d52a1e4642b40af743ee41362590
+[http://xorg.freedesktop.org/releases/individual/app/xinit-1.1.1.tar.bz2]
+md5=93c73705ed9eb1e1a6b6938405672f2b
+sha256=b103d2cf9e1cd8b049e28bb1109f3da3a14287bbce3ab8b2f427d55a6e5f4785
+
+[http://xorg.freedesktop.org/releases/individual/app/xinit-1.2.0.tar.bz2]
+md5=fe1696cab2fbed6fa059d0cd1c53ac13
+sha256=ab61663a4421753132d4aac97a873ed20697c4761cb434640f48f350fb65087f
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xinit-X11R7.0-1.0.1.tar.bz2]
md5=6d2df59fa328cbc99c0de98bc2e14597
sha256=e55c61ede6760ce0d8eaac6dc386850c7873311ab038c69338e35559ec0bbd02
@@ -29890,6 +30334,10 @@ sha256=330c3e5188abf256131c162c456060804f369349e9a0e7aa3efbc54add802e45
md5=58e619576cbf4b6057eebb7a97fe2ddf
sha256=3195916b6cebf109eb571b939d7cea7075ef1933782526a6d8fbbb353bc3924b
+[http://xorg.freedesktop.org/releases/individual/app/xinput-1.5.0.tar.bz2]
+md5=3e8a5f1faccc8ab00c6190e5a34e0a45
+sha256=a84728e34bb5edd36ecc1b5489f48ad1467ad5aab1f74f1b7789f826a1ffcaf9
+
[http://xorg.freedesktop.org/releases/individual/app/xkbcomp-1.0.3.tar.bz2]
md5=2fbcae1323c266edf5b6c61751f2e343
sha256=0635bae5dae3c933ebba997475ae14fa213aee1f2ea8aaff2ca76c50f8aec716
@@ -29950,6 +30398,10 @@ sha256=86ab048045dcd1de690de0b040235040f496c686730ad557c912e0f40edf5c4a
md5=b98ae2d8b21c545b7b322d0b302efefa
sha256=008dffea5b213880cb3ebd40d0b9bf0cc10392fb0349831efdebf2a428dd2e17
+[http://xorg.freedesktop.org/releases/individual/app/xkbprint-1.0.2.tar.bz2]
+md5=3d3eb10466442354d6b73b503b9829db
+sha256=2e51b3c2d33da885be6d955007ae7e025b8f8b21f7fe6d21387690d9f5cadb92
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xkbprint-X11R7.0-1.0.1.tar.bz2]
md5=6235c39690968d0a9a4c1b1c16c8905a
sha256=d2e9c3c28e23010441ce40c48bda7adabd338a256cb9b99848be6ed937fc10e7
@@ -29978,6 +30430,10 @@ sha256=921a857dcf90a59df7feb26da5aabcf0bbfb749c46e2a46c3bc7a0280b83b0e1
md5=f66d76abb0f75514ca32272e23cca757
sha256=77a11aac6e4ae2132d8b7b4335be77de26655e6aa88b40e51fd2ee802f14a9de
+[http://xorg.freedesktop.org/releases/individual/app/xkill-1.0.2.tar.bz2]
+md5=dca031355b4afcf8517a8258eeb730c3
+sha256=532df0398d3f4eab1cba8d0367c02a293ca74f2d89a27ef014854a2bde9a5a27
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xkill-X11R7.0-1.0.1.tar.bz2]
md5=35f47fd58d75c1ea5f414b21a10bdbf3
sha256=fe59dfdcd43faf8efa778f9b2390525a606a62dcd7a70774982bc19301f6a3ce
@@ -30010,6 +30466,10 @@ sha256=1397377bae07e8907f73bc445e967d4d4400769e683c2119598d952c8ad28131
md5=69adcda848479acc3b82b3928812d191
sha256=456d575a0cdb37fc9415578a3ad34ba3cf9eb5eb0f6e5a25f97ca41db416d55a
+[http://xorg.freedesktop.org/releases/individual/app/xlsatoms-1.0.2.tar.bz2]
+md5=dc8b420bbfa35091ea30edf57c952ec2
+sha256=d66cd7682e5ea2a52e8da8a75ea6154f40a3a69938c6c2cf5d5c1e012f5c121b
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xlsatoms-X11R7.0-1.0.1.tar.bz2]
md5=737b4d7893aa886e8e4181c94380a421
sha256=6a079872319ac7934578cace787f4f89ea87258f6dd8b33e5b4359be1256e9a3
@@ -30046,6 +30506,10 @@ sha256=1f239057cdfb2164b2e8fc229e2518d20b27a853f975e73618a4a81f09ebeb02
md5=7c6a783e42c88360ac31d259a864a19d
sha256=51dd943e607ddd8067fd13cd597998fb00560cbf06450a8c374563a78a86da43
+[http://xorg.freedesktop.org/releases/individual/app/xmag-1.0.3.tar.bz2]
+md5=32f7ed4c089365cadb9382f6fbd750a9
+sha256=0368268a352d302d0b84229a71e3ea0e8d1c44019b1f06b6301ad7a106418553
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xmag-X11R7.0-1.0.1.tar.bz2]
md5=38ac487ac1b75be0253fe7f973947386
sha256=d039d857c6d334d481452c20f5e419b1e120e03e6c9af709f071d9c00ffd9cd1
@@ -30078,6 +30542,10 @@ sha256=00bc616892388c94505b09564daffbad2df2e7c684686dea2d78dbcd210212f2
md5=3d3a4b310a65ccce82472ef83acbbf97
sha256=38e03bfa2d3d109d55342e3539be952268e405fb458fb8c4f87739594a25394a
+[http://xorg.freedesktop.org/releases/individual/app/xman-1.1.0.tar.bz2]
+md5=5e5b3351bac26cc1f8490faf1c1402bb
+sha256=9d617ed760fe2147baae5ad9cbbdd85f1bb7534acfc3327bb51dad42e8bcc8b0
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xman-X11R7.0-1.0.1.tar.bz2]
md5=a4f21547120952aeb8e5663ebd72e843
sha256=3d159c703ba901657d9633b239d39b21c8de68a2c3358fd1aa4175d20359ef87
@@ -30186,6 +30654,10 @@ sha256=d648fd1f7b7437123afa63df06f6a6409a0487c99ca8f8beba75aaa474d65818
md5=f96f44b87132afd2fff677a8c89166dd
sha256=4edcaf61ad8b4bef65169af2b98d3992be07260f90cca65128dc523d6935bdd8
+[http://xorg.freedesktop.org/releases/individual/util/xorg-cf-files-1.0.3.tar.gz]
+md5=bca2403beb209952d66dc57be5a2f789
+sha256=9a5e3533a4156a0e308ced437bde722cb291becc2276bdd0952e30b3b5060e92
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/util/xorg-cf-files-X11R7.0-1.0.1.tar.bz2]
md5=f2dd453c37386293fb207431b4a073dd
sha256=019ba3dbfe2f23e5847cc839a26c630cea20fe8d62df4775a21087176908b9d7
@@ -30266,6 +30738,14 @@ sha256=0edbaa994797cb7944a4129d33b634ad99164b21ec32355d56996a178d38bfcf
md5=dda7842467cda6018fdc87e6002e4db1
sha256=a58c0de29cbd2b7d1a1ac5ee70a94ad1ed2a085132803c0ca83f2dd8513b4c20
+[http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.7.2.tar.bz2]
+md5=5c087e0f555203065fd90d02ef5f736e
+sha256=f4fb49209a6f3cb1c5b039b1f43870774e2eac1540b4d3235a2f13bc441da159
+
+[http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.7.3.tar.bz2]
+md5=4c63b22cad9ed8ae8b86561f0f92c327
+sha256=4b644113cd030fc77615c03c7b6529e063dc1d471ec6a990e6f62eb45a9c2db4
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/xserver/xorg-server-X11R7.0-1.0.1.tar.bz2]
md5=0e7527480fb845a3c2e333bd0f47ff50
sha256=0419124e1bab473f8f9e2d7de1dba8bae2ed1375b72d55cdfb9471dac357ed47
@@ -30442,6 +30922,10 @@ sha256=0a9930e2ed7501d638cd90c948278b4f20e225c78c92cf2619e2b55a024e890e
md5=d28007a50976204960fc1fc07b4ca093
sha256=c45176d002c85c142ac52774680f5325d330c5ecc32d4d6a056d85ee039a0cbc
+[http://xorg.freedesktop.org/releases/individual/proto/xproxymanagementprotocol-1.0.3.tar.bz2]
+md5=9de22ca1522008c28fb03dfc41ba2d30
+sha256=7382acd8c76fa577beb622cab86cc07fafdcecbbd9b4f209bfa72976c4fd26c2
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/proto/xproxymanagementprotocol-X11R7.0-1.0.2.tar.bz2]
md5=977ee3fd1525418aaa8bfc55ffbf6fc9
sha256=f3c25042dfd332c3aee22176b3bcd244a99bc475112a97d9d4cc03505fe7b48f
@@ -30518,6 +31002,10 @@ sha256=67c2fc94a7ecedbaae0d1837e82e93d1d98f4a6d759828860e552119af3ce257
md5=5f65e24f8a225e255beb2059e33d6b37
sha256=a51ac7c607f2f79de771807f590ccfe8b1819dae6f30dd615dd2afbe6007c4e4
+[http://xorg.freedesktop.org/releases/individual/app/xrx-1.0.3.tar.bz2]
+md5=c121945afcfc84e99af17158fda68be9
+sha256=9cb0fc67153ce935550d61dfd3d021cb3e6833274453538885b7cddff9fe8abe
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xrx-X11R7.0-1.0.1.tar.bz2]
md5=9de3b04392c98df59c79a34fd51c385f
sha256=2a177a9f36c92fdc109260a7c04980db6920fb9d3529d79e9bc019ae7f5a310e
@@ -30874,6 +31362,10 @@ sha256=55fc617d536e58f088c694e71e1a02d3019c887c9abd2222574f84866b145d5e
md5=6e3c5d0297d88e890b6f5df31f73dd60
sha256=d2de2d39b4479e23adc92d131f66e87db41441aae11b72991bb01d5f6c93336c
+[http://xorg.freedesktop.org/releases/individual/app/xwud-1.0.2.tar.bz2]
+md5=20bc5d85634964d4ceee77cdfcd131ed
+sha256=84345dfbff0dc411689639aada2407758640af71eb61a1be332bfa24d8b90ac1
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xwud-X11R7.0-1.0.1.tar.bz2]
md5=e08d2ee04abb89a6348f47c84a1ff3ed
sha256=a10c7950ad632f07426ea9516b3743c562da8403f0da0cc678277031020f1586
diff --git a/conf/compatibility-providers.conf b/conf/compatibility-providers.conf
new file mode 100644
index 0000000000..d2ee2b6a23
--- /dev/null
+++ b/conf/compatibility-providers.conf
@@ -0,0 +1,72 @@
+#############################################################################
+# DEFAULT PREFERRED PROVIDERS
+# Every distribution should include this file.
+# It will make adding new providers easier.
+#PREFERRED_PROVIDER_atd ?= "atd-over-fso"
+PREFERRED_PROVIDER_atd ?= "atd"
+PREFERRED_PROVIDER_avahi ?= "avahi"
+PREFERRED_PROVIDER_bluez-libs ?= "bluez4"
+PREFERRED_PROVIDER_bluez-utils ?= "bluez4"
+PREFERRED_PROVIDER_bluez-utils-dbus ?= "bluez-utils"
+PREFERRED_PROVIDER_classpath ?= "classpath"
+PREFERRED_PROVIDER_dbus-glib ?= "dbus-glib"
+PREFERRED_PROVIDER_esound ?= "pulseaudio"
+#PREFERRED_PROVIDER_e-wm-menu ?= "e-wm-menu-shr"
+PREFERRED_PROVIDER_e-wm-menu ?= "e-wm-menu"
+#PREFERRED_PROVIDER_frameworkd-config ?= "frameworkd-config-shr"
+PREFERRED_PROVIDER_frameworkd-config ?= "frameworkd-config"
+PREFERRED_PROVIDER_gconf ?= "gconf"
+#PREFERRED_PROVIDER_gconf ?= "gconf-dbus"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
+PREFERRED_PROVIDER_gnome-vfs ?= "gnome-vfs"
+PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
+#PREFERRED_PROVIDER_gpsd ?= "fso-gpsd"
+PREFERRED_PROVIDER_gpsd ?= "gpsd"
+PREFERRED_PROVIDER_gtk+ ?= "gtk+"
+PREFERRED_PROVIDER_hostap-conf ?= "hostap-conf"
+PREFERRED_PROVIDER_hostap-modules_hx4700 ?= "hostap-modules"
+PREFERRED_PROVIDER_hostap-modules_h2200 ?= "hostap-modules"
+PREFERRED_PROVIDER_hotplug ?= "udev"
+PREFERRED_PROVIDER_libfribidi ?= "fribidi"
+PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
+PREFERRED_PROVIDER_libxss ?= "libxss"
+PREFERRED_PROVIDER_ntp ?= "ntp"
+PREFERRED_PROVIDER_openmoko-alsa-scenarios ?= "alsa-scenarii-shr"
+PREFERRED_PROVIDER_opkg ?= "opkg"
+#PREFERRED_PROVIDER_opkg ?= "opkg-nogpg"
+PREFERRED_PROVIDER_qemu-native ?= "qemu-native"
+PREFERRED_PROVIDER_qt4x11 ?= "qt4-x11-free"
+PREFERRED_PROVIDER_task-bootstrap ?= "task-bootstrap"
+PREFERRED_PROVIDER_tslib-conf ?= "tslib"
+PREFERRED_PROVIDER_tslib ?= "tslib"
+PREFERRED_PROVIDER_util-linux ?= "util-linux-ng"
+PREFERRED_PROVIDER_virtual/alsa-scenarios ?= "alsa-scenarii-shr"
+PREFERRED_PROVIDER_virtual/db ?= "db"
+#PREFERRED_PROVIDER_virtual/db ?= "db3"
+PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
+#PREFERRED_PROVIDER_virtual/db-native ?= "db3-native"
+PREFERRED_PROVIDER_virtual/gail ?= "gtk+"
+PREFERRED_PROVIDER_virtual/javac-native ?= "ecj-bootstrap-native"
+PREFERRED_PROVIDER_virtual/java-initial ?= "jamvm-initial"
+PREFERRED_PROVIDER_virtual/java-native ?= "jamvm-native"
+PREFERRED_PROVIDER_virtual/libgl ?= "mesa-dri"
+PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
+#PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb"
+PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb-compat"
+PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+PREFERRED_PROVIDER_virtual/psplash ?= "psplash-angstrom"
+PREFERRED_PROVIDER_virtual/shr-splash-theme ?= "shr-splash-theme-logo"
+PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
+PREFERRED_PROVIDER_xserver ?= "xserver-xorg"
diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf
index c9fc16365b..26614adb72 100644
--- a/conf/distro/angstrom-2008.1.conf
+++ b/conf/distro/angstrom-2008.1.conf
@@ -84,23 +84,8 @@ PREFERRED_VERSION_linux-libc-headers = "2.6.31"
#Prefer glibc 2.6 and uclibc 0.9.30, these have had the most testing.
PREFERRED_VERSION_glibc ?= "2.9"
PREFERRED_VERSION_glibc-initial ?= "2.9"
-PREFERRED_VERSION_uclibc ?= "0.9.30"
-PREFERRED_VERSION_uclibc-initial ?= "0.9.30"
-
-# Preferred provider for virtual/psplash
-# This enforces a specific brand to be used, in our case the angstrom
-# one. In case you want to change the logo or something like that we
-# suggest you to create another recipe (e.g: psplash-<brand>) for that
-# and add that into your image.
-# You can also opt to change or override this line, but that isn't
-# needed because psplash is using update-alternatives.
-PREFERRED_PROVIDER_virtual/psplash ?= "psplash-angstrom"
-
-PREFERRED_PROVIDER_avahi = "avahi"
-PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb-compat"
-PREFERRED_PROVIDER_virtual/gail ?= "gtk+"
-
-PREFERRED_PROVIDER_libfribidi = "fribidi"
+PREFERRED_VERSION_uclibc ?= "0.9.30.1"
+PREFERRED_VERSION_uclibc-initial ?= "0.9.30.1"
#powerpc needs additional patches to gcc
ANGSTROM_GCC_VERSION_ppc405 ?= "4.1.1"
@@ -140,76 +125,31 @@ PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17"
# Toolchain virtuals:
require conf/distro/include/toolchain-${TOOLCHAIN_TYPE}.inc
-# hostap stuff, we prefer the in-kernel modules, but those don't work for all machines
-PREFERRED_PROVIDER_hostap-conf ?= "hostap-conf"
-PREFERRED_PROVIDER_hostap-modules_h2200 ?= "hostap-modules"
-PREFERRED_PROVIDER_hostap-modules_hx4700 ?= "hostap-modules"
-
-PREFERRED_PROVIDER_virtual/db ?= "db"
-PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
-PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
-PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
-
-# Others:
PREFERRED_PROVIDER_dbus-glib = "dbus-glib"
-PREFERRED_PROVIDER_esound ?= "pulseaudio"
-PREFERRED_PROVIDER_gconf ?= "gconf"
-PREFERRED_PROVIDER_gnome-vfs ?= "gnome-vfs"
-PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
-PREFERRED_PROVIDER_tslib ?= "tslib"
-PREFERRED_PROVIDER_tslib-conf ?= "tslib"
-PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
-PREFERRED_PROVIDER_ntp ?= "ntp"
PREFERRED_PROVIDER_hotplug = "udev"
-PREFERRED_PROVIDER_opkg ?= "opkg-nogpg"
-PREFERRED_PROVIDER_libxss = "libxss"
-PREFERRED_PROVIDER_bluez-utils-dbus = "bluez-utils"
-PREFERRED_PROVIDER_bluez-libs = "bluez4"
-PREFERRED_PROVIDER_bluez-utils = "bluez4"
-PREFERRED_PROVIDER_util-linux = "util-linux-ng"
+PREFERRED_PROVIDER_opkg ?= "opkg-nogpg-nocurl"
+
# The default is too old for linux-libc-headers-2.6.31:
PREFERRED_VERSION_mplayer = "0.0+1.0rc2+svnr29789"
ANGSTROM_BLACKLIST_pn-bluez-libs = "bluez-libs 3.x has been replaced by bluez4"
ANGSTROM_BLACKLIST_pn-bluez-utils = "bluez-utils 3.x has been replaced by bluez4"
-# we don't ship gtk-directfb by default
-PREFERRED_PROVIDER_gtk+ ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
-
-# QT stuff:
-# There are several flavours of qt4x11 in OE, so lets pick one that is buildable for everyone
-PREFERRED_PROVIDER_qt4x11 ?= "qt4-x11-free"
-
-#Silence a warning during parsing
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
+ANGSTROM_BLACKLIST_pn-fso-apm = "regular apmd is good enough"
#This is needed to get a correct PACKAGE_ARCH for packages that have PACKAGE_ARCH = ${MACHINE_ARCH}
ARM_ABI ?= "${@['','oabi'][bb.data.getVar('MACHINE',d) in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
require conf/distro/include/angstrom${ARM_ABI}.inc
-
-
# If we're using an .ipk based rootfs, we want to have opkg-nogpg installed so postinst script can run
# We also take this opportunity to inject angstrom-version and the feed configs into the rootfs
IPKG_VARIANT = "opkg-nogpg-nocurl angstrom-version ${ANGSTROM_FEED_CONFIGS}"
+# we need the same provider for opkg and u-a
+PREFERRED_PROVIDER_virtual/update-alternatives = "opkg-nogpg-nocurl"
+
# Select xserver-xorg as default, since kdrive has been EOL'ed
XSERVER ?= "xserver-xorg xf86-input-evdev xf86-input-keyboard xf86-input-mouse xf86-video-fbdev"
-PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
-PREFERRED_PROVIDER_xserver ?= "xserver-xorg"
# do some task-base stuff here
diff --git a/conf/distro/include/angstrom-2008-preferred-versions.inc b/conf/distro/include/angstrom-2008-preferred-versions.inc
index 3098101d7f..d59c99ec00 100644
--- a/conf/distro/include/angstrom-2008-preferred-versions.inc
+++ b/conf/distro/include/angstrom-2008-preferred-versions.inc
@@ -16,7 +16,7 @@ PREFERRED_VERSION_gtkmm = "2.18.1"
PREFERRED_VERSION_hal = "0.5.13"
PREFERRED_VERSION_libgemwidget = "1.0"
PREFERRED_VERSION_libgpephone = "0.4"
-PREFERRED_VERSION_libsdl-x11 = "1.2.11"
+PREFERRED_VERSION_libsdl-x11 = "1.2.14"
PREFERRED_VERSION_libtool = "2.2.6a"
PREFERRED_VERSION_libtool-native = "2.2.6a"
PREFERRED_VERSION_libtool-cross = "2.2.6a"
@@ -36,8 +36,8 @@ PREFERRED_VERSION_udev = "141"
UDEV_GE_141 = "1"
PREFERRED_VERSION_usbutils = "0.82"
-PREFERRED_VERSION_util-macros-native = "1.2.1"
-PREFERRED_VERSION_util-macros = "1.2.1"
+PREFERRED_VERSION_util-macros-native = "1.3.0"
+PREFERRED_VERSION_util-macros = "1.3.0"
PREFERRED_VERSION_wpa-supplicant = "0.6.9"
PREFERRED_VERSION_xserver-kdrive = "1.4.0.90"
PREFERRED_VERSION_xserver-xorg = "1.6.1"
diff --git a/conf/distro/include/angstrom-package-deb.inc b/conf/distro/include/angstrom-package-deb.inc
index 3dbb175f93..e060bb1ccf 100644
--- a/conf/distro/include/angstrom-package-deb.inc
+++ b/conf/distro/include/angstrom-package-deb.inc
@@ -1,4 +1,4 @@
INHERIT += "package_deb"
-PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
-PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
+PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "update-alternatives-cworth-native"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= "update-alternatives-cworth"
diff --git a/conf/distro/include/angstrom-package-ipk.inc b/conf/distro/include/angstrom-package-ipk.inc
index a33a4ad2b4..14206bda2d 100644
--- a/conf/distro/include/angstrom-package-ipk.inc
+++ b/conf/distro/include/angstrom-package-ipk.inc
@@ -1,5 +1,4 @@
INHERIT += "package_ipk"
-PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
-PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
-
+PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "opkg-native"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= ${PREFERRED_PROVIDER_opkg}
diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc
index 6e65285e99..8647dd7ec4 100644
--- a/conf/distro/include/angstrom.inc
+++ b/conf/distro/include/angstrom.inc
@@ -11,8 +11,10 @@ BUILDNAME = "Angstrom ${DISTRO_VERSION}"
TARGET_VENDOR = "-angstrom"
-# Add FEED_ARCH to overrides
-OVERRIDES .= ":${FEED_ARCH}"
+SOC_FAMILY ?= "Unknown"
+
+# Add FEED_ARCH and SOC_FAMILY to overrides
+OVERRIDES .= ":${FEED_ARCH}:${SOC_FAMILY}"
# Put links to sources in deploy/sources to make it easier for people to be GPL compliant
INHERIT += "src_distribute_local"
diff --git a/conf/distro/include/preferred-slugos-versions.inc b/conf/distro/include/preferred-slugos-versions.inc
index 5ec80ffeb1..204047fd63 100644
--- a/conf/distro/include/preferred-slugos-versions.inc
+++ b/conf/distro/include/preferred-slugos-versions.inc
@@ -36,22 +36,22 @@ PREFERRED_VERSION_binutils ?= "2.18.50.0.7"
PREFERRED_VERSION_binutils-cross ?= "2.18.50.0.7"
PREFERRED_VERSION_binutils-cross-sdk ?= "2.18.50.0.7"
PREFERRED_VERSION_busybox ?= "1.13.2"
-PREFERRED_VERSION_dbus ?= "1.2.1"
+PREFERRED_VERSION_dbus ?= "1.2.3"
PREFERRED_VERSION_gcc ?= "4.2.4"
PREFERRED_VERSION_gcc-cross ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-sdk ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-initial ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-intermediate ?= "4.2.4"
-PREFERRED_VERSION_glib-2.0 ?= "2.18.3"
-PREFERRED_VERSION_glib-2.0-native ?= "2.18.0"
+PREFERRED_VERSION_glib-2.0 ?= "2.22.1"
+PREFERRED_VERSION_glib-2.0-native ?= "2.22.1"
PREFERRED_VERSION_glibc ?= "2.6.1"
PREFERRED_VERSION_glibc-initial ?= "2.6.1"
PREFERRED_VERSION_ipkg ?= "0.99.163"
PREFERRED_VERSION_ipkg-native ?= "0.99.163"
-PREFERRED_VERSION_libtool ?= "2.2.4"
-PREFERRED_VERSION_libtool-native ?= "2.2.4"
-PREFERRED_VERSION_libtool-cross ?= "2.2.4"
-PREFERRED_VERSION_libtool-sdk ?= "2.2.4"
+PREFERRED_VERSION_libtool ?= "2.2.6a"
+PREFERRED_VERSION_libtool-native ?= "2.2.6a"
+PREFERRED_VERSION_libtool-cross ?= "2.2.6a"
+PREFERRED_VERSION_libtool-sdk ?= "2.2.6a"
PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"
PREFERRED_VERSION_m4 ?= "1.4.8"
PREFERRED_VERSION_m4-native ?= "1.4.8"
diff --git a/conf/distro/include/sane-feed-deb.inc b/conf/distro/include/sane-feed-deb.inc
index 4f38b8f936..d953d6ebe0 100644
--- a/conf/distro/include/sane-feed-deb.inc
+++ b/conf/distro/include/sane-feed-deb.inc
@@ -2,5 +2,5 @@
INHERIT += "package_deb"
-PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
-PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
+PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "update-alternatives-cworth-native"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= "update-alternatives-cworth"
diff --git a/conf/distro/include/sane-feed-ipk.inc b/conf/distro/include/sane-feed-ipk.inc
index a33a4ad2b4..14206bda2d 100644
--- a/conf/distro/include/sane-feed-ipk.inc
+++ b/conf/distro/include/sane-feed-ipk.inc
@@ -1,5 +1,4 @@
INHERIT += "package_ipk"
-PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
-PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
-
+PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "opkg-native"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= ${PREFERRED_PROVIDER_opkg}
diff --git a/conf/distro/include/sane-srcrevs-fso.inc b/conf/distro/include/sane-srcrevs-fso.inc
index f99b44945c..1372c0aad2 100644
--- a/conf/distro/include/sane-srcrevs-fso.inc
+++ b/conf/distro/include/sane-srcrevs-fso.inc
@@ -30,7 +30,7 @@ SRCREV_pn-fso-specs ?= "14de522adbea80416df811085b3112cd1d5d5336"
SRCREV_pn-gsmd2 ?= "c16883a079aeff8780e5d461ec4e8348537ab4d8"
SRCREV_pn-libeflvala ?= "d07db4fbd24c9d5dfc9b1fd5024fd651b02f123e"
SRCREV_pn-libfso-glib ?= "9a627aa1c33f5a46ae4316fc274126ca5f37e979"
-SRCREV_pn-libframeworkd-glib ?= "dc5409fbf9d2d22a7fa871199bb66da5ac6f5084"
+SRCREV_pn-libframeworkd-glib ?= "411fa741227842dc993aba24184c7c6db0d09ba5"
SRCREV_pn-libgsm0710 ?= "cd564c8782f018e0d65fb8716c99a6040b5bd166"
SRCREV_pn-libgsm0710mux ?= "e81ed512ec86e31d0d0119826afa9d1302651693"
SRCREV_pn-libpersistence ?= "26180fd3c0fe4eb6abb7440f10e51d997719b97a"
diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc
index e755bf5b75..2b332fbf34 100644
--- a/conf/distro/include/sane-srcrevs.inc
+++ b/conf/distro/include/sane-srcrevs.inc
@@ -20,7 +20,7 @@ SRCREV_pn-app-restarter ?= "4552"
SRCREV_pn-assassin ?= "268"
SRCREV_pn-assassin-thumbnail ?= "4690"
SRCREV_pn-aufs2-util ?= "f35ba2292fe40aa94aa83713e0b2719f35a25768"
-SRCREV_pn-babiloo-efl ?= "288"
+SRCREV_pn-babiloo-efl ?= "296"
SRCREV_pn-bfin-uclibc ?= "1857"
SRCREV_pn-blipomoko ?= "93295f36f7b45c691df247cb2a65227facf13654"
SRCREV_pn-bootchart-lite ?= "4"
@@ -46,7 +46,7 @@ SRCREV_pn-dfu-util-native ?= "4160"
SRCREV_pn-disko ?= "f52597b8d5d584811cbe8f9e0bf25ea372526953"
SRCREV_pn-diversity-daemon ?= "571"
SRCREV_pn-diversity-radar ?= "453"
-SRCREV_pn-e-tasks ?= "14"
+SRCREV_pn-e-tasks ?= "18"
SRCREV_pn-e-wm-config-illume-shr ?= "bbcec18f0ebd47e4f6eea88b9b774edf7400e752"
SRCREV_pn-e-wm-illume-dict-pl ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-e-wm-menu-shr ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
@@ -58,15 +58,15 @@ SRCREV_pn-e-wm-theme-illume-shr ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-e-wm-theme-illume-sixteen ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-ebrainy ?= "21"
SRCREV_pn-eds-dbus ?= "736"
-SRCREV_pn-elementary-theme-gry ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
-SRCREV_pn-elementary-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
-SRCREV_pn-elementary-theme-niebiee ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
-SRCREV_pn-elementary-theme-sixteen ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
+SRCREV_pn-elementary-theme-gry ?= "2ac643cc273d144bb731a8cbb8ec6b3615de43a0"
+SRCREV_pn-elementary-theme-neo ?= "2ac643cc273d144bb731a8cbb8ec6b3615de43a0"
+SRCREV_pn-elementary-theme-niebiee ?= "2ac643cc273d144bb731a8cbb8ec6b3615de43a0"
+SRCREV_pn-elementary-theme-sixteen ?= "2ac643cc273d144bb731a8cbb8ec6b3615de43a0"
SRCREV_pn-elf2flt ?= "1786"
SRCREV_pn-elmdentica ?= "171"
SRCREV_pn-enlazar ?= "37"
SRCREV_pn-enotes ?= "19"
-SRCREV_pn-epdfview ?= "345"
+SRCREV_pn-epdfview ?= "346"
SRCREV_pn-epiphany ?= "7837"
SRCREV_pn-essential-dialer ?= "194"
SRCREV_pn-etk-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
@@ -107,18 +107,7 @@ SRCREV_pn-gtkhtml2 ?= "1158"
SRCREV_pn-gypsy ?= "134"
SRCREV_pn-hildon-1 ?= "14429"
SRCREV_pn-icon-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
-SRCREV_pn-illume-keyboard-arabic ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-browse ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-danish ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-default-alt ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-dutch ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-dvorak ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-french ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-german ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-hebrew ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-numeric-alt ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-russian ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-russian-terminal ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
+SRCREV_pn-illume-keyboards-shr ?= "c23bde500152c303971b4c2ec5c463d760b7cc14"
SRCREV_pn-illume-theme-asu ?= "4881"
SRCREV_pn-illume-theme-freesmartphone ?= "b1b0f6adc59e6f72a3929771058e3750bf181bc5"
SRCREV_pn-intone ?= "66"
@@ -196,12 +185,13 @@ SRCREV_pn-mplayer-maemo ?= "342"
SRCREV_pn-msn-pecan ?= "e795b33b29d792f19fcf699275eb966dc68be257"
SRCREV_pn-multitap-pad ?= "373"
SRCREV_pn-mux ?= "72460e890dbb15edbf7dc193116be0dcf9794a8b"
-SRCREV_pn-navit ?= "1096"
+SRCREV_pn-navit ?= "2846"
+SRCREV_pn-navit-icons ?= "2618"
SRCREV_pn-neod ?= "4617"
-SRCREV_pn-neomis ?= "2"
+SRCREV_pn-neomis ?= "6"
SRCREV_pn-net-snmp ?= "17367"
SRCREV_pn-netsurf ?= "3859"
-SRCREV_pn-numberx ?= "3"
+SRCREV_pn-numberx ?= "4"
SRCREV_pn-numptyphysics ?= "109"
SRCREV_pn-oh-puzzles ?= "22"
SRCREV_pn-ohm ?= "edfe25d49d67884bf004de7ae0724c162bb5e65e"
@@ -258,9 +248,9 @@ SRCREV_pn-openmoocow ?= "39648419825cddfea1cb1321e552a12b71fede14"
SRCREV_pn-openocd ?= "517"
SRCREV_pn-openocd-native ?= "517"
SRCREV_pn-opimd-utils ?= "0e7007fff120c8cc4c579c0c7e57883798e6d23e"
-SRCREV_pn-opkg ?= "413"
-SRCREV_pn-opkg-native ?= "413"
-SRCREV_pn-opkg-sdk ?= "413"
+SRCREV_pn-opkg ?= "446"
+SRCREV_pn-opkg-native ?= "446"
+SRCREV_pn-opkg-sdk ?= "446"
SRCREV_pn-opkg-utils ?= "4578"
SRCREV_pn-opkg-utils-native ?= "4595"
SRCREV_pn-oprofileui ?= "173"
@@ -302,9 +292,9 @@ SRCREV_pn-shr-config ?= "37dd7ac950e2bfd438801faf34c29fccfdbbaccf"
SRCREV_pn-shr-contacts ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-dialer ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-installer ?= "f17fa104639113fb0d3212b6bba366c092854cde"
-SRCREV_pn-shr-launcher ?= "87"
+SRCREV_pn-shr-launcher ?= "92"
SRCREV_pn-shr-messages ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
-SRCREV_pn-shr-settings ?= "b92390148cf0e979fd4c678a6633bb5e436d5763"
+SRCREV_pn-shr-settings ?= "ef06fe86c49958673889671c46682c0b2f1d74d7"
SRCREV_pn-shr-specs ?= "a881cd133439737708d4d4d150500246ceff7c7d"
SRCREV_pn-shr-splash ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-splash-theme-dontpanic ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
@@ -316,6 +306,7 @@ SRCREV_pn-shr-splash-theme-tux ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-shr-theme ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-theme-gtk-e17lookalike ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-shr-today ?= "7b69649a9df0e85f0c0f7985fd1d93543c3b11e2"
+SRCREV_pn-shr-wizard ?= "35c1042d4547495033c04abb0c038f966a40e048"
SRCREV_pn-sjf2410-linux-native ?= "4268"
SRCREV_pn-socketcan-modules ?= "917"
SRCREV_pn-socketcan-utils-test ?= "917"
@@ -343,7 +334,7 @@ SRCREV_pn-xserver-kdrive-glamo ?= "9b28d998424c77fbc057dd3a022ccbb122793a52"
# Enlightenment Foundation Libraries
# Caution: This is not alphabetically, but (roughly) dependency-sorted.
# Please leave it like that.
-EFL_SRCREV ?= "43996"
+EFL_SRCREV ?= "44165"
SRCREV_pn-edb-native ?= "${EFL_SRCREV}"
SRCREV_pn-edb ?= "${EFL_SRCREV}"
SRCREV_pn-eina-native ?= "${EFL_SRCREV}"
@@ -416,6 +407,9 @@ SRCREV_pn-illume ?= "${EFL_SRCREV}"
SRCREV_pn-illume-theme-illume ?= "${EFL_SRCREV}"
SRCREV_pn-waker ?= "${EFL_SRCREV}"
+#illume default keyboards
+SRCREV_pn-illume-keyboard-default ?= "${EFL_SRCREV}"
+
#exalt
SRCREV_pn-exalt ?= "${EFL_SRCREV}"
SRCREV_pn-exalt-client ?= "${EFL_SRCREV}"
diff --git a/conf/distro/include/shr-autorev.inc b/conf/distro/include/shr-autorev.inc
index 122433b7fc..9449b87604 100644
--- a/conf/distro/include/shr-autorev.inc
+++ b/conf/distro/include/shr-autorev.inc
@@ -13,4 +13,5 @@ SRCREV_pn-libphone-ui = "${AUTOREV}"
SRCREV_pn-libphone-ui-shr = "${AUTOREV}"
SRCREV_pn-libphone-utils = "${AUTOREV}"
SRCREV_pn-opimd-utils = "${AUTOREV}"
+SRCREV_pn-shr-wizard = "${AUTOREV}"
diff --git a/conf/distro/include/slugos.inc b/conf/distro/include/slugos.inc
index 8a331ae7f2..10a2bc4a02 100644
--- a/conf/distro/include/slugos.inc
+++ b/conf/distro/include/slugos.inc
@@ -166,6 +166,12 @@ PREFERRED_PROVIDER_avahi ?= "avahi"
PREFERRED_PROVIDER_gconf ?= "gconf"
PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb-compat"
+# we use bluez4 instead of the older bluez3
+DISTRO_BLUETOOTH_MANAGER = "bluez4"
+PREFERRED_PROVIDER_bluez-utils-dbus = "bluez-utils"
+PREFERRED_PROVIDER_bluez-libs = "bluez4"
+PREFERRED_PROVIDER_bluez-utils = "bluez4"
+
# Include any package preferred versions and srcrevs:
require conf/distro/include/preferred-slugos-versions.inc
diff --git a/conf/distro/jlime-2009.1.conf b/conf/distro/jlime-2009.1.conf
index 9d84d1b8c8..97de5cd257 100644
--- a/conf/distro/jlime-2009.1.conf
+++ b/conf/distro/jlime-2009.1.conf
@@ -27,6 +27,7 @@ DISTRO_EXTRA_RDEPENDS = "wireless-tools nano keymaps tslib-calibrate \
#<>
#<>------------------------------------------------------------------<
IMAGE_NAME = "${IMAGE_BASENAME}-2009.1-${MACHINE}"
+SPLASH = "psplash"
#
# Naming schemes + packages
@@ -56,6 +57,9 @@ PREFERRED_PROVIDER_virtual/gtk+ = "gtk+"
PREFERRED_PROVIDER_gconf = "gconf"
PREFERRED_PROVIDER_avahi = "avahi"
PREFERRED_PROVIDER_gtk+ = "gtk+"
+PREFERRED_PROVIDER_virtual/libqte2 = "qte-mt-static"
+PREFERRED_PROVIDER_bluez-libs = "bluez-libs"
+PREFERRED_VERSION_gettext-native = "0.14.1"
PREFERRED_VERSION_gcc = "4.2.2"
PREFERRED_VERSION_gcc-cross = "4.2.2"
@@ -64,6 +68,9 @@ PREFERRED_VERSION_gcc-cross-intermediate = "4.2.2"
PREFERRED_VERSION_binutils = "2.18"
PREFERRED_VERSION_binutils-cross = "2.18"
PREFERRED_VERSION_coreutils-native = "6.0"
+PREFERRED_VERSION_e2fsprogs-libs-native = "1.35"
+
+PREFERRED_VERSION_cdparanoia = "10.2"
#
# Target OS & FPU system
@@ -96,5 +103,4 @@ PREFERRED_PROVIDER_virtual/libx11 = "diet-x11"
PREFERRED_PROVIDER_tslib = "tslib"
PREFERRED_PROVIDER_virtual/libsdl = "libsdl-x11"
PREFERRED_PROVIDER_xserver = "xserver-kdrive"
-require conf/distro/include/preferred-xorg-versions-X11R7.4.inc
-
+require conf/distro/include/preferred-xorg-versions-X11R7.5.inc
diff --git a/conf/distro/micro.conf b/conf/distro/micro.conf
index 25880dff9d..d9fc595303 100644
--- a/conf/distro/micro.conf
+++ b/conf/distro/micro.conf
@@ -72,12 +72,6 @@ OVERRIDES = "local:${MACHINE}:${MACHINE_CLASS}:${DISTRO}:${TARGET_OS}:\
${TARGET_ARCH}:build-${BUILD_OS}:fail-fast:pn-${PN}"
#############################################################################
-# PREFERRED PROVIDERS
-#############################################################################
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-PREFERRED_PROVIDER_virtual/libx11 = "libx11"
-PREFERRED_PROVIDER_virtual/gail ?= "gtk+"
-#############################################################################
# PREFERRED VERSIONS
#############################################################################
require conf/distro/include/sane-srcdates.inc
diff --git a/conf/distro/minimal.conf b/conf/distro/minimal.conf
index 33eceab456..1e9eec20f4 100644
--- a/conf/distro/minimal.conf
+++ b/conf/distro/minimal.conf
@@ -84,20 +84,6 @@ LIBC ?= "eglibc"
require conf/distro/include/sane-toolchain.inc
#############################################################################
-# PREFERRED PROVIDERS
-#############################################################################
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-PREFERRED_PROVIDER_avahi = "avahi"
-PREFERRED_PROVIDER_gconf = "gconf-dbus"
-PREFERRED_PROVIDER_gtk+ = "gtk+"
-PREFERRED_PROVIDER_libgpewidget = "libgpewidget"
-PREFERRED_PROVIDER_virtual/db = "db3"
-PREFERRED_PROVIDER_virtual/db-native = "db3-native"
-PREFERRED_PROVIDER_virtual/libsdl = "libsdl-x11"
-PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
-PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb"
-
-#############################################################################
# PREFERRED VERSIONS
#############################################################################
require conf/distro/include/sane-srcdates.inc
diff --git a/conf/distro/shr.conf b/conf/distro/shr.conf
index 2a33427e30..b99c895dc2 100644
--- a/conf/distro/shr.conf
+++ b/conf/distro/shr.conf
@@ -30,6 +30,7 @@ DISTRO_TYPE = "debug"
DISTRO = "shr"
DISTRO_SSH_DAEMON = "openssh"
+DISTRO_APM = "fso-apm"
#Generate locales on the buildsystem instead of on the target. Speeds up first boot, set to "1" to enable
ENABLE_BINARY_LOCALE_GENERATION ?= "1"
@@ -155,34 +156,11 @@ require conf/distro/include/sane-toolchain.inc
#############################################################################
# PREFERRED PROVIDERS
#############################################################################
-PREFERRED_PROVIDER_qemu-native = "qemu-native"
-PREFERRED_PROVIDER_gconf = "gconf"
-PREFERRED_PROVIDER_virtual/shr-splash-theme = "shr-splash-theme-logo"
-PREFERRED_PROVIDER_frameworkd-config = "frameworkd-config-shr"
PREFERRED_PROVIDER_gpsd = "fso-gpsd"
-PREFERRED_PROVIDER_e-wm-menu = "e-wm-menu-shr"
-PREFERRED_PROVIDER_openmoko-alsa-scenarios = "alsa-scenarii-shr"
-PREFERRED_PROVIDER_virtual/alsa-scenarios = "alsa-scenarii-shr"
-PREFERRED_PROVIDER_libfribidi = "fribidi"
-PREFERRED_PROVIDER_bluez-libs = "bluez4"
-PREFERRED_PROVIDER_bluez-utils = "bluez4"
-PREFERRED_PROVIDER_classpath = "classpath"
-PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
-PREFERRED_PROVIDER_virtual/java-native = "jamvm-native"
-PREFERRED_PROVIDER_virtual/gail = "gtk+"
-PREFERRED_PROVIDER_opkg = "opkg"
-PREFERRED_PROVIDER_virtual/java-initial = "jamvm-initial"
PREFERRED_PROVIDER_atd = "atd-over-fso"
-PREFERRED_PROVIDER_qt4x11 = "qt4-x11-free"
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-PREFERRED_PROVIDER_avahi = "avahi"
-PREFERRED_PROVIDER_gtk+ = "gtk+"
-PREFERRED_PROVIDER_libgpewidget = "libgpewidget"
-PREFERRED_PROVIDER_virtual/db = "db3"
-PREFERRED_PROVIDER_virtual/db-native = "db3-native"
-PREFERRED_PROVIDER_virtual/libsdl = "libsdl-x11"
-PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+PREFERRED_PROVIDER_opkg = "opkg"
PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb"
+PREFERRED_PROVIDER_frameworkd-config = "frameworkd-config-shr"
#############################################################################
# PREFERRED VERSIONS
diff --git a/conf/distro/slugos.conf b/conf/distro/slugos.conf
index d82be5d2b5..d9b00f41a8 100644
--- a/conf/distro/slugos.conf
+++ b/conf/distro/slugos.conf
@@ -12,7 +12,8 @@ DISTRO_TYPE = "alpha"
TARGET_ARCH ?= "armeb"
ARM_INSTRUCTION_SET = "arm"
TARGET_OS = "linux-gnueabi"
-IPKG_VARIANT ?= "opkg-nogpg-nocurl"
+IPKG_VARIANT ?= "opkg-nogpg-nocurl-slugos"
+PREFERRED_PROVIDER_opkg ?= "opkg-nogpg-nocurl-slugos"
IMAGE_INITSCRIPTS ?= "initscripts-slugos"
require conf/distro/include/slugos.inc
diff --git a/conf/machine/cm-t35.conf b/conf/machine/cm-t35.conf
new file mode 100644
index 0000000000..ccb9f95773
--- /dev/null
+++ b/conf/machine/cm-t35.conf
@@ -0,0 +1,46 @@
+#@TYPE: Machine
+#@NAME: CM-T35 machine
+#@DESCRIPTION: Machine configuration for the CompuLab CM-T35 board (http://www.compulab.co.il/t3530/html/t3530-cm-datasheet.htm)
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-input-evtouch \
+ xf86-input-tslib \
+ xf86-video-omapfb \
+ xf86-input-keyboard"
+
+GUI_MACHINE_CLASS = "bigscreen"
+
+require conf/machine/include/omap3.inc
+
+IMAGE_FSTYPES += "tar.bz2 ubi"
+EXTRA_IMAGECMD_jffs2 = "-lnp "
+
+# Guesswork
+SERIAL_CONSOLE = "115200 ttyS2"
+
+UBOOT_MACHINE = "cm_t35_config"
+PREFERRED_VERSION_u-boot = "git"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: logical eraseblock size: 126976 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 4039 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 126976 -c 4039"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: physical eraseblock size: 131072 bytes (128 KiB)
+# UBI: sub-page size: 512
+UBINIZE_ARGS = "-O 2048 -m 2048 -p 128KiB"
+
+MACHINE_EXTRA_RRECOMMENDS = "marvell-sdio-fw"
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat alsa wifi ext2"
+
diff --git a/conf/machine/da830-omapl137-evm.conf b/conf/machine/da830-omapl137-evm.conf
index 4df4d63cca..0164e1c27d 100644
--- a/conf/machine/da830-omapl137-evm.conf
+++ b/conf/machine/da830-omapl137-evm.conf
@@ -3,6 +3,7 @@
#@DESCRIPTION: Machine configuration for the TI DA830/OMAPL137 EVM board
require conf/machine/include/davinci.inc
+require conf/machine/include/omapl137.inc
UBOOT_MACHINE = "da830_omapl137_evm_config"
UBOOT_ENTRYPOINT = "0xc0008000"
diff --git a/conf/machine/da850-omapl138-evm.conf b/conf/machine/da850-omapl138-evm.conf
index bbcb45002e..b61c00ca27 100644
--- a/conf/machine/da850-omapl138-evm.conf
+++ b/conf/machine/da850-omapl138-evm.conf
@@ -3,6 +3,7 @@
#@DESCRIPTION: Machine configuration for the TI DA850/OMAPL138 EVM board
require conf/machine/include/davinci.inc
+require conf/machine/include/omapl138.inc
UBOOT_MACHINE = "da850_omapl138_evm_config"
UBOOT_ENTRYPOINT = "0xc0008000"
diff --git a/conf/machine/davinci-sffsdr.conf b/conf/machine/davinci-sffsdr.conf
index e3c0554f71..63fc2cacc4 100644
--- a/conf/machine/davinci-sffsdr.conf
+++ b/conf/machine/davinci-sffsdr.conf
@@ -28,4 +28,5 @@ MACHINE_FEATURES = "kernel26 serial"
#MACHINE_EXTRA_RRECOMMENDS = "dsplink-module"
require conf/machine/include/tune-arm926ejs.inc
+require conf/machine/include/dm6446.inc
diff --git a/conf/machine/dm355-evm.conf b/conf/machine/dm355-evm.conf
index 73c9f1e017..a352b5e926 100644
--- a/conf/machine/dm355-evm.conf
+++ b/conf/machine/dm355-evm.conf
@@ -5,4 +5,4 @@
require conf/machine/include/davinci.inc
require conf/machine/include/dm355.inc
-UBOOT_MACHINE = "davinci_dm355evm_config"
+UBOOT_MACHINE = "davinci_dm355_evm_config"
diff --git a/conf/machine/dm365-evm.conf b/conf/machine/dm365-evm.conf
index 7cea5dc727..1fd51234e2 100644
--- a/conf/machine/dm365-evm.conf
+++ b/conf/machine/dm365-evm.conf
@@ -3,5 +3,6 @@
#@DESCRIPTION: Machine configuration for the TI Davinci DM365 EVM board
require conf/machine/include/davinci.inc
+require conf/machine/include/dm365.inc
UBOOT_MACHINE = "davinci_dm365evm_config"
diff --git a/conf/machine/dm6446-evm.conf b/conf/machine/dm6446-evm.conf
index 8b048a5474..aaa7492991 100644
--- a/conf/machine/dm6446-evm.conf
+++ b/conf/machine/dm6446-evm.conf
@@ -3,5 +3,6 @@
#@DESCRIPTION: Machine configuration for the TI Davinci DM6446 EVM board
require conf/machine/include/davinci.inc
+require conf/machine/include/dm6446.inc
UBOOT_MACHINE = "davinci_dvevm_config"
diff --git a/conf/machine/hawkboard.conf b/conf/machine/hawkboard.conf
index 5a9df79ade..ccf571ef9f 100644
--- a/conf/machine/hawkboard.conf
+++ b/conf/machine/hawkboard.conf
@@ -3,6 +3,7 @@
#@DESCRIPTION: Machine configuration for the TI Hawkboard
require conf/machine/include/davinci.inc
+require conf/machine/include/omapl138.conf
UBOOT_MACHINE = "da850_omapl138_evm_config"
UBOOT_ENTRYPOINT = "0xc0008000"
diff --git a/conf/machine/include/davinci.inc b/conf/machine/include/davinci.inc
index ceafa800b2..3f8254aff4 100644
--- a/conf/machine/include/davinci.inc
+++ b/conf/machine/include/davinci.inc
@@ -1,7 +1,7 @@
require conf/machine/include/tune-arm926ejs.inc
# Increase this everytime you change something in the kernel
-MACHINE_KERNEL_PR = "r12"
+MACHINE_KERNEL_PR = "r28"
TARGET_ARCH = "arm"
diff --git a/conf/machine/include/dm355.inc b/conf/machine/include/dm355.inc
index dffafe4460..d666d5e030 100644
--- a/conf/machine/include/dm355.inc
+++ b/conf/machine/include/dm355.inc
@@ -1,9 +1,2 @@
-
-DEVICES = "DM355"
-GPPOS = "LINUX_GCC"
-PLATFORM = "dm355"
-PROGRAMS = "APP_LOCAL"
-TARGET = "dm355_al"
-XDC_PLATFORM = ti.platforms.evmDM355
-
+SOC_FAMILY = "dm355"
diff --git a/conf/machine/include/dm365.inc b/conf/machine/include/dm365.inc
new file mode 100644
index 0000000000..c53680ea63
--- /dev/null
+++ b/conf/machine/include/dm365.inc
@@ -0,0 +1,12 @@
+SOC_FAMILY = "dm365"
+
+
+# DMAI
+PLATFORM = "dm365"
+XDC_PLATFORM = ti.platforms.evmDM365
+
+# Obsoleted (CE examples rebuild)
+#GPPOS = "LINUX_GCC"
+
+# DMAI recipe
+#TARGET = "dm365_al"
diff --git a/conf/machine/include/dm6446.inc b/conf/machine/include/dm6446.inc
new file mode 100644
index 0000000000..c14e573c74
--- /dev/null
+++ b/conf/machine/include/dm6446.inc
@@ -0,0 +1,13 @@
+SOC_FAMILY = "dm6446"
+
+# TI DVSDK stuff:
+DSPCFG ?= "DM6446GEMSHMEM"
+DSPLINKDSPCFG ?= "DM6446GEMSHMEM"
+DSPLINKGPPOS ?= "MVL5G"
+DSPLINKPLATFORM ?= "DAVINCI"
+DSPLINKSOC ?= "DM6446"
+DSPPOWERSOC ?= "DM6446"
+GPPOS ?= "LINUX_GCC"
+PLATFORM ?= "dm6446"
+XDC_PLATFORM ?= "ti.platforms.evmDM6446"
+
diff --git a/conf/machine/include/omap3.inc b/conf/machine/include/omap3.inc
index 2f242a4b38..9ff7b91ad9 100644
--- a/conf/machine/include/omap3.inc
+++ b/conf/machine/include/omap3.inc
@@ -1,3 +1,5 @@
+SOC_FAMILY = "omap3"
+
require conf/machine/include/tune-cortexa8.inc
PREFERRED_PROVIDER_virtual/kernel = "linux-omap"
# Increase this everytime you change something in the kernel
@@ -12,17 +14,10 @@ UBOOT_LOADADDRESS = "0x80008000"
EXTRA_IMAGEDEPENDS += "u-boot"
# TI DVSDK stuff:
-CODEC_INSTALL_DIR ?= "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combo"
-CODEC ?= "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combo"
-DEVICES ?= "OMAP3530"
-DSPCFG ?= "OMAP3530SHMEM"
+# DSPLink rebuild
DSPLINKDSPCFG ?= "OMAP3530SHMEM"
DSPLINKGPPOS ?= "OMAPLSP"
DSPLINKPLATFORM ?= "OMAP3530"
DSPLINKSOC ?= "3530"
-DSPPOWERSOC ?= "omap3530"
-GPPOS ?= "LINUX_GCC"
-LPMDSPPOWERSOC ?= "omap3530"
-PLATFORM ?= "omap3530"
-XDC_PLATFORM ?= "ti.platforms.evm3530"
+
diff --git a/conf/machine/include/omapl137.conf b/conf/machine/include/omapl137.conf
new file mode 100644
index 0000000000..34d0e9a754
--- /dev/null
+++ b/conf/machine/include/omapl137.conf
@@ -0,0 +1,2 @@
+SOC_FAMILY = "omapl137"
+
diff --git a/conf/machine/include/omapl138.conf b/conf/machine/include/omapl138.conf
new file mode 100644
index 0000000000..4c222753df
--- /dev/null
+++ b/conf/machine/include/omapl138.conf
@@ -0,0 +1 @@
+SOC_FAMILY = "omapl138"
diff --git a/conf/machine/include/tune-atom.inc b/conf/machine/include/tune-atom.inc
index a7dd04f596..44058c12be 100644
--- a/conf/machine/include/tune-atom.inc
+++ b/conf/machine/include/tune-atom.inc
@@ -1,8 +1,9 @@
# GCC 4.3.0- (see Poky)
# TARGET_CC_ARCH = "-march=i586"
-#
# GCC 4.3.1+ (see Gentoo)
TARGET_CC_ARCH = "-march=core2"
-
# GCC 4.4.2+ (see Fedora 12)
#TARGET_CC_ARCH = "-march=i686 -mtune=atom"
+BASE_PACKAGE_ARCH = "i686"
+FEED_ARCH = "i686"
+PACKAGE_EXTRA_ARCHS += "x86 i386 i486 i586" \ No newline at end of file
diff --git a/conf/machine/include/zaurus-kernel.inc b/conf/machine/include/zaurus-kernel.inc
index d9f1c1ba85..1ba4a3422d 100644
--- a/conf/machine/include/zaurus-kernel.inc
+++ b/conf/machine/include/zaurus-kernel.inc
@@ -3,6 +3,9 @@
MACHINE_KERNEL_VERSION = "2.6"
PREFERRED_PROVIDER_virtual/kernel = "linux-rp"
+
+# Starting with 2.6.32 linux-rp is deprecated
+#PREFERRED_PROVIDER_virtual/kernel = "linux"
PREFERRED_PROVIDER_virtual/kernel_collie = "linux"
PREFERRED_PROVIDER_virtual/kernel_tosa = "linux"
diff --git a/conf/machine/ion.conf b/conf/machine/ion.conf
index f58219bd1a..23b3cf7c37 100644
--- a/conf/machine/ion.conf
+++ b/conf/machine/ion.conf
@@ -8,8 +8,6 @@ TARGET_ARCH = "i686"
#MACHINE_ARCH = "core2"
-PACKAGE_EXTRA_ARCHS = "x86"
-
include conf/machine/include/tune-atom.inc
MACHINE_FEATURES = "kernel26 screen keyboard pci usbhost ext2 ext3 x86 wifi \
diff --git a/conf/machine/neuros-osd2.conf b/conf/machine/neuros-osd2.conf
index b751cbcac2..9b552a462a 100644
--- a/conf/machine/neuros-osd2.conf
+++ b/conf/machine/neuros-osd2.conf
@@ -26,4 +26,5 @@ MACHINE_FEATURES = "kernel26 pcmcia usbhost screen"
require conf/machine/include/tune-arm926ejs.inc
require conf/machine/include/neuros.inc
+require conf/machine/include/dm6446.inc
diff --git a/conf/machine/omap3-pandora.conf b/conf/machine/omap3-pandora.conf
index c896fa0b02..b504723afa 100644
--- a/conf/machine/omap3-pandora.conf
+++ b/conf/machine/omap3-pandora.conf
@@ -29,14 +29,14 @@ MACHINE_DISPLAY_HEIGHT_PIXELS = "480"
#IMAGE_FSTYPES += "tar.bz2 ubi"
IMAGE_FSTYPES = "tar.bz2"
-#EXTRA_IMAGECMD_jffs2 = "-lnp "
SERIAL_CONSOLE = "115200 ttyS0"
require conf/machine/include/omap3.inc
-# Put it below omap3.inc as we override the kernel here
+# Put it below omap3.inc as we override the kernel and PR here
PREFERRED_PROVIDER_virtual/kernel = "${MACHINE}-kernel"
+MACHINE_KERNEL_PR = "r2"
# Use our 'Powered by Angstrom' splash for the images.
PREFERRED_PROVIDER_virtual/psplash = "psplash-omap3pandora"
@@ -65,10 +65,8 @@ UBOOT_MACHINE = "omap3_pandora_config"
PREFERRED_PROVIDER_u-boot = "u-boot-omap3pandora"
PREFERRED_PROVIDER_x-load = "x-load-omap3pandora"
-
-EXTRA_IMAGEDEPENDS += "u-boot"
-EXTRA_IMAGEDEPENDS += "x-load"
-
-PREFERRED_VERSION_libgles-omap3 = "3.00.00.09"
+PREFERRED_VERSION_u-boot-omap3pandora = "git"
+PREFERRED_VERSION_x-load-omap3pandora = "git"
+EXTRA_IMAGEDEPENDS += "u-boot x-load"
MACHINE_FEATURES = "kernel26 apm usbgadget usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio"
diff --git a/conf/machine/simone.conf b/conf/machine/simone.conf
new file mode 100644
index 0000000000..f91b292aa1
--- /dev/null
+++ b/conf/machine/simone.conf
@@ -0,0 +1,10 @@
+#@TYPE: Machine
+#@Name: SimpleMachines Sim.One developer board
+#@DESCRIPTION: Machine configuration for SimpleMachines Sim.One developer board
+#@HOMEPAGE: http://simplemachines.it/simone.html
+
+require conf/machine/ep93xx.conf
+
+KERNEL_IMAGETYPE = "uImage"
+
+UBOOT_ENTRYPOINT = "c0008000"
diff --git a/contrib/angstrom/build-feeds.sh b/contrib/angstrom/build-feeds.sh
index ea869459e9..10c9d45f99 100755
--- a/contrib/angstrom/build-feeds.sh
+++ b/contrib/angstrom/build-feeds.sh
@@ -120,8 +120,9 @@ do
empathy \
epdfview \
epiphany \
- eve \
evince \
+ exalt \
+ exalt-client \
exo \
fakeroot \
fennec \
@@ -157,6 +158,7 @@ do
geda-utils \
gimp \
glider \
+ gksu \
gmp \
gmpc \
gnome-games \
@@ -191,6 +193,7 @@ do
iaimaster \
icebloxx \
imagemagick \
+ inkscape \
inkwp \
ioquake3 \
ipaq-sleep \
@@ -260,6 +263,7 @@ do
pavucontrol \
palantir \
pairs \
+ paprefs \
pciutils \
pdamaze \
perl \
@@ -299,6 +303,7 @@ do
screen \
scummvm \
sdlquake \
+ sdrshell \
sensors-applet \
setserial \
shisensho \
@@ -349,6 +354,7 @@ do
wt \
wt3 \
x11vnc \
+ xclip \
xf86-input-evdev \
xf86-input-evtouch \
xf86-input-keyboard \
diff --git a/contrib/angstrom/omap3-mkcard.sh b/contrib/angstrom/omap3-mkcard.sh
new file mode 100755
index 0000000000..dc4359c38c
--- /dev/null
+++ b/contrib/angstrom/omap3-mkcard.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# mkcard.sh v0.4
+# (c) Copyright 2009 Graeme Gregory <dp@xora.org.uk>
+# Licensed under terms of GPLv2
+#
+# Parts of the procudure base on the work of Denys Dmytriyenko
+# http://wiki.omap.com/index.php/MMC_Boot_Format
+
+LC_ALL=C
+
+if [ $# -ne 1 ]; then
+ echo "Usage: $0 <drive>"
+ exit 1;
+fi
+
+DRIVE=$1
+
+dd if=/dev/zero of=$DRIVE bs=1024 count=1024
+
+SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
+
+echo DISK SIZE - $SIZE bytes
+
+CYLINDERS=`echo $SIZE/255/63/512 | bc`
+
+echo CYLINDERS - $CYLINDERS
+
+{
+echo ,9,0x0C,*
+echo ,,,-
+} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
+
+if [ -b ${DRIVE}1 ]; then
+ mkfs.vfat -F 32 -n "boot" ${DRIVE}1
+else
+ if [ -b ${DRIVE}p1 ]; then
+ mkfs.vfat -F 32 -n "boot" ${DRIVE}p1
+ else
+ echo "Cant find boot partition in /dev"
+ fi
+fi
+
+if [ -b ${DRIVE}2 ]; then
+ mke2fs -j -L "rootfs" ${DRIVE}2
+else
+ if [ -b ${DRIVE}p2 ]; then
+ mke2fs -j -L "rootfs" ${DRIVE}p2
+ else
+ echo "Cant find rootfs partition in /dev"
+ fi
+fi
+
diff --git a/contrib/angstrom/sort.sh b/contrib/angstrom/sort.sh
index a84a206939..e372d45afc 100755
--- a/contrib/angstrom/sort.sh
+++ b/contrib/angstrom/sort.sh
@@ -48,13 +48,13 @@ case "$arch" in
"armv4t")
machines="micro2440 ep93xx h6300 om-gta01 om-gta02 fic-gta01 fic-gta02" ;;
"armv5te")
- machines="hawkboard da850-omapl138-evm da830-omapl137-evm htcalpine dm6446-evm dm6467-evm dm355-evm dm365-evm dm357-evm topas910 sheevaplug openrd-client dm355-leopard n2100 dns323 mv2120 kuropro lspro tsx09 ts409 davinci-dvevm davinci-sffsdr neuros-osd neuros-osd2 gumstix-connex gumstix-verdex gumstix e680 a780 a1200 at91sam9263ek rokre6 rokre2 rokr-e2 akita c7x0 h2200 h3900 h4000 h5000 htcapache htctornado htcblueangel htcuniversal hx4700 nslu2le hx2000 ixp4xxle magician netbook-pro nokia770 palmt650 palmt680 palmld palmtx palmtt3 palmz72 qemuarm omap5912osk poodle spitz tosa mx27ads at91sam9g20ek mainstone" ;;
+ machines="hawkboard da850-omapl138-evm da830-omapl137-evm htcalpine dm6446-evm dm6467-evm dm6467t-evm dm355-evm dm365-evm dm357-evm topas910 sheevaplug openrd-client dm355-leopard n2100 dns323 mv2120 kuropro lspro tsx09 ts409 davinci-dvevm davinci-sffsdr neuros-osd neuros-osd2 gumstix-connex gumstix-verdex gumstix e680 a780 a1200 at91sam9263ek rokre6 rokre2 rokr-e2 akita c7x0 h2200 h3900 h4000 h5000 htcapache htctornado htcblueangel htcuniversal hx4700 nslu2le hx2000 ixp4xxle magician netbook-pro nokia770 palmt650 palmt680 palmld palmtx palmtt3 palmz72 qemuarm omap5912osk poodle spitz tosa mx27ads at91sam9g20ek mainstone" ;;
"armv5teb")
machines="ixp4xxbe nslu2be" ;;
"armv6-novfp")
machines="htcdiamond htckaiser htcpolaris htcraphael htcvogue" ;;
"armv6")
- machines="bug mx31ads nokia800 " ;;
+ machines="smartq5 bug mx31ads nokia800 " ;;
"armv7")
machines="" ;;
"armv7a")
diff --git a/recipes/aceofpenguins/aceofpenguins-launcher_0.3.bb b/recipes/aceofpenguins/aceofpenguins-launcher_0.3.bb
index 265b8c6651..2e96d81475 100644
--- a/recipes/aceofpenguins/aceofpenguins-launcher_0.3.bb
+++ b/recipes/aceofpenguins/aceofpenguins-launcher_0.3.bb
@@ -8,7 +8,7 @@ SECTION = "x11/application"
PACKAGE_ARCH = "all"
-PR = "r0"
+PR = "r1"
inherit setuptools
diff --git a/recipes/angstrom/angstrom-led-config.bb b/recipes/angstrom/angstrom-led-config.bb
index 2dbfd01952..a0373edae3 100644
--- a/recipes/angstrom/angstrom-led-config.bb
+++ b/recipes/angstrom/angstrom-led-config.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Configuration files for runtime LED configuration"
#PV = "${DISTRO_VERSION}"
-PR = "r6"
+PR = "r7"
PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit update-rc.d
diff --git a/recipes/angstrom/angstrom-led-config/cm-t35/leds b/recipes/angstrom/angstrom-led-config/cm-t35/leds
new file mode 100644
index 0000000000..4d243964fc
--- /dev/null
+++ b/recipes/angstrom/angstrom-led-config/cm-t35/leds
@@ -0,0 +1,2 @@
+#file format: name trigger
+cm-t35:green heartbeat
diff --git a/recipes/asio/asio.inc b/recipes/asio/asio.inc
new file mode 100644
index 0000000000..a8b283683b
--- /dev/null
+++ b/recipes/asio/asio.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "Asio"
+HOMEPAGE = "http://asio.sf.net/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "Boost Software License"
+
+INC_PR = "r1"
+
+DEPENDS = "boost"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${PN}-${PV}.tar.bz2"
+
+inherit autotools
+
diff --git a/recipes/asio/asio_1.1.1.bb b/recipes/asio/asio_1.1.1.bb
index e0b610d8c9..1a4dad6932 100644
--- a/recipes/asio/asio_1.1.1.bb
+++ b/recipes/asio/asio_1.1.1.bb
@@ -1,18 +1,3 @@
-DESCRIPTION = "Asio"
-HOMEPAGE = "http://asio.sf.net/"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "Boost Software License"
-
-PR = "r1"
-
-DEPENDS = "boost"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${PN}-${PV}.tar.bz2"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
+require asio.inc
+PR = "${INC_PR}.0"
diff --git a/recipes/asio/asio_1.4.1.bb b/recipes/asio/asio_1.4.1.bb
new file mode 100644
index 0000000000..1a4dad6932
--- /dev/null
+++ b/recipes/asio/asio_1.4.1.bb
@@ -0,0 +1,3 @@
+require asio.inc
+
+PR = "${INC_PR}.0"
diff --git a/recipes/binutils/binutils-2.20/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch b/recipes/binutils/binutils-2.20/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
deleted file mode 100644
index 8df5b1fea0..0000000000
--- a/recipes/binutils/binutils-2.20/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-# strip (and objcopy) fail to set the error code if there is no
-# output file name and the rename of the stripped (or copied) file
-# fails, yet the command fails to do anything. This fixes both
-# objcopy and strip.
-#
-# modification by bero: Ported to 2.16.91.0.6
-#
-#Signed-off-by: John Bowler <jbowler@acm.org>
-#Signed-off-by: Bernhard Rosenkraenzer <bero@arklinux.org>
----
-# binutils/objcopy.c | 8 +++++---
-# 1 file changed, 5 insertions(+), 3 deletions(-)
-#
-Index: src/binutils/objcopy.c
-===================================================================
---- src.orig/binutils/objcopy.c 2007-08-09 13:26:03.000000000 +0100
-+++ src/binutils/objcopy.c 2007-08-09 16:36:12.000000000 +0100
-@@ -2787,8 +2787,9 @@ strip_main (int argc, char *argv[])
- if (preserve_dates)
- set_times (tmpname, &statbuf);
- if (output_file != tmpname)
-- smart_rename (tmpname, output_file ? output_file : argv[i],
-- preserve_dates);
-+ if (smart_rename (tmpname, output_file ? output_file : argv[i],
-+ preserve_dates))
-+ hold_status = 1;
- status = hold_status;
- }
- else
-@@ -3411,7 +3412,8 @@ copy_main (int argc, char *argv[])
- if (preserve_dates)
- set_times (tmpname, &statbuf);
- if (tmpname != output_filename)
-- smart_rename (tmpname, input_filename, preserve_dates);
-+ if (smart_rename (tmpname, input_filename, preserve_dates))
-+ status = 1;
- }
- else
- unlink_if_ordinary (tmpname);
diff --git a/recipes/binutils/binutils-2.20/binutils-arm-pr7093.patch b/recipes/binutils/binutils-2.20/binutils-arm-pr7093.patch
deleted file mode 100644
index ad4a556e0f..0000000000
--- a/recipes/binutils/binutils-2.20/binutils-arm-pr7093.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: binutils/bfd/elf32-arm.c
-===================================================================
-RCS file: /cvs/src/src/bfd/elf32-arm.c,v
-retrieving revision 1.162
-retrieving revision 1.163
-diff -u -r1.162 -r1.163
---- binutils/bfd/elf32-arm.c 23 Dec 2008 09:01:45 -0000 1.162
-+++ binutils/bfd/elf32-arm.c 23 Dec 2008 11:46:17 -0000 1.163
-@@ -4608,6 +4608,10 @@
- Elf_Internal_Shdr *hdr;
- unsigned int i, localsyms;
-
-+ /* PR 7093: Make sure that we are dealing with an arm elf binary. */
-+ if (! is_arm_elf (abfd))
-+ return;
-+
- if ((abfd->flags & DYNAMIC) != 0)
- return;
-
diff --git a/recipes/binutils/binutils-2.20/uclibc-segfault.patch b/recipes/binutils/binutils-2.20/uclibc-segfault.patch
deleted file mode 100644
index 16a875f8eb..0000000000
--- a/recipes/binutils/binutils-2.20/uclibc-segfault.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-upstream: already committed
-
---- clean/binutils-2.19.51/bfd/elf32-arm.c 2009-05-22 12:58:44.000000000 +0100
-+++ binutils-2.19.51/bfd/elf32-arm.c 2009-06-08 21:29:49.000000000 +0100
-@@ -8960,7 +8964,7 @@ elf32_arm_fix_exidx_coverage (asection *
- struct bfd_elf_section_data *elf_sec = elf_section_data (sec);
- Elf_Internal_Shdr *hdr = &elf_sec->this_hdr;
-
-- if (hdr->sh_type != SHT_ARM_EXIDX)
-+ if (!hdr || hdr->sh_type != SHT_ARM_EXIDX)
- continue;
-
- if (elf_sec->linked_to)
---- clean/binutils-2.19.51/ld/emultempl/armelf.em 2009-05-22 12:58:45.000000000 +0100
-+++ binutils-2.19.51/ld/emultempl/armelf.em 2009-06-08 21:26:34.000000000 +0100
-@@ -309,6 +309,7 @@ gld${EMULATION_NAME}_finish (void)
- asection *out_sec = sec->output_section;
-
- if (out_sec
-+ && elf_section_data (sec)
- && elf_section_type (sec) == SHT_PROGBITS
- && (elf_section_flags (sec) & SHF_EXECINSTR) != 0
- && (sec->flags & SEC_EXCLUDE) == 0
diff --git a/recipes/binutils/binutils_2.20.bb b/recipes/binutils/binutils_2.20.bb
index 62f40f231a..5398688cfb 100644
--- a/recipes/binutils/binutils_2.20.bb
+++ b/recipes/binutils/binutils_2.20.bb
@@ -2,7 +2,7 @@ require binutils.inc
LICENSE = "GPLv3"
INC_PR = "r1"
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.2"
SRC_URI = "\
${GNU_MIRROR}/binutils/binutils-${PV}.tar.bz2 \
@@ -12,7 +12,6 @@ SRC_URI = "\
file://binutils-uclibc-300-006_better_file_error.patch;patch=1 \
file://binutils-uclibc-300-012_check_ldrunpath_length.patch;patch=1 \
file://binutils-uclibc-gas-needs-libm.patch;patch=1 \
- file://binutils-arm-pr7093.patch;patch=1 \
file://ld-stub-crash.patch;patch=1;pnum=0 \
file://binutils-arm-non-empty-know.patch;patch=1 \
"
diff --git a/recipes/boost/boost-14x.inc b/recipes/boost/boost-14x.inc
index b1a5f6bb65..0a530013e2 100644
--- a/recipes/boost/boost-14x.inc
+++ b/recipes/boost/boost-14x.inc
@@ -22,6 +22,8 @@ EXTRA_OECMAKE = "-DBUILD_SHARED=ON \
-DBUILD_MULTI_THREADED=ON \
-DBUILD_RELEASE=ON \
-DBUILD_DEBUG=OFF \
+ -DWITH_MPI:BOOL=OFF \
+ -DINSTALL_VERSIONED:BOOL=OFF \
"
BOOST_LIBS = "\
@@ -64,7 +66,6 @@ python __anonymous () {
if not bb.data.getVar("FILES_%s" % pkg, d, 1):
bb.data.setVar("FILES_%s" % pkg, "${libdir}/libboost_%s*.so*" % lib, d)
bb.data.setVar("BOOST_PACKAGES", " ".join(packages), d)
- bb.data.setVar("BJAM_EXTRA", " ".join(extras), d)
}
# Override the contents of specific packages
diff --git a/recipes/boost/boost_1.41.0.bb b/recipes/boost/boost_1.41.0.bb
new file mode 100644
index 0000000000..a4c9287f79
--- /dev/null
+++ b/recipes/boost/boost_1.41.0.bb
@@ -0,0 +1,16 @@
+require boost-14x.inc
+
+PR = "r0"
+
+SRC_URI = "http://sodium.resophonic.com/boost-cmake/1.41.0.cmake0/boost-1.41.0.cmake0.tar.gz;name=tarball \
+ file://1.41.0_uclibc.patch;patch=1 \
+ "
+S = "${WORKDIR}/boost-1.41.0.cmake0"
+
+SRC_URI[tarball.md5sum] = "351747d991e3e391fea5623d4b5c038a"
+SRC_URI[tarball.sha256sum] = "78b7e72d34b057847ff99b291719d5bf1b76ed080bebfa3122549c231cc8fbed"
+
+DEPENDS += " icu "
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/recipes/boost/files/1.41.0_uclibc.patch b/recipes/boost/files/1.41.0_uclibc.patch
new file mode 100644
index 0000000000..21d12da095
--- /dev/null
+++ b/recipes/boost/files/1.41.0_uclibc.patch
@@ -0,0 +1,13 @@
+Index: boost-1.41.0.cmake0/libs/thread/src/pthread/thread.cpp
+===================================================================
+--- boost-1.41.0.cmake0.orig/libs/thread/src/pthread/thread.cpp
++++ boost-1.41.0.cmake0/libs/thread/src/pthread/thread.cpp
+@@ -380,7 +380,7 @@ namespace boost
+ {
+ #if defined(PTW32_VERSION) || defined(__hpux)
+ return pthread_num_processors_np();
+-#elif defined(_GNU_SOURCE)
++#elif defined(_GNU_SOURCE) && !defined(__UCLIBC__)
+ return get_nprocs();
+ #elif defined(__APPLE__) || defined(__FreeBSD__)
+ int count;
diff --git a/recipes/calc/calc_0.0.2.bb b/recipes/calc/calc_0.0.2.bb
deleted file mode 100644
index 9f15a32ec1..0000000000
--- a/recipes/calc/calc_0.0.2.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "A simple calculator which is elementary-themed"
-HOMEPAGE = "http://github.com/spaetz/calc"
-AUTHOR = "Sebastian Spaeth <Sebastian@SSpaeth.de>"
-LICENSE = "MIT"
-RDEPENDS = "python-elementary python python-edbus"
-SECTION = "x11/application"
-PR = "r1"
-
-
-SRC_URI = "git://github.com/spaetz/calc.git;protocol=http;branch=master;tag=${PV}"
-S = "${WORKDIR}/git"
-
-do_install(){
- install -d ${D}${datadir}/applications
- install -m 0644 ${S}/data/elementary-calculator.desktop ${D}${datadir}/applications/
- install -d ${D}${datadir}/pixmaps
- install -m 0644 ${S}/data/calculator.png ${D}${datadir}/pixmaps/
- install -d ${D}${bindir}
- install -m 0744 ${S}/calc ${D}${bindir}/
-}
-
-FILES_${PN} += "${prefix}/share/pixmaps"
-FILES_${PN} += "${prefix}/share/applications"
diff --git a/recipes/cdparanoia/cdparanoia/configure.in.patch b/recipes/cdparanoia/cdparanoia/configure.in.patch
new file mode 100644
index 0000000000..2ca251613f
--- /dev/null
+++ b/recipes/cdparanoia/cdparanoia/configure.in.patch
@@ -0,0 +1,13 @@
+--- cdparanoia-III-10.2.old/configure.in 2009-12-02 22:44:37.000000000 +0100
++++ cdparanoia-III-10.2/configure.in 2009-12-02 22:45:04.000000000 +0100
+@@ -5,9 +5,7 @@
+
+ AC_CANONICAL_HOST
+
+-if test -z "$CC"; then
+- AC_PROG_CC
+-fi
++AC_PROG_CC
+ AC_PROG_RANLIB
+ AC_CHECK_PROG(AR,ar,ar)
+ AC_CHECK_PROG(INSTALL,install,install)
diff --git a/recipes/cdparanoia/cdparanoia_10.2.bb b/recipes/cdparanoia/cdparanoia_10.2.bb
index 9ae4b7ed02..1d13f03af9 100644
--- a/recipes/cdparanoia/cdparanoia_10.2.bb
+++ b/recipes/cdparanoia/cdparanoia_10.2.bb
@@ -8,7 +8,8 @@ SRC_URI = "http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-10.2.src
file://Makefile.in.patch;patch=1 \
file://interface_Makefile.in.patch;patch=1 \
file://paranoia_Makefile.in.patch;patch=1 \
- file://cdparanoia-III-10.2-privatefix.patch;patch=1 "
+ file://cdparanoia-III-10.2-privatefix.patch;patch=1 \
+ file://configure.in.patch;patch=1"
S = "${WORKDIR}/cdparanoia-III-10.2"
diff --git a/recipes/cdparanoia/cdparanoia_svn.bb b/recipes/cdparanoia/cdparanoia_svn.bb
index 018e0b9155..71fafee281 100644
--- a/recipes/cdparanoia/cdparanoia_svn.bb
+++ b/recipes/cdparanoia/cdparanoia_svn.bb
@@ -2,7 +2,7 @@
# Copyright (C) 2005, Advanced Micro Devices, Inc. All Rights Reserved
# Released under the MIT license (see packages/COPYING)
-PR ="r0"
+PR ="r1"
LICENSE="GPL"
PV = "10.2+svnr${SRCPV}"
@@ -11,7 +11,8 @@ SRC_URI="svn://svn.xiph.org/trunk;module=cdparanoia;proto=http \
file://fixes10.patch;patch=1 \
file://Makefile.in.patch;patch=1 \
file://interface_Makefile.in.patch;patch=1 \
- file://paranoia_Makefile.in.patch;patch=1 "
+ file://paranoia_Makefile.in.patch;patch=1 \
+ file://configure.in.patch;patch=1 "
S="${WORKDIR}/cdparanoia"
diff --git a/recipes/comic-reader/comic-reader_svn.bb b/recipes/comic-reader/comic-reader_svn.bb
index ecea58dc64..372d1d0a64 100644
--- a/recipes/comic-reader/comic-reader_svn.bb
+++ b/recipes/comic-reader/comic-reader_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "A comic reader for Otaku"
HOMEPAGE = "http://code.google.com/p/comic-reader/"
LICENSE = "GPLv3"
DEPENDS = "evas edje ecore etk eet edbus"
-PR = "r2"
+PR = "r3"
SRC_URI = "svn://comic-reader.googlecode.com/svn/;module=trunk;proto=http"
diff --git a/recipes/connman/connman_0.46.bb b/recipes/connman/connman_0.46.bb
index 26b7b82798..814187ded6 100644
--- a/recipes/connman/connman_0.46.bb
+++ b/recipes/connman/connman_0.46.bb
@@ -1,6 +1,6 @@
require connman.inc
-PR = "r1"
+PR = "r3"
EXTRA_OECONF += "\
--disable-gtk-doc \
@@ -32,6 +32,7 @@ EXTRA_OECONF += "\
SRC_URI = "\
http://www.kernel.org/pub/linux/network/connman/connman-${PV}.tar.gz \
+ file://no_system_user_perms.patch;patch=1 \
file://connman \
"
diff --git a/recipes/connman/files/no_system_user_perms.patch b/recipes/connman/files/no_system_user_perms.patch
new file mode 100644
index 0000000000..e02bd30625
--- /dev/null
+++ b/recipes/connman/files/no_system_user_perms.patch
@@ -0,0 +1,14 @@
+diff --git a/src/connman-dbus.conf b/src/connman-dbus.conf
+index 2be3764..b4d4acd 100644
+--- a/src/connman-dbus.conf
++++ b/src/connman-dbus.conf
+@@ -6,9 +6,6 @@
+ <allow send_destination="org.moblin.connman"/>
+ <allow send_interface="org.moblin.connman.Agent"/>
+ </policy>
+- <policy user="system">
+- <allow send_destination="org.moblin.connman"/>
+- </policy>
+ <policy at_console="true">
+ <allow send_destination="org.moblin.connman"/>
+ </policy>
diff --git a/recipes/coreutils/coreutils-native.inc b/recipes/coreutils/coreutils-native.inc
index c4dda17e2d..06d8fa1f3b 100644
--- a/recipes/coreutils/coreutils-native.inc
+++ b/recipes/coreutils/coreutils-native.inc
@@ -6,3 +6,8 @@ PATCHTOOL = "patch"
do_configure() {
oe_runconf
}
+
+do_install() {
+ autotools_do_install
+}
+
diff --git a/recipes/devilspie/devilspie_0.22.bb b/recipes/devilspie/devilspie_0.22.bb
new file mode 100644
index 0000000000..90e40680a5
--- /dev/null
+++ b/recipes/devilspie/devilspie_0.22.bb
@@ -0,0 +1,13 @@
+DESCRIPTION="A Window Matching utility similar to Sawfish's 'Matched Windows' feature"
+HOMEPAGE="http://www.burtonini.com/blog/computers/devilspie"
+
+SRC_URI="http://www.burtonini.com/computing/${P}.tar.gz"
+
+LICENSE="GPL"
+
+inherit pkgconfig autotools
+
+PR = "r0"
+
+DEPENDS="intltool gettext"
+RDEPENDS="glib-2.0 gtk+ libwnck"
diff --git a/recipes/dvnixload/dvnixload_0.2.6.bb b/recipes/dvnixload/dvnixload_0.2.6.bb
new file mode 100644
index 0000000000..3c304a0be2
--- /dev/null
+++ b/recipes/dvnixload/dvnixload_0.2.6.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "UBL and second stage bootloader flasher for davinci"
+HOMEPAGE = "http://www.hugovil.com/en/dvnixload/"
+LICENSE = "GPLv2"
+SRC_URI = "http://www.hugovil.com/repository/dvnixload-0.2.6.tar.gz"
+
+inherit autotools
+
+BBCLASSEXTEND="native"
+
diff --git a/recipes/e17/e-tasks_svn.bb b/recipes/e17/e-tasks_svn.bb
index 4f27744717..9556e146d6 100644
--- a/recipes/e17/e-tasks_svn.bb
+++ b/recipes/e17/e-tasks_svn.bb
@@ -1,15 +1,35 @@
-DESCRIPTION = "tasks app for openmoko phones based on elementary"
+DESCRIPTION = "e-tasks is a todo program for Openmoko phones"
HOMEPAGE = "http://code.google.com/p/e-tasks/"
AUTHOR = "cchandel"
LICENSE = "GPLv2"
SECTION = "e/apps"
-#DEPENDS = "elementary eina edbus"
+DEPENDS = "elementary eina edbus sqlite3"
+
+inherit autotools
PV = "0.0.1+svnr${SRCPV}"
-PR = "r0"
+PR = "r1"
SRC_URI = "svn://e-tasks.googlecode.com/svn/trunk;module=.;proto=http"
S = "${WORKDIR}"
-inherit autotools
+do_configure_prepend() {
+ # all links to /usr/share/automake-1.10/
+ rm -f ${S}/depcomp ${S}/config.guess ${S}/config.sub ${S}/INSTALL ${S}/install-sh ${S}/missing
+ touch ${S}/INSTALL
+}
+
+do_install_append() {
+ install -d "${D}/${datadir}/pixmaps"
+ install -m 0644 "${S}/resources/e-tasks.png" "${D}/${datadir}/pixmaps"
+ install -d "${D}/${datadir}/applications"
+ install -m 0644 "${S}/resources/e-tasks.desktop" "${D}/${datadir}/applications"
+ install -d "${D}/${datadir}/e-tasks"
+ for ico in "${S}/resources/"*.png; do
+ if [ "$(basename $ico)" != "e-tasks.png" ]; then
+ install -m 0644 $ico "${D}/${datadir}/e-tasks"
+ fi
+ done
+}
+FILES_${PN} += "/usr/share/e-tasks/* /usr/share/applications/* /usr/share/pixmaps/*"
diff --git a/recipes/e17/e-wm/drop-illume-keyboards.patch b/recipes/e17/e-wm/drop-illume-keyboards.patch
new file mode 100644
index 0000000000..0abe6f2a21
--- /dev/null
+++ b/recipes/e17/e-wm/drop-illume-keyboards.patch
@@ -0,0 +1,17 @@
+Index: e/src/modules/illume/keyboards/Makefile.am
+===================================================================
+--- e/src/modules/illume/keyboards/Makefile.am (revision 43437)
++++ e/src/modules/illume/keyboards/Makefile.am (working copy)
+@@ -4,12 +4,6 @@
+ filesdir = $(libdir)/enlightenment/modules/$(MODULE)/keyboards
+ files_DATA = \
+ ignore_built_in_keyboards \
+- Default.kbd \
+- alpha.png \
+- Numbers.kbd \
+- numeric.png \
+- Terminal.kbd \
+- qwerty.png \
+ up.png \
+ down.png \
+ left.png \
diff --git a/recipes/e17/e-wm_svn.bb b/recipes/e17/e-wm_svn.bb
index fe65620852..b4e35b6890 100644
--- a/recipes/e17/e-wm_svn.bb
+++ b/recipes/e17/e-wm_svn.bb
@@ -3,7 +3,7 @@ DEPENDS = "eet evas ecore edje efreet edbus"
LICENSE = "MIT BSD"
SRCNAME = "e"
PV = "0.16.999.060+svnr${SRCPV}"
-PR = "r8"
+PR = "r9"
inherit e update-alternatives
@@ -12,6 +12,7 @@ SRC_URI += "\
file://applications.menu \
file://gsm-segfault-fix.patch;patch=1;maxrev=37617 \
file://fix-profiles.diff;patch=1;maxrev=39889 \
+ file://drop-illume-keyboards.patch;patch=1 \
"
SRC_URI_append_openmoko = " file://illume-disable-screensaver.patch;patch=1"
@@ -145,7 +146,13 @@ FILES_${PN}-utils = "${libdir}/enlightenment/utils/*"
FILES_${PN}-menu = "${sysconfdir}/xdg/menus/applications.menu"
RRECOMMENDS_${PN}-config-default = "${PN}-theme-default"
-RRECOMMENDS_${PN}-config-illume = "${PN}-theme-illume"
+RRECOMMENDS_${PN}-config-illume = "\
+ ${PN}-theme-illume \
+ illume-keyboard-default-alpha \
+ illume-keyboard-default-numeric \
+ illume-keyboard-default-terminal \
+"
+
RRECOMMENDS_${PN}-config-minimalist = "\
${PN}-background-light-gradient \
${PN}-theme-default \
diff --git a/recipes/e17/elmdentica_svn.bb b/recipes/e17/elmdentica_svn.bb
index 5988d904ed..8549b009f0 100644
--- a/recipes/e17/elmdentica_svn.bb
+++ b/recipes/e17/elmdentica_svn.bb
@@ -5,7 +5,7 @@ SECTION = "e/apps"
HOMEPAGE = "http://elmdentica.googlecode.com"
AUTHOR = "seabra"
PV = "0.7.0+svnr${SRCPV}"
-PR = "r0"
+PR = "r1"
SRC_URI = "svn://elmdentica.googlecode.com/svn;module=trunk;proto=http"
diff --git a/recipes/e17/eve_svn.bb b/recipes/e17/eve_svn.bb
index d1a0e4775a..baa4a6cece 100644
--- a/recipes/e17/eve_svn.bb
+++ b/recipes/e17/eve_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = " Enlightenment webbrowser"
LICENSE = "GPL"
DEPENDS = "webkit-efl evas ecore edje"
PV = "0.0.1+svnr${SRCPV}"
-PR = "r3"
+PR = "r4"
LDFLAGS += "-lstdc++"
diff --git a/recipes/e17/illume-keyboard-default_svn.bb b/recipes/e17/illume-keyboard-default_svn.bb
new file mode 100644
index 0000000000..8b8dbd4a41
--- /dev/null
+++ b/recipes/e17/illume-keyboard-default_svn.bb
@@ -0,0 +1,43 @@
+DESCRIPTION = "The illume default keyboards"
+SECTION = "x11/data"
+SRCNAME = "e/src/modules/illume/keyboards"
+PV = "0.16.999.060+svnr${SRCPV}"
+PR = "r0"
+
+SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk;module=${SRCNAME};proto=http"
+S = "${WORKDIR}/${SRCNAME}"
+
+PACKAGE_ARCH = "all"
+
+INSTPATH = "/enlightenment/modules/illume/keyboards"
+INSTFILES = "\
+Default.kbd \
+alpha.png \
+Numbers.kbd \
+numeric.png \
+Terminal.kbd \
+qwerty.png \
+"
+
+PACKAGES = "${PN}-alpha ${PN}-numeric ${PN}-terminal"
+
+FILES_${PN}-alpha = "\
+ ${libdir}${INSTPATH}/Default.kbd \
+ ${libdir}${INSTPATH}/alpha.png \
+"
+FILES_${PN}-numeric = "\
+ ${libdir}${INSTPATH}/Numeric.kbd \
+ ${libdir}${INSTPATH}/numeric.png \
+"
+FILES_${PN}-terminal = "\
+ ${libdir}${INSTPATH}/Terminal.kbd \
+ ${libdir}${INSTPATH}/qwerty.png \
+"
+
+do_install() {
+ install -d ${D}${libdir}${INSTPATH}
+ for f in ${INSTFILES}; do
+ install -m 0644 ${S}/${f} ${D}${libdir}${INSTPATH}
+ done
+}
+
diff --git a/recipes/e17/illume-keyboards-shr_git.bb b/recipes/e17/illume-keyboards-shr_git.bb
new file mode 100644
index 0000000000..109dc51a54
--- /dev/null
+++ b/recipes/e17/illume-keyboards-shr_git.bb
@@ -0,0 +1,78 @@
+SECTION = "x11/data"
+
+SRC_URI = "git://git.shr-project.org/repo/illume-keyboards.git;protocol=http;branch=master"
+S = "${WORKDIR}/git"
+
+PV = "0.0+gitr${SRCPV}"
+PE = "1"
+PR = "r1"
+
+
+PACKAGES = "\
+illume-keyboard-arabic \
+illume-keyboard-browse \
+illume-keyboard-danish \
+illume-keyboard-default-alt \
+illume-keyboard-dutch \
+illume-keyboard-dvorak \
+illume-keyboard-french \
+illume-keyboard-german \
+illume-keyboard-hebrew \
+illume-keyboard-numeric-alt \
+illume-keyboard-russian \
+illume-keyboard-russian-terminal \
+"
+
+PACKAGE_ARCH = "all"
+
+AUTHOR_illume-keyboard-arabic = "Mohammad Fahmi / Tom Hacohen"
+DESCRIPTION_illume-keyboard-arabic = "Illume keyboard with arabic layout"
+FILES_illume-keyboard-arabic = "${libdir}/enlightenment/modules/illume/keyboards/arabic"
+
+AUTHOR_illume-keyboard-browse = "Pander"
+DESCRIPTION_illume-keyboard-browse = "Illume keyboard with a layout optimized for browsing"
+FILES_illume-keyboard-browse = "${libdir}/enlightenment/modules/illume/keyboards/browse"
+
+AUTHOR_illume-keyboard-danish = "Esben Damgaard"
+DESCRIPTION_illume-keyboard-danish = "Illume keyboard with danish layout"
+FILES_illume-keyboard-danish = "${libdir}/enlightenment/modules/illume/keyboards/danish"
+
+AUTHOR_illume-keyboard-default-alt = "Pander"
+DESCRIPTION_illume-keyboard-default-alt = "Illume keyboard with an alternative default layout"
+FILES_illume-keyboard-default-alt = "${libdir}/enlightenment/modules/illume/keyboards/default-alt"
+
+AUTHOR_illume-keyboard-dutch = "Pander"
+DESCRIPTION_illume-keyboard-dutch = "Illume keyboard with dutch layout"
+FILES_illume-keyboard-dutch = "${libdir}/enlightenment/modules/illume/keyboards/dutch"
+
+AUTHOR_illume-keyboard-dvorak = "Gabor Adam TOTH"
+DESCRIPTION_illume-keyboard-dvorak = "Illume keyboard with dvorak layout"
+FILES_illume-keyboard-dvorak = "${libdir}/enlightenment/modules/illume/keyboards/dvorak"
+
+DESCRIPTION_illume-keyboard-french = "Illume keyboard with french layout"
+FILES_illume-keyboard-french = "${libdir}/enlightenment/modules/illume/keyboards/french"
+
+AUTHOR_illume-keyboard-german = "Florian Hackenberger"
+DESCRIPTION_illume-keyboard-german = "Illume keyboard with german layout"
+FILES_illume-keyboard-german = "${libdir}/enlightenment/modules/illume/keyboards/german"
+
+AUTHOR_illume-keyboard-hebrew = "Tom Hacohen"
+DESCRIPTION_illume-keyboard-hebrew = "Illume keyboard with hebrew layout"
+FILES_illume-keyboard-hebrew = "${libdir}/enlightenment/modules/illume/keyboards/hebrew"
+
+AUTHOR_illume-keyboard-numeric-alt = "Pander"
+DESCRIPTION_illume-keyboard-numeric-alt = "Illume keyboard with an alternative numeric layout"
+FILES_illume-keyboard-numeric-alt = "${libdir}/enlightenment/modules/illume/keyboards/numeric-alt"
+
+AUTHOR_illume-keyboard-russian = "lucky"
+DESCRIPTION_illume-keyboard-russian = "Illume keyboard with russian layout"
+FILES_illume-keyboard-russian = "${libdir}/enlightenment/modules/illume/keyboards/russian"
+
+AUTHOR_illume-keyboard-russian-terminal = "lucky"
+DESCRIPTION_illume-keyboard-russian-terminal = "Illume keyboard with russian layout for the Terminal"
+FILES_illume-keyboard-russian-terminal = "${libdir}/enlightenment/modules/illume/keyboards/russian-terminal"
+
+do_install() {
+ make DESTDIR=${D} install
+}
+
diff --git a/recipes/efl1/ecore_svn.bb b/recipes/efl1/ecore_svn.bb
index a6c519526a..178e9e95f3 100644
--- a/recipes/efl1/ecore_svn.bb
+++ b/recipes/efl1/ecore_svn.bb
@@ -1,7 +1,7 @@
require ecore.inc
PR = "r7"
-SRC_URI += "file://iconv.patch;patch=1 \
+SRC_URI += "file://iconv.patch;patch=1;maxrev=43996 \
file://exit_uclibc.patch;patch=1 \
"
diff --git a/recipes/efl1/elementary_svn.bb b/recipes/efl1/elementary_svn.bb
index e82272dbed..b37e989c40 100644
--- a/recipes/efl1/elementary_svn.bb
+++ b/recipes/efl1/elementary_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "EFL based widget set for mobile devices"
LICENSE = "LGPL"
DEPENDS = "efreet evas ecore edje eet edbus"
PV = "0.0.0+svnr${SRCPV}"
-PR = "r5"
+PR = "r6"
inherit efl
@@ -11,6 +11,7 @@ EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk/TMP/st;module=elementary;proto=http"
S = "${WORKDIR}/elementary"
+RDEPENDS_${PN} = "elementary-themes"
RSUGGESTS_${PN} = "elementary-tests"
do_compile_append() {
diff --git a/recipes/efl1/illume-keyboard-arabic_git.bb b/recipes/efl1/illume-keyboard-arabic_git.bb
deleted file mode 100644
index fcc01c905a..0000000000
--- a/recipes/efl1/illume-keyboard-arabic_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Mohammad Fahmi / Tom Hacohen"
-DESCRIPTION = "Illume keyboard with arabic layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "arabic"
-INSTFILES = "Arabic.kbd Arabic.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-browse_git.bb b/recipes/efl1/illume-keyboard-browse_git.bb
deleted file mode 100644
index b9f5e750d1..0000000000
--- a/recipes/efl1/illume-keyboard-browse_git.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-AUTHOR = "Pander"
-DESCRIPTION = "Illume keyboard with a layout optimized for browsing"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "browse"
-INSTFILES = "\
-Browse.kbd \
-end-browse.png \
-pagedown-browse.png \
-browse.png \
-home-browse.png \
-pageup-browse.png \
-space-browse.png \
-"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-danish_git.bb b/recipes/efl1/illume-keyboard-danish_git.bb
deleted file mode 100644
index b824a9e9d9..0000000000
--- a/recipes/efl1/illume-keyboard-danish_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Esben Damgaard"
-DESCRIPTION = "Illume keyboard with danish layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "danish"
-INSTFILES = "Danish.kbd danish.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-default-alt_git.bb b/recipes/efl1/illume-keyboard-default-alt_git.bb
deleted file mode 100644
index 4ceca530ae..0000000000
--- a/recipes/efl1/illume-keyboard-default-alt_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Pander"
-DESCRIPTION = "Illume keyboard with an alternative default layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "default-alt"
-INSTFILES = "Default-alt.kbd"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-dutch_git.bb b/recipes/efl1/illume-keyboard-dutch_git.bb
deleted file mode 100644
index 15d0022de8..0000000000
--- a/recipes/efl1/illume-keyboard-dutch_git.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-AUTHOR = "Pander"
-DESCRIPTION = "Illume keyboard with dutch layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "dutch"
-INSTFILES = "\
-capslock-negative.png \
-end.png \
-pagedown.png \
-qwerty-dutch-nl.png \
-Terminal-dutch-nl.kbd \
-capslock.png \
-home.png \
-pageup.png \
-space.png \
-"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-dvorak_git.bb b/recipes/efl1/illume-keyboard-dvorak_git.bb
deleted file mode 100644
index 61c58b406b..0000000000
--- a/recipes/efl1/illume-keyboard-dvorak_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Gabor Adam TOTH"
-DESCRIPTION = "Illume keyboard with dvorak layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "dvorak"
-INSTFILES = "Dvorak.kbd dvorak.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-french_git.bb b/recipes/efl1/illume-keyboard-french_git.bb
deleted file mode 100644
index 5e957e98e1..0000000000
--- a/recipes/efl1/illume-keyboard-french_git.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "Illume keyboard with french layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "french"
-INSTFILES = "Azerty.kbd Azerty.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-german_git.bb b/recipes/efl1/illume-keyboard-german_git.bb
deleted file mode 100644
index 7120dea750..0000000000
--- a/recipes/efl1/illume-keyboard-german_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Florian Hackenberger"
-DESCRIPTION = "Illume keyboard with german layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "german"
-INSTFILES = "German.kbd German.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-hebrew_git.bb b/recipes/efl1/illume-keyboard-hebrew_git.bb
deleted file mode 100644
index cbd47eaad3..0000000000
--- a/recipes/efl1/illume-keyboard-hebrew_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Tom Hacohen"
-DESCRIPTION = "Illume keyboard with hebrew layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "hebrew"
-INSTFILES = "Hebrew.kbd Alpha-hebrew-il.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-numeric-alt_git.bb b/recipes/efl1/illume-keyboard-numeric-alt_git.bb
deleted file mode 100644
index 8abfb8f020..0000000000
--- a/recipes/efl1/illume-keyboard-numeric-alt_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-AUTHOR = "Pander"
-DESCRIPTION = "Illume keyboard with an alternative numeric layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "numeric-alt"
-INSTFILES = "\
-end-alt.png \
-home-alt.png \
-Numbers-alt.kbd \
-numeric-alt.png \
-pagedown-alt.png \
-pageup-alt.png \
-"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-russian-terminal_git.bb b/recipes/efl1/illume-keyboard-russian-terminal_git.bb
deleted file mode 100644
index b625e937c2..0000000000
--- a/recipes/efl1/illume-keyboard-russian-terminal_git.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-AUTHOR = "lucky"
-DESCRIPTION = "Illume keyboard with russian layout for the Terminal"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "russian-terminal"
-INSTFILES = "Terminal_Russian.kbd Terminal-russian-ru.png"
-
-require illume-keyboard.inc
diff --git a/recipes/efl1/illume-keyboard-russian_git.bb b/recipes/efl1/illume-keyboard-russian_git.bb
deleted file mode 100644
index ed0644ee58..0000000000
--- a/recipes/efl1/illume-keyboard-russian_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "lucky"
-DESCRIPTION = "Illume keyboard with russian layout"
-PV = "0.0+gitr${SRCREV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "russian"
-INSTFILES = "X8_Russian.kbd X8-russian-ru.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard.inc b/recipes/efl1/illume-keyboard.inc
deleted file mode 100644
index 4003352cc1..0000000000
--- a/recipes/efl1/illume-keyboard.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-SECTION = "x11/data"
-
-SRC_URI = "git://git.shr-project.org/repo/illume-keyboards.git;protocol=http;branch=master"
-S = "${WORKDIR}/git"
-
-FILES_${PN} = "${libdir}/enlightenment/modules/illume/keyboards/*"
-PACKAGE_ARCH = "all"
-
-do_install() {
- install -d ${D}${libdir}/enlightenment/modules/illume/keyboards
- for f in ${INSTFILES}; do
- install -m 0644 ${S}/${BASEDIR}/${f} ${D}${libdir}/enlightenment/modules/illume/keyboards/
- done
-}
diff --git a/recipes/eglibc/eglibc_2.10.bb b/recipes/eglibc/eglibc_2.10.bb
index 38faaf81b6..3907b095ff 100644
--- a/recipes/eglibc/eglibc_2.10.bb
+++ b/recipes/eglibc/eglibc_2.10.bb
@@ -3,8 +3,8 @@ require eglibc.inc
DEPENDS += "gperf-native"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.10"
-PR = "${INC_PR}.5"
-SVN_REV="9124"
+PR = "${INC_PR}.6"
+SVN_REV="9381"
EGLIBC_BRANCH="eglibc-2_10"
SRC_URI = "svn://svn.eglibc.org/branches;module=${EGLIBC_BRANCH};rev=${SVN_REV};proto=svn \
file://eglibc-svn-arm-lowlevellock-include-tls.patch;patch=1 \
diff --git a/recipes/eglibc/eglibc_2.11.bb b/recipes/eglibc/eglibc_2.11.bb
index 8c7901c3e2..a03cf3806e 100644
--- a/recipes/eglibc/eglibc_2.11.bb
+++ b/recipes/eglibc/eglibc_2.11.bb
@@ -4,8 +4,8 @@ DEFAULT_PREFERENCE = "-1"
DEPENDS += "gperf-native"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.11"
-PR = "${INC_PR}.0"
-SVN_REV="9235"
+PR = "${INC_PR}.1"
+SVN_REV="9425"
EGLIBC_BRANCH="eglibc-2_11"
SRC_URI = "svn://svn.eglibc.org/branches;module=${EGLIBC_BRANCH};rev=${SVN_REV};proto=svn \
file://eglibc-svn-arm-lowlevellock-include-tls.patch;patch=1 \
diff --git a/recipes/eglibc/eglibc_svn.bb b/recipes/eglibc/eglibc_svn.bb
index 67f13abc95..7a07f420b4 100644
--- a/recipes/eglibc/eglibc_svn.bb
+++ b/recipes/eglibc/eglibc_svn.bb
@@ -1,7 +1,7 @@
require eglibc.inc
DEPENDS += "gperf-native"
-SRCREV = "9241"
+SRCREV = "9424"
DEFAULT_PREFERENCE = "-1"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.11+svnr${SRCPV}"
diff --git a/recipes/enotes/enotes_svn.bb b/recipes/enotes/enotes_svn.bb
index 991f188154..4748c758dc 100644
--- a/recipes/enotes/enotes_svn.bb
+++ b/recipes/enotes/enotes_svn.bb
@@ -6,7 +6,7 @@ SECTION = "e/apps"
DEPENDS = "elementary evas sqlite3"
PV = "0.2.2+svnr${SRCPV}"
-PR = "r1"
+PR = "r2"
SRC_URI = "svn://enotes.googlecode.com/svn/trunk;module=.;proto=http"
S = "${WORKDIR}"
diff --git a/recipes/epdfview/epdfview_0.1.7.bb b/recipes/epdfview/epdfview_0.1.7.bb
index 1cd59f7394..fd1b61f7f5 100644
--- a/recipes/epdfview/epdfview_0.1.7.bb
+++ b/recipes/epdfview/epdfview_0.1.7.bb
@@ -5,7 +5,10 @@ SECTION = "x11/applications"
DEPENDS = "poppler gtk+ cups"
SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2 \
- "
+ "
+
+SRC_URI_append_shr = "file://acroread.png \
+ "
inherit autotools
@@ -13,3 +16,13 @@ do_compile_append () {
sed -i 's|\$.*prefix./|/usr/|' data/epdfview.desktop
}
+do_compile_append_shr () {
+ sed -i 's/Icon=.*/Icon=acroread/' data/epdfview.desktop
+}
+
+do_install_append_shr () {
+ install -d ${D}${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/acroread.png ${D}${datadir}/pixmaps/
+}
+
+FILES_${PN}_append_shr = "${datadir}/pixmaps/acroread.png" \ No newline at end of file
diff --git a/recipes/epdfview/epdfview_svn.bb b/recipes/epdfview/epdfview_svn.bb
new file mode 100644
index 0000000000..1c8e9e9453
--- /dev/null
+++ b/recipes/epdfview/epdfview_svn.bb
@@ -0,0 +1,37 @@
+DESCRIPTION = "A minimal PDF viewer based on gtk and poppler"
+HOMEPAGE = "http://www.emma-soft.com/projects/epdfview/"
+LICENSE = "GPLv2"
+SECTION = "x11/applications"
+DEPENDS = "poppler gtk+ cups"
+
+PV = "0.1.7+svnr${SRCPV}"
+PR = "r0"
+
+SRC_URI = "svn://svn.emma-soft.com/epdfview;module=trunk;proto=svn \
+ "
+SRC_URI_append_shr = "file://acroread.png \
+ "
+
+S = "${WORKDIR}/trunk"
+
+inherit autotools
+
+do_configure_prepend() {
+ sh autogen.sh
+}
+
+do_compile_append () {
+ sed -i 's|\$.*prefix./|/usr/|' data/epdfview.desktop
+}
+
+do_compile_append_shr () {
+ sed -i 's/Icon=.*/Icon=acroread/' data/epdfview.desktop
+}
+
+do_install_append_shr () {
+ install -d ${D}${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/acroread.png ${D}${datadir}/pixmaps/
+}
+
+FILES_${PN}_append_shr = "${datadir}/pixmaps/acroread.png \
+ "
diff --git a/recipes/epdfview/files/acroread.png b/recipes/epdfview/files/acroread.png
new file mode 100644
index 0000000000..0189fe3072
--- /dev/null
+++ b/recipes/epdfview/files/acroread.png
Binary files differ
diff --git a/recipes/euphony/euphony_0.1.3.bb b/recipes/euphony/euphony_0.1.3.bb
index 134a39dc5e..7d332ee8e3 100644
--- a/recipes/euphony/euphony_0.1.3.bb
+++ b/recipes/euphony/euphony_0.1.3.bb
@@ -6,6 +6,7 @@ SECTION = "x11/multimedia"
inherit autotools
SRC_URI = "http://projects.gstaedtner.net/euphony/${PN}-${PV}.tar.gz"
+PR = "r1"
FILES_${PN} += "${datadir}"
diff --git a/recipes/ffalarms/ffalarms_svn.bb b/recipes/ffalarms/ffalarms_svn.bb
index a627a96ea6..8bc619a181 100644
--- a/recipes/ffalarms/ffalarms_svn.bb
+++ b/recipes/ffalarms/ffalarms_svn.bb
@@ -8,7 +8,7 @@ PRIORITY = "optional"
DEPENDS = "elementary libeflvala libical"
PV = "0.3.1+svnr${SRCPV}"
-PR = "r0"
+PR = "r1"
# needed because there is do_stage_append in vala.bbclass and do_stage() was removed..
do_stage() {
diff --git a/recipes/ffmpeg/ffmpeg_svn.bb b/recipes/ffmpeg/ffmpeg_svn.bb
index b8cea5104e..5cb365678b 100644
--- a/recipes/ffmpeg/ffmpeg_svn.bb
+++ b/recipes/ffmpeg/ffmpeg_svn.bb
@@ -2,7 +2,7 @@ require ffmpeg.inc
DEPENDS += "schroedinger libgsm"
-SRCREV = "20551"
+SRCREV = "20701"
PE = "1"
PV = "0.5.0+${PR}+svnr${SRCPV}"
diff --git a/recipes/fltk/fltkclock_svn.bb b/recipes/fltk/fltkclock_svn.bb
index 907610da8e..bf7807425f 100644
--- a/recipes/fltk/fltkclock_svn.bb
+++ b/recipes/fltk/fltkclock_svn.bb
@@ -4,7 +4,7 @@ AUTHOR = "Benjamin 'blindcoder' Schieder'
LICENSE = "PD/GPLv2"
SECTION = "x11/tool"
DEPENDS = "fltk"
-SRCREV = "41"
+SRCREV = "45"
PV = "1.0+svnr${SRCPV}"
PR = "r0"
S = "${WORKDIR}/trunk"
diff --git a/recipes/fltk/fltkcocktailbar_svn.bb b/recipes/fltk/fltkcocktailbar_svn.bb
index ba1bc56ad6..bd74e99df0 100644
--- a/recipes/fltk/fltkcocktailbar_svn.bb
+++ b/recipes/fltk/fltkcocktailbar_svn.bb
@@ -5,7 +5,7 @@ LICENSE = "GPLv2"
SECTION = "x11/tool"
DEPENDS = "fltk zlib cairo"
RDEPENDS = "curl"
-SRCREV = "51"
+SRCREV = "52"
PV = "1.0+svnr${SRCPV}"
PR = "r0"
S = "${WORKDIR}/trunk"
diff --git a/recipes/fltk/fltkcurrency_svn.bb b/recipes/fltk/fltkcurrency_svn.bb
new file mode 100644
index 0000000000..f0bd1ad087
--- /dev/null
+++ b/recipes/fltk/fltkcurrency_svn.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "FLTK Currency Converter"
+HOMEPAGE = ""
+AUTHOR = "Benjamin 'blindcoder' Schieder'
+LICENSE = "GPLv2"
+SECTION = "other/tool"
+DEPENDS = "fltk"
+RDEPENDS = "curl"
+SRCREV = "10"
+PV = "1.0+svnr${SRCPV}"
+PR = "r0"
+S = "${WORKDIR}/trunk"
+RDEPENDS = "bash wget"
+
+inherit autotools
+
+SRC_URI = "svn://scavenger.homeip.net/svn/fltkcurrency;module=trunk;proto=http"
diff --git a/recipes/freesmartphone/fso-apm_git.bb b/recipes/freesmartphone/fso-apm_git.bb
index 20f832b4f4..bb36e7f7fb 100644
--- a/recipes/freesmartphone/fso-apm_git.bb
+++ b/recipes/freesmartphone/fso-apm_git.bb
@@ -4,6 +4,7 @@ HOMEPAGE = "http://www.freesmartphone.org"
SECTION = "console"
LICENSE = "GPLv2"
DEPENDS = "vala-native"
+RCONFLICTS = "apm"
PV = "2.0.0+gitr${SRCREV}"
PR = "r1"
@@ -12,7 +13,4 @@ S = "${WORKDIR}/git/tools/apm2"
inherit autotools
-RCONFLICTS_${PN} = "apm"
-RPROVIDES_${PN} = "apm"
-RPROVIDES_${PN}-dev = ""
-RPROVIDES_${PN}-dbg = ""
+
diff --git a/recipes/freesmartphone/fsodeviced/fsodeviced b/recipes/freesmartphone/fsodeviced/fsodeviced
index 475e5b4aad..409cd088da 100644
--- a/recipes/freesmartphone/fsodeviced/fsodeviced
+++ b/recipes/freesmartphone/fsodeviced/fsodeviced
@@ -8,14 +8,13 @@
PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=fsodeviced
-NICENESS=10
[ -f /etc/default/rcS ] && . /etc/default/rcS
case "$1" in
start)
echo -n "Starting fsodeviced: "
- start-stop-daemon --start --pidfile /var/run/${NAME}.pid --make-pidfile --background -N ${NICENESS} -x /usr/sbin/fsodeviced
+ start-stop-daemon --start --pidfile /var/run/${NAME}.pid --make-pidfile --background -x /usr/sbin/fsodeviced
if [ $? = 0 ]; then
echo "(ok)"
else
diff --git a/recipes/freesmartphone/fsodeviced_git.bb b/recipes/freesmartphone/fsodeviced_git.bb
index 3406806a6c..2516c89aff 100644
--- a/recipes/freesmartphone/fsodeviced_git.bb
+++ b/recipes/freesmartphone/fsodeviced_git.bb
@@ -6,7 +6,7 @@ RDEPENDS += "libcanberra-alsa"
RRECOMMENDS += "fso-alsa-data"
PV = "0.9.0+gitr${SRCREV}"
PE = "1"
-PR = "${INC_PR}.5"
+PR = "${INC_PR}.6"
EXTRA_OECONF = "\
--enable-kernel26-rfkill \
diff --git a/recipes/gcc/gcc-configure-cross.inc b/recipes/gcc/gcc-configure-cross.inc
index 980f7929ff..1c37de8b4a 100644
--- a/recipes/gcc/gcc-configure-cross.inc
+++ b/recipes/gcc/gcc-configure-cross.inc
@@ -36,9 +36,6 @@ do_stage_append () {
${STAGING_INCDIR}/
fi
- # We use libiberty from binutils
- rm -f ${CROSS_DIR}/lib/libiberty.a
-
# We probably don't need these
rmdir ${CROSS_DIR}/include || :
diff --git a/recipes/glew/files/autotools.patch b/recipes/glew/files/autotools.patch
new file mode 100644
index 0000000000..fc4df82a15
--- /dev/null
+++ b/recipes/glew/files/autotools.patch
@@ -0,0 +1,146 @@
+Index: glew/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ glew/Makefile.am 2009-12-02 00:30:23.296641663 +0100
+@@ -0,0 +1,5 @@
++
++ACLOCAL_AMFLAGS = -I m4 --install
++
++SUBDIRS = include src
++
+Index: glew/configure.ac
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ glew/configure.ac 2009-12-02 00:30:23.296641663 +0100
+@@ -0,0 +1,67 @@
++# -*- Autoconf -*-
++# Process this file with autoconf to produce a configure script.
++
++AC_PREREQ([2.62])
++AC_INIT([glew], [1.5.1], [BUG-REPORT-ADDRESS])
++AC_CONFIG_SRCDIR([src/glew.c])
++AC_CONFIG_HEADERS([config.h])
++AM_INIT_AUTOMAKE([-Wall -Werror foreign])
++AC_CONFIG_MACRO_DIR([m4])
++
++LT_INIT
++
++# Checks for programs.
++AC_PROG_CC
++AC_PROG_INSTALL
++AC_PROG_LN_S
++
++# Checks for libraries.
++
++# Checks for header files.
++AC_CHECK_HEADERS([inttypes.h stddef.h stdint.h stdlib.h string.h])
++
++# Checks for typedefs, structures, and compiler characteristics.
++AC_TYPE_INT32_T
++AC_TYPE_INT64_T
++AC_TYPE_UINT64_T
++AC_CHECK_TYPES([ptrdiff_t])
++
++# Checks for library functions.
++AC_FUNC_MALLOC
++AC_CHECK_FUNCS([strtol])
++
++# Check for pkgconfig libs
++
++PKG_CHECK_MODULES([X11], [x11])
++AC_SUBST([X11_LIBS])
++AC_SUBST([X11_CFLAGS])
++
++PKG_CHECK_MODULES([XMU], [xmu])
++AC_SUBST([XMU_LIBS])
++AC_SUBST([XMU_CFLAGS])
++
++PKG_CHECK_MODULES([XI], [xi])
++AC_SUBST([XI_LIBS])
++AC_SUBST([XI_CFLAGS])
++
++PKG_CHECK_MODULES([XEXT], [xext])
++AC_SUBST([XEXT_LIBS])
++AC_SUBST([XEXT_CFLAGS])
++
++# Check for GLU is enough and imples gl so no doubled -lGL in LDFLAGS
++PKG_CHECK_MODULES([GLU], [glu])
++AC_SUBST([GLU_LIBS])
++AC_SUBST([GLU_CFLAGS])
++
++# ENABLE option for Multiple Rendering Contexts support
++AC_CHECK_ENABLE_GLEWMX
++
++# for now we use the same version as the package, but that should be avoided
++# in the future
++
++AC_SUBST([LIBGLEW_SO_VERSION], [1:5:1])
++
++AC_CONFIG_FILES([Makefile
++ include/Makefile
++ src/Makefile])
++AC_OUTPUT
+Index: glew/src/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ glew/src/Makefile.am 2009-12-02 00:33:48.690786110 +0100
+@@ -0,0 +1,35 @@
++
++AM_CPPFLAGS = -I$(top_srcdir)/include
++
++if ENABLE_GLEWMX
++AM_CPPFLAGS += -DGLEW_MX
++endif
++
++AM_CFLAGS = @X11_CFLAGS@ \
++ @XMU_CFLAGS@ \
++ @XI_CFLAGS@ \
++ @XEXT_CFLAGS@ \
++ @GLU_CFLAGS@
++
++lib_LTLIBRARIES = libGLEW.la
++
++libGLEW_la_SOURCES = glew.c
++
++libGLEW_la_LIBADD = @X11_LIBS@ \
++ @XMU_LIBS@ \
++ @XI_LIBS@ \
++ @XEXT_LIBS@ \
++ @GLU_LIBS@
++
++libGLEW_la_LDFLAGS = -version-number @LIBGLEW_SO_VERSION@
++
++bin_PROGRAMS = glewinfo visualinfo
++
++glewinfo_SOURCES = glewinfo.c
++
++glewinfo_LDADD = libGLEW.la
++
++visualinfo_SOURCES = visualinfo.c
++
++visualinfo_LDADD = libGLEW.la
++
+Index: glew/m4/glewmx.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ glew/m4/glewmx.m4 2009-12-02 00:30:23.296641663 +0100
+@@ -0,0 +1,11 @@
++
++AC_DEFUN([AC_CHECK_ENABLE_GLEWMX],[
++AC_MSG_CHECKING([whether to include Multiple Rendering Contexts support])
++AC_ARG_ENABLE([glewmx],
++ [AS_HELP_STRING([--enable-glewmx], [enable GLEW Multiple Rendering Contexts (default is no)])],
++ [ENABLE_GLEWMX="$enableval"],
++ [ENABLE_GLEWMX="no"])
++AC_MSG_RESULT([${ENABLE_GLEWMX}])
++AM_CONDITIONAL([ENABLE_GLEWMX], [test x"${ENABLE_GLEWMX}" = "xyes"])
++])
++
+Index: glew/include/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ glew/include/Makefile.am 2009-12-02 00:30:23.296641663 +0100
+@@ -0,0 +1,3 @@
++
++nobase_include_HEADERS = GL/glew.h GL/glxew.h GL/wglew.h
++
diff --git a/recipes/glew/libglew_1.5.1.bb b/recipes/glew/libglew_1.5.1.bb
new file mode 100644
index 0000000000..ed0b69c28b
--- /dev/null
+++ b/recipes/glew/libglew_1.5.1.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C++ extension loading library."
+SECTION = "libs"
+LICENSE = "Modified BSD License, Mesa 3-D License, Khronos License"
+
+DEPENDS = "virtual/libx11 mesa libxext libxi libxmu"
+
+PR = "r0"
+
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/glew/glew/1.5.1/glew-1.5.1-src.tgz \
+ file://autotools.patch;patch=1 \
+ "
+
+inherit autotools lib_package
+
+S = "${WORKDIR}/glew"
+
diff --git a/recipes/glib-2.0/glib-2.0-2.22.1/uclibc-res_query.patch b/recipes/glib-2.0/glib-2.0-2.22.1/uclibc-res_query.patch
new file mode 100644
index 0000000000..bbb34b5c09
--- /dev/null
+++ b/recipes/glib-2.0/glib-2.0-2.22.1/uclibc-res_query.patch
@@ -0,0 +1,36 @@
+Index: glib-2.22.1/configure.in
+===================================================================
+--- glib-2.22.1.orig/configure.in 2009-12-08 12:01:39.000000000 -0800
++++ glib-2.22.1/configure.in 2009-12-08 12:05:29.000000000 -0800
+@@ -1004,17 +1004,22 @@ if test $glib_native_win32 = no; then
+ AC_CHECK_FUNC(res_query, ,
+ [AC_CHECK_LIB(resolv, res_query, [ LIBASYNCNS_LIBADD="-lresolv" ],
+ [ save_libs="$LIBS"
+- LIBS="-lresolv $LIBS"
+- AC_MSG_CHECKING([for res_query in -lresolv (alternate version)])
++ AC_MSG_CHECKING([for res_query (alternate version)])
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[#include <resolv.h>]], [[res_query(0,0,0,0,0)]])],
+- [ AC_MSG_RESULT(yes)
+- LIBASYNCNS_LIBADD="-lresolv" ],
+- [ AC_MSG_RESULT(no)
+- AC_CHECK_LIB(bind, res_query,
+- [ LIBASYNCNS_LIBADD="-lbind" ],
+- [ AC_MSG_ERROR(res_query not found) ] ) ] )
+- LIBS="$save_libs"
++ [ ac_cv_func_res_query=yes ],
++ [ AC_MSG_CHECKING([for res_query in -lresolv (alternate version)])
++ LIBS="-lresolv $LIBS"
++ AC_LINK_IFELSE(
++ [AC_LANG_PROGRAM([[#include <resolv.h>]], [[res_query(0,0,0,0,0)]])],
++ [ AC_MSG_RESULT(yes)
++ LIBASYNCNS_LIBADD="-lresolv" ],
++ [ AC_MSG_RESULT(no)
++ AC_CHECK_LIB(bind, res_query,
++ [ LIBASYNCNS_LIBADD="-lbind" ],
++ [ AC_MSG_ERROR(res_query not found) ] ) ] )
++ ] )
++ LIBS="$save_libs"
+ ] )
+ ]
+ )
diff --git a/recipes/glib-2.0/glib-2.0_2.22.1.bb b/recipes/glib-2.0/glib-2.0_2.22.1.bb
index 533116b825..95fa07bbce 100644
--- a/recipes/glib-2.0/glib-2.0_2.22.1.bb
+++ b/recipes/glib-2.0/glib-2.0_2.22.1.bb
@@ -1,5 +1,5 @@
require glib.inc
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.2"
SRC_URI = "\
http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-${PV}.tar.bz2 \
@@ -7,6 +7,7 @@ SRC_URI = "\
file://configure-libtool.patch;patch=1 \
file://bug-556515.patch;patch=1 \
file://g_once_init_enter.patch;patch=1 \
+ file://uclibc-res_query.patch;patch=1 \
"
diff --git a/recipes/gstreamer/gst-plugins.inc b/recipes/gstreamer/gst-plugins.inc
index 9b69f3a609..a12c4ed5e1 100644
--- a/recipes/gstreamer/gst-plugins.inc
+++ b/recipes/gstreamer/gst-plugins.inc
@@ -10,6 +10,7 @@ PACKAGES_DYNAMIC = "gst-plugin-*"
SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2"
EXTRA_OECONF = "--disable-aalib --disable-shout2 --disable-sdl --disable-cdaudio --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR} "
+EXTRA_OECONF_append_shr = " --disable-dvdnav "
acpaths = "-I ${S}/common/m4 -I ${S}/m4"
diff --git a/recipes/gtk-webcore/midori-0.2.1/retain-navigationbar-in-fullwindow.patch b/recipes/gtk-webcore/midori-0.2.1/retain-navigationbar-in-fullwindow.patch
new file mode 100644
index 0000000000..78d8fba085
--- /dev/null
+++ b/recipes/gtk-webcore/midori-0.2.1/retain-navigationbar-in-fullwindow.patch
@@ -0,0 +1,39 @@
+From a08caa02b95db6c9251a5342de0fb985fae8399b Mon Sep 17 00:00:00 2001
+From: Christian Dywan <christian@twotoasts.de>
+Date: Tue, 08 Dec 2009 22:55:25 +0000
+Subject: Retain the visibility of the navigationbar in fullscreen mode
+
+It can be hidden manually, the way it used to be in 0.2.0
+---
+diff --git a/midori/midori-browser.c b/midori/midori-browser.c
+index 92769fd..11ca4aa 100644
+--- a/midori/midori-browser.c
++++ b/midori/midori-browser.c
+@@ -3604,9 +3604,7 @@ _action_location_focus_out (GtkAction* action,
+ {
+ GtkWidget* view = midori_browser_get_current_tab (browser);
+
+- if (!browser->show_navigationbar
+- || gdk_window_get_state (GTK_WIDGET (browser)->window)
+- & GDK_WINDOW_STATE_FULLSCREEN)
++ if (!browser->show_navigationbar)
+ gtk_widget_hide (browser->navigationbar);
+
+ if (g_object_get_data (G_OBJECT (view), "news-feeds"))
+@@ -5148,14 +5146,11 @@ midori_browser_window_state_event_cb (MidoriBrowser* browser,
+ if (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)
+ {
+ gtk_widget_hide (browser->menubar);
+- gtk_widget_hide (browser->navigationbar);
+ }
+ else
+ {
+ if (katze_object_get_boolean (browser->settings, "show-menubar"))
+ gtk_widget_show (browser->menubar);
+- if (katze_object_get_boolean (browser->settings, "show-navigationbar"))
+- gtk_widget_show (browser->navigationbar);
+ }
+ }
+ }
+--
+cgit v0.8.2.1
diff --git a/recipes/gtk-webcore/midori/config b/recipes/gtk-webcore/midori/config
index 7b6991d063..49aad72ef3 100644
--- a/recipes/gtk-webcore/midori/config
+++ b/recipes/gtk-webcore/midori/config
@@ -1,4 +1,13 @@
[settings]
enforce-96-dpi=true
-toolbar-items=Back,Forward,ReloadStop,Fullscreen,Location,Panel,
+toolbar-items=Back,Forward,ReloadStop,Fullscreen,Location,
+show-menubar=true
+show-navigationbar=true
+show-bookmarkbar=false
+show-panel=false
+show-transferbar=false
+show-statusbar=false
+zoom-text-and-images=true
+open-new-pages-in=MIDORI_NEW_PAGE_WINDOW
+open-external-pages-in=MIDORI_NEW_PAGE_WINDOW
diff --git a/recipes/gtk-webcore/midori_0.2.1.bb b/recipes/gtk-webcore/midori_0.2.1.bb
index 3eaf0f0bf8..2e5b6e4c57 100644
--- a/recipes/gtk-webcore/midori_0.2.1.bb
+++ b/recipes/gtk-webcore/midori_0.2.1.bb
@@ -5,9 +5,11 @@ DEPENDS += "python-native python-docutils-native"
SRC_URI = "http://archive.xfce.org/src/apps/midori/0.2/midori-${PV}.tar.bz2 \
file://waf"
-SRC_URI_append_shr = " file://config "
+SRC_URI_append_shr = " file://config \
+ file://retain-navigationbar-in-fullwindow.patch;patch=1 \
+ "
-PR = "r1"
+PR = "r2"
do_configure() {
cp -f ${WORKDIR}/waf ${S}/
diff --git a/recipes/gypsy/files/remove-werror.patch b/recipes/gypsy/files/remove-werror.patch
new file mode 100644
index 0000000000..8c60bd73b0
--- /dev/null
+++ b/recipes/gypsy/files/remove-werror.patch
@@ -0,0 +1,13 @@
+Index: configure.ac
+===================================================================
+--- a/configure.ac (Revision 148)
++++ b/configure.ac (Arbeitskopie)
+@@ -41,7 +41,7 @@
+ AC_SUBST(DBUS_SERVICES_DIR)
+ AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for D-Bus is])
+
+-CFLAGS="$CFLAGS -g -Wall -Werror -Wno-format"
++CFLAGS="$CFLAGS -g -Wall -Wno-format"
+
+ # TODO: add --with-xsltproc argument to override PATH
+ AC_CHECK_PROGS(XSLT, xsltproc)
diff --git a/recipes/gypsy/gypsy.inc b/recipes/gypsy/gypsy.inc
index df5e1c7da3..b618094395 100644
--- a/recipes/gypsy/gypsy.inc
+++ b/recipes/gypsy/gypsy.inc
@@ -13,4 +13,12 @@ do_stage() {
autotools_stage_all
}
-FILES_${PN} += "${datadir}/dbus-1/services/"
+
+PACKAGES += "libgypsy libgypsy-dev libgypsy-dbg"
+
+FILES_lib${PN} = "${libdir}/lib*.so*"
+FILES_lib${PN}-dev = "${includedir}/* ${libdir}/*.la ${libdir}/*.a ${libdir}/pkgconfig"
+FILES_lib${PN}-dbg = "${libdir}/.debug"
+FILES_${PN} = "${datadir}/dbus-1/services/ ${libexecdir}/gypsy-daemon ${sysconfdir}/dbus-1/system.d/*"
+FILES_${PN}-dbg ="${libexecdir}/.debug*"
+CONFFILES_${PN} = "${sysconfdir}/dbus-1/system.d/Gypsy.conf"
diff --git a/recipes/gypsy/gypsy_svn.bb b/recipes/gypsy/gypsy_svn.bb
index 8dac863a2b..0245a955f9 100644
--- a/recipes/gypsy/gypsy_svn.bb
+++ b/recipes/gypsy/gypsy_svn.bb
@@ -2,7 +2,8 @@ require gypsy.inc
SRC_URI = "svn://svn.o-hand.com/repos/${PN}/trunk;module=${PN};proto=http \
file://fixups.patch;patch=1;maxrev=107 \
- file://docs-reference-am.patch;patch=1;minrev=134"
+ file://docs-reference-am.patch;patch=1;minrev=134 \
+ file://remove-werror.patch;patch=1"
S = "${WORKDIR}/${PN}"
PV = "0.0+svnr${SRCPV}"
diff --git a/recipes/helloworld/helloworld_1.0.0.bb b/recipes/helloworld/helloworld_1.0.0.bb
index af29a7769a..83b3965960 100644
--- a/recipes/helloworld/helloworld_1.0.0.bb
+++ b/recipes/helloworld/helloworld_1.0.0.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Minimal statically compiled Hello world!"
LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
S = "${WORKDIR}/${P}"
@@ -11,7 +11,8 @@ do_fetch () {
}
do_compile () {
- ${CC} -o helloworld helloworld.c -static
+ ${CC} ${CFLAGS} -c -o helloworld.o helloworld.c
+ ${CC} ${LDFLAGS} -o helloworld helloworld.o -static
}
do_install () {
diff --git a/recipes/icu/icu-3.6.inc b/recipes/icu/icu-3.6.inc
index 73162c2b80..198c73f491 100644
--- a/recipes/icu/icu-3.6.inc
+++ b/recipes/icu/icu-3.6.inc
@@ -1,6 +1,8 @@
LICENSE = "ICU"
+INC_PR = "r5"
+
SRC_URI = "ftp://ftp.software.ibm.com/software/globalization/icu/3.6/icu4c-3_6-src.tgz \
file://elif-to-else.patch;patch=1"
diff --git a/recipes/icu/icu-native_3.6.bb b/recipes/icu/icu-native_3.6.bb
index 887bfcac2f..ffbb447e18 100644
--- a/recipes/icu/icu-native_3.6.bb
+++ b/recipes/icu/icu-native_3.6.bb
@@ -1,3 +1,5 @@
require icu-3.6.inc
+PR = "${INC_PR}.1"
+
inherit native
diff --git a/recipes/icu/icu_3.6.bb b/recipes/icu/icu_3.6.bb
index 56a70a2f1d..6fd9b3d613 100644
--- a/recipes/icu/icu_3.6.bb
+++ b/recipes/icu/icu_3.6.bb
@@ -1,7 +1,7 @@
require icu-3.6.inc
DEPENDS += "icu-native"
-PR = "r4"
+PR = "${INC_PR}.1"
SRC_URI += "file://use-g++-for-linking.patch;patch=1 \
file://rematch-gcc-bug.patch;patch=1"
diff --git a/recipes/images/shr-image.inc b/recipes/images/shr-image.inc
index 7234020601..ac2053737e 100644
--- a/recipes/images/shr-image.inc
+++ b/recipes/images/shr-image.inc
@@ -3,7 +3,7 @@
#------------------------------------------------------
PV = "2.0"
-PR = "r9"
+PR = "r10"
DEPENDS += "task-shr-minimal"
@@ -66,13 +66,6 @@ shr_rootfs_postprocess() {
echo >>./etc/fstab
echo "# NFS Host" >>./etc/fstab
echo "192.168.0.200:/local/pkg /local/pkg nfs noauto,nolock,soft,rsize=32768,wsize=32768 0 0" >>./etc/fstab
- # fix .desktop files for illume
- #desktop=`find ./usr/share/applications -name "*.desktop"`
- #for file in $desktop; do
- # echo "Categories=Office;" >>$file
- #done
-
- echo "Exec=vala-terminal -e htop" >> ./usr/share/applications/htop.desktop
# minimal gtk theme foo
# this should be set in postinst phase of installed gtk-theme package
@@ -107,11 +100,9 @@ shr_rootfs_postprocess() {
#load modules on boot
[ -d ./etc/modutils ] || mkdir ./etc/modutils
- echo "g_ether" > ./etc/modutils/g_ether
+ # FIXME: do load those modules through module_autoload in
+ # machine config or distro config
echo "ppp_generic" > ./etc/modutils/ppp_generic
- # FIXME: Only do this for GTA02
- # FIXME: investigate why module_autoload in machine config doesn't work
- echo "snd-soc-neo1973-gta02-wm8753" > ./etc/modutils/snd-soc-neo
#set up some variables to improve default settings
echo "if [ \"\$DISPLAY\" = \"\" ]" >> ./etc/profile
diff --git a/recipes/intone-video/intone-video_svn.bb b/recipes/intone-video/intone-video_svn.bb
index 1047c35748..30ac70acd2 100644
--- a/recipes/intone-video/intone-video_svn.bb
+++ b/recipes/intone-video/intone-video_svn.bb
@@ -7,7 +7,7 @@ DEPENDS = "elementary eina sqlite3 edbus"
RDEPENDS = "mplayer lame libxv libsdl-x11"
PV = "0.13+svnr${SRCPV}"
-PR = "r0"
+PR = "r1"
SRC_URI = "svn://intone-video.googlecode.com/svn/trunk;module=.;proto=http"
S = "${WORKDIR}"
diff --git a/recipes/intone/intone_svn.bb b/recipes/intone/intone_svn.bb
index 5b3f06232f..e1af70d9aa 100644
--- a/recipes/intone/intone_svn.bb
+++ b/recipes/intone/intone_svn.bb
@@ -7,7 +7,7 @@ DEPENDS = "elementary eina sqlite3 edbus libvorbis id3lib"
RDEPENDS = "mplayer lame libxv libsdl-x11"
PV = "0.66+svnr${SRCPV}"
-PR = "r1"
+PR = "r2"
SRC_URI = "svn://intone.googlecode.com/svn/trunk;module=.;proto=http \
file://vorbis-include-id3tag.patch;pnum=1;patch=1;maxrev=18"
diff --git a/recipes/ipaq-sleep/ipaq-sleep_0.9.bb b/recipes/ipaq-sleep/ipaq-sleep_0.9.bb
index 24d881dd05..158de80bf1 100644
--- a/recipes/ipaq-sleep/ipaq-sleep_0.9.bb
+++ b/recipes/ipaq-sleep/ipaq-sleep_0.9.bb
@@ -2,8 +2,9 @@ DESCRIPTION = "Automatic sleep/suspend control daemon"
SECTION = "x11/base"
LICENSE = "GPL"
DEPENDS = "apmd virtual/xserver libxext virtual/libx11 libxau xscrnsaverh libxss"
-RDEPENDS = "apm"
-PR = "r6"
+DISTRO_APM ?= "apm"
+RDEPENDS = "${DISTRO_APM}"
+PR = "r7"
inherit gpe pkgconfig
diff --git a/recipes/jack/jack_0.116.2.bb b/recipes/jack/jack_0.116.2.bb
index f0a2e7525e..fe7ef76e2c 100644
--- a/recipes/jack/jack_0.116.2.bb
+++ b/recipes/jack/jack_0.116.2.bb
@@ -5,14 +5,14 @@ themselves."
SECTION = "libs/multimedia"
PRIORITY = "optional"
LICENSE = "GPL LGPL"
-PR = "r0"
+PR = "r1"
DEPENDS = "alsa-lib"
SRC_URI = "http://jackaudio.org/downloads/jack-audio-connection-kit-${PV}.tar.gz"
S = "${WORKDIR}/jack-audio-connection-kit-${PV}"
-inherit autotools pkgconfig
+inherit autotools
EXTRA_OECONF = "--enable-timestamps --disable-capabilities --disable-oldtrans \
--disable-portaudio --disable-coreaudio --enable-oss --enable-alsa"
@@ -25,8 +25,5 @@ PACKAGES =+ "libjack jack-server jack-examples"
FILES_libjack = "${libdir}/*.so.* ${libdir}/jack/*.so"
FILES_jack-server = "${bindir}/jackd"
FILES_jack-examples = "${bindir}/*"
-
-do_stage() {
- autotools_stage_all
-}
+FILES_${PN}-doc += " ${datadir}/jack-audio-connection-kit/reference/html/* "
diff --git a/recipes/kexecboot/kexecboot_git.bb b/recipes/kexecboot/kexecboot_git.bb
index 9aa2fdc3f9..02e6d729ec 100644
--- a/recipes/kexecboot/kexecboot_git.bb
+++ b/recipes/kexecboot/kexecboot_git.bb
@@ -1,8 +1,8 @@
PV = "0.5"
-PR = "r7+gitr${SRCREV}"
+PR = "r8+gitr${SRCREV}"
SRC_URI = "git://git.linuxtogo.org/home/groups/kexecboot/kexecboot.git;protocol=git "
-SRCREV = "ddf66724ce68509a8d80727f26f682b9a9341ff5"
+SRCREV = "456e052144f58d3c1116a38cbb5caa44c070bce8"
S = "${WORKDIR}/git"
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig
new file mode 100644
index 0000000000..eb4c8afa36
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig
@@ -0,0 +1,1303 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Fri Dec 4 23:23:28 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
+CONFIG_INITRAMFS_ROOT_UID=0
+CONFIG_INITRAMFS_ROOT_GID=0
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
+CONFIG_INITRAMFS_COMPRESSION_GZIP=y
+# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
+# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+# CONFIG_MODULES is not set
+CONFIG_BLOCK=y
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_GUMSTIX is not set
+# CONFIG_MACH_INTELMOTE2 is not set
+# CONFIG_MACH_STARGATE2 is not set
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_MACH_MP900C is not set
+# CONFIG_MACH_BALLOON3 is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+CONFIG_SHARPSL_PM=y
+# CONFIG_MACH_POODLE is not set
+CONFIG_MACH_CORGI=y
+CONFIG_MACH_SHEPHERD=y
+CONFIG_MACH_HUSKY=y
+# CONFIG_MACH_AKITA is not set
+# CONFIG_MACH_SPITZ is not set
+# CONFIG_MACH_BORZOI is not set
+# CONFIG_MACH_TOSA is not set
+# CONFIG_ARCH_VIPER is not set
+# CONFIG_ARCH_PXA_ESERIES is not set
+# CONFIG_TRIZEPS_PXA is not set
+# CONFIG_MACH_H5000 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_EXEDA is not set
+# CONFIG_MACH_COLIBRI is not set
+# CONFIG_MACH_COLIBRI300 is not set
+# CONFIG_MACH_COLIBRI320 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_LITTLETON is not set
+# CONFIG_MACH_TAVOREVB is not set
+# CONFIG_MACH_SAAR is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_CM_X300 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_MIOA701 is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_ARCH_PXA_PALM is not set
+# CONFIG_MACH_CSB726 is not set
+# CONFIG_PXA_EZX is not set
+# CONFIG_MACH_XCEP is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SHARP_C7xx=y
+CONFIG_PXA_SSP=y
+CONFIG_PLAT_PXA=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 console=ttyS0,115200n8 loglevel=3 "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_NET is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=y
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_GPIO_ADDR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_IDE_GD is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=y
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_APMPOWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_QT2160 is not set
+CONFIG_KEYBOARD_CORGI=y
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_MOUSE_SYNAPTICS_I2C is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+CONFIG_TOUCHSCREEN_AD7879_I2C=y
+CONFIG_TOUCHSCREEN_AD7879=y
+# CONFIG_TOUCHSCREEN_CORGI is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+# CONFIG_CONSOLE_TRANSLATIONS is not set
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_PXA2XX=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LM95241 is not set
+CONFIG_SENSORS_MAX1111=y
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_THERMAL is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=y
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+# CONFIG_SSB_PCMCIAHOST is not set
+CONFIG_SSB_SDIOHOST_POSSIBLE=y
+# CONFIG_SSB_SDIOHOST is not set
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_SMARTPANEL is not set
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_CORGI=y
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+# CONFIG_SOUND is not set
+# CONFIG_HID_SUPPORT is not set
+# CONFIG_USB_SUPPORT is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_PXA is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=y
+# CONFIG_EXT4_FS_XATTR is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+CONFIG_JBD2=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+# CONFIG_FILE_LOCKING is not set
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+# CONFIG_NLS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_ARM_UNWIND is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_MANAGER2 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.32.bb b/recipes/kexecboot/linux-kexecboot_2.6.32.bb
new file mode 100644
index 0000000000..ee446d798f
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot_2.6.32.bb
@@ -0,0 +1,32 @@
+require linux-kexecboot.inc
+
+S = "${WORKDIR}/linux-${PV}"
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_akita = "-1"
+DEFAULT_PREFERENCE_c7x0 = "-1"
+DEFAULT_PREFERENCE_collie = "-1"
+DEFAULT_PREFERENCE_poodle = "-1"
+DEFAULT_PREFERENCE_spitz = "-1"
+DEFAULT_PREFERENCE_tosa = "-1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \
+ file://defconfig"
+
+SRC_URI[kernel.md5sum] = "260551284ac224c3a43c4adac7df4879"
+SRC_URI[kernel.sha256sum] = "5099786d80b8407d98a619df00209c2353517f22d804fdd9533b362adcb4504e"
+
+# Zaurus family bootloader patches
+RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
+ZAURUSPATCHES = " ${RPSRC}/pxa-linking-bug-r1.patch;patch=1;status=unmergable;name=pxa-linking-bug-r1 "
+SRC_URI[pxa-linking-bug-r1.md5sum] = "1e2a99787260c3566033e7f41180e2c8"
+SRC_URI[pxa-linking-bug-r1.sha256sum] = "785d2680022325ad54c1593082dce902f5fee31dae4c1922ba43956b1dcfcd8b"
+
+# Machine specific patches
+SRC_URI_append_akita = "${ZAURUSPATCHES}"
+SRC_URI_append_c7x0 = "${ZAURUSPATCHES}"
+SRC_URI_append_collie = "${ZAURUSPATCHES}"
+SRC_URI_append_poodle = "${ZAURUSPATCHES}"
+SRC_URI_append_spitz = "${ZAURUSPATCHES}"
+SRC_URI_append_tosa = "${ZAURUSPATCHES}"
diff --git a/recipes/libcli/files/autotools.patch b/recipes/libcli/files/autotools.patch
new file mode 100644
index 0000000000..de578a4e17
--- /dev/null
+++ b/recipes/libcli/files/autotools.patch
@@ -0,0 +1,88 @@
+Index: libcli-1.9.4/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libcli-1.9.4/Makefile.am 2009-12-08 11:04:42.788208125 +0100
+@@ -0,0 +1,24 @@
++
++ACLOCAL_AMFLAGS = -I m4 --install
++
++AM_CFLAGS = -Wall -Wformat-security -Wno-format-zero-length
++
++lib_LTLIBRARIES = libcli.la
++
++libcli_la_SOURCES = libcli.c
++
++libcli_la_LIBADD = @LIBCRYPT@
++
++libcli_la_LDFLAGS = -version-number @LIBCLI_LIBRARY_VERSION@
++
++include_HEADERS = libcli.h
++
++bin_PROGRAMS = clitest
++
++clitest_SOURCES = clitest.c
++
++clitest_LDADD = libcli.la
++
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = libcli.pc
++
+Index: libcli-1.9.4/configure.ac
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libcli-1.9.4/configure.ac 2009-12-08 11:04:04.341128615 +0100
+@@ -0,0 +1,39 @@
++# -*- Autoconf -*-
++# Process this file with autoconf to produce a configure script.
++
++AC_PREREQ([2.61])
++AC_INIT([libcli], [1.9.4], [heinold@inf.fu-berlin.de])
++AM_INIT_AUTOMAKE([-Wall foreign])
++AC_CONFIG_SRCDIR([clitest.c])
++AC_CONFIG_HEADERS([config.h])
++AC_CONFIG_MACRO_DIR([m4])
++
++LIBCLI_LIBRARY_VERSION=1:9:0
++AC_SUBST([LIBCLI_LIBRARY_VERSION])
++
++# Checks for programs.
++AC_PROG_CC
++AC_PROG_INSTALL
++AC_PROG_LN_S
++
++AC_PROG_LIBTOOL
++
++# Checks for header files.
++AC_CHECK_HEADERS([arpa/inet.h malloc.h memory.h stdlib.h string.h sys/socket.h unistd.h])
++
++# Checks fro library
++AC_CHECK_LIB([crypt], [crypt_r],[LIBCRYPT=-lcrypt],AC_MSG_ERROR(["libcrypt not found"]))
++AC_SUBST([LIBCRYPT])
++
++# Checks for typedefs, structures, and compiler characteristics.
++
++# Checks for library functions.
++AC_FUNC_FORK
++AC_FUNC_MALLOC
++AC_FUNC_REALLOC
++AC_CHECK_FUNCS([inet_ntoa memmove memset regcomp select socket strcasecmp strchr strdup strerror strncasecmp strpbrk strspn strstr])
++
++AC_CONFIG_FILES([Makefile
++ libcli.pc
++])
++AC_OUTPUT
+Index: libcli-1.9.4/libcli.pc.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libcli-1.9.4/libcli.pc.in 2009-12-08 10:35:05.115463492 +0100
+@@ -0,0 +1,10 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: libcli
++Description: shared library for including a Cisco-like command-line interface into other software
++Version: @VERSION@
++Libs: -L${libdir} -lcli
++Cflags: -I${includedir}
diff --git a/recipes/libcli/libcli_1.9.4.bb b/recipes/libcli/libcli_1.9.4.bb
new file mode 100644
index 0000000000..e6d3d4fd45
--- /dev/null
+++ b/recipes/libcli/libcli_1.9.4.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "shared library for including a Cisco-like command-line interface into other software"
+HOMEPAGE = "http://code.google.com/p/libcli/"
+SECTION = "devel"
+LICENSE = "LGPL"
+PR = "r1"
+
+SRC_URI = "http://libcli.googlecode.com/files/${PN}-${PV}.tar.gz \
+ file://autotools.patch;patch=1 \
+ "
+
+inherit autotools lib_package
diff --git a/recipes/libdessert/files/0001-big-fat-autotools-patch.patch b/recipes/libdessert/files/0001-big-fat-autotools-patch.patch
new file mode 100644
index 0000000000..619cdbf0b0
--- /dev/null
+++ b/recipes/libdessert/files/0001-big-fat-autotools-patch.patch
@@ -0,0 +1,87483 @@
+From eeae8079cf05426a957adca46f3fc6d0a985509e Mon Sep 17 00:00:00 2001
+From: woglinde <woglinde@rhein.zuhause.netz>
+Date: Sat, 5 Dec 2009 01:09:35 +0100
+Subject: [PATCH] *big fat autotools patch
+
+---
+ AUTHORS | 2 +
+ COPYING | 674 ++
+ ChangeLog | 7 +
+ DES-SERT.doxyfile | 2 +-
+ INSTALL | 302 +
+ Intro.txt | 270 -
+ Makefile | 154 -
+ Makefile.am | 11 +
+ Makefile.in | 925 ++
+ NEWS | 1 +
+ README | 270 +
+ autogen.sh | 22 +
+ changelog.gz | Bin 260 -> 0 bytes
+ config.guess | 1533 +++
+ config.h.in | 208 +
+ config.sub | 1693 +++
+ configure |16280 ++++++++++++++++++++++++++
+ configure.ac | 97 +
+ depcomp | 630 +
+ dessert.h | 1334 ---
+ dessert_agentx.c | 563 -
+ dessert_cli.c | 255 -
+ dessert_core.c | 241 -
+ dessert_internal.h | 219 -
+ dessert_log.c | 417 -
+ dessert_meshiface.c | 1220 --
+ dessert_msg.c | 876 --
+ dessert_periodic.c | 326 -
+ dessert_sysiface.c | 487 -
+ doxygen-include.am | 203 +
+ include/Makefile.am | 3 +
+ include/Makefile.in | 490 +
+ include/dessert/dessert.h | 1334 +++
+ include/dessert/utlist.h | 349 +
+ install-sh | 520 +
+ libdessert.pc.in | 11 +
+ ltmain.sh | 8413 +++++++++++++
+ m4/ac_doxygen.m4 | 324 +
+ m4/ax_pthread.m4 | 272 +
+ m4/libtool.m4 | 7376 ++++++++++++
+ m4/ltoptions.m4 | 368 +
+ m4/ltsugar.m4 | 123 +
+ m4/ltversion.m4 | 23 +
+ m4/lt~obsolete.m4 | 92 +
+ m4/net-snmp.m4 | 10 +
+ m4/pcap.m4 | 10 +
+ missing | 376 +
+ snmp/dessertAppParamsTable.c | 231 -
+ snmp/dessertAppParamsTable.h | 252 -
+ snmp/dessertAppParamsTable_data_access.c | 352 -
+ snmp/dessertAppParamsTable_data_access.h | 93 -
+ snmp/dessertAppParamsTable_data_get.c | 731 --
+ snmp/dessertAppParamsTable_data_get.h | 136 -
+ snmp/dessertAppParamsTable_data_set.c | 1241 --
+ snmp/dessertAppParamsTable_data_set.h | 168 -
+ snmp/dessertAppParamsTable_enums.h | 93 -
+ snmp/dessertAppParamsTable_interface.c | 1843 ---
+ snmp/dessertAppParamsTable_interface.h | 101 -
+ snmp/dessertAppParamsTable_oids.h | 56 -
+ snmp/dessertAppStatsTable.c | 173 -
+ snmp/dessertAppStatsTable.h | 251 -
+ snmp/dessertAppStatsTable_data_access.c | 407 -
+ snmp/dessertAppStatsTable_data_access.h | 93 -
+ snmp/dessertAppStatsTable_data_get.c | 1088 --
+ snmp/dessertAppStatsTable_data_get.h | 174 -
+ snmp/dessertAppStatsTable_data_set.c | 28 -
+ snmp/dessertAppStatsTable_data_set.h | 28 -
+ snmp/dessertAppStatsTable_enums.h | 118 -
+ snmp/dessertAppStatsTable_interface.c | 1069 --
+ snmp/dessertAppStatsTable_interface.h | 98 -
+ snmp/dessertAppStatsTable_oids.h | 64 -
+ snmp/dessertMeshifTable.c | 214 -
+ snmp/dessertMeshifTable.h | 222 -
+ snmp/dessertMeshifTable_data_access.c | 377 -
+ snmp/dessertMeshifTable_data_access.h | 77 -
+ snmp/dessertMeshifTable_data_get.c | 522 -
+ snmp/dessertMeshifTable_data_get.h | 109 -
+ snmp/dessertMeshifTable_data_set.c | 28 -
+ snmp/dessertMeshifTable_data_set.h | 28 -
+ snmp/dessertMeshifTable_enums.h | 39 -
+ snmp/dessertMeshifTable_interface.c | 944 --
+ snmp/dessertMeshifTable_interface.h | 98 -
+ snmp/dessertMeshifTable_oids.h | 43 -
+ snmp/dessertObjects.c | 164 -
+ snmp/dessertObjects.h | 17 -
+ snmp/dessertSysifTable.c | 215 -
+ snmp/dessertSysifTable.h | 230 -
+ snmp/dessertSysifTable_data_access.c | 342 -
+ snmp/dessertSysifTable_data_access.h | 90 -
+ snmp/dessertSysifTable_data_get.c | 507 -
+ snmp/dessertSysifTable_data_get.h | 105 -
+ snmp/dessertSysifTable_data_set.c | 28 -
+ snmp/dessertSysifTable_data_set.h | 28 -
+ snmp/dessertSysifTable_enums.h | 39 -
+ snmp/dessertSysifTable_interface.c | 936 --
+ snmp/dessertSysifTable_interface.h | 97 -
+ snmp/dessertSysifTable_oids.h | 43 -
+ snmp/dessertSysifTable_subagent.c | 202 -
+ src/Makefile.am | 3 +
+ src/Makefile.in | 591 +
+ src/libdessert/Makefile.am | 26 +
+ src/libdessert/Makefile.in | 586 +
+ src/libdessert/dessert_agentx.c | 563 +
+ src/libdessert/dessert_cli.c | 257 +
+ src/libdessert/dessert_core.c | 241 +
+ src/libdessert/dessert_internal.h | 219 +
+ src/libdessert/dessert_log.c | 417 +
+ src/libdessert/dessert_meshiface.c | 1221 ++
+ src/libdessert/dessert_msg.c | 876 ++
+ src/libdessert/dessert_periodic.c | 326 +
+ src/libdessert/dessert_sysiface.c | 487 +
+ src/snmp/Makefile.am | 60 +
+ src/snmp/Makefile.in | 598 +
+ src/snmp/dessertAppParamsTable.c | 231 +
+ src/snmp/dessertAppParamsTable.h | 252 +
+ src/snmp/dessertAppParamsTable_data_access.c | 352 +
+ src/snmp/dessertAppParamsTable_data_access.h | 93 +
+ src/snmp/dessertAppParamsTable_data_get.c | 731 ++
+ src/snmp/dessertAppParamsTable_data_get.h | 136 +
+ src/snmp/dessertAppParamsTable_data_set.c | 1241 ++
+ src/snmp/dessertAppParamsTable_data_set.h | 168 +
+ src/snmp/dessertAppParamsTable_enums.h | 93 +
+ src/snmp/dessertAppParamsTable_interface.c | 1843 +++
+ src/snmp/dessertAppParamsTable_interface.h | 101 +
+ src/snmp/dessertAppParamsTable_oids.h | 56 +
+ src/snmp/dessertAppStatsTable.c | 173 +
+ src/snmp/dessertAppStatsTable.h | 251 +
+ src/snmp/dessertAppStatsTable_data_access.c | 407 +
+ src/snmp/dessertAppStatsTable_data_access.h | 93 +
+ src/snmp/dessertAppStatsTable_data_get.c | 1088 ++
+ src/snmp/dessertAppStatsTable_data_get.h | 174 +
+ src/snmp/dessertAppStatsTable_data_set.c | 28 +
+ src/snmp/dessertAppStatsTable_data_set.h | 28 +
+ src/snmp/dessertAppStatsTable_enums.h | 118 +
+ src/snmp/dessertAppStatsTable_interface.c | 1069 ++
+ src/snmp/dessertAppStatsTable_interface.h | 98 +
+ src/snmp/dessertAppStatsTable_oids.h | 64 +
+ src/snmp/dessertMeshifTable.c | 214 +
+ src/snmp/dessertMeshifTable.h | 222 +
+ src/snmp/dessertMeshifTable_data_access.c | 371 +
+ src/snmp/dessertMeshifTable_data_access.h | 77 +
+ src/snmp/dessertMeshifTable_data_get.c | 522 +
+ src/snmp/dessertMeshifTable_data_get.h | 109 +
+ src/snmp/dessertMeshifTable_data_set.c | 28 +
+ src/snmp/dessertMeshifTable_data_set.h | 28 +
+ src/snmp/dessertMeshifTable_enums.h | 39 +
+ src/snmp/dessertMeshifTable_interface.c | 944 ++
+ src/snmp/dessertMeshifTable_interface.h | 98 +
+ src/snmp/dessertMeshifTable_oids.h | 43 +
+ src/snmp/dessertObjects.c | 165 +
+ src/snmp/dessertObjects.h | 17 +
+ src/snmp/dessertSysifTable.c | 215 +
+ src/snmp/dessertSysifTable.h | 230 +
+ src/snmp/dessertSysifTable_data_access.c | 336 +
+ src/snmp/dessertSysifTable_data_access.h | 90 +
+ src/snmp/dessertSysifTable_data_get.c | 507 +
+ src/snmp/dessertSysifTable_data_get.h | 105 +
+ src/snmp/dessertSysifTable_data_set.c | 28 +
+ src/snmp/dessertSysifTable_data_set.h | 28 +
+ src/snmp/dessertSysifTable_enums.h | 39 +
+ src/snmp/dessertSysifTable_interface.c | 936 ++
+ src/snmp/dessertSysifTable_interface.h | 97 +
+ src/snmp/dessertSysifTable_oids.h | 43 +
+ src/snmp/dessertSysifTable_subagent.c | 202 +
+ utlist.h | 349 -
+ 165 files changed, 64045 insertions(+), 21344 deletions(-)
+ create mode 100644 COPYING
+ create mode 100644 ChangeLog
+ create mode 100644 INSTALL
+ delete mode 100644 Intro.txt
+ delete mode 100644 Makefile
+ create mode 100644 Makefile.am
+ create mode 100644 Makefile.in
+ create mode 100644 NEWS
+ create mode 100644 README
+ create mode 100755 autogen.sh
+ delete mode 100644 changelog.gz
+ create mode 100755 config.guess
+ create mode 100644 config.h.in
+ create mode 100755 config.sub
+ create mode 100755 configure
+ create mode 100644 configure.ac
+ create mode 100755 depcomp
+ delete mode 100644 dessert.h
+ delete mode 100644 dessert_agentx.c
+ delete mode 100644 dessert_cli.c
+ delete mode 100644 dessert_core.c
+ delete mode 100644 dessert_internal.h
+ delete mode 100644 dessert_log.c
+ delete mode 100644 dessert_meshiface.c
+ delete mode 100644 dessert_msg.c
+ delete mode 100644 dessert_periodic.c
+ delete mode 100644 dessert_sysiface.c
+ create mode 100644 doxygen-include.am
+ create mode 100644 include/Makefile.am
+ create mode 100644 include/Makefile.in
+ create mode 100644 include/dessert/dessert.h
+ create mode 100644 include/dessert/utlist.h
+ create mode 100755 install-sh
+ create mode 100644 libdessert.pc.in
+ create mode 100755 ltmain.sh
+ create mode 100644 m4/ac_doxygen.m4
+ create mode 100644 m4/ax_pthread.m4
+ create mode 100644 m4/libtool.m4
+ create mode 100644 m4/ltoptions.m4
+ create mode 100644 m4/ltsugar.m4
+ create mode 100644 m4/ltversion.m4
+ create mode 100644 m4/lt~obsolete.m4
+ create mode 100644 m4/net-snmp.m4
+ create mode 100644 m4/pcap.m4
+ create mode 100755 missing
+ delete mode 100644 snmp/dessertAppParamsTable.c
+ delete mode 100644 snmp/dessertAppParamsTable.h
+ delete mode 100644 snmp/dessertAppParamsTable_data_access.c
+ delete mode 100644 snmp/dessertAppParamsTable_data_access.h
+ delete mode 100644 snmp/dessertAppParamsTable_data_get.c
+ delete mode 100644 snmp/dessertAppParamsTable_data_get.h
+ delete mode 100644 snmp/dessertAppParamsTable_data_set.c
+ delete mode 100644 snmp/dessertAppParamsTable_data_set.h
+ delete mode 100644 snmp/dessertAppParamsTable_enums.h
+ delete mode 100644 snmp/dessertAppParamsTable_interface.c
+ delete mode 100644 snmp/dessertAppParamsTable_interface.h
+ delete mode 100644 snmp/dessertAppParamsTable_oids.h
+ delete mode 100644 snmp/dessertAppStatsTable.c
+ delete mode 100644 snmp/dessertAppStatsTable.h
+ delete mode 100644 snmp/dessertAppStatsTable_data_access.c
+ delete mode 100644 snmp/dessertAppStatsTable_data_access.h
+ delete mode 100644 snmp/dessertAppStatsTable_data_get.c
+ delete mode 100644 snmp/dessertAppStatsTable_data_get.h
+ delete mode 100644 snmp/dessertAppStatsTable_data_set.c
+ delete mode 100644 snmp/dessertAppStatsTable_data_set.h
+ delete mode 100644 snmp/dessertAppStatsTable_enums.h
+ delete mode 100644 snmp/dessertAppStatsTable_interface.c
+ delete mode 100644 snmp/dessertAppStatsTable_interface.h
+ delete mode 100644 snmp/dessertAppStatsTable_oids.h
+ delete mode 100644 snmp/dessertMeshifTable.c
+ delete mode 100644 snmp/dessertMeshifTable.h
+ delete mode 100644 snmp/dessertMeshifTable_data_access.c
+ delete mode 100644 snmp/dessertMeshifTable_data_access.h
+ delete mode 100644 snmp/dessertMeshifTable_data_get.c
+ delete mode 100644 snmp/dessertMeshifTable_data_get.h
+ delete mode 100644 snmp/dessertMeshifTable_data_set.c
+ delete mode 100644 snmp/dessertMeshifTable_data_set.h
+ delete mode 100644 snmp/dessertMeshifTable_enums.h
+ delete mode 100644 snmp/dessertMeshifTable_interface.c
+ delete mode 100644 snmp/dessertMeshifTable_interface.h
+ delete mode 100644 snmp/dessertMeshifTable_oids.h
+ delete mode 100644 snmp/dessertObjects.c
+ delete mode 100644 snmp/dessertObjects.h
+ delete mode 100644 snmp/dessertSysifTable.c
+ delete mode 100644 snmp/dessertSysifTable.h
+ delete mode 100644 snmp/dessertSysifTable_data_access.c
+ delete mode 100644 snmp/dessertSysifTable_data_access.h
+ delete mode 100644 snmp/dessertSysifTable_data_get.c
+ delete mode 100644 snmp/dessertSysifTable_data_get.h
+ delete mode 100644 snmp/dessertSysifTable_data_set.c
+ delete mode 100644 snmp/dessertSysifTable_data_set.h
+ delete mode 100644 snmp/dessertSysifTable_enums.h
+ delete mode 100644 snmp/dessertSysifTable_interface.c
+ delete mode 100644 snmp/dessertSysifTable_interface.h
+ delete mode 100644 snmp/dessertSysifTable_oids.h
+ delete mode 100644 snmp/dessertSysifTable_subagent.c
+ create mode 100644 src/Makefile.am
+ create mode 100644 src/Makefile.in
+ create mode 100644 src/libdessert/Makefile.am
+ create mode 100644 src/libdessert/Makefile.in
+ create mode 100644 src/libdessert/dessert_agentx.c
+ create mode 100644 src/libdessert/dessert_cli.c
+ create mode 100644 src/libdessert/dessert_core.c
+ create mode 100644 src/libdessert/dessert_internal.h
+ create mode 100644 src/libdessert/dessert_log.c
+ create mode 100644 src/libdessert/dessert_meshiface.c
+ create mode 100644 src/libdessert/dessert_msg.c
+ create mode 100644 src/libdessert/dessert_periodic.c
+ create mode 100644 src/libdessert/dessert_sysiface.c
+ create mode 100644 src/snmp/Makefile.am
+ create mode 100644 src/snmp/Makefile.in
+ create mode 100644 src/snmp/dessertAppParamsTable.c
+ create mode 100644 src/snmp/dessertAppParamsTable.h
+ create mode 100644 src/snmp/dessertAppParamsTable_data_access.c
+ create mode 100644 src/snmp/dessertAppParamsTable_data_access.h
+ create mode 100644 src/snmp/dessertAppParamsTable_data_get.c
+ create mode 100644 src/snmp/dessertAppParamsTable_data_get.h
+ create mode 100644 src/snmp/dessertAppParamsTable_data_set.c
+ create mode 100644 src/snmp/dessertAppParamsTable_data_set.h
+ create mode 100644 src/snmp/dessertAppParamsTable_enums.h
+ create mode 100644 src/snmp/dessertAppParamsTable_interface.c
+ create mode 100644 src/snmp/dessertAppParamsTable_interface.h
+ create mode 100644 src/snmp/dessertAppParamsTable_oids.h
+ create mode 100644 src/snmp/dessertAppStatsTable.c
+ create mode 100644 src/snmp/dessertAppStatsTable.h
+ create mode 100644 src/snmp/dessertAppStatsTable_data_access.c
+ create mode 100644 src/snmp/dessertAppStatsTable_data_access.h
+ create mode 100644 src/snmp/dessertAppStatsTable_data_get.c
+ create mode 100644 src/snmp/dessertAppStatsTable_data_get.h
+ create mode 100644 src/snmp/dessertAppStatsTable_data_set.c
+ create mode 100644 src/snmp/dessertAppStatsTable_data_set.h
+ create mode 100644 src/snmp/dessertAppStatsTable_enums.h
+ create mode 100644 src/snmp/dessertAppStatsTable_interface.c
+ create mode 100644 src/snmp/dessertAppStatsTable_interface.h
+ create mode 100644 src/snmp/dessertAppStatsTable_oids.h
+ create mode 100644 src/snmp/dessertMeshifTable.c
+ create mode 100644 src/snmp/dessertMeshifTable.h
+ create mode 100644 src/snmp/dessertMeshifTable_data_access.c
+ create mode 100644 src/snmp/dessertMeshifTable_data_access.h
+ create mode 100644 src/snmp/dessertMeshifTable_data_get.c
+ create mode 100644 src/snmp/dessertMeshifTable_data_get.h
+ create mode 100644 src/snmp/dessertMeshifTable_data_set.c
+ create mode 100644 src/snmp/dessertMeshifTable_data_set.h
+ create mode 100644 src/snmp/dessertMeshifTable_enums.h
+ create mode 100644 src/snmp/dessertMeshifTable_interface.c
+ create mode 100644 src/snmp/dessertMeshifTable_interface.h
+ create mode 100644 src/snmp/dessertMeshifTable_oids.h
+ create mode 100644 src/snmp/dessertObjects.c
+ create mode 100644 src/snmp/dessertObjects.h
+ create mode 100644 src/snmp/dessertSysifTable.c
+ create mode 100644 src/snmp/dessertSysifTable.h
+ create mode 100644 src/snmp/dessertSysifTable_data_access.c
+ create mode 100644 src/snmp/dessertSysifTable_data_access.h
+ create mode 100644 src/snmp/dessertSysifTable_data_get.c
+ create mode 100644 src/snmp/dessertSysifTable_data_get.h
+ create mode 100644 src/snmp/dessertSysifTable_data_set.c
+ create mode 100644 src/snmp/dessertSysifTable_data_set.h
+ create mode 100644 src/snmp/dessertSysifTable_enums.h
+ create mode 100644 src/snmp/dessertSysifTable_interface.c
+ create mode 100644 src/snmp/dessertSysifTable_interface.h
+ create mode 100644 src/snmp/dessertSysifTable_oids.h
+ create mode 100644 src/snmp/dessertSysifTable_subagent.c
+ delete mode 100644 utlist.h
+
+Index: libdessert0.86-0.86.14/AUTHORS
+===================================================================
+--- libdessert0.86-0.86.14.orig/AUTHORS 2009-11-26 18:56:56.000000000 +0100
++++ libdessert0.86-0.86.14/AUTHORS 2009-12-09 16:38:27.215595120 +0100
+@@ -15,6 +15,8 @@
+ Wladimir Degtjarew <degtjare@inf.fu-berlin.de>
+ Sebastian Hofmann <shof@inf.fu-berlin.de>
+
++Autotools:
++ Henning Heinold <heinold@inf.fu-berlin.de>
+
+ DES-SERT is under development at Freie Universitaet Berlin, Germany
+ Distributed, Embedded Systems (DES) research group, Prof Mesut Guenes
+Index: libdessert0.86-0.86.14/COPYING
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/COPYING 2009-12-09 16:38:27.215595120 +0100
+@@ -0,0 +1,674 @@
++ GNU GENERAL PUBLIC LICENSE
++ Version 3, 29 June 2007
++
++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++ Preamble
++
++ The GNU General Public License is a free, copyleft license for
++software and other kinds of works.
++
++ The licenses for most software and other practical works are designed
++to take away your freedom to share and change the works. By contrast,
++the GNU General Public License is intended to guarantee your freedom to
++share and change all versions of a program--to make sure it remains free
++software for all its users. We, the Free Software Foundation, use the
++GNU General Public License for most of our software; it applies also to
++any other work released this way by its authors. You can apply it to
++your programs, too.
++
++ When we speak of free software, we are referring to freedom, not
++price. Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++them if you wish), that you receive source code or can get it if you
++want it, that you can change the software or use pieces of it in new
++free programs, and that you know you can do these things.
++
++ To protect your rights, we need to prevent others from denying you
++these rights or asking you to surrender the rights. Therefore, you have
++certain responsibilities if you distribute copies of the software, or if
++you modify it: responsibilities to respect the freedom of others.
++
++ For example, if you distribute copies of such a program, whether
++gratis or for a fee, you must pass on to the recipients the same
++freedoms that you received. You must make sure that they, too, receive
++or can get the source code. And you must show them these terms so they
++know their rights.
++
++ Developers that use the GNU GPL protect your rights with two steps:
++(1) assert copyright on the software, and (2) offer you this License
++giving you legal permission to copy, distribute and/or modify it.
++
++ For the developers' and authors' protection, the GPL clearly explains
++that there is no warranty for this free software. For both users' and
++authors' sake, the GPL requires that modified versions be marked as
++changed, so that their problems will not be attributed erroneously to
++authors of previous versions.
++
++ Some devices are designed to deny users access to install or run
++modified versions of the software inside them, although the manufacturer
++can do so. This is fundamentally incompatible with the aim of
++protecting users' freedom to change the software. The systematic
++pattern of such abuse occurs in the area of products for individuals to
++use, which is precisely where it is most unacceptable. Therefore, we
++have designed this version of the GPL to prohibit the practice for those
++products. If such problems arise substantially in other domains, we
++stand ready to extend this provision to those domains in future versions
++of the GPL, as needed to protect the freedom of users.
++
++ Finally, every program is threatened constantly by software patents.
++States should not allow patents to restrict development and use of
++software on general-purpose computers, but in those that do, we wish to
++avoid the special danger that patents applied to a free program could
++make it effectively proprietary. To prevent this, the GPL assures that
++patents cannot be used to render the program non-free.
++
++ The precise terms and conditions for copying, distribution and
++modification follow.
++
++ TERMS AND CONDITIONS
++
++ 0. Definitions.
++
++ "This License" refers to version 3 of the GNU General Public License.
++
++ "Copyright" also means copyright-like laws that apply to other kinds of
++works, such as semiconductor masks.
++
++ "The Program" refers to any copyrightable work licensed under this
++License. Each licensee is addressed as "you". "Licensees" and
++"recipients" may be individuals or organizations.
++
++ To "modify" a work means to copy from or adapt all or part of the work
++in a fashion requiring copyright permission, other than the making of an
++exact copy. The resulting work is called a "modified version" of the
++earlier work or a work "based on" the earlier work.
++
++ A "covered work" means either the unmodified Program or a work based
++on the Program.
++
++ To "propagate" a work means to do anything with it that, without
++permission, would make you directly or secondarily liable for
++infringement under applicable copyright law, except executing it on a
++computer or modifying a private copy. Propagation includes copying,
++distribution (with or without modification), making available to the
++public, and in some countries other activities as well.
++
++ To "convey" a work means any kind of propagation that enables other
++parties to make or receive copies. Mere interaction with a user through
++a computer network, with no transfer of a copy, is not conveying.
++
++ An interactive user interface displays "Appropriate Legal Notices"
++to the extent that it includes a convenient and prominently visible
++feature that (1) displays an appropriate copyright notice, and (2)
++tells the user that there is no warranty for the work (except to the
++extent that warranties are provided), that licensees may convey the
++work under this License, and how to view a copy of this License. If
++the interface presents a list of user commands or options, such as a
++menu, a prominent item in the list meets this criterion.
++
++ 1. Source Code.
++
++ The "source code" for a work means the preferred form of the work
++for making modifications to it. "Object code" means any non-source
++form of a work.
++
++ A "Standard Interface" means an interface that either is an official
++standard defined by a recognized standards body, or, in the case of
++interfaces specified for a particular programming language, one that
++is widely used among developers working in that language.
++
++ The "System Libraries" of an executable work include anything, other
++than the work as a whole, that (a) is included in the normal form of
++packaging a Major Component, but which is not part of that Major
++Component, and (b) serves only to enable use of the work with that
++Major Component, or to implement a Standard Interface for which an
++implementation is available to the public in source code form. A
++"Major Component", in this context, means a major essential component
++(kernel, window system, and so on) of the specific operating system
++(if any) on which the executable work runs, or a compiler used to
++produce the work, or an object code interpreter used to run it.
++
++ The "Corresponding Source" for a work in object code form means all
++the source code needed to generate, install, and (for an executable
++work) run the object code and to modify the work, including scripts to
++control those activities. However, it does not include the work's
++System Libraries, or general-purpose tools or generally available free
++programs which are used unmodified in performing those activities but
++which are not part of the work. For example, Corresponding Source
++includes interface definition files associated with source files for
++the work, and the source code for shared libraries and dynamically
++linked subprograms that the work is specifically designed to require,
++such as by intimate data communication or control flow between those
++subprograms and other parts of the work.
++
++ The Corresponding Source need not include anything that users
++can regenerate automatically from other parts of the Corresponding
++Source.
++
++ The Corresponding Source for a work in source code form is that
++same work.
++
++ 2. Basic Permissions.
++
++ All rights granted under this License are granted for the term of
++copyright on the Program, and are irrevocable provided the stated
++conditions are met. This License explicitly affirms your unlimited
++permission to run the unmodified Program. The output from running a
++covered work is covered by this License only if the output, given its
++content, constitutes a covered work. This License acknowledges your
++rights of fair use or other equivalent, as provided by copyright law.
++
++ You may make, run and propagate covered works that you do not
++convey, without conditions so long as your license otherwise remains
++in force. You may convey covered works to others for the sole purpose
++of having them make modifications exclusively for you, or provide you
++with facilities for running those works, provided that you comply with
++the terms of this License in conveying all material for which you do
++not control copyright. Those thus making or running the covered works
++for you must do so exclusively on your behalf, under your direction
++and control, on terms that prohibit them from making any copies of
++your copyrighted material outside their relationship with you.
++
++ Conveying under any other circumstances is permitted solely under
++the conditions stated below. Sublicensing is not allowed; section 10
++makes it unnecessary.
++
++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
++
++ No covered work shall be deemed part of an effective technological
++measure under any applicable law fulfilling obligations under article
++11 of the WIPO copyright treaty adopted on 20 December 1996, or
++similar laws prohibiting or restricting circumvention of such
++measures.
++
++ When you convey a covered work, you waive any legal power to forbid
++circumvention of technological measures to the extent such circumvention
++is effected by exercising rights under this License with respect to
++the covered work, and you disclaim any intention to limit operation or
++modification of the work as a means of enforcing, against the work's
++users, your or third parties' legal rights to forbid circumvention of
++technological measures.
++
++ 4. Conveying Verbatim Copies.
++
++ You may convey verbatim copies of the Program's source code as you
++receive it, in any medium, provided that you conspicuously and
++appropriately publish on each copy an appropriate copyright notice;
++keep intact all notices stating that this License and any
++non-permissive terms added in accord with section 7 apply to the code;
++keep intact all notices of the absence of any warranty; and give all
++recipients a copy of this License along with the Program.
++
++ You may charge any price or no price for each copy that you convey,
++and you may offer support or warranty protection for a fee.
++
++ 5. Conveying Modified Source Versions.
++
++ You may convey a work based on the Program, or the modifications to
++produce it from the Program, in the form of source code under the
++terms of section 4, provided that you also meet all of these conditions:
++
++ a) The work must carry prominent notices stating that you modified
++ it, and giving a relevant date.
++
++ b) The work must carry prominent notices stating that it is
++ released under this License and any conditions added under section
++ 7. This requirement modifies the requirement in section 4 to
++ "keep intact all notices".
++
++ c) You must license the entire work, as a whole, under this
++ License to anyone who comes into possession of a copy. This
++ License will therefore apply, along with any applicable section 7
++ additional terms, to the whole of the work, and all its parts,
++ regardless of how they are packaged. This License gives no
++ permission to license the work in any other way, but it does not
++ invalidate such permission if you have separately received it.
++
++ d) If the work has interactive user interfaces, each must display
++ Appropriate Legal Notices; however, if the Program has interactive
++ interfaces that do not display Appropriate Legal Notices, your
++ work need not make them do so.
++
++ A compilation of a covered work with other separate and independent
++works, which are not by their nature extensions of the covered work,
++and which are not combined with it such as to form a larger program,
++in or on a volume of a storage or distribution medium, is called an
++"aggregate" if the compilation and its resulting copyright are not
++used to limit the access or legal rights of the compilation's users
++beyond what the individual works permit. Inclusion of a covered work
++in an aggregate does not cause this License to apply to the other
++parts of the aggregate.
++
++ 6. Conveying Non-Source Forms.
++
++ You may convey a covered work in object code form under the terms
++of sections 4 and 5, provided that you also convey the
++machine-readable Corresponding Source under the terms of this License,
++in one of these ways:
++
++ a) Convey the object code in, or embodied in, a physical product
++ (including a physical distribution medium), accompanied by the
++ Corresponding Source fixed on a durable physical medium
++ customarily used for software interchange.
++
++ b) Convey the object code in, or embodied in, a physical product
++ (including a physical distribution medium), accompanied by a
++ written offer, valid for at least three years and valid for as
++ long as you offer spare parts or customer support for that product
++ model, to give anyone who possesses the object code either (1) a
++ copy of the Corresponding Source for all the software in the
++ product that is covered by this License, on a durable physical
++ medium customarily used for software interchange, for a price no
++ more than your reasonable cost of physically performing this
++ conveying of source, or (2) access to copy the
++ Corresponding Source from a network server at no charge.
++
++ c) Convey individual copies of the object code with a copy of the
++ written offer to provide the Corresponding Source. This
++ alternative is allowed only occasionally and noncommercially, and
++ only if you received the object code with such an offer, in accord
++ with subsection 6b.
++
++ d) Convey the object code by offering access from a designated
++ place (gratis or for a charge), and offer equivalent access to the
++ Corresponding Source in the same way through the same place at no
++ further charge. You need not require recipients to copy the
++ Corresponding Source along with the object code. If the place to
++ copy the object code is a network server, the Corresponding Source
++ may be on a different server (operated by you or a third party)
++ that supports equivalent copying facilities, provided you maintain
++ clear directions next to the object code saying where to find the
++ Corresponding Source. Regardless of what server hosts the
++ Corresponding Source, you remain obligated to ensure that it is
++ available for as long as needed to satisfy these requirements.
++
++ e) Convey the object code using peer-to-peer transmission, provided
++ you inform other peers where the object code and Corresponding
++ Source of the work are being offered to the general public at no
++ charge under subsection 6d.
++
++ A separable portion of the object code, whose source code is excluded
++from the Corresponding Source as a System Library, need not be
++included in conveying the object code work.
++
++ A "User Product" is either (1) a "consumer product", which means any
++tangible personal property which is normally used for personal, family,
++or household purposes, or (2) anything designed or sold for incorporation
++into a dwelling. In determining whether a product is a consumer product,
++doubtful cases shall be resolved in favor of coverage. For a particular
++product received by a particular user, "normally used" refers to a
++typical or common use of that class of product, regardless of the status
++of the particular user or of the way in which the particular user
++actually uses, or expects or is expected to use, the product. A product
++is a consumer product regardless of whether the product has substantial
++commercial, industrial or non-consumer uses, unless such uses represent
++the only significant mode of use of the product.
++
++ "Installation Information" for a User Product means any methods,
++procedures, authorization keys, or other information required to install
++and execute modified versions of a covered work in that User Product from
++a modified version of its Corresponding Source. The information must
++suffice to ensure that the continued functioning of the modified object
++code is in no case prevented or interfered with solely because
++modification has been made.
++
++ If you convey an object code work under this section in, or with, or
++specifically for use in, a User Product, and the conveying occurs as
++part of a transaction in which the right of possession and use of the
++User Product is transferred to the recipient in perpetuity or for a
++fixed term (regardless of how the transaction is characterized), the
++Corresponding Source conveyed under this section must be accompanied
++by the Installation Information. But this requirement does not apply
++if neither you nor any third party retains the ability to install
++modified object code on the User Product (for example, the work has
++been installed in ROM).
++
++ The requirement to provide Installation Information does not include a
++requirement to continue to provide support service, warranty, or updates
++for a work that has been modified or installed by the recipient, or for
++the User Product in which it has been modified or installed. Access to a
++network may be denied when the modification itself materially and
++adversely affects the operation of the network or violates the rules and
++protocols for communication across the network.
++
++ Corresponding Source conveyed, and Installation Information provided,
++in accord with this section must be in a format that is publicly
++documented (and with an implementation available to the public in
++source code form), and must require no special password or key for
++unpacking, reading or copying.
++
++ 7. Additional Terms.
++
++ "Additional permissions" are terms that supplement the terms of this
++License by making exceptions from one or more of its conditions.
++Additional permissions that are applicable to the entire Program shall
++be treated as though they were included in this License, to the extent
++that they are valid under applicable law. If additional permissions
++apply only to part of the Program, that part may be used separately
++under those permissions, but the entire Program remains governed by
++this License without regard to the additional permissions.
++
++ When you convey a copy of a covered work, you may at your option
++remove any additional permissions from that copy, or from any part of
++it. (Additional permissions may be written to require their own
++removal in certain cases when you modify the work.) You may place
++additional permissions on material, added by you to a covered work,
++for which you have or can give appropriate copyright permission.
++
++ Notwithstanding any other provision of this License, for material you
++add to a covered work, you may (if authorized by the copyright holders of
++that material) supplement the terms of this License with terms:
++
++ a) Disclaiming warranty or limiting liability differently from the
++ terms of sections 15 and 16 of this License; or
++
++ b) Requiring preservation of specified reasonable legal notices or
++ author attributions in that material or in the Appropriate Legal
++ Notices displayed by works containing it; or
++
++ c) Prohibiting misrepresentation of the origin of that material, or
++ requiring that modified versions of such material be marked in
++ reasonable ways as different from the original version; or
++
++ d) Limiting the use for publicity purposes of names of licensors or
++ authors of the material; or
++
++ e) Declining to grant rights under trademark law for use of some
++ trade names, trademarks, or service marks; or
++
++ f) Requiring indemnification of licensors and authors of that
++ material by anyone who conveys the material (or modified versions of
++ it) with contractual assumptions of liability to the recipient, for
++ any liability that these contractual assumptions directly impose on
++ those licensors and authors.
++
++ All other non-permissive additional terms are considered "further
++restrictions" within the meaning of section 10. If the Program as you
++received it, or any part of it, contains a notice stating that it is
++governed by this License along with a term that is a further
++restriction, you may remove that term. If a license document contains
++a further restriction but permits relicensing or conveying under this
++License, you may add to a covered work material governed by the terms
++of that license document, provided that the further restriction does
++not survive such relicensing or conveying.
++
++ If you add terms to a covered work in accord with this section, you
++must place, in the relevant source files, a statement of the
++additional terms that apply to those files, or a notice indicating
++where to find the applicable terms.
++
++ Additional terms, permissive or non-permissive, may be stated in the
++form of a separately written license, or stated as exceptions;
++the above requirements apply either way.
++
++ 8. Termination.
++
++ You may not propagate or modify a covered work except as expressly
++provided under this License. Any attempt otherwise to propagate or
++modify it is void, and will automatically terminate your rights under
++this License (including any patent licenses granted under the third
++paragraph of section 11).
++
++ However, if you cease all violation of this License, then your
++license from a particular copyright holder is reinstated (a)
++provisionally, unless and until the copyright holder explicitly and
++finally terminates your license, and (b) permanently, if the copyright
++holder fails to notify you of the violation by some reasonable means
++prior to 60 days after the cessation.
++
++ Moreover, your license from a particular copyright holder is
++reinstated permanently if the copyright holder notifies you of the
++violation by some reasonable means, this is the first time you have
++received notice of violation of this License (for any work) from that
++copyright holder, and you cure the violation prior to 30 days after
++your receipt of the notice.
++
++ Termination of your rights under this section does not terminate the
++licenses of parties who have received copies or rights from you under
++this License. If your rights have been terminated and not permanently
++reinstated, you do not qualify to receive new licenses for the same
++material under section 10.
++
++ 9. Acceptance Not Required for Having Copies.
++
++ You are not required to accept this License in order to receive or
++run a copy of the Program. Ancillary propagation of a covered work
++occurring solely as a consequence of using peer-to-peer transmission
++to receive a copy likewise does not require acceptance. However,
++nothing other than this License grants you permission to propagate or
++modify any covered work. These actions infringe copyright if you do
++not accept this License. Therefore, by modifying or propagating a
++covered work, you indicate your acceptance of this License to do so.
++
++ 10. Automatic Licensing of Downstream Recipients.
++
++ Each time you convey a covered work, the recipient automatically
++receives a license from the original licensors, to run, modify and
++propagate that work, subject to this License. You are not responsible
++for enforcing compliance by third parties with this License.
++
++ An "entity transaction" is a transaction transferring control of an
++organization, or substantially all assets of one, or subdividing an
++organization, or merging organizations. If propagation of a covered
++work results from an entity transaction, each party to that
++transaction who receives a copy of the work also receives whatever
++licenses to the work the party's predecessor in interest had or could
++give under the previous paragraph, plus a right to possession of the
++Corresponding Source of the work from the predecessor in interest, if
++the predecessor has it or can get it with reasonable efforts.
++
++ You may not impose any further restrictions on the exercise of the
++rights granted or affirmed under this License. For example, you may
++not impose a license fee, royalty, or other charge for exercise of
++rights granted under this License, and you may not initiate litigation
++(including a cross-claim or counterclaim in a lawsuit) alleging that
++any patent claim is infringed by making, using, selling, offering for
++sale, or importing the Program or any portion of it.
++
++ 11. Patents.
++
++ A "contributor" is a copyright holder who authorizes use under this
++License of the Program or a work on which the Program is based. The
++work thus licensed is called the contributor's "contributor version".
++
++ A contributor's "essential patent claims" are all patent claims
++owned or controlled by the contributor, whether already acquired or
++hereafter acquired, that would be infringed by some manner, permitted
++by this License, of making, using, or selling its contributor version,
++but do not include claims that would be infringed only as a
++consequence of further modification of the contributor version. For
++purposes of this definition, "control" includes the right to grant
++patent sublicenses in a manner consistent with the requirements of
++this License.
++
++ Each contributor grants you a non-exclusive, worldwide, royalty-free
++patent license under the contributor's essential patent claims, to
++make, use, sell, offer for sale, import and otherwise run, modify and
++propagate the contents of its contributor version.
++
++ In the following three paragraphs, a "patent license" is any express
++agreement or commitment, however denominated, not to enforce a patent
++(such as an express permission to practice a patent or covenant not to
++sue for patent infringement). To "grant" such a patent license to a
++party means to make such an agreement or commitment not to enforce a
++patent against the party.
++
++ If you convey a covered work, knowingly relying on a patent license,
++and the Corresponding Source of the work is not available for anyone
++to copy, free of charge and under the terms of this License, through a
++publicly available network server or other readily accessible means,
++then you must either (1) cause the Corresponding Source to be so
++available, or (2) arrange to deprive yourself of the benefit of the
++patent license for this particular work, or (3) arrange, in a manner
++consistent with the requirements of this License, to extend the patent
++license to downstream recipients. "Knowingly relying" means you have
++actual knowledge that, but for the patent license, your conveying the
++covered work in a country, or your recipient's use of the covered work
++in a country, would infringe one or more identifiable patents in that
++country that you have reason to believe are valid.
++
++ If, pursuant to or in connection with a single transaction or
++arrangement, you convey, or propagate by procuring conveyance of, a
++covered work, and grant a patent license to some of the parties
++receiving the covered work authorizing them to use, propagate, modify
++or convey a specific copy of the covered work, then the patent license
++you grant is automatically extended to all recipients of the covered
++work and works based on it.
++
++ A patent license is "discriminatory" if it does not include within
++the scope of its coverage, prohibits the exercise of, or is
++conditioned on the non-exercise of one or more of the rights that are
++specifically granted under this License. You may not convey a covered
++work if you are a party to an arrangement with a third party that is
++in the business of distributing software, under which you make payment
++to the third party based on the extent of your activity of conveying
++the work, and under which the third party grants, to any of the
++parties who would receive the covered work from you, a discriminatory
++patent license (a) in connection with copies of the covered work
++conveyed by you (or copies made from those copies), or (b) primarily
++for and in connection with specific products or compilations that
++contain the covered work, unless you entered into that arrangement,
++or that patent license was granted, prior to 28 March 2007.
++
++ Nothing in this License shall be construed as excluding or limiting
++any implied license or other defenses to infringement that may
++otherwise be available to you under applicable patent law.
++
++ 12. No Surrender of Others' Freedom.
++
++ If conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License. If you cannot convey a
++covered work so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you may
++not convey it at all. For example, if you agree to terms that obligate you
++to collect a royalty for further conveying from those to whom you convey
++the Program, the only way you could satisfy both those terms and this
++License would be to refrain entirely from conveying the Program.
++
++ 13. Use with the GNU Affero General Public License.
++
++ Notwithstanding any other provision of this License, you have
++permission to link or combine any covered work with a work licensed
++under version 3 of the GNU Affero General Public License into a single
++combined work, and to convey the resulting work. The terms of this
++License will continue to apply to the part which is the covered work,
++but the special requirements of the GNU Affero General Public License,
++section 13, concerning interaction through a network will apply to the
++combination as such.
++
++ 14. Revised Versions of this License.
++
++ The Free Software Foundation may publish revised and/or new versions of
++the GNU General Public License from time to time. Such new versions will
++be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++ Each version is given a distinguishing version number. If the
++Program specifies that a certain numbered version of the GNU General
++Public License "or any later version" applies to it, you have the
++option of following the terms and conditions either of that numbered
++version or of any later version published by the Free Software
++Foundation. If the Program does not specify a version number of the
++GNU General Public License, you may choose any version ever published
++by the Free Software Foundation.
++
++ If the Program specifies that a proxy can decide which future
++versions of the GNU General Public License can be used, that proxy's
++public statement of acceptance of a version permanently authorizes you
++to choose that version for the Program.
++
++ Later license versions may give you additional or different
++permissions. However, no additional obligations are imposed on any
++author or copyright holder as a result of your choosing to follow a
++later version.
++
++ 15. Disclaimer of Warranty.
++
++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
++APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
++HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
++OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
++THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
++IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
++ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
++
++ 16. Limitation of Liability.
++
++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
++THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
++GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
++USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
++DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
++PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
++EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
++SUCH DAMAGES.
++
++ 17. Interpretation of Sections 15 and 16.
++
++ If the disclaimer of warranty and limitation of liability provided
++above cannot be given local legal effect according to their terms,
++reviewing courts shall apply local law that most closely approximates
++an absolute waiver of all civil liability in connection with the
++Program, unless a warranty or assumption of liability accompanies a
++copy of the Program in return for a fee.
++
++ END OF TERMS AND CONDITIONS
++
++ How to Apply These Terms to Your New Programs
++
++ If you develop a new program, and you want it to be of the greatest
++possible use to the public, the best way to achieve this is to make it
++free software which everyone can redistribute and change under these terms.
++
++ To do so, attach the following notices to the program. It is safest
++to attach them to the start of each source file to most effectively
++state the exclusion of warranty; and each file should have at least
++the "copyright" line and a pointer to where the full notice is found.
++
++ <one line to give the program's name and a brief idea of what it does.>
++ Copyright (C) <year> <name of author>
++
++ 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 3 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 <http://www.gnu.org/licenses/>.
++
++Also add information on how to contact you by electronic and paper mail.
++
++ If the program does terminal interaction, make it output a short
++notice like this when it starts in an interactive mode:
++
++ <program> Copyright (C) <year> <name of author>
++ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
++ This is free software, and you are welcome to redistribute it
++ under certain conditions; type `show c' for details.
++
++The hypothetical commands `show w' and `show c' should show the appropriate
++parts of the General Public License. Of course, your program's commands
++might be different; for a GUI interface, you would use an "about box".
++
++ You should also get your employer (if you work as a programmer) or school,
++if any, to sign a "copyright disclaimer" for the program, if necessary.
++For more information on this, and how to apply and follow the GNU GPL, see
++<http://www.gnu.org/licenses/>.
++
++ The GNU General Public License does not permit incorporating your program
++into proprietary programs. If your program is a subroutine library, you
++may consider it more useful to permit linking proprietary applications with
++the library. If this is what you want to do, use the GNU Lesser General
++Public License instead of this License. But first, please read
++<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+Index: libdessert0.86-0.86.14/ChangeLog
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/ChangeLog 2009-12-09 16:38:27.215595120 +0100
+@@ -0,0 +1,7 @@
++20091126 - 0.86.13
++ - The sysrxpipeline now properly destroys the passed message on DESSERT_MSG_DROP.
++ Developers, make sure to NOT destroy the msg by yourselves anymore!
++
++20091126 - 0.86.12
++ - Added int dessert_msg_getpayload(dessert_msg_t *msg, void **payload) to
++ retrieve the length of the payload and a pointer to the payload, if any.
+\ No newline at end of file
+Index: libdessert0.86-0.86.14/DES-SERT.doxyfile
+===================================================================
+--- libdessert0.86-0.86.14.orig/DES-SERT.doxyfile 2009-11-26 18:56:56.000000000 +0100
++++ libdessert0.86-0.86.14/DES-SERT.doxyfile 2009-12-09 16:38:27.215595120 +0100
+@@ -568,7 +568,7 @@
+ # directories like "/usr/src/myproject". Separate the files or directories
+ # with spaces.
+
+-INPUT = .
++INPUT = include/dessert src/libdessert
+
+ # This tag can be used to specify the character encoding of the source files
+ # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+Index: libdessert0.86-0.86.14/INSTALL
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/INSTALL 2009-12-09 16:38:27.215595120 +0100
+@@ -0,0 +1,302 @@
++Installation Instructions
++*************************
++
++Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
++2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++
++ This file is free documentation; the Free Software Foundation gives
++unlimited permission to copy, distribute and modify it.
++
++Basic Installation
++==================
++
++ Briefly, the shell commands `./configure; make; make install' should
++configure, build, and install this package. The following
++more-detailed instructions are generic; see the `README' file for
++instructions specific to this package.
++
++ The `configure' shell script attempts to guess correct values for
++various system-dependent variables used during compilation. It uses
++those values to create a `Makefile' in each directory of the package.
++It may also create one or more `.h' files containing system-dependent
++definitions. Finally, it creates a shell script `config.status' that
++you can run in the future to recreate the current configuration, and a
++file `config.log' containing compiler output (useful mainly for
++debugging `configure').
++
++ It can also use an optional file (typically called `config.cache'
++and enabled with `--cache-file=config.cache' or simply `-C') that saves
++the results of its tests to speed up reconfiguring. Caching is
++disabled by default to prevent problems with accidental use of stale
++cache files.
++
++ If you need to do unusual things to compile the package, please try
++to figure out how `configure' could check whether to do them, and mail
++diffs or instructions to the address given in the `README' so they can
++be considered for the next release. If you are using the cache, and at
++some point `config.cache' contains results you don't want to keep, you
++may remove or edit it.
++
++ The file `configure.ac' (or `configure.in') is used to create
++`configure' by a program called `autoconf'. You need `configure.ac' if
++you want to change it or regenerate `configure' using a newer version
++of `autoconf'.
++
++The simplest way to compile this package is:
++
++ 1. `cd' to the directory containing the package's source code and type
++ `./configure' to configure the package for your system.
++
++ Running `configure' might take a while. While running, it prints
++ some messages telling which features it is checking for.
++
++ 2. Type `make' to compile the package.
++
++ 3. Optionally, type `make check' to run any self-tests that come with
++ the package.
++
++ 4. Type `make install' to install the programs and any data files and
++ documentation.
++
++ 5. You can remove the program binaries and object files from the
++ source code directory by typing `make clean'. To also remove the
++ files that `configure' created (so you can compile the package for
++ a different kind of computer), type `make distclean'. There is
++ also a `make maintainer-clean' target, but that is intended mainly
++ for the package's developers. If you use it, you may have to get
++ all sorts of other programs in order to regenerate files that came
++ with the distribution.
++
++ 6. Often, you can also type `make uninstall' to remove the installed
++ files again.
++
++Compilers and Options
++=====================
++
++ Some systems require unusual options for compilation or linking that
++the `configure' script does not know about. Run `./configure --help'
++for details on some of the pertinent environment variables.
++
++ You can give `configure' initial values for configuration parameters
++by setting variables in the command line or in the environment. Here
++is an example:
++
++ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
++
++ *Note Defining Variables::, for more details.
++
++Compiling For Multiple Architectures
++====================================
++
++ You can compile the package for more than one kind of computer at the
++same time, by placing the object files for each architecture in their
++own directory. To do this, you can use GNU `make'. `cd' to the
++directory where you want the object files and executables to go and run
++the `configure' script. `configure' automatically checks for the
++source code in the directory that `configure' is in and in `..'.
++
++ With a non-GNU `make', it is safer to compile the package for one
++architecture at a time in the source code directory. After you have
++installed the package for one architecture, use `make distclean' before
++reconfiguring for another architecture.
++
++ On MacOS X 10.5 and later systems, you can create libraries and
++executables that work on multiple system types--known as "fat" or
++"universal" binaries--by specifying multiple `-arch' options to the
++compiler but only a single `-arch' option to the preprocessor. Like
++this:
++
++ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
++ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
++ CPP="gcc -E" CXXCPP="g++ -E"
++
++ This is not guaranteed to produce working output in all cases, you
++may have to build one architecture at a time and combine the results
++using the `lipo' tool if you have problems.
++
++Installation Names
++==================
++
++ By default, `make install' installs the package's commands under
++`/usr/local/bin', include files under `/usr/local/include', etc. You
++can specify an installation prefix other than `/usr/local' by giving
++`configure' the option `--prefix=PREFIX'.
++
++ You can specify separate installation prefixes for
++architecture-specific files and architecture-independent files. If you
++pass the option `--exec-prefix=PREFIX' to `configure', the package uses
++PREFIX as the prefix for installing programs and libraries.
++Documentation and other data files still use the regular prefix.
++
++ In addition, if you use an unusual directory layout you can give
++options like `--bindir=DIR' to specify different values for particular
++kinds of files. Run `configure --help' for a list of the directories
++you can set and what kinds of files go in them.
++
++ If the package supports it, you can cause programs to be installed
++with an extra prefix or suffix on their names by giving `configure' the
++option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
++
++Optional Features
++=================
++
++ Some packages pay attention to `--enable-FEATURE' options to
++`configure', where FEATURE indicates an optional part of the package.
++They may also pay attention to `--with-PACKAGE' options, where PACKAGE
++is something like `gnu-as' or `x' (for the X Window System). The
++`README' should mention any `--enable-' and `--with-' options that the
++package recognizes.
++
++ For packages that use the X Window System, `configure' can usually
++find the X include and library files automatically, but if it doesn't,
++you can use the `configure' options `--x-includes=DIR' and
++`--x-libraries=DIR' to specify their locations.
++
++Particular systems
++==================
++
++ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
++CC is not installed, it is recommended to use the following options in
++order to use an ANSI C compiler:
++
++ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
++
++and if that doesn't work, install pre-built binaries of GCC for HP-UX.
++
++ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
++parse its `<wchar.h>' header file. The option `-nodtk' can be used as
++a workaround. If GNU CC is not installed, it is therefore recommended
++to try
++
++ ./configure CC="cc"
++
++and if that doesn't work, try
++
++ ./configure CC="cc -nodtk"
++
++ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
++directory contains several dysfunctional programs; working variants of
++these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
++in your `PATH', put it _after_ `/usr/bin'.
++
++ On Haiku, software installed for all users goes in `/boot/common',
++not `/usr/local'. It is recommended to use the following options:
++
++ ./configure --prefix=/boot/common
++
++Specifying the System Type
++==========================
++
++ There may be some features `configure' cannot figure out
++automatically, but needs to determine by the type of machine the package
++will run on. Usually, assuming the package is built to be run on the
++_same_ architectures, `configure' can figure that out, but if it prints
++a message saying it cannot guess the machine type, give it the
++`--build=TYPE' option. TYPE can either be a short name for the system
++type, such as `sun4', or a canonical name which has the form:
++
++ CPU-COMPANY-SYSTEM
++
++where SYSTEM can have one of these forms:
++
++ OS
++ KERNEL-OS
++
++ See the file `config.sub' for the possible values of each field. If
++`config.sub' isn't included in this package, then this package doesn't
++need to know the machine type.
++
++ If you are _building_ compiler tools for cross-compiling, you should
++use the option `--target=TYPE' to select the type of system they will
++produce code for.
++
++ If you want to _use_ a cross compiler, that generates code for a
++platform different from the build platform, you should specify the
++"host" platform (i.e., that on which the generated programs will
++eventually be run) with `--host=TYPE'.
++
++Sharing Defaults
++================
++
++ If you want to set default values for `configure' scripts to share,
++you can create a site shell script called `config.site' that gives
++default values for variables like `CC', `cache_file', and `prefix'.
++`configure' looks for `PREFIX/share/config.site' if it exists, then
++`PREFIX/etc/config.site' if it exists. Or, you can set the
++`CONFIG_SITE' environment variable to the location of the site script.
++A warning: not all `configure' scripts look for a site script.
++
++Defining Variables
++==================
++
++ Variables not defined in a site shell script can be set in the
++environment passed to `configure'. However, some packages may run
++configure again during the build, and the customized values of these
++variables may be lost. In order to avoid this problem, you should set
++them in the `configure' command line, using `VAR=value'. For example:
++
++ ./configure CC=/usr/local2/bin/gcc
++
++causes the specified `gcc' to be used as the C compiler (unless it is
++overridden in the site shell script).
++
++Unfortunately, this technique does not work for `CONFIG_SHELL' due to
++an Autoconf bug. Until the bug is fixed you can use this workaround:
++
++ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
++
++`configure' Invocation
++======================
++
++ `configure' recognizes the following options to control how it
++operates.
++
++`--help'
++`-h'
++ Print a summary of all of the options to `configure', and exit.
++
++`--help=short'
++`--help=recursive'
++ Print a summary of the options unique to this package's
++ `configure', and exit. The `short' variant lists options used
++ only in the top level, while the `recursive' variant lists options
++ also present in any nested packages.
++
++`--version'
++`-V'
++ Print the version of Autoconf used to generate the `configure'
++ script, and exit.
++
++`--cache-file=FILE'
++ Enable the cache: use and save the results of the tests in FILE,
++ traditionally `config.cache'. FILE defaults to `/dev/null' to
++ disable caching.
++
++`--config-cache'
++`-C'
++ Alias for `--cache-file=config.cache'.
++
++`--quiet'
++`--silent'
++`-q'
++ Do not print messages saying which checks are being made. To
++ suppress all normal output, redirect it to `/dev/null' (any error
++ messages will still be shown).
++
++`--srcdir=DIR'
++ Look for the package's source code in directory DIR. Usually
++ `configure' can determine that directory automatically.
++
++`--prefix=DIR'
++ Use DIR as the installation prefix. *Note Installation Names::
++ for more details, including other options available for fine-tuning
++ the installation locations.
++
++`--no-create'
++`-n'
++ Run the configure checks, but stop before creating any output
++ files.
++
++`configure' also accepts some other, not widely useful, options. Run
++`configure --help' for more details.
++
+Index: libdessert0.86-0.86.14/Intro.txt
+===================================================================
+--- libdessert0.86-0.86.14.orig/Intro.txt 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,270 +0,0 @@
+-
+- DES-SERT - an Extensible Routing-Framework for Testbeds
+-
+-
+-Copyright
+-
+- Copyright Philipp Schmidt <phils@inf.fu-berlin.de>,
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group,
+- Freie Universitaet Berlin
+-
+- This document has been published under GNU Free Documentation License.
+- All rights reserved.
+-
+-
+-1. Introduction
+-
+- DES-SERT, the DES Simple and Extensible Routing-Framework for Testbeds,
+- is a framework designed to assist researchers implementing routing
+- protocols for testbeds.
+-
+- DES-SERT enables the implementation of routing protocols on top of
+- Ethernet via an underlay (Layer 2.5) in user space.
+- It introduces an abstraction from OS specific issues and provides
+- functionality and data structures to implement proactive, reactive,
+- and hybrid routing protocols.
+-
+- While generally usable in many application scenarios, it is primarily
+- used in DES-Mesh (http://www.des-testbed.net/), the multi-transceiver
+- wireless mesh network testbed part of the DES-Testbed.
+-
+-
+-2. DES-SERT Architecture
+-
+- DES-SERT introduces some concepts to implement routing protocols.
+- When implementing a routing protocol with DES-SERT, you should be
+- familiar with these concepts to structure and tailor your implementation.
+-
+-
+-2.1. messages
+-
+- Every packet you send or receive on the mesh is represented as a
+- DES-SERT message. From a programmers point of view, a DES-SERT message
+- is just a C-structure:
+-
+- typedef struct dessert_msg {
+- /** the layer2 header on the wire */
+- struct ether_header l2h;
+- /** short name of the protocol as passed to dessert_init() */
+- char proto[DESSERT_PROTO_STRLEN];
+- /** version of the app as passed to dessert_init() */
+- uint8_t ver;
+- /** flags - bits 1-4 reserved for dessert, bits 5-8 for app usage */
+- uint8_t flags;
+- /** ttl or hopcount field for app usage - 0xff if not used*/
+- uint8_t ttl;
+- /** reserved for app usage - 0x00 if not used */
+- uint8_t u8;
+- /** reserved for app usage - 0xbeef if not used */
+- uint16_t u16;
+- /** header length incl. extensions */
+- uint16_t hlen;
+- /** payload length */
+- uint16_t plen;
+- } dessert_msg_t;
+-
+- Every message sent via the underlay carries this structure as a packet
+- header. All data in a "dessert_msg" is stored in network byte order.
+- DES-SERT tries to care as automatically as possible of this structure.
+- Nevertheless you will have to care at least about: "l2h.ether_dhost" and
+- "ttl".
+-
+- If you need to send some data along with every packet, e.g. some kind of
+- metric or cost your routing protocol uses, you should try to fit this
+- data into the "u8", "u16" and the upper 4 bits of the "flags" field.
+- These fields will never be touched by DES-SERT except on initialization
+- via "dessert_msg_new".
+-
+- Because just a C-structure is not really usable as a packet, there are some
+- utility functions around - please have a look around in "dessert.h" and the
+- doxygen doku. The most important ones are: "dessert_msg_new" and
+- "dessert_msg_destroy", which do not simply allocate memory for a DES-SERT
+- message, but for a whole packet of maximum size and initialize the
+- structures for further packet construction/processing.
+-
+- int dessert_msg_new(dessert_msg_t **msgout);
+-
+- void dessert_msg_destroy(dessert_msg_t* msg);
+-
+-
+-2.1.2 DES-SERT extensions
+-
+- A DES-SERT extension is some structure used to piggyback data on a
+- DES-SERT message. It consists of a 8-bit user supplied type field (with
+- some reserved values), an 8-bit length field and user supplied data of
+- arbitrary length of 253 bytes at most.
+-
+- It can be added to a message via "dessert_msg_addext", retrieved via
+- "dessert_msg_getext" and removed via "dessert_msg_delext".
+-
+- int dessert_msg_addext(dessert_msg_t* msg,
+- dessert_ext_t** ext, uint8_t type, size_t len);
+-
+- int dessert_msg_getext(const dessert_msg_t* msg,
+- dessert_ext_t** ext, uint8_t type, int index);
+-
+- int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
+-
+- It is recommended not to put single data fields in extensions, but
+- combine semantically related data in a struct and attach this struct
+- as an extension because every extension carried introduces an 16-bit
+- overhead to the packet.
+-
+-
+-2.2. Processing pipelines
+-
+- Routing algorithms are often split up in several parts like packet
+- validation, loop-detection or routing table lookup.
+- To implement these as independent and clear as possible, DES-SERT enables
+- you to split up your packet processing in as many parts as you like.
+-
+- There are two separate processing pipelines - one for packets received
+- from the kernel via a TUN or TAP interface and one for packets received
+- via an interface used on the mesh network.
+-
+- You can register callbacks to be added to one of these pipelines with
+- "dessert_sysrxcb_add" or "dessert_meshrxcb_add". Both take an additional
+- integer argument ("priority") specifying the order the callbacks should
+- be called. Higher "priority" value results in being called later
+- within the pipeline.
+-
+- int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
+-
+- int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
+-
+- If a callback returns "DESSERT_MSG_KEEP" the packed will be processed by
+- further callbacks, if it returns "DESSERT_MSG_DROP" the message will be
+- dropped and no further callbacks will be called.
+-
+- You do not need to care about the management of the buffers for incoming
+- messages - DES-SERT does this for you. Nevertheless if you need to add
+- extensions or enlarge the payload of a message, you need to tell DES-SERT
+- to enlarge the buffer for you if the flag "DESSERT_FLAG_SPARSE" is set on
+- the message. You can do this by returning "DESSERT_MSG_NEEDNOSPARSE" from
+- within a callback. The callback will be called again with a larger buffer
+- and no "DESSERT_FLAG_SPARSE" flag being set.
+-
+-
+-2.2.1. Processing buffer
+-
+- If you need to pass information along several callbacks, you can do this
+- in the processing buffer passed to the the callbacks. This buffer contains
+- some local processing flags ("lflags") set by the builtin callback
+- "dessert_msg_ifaceflags_cb" (e.g. telling you about packet origin or if
+- the packet is multicast) and 1KB of space for your callbacks to pass
+- along arbitrary data.
+-
+- This buffer might only be allocated after you explicitly request it - in
+- this case the proc argument is NULL and you can return the value
+- "DESSERT_MSG_NEEDMSGPROC" from within your callback. The callback will
+- be called again with a valid processing buffer.
+-
+-
+-2.3. Using interfaces
+-
+-
+-2.3.1. Using a TUN/TAP interface
+-
+- First you have to choose whether to use a TUN or TAP interface. TUN
+- interfaces are used to exchange IPv4 / IPv6 datagrams with the kernel
+- network stack. TAP interfaces are used to exchange Ethernet frames
+- with the kernel network stack. If you want to route Ethernet frames,
+- you should choose a TAP interface. If you intend to implement
+- a custom layer 2 to layer 3 mapping, you should use a TUN interface.
+-
+- Currently, you can only initialize and use a single sys (TUN/TAP) interface.
+- This is done by "dessert_sysif_init". You must then set up the interface
+- config in the kernel yourself e.g. by calling "ifconfig".
+-
+- int dessert_sysif_init(char* name, uint8_t flags);
+-
+- In either case, frames you receive from a TUN/TAP interface will be
+- passed along the callbacks added by "dessert_sysrxcb_add" to the
+- processing pipeline. Each of them will be called with a pointer to an
+- Ethernet frame. In case of a TUN interface, "ether_shost" and "ether_dhost"
+- are set to "00:00:00:00:00:00", and ether_type reflects whether the packet
+- received is IPv4 oder IPv6.
+-
+- Packets are sent to the kernel network stack with "dessert_syssend".
+- In case of a TUN Interface "ether_shost" and "ether_dhost" will be
+- ignored.
+-
+- int dessert_syssend(const struct ether_header *eth, size_t len);
+-
+-
+-2.3.2. Using a mesh interface
+-
+- Mesh interfaces are used similar to the TUN/TAP interface with two major
+- differences: You can have multiple mesh interfaces and they send and
+- receive DES-SERT messages instead of Ethernet frames.
+-
+- You add an mesh interface using "dessert_meshif_add" and can send to it
+- by calling "dessert_meshsend". If the interface parameter is NULL, the
+- packet will be transmitted over every interface (good for flooding).
+-
+- int dessert_meshif_add(const char* dev, uint8_t flags);
+-
+- int dessert_meshsend(const dessert_msg_t* msg,
+- const dessert_meshif_t *iface);
+-
+-
+-2.4. Logging
+-
+- You can write log messages easily with a bunch of macros provided
+- by DES-SERT ("dessert_debug", "dessert_info" ,"dessert_notice",
+- "dessert_warn", "dessert_warning", "dessert_err", "dessert_crit",
+- "dessert_alert" and "dessert_emerg"). Each of them can be used like
+- "printf" and logs to Syslog, STDERR, file or a ringbuffer depending
+- on your configuration.
+-
+- DES-SERT also ships with a custom "assert" macro which acts like
+- the original macro from the standard C library and uses the logging
+- mechanism described above.
+-
+-
+-2.5. Periodics
+-
+- Periodics help you to perform maintenance or delayed tasks. A task
+- consists of a callback, which will be called at the time you requested,
+- and a void pointer the callback is passed. You can add these tasks by
+- calling "dessert_periodic_add" or "dessert_periodic_add_delayed".
+-
+-
+-2.6. CLI
+-
+- DES-SERT supports simple configuration and debugging of your routing
+- protocol implementation by providing a Cisco like command line interface
+- (cli) and a config file parser based upon it.
+- This cli is realized through libcli (http://code.google.com/p/libcli/).
+-
+- DES-SERT does some of the initialization of libcli. Therefore, it provides
+- the main cli anchor "dessert_cli" and some anchors to add commands below
+- "dessert_cli_.*". Because DES-SERT only loosely wraps libcli, you should
+- make yourself familiar with libcli itself. This may be improved in further
+- DES-SERT releases.
+-
+- You can evaluate a config file by calling "cli_file" and start a thread
+- enabling a telnet-interface for DES-SERT by calling "dessert_cli_run".
+-
+-
+-2.7. Putting all together
+-
+- Now you have learned about the most important aspects of DES-SERT.
+- To write your own routing protocol implementation, you need to know
+- how to put all this together.
+-
+- You should start with a main() program parsing the command line options
+- and then calling "dessert_init()". This is needed to set up DES-SERT
+- correctly. Afterwards you can register callbacks, read the config file
+- and do what you like. If everything is set up, you call "dessert_run()"
+- and let the event based framework do its job.
+-
+- If you would like to see a complete protocol implementation sample,
+- have a look at the "gossiping" directory.
+-
+-
+-3. Contact & Feedback
+-
+- We love feedback - if you have patches, comments or questions,
+- please contact us! Recent contact information is available on
+- http://www.des-testbed.net/des-sert/
+Index: libdessert0.86-0.86.14/Makefile
+===================================================================
+--- libdessert0.86-0.86.14.orig/Makefile 2009-11-26 18:56:56.000000000 +0100
++++ libdessert0.86-0.86.14/Makefile 2009-12-09 16:38:56.609342119 +0100
+@@ -1,154 +1,925 @@
+-SHLIB_VERSION = 0.86.14
+-SHLIB_COMPAT_VERSION = 0.86
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# Makefile. Generated from Makefile.in by configure.
+
+-MODULES=dessert_core.o dessert_log.o dessert_sysiface.o dessert_meshiface.o dessert_msg.o dessert_cli.o dessert_periodic.o dessert_agentx.o
+-
+-UNAME = $(shell uname | tr 'a-z' 'A-Z')
+-TARFILES = *.c *.h Makefile Intro.txt DES-SERT.doxyfile AUTHORS
+-
+-PREFIX ?= $(DESTDIR)/usr
+-DIR_LIB=$(PREFIX)/lib
+-DIR_INCLUDE=$(PREFIX)/include/dessert
+-
+-ifeq ($(UNAME),LINUX)
+- LIBS = pthread pcap cli
+- CFLAGS += -ggdb -Wall -fPIC -DTARGET_$(UNAME) -D_GNU_SOURCE -DSHLIB_VERSION=\"$(SHLIB_VERSION)\"
+- LDFLAGS += -dy -static-libgcc $(addprefix -l,$(LIBS))
+- SHLIB = libdessert.so.$(SHLIB_VERSION)
+- SHLIB_COMPAT = libdessert.so.$(SHLIB_COMPAT_VERSION)
+- SHLIB_DEFAULT = libdessert.so
+- SHLIB_LDFLAGS = -shared -Wl,-soname,$(SHLIB_COMPAT) -o $(SHLIB)
+-else ifeq ($(UNAME),DARWIN)
+- LIBS = pthread pcap cli
+- CFLAGS += -ggdb -Wall -fPIC -DTARGET_$(UNAME) -DTARGET_BSD -DSHLIB_VERSION=\"$(SHLIB_VERSION)\"
+- LDFLAGS += $(addprefix -l,$(LIBS))
+- SHLIB = libdessert.$(SHLIB_VERSION).dylib
+- SHLIB_COMPAT = libdessert.$(SHLIB_COMPAT_VERSION).dylib
+- SHLIB_DEFAULT = libdessert.dylib
+- SHLIB_LDFLAGS = -dynamiclib -compatibility_version $(SHLIB_COMPAT_VERSION) -current_version $(SHLIB_VERSION) -o $(SHLIB)
+-else ifeq ($(UNAME),FREEBSD)
+- LIBS = pcap cli
+- CFLAGS += -ggdb -Wall -fPIC -DTARGET_$(UNAME) -DTARGET_BSD -DSHLIB_VERSION=\"$(SHLIB_VERSION)\" -pthread -I/usr/local/include -I/usr/include
+- LDFLAGS += -dy -L/usr/local/lib -L/usr/lib $(addprefix -l,$(LIBS))
+- SHLIB = libdessert.so.$(SHLIB_VERSION)
+- SHLIB_COMPAT = libdessert.so.$(SHLIB_COMPAT_VERSION)
+- SHLIB_DEFAULT = libdessert.so
+- SHLIB_LDFLAGS = -shared -Wl,-soname,$(SHLIB_COMPAT) -o $(SHLIB)
+-endif
+-
+-## >>> SNMP ##
+-NETSNMPCONFIG=net-snmp-config
+-
+-STRICT_FLAGS = -Wstrict-prototypes
+-NETSNMPCFLAGS := $(shell $(NETSNMPCONFIG) --base-cflags) $(STRICT_FLAGS)
+-NETSNMPLIBS := $(shell $(NETSNMPCONFIG) --agent-libs)
+-
+-SNMPMODULES = snmp/dessertObjects \
+- snmp/dessertMeshifTable \
+- snmp/dessertMeshifTable_data_get \
+- snmp/dessertMeshifTable_data_set \
+- snmp/dessertMeshifTable_data_access \
+- snmp/dessertMeshifTable_interface \
+- snmp/dessertSysifTable \
+- snmp/dessertSysifTable_data_get \
+- snmp/dessertSysifTable_data_set \
+- snmp/dessertSysifTable_data_access \
+- snmp/dessertSysifTable_interface \
+- snmp/dessertAppStatsTable \
+- snmp/dessertAppStatsTable_data_get \
+- snmp/dessertAppStatsTable_data_set \
+- snmp/dessertAppStatsTable_data_access \
+- snmp/dessertAppStatsTable_interface \
+- snmp/dessertAppParamsTable \
+- snmp/dessertAppParamsTable_data_get \
+- snmp/dessertAppParamsTable_data_set \
+- snmp/dessertAppParamsTable_data_access \
+- snmp/dessertAppParamsTable_interface
+-
+-CFLAGS += $(NETSNMPCFLAGS)
+-LDFLAGS += $(NETSNMPLIBS)
+-MODULES += $(addsuffix .o,$(SNMPMODULES))
+-SNMPTARFILES = snmp/*.c snmp/*.h
+-## <<< SNMP ##
+-
+-DOXYGEN = /usr/bin/doxygen
+-DOXYFILE = DES-SERT.doxyfile
+-DOXYGENTARFILES = doxygen/html/*
+-
+-
+-CFLAGS +=
+-LDFLAGS +=
+-
+-all: doxygen libdessert.a $(SHLIB)
+-
+-clean:
+- rm -r *.o *.a *.so *.so.* *.dylib *.tar.gz || true
+- rm snmp/*.o || true
+- rm test/*.o || true
+- rm test-periodic_add || true
+- rm test-periodic_add-delete-modify-add || true
+- rm test-periodic_wladimir || true
+- rm test-meshif-iterator || true
+- rm test-agentx-appstats || true
+- rm test-agentx-appparams || true
+- rm test-agentx || true
+- rm -rf doxygen || true
+- rm Manual.pdf || true
+-
+-install:
+- echo "ECHO:: $(DIR_LIB) $(SHLIB)"
+- install -d $(DIR_LIB) $(DIR_INCLUDE)
+- install -m755 $(SHLIB) $(DIR_LIB)
+- (cd $(DIR_LIB) ; ln -fs $(SHLIB) $(SHLIB_COMPAT))
+- (cd $(DIR_LIB) ; ln -fs $(SHLIB) $(SHLIB_DEFAULT))
+- install -m644 dessert.h $(DIR_INCLUDE)
+- install -m644 utlist.h $(DIR_INCLUDE)
+-
+-
+-libdessert.a: $(MODULES)
+- $(AR) -r libdessert.a $(MODULES)
+- ranlib libdessert.a
+-
+-$(SHLIB): $(MODULES)
+- $(CC) $(CFLAGS) $(LDFLAGS) $(SHLIB_LDFLAGS) $(MODULES)
+- ln -fs $(SHLIB) $(SHLIB_COMPAT)
+- ln -fs $(SHLIB) $(SHLIB_DEFAULT)
+-
+-tarball: clean doxygen
+- mkdir libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)
+- cp -R $(TARFILES) libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)
+- mkdir libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/snmp
+- cp -R $(SNMPTARFILES) libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/snmp
+- mkdir libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/doxygen
+- mkdir libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/doxygen/html
+- cp -R $(DOXYGENTARFILES) libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/doxygen/html
+- gzip -9 -c changelog > libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/changelog.gz
+- tar -czf libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION).tar.gz libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)
+- rm -rf libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)
+-
+-doxygen:
+- (cat $(DOXYFILE); echo "PROJECT_NUMBER=$(SHLIB_VERSION)") | $(DOXYGEN) -
+-
+-manual: doxygen
+- cd doxygen/latex; $(MAKE) pdf
+- cp doxygen/latex/refman.pdf Manual.pdf
+-
+-test-periodic_add: test/test-periodic_add.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-periodic_add test/test-periodic_add.o $(MODULES)
+-
+-test-periodic_add-delete-modify-add: test/test-periodic_add-delete-modify-add.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-periodic_add-delete-modify-add test/test-periodic_add-delete-modify-add.o $(MODULES)
+-
+-test-periodic_wladimir: test/test-periodic_wladimir.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-periodic_wladimir test/test-periodic_wladimir.o $(MODULES)
+-
+-
+-test-agentx-appparams: test/test-agentx-appparams.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-agentx-appparams test/test-agentx-appparams.o $(MODULES)
+-
+-test-agentx-appstats: test/test-agentx-appstats.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-agentx-appstats test/test-agentx-appstats.o $(MODULES)
+-
+-test-meshif-iterator: test/test-meshif-iterator.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-meshif-iterator test/test-meshif-iterator.o $(MODULES)
+-
+\ No newline at end of file
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
++
++
++
++# ---------------------------------------------------------------------------
++# Licensed to the Apache Software Foundation (ASF) under one or more
++# contributor license agreements. See the NOTICE file distributed with
++# this work for additional information regarding copyright ownership.
++# The ASF licenses this file to You under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++# ---------------------------------------------------------------------------
++
++# Copyright (C) 2004 Oren Ben-Kiki
++# This file is distributed under the same terms as the Automake macro files.
++
++# Generate automatic documentation using Doxygen. Goals and variables values
++# are controlled by the various DX_COND_??? conditionals set by autoconf.
++#
++# The provided goals are:
++# doxygen-doc: Generate all doxygen documentation.
++# doxygen-run: Run doxygen, which will generate some of the documentation
++# (HTML, CHM, CHI, MAN, RTF, XML) but will not do the post
++# processing required for the rest of it (PS, PDF, and some MAN).
++# doxygen-man: Rename some doxygen generated man pages.
++# doxygen-ps: Generate doxygen PostScript documentation.
++# doxygen-pdf: Generate doxygen PDF documentation.
++#
++# Note that by default these are not integrated into the automake goals. If
++# doxygen is used to generate man pages, you can achieve this integration by
++# setting man3_MANS to the list of man pages generated and then adding the
++# dependency:
++#
++# $(man3_MANS): doxygen-doc
++#
++# This will cause make to run doxygen and generate all the documentation.
++#
++# The following variable is intended for use in Makefile.am:
++#
++# DX_CLEANFILES = everything to clean.
++#
++# This is usually added to MOSTLYCLEANFILES.
++
++
++pkgdatadir = $(datadir)/libdessert
++pkgincludedir = $(includedir)/libdessert
++pkglibdir = $(libdir)/libdessert
++pkglibexecdir = $(libexecdir)/libdessert
++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 = i686-pc-linux-gnu
++host_triplet = i686-pc-linux-gnu
++DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
++ $(srcdir)/doxygen-include.am $(srcdir)/libdessert.pc.in \
++ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
++ config.guess config.sub depcomp install-sh ltmain.sh missing
++subdir = .
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
++ configure.lineno config.status.lineno
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = config.h
++CONFIG_CLEAN_FILES = libdessert.pc
++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__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__installdirs = "$(DESTDIR)$(pkgconfigdir)"
++DATA = $(pkgconfig_DATA)
++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 dist dist-all distcheck
++ETAGS = etags
++CTAGS = ctags
++DIST_SUBDIRS = $(SUBDIRS)
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++distdir = $(PACKAGE)-$(VERSION)
++top_distdir = $(distdir)
++am__remove_distdir = \
++ { test ! -d "$(distdir)" \
++ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
++ && rm -fr "$(distdir)"; }; }
++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"
++DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
++GZIP_ENV = --best
++distuninstallcheck_listfiles = find . -type f -print
++distcleancheck_listfiles = find . -type f -print
++ACLOCAL = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run aclocal-1.11
++AMTAR = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run tar
++AR = ar
++AUTOCONF = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run autoconf
++AUTOHEADER = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run autoheader
++AUTOMAKE = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run automake-1.11
++AWK = gawk
++CC = gcc
++CCDEPMODE = depmode=gcc3
++CFLAGS = -g -O2
++CLI_LIBS =
++CPP = gcc -E
++CPPFLAGS =
++CYGPATH_W = echo
++DEFS = -DHAVE_CONFIG_H
++DEPDIR = .deps
++DOXYGEN_PAPER_SIZE =
++DSYMUTIL =
++DUMPBIN =
++DX_CONFIG = DES-SERT.doxyfile
++DX_DOCDIR = doxygen
++DX_DOT = /usr/bin/dot
++DX_DOXYGEN = /usr/bin/doxygen
++DX_DVIPS =
++DX_EGREP = /bin/egrep
++DX_ENV = SRCDIR='.' PROJECT='libdessert' DOCDIR='doxygen' VERSION='0.86.14' PERL_PATH='/usr/bin/perl' HAVE_DOT='YES' DOT_PATH='/usr/bin' GENERATE_MAN='NO' GENERATE_RTF='NO' GENERATE_XML='NO' GENERATE_HTMLHELP='NO' GENERATE_CHI='NO' GENERATE_HTML='YES' GENERATE_LATEX='YES'
++DX_FLAG_chi = 0
++DX_FLAG_chm = 0
++DX_FLAG_doc = 1
++DX_FLAG_dot = 1
++DX_FLAG_html = 1
++DX_FLAG_man = 0
++DX_FLAG_pdf = 1
++DX_FLAG_ps = 0
++DX_FLAG_rtf = 0
++DX_FLAG_xml = 0
++DX_HHC =
++DX_LATEX =
++DX_MAKEINDEX = /usr/bin/makeindex
++DX_PDFLATEX = /usr/bin/pdflatex
++DX_PERL = /usr/bin/perl
++DX_PROJECT = libdessert
++ECHO_C =
++ECHO_N = -n
++ECHO_T =
++EGREP = /bin/grep -E
++EXEEXT =
++FGREP = /bin/grep -F
++GREP = /bin/grep
++INSTALL = /usr/bin/install -c
++INSTALL_DATA = ${INSTALL} -m 644
++INSTALL_PROGRAM = ${INSTALL}
++INSTALL_SCRIPT = ${INSTALL}
++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
++LD = /usr/bin/ld
++LDFLAGS =
++LIBDESSERT_LIBRARY_VERSION = 0:86:14
++LIBOBJS =
++LIBS = -lcli
++LIBTOOL = $(SHELL) $(top_builddir)/libtool
++LIPO =
++LN_S = ln -s
++LTLIBOBJS =
++MAKEINFO = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run makeinfo
++MKDIR_P = /bin/mkdir -p
++NM = /usr/bin/nm -B
++NMEDIT =
++OBJDUMP = objdump
++OBJEXT = o
++OTOOL =
++OTOOL64 =
++PACKAGE = libdessert
++PACKAGE_BUGREPORT = des-sert@spline.inf.fu-berlin.de
++PACKAGE_NAME = libdessert
++PACKAGE_STRING = libdessert 0.86.14
++PACKAGE_TARNAME = libdessert
++PACKAGE_URL =
++PACKAGE_VERSION = 0.86.14
++PATH_SEPARATOR = :
++PCAP_CFLAGS =
++PCAP_CFLGAS = -I/usr/include
++PCAP_LIBS = -L/usr/lib -lpcap
++PTHREAD_CC = gcc
++PTHREAD_CFLAGS =
++PTHREAD_LIBS = -lpthread
++RANLIB = ranlib
++SED = /bin/sed
++SET_MAKE =
++SHELL = /bin/sh
++SNMP_CFLAGS =
++SNMP_CFLGAS = -DNETSNMP_ENABLE_IPV6 -g -O2 -DNETSNMP_USE_INLINE -Ulinux -Dlinux=linux -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/perl/5.10/CORE -I. -I/usr/include
++SNMP_LIBS = -L/usr/lib -lnetsnmpagent -lnetsnmphelpers -lnetsnmpmibs -lnetsnmp -Wl,-E
++STRIP = strip
++VERSION = 0.86.14
++abs_builddir = /devel/archive/test/libdessert0.86-0.86.14
++abs_srcdir = /devel/archive/test/libdessert0.86-0.86.14
++abs_top_builddir = /devel/archive/test/libdessert0.86-0.86.14
++abs_top_srcdir = /devel/archive/test/libdessert0.86-0.86.14
++ac_ct_CC = gcc
++ac_ct_DUMPBIN =
++am__include = include
++am__leading_dot = .
++am__quote =
++am__tar = ${AMTAR} chof - "$$tardir"
++am__untar = ${AMTAR} xf -
++ax_pthread_config =
++bindir = ${exec_prefix}/bin
++build = i686-pc-linux-gnu
++build_alias =
++build_cpu = i686
++build_os = linux-gnu
++build_vendor = pc
++builddir = .
++datadir = ${datarootdir}
++datarootdir = ${prefix}/share
++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
++dvidir = ${docdir}
++exec_prefix = ${prefix}
++host = i686-pc-linux-gnu
++host_alias =
++host_cpu = i686
++host_os = linux-gnu
++host_vendor = pc
++htmldir = ${docdir}
++includedir = ${prefix}/include
++infodir = ${datarootdir}/info
++install_sh = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/install-sh
++libdir = ${exec_prefix}/lib
++libexecdir = ${exec_prefix}/libexec
++localedir = ${datarootdir}/locale
++localstatedir = ${prefix}/var
++lt_ECHO = echo
++mandir = ${datarootdir}/man
++mkdir_p = /bin/mkdir -p
++oldincludedir = /usr/include
++pdfdir = ${docdir}
++prefix = /usr/local
++program_transform_name = s,x,x,
++psdir = ${docdir}
++sbindir = ${exec_prefix}/sbin
++sharedstatedir = ${prefix}/com
++srcdir = .
++sysconfdir = ${prefix}/etc
++target_alias =
++top_build_prefix =
++top_builddir = .
++top_srcdir = .
++ACLOCAL_AMFLAGS = -I m4
++SUBDIRS = include src
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = libdessert.pc
++DX_CLEAN_HTML = doxygen/html
++#DX_CLEAN_CHM = doxygen/chm
++##DX_CLEAN_CHI = doxygen/libdessert.chi
++#DX_CLEAN_MAN = doxygen/man
++#DX_CLEAN_RTF = doxygen/rtf
++#DX_CLEAN_XML = doxygen/xml
++#DX_CLEAN_PS = doxygen/libdessert.ps
++#DX_PS_GOAL = doxygen-ps
++DX_CLEAN_PDF = doxygen/libdessert.pdf
++DX_PDF_GOAL = doxygen-pdf
++DX_CLEAN_LATEX = doxygen/latex
++DX_CLEANFILES = \
++ doxygen/libdessert.tag \
++ -r \
++ $(DX_CLEAN_HTML) \
++ $(DX_CLEAN_CHM) \
++ $(DX_CLEAN_CHI) \
++ $(DX_CLEAN_MAN) \
++ $(DX_CLEAN_RTF) \
++ $(DX_CLEAN_XML) \
++ $(DX_CLEAN_PS) \
++ $(DX_CLEAN_PDF) \
++ $(DX_CLEAN_LATEX)
++
++EXTRA_DIST = autogen.sh DES-SERT.doxyfile doxygen/html
++all: config.h
++ $(MAKE) $(AM_MAKEFLAGS) all-recursive
++
++.SUFFIXES:
++am--refresh:
++ @:
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/doxygen-include.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
++ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
++ && exit 0; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ echo ' $(SHELL) ./config.status'; \
++ $(SHELL) ./config.status;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
++ esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++ $(SHELL) ./config.status --recheck
++
++$(top_srcdir)/configure: $(am__configure_deps)
++ $(am__cd) $(srcdir) && $(AUTOCONF)
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
++$(am__aclocal_m4_deps):
++
++config.h: stamp-h1
++ @if test ! -f $@; then \
++ rm -f stamp-h1; \
++ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
++ else :; fi
++
++stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
++ @rm -f stamp-h1
++ cd $(top_builddir) && $(SHELL) ./config.status config.h
++$(srcdir)/config.h.in: $(am__configure_deps)
++ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
++ rm -f stamp-h1
++ touch $@
++
++distclean-hdr:
++ -rm -f config.h stamp-h1
++libdessert.pc: $(top_builddir)/config.status $(srcdir)/libdessert.pc.in
++ cd $(top_builddir) && $(SHELL) ./config.status $@
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++distclean-libtool:
++ -rm -f libtool config.lt
++install-pkgconfigDATA: $(pkgconfig_DATA)
++ @$(NORMAL_INSTALL)
++ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ 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)$(pkgconfigdir)'"; \
++ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
++ done
++
++uninstall-pkgconfigDATA:
++ @$(NORMAL_UNINSTALL)
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
++
++# 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):
++ @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//`; \
++ list='$(SUBDIRS)'; 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"
++
++$(RECURSIVE_CLEAN_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ case "$@" in \
++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
++ *) list='$(SUBDIRS)' ;; \
++ esac; \
++ rev=''; for subdir in $$list; do \
++ if test "$$subdir" = "."; then :; else \
++ rev="$$subdir $$rev"; \
++ fi; \
++ done; \
++ rev="$$rev ."; \
++ target=`echo $@ | sed s/-recursive//`; \
++ for subdir in $$rev; do \
++ echo "Making $$target in $$subdir"; \
++ if test "$$subdir" = "."; then \
++ local_target="$$target-am"; \
++ else \
++ local_target="$$target"; \
++ fi; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done && 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
++
++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) config.h.in $(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) config.h.in $(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) config.h.in $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ list='$(SOURCES) $(HEADERS) config.h.in $(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"
++
++distclean-tags:
++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++ $(am__remove_distdir)
++ test -d "$(distdir)" || mkdir "$(distdir)"
++ @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 \
++ test -d "$(distdir)/$$subdir" \
++ || $(MKDIR_P) "$(distdir)/$$subdir" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ 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
++ -test -n "$(am__skip_mode_fix)" \
++ || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
++ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
++ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
++ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
++ || chmod -R a+r "$(distdir)"
++dist-gzip: distdir
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ $(am__remove_distdir)
++dist-bzip2: distdir
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++dist-lzma: distdir
++ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
++ $(am__remove_distdir)
++
++dist-xz: distdir
++ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
++ $(am__remove_distdir)
++
++dist-tarZ: distdir
++ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
++ $(am__remove_distdir)
++
++dist-shar: distdir
++ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
++ $(am__remove_distdir)
++
++dist-zip: distdir
++ -rm -f $(distdir).zip
++ zip -rq $(distdir).zip $(distdir)
++ $(am__remove_distdir)
++
++dist dist-all: distdir
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++# This target untars the dist file and tries a VPATH configuration. Then
++# it guarantees that the distribution is self-contained by making another
++# tarfile.
++distcheck: dist
++ case '$(DIST_ARCHIVES)' in \
++ *.tar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
++ *.tar.bz2*) \
++ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
++ *.tar.lzma*) \
++ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
++ *.tar.xz*) \
++ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
++ *.tar.Z*) \
++ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
++ *.shar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
++ *.zip*) \
++ unzip $(distdir).zip ;;\
++ esac
++ chmod -R a-w $(distdir); chmod a+w $(distdir)
++ mkdir $(distdir)/_build
++ mkdir $(distdir)/_inst
++ chmod a-w $(distdir)
++ test -d $(distdir)/_build || exit 0; \
++ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
++ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
++ && am__cwd=`pwd` \
++ && $(am__cd) $(distdir)/_build \
++ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
++ $(DISTCHECK_CONFIGURE_FLAGS) \
++ && $(MAKE) $(AM_MAKEFLAGS) \
++ && $(MAKE) $(AM_MAKEFLAGS) dvi \
++ && $(MAKE) $(AM_MAKEFLAGS) check \
++ && $(MAKE) $(AM_MAKEFLAGS) install \
++ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
++ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
++ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
++ distuninstallcheck \
++ && chmod -R a-w "$$dc_install_base" \
++ && ({ \
++ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
++ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
++ } || { rm -rf "$$dc_destdir"; exit 1; }) \
++ && rm -rf "$$dc_destdir" \
++ && $(MAKE) $(AM_MAKEFLAGS) dist \
++ && rm -rf $(DIST_ARCHIVES) \
++ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
++ && cd "$$am__cwd" \
++ || exit 1
++ $(am__remove_distdir)
++ @(echo "$(distdir) archives ready for distribution: "; \
++ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
++ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
++distuninstallcheck:
++ @$(am__cd) '$(distuninstallcheck_dir)' \
++ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
++ || { echo "ERROR: files left after uninstall:" ; \
++ if test -n "$(DESTDIR)"; then \
++ echo " (check DESTDIR support)"; \
++ fi ; \
++ $(distuninstallcheck_listfiles) ; \
++ exit 1; } >&2
++distcleancheck: distclean
++ @if test '$(srcdir)' = . ; then \
++ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
++ exit 1 ; \
++ fi
++ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
++ || { echo "ERROR: files left in build directory after distclean:" ; \
++ $(distcleancheck_listfiles) ; \
++ exit 1; } >&2
++check-am: all-am
++check: check-recursive
++all-am: Makefile $(DATA) config.h
++installdirs: installdirs-recursive
++installdirs-am:
++ for dir in "$(DESTDIR)$(pkgconfigdir)"; 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:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++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 $(am__CONFIG_DISTCLEAN_FILES)
++ -rm -f Makefile
++distclean-am: clean-am distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags
++
++dvi: dvi-recursive
++
++dvi-am:
++
++html: html-recursive
++
++html-am:
++
++info: info-recursive
++
++info-am:
++
++install-data-am: install-pkgconfigDATA
++
++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 $(am__CONFIG_DISTCLEAN_FILES)
++ -rm -rf $(top_srcdir)/autom4te.cache
++ -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-pkgconfigDATA
++
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
++ ctags-recursive install-am install-strip tags-recursive
++
++.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
++ all all-am am--refresh check check-am clean clean-generic \
++ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
++ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
++ distcheck distclean distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags distcleancheck distdir \
++ distuninstallcheck 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-pkgconfigDATA 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-pkgconfigDATA
++
++
++#doxygen-ps: doxygen/libdessert.ps
++
++#doxygen/libdessert.ps: doxygen/libdessert.tag
++# cd doxygen/latex; \
++# rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++# $(DX_LATEX) refman.tex; \
++# $(MAKEINDEX_PATH) refman.idx; \
++# $(DX_LATEX) refman.tex; \
++# countdown=5; \
++# while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++# refman.log > /dev/null 2>&1 \
++# && test $$countdown -gt 0; do \
++# $(DX_LATEX) refman.tex; \
++# countdown=`expr $$countdown - 1`; \
++# done; \
++# $(DX_DVIPS) -o ../libdessert.ps refman.dvi
++
++doxygen-pdf: doxygen/libdessert.pdf
++
++doxygen/libdessert.pdf: doxygen/libdessert.tag
++ cd doxygen/latex; \
++ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++ $(DX_PDFLATEX) refman.tex; \
++ $(DX_MAKEINDEX) refman.idx; \
++ $(DX_PDFLATEX) refman.tex; \
++ countdown=5; \
++ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++ refman.log > /dev/null 2>&1 \
++ && test $$countdown -gt 0; do \
++ $(DX_PDFLATEX) refman.tex; \
++ countdown=`expr $$countdown - 1`; \
++ done; \
++ mv refman.pdf ../libdessert.pdf
++
++.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++doxygen-run: doxygen/libdessert.tag
++
++doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++doxygen/libdessert.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
++ rm -rf doxygen
++ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
++
++# 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:
+Index: libdessert0.86-0.86.14/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/Makefile.am 2009-12-09 16:38:27.215595120 +0100
+@@ -0,0 +1,11 @@
++
++ACLOCAL_AMFLAGS = -I m4
++
++SUBDIRS = include src
++
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = libdessert.pc
++
++include doxygen-include.am
++
++EXTRA_DIST = autogen.sh DES-SERT.doxyfile doxygen/html
+Index: libdessert0.86-0.86.14/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/Makefile.in 2009-12-09 16:38:51.255169526 +0100
+@@ -0,0 +1,925 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
++
++# ---------------------------------------------------------------------------
++# Licensed to the Apache Software Foundation (ASF) under one or more
++# contributor license agreements. See the NOTICE file distributed with
++# this work for additional information regarding copyright ownership.
++# The ASF licenses this file to You under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++# ---------------------------------------------------------------------------
++
++# Copyright (C) 2004 Oren Ben-Kiki
++# This file is distributed under the same terms as the Automake macro files.
++
++# Generate automatic documentation using Doxygen. Goals and variables values
++# are controlled by the various DX_COND_??? conditionals set by autoconf.
++#
++# The provided goals are:
++# doxygen-doc: Generate all doxygen documentation.
++# doxygen-run: Run doxygen, which will generate some of the documentation
++# (HTML, CHM, CHI, MAN, RTF, XML) but will not do the post
++# processing required for the rest of it (PS, PDF, and some MAN).
++# doxygen-man: Rename some doxygen generated man pages.
++# doxygen-ps: Generate doxygen PostScript documentation.
++# doxygen-pdf: Generate doxygen PDF documentation.
++#
++# Note that by default these are not integrated into the automake goals. If
++# doxygen is used to generate man pages, you can achieve this integration by
++# setting man3_MANS to the list of man pages generated and then adding the
++# dependency:
++#
++# $(man3_MANS): doxygen-doc
++#
++# This will cause make to run doxygen and generate all the documentation.
++#
++# The following variable is intended for use in Makefile.am:
++#
++# DX_CLEANFILES = everything to clean.
++#
++# This is usually added to MOSTLYCLEANFILES.
++
++VPATH = @srcdir@
++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@
++DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
++ $(srcdir)/doxygen-include.am $(srcdir)/libdessert.pc.in \
++ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
++ config.guess config.sub depcomp install-sh ltmain.sh missing
++subdir = .
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
++ configure.lineno config.status.lineno
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = config.h
++CONFIG_CLEAN_FILES = libdessert.pc
++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__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__installdirs = "$(DESTDIR)$(pkgconfigdir)"
++DATA = $(pkgconfig_DATA)
++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 dist dist-all distcheck
++ETAGS = etags
++CTAGS = ctags
++DIST_SUBDIRS = $(SUBDIRS)
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++distdir = $(PACKAGE)-$(VERSION)
++top_distdir = $(distdir)
++am__remove_distdir = \
++ { test ! -d "$(distdir)" \
++ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
++ && rm -fr "$(distdir)"; }; }
++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"
++DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
++GZIP_ENV = --best
++distuninstallcheck_listfiles = find . -type f -print
++distcleancheck_listfiles = find . -type f -print
++ACLOCAL = @ACLOCAL@
++AMTAR = @AMTAR@
++AR = @AR@
++AUTOCONF = @AUTOCONF@
++AUTOHEADER = @AUTOHEADER@
++AUTOMAKE = @AUTOMAKE@
++AWK = @AWK@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++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@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++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@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++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@
++ax_pthread_config = @ax_pthread_config@
++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@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++ACLOCAL_AMFLAGS = -I m4
++SUBDIRS = include src
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = libdessert.pc
++@DX_COND_doc_TRUE@@DX_COND_html_TRUE@DX_CLEAN_HTML = @DX_DOCDIR@/html
++@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHM = @DX_DOCDIR@/chm
++@DX_COND_chi_TRUE@@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi
++@DX_COND_doc_TRUE@@DX_COND_man_TRUE@DX_CLEAN_MAN = @DX_DOCDIR@/man
++@DX_COND_doc_TRUE@@DX_COND_rtf_TRUE@DX_CLEAN_RTF = @DX_DOCDIR@/rtf
++@DX_COND_doc_TRUE@@DX_COND_xml_TRUE@DX_CLEAN_XML = @DX_DOCDIR@/xml
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_PS_GOAL = doxygen-ps
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_PDF_GOAL = doxygen-pdf
++@DX_COND_doc_TRUE@@DX_COND_latex_TRUE@DX_CLEAN_LATEX = @DX_DOCDIR@/latex
++@DX_COND_doc_TRUE@DX_CLEANFILES = \
++@DX_COND_doc_TRUE@ @DX_DOCDIR@/@PACKAGE@.tag \
++@DX_COND_doc_TRUE@ -r \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_HTML) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_CHM) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_CHI) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_MAN) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_RTF) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_XML) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_PS) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_PDF) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_LATEX)
++
++EXTRA_DIST = autogen.sh DES-SERT.doxyfile doxygen/html
++all: config.h
++ $(MAKE) $(AM_MAKEFLAGS) all-recursive
++
++.SUFFIXES:
++am--refresh:
++ @:
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/doxygen-include.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
++ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
++ && exit 0; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ echo ' $(SHELL) ./config.status'; \
++ $(SHELL) ./config.status;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
++ esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++ $(SHELL) ./config.status --recheck
++
++$(top_srcdir)/configure: $(am__configure_deps)
++ $(am__cd) $(srcdir) && $(AUTOCONF)
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
++$(am__aclocal_m4_deps):
++
++config.h: stamp-h1
++ @if test ! -f $@; then \
++ rm -f stamp-h1; \
++ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
++ else :; fi
++
++stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
++ @rm -f stamp-h1
++ cd $(top_builddir) && $(SHELL) ./config.status config.h
++$(srcdir)/config.h.in: $(am__configure_deps)
++ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
++ rm -f stamp-h1
++ touch $@
++
++distclean-hdr:
++ -rm -f config.h stamp-h1
++libdessert.pc: $(top_builddir)/config.status $(srcdir)/libdessert.pc.in
++ cd $(top_builddir) && $(SHELL) ./config.status $@
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++distclean-libtool:
++ -rm -f libtool config.lt
++install-pkgconfigDATA: $(pkgconfig_DATA)
++ @$(NORMAL_INSTALL)
++ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ 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)$(pkgconfigdir)'"; \
++ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
++ done
++
++uninstall-pkgconfigDATA:
++ @$(NORMAL_UNINSTALL)
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
++
++# 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):
++ @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//`; \
++ list='$(SUBDIRS)'; 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"
++
++$(RECURSIVE_CLEAN_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ case "$@" in \
++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
++ *) list='$(SUBDIRS)' ;; \
++ esac; \
++ rev=''; for subdir in $$list; do \
++ if test "$$subdir" = "."; then :; else \
++ rev="$$subdir $$rev"; \
++ fi; \
++ done; \
++ rev="$$rev ."; \
++ target=`echo $@ | sed s/-recursive//`; \
++ for subdir in $$rev; do \
++ echo "Making $$target in $$subdir"; \
++ if test "$$subdir" = "."; then \
++ local_target="$$target-am"; \
++ else \
++ local_target="$$target"; \
++ fi; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done && 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
++
++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) config.h.in $(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) config.h.in $(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) config.h.in $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ list='$(SOURCES) $(HEADERS) config.h.in $(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"
++
++distclean-tags:
++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++ $(am__remove_distdir)
++ test -d "$(distdir)" || mkdir "$(distdir)"
++ @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 \
++ test -d "$(distdir)/$$subdir" \
++ || $(MKDIR_P) "$(distdir)/$$subdir" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ 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
++ -test -n "$(am__skip_mode_fix)" \
++ || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
++ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
++ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
++ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
++ || chmod -R a+r "$(distdir)"
++dist-gzip: distdir
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ $(am__remove_distdir)
++dist-bzip2: distdir
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++dist-lzma: distdir
++ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
++ $(am__remove_distdir)
++
++dist-xz: distdir
++ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
++ $(am__remove_distdir)
++
++dist-tarZ: distdir
++ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
++ $(am__remove_distdir)
++
++dist-shar: distdir
++ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
++ $(am__remove_distdir)
++
++dist-zip: distdir
++ -rm -f $(distdir).zip
++ zip -rq $(distdir).zip $(distdir)
++ $(am__remove_distdir)
++
++dist dist-all: distdir
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++# This target untars the dist file and tries a VPATH configuration. Then
++# it guarantees that the distribution is self-contained by making another
++# tarfile.
++distcheck: dist
++ case '$(DIST_ARCHIVES)' in \
++ *.tar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
++ *.tar.bz2*) \
++ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
++ *.tar.lzma*) \
++ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
++ *.tar.xz*) \
++ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
++ *.tar.Z*) \
++ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
++ *.shar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
++ *.zip*) \
++ unzip $(distdir).zip ;;\
++ esac
++ chmod -R a-w $(distdir); chmod a+w $(distdir)
++ mkdir $(distdir)/_build
++ mkdir $(distdir)/_inst
++ chmod a-w $(distdir)
++ test -d $(distdir)/_build || exit 0; \
++ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
++ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
++ && am__cwd=`pwd` \
++ && $(am__cd) $(distdir)/_build \
++ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
++ $(DISTCHECK_CONFIGURE_FLAGS) \
++ && $(MAKE) $(AM_MAKEFLAGS) \
++ && $(MAKE) $(AM_MAKEFLAGS) dvi \
++ && $(MAKE) $(AM_MAKEFLAGS) check \
++ && $(MAKE) $(AM_MAKEFLAGS) install \
++ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
++ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
++ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
++ distuninstallcheck \
++ && chmod -R a-w "$$dc_install_base" \
++ && ({ \
++ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
++ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
++ } || { rm -rf "$$dc_destdir"; exit 1; }) \
++ && rm -rf "$$dc_destdir" \
++ && $(MAKE) $(AM_MAKEFLAGS) dist \
++ && rm -rf $(DIST_ARCHIVES) \
++ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
++ && cd "$$am__cwd" \
++ || exit 1
++ $(am__remove_distdir)
++ @(echo "$(distdir) archives ready for distribution: "; \
++ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
++ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
++distuninstallcheck:
++ @$(am__cd) '$(distuninstallcheck_dir)' \
++ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
++ || { echo "ERROR: files left after uninstall:" ; \
++ if test -n "$(DESTDIR)"; then \
++ echo " (check DESTDIR support)"; \
++ fi ; \
++ $(distuninstallcheck_listfiles) ; \
++ exit 1; } >&2
++distcleancheck: distclean
++ @if test '$(srcdir)' = . ; then \
++ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
++ exit 1 ; \
++ fi
++ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
++ || { echo "ERROR: files left in build directory after distclean:" ; \
++ $(distcleancheck_listfiles) ; \
++ exit 1; } >&2
++check-am: all-am
++check: check-recursive
++all-am: Makefile $(DATA) config.h
++installdirs: installdirs-recursive
++installdirs-am:
++ for dir in "$(DESTDIR)$(pkgconfigdir)"; 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:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++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 $(am__CONFIG_DISTCLEAN_FILES)
++ -rm -f Makefile
++distclean-am: clean-am distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags
++
++dvi: dvi-recursive
++
++dvi-am:
++
++html: html-recursive
++
++html-am:
++
++info: info-recursive
++
++info-am:
++
++install-data-am: install-pkgconfigDATA
++
++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 $(am__CONFIG_DISTCLEAN_FILES)
++ -rm -rf $(top_srcdir)/autom4te.cache
++ -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-pkgconfigDATA
++
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
++ ctags-recursive install-am install-strip tags-recursive
++
++.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
++ all all-am am--refresh check check-am clean clean-generic \
++ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
++ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
++ distcheck distclean distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags distcleancheck distdir \
++ distuninstallcheck 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-pkgconfigDATA 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-pkgconfigDATA
++
++
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps
++
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ cd @DX_DOCDIR@/latex; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(MAKEINDEX_PATH) refman.idx; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=5; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ refman.log > /dev/null 2>&1 \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ && test $$countdown -gt 0; do \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=`expr $$countdown - 1`; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ done; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi
++
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf
++
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ cd @DX_DOCDIR@/latex; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_MAKEINDEX) refman.idx; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=5; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ refman.log > /dev/null 2>&1 \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ && test $$countdown -gt 0; do \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=`expr $$countdown - 1`; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ done; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ mv refman.pdf ../@PACKAGE@.pdf
++
++@DX_COND_doc_TRUE@.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++@DX_COND_doc_TRUE@.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++@DX_COND_doc_TRUE@doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag
++
++@DX_COND_doc_TRUE@doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++@DX_COND_doc_TRUE@@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
++@DX_COND_doc_TRUE@ rm -rf @DX_DOCDIR@
++@DX_COND_doc_TRUE@ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
++
++# 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:
+Index: libdessert0.86-0.86.14/NEWS
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/NEWS 2009-12-09 16:38:27.218928392 +0100
+@@ -0,0 +1 @@
++nothing yet
+Index: libdessert0.86-0.86.14/README
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/README 2009-12-09 16:38:27.218928392 +0100
+@@ -0,0 +1,270 @@
++
++ DES-SERT - an Extensible Routing-Framework for Testbeds
++
++
++Copyright
++
++ Copyright Philipp Schmidt <phils@inf.fu-berlin.de>,
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group,
++ Freie Universitaet Berlin
++
++ This document has been published under GNU Free Documentation License.
++ All rights reserved.
++
++
++1. Introduction
++
++ DES-SERT, the DES Simple and Extensible Routing-Framework for Testbeds,
++ is a framework designed to assist researchers implementing routing
++ protocols for testbeds.
++
++ DES-SERT enables the implementation of routing protocols on top of
++ Ethernet via an underlay (Layer 2.5) in user space.
++ It introduces an abstraction from OS specific issues and provides
++ functionality and data structures to implement proactive, reactive,
++ and hybrid routing protocols.
++
++ While generally usable in many application scenarios, it is primarily
++ used in DES-Mesh (http://www.des-testbed.net/), the multi-transceiver
++ wireless mesh network testbed part of the DES-Testbed.
++
++
++2. DES-SERT Architecture
++
++ DES-SERT introduces some concepts to implement routing protocols.
++ When implementing a routing protocol with DES-SERT, you should be
++ familiar with these concepts to structure and tailor your implementation.
++
++
++2.1. messages
++
++ Every packet you send or receive on the mesh is represented as a
++ DES-SERT message. From a programmers point of view, a DES-SERT message
++ is just a C-structure:
++
++ typedef struct dessert_msg {
++ /** the layer2 header on the wire */
++ struct ether_header l2h;
++ /** short name of the protocol as passed to dessert_init() */
++ char proto[DESSERT_PROTO_STRLEN];
++ /** version of the app as passed to dessert_init() */
++ uint8_t ver;
++ /** flags - bits 1-4 reserved for dessert, bits 5-8 for app usage */
++ uint8_t flags;
++ /** ttl or hopcount field for app usage - 0xff if not used*/
++ uint8_t ttl;
++ /** reserved for app usage - 0x00 if not used */
++ uint8_t u8;
++ /** reserved for app usage - 0xbeef if not used */
++ uint16_t u16;
++ /** header length incl. extensions */
++ uint16_t hlen;
++ /** payload length */
++ uint16_t plen;
++ } dessert_msg_t;
++
++ Every message sent via the underlay carries this structure as a packet
++ header. All data in a "dessert_msg" is stored in network byte order.
++ DES-SERT tries to care as automatically as possible of this structure.
++ Nevertheless you will have to care at least about: "l2h.ether_dhost" and
++ "ttl".
++
++ If you need to send some data along with every packet, e.g. some kind of
++ metric or cost your routing protocol uses, you should try to fit this
++ data into the "u8", "u16" and the upper 4 bits of the "flags" field.
++ These fields will never be touched by DES-SERT except on initialization
++ via "dessert_msg_new".
++
++ Because just a C-structure is not really usable as a packet, there are some
++ utility functions around - please have a look around in "dessert.h" and the
++ doxygen doku. The most important ones are: "dessert_msg_new" and
++ "dessert_msg_destroy", which do not simply allocate memory for a DES-SERT
++ message, but for a whole packet of maximum size and initialize the
++ structures for further packet construction/processing.
++
++ int dessert_msg_new(dessert_msg_t **msgout);
++
++ void dessert_msg_destroy(dessert_msg_t* msg);
++
++
++2.1.2 DES-SERT extensions
++
++ A DES-SERT extension is some structure used to piggyback data on a
++ DES-SERT message. It consists of a 8-bit user supplied type field (with
++ some reserved values), an 8-bit length field and user supplied data of
++ arbitrary length of 253 bytes at most.
++
++ It can be added to a message via "dessert_msg_addext", retrieved via
++ "dessert_msg_getext" and removed via "dessert_msg_delext".
++
++ int dessert_msg_addext(dessert_msg_t* msg,
++ dessert_ext_t** ext, uint8_t type, size_t len);
++
++ int dessert_msg_getext(const dessert_msg_t* msg,
++ dessert_ext_t** ext, uint8_t type, int index);
++
++ int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
++
++ It is recommended not to put single data fields in extensions, but
++ combine semantically related data in a struct and attach this struct
++ as an extension because every extension carried introduces an 16-bit
++ overhead to the packet.
++
++
++2.2. Processing pipelines
++
++ Routing algorithms are often split up in several parts like packet
++ validation, loop-detection or routing table lookup.
++ To implement these as independent and clear as possible, DES-SERT enables
++ you to split up your packet processing in as many parts as you like.
++
++ There are two separate processing pipelines - one for packets received
++ from the kernel via a TUN or TAP interface and one for packets received
++ via an interface used on the mesh network.
++
++ You can register callbacks to be added to one of these pipelines with
++ "dessert_sysrxcb_add" or "dessert_meshrxcb_add". Both take an additional
++ integer argument ("priority") specifying the order the callbacks should
++ be called. Higher "priority" value results in being called later
++ within the pipeline.
++
++ int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
++
++ int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
++
++ If a callback returns "DESSERT_MSG_KEEP" the packed will be processed by
++ further callbacks, if it returns "DESSERT_MSG_DROP" the message will be
++ dropped and no further callbacks will be called.
++
++ You do not need to care about the management of the buffers for incoming
++ messages - DES-SERT does this for you. Nevertheless if you need to add
++ extensions or enlarge the payload of a message, you need to tell DES-SERT
++ to enlarge the buffer for you if the flag "DESSERT_FLAG_SPARSE" is set on
++ the message. You can do this by returning "DESSERT_MSG_NEEDNOSPARSE" from
++ within a callback. The callback will be called again with a larger buffer
++ and no "DESSERT_FLAG_SPARSE" flag being set.
++
++
++2.2.1. Processing buffer
++
++ If you need to pass information along several callbacks, you can do this
++ in the processing buffer passed to the the callbacks. This buffer contains
++ some local processing flags ("lflags") set by the builtin callback
++ "dessert_msg_ifaceflags_cb" (e.g. telling you about packet origin or if
++ the packet is multicast) and 1KB of space for your callbacks to pass
++ along arbitrary data.
++
++ This buffer might only be allocated after you explicitly request it - in
++ this case the proc argument is NULL and you can return the value
++ "DESSERT_MSG_NEEDMSGPROC" from within your callback. The callback will
++ be called again with a valid processing buffer.
++
++
++2.3. Using interfaces
++
++
++2.3.1. Using a TUN/TAP interface
++
++ First you have to choose whether to use a TUN or TAP interface. TUN
++ interfaces are used to exchange IPv4 / IPv6 datagrams with the kernel
++ network stack. TAP interfaces are used to exchange Ethernet frames
++ with the kernel network stack. If you want to route Ethernet frames,
++ you should choose a TAP interface. If you intend to implement
++ a custom layer 2 to layer 3 mapping, you should use a TUN interface.
++
++ Currently, you can only initialize and use a single sys (TUN/TAP) interface.
++ This is done by "dessert_sysif_init". You must then set up the interface
++ config in the kernel yourself e.g. by calling "ifconfig".
++
++ int dessert_sysif_init(char* name, uint8_t flags);
++
++ In either case, frames you receive from a TUN/TAP interface will be
++ passed along the callbacks added by "dessert_sysrxcb_add" to the
++ processing pipeline. Each of them will be called with a pointer to an
++ Ethernet frame. In case of a TUN interface, "ether_shost" and "ether_dhost"
++ are set to "00:00:00:00:00:00", and ether_type reflects whether the packet
++ received is IPv4 oder IPv6.
++
++ Packets are sent to the kernel network stack with "dessert_syssend".
++ In case of a TUN Interface "ether_shost" and "ether_dhost" will be
++ ignored.
++
++ int dessert_syssend(const struct ether_header *eth, size_t len);
++
++
++2.3.2. Using a mesh interface
++
++ Mesh interfaces are used similar to the TUN/TAP interface with two major
++ differences: You can have multiple mesh interfaces and they send and
++ receive DES-SERT messages instead of Ethernet frames.
++
++ You add an mesh interface using "dessert_meshif_add" and can send to it
++ by calling "dessert_meshsend". If the interface parameter is NULL, the
++ packet will be transmitted over every interface (good for flooding).
++
++ int dessert_meshif_add(const char* dev, uint8_t flags);
++
++ int dessert_meshsend(const dessert_msg_t* msg,
++ const dessert_meshif_t *iface);
++
++
++2.4. Logging
++
++ You can write log messages easily with a bunch of macros provided
++ by DES-SERT ("dessert_debug", "dessert_info" ,"dessert_notice",
++ "dessert_warn", "dessert_warning", "dessert_err", "dessert_crit",
++ "dessert_alert" and "dessert_emerg"). Each of them can be used like
++ "printf" and logs to Syslog, STDERR, file or a ringbuffer depending
++ on your configuration.
++
++ DES-SERT also ships with a custom "assert" macro which acts like
++ the original macro from the standard C library and uses the logging
++ mechanism described above.
++
++
++2.5. Periodics
++
++ Periodics help you to perform maintenance or delayed tasks. A task
++ consists of a callback, which will be called at the time you requested,
++ and a void pointer the callback is passed. You can add these tasks by
++ calling "dessert_periodic_add" or "dessert_periodic_add_delayed".
++
++
++2.6. CLI
++
++ DES-SERT supports simple configuration and debugging of your routing
++ protocol implementation by providing a Cisco like command line interface
++ (cli) and a config file parser based upon it.
++ This cli is realized through libcli (http://code.google.com/p/libcli/).
++
++ DES-SERT does some of the initialization of libcli. Therefore, it provides
++ the main cli anchor "dessert_cli" and some anchors to add commands below
++ "dessert_cli_.*". Because DES-SERT only loosely wraps libcli, you should
++ make yourself familiar with libcli itself. This may be improved in further
++ DES-SERT releases.
++
++ You can evaluate a config file by calling "cli_file" and start a thread
++ enabling a telnet-interface for DES-SERT by calling "dessert_cli_run".
++
++
++2.7. Putting all together
++
++ Now you have learned about the most important aspects of DES-SERT.
++ To write your own routing protocol implementation, you need to know
++ how to put all this together.
++
++ You should start with a main() program parsing the command line options
++ and then calling "dessert_init()". This is needed to set up DES-SERT
++ correctly. Afterwards you can register callbacks, read the config file
++ and do what you like. If everything is set up, you call "dessert_run()"
++ and let the event based framework do its job.
++
++ If you would like to see a complete protocol implementation sample,
++ have a look at the "gossiping" directory.
++
++
++3. Contact & Feedback
++
++ We love feedback - if you have patches, comments or questions,
++ please contact us! Recent contact information is available on
++ http://www.des-testbed.net/des-sert/
+Index: libdessert0.86-0.86.14/autogen.sh
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/autogen.sh 2009-12-09 16:38:27.218928392 +0100
+@@ -0,0 +1,22 @@
++#!/bin/sh
++
++# ugly hack to get libtools major version
++LIBTOOL_MAJOR_VERSION=`libtool --version | head -n 1 | cut -d " " -f 4 | cut -c1`
++
++M4_PATH="m4"
++
++M4_FILES="libtool.m4 \
++ ltoptions.m4 \
++ ltsugar.m4 \
++ ltversion.m4 \
++ lt~obsolete.m4 \
++ "
++
++if test ${LIBTOOL_MAJOR_VERSION} -lt 2; then
++ for i in ${M4_FILES}
++ do
++ rm ${M4_PATH}/${i}
++ done
++fi
++
++autoreconf --force --install -I m4
+Index: libdessert0.86-0.86.14/config.guess
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/config.guess 2009-12-09 16:38:27.218928392 +0100
+@@ -0,0 +1,1533 @@
++#! /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
++# Free Software Foundation, Inc.
++
++timestamp='2009-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, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
++# 02110-1301, USA.
++#
++# 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 <per@bothner.com>.
++# Please send patches to <config-patches@gnu.org>. Submit a context
++# diff and a properly formatted 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.
++#
++# The plan is that this can be called by configure scripts if you
++# don't specify an explicit build system type.
++
++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 <config-patches@gnu.org>."
++
++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 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 tupples: *-*-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'`
++ exit ;;
++ 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: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 <stdio.h> /* 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 <sys/systemcfg.h>
++
++ 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:*:[456])
++ 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 <stdlib.h>
++ #include <unistd.h>
++
++ 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 <unistd.h>
++ 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:*:*)
++ case ${UNAME_MACHINE} in
++ pc98)
++ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ amd64)
++ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ *)
++ echo ${UNAME_MACHINE}-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*:windows32*:*)
++ # uname -m includes "-pc" on this system.
++ echo ${UNAME_MACHINE}-mingw32
++ exit ;;
++ i*:PW*:*)
++ echo ${UNAME_MACHINE}-pc-pw32
++ exit ;;
++ *:Interix*:[3456]*)
++ case ${UNAME_MACHINE} in
++ x86)
++ echo i586-pc-interix${UNAME_RELEASE}
++ exit ;;
++ EM64T | authenticamd | genuineintel)
++ 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 ;;
++ 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
++ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++ fi
++ exit ;;
++ avr32*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ cris:Linux:*:*)
++ echo cris-axis-linux-gnu
++ exit ;;
++ crisv32:Linux:*:*)
++ echo crisv32-axis-linux-gnu
++ exit ;;
++ frv:Linux:*:*)
++ echo frv-unknown-linux-gnu
++ 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 | sed -n '
++ /^CPU/{
++ s: ::g
++ p
++ }'`"
++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
++ ;;
++ or32:Linux:*:*)
++ echo or32-unknown-linux-gnu
++ exit ;;
++ ppc:Linux:*:*)
++ echo powerpc-unknown-linux-gnu
++ exit ;;
++ ppc64:Linux:*:*)
++ echo powerpc64-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 ;;
++ padre:Linux:*:*)
++ echo sparc-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 ;;
++ parisc64:Linux:*:* | hppa64:Linux:*:*)
++ echo hppa64-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 ;;
++ vax:Linux:*:*)
++ echo ${UNAME_MACHINE}-dec-linux-gnu
++ exit ;;
++ x86_64:Linux:*:*)
++ echo x86_64-unknown-linux-gnu
++ exit ;;
++ xtensa*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ i*86:Linux:*:*)
++ # The BFD linker knows what the default object file format is, so
++ # first see if it will tell us. cd to the root directory to prevent
++ # problems with other programs or directories called `ld' in the path.
++ # Set LC_ALL=C to ensure ld outputs messages in English.
++ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
++ | sed -ne '/supported targets:/!d
++ s/[ ][ ]*/ /g
++ s/.*supported targets: *//
++ s/ .*//
++ p'`
++ case "$ld_supported_targets" in
++ elf32-i386)
++ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
++ ;;
++ esac
++ # Determine whether the default compiler is a.out or elf
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #include <features.h>
++ #ifdef __ELF__
++ # ifdef __GLIBC__
++ # if __GLIBC__ >= 2
++ LIBC=gnu
++ # else
++ LIBC=gnulibc1
++ # endif
++ # else
++ LIBC=gnulibc1
++ # endif
++ #else
++ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
++ LIBC=gnu
++ #else
++ LIBC=gnuaout
++ #endif
++ #endif
++ #ifdef __dietlibc__
++ LIBC=dietlibc
++ #endif
++EOF
++ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
++ /^LIBC/{
++ s: ::g
++ p
++ }'`"
++ test x"${LIBC}" != x && {
++ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
++ exit
++ }
++ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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' </usr/options/cb.name`
++ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
++ elif /bin/uname -X 2>/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 <Richard.M.Bartel@ccMail.Census.GOV>
++ echo i586-unisys-sysv4
++ exit ;;
++ *:UNIX_System_V:4*:FTX*)
++ # From Gerald Hewes <hewes@openmarket.com>.
++ # 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
++ 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 ;;
++ 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 ;;
++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 <<EOF
++#ifdef _SEQUENT_
++# include <sys/types.h>
++# include <sys/utsname.h>
++#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 <sys/param.h>
++ 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 <sys/param.h>
++# 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 <<EOF
++$0: unable to guess system type
++
++This script, last modified $timestamp, has failed to recognize
++the operating system you are using. It is advised that you
++download the most up to date version of the config scripts from
++
++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++and
++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
++
++If the version you run ($0) is already up to date, please
++send the following data and any information you think might be
++pertinent to <config-patches@gnu.org> 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:
+Index: libdessert0.86-0.86.14/config.h.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/config.h.in 2009-12-09 16:38:57.005169762 +0100
+@@ -0,0 +1,208 @@
++/* config.h.in. Generated from configure.ac by autoheader. */
++
++/* defines linkoption for libcli */
++#undef CLI_LIBS
++
++/* Define to 1 if you have the <arpa/inet.h> header file. */
++#undef HAVE_ARPA_INET_H
++
++/* Define to 1 if you have the <dlfcn.h> header file. */
++#undef HAVE_DLFCN_H
++
++/* Define to 1 if you have the <fcntl.h> header file. */
++#undef HAVE_FCNTL_H
++
++/* Define to 1 if you have the `fork' function. */
++#undef HAVE_FORK
++
++/* Define to 1 if you have the `gethostname' function. */
++#undef HAVE_GETHOSTNAME
++
++/* Define to 1 if you have the `gettimeofday' function. */
++#undef HAVE_GETTIMEOFDAY
++
++/* Define to 1 if you have the <inttypes.h> header file. */
++#undef HAVE_INTTYPES_H
++
++/* Define to 1 if you have the <libcli.h> header file. */
++#undef HAVE_LIBCLI_H
++
++/* Define to 1 if you have the `localtime_r' function. */
++#undef HAVE_LOCALTIME_R
++
++/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
++ to 0 otherwise. */
++#undef HAVE_MALLOC
++
++/* Define to 1 if you have the `memmove' function. */
++#undef HAVE_MEMMOVE
++
++/* Define to 1 if you have the <memory.h> header file. */
++#undef HAVE_MEMORY_H
++
++/* Define to 1 if you have the `memset' function. */
++#undef HAVE_MEMSET
++
++/* Define to 1 if you have the <netinet/in.h> header file. */
++#undef HAVE_NETINET_IN_H
++
++/* Define if you have POSIX threads libraries and header files. */
++#undef HAVE_PTHREAD
++
++/* Define to 1 if your system has a GNU libc compatible `realloc' function,
++ and to 0 otherwise. */
++#undef HAVE_REALLOC
++
++/* Define to 1 if you have the `socket' function. */
++#undef HAVE_SOCKET
++
++/* Define to 1 if stdbool.h conforms to C99. */
++#undef HAVE_STDBOOL_H
++
++/* Define to 1 if you have the <stdint.h> header file. */
++#undef HAVE_STDINT_H
++
++/* Define to 1 if you have the <stdlib.h> header file. */
++#undef HAVE_STDLIB_H
++
++/* Define to 1 if you have the `strdup' function. */
++#undef HAVE_STRDUP
++
++/* Define to 1 if you have the `strerror' function. */
++#undef HAVE_STRERROR
++
++/* Define to 1 if you have the <strings.h> header file. */
++#undef HAVE_STRINGS_H
++
++/* Define to 1 if you have the <string.h> header file. */
++#undef HAVE_STRING_H
++
++/* Define to 1 if you have the `strtol' function. */
++#undef HAVE_STRTOL
++
++/* Define to 1 if you have the <syslog.h> header file. */
++#undef HAVE_SYSLOG_H
++
++/* Define to 1 if you have the <sys/ioctl.h> header file. */
++#undef HAVE_SYS_IOCTL_H
++
++/* Define to 1 if you have the <sys/socket.h> header file. */
++#undef HAVE_SYS_SOCKET_H
++
++/* Define to 1 if you have the <sys/stat.h> header file. */
++#undef HAVE_SYS_STAT_H
++
++/* Define to 1 if you have the <sys/types.h> header file. */
++#undef HAVE_SYS_TYPES_H
++
++/* Define to 1 if you have the <unistd.h> header file. */
++#undef HAVE_UNISTD_H
++
++/* Define to 1 if you have the `vfork' function. */
++#undef HAVE_VFORK
++
++/* Define to 1 if you have the <vfork.h> header file. */
++#undef HAVE_VFORK_H
++
++/* Define to 1 if `fork' works. */
++#undef HAVE_WORKING_FORK
++
++/* Define to 1 if `vfork' works. */
++#undef HAVE_WORKING_VFORK
++
++/* Define to 1 if the system has the type `_Bool'. */
++#undef HAVE__BOOL
++
++/* Define to the sub-directory in which libtool stores uninstalled libraries.
++ */
++#undef LT_OBJDIR
++
++/* Name of package */
++#undef PACKAGE
++
++/* Define to the address where bug reports for this package should be sent. */
++#undef PACKAGE_BUGREPORT
++
++/* Define to the full name of this package. */
++#undef PACKAGE_NAME
++
++/* Define to the full name and version of this package. */
++#undef PACKAGE_STRING
++
++/* Define to the one symbol short name of this package. */
++#undef PACKAGE_TARNAME
++
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
++/* Define to the version of this package. */
++#undef PACKAGE_VERSION
++
++/* Define to necessary symbol if this constant uses a non-standard name on
++ your system. */
++#undef PTHREAD_CREATE_JOINABLE
++
++/* Define to 1 if you have the ANSI C header files. */
++#undef STDC_HEADERS
++
++/* Version number of package */
++#undef VERSION
++
++/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
++ <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
++ #define below would cause a syntax error. */
++#undef _UINT32_T
++
++/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
++ <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
++ #define below would cause a syntax error. */
++#undef _UINT64_T
++
++/* Define for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>,
++ <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
++ #define below would cause a syntax error. */
++#undef _UINT8_T
++
++/* Define to `__inline__' or `__inline' if that's what the C compiler
++ calls it, or to nothing if 'inline' is not supported under any name. */
++#ifndef __cplusplus
++#undef inline
++#endif
++
++/* Define to the type of a signed integer type of width exactly 32 bits if
++ such a type exists and the standard includes do not define it. */
++#undef int32_t
++
++/* Define to rpl_malloc if the replacement function should be used. */
++#undef malloc
++
++/* Define to `int' if <sys/types.h> does not define. */
++#undef pid_t
++
++/* Define to rpl_realloc if the replacement function should be used. */
++#undef realloc
++
++/* Define to `unsigned int' if <sys/types.h> does not define. */
++#undef size_t
++
++/* Define to `int' if <sys/types.h> does not define. */
++#undef ssize_t
++
++/* Define to the type of an unsigned integer type of width exactly 16 bits if
++ such a type exists and the standard includes do not define it. */
++#undef uint16_t
++
++/* Define to the type of an unsigned integer type of width exactly 32 bits if
++ such a type exists and the standard includes do not define it. */
++#undef uint32_t
++
++/* Define to the type of an unsigned integer type of width exactly 64 bits if
++ such a type exists and the standard includes do not define it. */
++#undef uint64_t
++
++/* Define to the type of an unsigned integer type of width exactly 8 bits if
++ such a type exists and the standard includes do not define it. */
++#undef uint8_t
++
++/* Define as `fork' if `vfork' does not work. */
++#undef vfork
+Index: libdessert0.86-0.86.14/config.sub
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/config.sub 2009-12-09 16:38:27.222261696 +0100
+@@ -0,0 +1,1693 @@
++#! /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
++# Free Software Foundation, Inc.
++
++timestamp='2009-06-11'
++
++# 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, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
++# 02110-1301, USA.
++#
++# 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 <config-patches@gnu.org>. Submit a context
++# diff and a properly formatted 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.
++
++# 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 <config-patches@gnu.org>."
++
++version="\
++GNU config.sub ($timestamp)
++
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
++2002, 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."
++
++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-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/'`
++ ;;
++ *)
++ 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)
++ 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*)
++ 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 \
++ | 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 \
++ | bfin \
++ | c4x | clipper \
++ | d10v | d30v | dlx | dsp16xx \
++ | fido | fr30 | frv \
++ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
++ | i370 | i860 | i960 | ia64 \
++ | ip2k | iq2000 \
++ | 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 \
++ | nios | nios2 \
++ | ns16k | ns32k \
++ | or32 \
++ | pdp10 | pdp11 | pj | pjl \
++ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
++ | pyramid \
++ | 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 | strongarm \
++ | tahoe | thumb | tic4x | tic80 | tron \
++ | v850 | v850e \
++ | we32k \
++ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
++ | z8k | z80)
++ basic_machine=$basic_machine-unknown
++ ;;
++ m6811 | m68hc11 | m6812 | m68hc12)
++ # Motorola 68HC11/12.
++ basic_machine=$basic_machine-unknown
++ os=-none
++ ;;
++ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
++ ;;
++ ms1)
++ basic_machine=mt-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-* \
++ | 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-* \
++ | bfin-* | bs2000-* \
++ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
++ | 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-* \
++ | i*86-* | i860-* | i960-* | ia64-* \
++ | ip2k-* | iq2000-* \
++ | lm32-* \
++ | m32c-* | m32r-* | m32rle-* \
++ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
++ | m88110-* | m88k-* | maxq-* | mcore-* | 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-* \
++ | mmix-* \
++ | mt-* \
++ | msp430-* \
++ | nios-* | nios2-* \
++ | none-* | np1-* | ns16k-* | ns32k-* \
++ | orion-* \
++ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
++ | pyramid-* \
++ | romp-* | rs6000-* \
++ | 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-* | strongarm-* | sv1-* | sx?-* \
++ | tahoe-* | thumb-* \
++ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
++ | tron-* \
++ | v850-* | v850e-* | vax-* \
++ | we32k-* \
++ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
++ | 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
++ ;;
++ 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)
++ 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'm not sure what "Sysv32" means. Should this be sysv3.2?
++ 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
++ ;;
++ 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-/'`
++ ;;
++ mvs)
++ basic_machine=i370-ibm
++ os=-mvs
++ ;;
++ 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
++ ;;
++ 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) basic_machine=powerpc-unknown
++ ;;
++ ppc-*) 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
++ ;;
++ 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
++ ;;
++ tic54x | c54x*)
++ basic_machine=tic54x-unknown
++ os=-coff
++ ;;
++ tic55x | c55x*)
++ basic_machine=tic55x-unknown
++ os=-coff
++ ;;
++ tic6x | c6x*)
++ basic_machine=tic6x-unknown
++ os=-coff
++ ;;
++ tile*)
++ basic_machine=tile-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
++ ;;
++ 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.
++ -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* | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++ | -mingw32* | -linux-gnu* | -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*)
++ # 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
++ ;;
++ -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
++ ;;
++ # 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
++ # This also exists in the configure program, but was not the
++ # default.
++ # os=-sunos4
++ ;;
++ 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:
+Index: libdessert0.86-0.86.14/configure
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/configure 2009-12-09 16:38:51.722669417 +0100
+@@ -0,0 +1,16280 @@
++#! /bin/sh
++# Guess values for system-dependent variables and create Makefiles.
++# Generated by GNU Autoconf 2.65 for libdessert 0.86.14.
++#
++# Report bugs to <des-sert@spline.inf.fu-berlin.de>.
++#
++#
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
++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
++
++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"
++ 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 \$(( 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 :
++ # 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.
++ BASH_ENV=/dev/null
++ ENV=/dev/null
++ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++ export CONFIG_SHELL
++ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
++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: des-sert@spline.inf.fu-berlin.de 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_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 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=$?; test $as_status -eq 0 && as_status=1
++ if test "$3"; then
++ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
++ fi
++ $as_echo "$as_me: error: $1" >&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; }
++
++ # 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 -p'.
++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++ as_ln_s='cp -p'
++ elif ln conf$$.file conf$$ 2>/dev/null; then
++ as_ln_s=ln
++ else
++ as_ln_s='cp -p'
++ fi
++else
++ as_ln_s='cp -p'
++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
++
++if test -x / >/dev/null 2>&1; then
++ as_test_x='test -x'
++else
++ if ls -dL / >/dev/null 2>&1; then
++ as_ls_L_option=L
++ else
++ as_ls_L_option=
++ fi
++ as_test_x='
++ eval sh -c '\''
++ if test -d "$1"; then
++ test -d "$1/.";
++ else
++ case $1 in #(
++ -*)set "./$1";;
++ esac;
++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
++ ???[sx]*):;;*)false;;esac;fi
++ '\'' sh
++ '
++fi
++as_executable_p=$as_test_x
++
++# 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'"
++
++
++
++# Check that we are running under the correct shell.
++SHELL=${CONFIG_SHELL-/bin/sh}
++
++case X$lt_ECHO in
++X*--fallback-echo)
++ # Remove one level of quotation (which was required for Make).
++ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
++ ;;
++esac
++
++ECHO=${lt_ECHO-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.
++ exec $SHELL "$0" --no-reexec ${1+"$@"}
++fi
++
++if test "X$1" = X--fallback-echo; then
++ # used as fallback echo
++ shift
++ cat <<_LT_EOF
++$*
++_LT_EOF
++ exit 0
++fi
++
++# 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
++
++if test -z "$lt_ECHO"; then
++ if test "X${echo_test_string+set}" != Xset; then
++ # find a string as large as possible, as long as the shell can cope with it
++ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
++ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
++ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
++ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
++ then
++ break
++ fi
++ done
++ fi
++
++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ :
++ else
++ # The Solaris, AIX, and Digital Unix default echo programs unquote
++ # backslashes. This makes it impossible to quote backslashes using
++ # echo "$something" | sed 's/\\/\\\\/g'
++ #
++ # So, first we look for a working echo in the user's PATH.
++
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ for dir in $PATH /usr/ucb; do
++ IFS="$lt_save_ifs"
++ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
++ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ ECHO="$dir/echo"
++ break
++ fi
++ done
++ IFS="$lt_save_ifs"
++
++ if test "X$ECHO" = Xecho; then
++ # We didn't find a better echo, so look for alternatives.
++ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ # This shell has a builtin print -r that does the trick.
++ ECHO='print -r'
++ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
++ test "X$CONFIG_SHELL" != X/bin/ksh; then
++ # If we have ksh, try running configure again with it.
++ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
++ export ORIGINAL_CONFIG_SHELL
++ CONFIG_SHELL=/bin/ksh
++ export CONFIG_SHELL
++ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
++ else
++ # Try using printf.
++ ECHO='printf %s\n'
++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ # Cool, printf works
++ :
++ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
++ test "X$echo_testing_string" = 'X\t' &&
++ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
++ export CONFIG_SHELL
++ SHELL="$CONFIG_SHELL"
++ export SHELL
++ ECHO="$CONFIG_SHELL $0 --fallback-echo"
++ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
++ test "X$echo_testing_string" = 'X\t' &&
++ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ ECHO="$CONFIG_SHELL $0 --fallback-echo"
++ else
++ # maybe with a smaller string...
++ prev=:
++
++ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
++ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
++ then
++ break
++ fi
++ prev="$cmd"
++ done
++
++ if test "$prev" != 'sed 50q "$0"'; then
++ echo_test_string=`eval $prev`
++ export echo_test_string
++ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
++ else
++ # Oops. We lost completely, so just stick with echo.
++ ECHO=echo
++ fi
++ fi
++ fi
++ fi
++ fi
++fi
++
++# Copy echo and quote the copy suitably for passing to libtool from
++# the Makefile, instead of quoting the original, which is used later.
++lt_ECHO=$ECHO
++if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
++ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
++fi
++
++
++
++
++test -n "$DJDIR" || exec 7<&0 </dev/null
++exec 6>&1
++
++# Name of the host.
++# hostname on some systems (SVR3.2, 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='libdessert'
++PACKAGE_TARNAME='libdessert'
++PACKAGE_VERSION='0.86.14'
++PACKAGE_STRING='libdessert 0.86.14'
++PACKAGE_BUGREPORT='des-sert@spline.inf.fu-berlin.de'
++PACKAGE_URL=''
++
++ac_unique_file="src/libdessert/dessert_core.c"
++# Factoring default headers for most tests.
++ac_includes_default="\
++#include <stdio.h>
++#ifdef HAVE_SYS_TYPES_H
++# include <sys/types.h>
++#endif
++#ifdef HAVE_SYS_STAT_H
++# include <sys/stat.h>
++#endif
++#ifdef STDC_HEADERS
++# include <stdlib.h>
++# include <stddef.h>
++#else
++# ifdef HAVE_STDLIB_H
++# include <stdlib.h>
++# endif
++#endif
++#ifdef HAVE_STRING_H
++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
++# include <memory.h>
++# endif
++# include <string.h>
++#endif
++#ifdef HAVE_STRINGS_H
++# include <strings.h>
++#endif
++#ifdef HAVE_INTTYPES_H
++# include <inttypes.h>
++#endif
++#ifdef HAVE_STDINT_H
++# include <stdint.h>
++#endif
++#ifdef HAVE_UNISTD_H
++# include <unistd.h>
++#endif"
++
++ac_subst_vars='am__EXEEXT_FALSE
++am__EXEEXT_TRUE
++LTLIBOBJS
++DOXYGEN_PAPER_SIZE
++DX_COND_latex_FALSE
++DX_COND_latex_TRUE
++DX_COND_pdf_FALSE
++DX_COND_pdf_TRUE
++DX_PDFLATEX
++DX_FLAG_pdf
++DX_COND_ps_FALSE
++DX_COND_ps_TRUE
++DX_EGREP
++DX_DVIPS
++DX_MAKEINDEX
++DX_LATEX
++DX_FLAG_ps
++DX_COND_html_FALSE
++DX_COND_html_TRUE
++DX_FLAG_html
++DX_COND_chi_FALSE
++DX_COND_chi_TRUE
++DX_FLAG_chi
++DX_COND_chm_FALSE
++DX_COND_chm_TRUE
++DX_HHC
++DX_FLAG_chm
++DX_COND_xml_FALSE
++DX_COND_xml_TRUE
++DX_FLAG_xml
++DX_COND_rtf_FALSE
++DX_COND_rtf_TRUE
++DX_FLAG_rtf
++DX_COND_man_FALSE
++DX_COND_man_TRUE
++DX_FLAG_man
++DX_COND_dot_FALSE
++DX_COND_dot_TRUE
++DX_DOT
++DX_FLAG_dot
++DX_COND_doc_FALSE
++DX_COND_doc_TRUE
++DX_PERL
++DX_DOXYGEN
++DX_FLAG_doc
++DX_ENV
++DX_DOCDIR
++DX_CONFIG
++DX_PROJECT
++LIBOBJS
++PTHREAD_CFLAGS
++PTHREAD_LIBS
++PTHREAD_CC
++ax_pthread_config
++CLI_LIBS
++PCAP_CFLAGS
++PCAP_CFLGAS
++PCAP_LIBS
++SNMP_CFLAGS
++SNMP_CFLGAS
++SNMP_LIBS
++CPP
++OTOOL64
++OTOOL
++LIPO
++NMEDIT
++DSYMUTIL
++lt_ECHO
++RANLIB
++AR
++OBJDUMP
++NM
++ac_ct_DUMPBIN
++DUMPBIN
++LD
++FGREP
++EGREP
++GREP
++SED
++host_os
++host_vendor
++host_cpu
++host
++build_os
++build_vendor
++build_cpu
++build
++LIBTOOL
++LN_S
++am__fastdepCC_FALSE
++am__fastdepCC_TRUE
++CCDEPMODE
++AMDEPBACKSLASH
++AMDEP_FALSE
++AMDEP_TRUE
++am__quote
++am__include
++DEPDIR
++OBJEXT
++EXEEXT
++ac_ct_CC
++CPPFLAGS
++LDFLAGS
++CFLAGS
++CC
++LIBDESSERT_LIBRARY_VERSION
++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_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_dependency_tracking
++enable_shared
++enable_static
++with_pic
++enable_fast_install
++with_gnu_ld
++enable_libtool_lock
++enable_doxygen_doc
++enable_doxygen_dot
++enable_doxygen_man
++enable_doxygen_rtf
++enable_doxygen_xml
++enable_doxygen_chm
++enable_doxygen_chi
++enable_doxygen_html
++enable_doxygen_ps
++enable_doxygen_pdf
++'
++ ac_precious_vars='build_alias
++host_alias
++target_alias
++CC
++CFLAGS
++LDFLAGS
++LIBS
++CPPFLAGS
++CPP
++DOXYGEN_PAPER_SIZE'
++
++
++# 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=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
++ $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
++ If a cross compiler is detected then cross compile mode will be used." >&2
++ 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 libdessert 0.86.14 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/libdessert]
++ --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]
++_ACEOF
++fi
++
++if test -n "$ac_init_help"; then
++ case $ac_init_help in
++ short | recursive ) echo "Configuration of libdessert 0.86.14:";;
++ 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]
++ --disable-dependency-tracking speeds up one-time build
++ --enable-dependency-tracking do not reject slow dependency extractors
++ --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)
++ --disable-doxygen-doc don't generate any doxygen documentation
++ --disable-doxygen-dot don't generate graphics for doxygen documentation
++ --enable-doxygen-man generate doxygen manual pages
++ --enable-doxygen-rtf generate doxygen RTF documentation
++ --enable-doxygen-xml generate doxygen XML documentation
++ --enable-doxygen-chm generate doxygen compressed HTML help documentation
++ --enable-doxygen-chi generate doxygen seperate compressed HTML help index
++ file
++ --disable-doxygen-html don't generate doxygen plain HTML documentation
++ --enable-doxygen-ps generate doxygen PostScript documentation
++ --disable-doxygen-pdf don't generate doxygen PDF documentation
++
++Optional Packages:
++ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
++ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
++ --with-pic try to use only PIC/non-PIC objects [default=use
++ both]
++ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++
++Some influential environment variables:
++ CC C compiler command
++ CFLAGS C compiler flags
++ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
++ nonstandard directory <lib dir>
++ LIBS libraries to pass to the linker, e.g. -l<library>
++ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
++ you have headers in a nonstandard directory <include dir>
++ CPP C preprocessor
++ DOXYGEN_PAPER_SIZE
++ a4wide (default), a4, letter, legal or executive
++
++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 <des-sert@spline.inf.fu-berlin.de>.
++_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
++libdessert configure 0.86.14
++generated by GNU Autoconf 2.65
++
++Copyright (C) 2009 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
++
++} # ac_fn_c_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 ||
++ $as_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; test "x$as_lineno_stack" = x && { as_lineno=; 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; 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; } >/dev/null && {
++ 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; test "x$as_lineno_stack" = x && { as_lineno=; 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; test "x$as_lineno_stack" = x && { as_lineno=; 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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 <limits.h> declares $2.
++ For example, HP-UX 11i <limits.h> declares gettimeofday. */
++#define $2 innocuous_$2
++
++/* System header to define __stub macros and hopefully few prototypes,
++ which can conflict with char $2 (); below.
++ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++ <limits.h> exists even on freestanding compilers. */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_check_func
++
++# 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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.$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;}
++( cat <<\_ASBOX
++## ----------------------------------------------- ##
++## Report this to des-sert@spline.inf.fu-berlin.de ##
++## ----------------------------------------------- ##
++_ASBOX
++ ) | 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_check_type
++
++# ac_fn_c_find_intX_t LINENO BITS VAR
++# -----------------------------------
++# Finds a signed integer type with width BITS, setting cache variable VAR
++# accordingly.
++ac_fn_c_find_intX_t ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
++$as_echo_n "checking for int$2_t... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ eval "$3=no"
++ # Order is important - never check a type that is potentially smaller
++ # than half of the expected target width.
++ for ac_type in int$2_t 'int' 'long int' \
++ 'long long int' 'short int' 'signed char'; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
++static int test_array [1 - 2 * !(enum { N = $2 / 2 - 1 };
++ 0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))];
++test_array [0] = 0
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
++static int test_array [1 - 2 * !(enum { N = $2 / 2 - 1 };
++ ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1)
++ < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))];
++test_array [0] = 0
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++
++else
++ case $ac_type in #(
++ int$2_t) :
++ eval "$3=yes" ;; #(
++ *) :
++ eval "$3=\$ac_type" ;;
++esac
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ eval as_val=\$$3
++ if test "x$as_val" = x""no; then :
++
++else
++ break
++fi
++ done
++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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_find_intX_t
++
++# ac_fn_c_find_uintX_t LINENO BITS VAR
++# ------------------------------------
++# Finds an unsigned integer type with width BITS, setting cache variable VAR
++# accordingly.
++ac_fn_c_find_uintX_t ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
++$as_echo_n "checking for uint$2_t... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ eval "$3=no"
++ # Order is important - never check a type that is potentially smaller
++ # than half of the expected target width.
++ for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \
++ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
++static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
++test_array [0] = 0
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ case $ac_type in #(
++ uint$2_t) :
++ eval "$3=yes" ;; #(
++ *) :
++ eval "$3=\$ac_type" ;;
++esac
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ eval as_val=\$$3
++ if test "x$as_val" = x""no; then :
++
++else
++ break
++fi
++ done
++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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_find_uintX_t
++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 libdessert $as_me 0.86.14, which was
++generated by GNU Autoconf 2.65. 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
++
++ cat <<\_ASBOX
++## ---------------- ##
++## Cache variables. ##
++## ---------------- ##
++_ASBOX
++ 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
++
++ cat <<\_ASBOX
++## ----------------- ##
++## Output variables. ##
++## ----------------- ##
++_ASBOX
++ 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
++ cat <<\_ASBOX
++## ------------------- ##
++## File substitutions. ##
++## ------------------- ##
++_ASBOX
++ 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
++ cat <<\_ASBOX
++## ----------- ##
++## confdefs.h. ##
++## ----------- ##
++_ASBOX
++ 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
++ ac_site_file1=$CONFIG_SITE
++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"
++ 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
++
++
++am__api_version='1.11'
++
++ac_aux_dir=
++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
++ for ac_t in install-sh install.sh shtool; do
++ if test -f "$ac_dir/$ac_t"; then
++ ac_aux_dir=$ac_dir
++ ac_install_sh="$ac_aux_dir/$ac_t -c"
++ break 2
++ fi
++ done
++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.
++
++
++# 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 test "${ac_cv_path_install+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; }
++# Just in case
++sleep 1
++echo timestamp > conftest.file
++# 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 (
++ 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
++ rm -f conftest.file
++ 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
++
++ 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; }
++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 test "${ac_cv_prog_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_path_mkdir+set}" = set; 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
++ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; }
++
++mkdir_p="$MKDIR_P"
++case $mkdir_p in
++ [\\/$]* | ?:[\\/]*) ;;
++ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
++esac
++
++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 test "${ac_cv_prog_AWK+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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='libdessert'
++ VERSION='0.86.14'
++
++
++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"}
++
++# We need awk for the "check" target. The system "awk" is bad on
++# some platforms.
++# Always define AMTAR for backward compatibility.
++
++AMTAR=${AMTAR-"${am_missing_run}tar"}
++
++am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
++
++
++
++
++
++
++
++
++ac_config_headers="$ac_config_headers config.h"
++
++
++LIBDESSERT_LIBRARY_VERSION=0:86:14
++
++
++# Checks for programs.
++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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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_set_status 77
++as_fn_error "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 <stdio.h>
++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 test "${ac_cv_objext+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 <stdarg.h>
++#include <stdio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++/* 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='\'
++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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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'.
++ 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 8's {/usr,}/bin/sh.
++ touch 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
++ ;;
++ 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
++
++
++
++{ $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
++
++
++# Checks for libtool
++
++# Debian Stable has no libtool2 yet so use old invocation
++#LT_INIT
++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.2.6'
++macro_revision='1.3012'
++
++
++
++
++
++
++
++
++
++
++
++
++
++ltmain="$ac_aux_dir/ltmain.sh"
++
++# 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 test "${ac_cv_build+set}" = set; 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 test "${ac_cv_host+set}" = set; 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 for a sed that does not truncate output" >&5
++$as_echo_n "checking for a sed that does not truncate output... " >&6; }
++if test "${ac_cv_path_SED+set}" = set; 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"
++ { test -f "$ac_path_SED" && $as_test_x "$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 test "${ac_cv_path_GREP+set}" = set; 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"
++ { test -f "$ac_path_GREP" && $as_test_x "$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 test "${ac_cv_path_EGREP+set}" = set; 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"
++ { test -f "$ac_path_EGREP" && $as_test_x "$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 test "${ac_cv_path_FGREP+set}" = set; 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"
++ { test -f "$ac_path_FGREP" && $as_test_x "$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 test "${lt_cv_path_LD+set}" = set; 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 </dev/null` in
++ *GNU* | *'with BFD'*)
++ test "$with_gnu_ld" != no && break
++ ;;
++ *)
++ test "$with_gnu_ld" != yes && break
++ ;;
++ esac
++ fi
++ done
++ IFS="$lt_save_ifs"
++else
++ lt_cv_path_LD="$LD" # Let the user override the test with a path.
++fi
++fi
++
++LD="$lt_cv_path_LD"
++if test -n "$LD"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&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 test "${lt_cv_prog_gnu_ld+set}" = set; 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 </dev/null` in
++*GNU* | *'with BFD'*)
++ lt_cv_prog_gnu_ld=yes
++ ;;
++*)
++ lt_cv_prog_gnu_ld=no
++ ;;
++esac
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&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 test "${lt_cv_path_NM+set}" = set; 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 "$ac_tool_prefix"; then
++ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
++ 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 test "${ac_cv_prog_DUMPBIN+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 -symbols" "link -dump -symbols"
++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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
++
++
++ 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 test "${lt_cv_nm_interface+set}" = set; 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:4756: $ac_compile\"" >&5)
++ (eval "$ac_compile" 2>conftest.err)
++ cat conftest.err >&5
++ (eval echo "\"\$as_me:4759: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
++ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
++ cat conftest.err >&5
++ (eval echo "\"\$as_me:4762: 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 test "${lt_cv_sys_max_cmd_len+set}" = set; 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;
++ ;;
++
++ 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
++ ;;
++
++ 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"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
++ = "XX$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"}, \
++ = c,a/b,, \
++ && 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 for $LD option to reload object files" >&5
++$as_echo_n "checking for $LD option to reload object files... " >&6; }
++if test "${lt_cv_ld_reload_flag+set}" = set; 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
++ 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 test "${ac_cv_prog_OBJDUMP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${lt_cv_deplibs_check_method+set}" = set; 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.
++ if ( 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
++ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ 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
++ ;;
++
++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]) 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 Linux ELF.
++linux* | k*bsd*-gnu)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++netbsd* | netbsdelf*-gnu)
++ 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_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}ar", so it can be a program name with args.
++set dummy ${ac_tool_prefix}ar; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_AR+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_AR="${ac_tool_prefix}ar"
++ $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
++
++
++fi
++if test -z "$ac_cv_prog_AR"; then
++ ac_ct_AR=$AR
++ # Extract the first word of "ar", so it can be a program name with args.
++set dummy ar; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_AR+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_AR="ar"
++ $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
++
++ 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
++else
++ AR="$ac_cv_prog_AR"
++fi
++
++test -z "$AR" && AR=ar
++test -z "$AR_FLAGS" && AR_FLAGS=cru
++
++
++
++
++
++
++
++
++
++
++
++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 test "${ac_cv_prog_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 \$oldlib"
++ ;;
++ *)
++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
++ ;;
++ esac
++ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++# 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 test "${lt_cv_sys_global_symbol_pipe+set}" = set; 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};"\
++" /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
++
++ # 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
++#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. */
++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_save_LIBS="$LIBS"
++ lt_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_save_LIBS"
++ CFLAGS="$lt_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
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++# 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 5957 "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 test "${lt_cv_cc_needs_belf+set}" = set; 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
++ ;;
++sparc*-*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*) LD="${LD-ld} -m elf64_sparc" ;;
++ *)
++ 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"
++
++
++ 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 test "${ac_cv_prog_DSYMUTIL+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_NMEDIT+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_LIPO+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_LIPO+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_OTOOL+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_OTOOL64+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${lt_cv_apple_cc_single_mod+set}" = set; 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 test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 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 test "${lt_cv_ld_exported_symbols_list+set}" = set; 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; }
++ 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" != ":"; 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 test "${ac_cv_prog_CPP+set}" = set; 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 <limits.h> to <assert.h> if __STDC__ is defined, since
++ # <limits.h> 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 <limits.h>
++#else
++# include <assert.h>
++#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.$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 <ac_nonexistent.h>
++_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.$ac_ext
++
++done
++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++rm -f 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 <limits.h> to <assert.h> if __STDC__ is defined, since
++ # <limits.h> 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 <limits.h>
++#else
++# include <assert.h>
++#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.$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 <ac_nonexistent.h>
++_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.$ac_ext
++
++done
++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++rm -f 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 test "${ac_cv_header_stdc+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <stdlib.h>
++#include <stdarg.h>
++#include <string.h>
++#include <float.h>
++
++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 <string.h>
++
++_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 <stdlib.h>
++
++_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 <ctype.h>
++#include <stdlib.h>
++#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
++"
++eval as_val=\$$as_ac_Header
++ if test "x$as_val" = 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" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_DLFCN_H 1
++_ACEOF
++
++fi
++
++done
++
++
++
++# 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; pic_mode="$withval"
++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 test "${lt_cv_objdir+set}" = set; 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
++
++# Sed substitution that helps us do robust quoting. It backslashifies
++# 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'
++
++# 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "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 test "${lt_cv_path_MAGIC_CMD+set}" = set; 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 test "${lt_cv_path_MAGIC_CMD+set}" = set; 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*
++
++
++## 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...
++if test -n "$compiler"; then
++
++lt_prog_compiler_no_builtin_flag=
++
++if test "$GCC" = yes; then
++ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
++
++ { $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 test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; 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:7487: $lt_compile\"" >&5)
++ (eval "$lt_compile" 2>conftest.err)
++ ac_status=$?
++ cat conftest.err >&5
++ echo "$as_me:7491: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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=
++
++{ $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 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'
++ ;;
++
++ 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
++ 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)
++ 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'
++ ;;
++ pgcc* | pgf77* | pgf90* | pgf95*)
++ # 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*)
++ # IBM XL C 8.0/Fortran 10.1 on PPC
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_pic='-qpic'
++ lt_prog_compiler_static='-qstaticlink'
++ ;;
++ *)
++ case `$CC -V 2>&1 | sed 5q` in
++ *Sun\ C*)
++ # Sun C 5.9
++ lt_prog_compiler_pic='-KPIC'
++ lt_prog_compiler_static='-Bstatic'
++ lt_prog_compiler_wl='-Wl,'
++ ;;
++ *Sun\ F*)
++ # 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=''
++ ;;
++ 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*)
++ 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}: result: $lt_prog_compiler_pic" >&5
++$as_echo "$lt_prog_compiler_pic" >&6; }
++
++
++
++
++
++
++#
++# 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 test "${lt_cv_prog_compiler_pic_works+set}" = set; 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:7826: $lt_compile\"" >&5)
++ (eval "$lt_compile" 2>conftest.err)
++ ac_status=$?
++ cat conftest.err >&5
++ echo "$as_me:7830: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_static_works+set}" = set; 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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_c_o+set}" = set; 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:7931: $lt_compile\"" >&5)
++ (eval "$lt_compile" 2>out/conftest.err)
++ ac_status=$?
++ cat out/conftest.err >&5
++ echo "$as_me:7935: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 test "${lt_cv_prog_compiler_c_o+set}" = set; 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:7986: $lt_compile\"" >&5)
++ (eval "$lt_compile" 2>out/conftest.err)
++ ac_status=$?
++ cat out/conftest.err >&5
++ echo "$as_me:7990: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_flag_spec_ld=
++ 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
++ ;;
++ linux* | k*bsd*-gnu)
++ link_all_deplibs=no
++ ;;
++ esac
++
++ ld_shlibs=yes
++ if test "$with_gnu_ld" = 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
++ *\ [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.9.1, 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 modify your PATH
++*** so that a non-GNU linker is found, and then restart.
++
++_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 <jrb3@best.com> 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'
++ 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/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++
++ 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
++ ;;
++
++ 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)
++ 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=
++ 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ tmp_addflag=' $pic_flag'
++ ;;
++ pgf77* | pgf90* | pgf95*) # 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; $ECHO \"$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]*) # IBM XL C 8.0 on PPC (deal with xlf below)
++ tmp_sharedflag='-qmkshrobj'
++ tmp_addflag= ;;
++ 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; $ECHO \"$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*)
++ # 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=
++ hardcode_libdir_flag_spec_ld='-rpath $libdir'
++ archive_cmds='$LD -shared $libobjs $deplibs $compiler_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 $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ fi
++ ;;
++ esac
++ else
++ ld_shlibs=no
++ fi
++ ;;
++
++ netbsd* | netbsdelf*-gnu)
++ 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 $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'
++ 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 $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
++ ;;
++
++ 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 $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
++
++ 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
++ 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")) && (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
++ link_all_deplibs=no
++ 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.
++ 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
++ }
++ }'
++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 "$aix_libpath"; then
++ 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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.
++ 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
++ }
++ }'
++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 "$aix_libpath"; then
++ 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 "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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'
++ # Exported symbols can be pulled into shared objects from archives
++ whole_archive_flag_spec='$convenience'
++ 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.
++ 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 `$ECHO "X$deplibs" | $Xsed -e '\''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'
++ fix_srcfile_path='`cygpath -w "$srcfile"`'
++ enable_shared_with_static_runtimes=yes
++ ;;
++
++ darwin* | rhapsody*)
++
++
++ archive_cmds_need_lc=no
++ hardcode_direct=no
++ hardcode_automatic=yes
++ hardcode_shlibpath_var=unsupported
++ whole_archive_flag_spec=''
++ 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=echo
++ 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
++ ;;
++
++ freebsd1*)
++ ld_shlibs=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 -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 -fPIC ${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 -a "$with_gnu_ld" = no; then
++ archive_cmds='$CC -shared -fPIC ${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_flag_spec_ld='+b $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 -a "$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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ *)
++ archive_cmds='$CC -shared -fPIC ${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'
++ ;;
++ *)
++ archive_cmds='$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
++ 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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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.
++ 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) {}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ LDFLAGS="$save_LDFLAGS"
++ else
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -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* | netbsdelf*-gnu)
++ 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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 ${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 ${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; }
++ $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
++ archive_cmds_need_lc=no
++ else
++ archive_cmds_need_lc=yes
++ fi
++ allow_undefined_flag=$lt_save_allow_undefined_flag
++ else
++ cat conftest.err 1>&5
++ fi
++ $RM conftest*
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
++$as_echo "$archive_cmds_need_lc" >&6; }
++ ;;
++ 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
++ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
++ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
++ # 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 -e 's/;/ /g'`
++ else
++ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # 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; }
++}'`
++ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
++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
++ 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
++ 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<name>.so
++ # instead of lib<name>.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=`$ECHO "X$lib" | $Xsed -e '\''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
++ 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,$host_os in
++ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ 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="/usr/lib /lib/w32api /lib /usr/local/lib"
++ ;;
++ mingw* | cegcc*)
++ # MinGW DLLs use traditional 'lib' prefix
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH printed by
++ # mingw gcc, but we are running on Cygwin. Gcc prints its search
++ # path with ; separators, and with drive letters. We can handle the
++ # drive letters (cygwin fileutils understands them), so leave them,
++ # especially as we might pass files found there to a mingw objdump,
++ # which wouldn't understand a cygwinified path. Ahh.
++ 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
++ ;;
++ 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
++ ;;
++
++ *)
++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ ;;
++ esac
++ dynamic_linker='Win32 ld.exe'
++ # 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
++ 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
++ ;;
++
++freebsd1*)
++ dynamic_linker=no
++ ;;
++
++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[123]*) 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
++ 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
++ 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'
++ ;;
++
++interix[3-9]*)
++ version_type=linux
++ 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
++ 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 Linux ELF.
++linux* | k*bsd*-gnu)
++ version_type=linux
++ 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
++ 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 :
++ 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
++
++ # 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
++
++ # 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;/^$/d' | tr '\n' ' '`
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
++ ;;
++
++netbsdelf*-gnu)
++ version_type=linux
++ 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='NetBSD ld.elf_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
++ 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
++ 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
++ 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
++ 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
++ 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
++ 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 test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_dld_shl_load+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_svld_dlopen+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_dld_dld_link+set}" = set; 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" = x""yes; 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 test "${lt_cv_dlopen_self+set}" = set; 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 10369 "configure"
++#include "confdefs.h"
++
++#if HAVE_DLFCN_H
++#include <dlfcn.h>
++#endif
++
++#include <stdio.h>
++
++#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
++
++void fnord() { int i=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;
++ /* 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 test "${lt_cv_dlopen_self_static+set}" = set; 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 10465 "configure"
++#include "confdefs.h"
++
++#if HAVE_DLFCN_H
++#include <dlfcn.h>
++#endif
++
++#include <stdio.h>
++
++#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
++
++void fnord() { int i=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;
++ /* 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"
++
++
++
++
++
++
++
++
++
++
++
++
++
++ ac_config_commands="$ac_config_commands libtool"
++
++
++
++
++# Only expand once:
++
++
++
++# Checks for net-snmp-config
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Searching for net-snmp lib" >&5
++$as_echo_n "checking Searching for net-snmp lib... " >&6; }
++# Extract the first word of "net-snmp-config", so it can be a program name with args.
++set dummy net-snmp-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_SNMP_LIBS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$SNMP_LIBS"; then
++ ac_cv_prog_SNMP_LIBS="$SNMP_LIBS" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_SNMP_LIBS="`net-snmp-config --agent-libs`"
++ $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_SNMP_LIBS" && ac_cv_prog_SNMP_LIBS="none"
++fi
++fi
++SNMP_LIBS=$ac_cv_prog_SNMP_LIBS
++if test -n "$SNMP_LIBS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SNMP_LIBS" >&5
++$as_echo "$SNMP_LIBS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++# Extract the first word of "net-snmp-config", so it can be a program name with args.
++set dummy net-snmp-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_SNMP_CFLGAS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$SNMP_CFLGAS"; then
++ ac_cv_prog_SNMP_CFLGAS="$SNMP_CFLGAS" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_SNMP_CFLGAS="`net-snmp-config --cflags`"
++ $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_SNMP_CFLGAS" && ac_cv_prog_SNMP_CFLGAS="none"
++fi
++fi
++SNMP_CFLGAS=$ac_cv_prog_SNMP_CFLGAS
++if test -n "$SNMP_CFLGAS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SNMP_CFLGAS" >&5
++$as_echo "$SNMP_CFLGAS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++if test x"${SNMP_LIBS}" = "xnone"; then
++as_fn_error "net-snmp-config not found, please install the development package of net-snmp" "$LINENO" 5
++else
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: found net-snmp-config" >&5
++$as_echo "found net-snmp-config" >&6; }
++fi
++
++
++
++
++
++# Checks for pcap-config
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Searching for pcap lib" >&5
++$as_echo_n "checking Searching for pcap lib... " >&6; }
++# Extract the first word of "pcap-config", so it can be a program name with args.
++set dummy pcap-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_PCAP_LIBS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$PCAP_LIBS"; then
++ ac_cv_prog_PCAP_LIBS="$PCAP_LIBS" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_PCAP_LIBS="`pcap-config --libs`"
++ $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_PCAP_LIBS" && ac_cv_prog_PCAP_LIBS="none"
++fi
++fi
++PCAP_LIBS=$ac_cv_prog_PCAP_LIBS
++if test -n "$PCAP_LIBS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCAP_LIBS" >&5
++$as_echo "$PCAP_LIBS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++# Extract the first word of "pcap-config", so it can be a program name with args.
++set dummy pcap-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_PCAP_CFLGAS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$PCAP_CFLGAS"; then
++ ac_cv_prog_PCAP_CFLGAS="$PCAP_CFLGAS" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_PCAP_CFLGAS="`pcap-config --cflags`"
++ $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_PCAP_CFLGAS" && ac_cv_prog_PCAP_CFLGAS="none"
++fi
++fi
++PCAP_CFLGAS=$ac_cv_prog_PCAP_CFLGAS
++if test -n "$PCAP_CFLGAS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCAP_CFLGAS" >&5
++$as_echo "$PCAP_CFLGAS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++if test x"${PCAP_LIBS}" = "xnone"; then
++as_fn_error "pcap-config not found, please install the development package of libpcap" "$LINENO" 5
++else
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: found pcap" >&5
++$as_echo "found pcap" >&6; }
++fi
++
++
++
++
++
++# Checks for libcli
++
++for ac_header in libcli.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "libcli.h" "ac_cv_header_libcli_h" "$ac_includes_default"
++if test "x$ac_cv_header_libcli_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_LIBCLI_H 1
++_ACEOF
++
++fi
++
++done
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cli_print" >&5
++$as_echo_n "checking for library containing cli_print... " >&6; }
++if test "${ac_cv_search_cli_print+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_func_search_save_LIBS=$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 cli_print ();
++int
++main ()
++{
++return cli_print ();
++ ;
++ return 0;
++}
++_ACEOF
++for ac_lib in '' cli; do
++ if test -z "$ac_lib"; then
++ ac_res="none required"
++ else
++ ac_res=-l$ac_lib
++ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
++ fi
++ if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_search_cli_print=$ac_res
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext
++ if test "${ac_cv_search_cli_print+set}" = set; then :
++ break
++fi
++done
++if test "${ac_cv_search_cli_print+set}" = set; then :
++
++else
++ ac_cv_search_cli_print=no
++fi
++rm conftest.$ac_ext
++LIBS=$ac_func_search_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_cli_print" >&5
++$as_echo "$ac_cv_search_cli_print" >&6; }
++ac_res=$ac_cv_search_cli_print
++if test "$ac_res" != no; then :
++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++
++$as_echo "#define CLI_LIBS -lcli" >>confdefs.h
++
++else
++ as_fn_error "libcli could not found, please install development package of libcli" "$LINENO" 5
++
++fi
++
++
++
++
++# Checks for libraries.
++
++
++
++
++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
++
++ax_pthread_ok=no
++
++# We used to check for pthread.h first, but this fails if pthread.h
++# requires special compiler flags (e.g. on True64 or Sequent).
++# It gets checked for in the link test anyway.
++
++# First of all, check if the user has set any of the PTHREAD_LIBS,
++# etcetera environment variables, and if threads linking works using
++# them:
++if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
++ save_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++ save_LIBS="$LIBS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
++$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
++ 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_join ();
++int
++main ()
++{
++return pthread_join ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ax_pthread_ok=yes
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
++$as_echo "$ax_pthread_ok" >&6; }
++ if test x"$ax_pthread_ok" = xno; then
++ PTHREAD_LIBS=""
++ PTHREAD_CFLAGS=""
++ fi
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++fi
++
++# We must check for the threads library under a number of different
++# names; the ordering is very important because some systems
++# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
++# libraries is broken (non-POSIX).
++
++# Create a list of thread flags to try. Items starting with a "-" are
++# C compiler flags, and other items are library names, except for "none"
++# which indicates that we try without any flags at all, and "pthread-config"
++# which is a program returning the flags for the Pth emulation library.
++
++ax_pthread_flags="pthread pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
++
++# The ordering *is* (sometimes) important. Some notes on the
++# individual items follow:
++
++# pthreads: AIX (must check this before -lpthread)
++# none: in case threads are in libc; should be tried before -Kthread and
++# other compiler flags to prevent continual compiler warnings
++# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
++# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
++# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
++# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
++# -pthreads: Solaris/gcc
++# -mthreads: Mingw32/gcc, Lynx/gcc
++# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
++# doesn't hurt to check since this sometimes defines pthreads too;
++# also defines -D_REENTRANT)
++# ... -mt is also the pthreads flag for HP/aCC
++# pthread: Linux, etcetera
++# --thread-safe: KAI C++
++# pthread-config: use pthread-config program (for GNU Pth library)
++
++case "${host_cpu}-${host_os}" in
++ *solaris*)
++
++ # On Solaris (at least, for some versions), libc contains stubbed
++ # (non-functional) versions of the pthreads routines, so link-based
++ # tests will erroneously succeed. (We need to link with -pthreads/-mt/
++ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
++ # a function called by this macro, so we could check for that, but
++ # who knows whether they'll stub that too in a future libc.) So,
++ # we'll just look for -pthreads and -lpthread first:
++
++ ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
++ ;;
++esac
++
++if test x"$ax_pthread_ok" = xno; then
++for flag in $ax_pthread_flags; do
++
++ case $flag in
++ none)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
++$as_echo_n "checking whether pthreads work without any flags... " >&6; }
++ ;;
++
++ -*)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
++$as_echo_n "checking whether pthreads work with $flag... " >&6; }
++ PTHREAD_CFLAGS="$flag"
++ ;;
++
++ pthread-config)
++ # Extract the first word of "pthread-config", so it can be a program name with args.
++set dummy pthread-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ax_pthread_config+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ax_pthread_config"; then
++ ac_cv_prog_ax_pthread_config="$ax_pthread_config" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ax_pthread_config="yes"
++ $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_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
++fi
++fi
++ax_pthread_config=$ac_cv_prog_ax_pthread_config
++if test -n "$ax_pthread_config"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
++$as_echo "$ax_pthread_config" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ if test x"$ax_pthread_config" = xno; then continue; fi
++ PTHREAD_CFLAGS="`pthread-config --cflags`"
++ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
++ ;;
++
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
++$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
++ PTHREAD_LIBS="-l$flag"
++ ;;
++ esac
++
++ save_LIBS="$LIBS"
++ save_CFLAGS="$CFLAGS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++
++ # Check for various functions. We must include pthread.h,
++ # since some functions may be macros. (On the Sequent, we
++ # need a special flag -Kthread to make this header compile.)
++ # We check for pthread_join because it is in -lpthread on IRIX
++ # while pthread_create is in libc. We check for pthread_attr_init
++ # due to DEC craziness with -lpthreads. We check for
++ # pthread_cleanup_push because it is one of the few pthread
++ # functions on Solaris that doesn't have a non-functional libc stub.
++ # We try pthread_create on general principles.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <pthread.h>
++int
++main ()
++{
++pthread_t th; pthread_join(th, 0);
++ pthread_attr_init(0); pthread_cleanup_push(0, 0);
++ pthread_create(0,0,0,0); pthread_cleanup_pop(0);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ax_pthread_ok=yes
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
++$as_echo "$ax_pthread_ok" >&6; }
++ if test "x$ax_pthread_ok" = xyes; then
++ break;
++ fi
++
++ PTHREAD_LIBS=""
++ PTHREAD_CFLAGS=""
++done
++fi
++
++# Various other checks:
++if test "x$ax_pthread_ok" = xyes; then
++ save_LIBS="$LIBS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ save_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++
++ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
++$as_echo_n "checking for joinable pthread attribute... " >&6; }
++ attr_name=unknown
++ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <pthread.h>
++int
++main ()
++{
++int attr=$attr; return attr;
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ attr_name=$attr; break
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ done
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
++$as_echo "$attr_name" >&6; }
++ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
++
++cat >>confdefs.h <<_ACEOF
++#define PTHREAD_CREATE_JOINABLE $attr_name
++_ACEOF
++
++ fi
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
++$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
++ flag=no
++ case "${host_cpu}-${host_os}" in
++ *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
++ *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
++ esac
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
++$as_echo "${flag}" >&6; }
++ if test "x$flag" != xno; then
++ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
++ fi
++
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++
++ # More AIX lossage: must compile with xlc_r or cc_r
++ if test x"$GCC" != xyes; then
++ for ac_prog in xlc_r cc_r
++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 test "${ac_cv_prog_PTHREAD_CC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$PTHREAD_CC"; then
++ ac_cv_prog_PTHREAD_CC="$PTHREAD_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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_PTHREAD_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
++PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
++if test -n "$PTHREAD_CC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
++$as_echo "$PTHREAD_CC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$PTHREAD_CC" && break
++done
++test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
++
++ else
++ PTHREAD_CC=$CC
++ fi
++else
++ PTHREAD_CC="$CC"
++fi
++
++
++
++
++
++# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
++if test x"$ax_pthread_ok" = xyes; then
++
++$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
++
++ :
++else
++ ax_pthread_ok=no
++
++as_fn_error "Your system does not support a pthread variant, libdessert will not work" "$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
++
++
++
++# Checks for header files.
++for ac_header in arpa/inet.h fcntl.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h syslog.h unistd.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"
++eval as_val=\$$as_ac_Header
++ if test "x$as_val" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++
++done
++
++
++# Checks for typedefs, structures, and compiler characteristics.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
++$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
++if test "${ac_cv_header_stdbool_h+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++#include <stdbool.h>
++#ifndef bool
++ "error: bool is not defined"
++#endif
++#ifndef false
++ "error: false is not defined"
++#endif
++#if false
++ "error: false is not 0"
++#endif
++#ifndef true
++ "error: true is not defined"
++#endif
++#if true != 1
++ "error: true is not 1"
++#endif
++#ifndef __bool_true_false_are_defined
++ "error: __bool_true_false_are_defined is not defined"
++#endif
++
++ struct s { _Bool s: 1; _Bool t; } s;
++
++ char a[true == 1 ? 1 : -1];
++ char b[false == 0 ? 1 : -1];
++ char c[__bool_true_false_are_defined == 1 ? 1 : -1];
++ char d[(bool) 0.5 == true ? 1 : -1];
++ bool e = &s;
++ char f[(_Bool) 0.0 == false ? 1 : -1];
++ char g[true];
++ char h[sizeof (_Bool)];
++ char i[sizeof s.t];
++ enum { j = false, k = true, l = false * true, m = true * 256 };
++ /* The following fails for
++ HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
++ _Bool n[m];
++ char o[sizeof n == m * sizeof n[0] ? 1 : -1];
++ char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
++# if defined __xlc__ || defined __GNUC__
++ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
++ reported by James Lemley on 2005-10-05; see
++ http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
++ This test is not quite right, since xlc is allowed to
++ reject this program, as the initializer for xlcbug is
++ not one of the forms that C requires support for.
++ However, doing the test right would require a runtime
++ test, and that would make cross-compilation harder.
++ Let us hope that IBM fixes the xlc bug, and also adds
++ support for this kind of constant expression. In the
++ meantime, this test will reject xlc, which is OK, since
++ our stdbool.h substitute should suffice. We also test
++ this with GCC, where it should work, to detect more
++ quickly whether someone messes up the test in the
++ future. */
++ char digs[] = "0123456789";
++ int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
++# endif
++ /* Catch a bug in an HP-UX C compiler. See
++ http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
++ http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
++ */
++ _Bool q = true;
++ _Bool *pq = &q;
++
++int
++main ()
++{
++
++ *pq |= q;
++ *pq |= ! q;
++ /* Refer to every declared value, to avoid compiler optimizations. */
++ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
++ + !m + !n + !o + !p + !q + !pq);
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_header_stdbool_h=yes
++else
++ ac_cv_header_stdbool_h=no
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
++$as_echo "$ac_cv_header_stdbool_h" >&6; }
++ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
++if test "x$ac_cv_type__Bool" = x""yes; then :
++
++cat >>confdefs.h <<_ACEOF
++#define HAVE__BOOL 1
++_ACEOF
++
++
++fi
++
++if test $ac_cv_header_stdbool_h = yes; then
++
++$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
++
++fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
++$as_echo_n "checking for inline... " >&6; }
++if test "${ac_cv_c_inline+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_cv_c_inline=no
++for ac_kw in inline __inline__ __inline; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#ifndef __cplusplus
++typedef int foo_t;
++static $ac_kw foo_t static_foo () {return 0; }
++$ac_kw foo_t foo () {return 0; }
++#endif
++
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_c_inline=$ac_kw
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ test "$ac_cv_c_inline" != no && break
++done
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
++$as_echo "$ac_cv_c_inline" >&6; }
++
++case $ac_cv_c_inline in
++ inline | yes) ;;
++ *)
++ case $ac_cv_c_inline in
++ no) ac_val=;;
++ *) ac_val=$ac_cv_c_inline;;
++ esac
++ cat >>confdefs.h <<_ACEOF
++#ifndef __cplusplus
++#define inline $ac_val
++#endif
++_ACEOF
++ ;;
++esac
++
++ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t"
++case $ac_cv_c_int32_t in #(
++ no|yes) ;; #(
++ *)
++
++cat >>confdefs.h <<_ACEOF
++#define int32_t $ac_cv_c_int32_t
++_ACEOF
++;;
++esac
++
++ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
++if test "x$ac_cv_type_pid_t" = x""yes; then :
++
++else
++
++cat >>confdefs.h <<_ACEOF
++#define pid_t int
++_ACEOF
++
++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" = x""yes; then :
++
++else
++
++cat >>confdefs.h <<_ACEOF
++#define size_t unsigned int
++_ACEOF
++
++fi
++
++ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
++if test "x$ac_cv_type_ssize_t" = x""yes; then :
++
++else
++
++cat >>confdefs.h <<_ACEOF
++#define ssize_t int
++_ACEOF
++
++fi
++
++ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t"
++case $ac_cv_c_uint16_t in #(
++ no|yes) ;; #(
++ *)
++
++
++cat >>confdefs.h <<_ACEOF
++#define uint16_t $ac_cv_c_uint16_t
++_ACEOF
++;;
++ esac
++
++ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
++case $ac_cv_c_uint32_t in #(
++ no|yes) ;; #(
++ *)
++
++$as_echo "#define _UINT32_T 1" >>confdefs.h
++
++
++cat >>confdefs.h <<_ACEOF
++#define uint32_t $ac_cv_c_uint32_t
++_ACEOF
++;;
++ esac
++
++ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
++case $ac_cv_c_uint64_t in #(
++ no|yes) ;; #(
++ *)
++
++$as_echo "#define _UINT64_T 1" >>confdefs.h
++
++
++cat >>confdefs.h <<_ACEOF
++#define uint64_t $ac_cv_c_uint64_t
++_ACEOF
++;;
++ esac
++
++ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t"
++case $ac_cv_c_uint8_t in #(
++ no|yes) ;; #(
++ *)
++
++$as_echo "#define _UINT8_T 1" >>confdefs.h
++
++
++cat >>confdefs.h <<_ACEOF
++#define uint8_t $ac_cv_c_uint8_t
++_ACEOF
++;;
++ esac
++
++
++# Checks for library functions.
++for ac_header in vfork.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
++if test "x$ac_cv_header_vfork_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_VFORK_H 1
++_ACEOF
++
++fi
++
++done
++
++for ac_func in fork vfork
++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"
++eval as_val=\$$as_ac_var
++ if test "x$as_val" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++done
++
++if test "x$ac_cv_func_fork" = xyes; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
++$as_echo_n "checking for working fork... " >&6; }
++if test "${ac_cv_func_fork_works+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_fork_works=cross
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
++
++ /* By Ruediger Kuhlmann. */
++ return fork () < 0;
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_fork_works=yes
++else
++ ac_cv_func_fork_works=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
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
++$as_echo "$ac_cv_func_fork_works" >&6; }
++
++else
++ ac_cv_func_fork_works=$ac_cv_func_fork
++fi
++if test "x$ac_cv_func_fork_works" = xcross; then
++ case $host in
++ *-*-amigaos* | *-*-msdosdjgpp*)
++ # Override, as these systems have only a dummy fork() stub
++ ac_cv_func_fork_works=no
++ ;;
++ *)
++ ac_cv_func_fork_works=yes
++ ;;
++ esac
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
++$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
++fi
++ac_cv_func_vfork_works=$ac_cv_func_vfork
++if test "x$ac_cv_func_vfork" = xyes; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
++$as_echo_n "checking for working vfork... " >&6; }
++if test "${ac_cv_func_vfork_works+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_vfork_works=cross
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++/* Thanks to Paul Eggert for this test. */
++$ac_includes_default
++#include <sys/wait.h>
++#ifdef HAVE_VFORK_H
++# include <vfork.h>
++#endif
++/* On some sparc systems, changes by the child to local and incoming
++ argument registers are propagated back to the parent. The compiler
++ is told about this with #include <vfork.h>, but some compilers
++ (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a
++ static variable whose address is put into a register that is
++ clobbered by the vfork. */
++static void
++#ifdef __cplusplus
++sparc_address_test (int arg)
++# else
++sparc_address_test (arg) int arg;
++#endif
++{
++ static pid_t child;
++ if (!child) {
++ child = vfork ();
++ if (child < 0) {
++ perror ("vfork");
++ _exit(2);
++ }
++ if (!child) {
++ arg = getpid();
++ write(-1, "", 0);
++ _exit (arg);
++ }
++ }
++}
++
++int
++main ()
++{
++ pid_t parent = getpid ();
++ pid_t child;
++
++ sparc_address_test (0);
++
++ child = vfork ();
++
++ if (child == 0) {
++ /* Here is another test for sparc vfork register problems. This
++ test uses lots of local variables, at least as many local
++ variables as main has allocated so far including compiler
++ temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris
++ 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should
++ reuse the register of parent for one of the local variables,
++ since it will think that parent can't possibly be used any more
++ in this routine. Assigning to the local variable will thus
++ munge parent in the parent process. */
++ pid_t
++ p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
++ p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
++ /* Convince the compiler that p..p7 are live; otherwise, it might
++ use the same hardware register for all 8 local variables. */
++ if (p != p1 || p != p2 || p != p3 || p != p4
++ || p != p5 || p != p6 || p != p7)
++ _exit(1);
++
++ /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
++ from child file descriptors. If the child closes a descriptor
++ before it execs or exits, this munges the parent's descriptor
++ as well. Test for this by closing stdout in the child. */
++ _exit(close(fileno(stdout)) != 0);
++ } else {
++ int status;
++ struct stat st;
++
++ while (wait(&status) != child)
++ ;
++ return (
++ /* Was there some problem with vforking? */
++ child < 0
++
++ /* Did the child fail? (This shouldn't happen.) */
++ || status
++
++ /* Did the vfork/compiler bug occur? */
++ || parent != getpid()
++
++ /* Did the file descriptor bug occur? */
++ || fstat(fileno(stdout), &st) != 0
++ );
++ }
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_vfork_works=yes
++else
++ ac_cv_func_vfork_works=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
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
++$as_echo "$ac_cv_func_vfork_works" >&6; }
++
++fi;
++if test "x$ac_cv_func_fork_works" = xcross; then
++ ac_cv_func_vfork_works=$ac_cv_func_vfork
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
++$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
++fi
++
++if test "x$ac_cv_func_vfork_works" = xyes; then
++
++$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
++
++else
++
++$as_echo "#define vfork fork" >>confdefs.h
++
++fi
++if test "x$ac_cv_func_fork_works" = xyes; then
++
++$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
++
++fi
++
++for ac_header in stdlib.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
++if test "x$ac_cv_header_stdlib_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_STDLIB_H 1
++_ACEOF
++
++fi
++
++done
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
++$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
++if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_malloc_0_nonnull=no
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#if defined STDC_HEADERS || defined HAVE_STDLIB_H
++# include <stdlib.h>
++#else
++char *malloc ();
++#endif
++
++int
++main ()
++{
++return ! malloc (0);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_malloc_0_nonnull=yes
++else
++ ac_cv_func_malloc_0_nonnull=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
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
++$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
++if test $ac_cv_func_malloc_0_nonnull = yes; then :
++
++$as_echo "#define HAVE_MALLOC 1" >>confdefs.h
++
++else
++ $as_echo "#define HAVE_MALLOC 0" >>confdefs.h
++
++ case " $LIBOBJS " in
++ *" malloc.$ac_objext "* ) ;;
++ *) LIBOBJS="$LIBOBJS malloc.$ac_objext"
++ ;;
++esac
++
++
++$as_echo "#define malloc rpl_malloc" >>confdefs.h
++
++fi
++
++
++for ac_header in stdlib.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
++if test "x$ac_cv_header_stdlib_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_STDLIB_H 1
++_ACEOF
++
++fi
++
++done
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5
++$as_echo_n "checking for GNU libc compatible realloc... " >&6; }
++if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_realloc_0_nonnull=no
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#if defined STDC_HEADERS || defined HAVE_STDLIB_H
++# include <stdlib.h>
++#else
++char *realloc ();
++#endif
++
++int
++main ()
++{
++return ! realloc (0, 0);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_realloc_0_nonnull=yes
++else
++ ac_cv_func_realloc_0_nonnull=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
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5
++$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; }
++if test $ac_cv_func_realloc_0_nonnull = yes; then :
++
++$as_echo "#define HAVE_REALLOC 1" >>confdefs.h
++
++else
++ $as_echo "#define HAVE_REALLOC 0" >>confdefs.h
++
++ case " $LIBOBJS " in
++ *" realloc.$ac_objext "* ) ;;
++ *) LIBOBJS="$LIBOBJS realloc.$ac_objext"
++ ;;
++esac
++
++
++$as_echo "#define realloc rpl_realloc" >>confdefs.h
++
++fi
++
++
++for ac_func in gethostname gettimeofday localtime_r memmove memset socket strdup strerror strtol
++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"
++eval as_val=\$$as_ac_var
++ if test "x$as_val" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++done
++
++
++# Checking for documentation generation
++
++
++
++
++
++
++
++
++
++
++
++# Files:
++DX_PROJECT=${PACKAGE_NAME}
++
++DX_CONFIG=DES-SERT.doxyfile
++
++DX_DOCDIR=doxygen
++
++
++# Environment variables used inside doxygen.cfg:
++DX_ENV="$DX_ENV SRCDIR='$srcdir'"
++
++DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'"
++
++DX_ENV="$DX_ENV DOCDIR='$DX_DOCDIR'"
++
++DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'"
++
++
++# Doxygen itself:
++
++
++
++ # Check whether --enable-doxygen-doc was given.
++if test "${enable_doxygen_doc+set}" = set; then :
++ enableval=$enable_doxygen_doc;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_doc=1
++
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_doc=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_doc=1
++
++
++
++fi
++
++if test "$DX_FLAG_doc" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args.
++set dummy ${ac_tool_prefix}doxygen; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_DOXYGEN+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_DOXYGEN in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_DOXYGEN="$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
++DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN
++if test -n "$DX_DOXYGEN"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5
++$as_echo "$DX_DOXYGEN" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_DOXYGEN"; then
++ ac_pt_DX_DOXYGEN=$DX_DOXYGEN
++ # Extract the first word of "doxygen", so it can be a program name with args.
++set dummy doxygen; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_DOXYGEN+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_DOXYGEN in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_DOXYGEN="$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
++ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN
++if test -n "$ac_pt_DX_DOXYGEN"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5
++$as_echo "$ac_pt_DX_DOXYGEN" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_DOXYGEN" = x; then
++ DX_DOXYGEN=""
++ 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
++ DX_DOXYGEN=$ac_pt_DX_DOXYGEN
++ fi
++else
++ DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_DOXYGEN" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5
++$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;}
++ DX_FLAG_doc=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args.
++set dummy ${ac_tool_prefix}perl; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_PERL+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_PERL in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_PERL="$DX_PERL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_PERL="$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
++DX_PERL=$ac_cv_path_DX_PERL
++if test -n "$DX_PERL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5
++$as_echo "$DX_PERL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_PERL"; then
++ ac_pt_DX_PERL=$DX_PERL
++ # Extract the first word of "perl", so it can be a program name with args.
++set dummy perl; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_PERL+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_PERL in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_PERL="$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
++ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL
++if test -n "$ac_pt_DX_PERL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5
++$as_echo "$ac_pt_DX_PERL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_PERL" = x; then
++ DX_PERL=""
++ 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
++ DX_PERL=$ac_pt_DX_PERL
++ fi
++else
++ DX_PERL="$ac_cv_path_DX_PERL"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_PERL" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5
++$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;}
++ DX_FLAG_doc=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_doc" = 1; then
++ if :; then
++ DX_COND_doc_TRUE=
++ DX_COND_doc_FALSE='#'
++else
++ DX_COND_doc_TRUE='#'
++ DX_COND_doc_FALSE=
++fi
++
++ DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'"
++
++ :
++else
++ if false; then
++ DX_COND_doc_TRUE=
++ DX_COND_doc_FALSE='#'
++else
++ DX_COND_doc_TRUE='#'
++ DX_COND_doc_FALSE=
++fi
++
++
++ :
++fi
++
++
++# Dot for graphics:
++
++
++
++ # Check whether --enable-doxygen-dot was given.
++if test "${enable_doxygen_dot+set}" = set; then :
++ enableval=$enable_doxygen_dot;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_dot=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-dot requires doxygen-dot" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_dot=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_dot=1
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0
++
++
++
++fi
++
++if test "$DX_FLAG_dot" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dot; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_DOT+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_DOT in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_DOT="$DX_DOT" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_DOT="$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
++DX_DOT=$ac_cv_path_DX_DOT
++if test -n "$DX_DOT"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5
++$as_echo "$DX_DOT" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_DOT"; then
++ ac_pt_DX_DOT=$DX_DOT
++ # Extract the first word of "dot", so it can be a program name with args.
++set dummy dot; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_DOT+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_DOT in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_DOT="$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
++ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT
++if test -n "$ac_pt_DX_DOT"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5
++$as_echo "$ac_pt_DX_DOT" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_DOT" = x; then
++ DX_DOT=""
++ 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
++ DX_DOT=$ac_pt_DX_DOT
++ fi
++else
++ DX_DOT="$ac_cv_path_DX_DOT"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_DOT" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5
++$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;}
++ DX_FLAG_dot=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_dot" = 1; then
++ if :; then
++ DX_COND_dot_TRUE=
++ DX_COND_dot_FALSE='#'
++else
++ DX_COND_dot_TRUE='#'
++ DX_COND_dot_FALSE=
++fi
++
++ DX_ENV="$DX_ENV HAVE_DOT='YES'"
++
++ DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'"
++
++ :
++else
++ if false; then
++ DX_COND_dot_TRUE=
++ DX_COND_dot_FALSE='#'
++else
++ DX_COND_dot_TRUE='#'
++ DX_COND_dot_FALSE=
++fi
++
++ DX_ENV="$DX_ENV HAVE_DOT='NO'"
++
++ :
++fi
++
++
++# Man pages generation:
++
++
++
++ # Check whether --enable-doxygen-man was given.
++if test "${enable_doxygen_man+set}" = set; then :
++ enableval=$enable_doxygen_man;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_man=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-man requires doxygen-man" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_man=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-man" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_man=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0
++
++
++
++fi
++
++if test "$DX_FLAG_man" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_man" = 1; then
++ if :; then
++ DX_COND_man_TRUE=
++ DX_COND_man_FALSE='#'
++else
++ DX_COND_man_TRUE='#'
++ DX_COND_man_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_MAN='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_man_TRUE=
++ DX_COND_man_FALSE='#'
++else
++ DX_COND_man_TRUE='#'
++ DX_COND_man_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_MAN='NO'"
++
++ :
++fi
++
++
++# RTF file generation:
++
++
++
++ # Check whether --enable-doxygen-rtf was given.
++if test "${enable_doxygen_rtf+set}" = set; then :
++ enableval=$enable_doxygen_rtf;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_rtf=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-rtf requires doxygen-rtf" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_rtf=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_rtf=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0
++
++
++
++fi
++
++if test "$DX_FLAG_rtf" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_rtf" = 1; then
++ if :; then
++ DX_COND_rtf_TRUE=
++ DX_COND_rtf_FALSE='#'
++else
++ DX_COND_rtf_TRUE='#'
++ DX_COND_rtf_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_RTF='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_rtf_TRUE=
++ DX_COND_rtf_FALSE='#'
++else
++ DX_COND_rtf_TRUE='#'
++ DX_COND_rtf_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_RTF='NO'"
++
++ :
++fi
++
++
++# XML file generation:
++
++
++
++ # Check whether --enable-doxygen-xml was given.
++if test "${enable_doxygen_xml+set}" = set; then :
++ enableval=$enable_doxygen_xml;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_xml=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-xml requires doxygen-xml" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_xml=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_xml=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0
++
++
++
++fi
++
++if test "$DX_FLAG_xml" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_xml" = 1; then
++ if :; then
++ DX_COND_xml_TRUE=
++ DX_COND_xml_FALSE='#'
++else
++ DX_COND_xml_TRUE='#'
++ DX_COND_xml_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_XML='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_xml_TRUE=
++ DX_COND_xml_FALSE='#'
++else
++ DX_COND_xml_TRUE='#'
++ DX_COND_xml_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_XML='NO'"
++
++ :
++fi
++
++
++# (Compressed) HTML help generation:
++
++
++
++ # Check whether --enable-doxygen-chm was given.
++if test "${enable_doxygen_chm+set}" = set; then :
++ enableval=$enable_doxygen_chm;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_chm=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-chm requires doxygen-chm" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_chm=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_chm=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0
++
++
++
++fi
++
++if test "$DX_FLAG_chm" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args.
++set dummy ${ac_tool_prefix}hhc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_HHC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_HHC in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_HHC="$DX_HHC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_HHC="$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
++DX_HHC=$ac_cv_path_DX_HHC
++if test -n "$DX_HHC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5
++$as_echo "$DX_HHC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_HHC"; then
++ ac_pt_DX_HHC=$DX_HHC
++ # Extract the first word of "hhc", so it can be a program name with args.
++set dummy hhc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_HHC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_HHC in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_HHC="$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
++ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC
++if test -n "$ac_pt_DX_HHC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5
++$as_echo "$ac_pt_DX_HHC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_HHC" = x; then
++ DX_HHC=""
++ 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
++ DX_HHC=$ac_pt_DX_HHC
++ fi
++else
++ DX_HHC="$ac_cv_path_DX_HHC"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_HHC" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5
++$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;}
++ DX_FLAG_chm=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_chm" = 1; then
++ if :; then
++ DX_COND_chm_TRUE=
++ DX_COND_chm_FALSE='#'
++else
++ DX_COND_chm_TRUE='#'
++ DX_COND_chm_FALSE=
++fi
++
++ DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'"
++
++ DX_ENV="$DX_ENV GENERATE_HTML='YES'"
++
++ DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_chm_TRUE=
++ DX_COND_chm_FALSE='#'
++else
++ DX_COND_chm_TRUE='#'
++ DX_COND_chm_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'"
++
++ :
++fi
++
++
++# Seperate CHI file generation.
++
++
++
++ # Check whether --enable-doxygen-chi was given.
++if test "${enable_doxygen_chi+set}" = set; then :
++ enableval=$enable_doxygen_chi;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_chi=1
++
++
++test "$DX_FLAG_chm" = "1" \
++|| as_fn_error "doxygen-chi requires doxygen-chi" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_chi=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_chi=0
++
++
++test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0
++
++
++
++fi
++
++if test "$DX_FLAG_chi" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_chi" = 1; then
++ if :; then
++ DX_COND_chi_TRUE=
++ DX_COND_chi_FALSE='#'
++else
++ DX_COND_chi_TRUE='#'
++ DX_COND_chi_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_CHI='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_chi_TRUE=
++ DX_COND_chi_FALSE='#'
++else
++ DX_COND_chi_TRUE='#'
++ DX_COND_chi_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_CHI='NO'"
++
++ :
++fi
++
++
++# Plain HTML pages generation:
++
++
++
++ # Check whether --enable-doxygen-html was given.
++if test "${enable_doxygen_html+set}" = set; then :
++ enableval=$enable_doxygen_html;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_html=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-html requires doxygen-html" "$LINENO" 5
++
++test "$DX_FLAG_chm" = "0" \
++|| as_fn_error "doxygen-html contradicts doxygen-html" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_html=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-html" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_html=1
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0
++
++
++test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0
++
++
++
++fi
++
++if test "$DX_FLAG_html" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_html" = 1; then
++ if :; then
++ DX_COND_html_TRUE=
++ DX_COND_html_FALSE='#'
++else
++ DX_COND_html_TRUE='#'
++ DX_COND_html_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_HTML='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_html_TRUE=
++ DX_COND_html_FALSE='#'
++else
++ DX_COND_html_TRUE='#'
++ DX_COND_html_FALSE=
++fi
++
++ test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'"
++
++ :
++fi
++
++
++# PostScript file generation:
++
++
++
++ # Check whether --enable-doxygen-ps was given.
++if test "${enable_doxygen_ps+set}" = set; then :
++ enableval=$enable_doxygen_ps;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_ps=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-ps requires doxygen-ps" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_ps=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_ps=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0
++
++
++
++fi
++
++if test "$DX_FLAG_ps" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args.
++set dummy ${ac_tool_prefix}latex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_LATEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_LATEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_LATEX="$DX_LATEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_LATEX="$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
++DX_LATEX=$ac_cv_path_DX_LATEX
++if test -n "$DX_LATEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5
++$as_echo "$DX_LATEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_LATEX"; then
++ ac_pt_DX_LATEX=$DX_LATEX
++ # Extract the first word of "latex", so it can be a program name with args.
++set dummy latex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_LATEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_LATEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_LATEX="$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
++ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX
++if test -n "$ac_pt_DX_LATEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5
++$as_echo "$ac_pt_DX_LATEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_LATEX" = x; then
++ DX_LATEX=""
++ 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
++ DX_LATEX=$ac_pt_DX_LATEX
++ fi
++else
++ DX_LATEX="$ac_cv_path_DX_LATEX"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_LATEX" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5
++$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;}
++ DX_FLAG_ps=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args.
++set dummy ${ac_tool_prefix}makeindex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_MAKEINDEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_MAKEINDEX="$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
++DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX
++if test -n "$DX_MAKEINDEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5
++$as_echo "$DX_MAKEINDEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_MAKEINDEX"; then
++ ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX
++ # Extract the first word of "makeindex", so it can be a program name with args.
++set dummy makeindex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_MAKEINDEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_MAKEINDEX="$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
++ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX
++if test -n "$ac_pt_DX_MAKEINDEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5
++$as_echo "$ac_pt_DX_MAKEINDEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_MAKEINDEX" = x; then
++ DX_MAKEINDEX=""
++ 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
++ DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX
++ fi
++else
++ DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_MAKEINDEX" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5
++$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;}
++ DX_FLAG_ps=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dvips; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_DVIPS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_DVIPS in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_DVIPS="$DX_DVIPS" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_DVIPS="$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
++DX_DVIPS=$ac_cv_path_DX_DVIPS
++if test -n "$DX_DVIPS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5
++$as_echo "$DX_DVIPS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_DVIPS"; then
++ ac_pt_DX_DVIPS=$DX_DVIPS
++ # Extract the first word of "dvips", so it can be a program name with args.
++set dummy dvips; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_DVIPS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_DVIPS in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_DVIPS="$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
++ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS
++if test -n "$ac_pt_DX_DVIPS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5
++$as_echo "$ac_pt_DX_DVIPS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_DVIPS" = x; then
++ DX_DVIPS=""
++ 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
++ DX_DVIPS=$ac_pt_DX_DVIPS
++ fi
++else
++ DX_DVIPS="$ac_cv_path_DX_DVIPS"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_DVIPS" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5
++$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;}
++ DX_FLAG_ps=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args.
++set dummy ${ac_tool_prefix}egrep; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_EGREP in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_EGREP="$DX_EGREP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_EGREP="$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
++DX_EGREP=$ac_cv_path_DX_EGREP
++if test -n "$DX_EGREP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5
++$as_echo "$DX_EGREP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_EGREP"; then
++ ac_pt_DX_EGREP=$DX_EGREP
++ # Extract the first word of "egrep", so it can be a program name with args.
++set dummy egrep; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_EGREP in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_EGREP="$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
++ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP
++if test -n "$ac_pt_DX_EGREP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5
++$as_echo "$ac_pt_DX_EGREP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_EGREP" = x; then
++ DX_EGREP=""
++ 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
++ DX_EGREP=$ac_pt_DX_EGREP
++ fi
++else
++ DX_EGREP="$ac_cv_path_DX_EGREP"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_EGREP" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5
++$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;}
++ DX_FLAG_ps=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_ps" = 1; then
++ if :; then
++ DX_COND_ps_TRUE=
++ DX_COND_ps_FALSE='#'
++else
++ DX_COND_ps_TRUE='#'
++ DX_COND_ps_FALSE=
++fi
++
++
++ :
++else
++ if false; then
++ DX_COND_ps_TRUE=
++ DX_COND_ps_FALSE='#'
++else
++ DX_COND_ps_TRUE='#'
++ DX_COND_ps_FALSE=
++fi
++
++
++ :
++fi
++
++
++# PDF file generation:
++
++
++
++ # Check whether --enable-doxygen-pdf was given.
++if test "${enable_doxygen_pdf+set}" = set; then :
++ enableval=$enable_doxygen_pdf;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_pdf=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-pdf requires doxygen-pdf" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_pdf=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_pdf=1
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0
++
++
++
++fi
++
++if test "$DX_FLAG_pdf" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args.
++set dummy ${ac_tool_prefix}pdflatex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_PDFLATEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_PDFLATEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_PDFLATEX="$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
++DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX
++if test -n "$DX_PDFLATEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5
++$as_echo "$DX_PDFLATEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_PDFLATEX"; then
++ ac_pt_DX_PDFLATEX=$DX_PDFLATEX
++ # Extract the first word of "pdflatex", so it can be a program name with args.
++set dummy pdflatex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_PDFLATEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_PDFLATEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_PDFLATEX="$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
++ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX
++if test -n "$ac_pt_DX_PDFLATEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5
++$as_echo "$ac_pt_DX_PDFLATEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_PDFLATEX" = x; then
++ DX_PDFLATEX=""
++ 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
++ DX_PDFLATEX=$ac_pt_DX_PDFLATEX
++ fi
++else
++ DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_PDFLATEX" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5
++$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;}
++ DX_FLAG_pdf=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args.
++set dummy ${ac_tool_prefix}makeindex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_MAKEINDEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_MAKEINDEX="$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
++DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX
++if test -n "$DX_MAKEINDEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5
++$as_echo "$DX_MAKEINDEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_MAKEINDEX"; then
++ ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX
++ # Extract the first word of "makeindex", so it can be a program name with args.
++set dummy makeindex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_MAKEINDEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_MAKEINDEX="$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
++ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX
++if test -n "$ac_pt_DX_MAKEINDEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5
++$as_echo "$ac_pt_DX_MAKEINDEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_MAKEINDEX" = x; then
++ DX_MAKEINDEX=""
++ 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
++ DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX
++ fi
++else
++ DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_MAKEINDEX" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5
++$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;}
++ DX_FLAG_pdf=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args.
++set dummy ${ac_tool_prefix}egrep; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_EGREP in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_EGREP="$DX_EGREP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_EGREP="$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
++DX_EGREP=$ac_cv_path_DX_EGREP
++if test -n "$DX_EGREP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5
++$as_echo "$DX_EGREP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_EGREP"; then
++ ac_pt_DX_EGREP=$DX_EGREP
++ # Extract the first word of "egrep", so it can be a program name with args.
++set dummy egrep; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_EGREP in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_EGREP="$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
++ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP
++if test -n "$ac_pt_DX_EGREP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5
++$as_echo "$ac_pt_DX_EGREP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_EGREP" = x; then
++ DX_EGREP=""
++ 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
++ DX_EGREP=$ac_pt_DX_EGREP
++ fi
++else
++ DX_EGREP="$ac_cv_path_DX_EGREP"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_EGREP" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5
++$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;}
++ DX_FLAG_pdf=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_pdf" = 1; then
++ if :; then
++ DX_COND_pdf_TRUE=
++ DX_COND_pdf_FALSE='#'
++else
++ DX_COND_pdf_TRUE='#'
++ DX_COND_pdf_FALSE=
++fi
++
++
++ :
++else
++ if false; then
++ DX_COND_pdf_TRUE=
++ DX_COND_pdf_FALSE='#'
++else
++ DX_COND_pdf_TRUE='#'
++ DX_COND_pdf_FALSE=
++fi
++
++
++ :
++fi
++
++
++# LaTeX generation for PS and/or PDF:
++if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then
++ if :; then
++ DX_COND_latex_TRUE=
++ DX_COND_latex_FALSE='#'
++else
++ DX_COND_latex_TRUE='#'
++ DX_COND_latex_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_LATEX='YES'"
++
++else
++ if false; then
++ DX_COND_latex_TRUE=
++ DX_COND_latex_FALSE='#'
++else
++ DX_COND_latex_TRUE='#'
++ DX_COND_latex_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_LATEX='NO'"
++
++fi
++
++# Paper size for PS and/or PDF:
++
++case "$DOXYGEN_PAPER_SIZE" in
++#(
++"")
++ DOXYGEN_PAPER_SIZE=""
++
++;; #(
++a4wide|a4|letter|legal|executive)
++ DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'"
++
++;; #(
++*)
++ as_fn_error "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5
++;;
++esac
++
++#For debugging:
++#echo DX_FLAG_doc=$DX_FLAG_doc
++#echo DX_FLAG_dot=$DX_FLAG_dot
++#echo DX_FLAG_man=$DX_FLAG_man
++#echo DX_FLAG_html=$DX_FLAG_html
++#echo DX_FLAG_chm=$DX_FLAG_chm
++#echo DX_FLAG_chi=$DX_FLAG_chi
++#echo DX_FLAG_rtf=$DX_FLAG_rtf
++#echo DX_FLAG_xml=$DX_FLAG_xml
++#echo DX_FLAG_pdf=$DX_FLAG_pdf
++#echo DX_FLAG_ps=$DX_FLAG_ps
++#echo DX_ENV=$DX_ENV
++
++
++ac_config_files="$ac_config_files Makefile src/Makefile src/snmp/Makefile src/libdessert/Makefile include/Makefile libdessert.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
++ test "x$cache_file" != "x/dev/null" &&
++ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
++$as_echo "$as_me: updating cache $cache_file" >&6;}
++ cat confcache >$cache_file
++ 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=
++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
++
++
++ if test -n "$EXEEXT"; then
++ am__EXEEXT_TRUE=
++ am__EXEEXT_FALSE='#'
++else
++ am__EXEEXT_TRUE='#'
++ am__EXEEXT_FALSE=
++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 "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_doc\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_doc\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_dot\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_dot\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_man\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_man\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_rtf\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_rtf\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_xml\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_xml\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_chm\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_chm\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_chi\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_chi\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_html\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_html\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_ps\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_ps\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_pdf\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_pdf\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_latex\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_latex\" 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.
++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 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=$?; test $as_status -eq 0 && as_status=1
++ if test "$3"; then
++ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
++ fi
++ $as_echo "$as_me: error: $1" >&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 -p'.
++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++ as_ln_s='cp -p'
++ elif ln conf$$.file conf$$ 2>/dev/null; then
++ as_ln_s=ln
++ else
++ as_ln_s='cp -p'
++ fi
++else
++ as_ln_s='cp -p'
++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
++
++if test -x / >/dev/null 2>&1; then
++ as_test_x='test -x'
++else
++ if ls -dL / >/dev/null 2>&1; then
++ as_ls_L_option=L
++ else
++ as_ls_L_option=
++ fi
++ as_test_x='
++ eval sh -c '\''
++ if test -d "$1"; then
++ test -d "$1/.";
++ else
++ case $1 in #(
++ -*)set "./$1";;
++ esac;
++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
++ ???[sx]*):;;*)false;;esac;fi
++ '\'' sh
++ '
++fi
++as_executable_p=$as_test_x
++
++# 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 libdessert $as_me 0.86.14, which was
++generated by GNU Autoconf 2.65. 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 <des-sert@spline.inf.fu-berlin.de>."
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
++ac_cs_version="\\
++libdessert config.status 0.86.14
++configured by $0, generated by GNU Autoconf 2.65,
++ with options \\"\$ac_cs_config\\"
++
++Copyright (C) 2009 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=$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"` ;;
++ 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 "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
++macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
++enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
++enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
++pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
++enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
++host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
++host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
++host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
++build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
++build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
++build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
++SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
++Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
++GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
++EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
++FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
++LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
++NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
++LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
++max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
++ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
++exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
++lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
++lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
++lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
++reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
++reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
++deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
++file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
++AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
++AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
++STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
++RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
++old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
++CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
++compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
++GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
++objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
++SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
++ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
++MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
++lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
++lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
++lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
++need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
++DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
++NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
++LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
++OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
++OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
++libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
++shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
++enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
++export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
++whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
++compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
++old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
++allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
++no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
++inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
++link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
++fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
++always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
++export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
++include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
++prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
++variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
++need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
++need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
++version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
++runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
++shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
++shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
++libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
++library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
++soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
++postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
++sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
++sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
++enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
++enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
++enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
++old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
++striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
++
++LTCC='$LTCC'
++LTCFLAGS='$LTCFLAGS'
++compiler='$compiler_DEFAULT'
++
++# Quote evaled strings.
++for var in SED \
++GREP \
++EGREP \
++FGREP \
++LD \
++NM \
++LN_S \
++lt_SP2NL \
++lt_NL2SP \
++reload_flag \
++OBJDUMP \
++deplibs_check_method \
++file_magic_cmd \
++AR \
++AR_FLAGS \
++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 \
++SHELL \
++ECHO \
++lt_prog_compiler_no_builtin_flag \
++lt_prog_compiler_wl \
++lt_prog_compiler_pic \
++lt_prog_compiler_static \
++lt_cv_prog_compiler_c_o \
++need_locks \
++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_flag_spec_ld \
++hardcode_libdir_separator \
++fix_srcfile_path \
++exclude_expsyms \
++include_expsyms \
++file_list_spec \
++variables_saved_for_relink \
++libname_spec \
++library_names_spec \
++soname_spec \
++finish_eval \
++old_striplib \
++striplib; do
++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++ *[\\\\\\\`\\"\\\$]*)
++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$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 \
++postinstall_cmds \
++postuninstall_cmds \
++finish_cmds \
++sys_lib_search_path_spec \
++sys_lib_dlsearch_path_spec; do
++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++ *[\\\\\\\`\\"\\\$]*)
++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
++ ;;
++ *)
++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
++ ;;
++ esac
++done
++
++# Fix-up fallback echo if it was mangled by the above quoting rules.
++case \$lt_ECHO in
++*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
++ ;;
++esac
++
++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" ;;
++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
++ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
++ "src/snmp/Makefile") CONFIG_FILES="$CONFIG_FILES src/snmp/Makefile" ;;
++ "src/libdessert/Makefile") CONFIG_FILES="$CONFIG_FILES src/libdessert/Makefile" ;;
++ "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
++ "libdessert.pc") CONFIG_FILES="$CONFIG_FILES libdessert.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=
++ trap 'exit_status=$?
++ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$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 -n "$tmp" && test -d "$tmp"
++} ||
++{
++ tmp=./conf$$-$RANDOM
++ (umask 077 && mkdir "$tmp")
++} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
++
++# 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 2>/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 {' >"$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 >>"\$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
++' <conf$$subs.awk | sed '
++/^[^""]/{
++ N
++ s/\n//
++}
++' >>$CONFIG_STATUS || ac_write_fail=1
++rm -f conf$$subs.awk
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++_ACAWK
++cat >>"\$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 < "$tmp/subs1.awk" > "$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 $(srcdir),
++# ${srcdir} and @srcdir@ 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[ ]*=/{
++s/:*\$(srcdir):*/:/
++s/:*\${srcdir}:*/:/
++s/:*@srcdir@:*/:/
++s/^\([^=]*=[ ]*\):*/\1/
++s/:*$//
++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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h`
++ if test -z "$ac_t"; 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
++' <confdefs.h | sed '
++s/'"$ac_delim"'/"\\\
++"/g' >>$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="$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 "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 >"$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 "$tmp/subs.awk" >$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' "$tmp/out"`; test -n "$ac_out"; } &&
++ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$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 "$tmp/stdin"
++ case $ac_file in
++ -) cat "$tmp/out" && rm -f "$tmp/out";;
++ *) rm -f "$ac_file" && mv "$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 "$tmp/defines.awk"' "$ac_file_inputs"
++ } >"$tmp/config.h" \
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
++ if diff "$ac_file" "$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 "$tmp/config.h" "$ac_file" \
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
++ fi
++ else
++ $as_echo "/* $configure_input */" \
++ && eval '$AWK -f "$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"`
++ # When using ansi2knr, U may be empty or an underscore; expand it
++ U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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 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=""
++
++# ### 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
++
++# 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
++
++# How to create reloadable object files.
++reload_flag=$lt_reload_flag
++reload_cmds=$lt_reload_cmds
++
++# 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
++
++# The archiver.
++AR=$lt_AR
++AR_FLAGS=$lt_AR_FLAGS
++
++# 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
++
++# 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
++
++# The name of the directory that contains temporary libtool files.
++objdir=$objdir
++
++# Shell to use when invoking shell scripts.
++SHELL=$lt_SHELL
++
++# An echo program that does not interpret backslashes.
++ECHO=$lt_ECHO
++
++# 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
++
++# 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
++
++# 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
++
++# 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
++
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
++# Additional compiler flags for building library objects.
++pic_flag=$lt_lt_prog_compiler_pic
++
++# 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
++
++# If ld is used when linking, flag to hardcode \$libdir into a binary
++# during linking. This must work even if \$libdir does not exist.
++hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
++
++# 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
++
++# Fix the shell variable \$srcfile for the compiler.
++fix_srcfile_path=$lt_fix_srcfile_path
++
++# 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
++
++# 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
++
++# ### 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ case $xsi_shell in
++ yes)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++}
++
++# func_basename file
++func_basename ()
++{
++ func_basename_result="${1##*/}"
++}
++
++# 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 ()
++{
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++ func_basename_result="${1##*/}"
++}
++
++# func_stripname 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).
++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}"}
++}
++
++# func_opt_split
++func_opt_split ()
++{
++ func_opt_split_opt=${1%%=*}
++ func_opt_split_arg=${1#*=}
++}
++
++# func_lo2o object
++func_lo2o ()
++{
++ case ${1} in
++ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
++ *) func_lo2o_result=${1} ;;
++ esac
++}
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=${1%.*}.lo
++}
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=$(( $* ))
++}
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=${#1}
++}
++
++_LT_EOF
++ ;;
++ *) # Bourne compatible functions.
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ # 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 file
++func_basename ()
++{
++ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
++}
++
++
++# func_stripname 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).
++# func_strip_suffix prefix name
++func_stripname ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "X${3}" \
++ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "X${3}" \
++ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
++ esac
++}
++
++# sed scripts:
++my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
++my_sed_long_arg='1s/^-[^=]*=//'
++
++# func_opt_split
++func_opt_split ()
++{
++ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
++ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
++}
++
++# func_lo2o object
++func_lo2o ()
++{
++ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
++}
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
++}
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=`expr "$@"`
++}
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
++}
++
++_LT_EOF
++esac
++
++case $lt_shell_append in
++ yes)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "$1+=\$2"
++}
++_LT_EOF
++ ;;
++ *)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "$1=\$$1\$2"
++}
++
++_LT_EOF
++ ;;
++ esac
++
++
++ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ mv -f "$cfgfile" "$ofile" ||
++ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
++ chmod +x "$ofile"
++
++ ;;
++
++ 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 $?
++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
++
++
+Index: libdessert0.86-0.86.14/configure.ac
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/configure.ac 2009-12-09 16:38:27.235595145 +0100
+@@ -0,0 +1,97 @@
++# -*- Autoconf -*-
++# Process this file with autoconf to produce a configure script.
++
++AC_PREREQ([2.61])
++AC_INIT([libdessert], [0.86.14], [des-sert@spline.inf.fu-berlin.de])
++AM_INIT_AUTOMAKE([-Wall gnu dist-bzip2])
++AC_CONFIG_MACRO_DIR([m4])
++
++AC_CONFIG_SRCDIR([src/libdessert/dessert_core.c])
++AC_CONFIG_HEADERS([config.h])
++
++LIBDESSERT_LIBRARY_VERSION=0:86:14
++AC_SUBST([LIBDESSERT_LIBRARY_VERSION])
++
++# Checks for programs.
++AC_PROG_CC
++AC_PROG_INSTALL
++AC_PROG_LN_S
++
++# Checks for libtool
++
++# Debian Stable has no libtool2 yet so use old invocation
++#LT_INIT
++AM_PROG_LIBTOOL
++
++# Checks for net-snmp-config
++AC_CHECK_NET_SNMP
++
++AC_SUBST([SNMP_LIBS])
++AC_SUBST([SNMP_CFLAGS])
++
++# Checks for pcap-config
++AC_CHECK_PCAP
++
++AC_SUBST([PCAP_LIBS])
++AC_SUBST([PCAP_CFLAGS])
++
++# Checks for libcli
++
++AC_CHECK_HEADERS([libcli.h])
++
++AC_SEARCH_LIBS([cli_print],
++ [cli],
++ [AC_DEFINE([CLI_LIBS],[-lcli],[defines linkoption for libcli])],
++ [AC_MSG_ERROR([libcli could not found, please install development package of libcli])]
++)
++
++AC_SUBST([CLI_LIBS])
++
++# Checks for libraries.
++
++AX_PTHREAD(,[
++AC_MSG_ERROR([Your system does not support a pthread variant, libdessert will not work])
++])
++
++# Checks for header files.
++AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h syslog.h unistd.h])
++
++# Checks for typedefs, structures, and compiler characteristics.
++AC_HEADER_STDBOOL
++AC_C_INLINE
++AC_TYPE_INT32_T
++AC_TYPE_PID_T
++AC_TYPE_SIZE_T
++AC_TYPE_SSIZE_T
++AC_TYPE_UINT16_T
++AC_TYPE_UINT32_T
++AC_TYPE_UINT64_T
++AC_TYPE_UINT8_T
++
++# Checks for library functions.
++AC_FUNC_FORK
++AC_FUNC_MALLOC
++AC_FUNC_REALLOC
++AC_CHECK_FUNCS([gethostname gettimeofday localtime_r memmove memset socket strdup strerror strtol])
++
++# Checking for documentation generation
++
++DX_HTML_FEATURE([ON])
++DX_CHM_FEATURE([OFF])
++DX_CHI_FEATURE([OFF])
++DX_MAN_FEATURE([OFF])
++DX_RTF_FEATURE([OFF])
++DX_XML_FEATURE([OFF])
++DX_PDF_FEATURE([ON])
++DX_PS_FEATURE([OFF])
++DX_INIT_DOXYGEN([${PACKAGE_NAME}], [DES-SERT.doxyfile], [doxygen])
++
++AC_CONFIG_FILES([Makefile
++ src/Makefile
++ src/snmp/Makefile
++ src/libdessert/Makefile
++ include/Makefile
++ libdessert.pc
++ ])
++AC_OUTPUT
++
+Index: libdessert0.86-0.86.14/depcomp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/depcomp 2009-12-09 16:38:27.235595145 +0100
+@@ -0,0 +1,630 @@
++#! /bin/sh
++# depcomp - compile a program generating dependencies as side-effects
++
++scriptversion=2009-04-28.21; # UTC
++
++# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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, see <http://www.gnu.org/licenses/>.
++
++# 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 Alexandre Oliva <oliva@dcc.unicamp.br>.
++
++case $1 in
++ '')
++ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
++ exit 1;
++ ;;
++ -h | --h*)
++ cat <<\EOF
++Usage: depcomp [--help] [--version] PROGRAM [ARGS]
++
++Run PROGRAMS ARGS to compile a file, generating dependencies
++as side-effects.
++
++Environment variables:
++ depmode Dependency tracking mode.
++ source Source file read by `PROGRAMS ARGS'.
++ object Object file output by `PROGRAMS ARGS'.
++ DEPDIR directory where to store dependencies.
++ depfile Dependency file to output.
++ tmpdepfile Temporary file to use when outputing dependencies.
++ libtool Whether libtool is used (yes/no).
++
++Report bugs to <bug-automake@gnu.org>.
++EOF
++ exit $?
++ ;;
++ -v | --v*)
++ echo "depcomp $scriptversion"
++ exit $?
++ ;;
++esac
++
++if test -z "$depmode" || test -z "$source" || test -z "$object"; then
++ echo "depcomp: Variables source, object and depmode must be set" 1>&2
++ exit 1
++fi
++
++# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
++depfile=${depfile-`echo "$object" |
++ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
++tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
++
++rm -f "$tmpdepfile"
++
++# Some modes work just like other modes, but use different flags. We
++# parameterize here, but still list the modes in the big case below,
++# to make depend.m4 easier to write. Note that we *cannot* use a case
++# here, because this file can only contain one case statement.
++if test "$depmode" = hp; then
++ # HP compiler uses -M and no extra arg.
++ gccflag=-M
++ depmode=gcc
++fi
++
++if test "$depmode" = dashXmstdout; then
++ # This is just like dashmstdout with a different argument.
++ dashmflag=-xM
++ depmode=dashmstdout
++fi
++
++cygpath_u="cygpath -u -f -"
++if test "$depmode" = msvcmsys; then
++ # This is just like msvisualcpp but w/o cygpath translation.
++ # Just convert the backslash-escaped backslashes to single forward
++ # slashes to satisfy depend.m4
++ cygpath_u="sed s,\\\\\\\\,/,g"
++ depmode=msvisualcpp
++fi
++
++case "$depmode" in
++gcc3)
++## gcc 3 implements dependency tracking that does exactly what
++## we want. Yay! Note: for some reason libtool 1.4 doesn't like
++## it if -MD -MP comes after the -MF stuff. Hmm.
++## Unfortunately, FreeBSD c89 acceptance of flags depends upon
++## the command line argument order; so add the flags where they
++## appear in depend2.am. Note that the slowdown incurred here
++## affects only configure: in makefiles, %FASTDEP% shortcuts this.
++ for arg
++ do
++ case $arg in
++ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
++ *) set fnord "$@" "$arg" ;;
++ esac
++ shift # fnord
++ shift # $arg
++ done
++ "$@"
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile"
++ exit $stat
++ fi
++ mv "$tmpdepfile" "$depfile"
++ ;;
++
++gcc)
++## There are various ways to get dependency output from gcc. Here's
++## why we pick this rather obscure method:
++## - Don't want to use -MD because we'd like the dependencies to end
++## up in a subdir. Having to rename by hand is ugly.
++## (We might end up doing this anyway to support other compilers.)
++## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
++## -MM, not -M (despite what the docs say).
++## - Using -M directly means running the compiler twice (even worse
++## than renaming).
++ if test -z "$gccflag"; then
++ gccflag=-MD,
++ fi
++ "$@" -Wp,"$gccflag$tmpdepfile"
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile"
++ exit $stat
++ fi
++ rm -f "$depfile"
++ echo "$object : \\" > "$depfile"
++ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
++## The second -e expression handles DOS-style file names with drive letters.
++ sed -e 's/^[^:]*: / /' \
++ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
++## This next piece of magic avoids the `deleted header file' problem.
++## The problem is that when a header file which appears in a .P file
++## is deleted, the dependency causes make to die (because there is
++## typically no way to rebuild the header). We avoid this by adding
++## dummy dependencies for each header file. Too bad gcc doesn't do
++## this for us directly.
++ tr ' ' '
++' < "$tmpdepfile" |
++## Some versions of gcc put a space before the `:'. On the theory
++## that the space means something, we add a space to the output as
++## well.
++## Some versions of the HPUX 10.20 sed can't process this invocation
++## correctly. Breaking it into two sed invocations is a workaround.
++ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++hp)
++ # This case exists only to let depend.m4 do its work. It works by
++ # looking at the text of this script. This case will never be run,
++ # since it is checked for above.
++ exit 1
++ ;;
++
++sgi)
++ if test "$libtool" = yes; then
++ "$@" "-Wp,-MDupdate,$tmpdepfile"
++ else
++ "$@" -MDupdate "$tmpdepfile"
++ fi
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile"
++ exit $stat
++ fi
++ rm -f "$depfile"
++
++ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
++ echo "$object : \\" > "$depfile"
++
++ # Clip off the initial element (the dependent). Don't try to be
++ # clever and replace this with sed code, as IRIX sed won't handle
++ # lines with more than a fixed number of characters (4096 in
++ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
++ # the IRIX cc adds comments like `#:fec' to the end of the
++ # dependency line.
++ tr ' ' '
++' < "$tmpdepfile" \
++ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
++ tr '
++' ' ' >> "$depfile"
++ echo >> "$depfile"
++
++ # The second pass generates a dummy entry for each header file.
++ tr ' ' '
++' < "$tmpdepfile" \
++ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
++ >> "$depfile"
++ else
++ # The sourcefile does not contain any dependencies, so just
++ # store a dummy comment line, to avoid errors with the Makefile
++ # "include basename.Plo" scheme.
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile"
++ ;;
++
++aix)
++ # The C for AIX Compiler uses -M and outputs the dependencies
++ # in a .u file. In older versions, this file always lives in the
++ # current directory. Also, the AIX compiler puts `$object:' at the
++ # start of each line; $object doesn't have directory information.
++ # Version 6 uses the directory in both cases.
++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
++ test "x$dir" = "x$object" && dir=
++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++ if test "$libtool" = yes; then
++ tmpdepfile1=$dir$base.u
++ tmpdepfile2=$base.u
++ tmpdepfile3=$dir.libs/$base.u
++ "$@" -Wc,-M
++ else
++ tmpdepfile1=$dir$base.u
++ tmpdepfile2=$dir$base.u
++ tmpdepfile3=$dir$base.u
++ "$@" -M
++ fi
++ stat=$?
++
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++ exit $stat
++ fi
++
++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++ do
++ test -f "$tmpdepfile" && break
++ done
++ if test -f "$tmpdepfile"; then
++ # Each line is of the form `foo.o: dependent.h'.
++ # Do two passes, one to just change these to
++ # `$object: dependent.h' and one to simply `dependent.h:'.
++ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
++ # That's a tab and a space in the [].
++ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
++ else
++ # The sourcefile does not contain any dependencies, so just
++ # store a dummy comment line, to avoid errors with the Makefile
++ # "include basename.Plo" scheme.
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile"
++ ;;
++
++icc)
++ # Intel's C compiler understands `-MD -MF file'. However on
++ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
++ # ICC 7.0 will fill foo.d with something like
++ # foo.o: sub/foo.c
++ # foo.o: sub/foo.h
++ # which is wrong. We want:
++ # sub/foo.o: sub/foo.c
++ # sub/foo.o: sub/foo.h
++ # sub/foo.c:
++ # sub/foo.h:
++ # ICC 7.1 will output
++ # foo.o: sub/foo.c sub/foo.h
++ # and will wrap long lines using \ :
++ # foo.o: sub/foo.c ... \
++ # sub/foo.h ... \
++ # ...
++
++ "$@" -MD -MF "$tmpdepfile"
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile"
++ exit $stat
++ fi
++ rm -f "$depfile"
++ # Each line is of the form `foo.o: dependent.h',
++ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
++ # Do two passes, one to just change these to
++ # `$object: dependent.h' and one to simply `dependent.h:'.
++ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
++ # Some versions of the HPUX 10.20 sed can't process this invocation
++ # correctly. Breaking it into two sed invocations is a workaround.
++ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
++ sed -e 's/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++hp2)
++ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
++ # compilers, which have integrated preprocessors. The correct option
++ # to use with these is +Maked; it writes dependencies to a file named
++ # 'foo.d', which lands next to the object file, wherever that
++ # happens to be.
++ # Much of this is similar to the tru64 case; see comments there.
++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
++ test "x$dir" = "x$object" && dir=
++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++ if test "$libtool" = yes; then
++ tmpdepfile1=$dir$base.d
++ tmpdepfile2=$dir.libs/$base.d
++ "$@" -Wc,+Maked
++ else
++ tmpdepfile1=$dir$base.d
++ tmpdepfile2=$dir$base.d
++ "$@" +Maked
++ fi
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile1" "$tmpdepfile2"
++ exit $stat
++ fi
++
++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
++ do
++ test -f "$tmpdepfile" && break
++ done
++ if test -f "$tmpdepfile"; then
++ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
++ # Add `dependent.h:' lines.
++ sed -ne '2,${
++ s/^ *//
++ s/ \\*$//
++ s/$/:/
++ p
++ }' "$tmpdepfile" >> "$depfile"
++ else
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile" "$tmpdepfile2"
++ ;;
++
++tru64)
++ # The Tru64 compiler uses -MD to generate dependencies as a side
++ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
++ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
++ # dependencies in `foo.d' instead, so we check for that too.
++ # Subdirectories are respected.
++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
++ test "x$dir" = "x$object" && dir=
++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++
++ if test "$libtool" = yes; then
++ # With Tru64 cc, shared objects can also be used to make a
++ # static library. This mechanism is used in libtool 1.4 series to
++ # handle both shared and static libraries in a single compilation.
++ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
++ #
++ # With libtool 1.5 this exception was removed, and libtool now
++ # generates 2 separate objects for the 2 libraries. These two
++ # compilations output dependencies in $dir.libs/$base.o.d and
++ # in $dir$base.o.d. We have to check for both files, because
++ # one of the two compilations can be disabled. We should prefer
++ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
++ # automatically cleaned when .libs/ is deleted, while ignoring
++ # the former would cause a distcleancheck panic.
++ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
++ tmpdepfile2=$dir$base.o.d # libtool 1.5
++ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
++ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
++ "$@" -Wc,-MD
++ else
++ tmpdepfile1=$dir$base.o.d
++ tmpdepfile2=$dir$base.d
++ tmpdepfile3=$dir$base.d
++ tmpdepfile4=$dir$base.d
++ "$@" -MD
++ fi
++
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
++ exit $stat
++ fi
++
++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
++ do
++ test -f "$tmpdepfile" && break
++ done
++ if test -f "$tmpdepfile"; then
++ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
++ # That's a tab and a space in the [].
++ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
++ else
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile"
++ ;;
++
++#nosideeffect)
++ # This comment above is used by automake to tell side-effect
++ # dependency tracking mechanisms from slower ones.
++
++dashmstdout)
++ # Important note: in order to support this mode, a compiler *must*
++ # always write the preprocessed file to stdout, regardless of -o.
++ "$@" || exit $?
++
++ # Remove the call to Libtool.
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++
++ # Remove `-o $object'.
++ IFS=" "
++ for arg
++ do
++ case $arg in
++ -o)
++ shift
++ ;;
++ $object)
++ shift
++ ;;
++ *)
++ set fnord "$@" "$arg"
++ shift # fnord
++ shift # $arg
++ ;;
++ esac
++ done
++
++ test -z "$dashmflag" && dashmflag=-M
++ # Require at least two characters before searching for `:'
++ # in the target name. This is to cope with DOS-style filenames:
++ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
++ "$@" $dashmflag |
++ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
++ rm -f "$depfile"
++ cat < "$tmpdepfile" > "$depfile"
++ tr ' ' '
++' < "$tmpdepfile" | \
++## Some versions of the HPUX 10.20 sed can't process this invocation
++## correctly. Breaking it into two sed invocations is a workaround.
++ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++dashXmstdout)
++ # This case only exists to satisfy depend.m4. It is never actually
++ # run, as this mode is specially recognized in the preamble.
++ exit 1
++ ;;
++
++makedepend)
++ "$@" || exit $?
++ # Remove any Libtool call
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++ # X makedepend
++ shift
++ cleared=no eat=no
++ for arg
++ do
++ case $cleared in
++ no)
++ set ""; shift
++ cleared=yes ;;
++ esac
++ if test $eat = yes; then
++ eat=no
++ continue
++ fi
++ case "$arg" in
++ -D*|-I*)
++ set fnord "$@" "$arg"; shift ;;
++ # Strip any option that makedepend may not understand. Remove
++ # the object too, otherwise makedepend will parse it as a source file.
++ -arch)
++ eat=yes ;;
++ -*|$object)
++ ;;
++ *)
++ set fnord "$@" "$arg"; shift ;;
++ esac
++ done
++ obj_suffix=`echo "$object" | sed 's/^.*\././'`
++ touch "$tmpdepfile"
++ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
++ rm -f "$depfile"
++ cat < "$tmpdepfile" > "$depfile"
++ sed '1,2d' "$tmpdepfile" | tr ' ' '
++' | \
++## Some versions of the HPUX 10.20 sed can't process this invocation
++## correctly. Breaking it into two sed invocations is a workaround.
++ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile" "$tmpdepfile".bak
++ ;;
++
++cpp)
++ # Important note: in order to support this mode, a compiler *must*
++ # always write the preprocessed file to stdout.
++ "$@" || exit $?
++
++ # Remove the call to Libtool.
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++
++ # Remove `-o $object'.
++ IFS=" "
++ for arg
++ do
++ case $arg in
++ -o)
++ shift
++ ;;
++ $object)
++ shift
++ ;;
++ *)
++ set fnord "$@" "$arg"
++ shift # fnord
++ shift # $arg
++ ;;
++ esac
++ done
++
++ "$@" -E |
++ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
++ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
++ sed '$ s: \\$::' > "$tmpdepfile"
++ rm -f "$depfile"
++ echo "$object : \\" > "$depfile"
++ cat < "$tmpdepfile" >> "$depfile"
++ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++msvisualcpp)
++ # Important note: in order to support this mode, a compiler *must*
++ # always write the preprocessed file to stdout.
++ "$@" || exit $?
++
++ # Remove the call to Libtool.
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++
++ IFS=" "
++ for arg
++ do
++ case "$arg" in
++ -o)
++ shift
++ ;;
++ $object)
++ shift
++ ;;
++ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
++ set fnord "$@"
++ shift
++ shift
++ ;;
++ *)
++ set fnord "$@" "$arg"
++ shift
++ shift
++ ;;
++ esac
++ done
++ "$@" -E 2>/dev/null |
++ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
++ rm -f "$depfile"
++ echo "$object : \\" > "$depfile"
++ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
++ echo " " >> "$depfile"
++ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++msvcmsys)
++ # This case exists only to let depend.m4 do its work. It works by
++ # looking at the text of this script. This case will never be run,
++ # since it is checked for above.
++ exit 1
++ ;;
++
++none)
++ exec "$@"
++ ;;
++
++*)
++ echo "Unknown depmode $depmode" 1>&2
++ exit 1
++ ;;
++esac
++
++exit 0
++
++# Local Variables:
++# mode: shell-script
++# sh-indentation: 2
++# 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:
+Index: libdessert0.86-0.86.14/dessert.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1334 +0,0 @@
+-/***************************************************************************//**
+- @file
+-
+- @page license License
+-
+- @brief Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB). \n
+- All rights reserved. \n
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group \n
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/) \n
+- -----------------------------------------------------------------------------\n
+- 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 3 of the License, or (at your option) any later
+- version. \n
+- \n
+- 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.\n
+- \n
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ . \n
+- -----------------------------------------------------------------------------\n
+- For further information and questions please use the web site \n
+- http://www.des-testbed.net/
+-*******************************************************************************/
+-
+-/***************************************************************************//**
+- *
+- * @mainpage DES-SERT
+- *
+- *
+- * @section intro_sec Introduction
+- *
+- * DES-SERT, the DES Simple and Extensible Routing-Framework for Testbeds,
+- * is a framework designed to assist researchers implementing routing
+- * protocols for testbeds.
+- *
+- * DES-SERT enables the implementation of routing protocols on top of
+- * Ethernet via an underlay (Layer 2.5) in user space.
+- * It introduces an abstraction from OS specific issues and provides
+- * functionality and data structures to implement proactive, reactive,
+- * and hybrid routing protocols.
+-
+- * While generally usable in many application scenarios, it is primarily
+- * used in DES-Mesh (http://www.des-testbed.net/), the multi-transceiver
+- * wireless mesh network testbed part of the DES-Testbed at Freie
+- * Universitaet Berlin, Germany.
+- *
+- * @section arch_sec DES-SERT Architecture
+- *
+- * DES-SERT introduces some concepts to implement routing protocols.
+- * When implementing a routing protocol with DES-SERT, you should be
+- * familiar with these concepts to structure and tailor your implementation.
+- *
+- *
+- * @subsection messages_subsec DES-SERT Messages
+- *
+- * Every packet you send or receive on the mesh is represented as a
+- * DES-SERT message. From a programmers point of view, a DES-SERT message
+- * is just a C-structure:
+- *
+- * @code
+- * typedef struct __attribute__ ((__packed__)) dessert_msg {
+- * struct ether_header l2h;
+- * char proto[DESSERT_PROTO_STRLEN];
+- * uint8_t ver;
+- * uint8_t flags;
+- * union {
+- * uint32_t u32;
+- * struct __attribute__ ((__packed__)) {
+- * uint8_t ttl;
+- * uint8_t u8;
+- * uint16_t u16;
+- * };
+- * };
+- * uint16_t hlen;
+- * uint16_t plen;
+- * } dessert_msg_t;
+- * @endcode
+- *
+- * Every message sent via the underlay carries this structure as a packet
+- * header. All data in a "dessert_msg" is stored in network byte order.
+- * DES-SERT tries to care as automatically as possible of this structure.
+- * Nevertheless you will have to care at least about: "l2h.ether_dhost" and
+- * "ttl".
+- *
+- * If you need to send some data along with every packet, e.g. some kind of
+- * metric or cost your routing protocol uses, you should try to fit this
+- * data into the "u8", "u16" and the upper 4 bits of the "flags" field.
+- * These fields will never be touched by DES-SERT except on initialization
+- * via "dessert_msg_new".
+- *
+- * Because just a C-structure is not really usable as a packet, there are some
+- * utility functions around - please have a look around in "dessert.h" and the
+- * doxygen documentation. The most important ones are: "dessert_msg_new" and
+- * "dessert_msg_destroy", which do not simply allocate memory for a DES-SERT
+- * message, but for a whole packet of maximum size and initialize the
+- * structures for further packet construction/processing.
+- *
+- * @code
+- * int dessert_msg_new(dessert_msg_t **msgout);
+- *
+- * void dessert_msg_destroy(dessert_msg_t* msg);
+- * @endcode
+- *
+- *
+- * @subsection extensions_subsec DES-SERT Extensions
+- *
+- * A DES-SERT extension is some structure used to piggyback data on a
+- * DES-SERT message. It consists of a 8-bit user supplied type field (with
+- * some reserved values), an 8-bit length field and user supplied data of
+- * arbitrary length of 253 bytes at most.
+- *
+- * It can be added to a message via dessert_msg_addext(), retrieved via
+- * dessert_msg_getext() and removed via dessert_msg_delext().
+- *
+- * @code
+- * int dessert_msg_addext(dessert_msg_t* msg, dessert_ext_t** ext,
+- * uint8_t type, size_t len);
+- *
+- * int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
+- *
+- * int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext,
+- * uint8_t type, int index);
+- *
+- * @endcode
+- *
+- * It is recommended not to put single data fields in extensions, but
+- * combine semantically related data in a struct and attach this struct
+- * as an extension because every extension carried introduces an 16-bit
+- * overhead to the packet.
+- *
+- *
+- * @subsection pipelines_subsec Processing Pipelines
+- *
+- * Routing algorithms are often split up in several parts like packet
+- * validation, loop-detection or routing table lookup.
+- * To implement these as independent and clear as possible, DES-SERT enables
+- * you to split up your packet processing in as many parts as you like.
+- *
+- * There are two separate processing pipelines - one for packets received
+- * from the kernel via a TUN or TAP interface and one for packets received
+- * via an interface used on the mesh network.
+- *
+- * You can register callbacks to be added to one of these pipelines with
+- * "dessert_sysrxcb_add" or "dessert_meshrxcb_add". Both take an additional
+- * integer argument ("priority") specifying the order the callbacks should
+- * be called. Higher "priority" value results in being called later
+- * within the pipeline.
+- *
+- * @code
+- * int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
+- *
+- * int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
+- * @endcode
+- *
+- * If a callback returns "DESSERT_MSG_KEEP" the packed will be processed by
+- * further callbacks, if it returns "DESSERT_MSG_DROP" the message will be
+- * dropped and no further callbacks will be called.
+- *
+- * You do not need to care about the management of the buffers for incoming
+- * messages - DES-SERT does this for you. Nevertheless if you need to add
+- * extensions or enlarge the payload of a message, you need to tell DES-SERT
+- * to enlarge the buffer for you if the flag "DESSERT_FLAG_SPARSE" is set on
+- * the message. You can do this by returning "DESSERT_MSG_NEEDNOSPARSE" from
+- * within a callback. The callback will be called again with a larger buffer
+- * and no "DESSERT_FLAG_SPARSE" flag being set.
+- *
+- *
+- * @subsection buffer_subsec Processing Buffer
+- *
+- * If you need to pass information along several callbacks, you can do this
+- * in the processing buffer passed to the the callbacks. This buffer contains
+- * some local processing flags ("lflags") set by the builtin callback
+- * "dessert_msg_ifaceflags_cb" (e.g. telling you about packet origin or if
+- * the packet is multicast) and 1KB of space for your callbacks to pass
+- * along arbitrary data.
+- *
+- * This buffer might only be allocated after you explicitly request it - in
+- * this case the proc argument is NULL and you can return the value
+- * "DESSERT_MSG_NEEDMSGPROC" from within your callback. The callback will
+- * be called again with a valid processing buffer.
+- *
+- *
+- * @section interfaces_sec Using Interfaces
+- *
+- *
+- * @subsection sysif_subsec Using a TUN/TAP interface
+- *
+- * First you have to choose whether to use a TUN or TAP interface. TUN
+- * interfaces are used to exchange IPv4 / IPv6 datagrams with the kernel
+- * network stack. TAP interfaces are used to exchange Ethernet frames
+- * with the kernel network stack. If you want to route Ethernet frames,
+- * you should choose a TAP interface. If you intend to implement
+- * a custom layer 2 to layer 3 mapping, you should use a TUN interface.
+-
+- * Currently, you can only initialize and use a single sys (TUN/TAP) interface.
+- * This is done by "dessert_sysif_init". You must then set up the interface
+- * config in the kernel yourself e.g. by calling "ifconfig".
+- *
+- * @code
+- *
+- * int dessert_sysif_init(char* name, uint8_t flags);
+- *
+- * @endcode
+- *
+- * In either case, frames you receive from a TUN/TAP interface will be
+- * passed along the callbacks added by "dessert_sysrxcb_add" to the
+- * processing pipeline. Each of them will be called with a pointer to an
+- * Ethernet frame. In case of a TUN interface, "ether_shost" and "ether_dhost"
+- * are set to "00:00:00:00:00:00", and ether_type reflects whether the packet
+- * received is IPv4 oder IPv6.
+- *
+- * Packets are sent to the kernel network stack with "dessert_syssend".
+- * In case of a TUN Interface "ether_shost" and "ether_dhost" will be
+- * ignored.
+- *
+- * @code
+- * int dessert_syssend_msg(dessert_msg_t *msg);
+- *
+- * int dessert_syssend(const struct ether_header *eth, size_t len);
+- * @endcode
+- *
+- *
+- * @subsection meshif_subsec Using a Mesh Interface
+- *
+- * Mesh interfaces are used similar to the TUN/TAP interface with two major
+- * differences: You can have multiple mesh interfaces and they send and
+- * receive DES-SERT messages instead of Ethernet frames.
+- *
+- * You add an mesh interface using "dessert_meshif_add" and can send to it
+- * by calling "dessert_meshsend". If the interface parameter is NULL, the
+- * packet will be transmitted over every interface (good for flooding).
+- *
+- * @code
+- * int dessert_meshif_add(const char* dev, uint8_t flags);
+- *
+- *
+- * int dessert_meshsend(const dessert_msg_t* msgin,
+- * const dessert_meshif_t *iface);
+- *
+- * int dessert_meshsend_hwaddr(const dessert_msg_t* msgin,
+- * const uint8_t hwaddr[ETHER_ADDR_LEN]);
+- *
+- * int dessert_meshsend_allbutone(const dessert_msg_t* msgin,
+- * const dessert_meshif_t *iface);
+- *
+- * int dessert_meshsend_fast(dessert_msg_t* msg,
+- * const dessert_meshif_t *iface);
+- *
+- * int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg,
+- * const uint8_t hwaddr[ETHER_ADDR_LEN]);
+- *
+- * int dessert_meshsend_fast_allbutone(dessert_msg_t* msg,
+- * const dessert_meshif_t *iface);
+- *
+- * int dessert_meshsend_raw(dessert_msg_t* msg,
+- * const dessert_meshif_t *iface);
+- * @endcode
+- *
+- * @section logging_sec Logging
+- *
+- * You can write log messages easily with a bunch of macros provided
+- * by DES-SERT ("dessert_debug", "dessert_info" ,"dessert_notice",
+- * "dessert_warn", "dessert_warning", "dessert_err", "dessert_crit",
+- * "dessert_alert" and "dessert_emerg"). Each of them can be used like
+- * "printf" and logs to Syslog, STDERR, file or a ringbuffer depending
+- * on your configuration.
+- *
+- * DES-SERT also ships with a custom "assert" macro which acts like
+- * the original macro from the standard C library and uses the logging
+- * mechanism described above.
+- *
+- *
+- * @section periodics_sec Periodics
+- *
+- * Periodics help you to perform maintenance or delayed tasks. A task
+- * consists of a callback, which will be called at the time you requested,
+- * and a void pointer the callback is passed. You can add these tasks by
+- * calling "dessert_periodic_add" or "dessert_periodic_add_delayed".
+- *
+- *
+- * @section cli_sec CLI - Command Line Interface
+- *
+- * DES-SERT supports simple configuration and debugging of your routing
+- * protocol implementation by providing a Cisco like command line interface
+- * (cli) and a config file parser based upon it.
+- * This cli is realized through libcli (http://code.google.com/p/libcli/).
+- *
+- * DES-SERT does some of the initialization of libcli. Therefore, it provides
+- * the main cli anchor "dessert_cli" and some anchors to add commands below
+- * "dessert_cli_.*". Because DES-SERT only loosely wraps libcli, you should
+- * make yourself familiar with libcli itself. This may be improved in further
+- * DES-SERT releases.
+- *
+- * You can evaluate a config file by calling "cli_file" and start a thread
+- * enabling a telnet-interface for DES-SERT by calling "dessert_cli_run".
+- *
+- *
+- * @section all_sec Putting it all together
+- *
+- * Now you have learned about the most important aspects of DES-SERT.
+- * To write your own routing protocol implementation, you need to know
+- * how to put all this together.
+- *
+- * You should start with a main() program parsing the command line options
+- * and then calling "dessert_init()". This is needed to set up DES-SERT
+- * correctly. Afterwards you can register callbacks, read the config file
+- * and do what you like. If everything is set up, you call "dessert_run()"
+- * and let the event based framework do its job.
+- *
+- * If you would like to see a complete protocol implementation sample,
+- * have a look at the "gossiping" directory.
+- *
+- *
+- * @section feedback_sec Contact & Feedback
+- *
+- * We love feedback - if you have patches, comments or questions,
+- * please contact us! Recent contact information is available on
+- * http://www.des-testbed.net/des-sert/
+- *
+- ******************************************************************************/
+-
+-#ifndef DESSERT_H
+-#define DESSERT_H
+-
+-#ifdef TARGET_DARWIN
+-#include <net/if_dl.h>
+-#define TUN_BSD
+-#endif
+-
+-#ifdef TARGET_LINUX
+-#define TUN_LINUX
+-#endif
+-
+-#include <net/if.h>
+-#include <net/ethernet.h>
+-#include <pcap.h>
+-#include <stdint.h>
+-#include <syslog.h>
+-#include <stdlib.h>
+-#include <libcli.h>
+-
+-/***************************************************************************//**
+- *
+- * @defgroup global G L O B A L # D E F I N E S and T Y P E D E F S / S T R U C T U R E S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** ethernet protocol used on layer 2 */
+-#define DESSERT_ETHPROTO 0x8042
+-
+-/** maximum frame size to assemble as dessert_msg */
+-#define DESSERT_MAXFRAMELEN ETHER_MAX_LEN
+-
+-/** maximum size of the data part in dessert_ext */
+-#define DESSERT_MAXEXTDATALEN 130
+-
+-/** length of protocol string used in dessert_msg */
+-#define DESSERT_PROTO_STRLEN 4
+-
+-/** size of local message processing buffer */
+-#define DESSERT_LBUF_LEN 1024
+-
+-/** return code for many dessert_* functions */
+-#define DESSERT_OK 0
+-
+-/** return code for many dessert_* functions */
+-#define DESSERT_ERR 1
+-
+-/******************************************************************************
+- * typedefs
+- ******************************************************************************/
+-/** runtime-unique frame id */
+-typedef uint64_t dessert_frameid_t;
+-
+-/** A basic message send on des-sert layer2.5. */
+-typedef struct __attribute__ ((__packed__)) dessert_msg {
+- /** the layer2 header on the wire */
+- struct ether_header l2h;
+- /** short name of the protocol as passed to dessert_init() */
+- char proto[DESSERT_PROTO_STRLEN];
+- /** version of the app as passed to dessert_init() */
+- uint8_t ver;
+- /** flags - bits 1-4 reserved for dessert, bits 5-8 for app usage */
+- uint8_t flags;
+- union {
+- /** reserved for app usage */
+- uint32_t u32;
+- struct __attribute__ ((__packed__)) {
+- /** ttl or hopcount field for app usage - 0xff if not used*/
+- uint8_t ttl;
+- /** reserved for app usage - 0x00 if not used */
+- uint8_t u8;
+- /** reserved for app usage - 0xbeef if not used */
+- uint16_t u16;
+- };
+- };
+- /** header length incl. extensions - in network byte order */
+- uint16_t hlen;
+- /** payload length - in network byte order */
+- uint16_t plen;
+-} dessert_msg_t;
+-
+-/** local processing struct for dessert_msg_t */
+-typedef struct dessert_msg_proc {
+- /** 16 bits for local processing flags */
+- uint16_t lflags;
+- /** 16 bits reserved */
+- uint16_t lreserved;
+- /** DESSERT_LBUF_LEN bytes buffer */
+- char lbuf[DESSERT_LBUF_LEN];
+-} dessert_msg_proc_t;
+-
+-/** a extension record to add to a dessert_msg */
+-typedef struct __attribute__ ((__packed__)) dessert_ext {
+- /** type of the extension
+- * user supplied types must be >= DESSERT_EXT_USER */
+- uint8_t type;
+-
+- /** length of the extension in bytes
+- * including the 2 bytes of the extension
+- * header itself*/
+- uint8_t len;
+-
+- /** pointer to the data - real length is len-2 bytes */
+- uint8_t data[DESSERT_MAXEXTDATALEN];
+-} dessert_ext_t;
+-
+-/** an interface used for dessert_msg frames */
+-typedef struct dessert_meshif {
+- /** pointer to next interface */
+- struct dessert_meshif *next;
+- /** pointer to next interface */
+- struct dessert_meshif *prev;
+- /** name of interface */
+- char if_name[IFNAMSIZ];
+- /** system ifindex */
+- unsigned int if_index;
+- /** hardware address of interface */
+- uint8_t hwaddr[ETHER_ADDR_LEN]; /* uthash key*/
+- /** counter mutex */
+- pthread_mutex_t cnt_mutex;
+- /** packet counter in */
+- uint64_t ipkts;
+- /** packet counter out */
+- uint64_t opkts;
+- /** packet counter in */
+- uint64_t ibytes;
+- /** packet counter out */
+- uint64_t obytes;
+- /** libpcap descriptor for the interface */
+- pcap_t *pcap;
+- /** libpcap error message buffer */
+- char pcap_err[PCAP_ERRBUF_SIZE];
+- /** pthread running the request loop */
+- pthread_t worker;
+-} dessert_meshif_t;
+-
+-/** A tun/tap interface used to inject packets to dessert implemented daemons.
+- *
+- * \note Please make sure first fields are equal to dessert_meshif to re-use
+- * _dessert_meshif_gethwaddr().
+- *
+- */
+-typedef struct dessert_sysif {
+- /** pointer to next interface */
+- struct dessert_sysif *next;
+- /** name of interface */
+- char if_name[IFNAMSIZ];
+- /** system ifindex */
+- unsigned int if_index;
+- /** hardware address of the interface */
+- uint8_t hwaddr[ETHER_ADDR_LEN];
+- /** counter mutex */
+- pthread_mutex_t cnt_mutex;
+- /** packet counter in */
+- uint64_t ipkts;
+- /** packet counter out */
+- uint64_t opkts;
+- /** packet counter in */
+- uint64_t ibytes;
+- /** packet counter out */
+- uint64_t obytes;
+- /** file descriptor to read/write from/to */
+- int fd;
+- /** if it is a tun or tap interface */
+- uint8_t flags;
+- /** pthread running the request loop */
+- pthread_t worker;
+-} dessert_sysif_t;
+-
+-/** Callback type to call if a packed is received via a dessert mesh interface.
+- *
+- * @param *msg dessert_msg_t frame received
+- * @param len length of the buffer pointed to from dessert_msg_t
+- * @param *proc local processing buffer passed along the callback pipeline - may be NULL
+- * @param *iface interface received packet on - may be NULL
+- * @param id unique internal frame id of the packet
+- *
+- * @retval DESSERT_MSG_KEEP to continue processing the packet
+- * @retval DESSERT_MSG_DROP to drop it
+- * @retval DESSERT_MSG_NEEDMSGPROC to get a processing buffer
+- * @retval DESSERT_MSG_NEEDNOSPARSE to get a full packet buffer (e.g. needed to add extensions)
+- *
+- * \warning The callbacks are invoked with no locks hold by the thread,
+- * \warning YOU MUST make sure the thread holds no locks after the callback exits.
+- * \warning YOU MUST also make sure not to do anything blocking in a callback!
+- *
+- * If the callback exits with DESSERT_MSG_NEEDMSGPROC or DESSERT_MSG_NEEDNOSPARSE
+- * and the respective buffer is NULL or sparse, the callback is called again after
+- * providing the requested resource.
+- *
+- */
+-typedef int dessert_meshrxcb_t(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
+-
+-/** Callback type to call if a packed should be injected into dessert via a tun/tap interface.
+- *
+- * @param *msg dessert msg received - original ethernet frame is encapsulated within
+- * @param len length of ethernet frame received
+- * @param *proc local processing buffer passed along the callback pipeline - may be NULL
+- * @param *sysif interface received packet on
+- * @param id unique internal frame id of the packet
+- *
+- * @retval DESSERT_MSG_KEEP to continue processing the packet
+- * @retval DESSERT_MSG_DROP to drop it
+- *
+- * \warning The callbacks are invoked with no locks hold by the thread,
+- * \warning YOU MUST make sure the thread holds no locks after the callback exits.
+- * \warning YOU MUST also make sure not to do anything blocking in a callback!
+- *
+-*/
+-typedef int dessert_sysrxcb_t(dessert_msg_t *msg, size_t len, dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id);
+-
+-/** callbacks type to call in a periodic task
+- *
+- * The callbacks are invoked with no locks hold by the thread,
+- * YOU MUST make sure the thread holds no locks after the callback exits.
+- * YOU MUST also make sure not to do anything blocking in a callback!
+- *
+- * @arg *data void pointer to pass to the callback
+- * @arg scheduled when this call was scheduled
+- * @arg interval how often this call should be scheduled
+- * ®return should be 0, otherwise the callback is unregistered
+- */
+-typedef int dessert_periodiccallback_t(void *data, struct timeval *scheduled, struct timeval *interval);
+-
+-/** definition of a periodic tasklist entry */
+-typedef struct dessert_periodic {
+- /** callback to call */
+- dessert_periodiccallback_t *c;
+- /** when to call next */
+- struct timeval scheduled;
+- /** call every */
+- struct timeval interval;
+- /** data pointer to pass to callback */
+- void *data;
+- /** internal pointer for task list */
+- struct dessert_periodic *next;
+-} dessert_periodic_t;
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup core C O R E
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** type for local unique packet identification */
+-#define DESSERT_FRAMEID_MAX ((uint64_t)-1)
+-
+-/** flag for dessert_init - daemonize when calling
+- * disables logging to STDERR */
+-#define DESSERT_OPT_DAEMONIZE 0x0100
+-
+-/** flag for dessert_init - do not daemonize when calling */
+-#define DESSERT_OPT_NODAEMONIZE 0x0200
+-
+-/** flag for dessert_init - create and write pid file */
+-#define DESSERT_OPT_PID 0x0400
+-
+-/** flag for dessert_init - do not create and write pid file */
+-#define DESSERT_OPT_NOPID 0x0800
+-
+-/******************************************************************************
+- * globals
+- ******************************************************************************/
+-
+-/** protocol string used in dessert_msg frames */
+-extern char dessert_proto[DESSERT_PROTO_STRLEN+1];
+-
+-/** version int used in dessert_msg frames */
+-extern u_int8_t dessert_ver;
+-
+-/** default src address used for local generated dessert_msg frames */
+-extern u_int8_t dessert_l25_defsrc[ETHER_ADDR_LEN];
+-
+-
+-/** constant holding ethernet broadcast address after dessert_init */
+-extern u_char ether_broadcast[ETHER_ADDR_LEN];
+-
+-/** constant holding ethernet null address after dessert_init */
+-extern u_char ether_null[ETHER_ADDR_LEN];
+-
+-/** the config funnel */
+-extern pthread_rwlock_t dessert_cfglock;
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-int dessert_init(const char* proto, int version, uint16_t opts, char* pidfile);
+-
+-int dessert_run(void);
+-void dessert_exit(void);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup cli C L I - C O M M A N D _ L I N E _ I N T E R F A C E
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * globals
+- ******************************************************************************/
+-
+-extern struct cli_def *dessert_cli;
+-
+-extern struct cli_command *dessert_cli_show;
+-extern struct cli_command *dessert_cli_cfg_iface;
+-extern struct cli_command *dessert_cli_cfg_no;
+-extern struct cli_command *dessert_cli_cfg_no_iface;
+-extern struct cli_command *dessert_cli_cfg_set;
+-extern struct cli_command *dessert_cli_cfg_logging;
+-extern struct cli_command *dessert_cli_cfg_no_logging;
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-int dessert_cli_run(int port);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup log L O G _ F A C I L I T Y
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** flag for dessert_logcfg - enable syslog logging */
+-#define DESSERT_LOG_SYSLOG 0x0001
+-
+-/** flag for dessert_logcfg - disable syslog logging */
+-#define DESSERT_LOG_NOSYSLOG 0x0002
+-
+-/** flag for dessert_logcfg - enable logfile logging
+- * @warning before using this you MUST use fopen(dessert_logfd, ...) to open the logfile */
+-#define DESSERT_LOG_FILE 0x0004
+-
+-/** flag for dessert_logcfg - disable logfile logging */
+-#define DESSERT_LOG_NOFILE 0x0008
+-
+-/** flag for dessert_logcfg - enable logging to stderr */
+-#define DESSERT_LOG_STDERR 0x0010
+-
+-/** flag for dessert_logcfg - disable logging to stderr */
+-#define DESSERT_LOG_NOSTDERR 0x0020
+-
+-/** flag for dessert_logcfg - enable logging to ringbuffer */
+-#define DESSERT_LOG_RBUF 0x0040
+-
+-/** flag for dessert_logcfg - disable logging to ringbuffer */
+-#define DESSERT_LOG_NORBUF 0x0080
+-
+-/** flag for dessert_logcfg - enable debug loglevel */
+-#define DESSERT_LOG_DEBUG 0x0100
+-
+-/** flag for dessert_logcfg - disable debug loglevel */
+-#define DESSERT_LOG_NODEBUG 0x0200
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-int dessert_logcfg(uint16_t opts);
+-void _dessert_log(int level, const char* func, const char* file, int line, const char *fmt, ...);
+-/** log at DEBUG level */
+-#define dessert_debug(...) _dessert_log(LOG_DEBUG, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at INFO level */
+-#define dessert_info(...) _dessert_log(LOG_INFO, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at NOTICE level */
+-#define dessert_notice(...) _dessert_log(LOG_NOTICE, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at WARNING level */
+-#define dessert_warn(...) _dessert_log(LOG_WARNING, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at WARNING level */
+-#define dessert_warning(...) _dessert_log(LOG_WARNING, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at ERR level */
+-#define dessert_err(...) _dessert_log(LOG_ERR, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at CRIT level */
+-#define dessert_crit(...) _dessert_log(LOG_CRIT, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at ALERT level */
+-#define dessert_alert(...) _dessert_log(LOG_ALERT, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at EMERG level */
+-#define dessert_emerg(...) _dessert_log(LOG_EMERG, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup mesh M E S H - I N T E R F A C E S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** return code for dessert_meshrxcb_t - forces to copy the message and call again*/
+-#define DESSERT_MSG_NEEDNOSPARSE 1
+-
+-/** return code for dessert_meshrxcb_t - forces to generate processing info and call again*/
+-#define DESSERT_MSG_NEEDMSGPROC 2
+-
+-/** return code for dessert_meshrxcb_t and dessert_sysrxcb_t */
+-#define DESSERT_MSG_KEEP 0
+-
+-/** return code for dessert_meshrxcb_t and dessert_sysrxcb_t */
+-#define DESSERT_MSG_DROP -1
+-
+-/** flag for dessert_meshif_add - set interface in promiscuous-mode (default) */
+-#define DESSERT_IF_PROMISC 0x0
+-
+-/** flag for dessert_meshif_add - do not set interface in promiscuous-mode */
+-#define DESSERT_IF_NOPROMISC 0x1
+-
+-/** flag for dessert_meshif_add - filter out non-des-sert frames in libpcap (default) */
+-#define DESSERT_IF_FILTER 0x0
+-
+-/** flag for dessert_meshif_add - do not filter out non-des-sert frames in libpcap */
+-#define DESSERT_IF_NOFILTER 0x2
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-/* sending messages */
+-int dessert_meshsend(const dessert_msg_t* msgin, const dessert_meshif_t *iface);
+-int dessert_meshsend_allbutone(const dessert_msg_t* msgin, const dessert_meshif_t *iface);
+-int dessert_meshsend_hwaddr(const dessert_msg_t* msgin, const uint8_t hwaddr[ETHER_ADDR_LEN]);
+-int dessert_meshsend_randomized(const dessert_msg_t* msgin);
+-
+-int dessert_meshsend_fast(dessert_msg_t* msg, const dessert_meshif_t *iface);
+-int dessert_meshsend_fast_allbutone(dessert_msg_t* msg, const dessert_meshif_t *iface);
+-int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg, const uint8_t hwaddr[ETHER_ADDR_LEN]);
+-int dessert_meshsend_fast_randomized(dessert_msg_t* msgin);
+-int dessert_meshsend_raw(dessert_msg_t* msg, const dessert_meshif_t *iface);
+-
+-/* meshrx-callback handling */
+-int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
+-int dessert_meshrxcb_del(dessert_meshrxcb_t* c);
+-
+-/* mesh interface handling */
+-int dessert_meshif_add(const char* dev, uint8_t flags);
+-int dessert_meshif_del(const char* dev);
+-
+-dessert_meshif_t * dessert_meshif_get_name(const char* dev);
+-dessert_meshif_t * dessert_meshif_get_hwaddr(const uint8_t hwaddr[ETHER_ADDR_LEN]);
+-dessert_meshif_t * dessert_meshiflist_get(void);
+-/*\}*/
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup sys S Y S - I N T E R F A C E S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** flag for dessert_sysif_init - open tun (ip/ipv6) device */
+-#define DESSERT_TUN 0x00
+-
+-/** flag for dessert_sysif_init - open tap (ethernet) device */
+-#define DESSERT_TAP 0x01
+-
+-/** flag for dessert_sysif_init - set dessert_l25_defsrc to mac of tap device */
+-#define DESSERT_MAKE_DEFSRC 0x02
+-
+-/** flag for dessert_sysif_init - get mac for tap failed - try mac in src of first packet */
+-#define _DESSERT_TAP_NOMAC 0x80
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-int dessert_sysif_init(char* name, uint8_t flags);
+-
+-int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
+-int dessert_sysrxcb_del(dessert_sysrxcb_t* c);
+-
+-int dessert_syssend_msg(dessert_msg_t *msg);
+-int dessert_syssend(const struct ether_header *eth, size_t len);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup msg M E S S A G E _ H A N D L I N G
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** flag for dessert_msg.flags - message len is hlen+plen
+- * if not set buffer len is assumed as DESSERT_MAXFRAMELEN + DESSERT_MSGPROCLEN */
+-#define DESSERT_FLAG_SPARSE 0x1
+-
+-/* *********************** */
+-
+-/** flag for dessert_msg_proc.lflags - l25 src is one of our interfaces */
+-#define DESSERT_LFLAG_SRC_SELF 0x0002
+-
+-/** flag for dessert_msg_proc.lflags - l25 dst is multicast address*/
+-#define DESSERT_LFLAG_DST_MULTICAST 0x0004
+-
+-/** flag for dessert_msg_proc.lflags - l25 dst is one of our interfaces */
+-#define DESSERT_LFLAG_DST_SELF 0x0008
+-
+-/** flag for dessert_msg_proc.lflags - l25 dst is broadcast */
+-#define DESSERT_LFLAG_DST_BROADCAST 0x0010
+-
+-/** flag for dessert_msg_proc.lflags - l2 src is one of our interfaces */
+-#define DESSERT_LFLAG_PREVHOP_SELF 0x0020
+-
+-/** flag for dessert_msg_proc.lflags - l2 dst is one of our interfaces */
+-#define DESSERT_LFLAG_NEXTHOP_SELF 0x0040
+-
+-/** flag for dessert_msg_proc.lflags - l2 dst is broadcast */
+-#define DESSERT_LFLAG_NEXTHOP_BROADCAST 0x0080
+-
+-/** flag for dessert_msg_proc.lflags - l25 dst is one of our interfaces,
+- * but we received the message not via the indented interface, e.g. we
+- * overheard it */
+-#define DESSERT_LFLAG_DST_SELF_OVERHEARD 0x0100
+-
+-/** flag for dessert_msg_proc.lflags - l2 dst is one of our interfaces,
+- * but we received the message not via the indented interface, e.g. we
+- * overheard it */
+-#define DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD 0x0200
+-
+-/* *********************** */
+-
+-/** length of dessert_ext header */
+-#define DESSERT_EXTLEN (sizeof(struct dessert_ext) - DESSERT_MAXEXTDATALEN)
+-
+-/** dessert_ext type wildcard - any extension */
+-#define DESSERT_EXT_ANY 0x00
+-
+-/** dessert_ext type for ethernet header */
+-#define DESSERT_EXT_ETH 0x01
+-
+-/** dessert_ext type for packet tracing */
+-#define DESSERT_EXT_TRACE 0x02
+-
+-/** first dessert_ext type for usage by the user */
+-#define DESSERT_EXT_USER 0x40
+-
+-/* *********************** */
+-
+-/** packet tracing flag - only record hosts */
+-#define DESSERT_MSG_TRACE_HOST (ETHER_ADDR_LEN)
+-
+-/** packet tracing flag - record interfaces */
+-#define DESSERT_MSG_TRACE_IFACE (3*ETHER_ADDR_LEN)
+-
+-/* *********************** */
+-
+-/** Returns the length of a given extension. */
+-#define dessert_ext_getdatalen(ext) (ext->len - DESSERT_EXTLEN)
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-int dessert_msg_new(dessert_msg_t **msgout);
+-int dessert_msg_clone(dessert_msg_t **msgnew, const dessert_msg_t *msgold, uint8_t sparse);
+-int dessert_msg_check(const dessert_msg_t* msg, size_t len);
+-void dessert_msg_dump(const dessert_msg_t* msg, size_t len, char *buf, size_t blen);
+-void dessert_msg_destroy(dessert_msg_t* msg);
+-
+-int dessert_msg_ethencap(const struct ether_header* eth, size_t eth_len, dessert_msg_t **msgout);
+-int dessert_msg_ethdecap(const dessert_msg_t* msg, struct ether_header** ethout);
+-struct ether_header* dessert_msg_getl25ether (const dessert_msg_t* msg);
+-
+-int dessert_msg_proc_clone(dessert_msg_proc_t **procnew, const dessert_msg_proc_t *procold);
+-void dessert_msg_proc_dump(const dessert_msg_t* msg, size_t len, const dessert_msg_proc_t *proc, char *buf, size_t blen);
+-void dessert_msg_proc_destroy(dessert_msg_proc_t* proc);
+-
+-int dessert_msg_addpayload(dessert_msg_t* msg, void** payload, int len);
+-int dessert_msg_getpayload(dessert_msg_t *msg, void **payload);
+-int dessert_msg_addext(dessert_msg_t* msg, dessert_ext_t** ext, uint8_t type, size_t len);
+-int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
+-int dessert_msg_resizeext(dessert_msg_t *msg, dessert_ext_t *ext, size_t new_len);
+-int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext, uint8_t type, int index);
+-int dessert_msg_get_ext_count(const dessert_msg_t* msg, uint8_t type);
+-
+-int dessert_msg_trace_initiate(dessert_msg_t* msg, int mode);
+-int dessert_msg_trace_dump(const dessert_msg_t* msg, char* buf, int blen);
+-
+-int dessert_msg_dump_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
+-int dessert_msg_check_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
+-int dessert_msg_trace_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
+-int dessert_msg_ifaceflags_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *riface, dessert_frameid_t id);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup periodic P E R I O D I C _ T A S K S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-dessert_periodic_t *dessert_periodic_add(dessert_periodiccallback_t* c, void *data, const struct timeval *scheduled, const struct timeval *interval);
+-dessert_periodic_t *dessert_periodic_add_delayed(dessert_periodiccallback_t* c, void *data, int delay);
+-int dessert_periodic_del(dessert_periodic_t *p);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup agentx NET - S N M P // A G E N T _ X
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-/** Flag indicating the dessert_agentx_appstats_t is of type bool. */
+-#define DESSERT_APPSTATS_VALUETYPE_BOOL 0
+-
+-/** Flag indicating the dessert_agentx_appstats_t is of type int32. */
+-#define DESSERT_APPSTATS_VALUETYPE_INT32 1
+-
+-/** Flag indicating the dessert_agentx_appstats_t is of type uint32. */
+-#define DESSERT_APPSTATS_VALUETYPE_UINT32 2
+-
+-/** Flag indicating the dessert_agentx_appstats_t is of type counter64. */
+-#define DESSERT_APPSTATS_VALUETYPE_COUNTER64 3
+-
+-/** Flag indicating the dessert_agentx_appstats_t is of type octetstring. */
+-#define DESSERT_APPSTATS_VALUETYPE_OCTETSTRING 4
+-
+-/* *********************** */
+-
+-/** Flag indicating the dessert_agentx_appstats_t does not contain information regarding a node or a link. */
+-#define DESSERT_APPSTATS_NODEORLINK_NONE 0
+-
+-/** Flag indicating the dessert_agentx_appstats_t contains information regarding a node. */
+-#define DESSERT_APPSTATS_NODEORLINK_NODE 1
+-
+-/** Flag indicating the dessert_agentx_appstats_t contains information regarding a link. */
+-#define DESSERT_APPSTATS_NODEORLINK_LINK 2
+-
+-/* *********************** */
+-
+-/** What is considered to be TRUE in a dessert_agentx_appstats_t. */
+-#define DESSERT_APPSTATS_BOOL_TRUE 1
+-
+-/** What is considered to be FALSE in a dessert_agentx_appstats_t. */
+-#define DESSERT_APPSTATS_BOOL_FALSE 0
+-
+-/* *********************** */
+-
+-/** Flag indicating the dessert_agentx_appparams_t is of type bool. */
+-#define DESSERT_APPPARAMS_VALUETYPE_BOOL 0
+-
+-/** Flag indicating the dessert_agentx_appparams_t is of type int32. */
+-#define DESSERT_APPPARAMS_VALUETYPE_INT32 1
+-
+-/** Flag indicating the dessert_agentx_appparams_t is of type uint32. */
+-#define DESSERT_APPPARAMS_VALUETYPE_UINT32 2
+-
+-/** Flag indicating the dessert_agentx_appparams_t is of type octetstring. */
+-#define DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING 3
+-
+-/* *********************** */
+-
+-/** What is considered to be TRUE in a dessert_agentx_appparams_t. */
+-#define DESSERT_APPPARAMS_BOOL_TRUE 1
+-
+-/** What is considered to be FALSE in a dessert_agentx_appparams_t. */
+-#define DESSERT_APPPARAMS_BOOL_FALSE 0
+-
+-/* *********************** */
+-
+-/** Flag indicating if a appstats callback entry is of type bulk. */
+-#define DESSERT_APPSTATS_CB_BULK 1
+-/** Flag indicating if a appstats callback entry is of type nobulk. */
+-#define DESSERT_APPSTATS_CB_NOBULK 2
+-
+-/******************************************************************************
+- * typedefs
+- ******************************************************************************/
+-
+-/** An abstract data type representing some statistical datum.*/
+-typedef struct dessert_agentx_appstats {
+-
+- /** A prev pointer. @internal */
+- struct dessert_agentx_appstats *prev;
+- /** A next pointer. @internal */
+- struct dessert_agentx_appstats *next;
+-
+- /** The name of the datum. */
+- char name[256];
+- /** A description of the datum*/
+- char desc[256];
+-
+- /** The type of the datum.
+- *
+- * @see For valid values please refer to: \n DESSERT_APPSTATS_VALUETYPE_BOOL
+- * @see DESSERT_APPSTATS_VALUETYPE_INT32
+- * @see DESSERT_APPSTATS_VALUETYPE_UINT32
+- * @see DESSERT_APPSTATS_VALUETYPE_COUNTER64
+- * @see DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
+- */
+- int value_type;
+- /** Indicates if this datum contains information about a node or a link
+- *
+- * @see For valid values please refer to: \n DESSERT_APPSTATS_NODEORLINK_NONE
+- * @see DESSERT_APPSTATS_NODEORLINK_NODE
+- * @see DESSERT_APPSTATS_NODEORLINK_LINK
+- */
+- int node_or_link;
+-
+- /** Field representing a mac address if this datum contains information about a node or a link. */
+- uint8_t macaddress1 [ETHER_ADDR_LEN];
+- /** Field representing a mac address if this datum contains information about a link. */
+- uint8_t macaddress2 [ETHER_ADDR_LEN];
+-
+- union {
+- /** A boolean.
+- *
+- * @see For valid values please refer to: \n DESSERT_APPSTATS_BOOL_TRUE
+- * @see DESSERT_APPSTATS_BOOL_FALSE
+- */
+- uint8_t bool;
+- /** A 32bit signed integer. */
+- int32_t int32;
+- /** A 32bit unsigned integer. */
+- uint32_t uint32;
+- /** A 64bit unsigned integer with counter semantics */
+- uint64_t counter64;
+-
+- struct {
+- /** The length of the octetstring field. */
+- uint8_t octetstring_len;
+- /** Character pointer to some raw bytes. */
+- char *octetstring;
+- };
+- };
+-
+-} dessert_agentx_appstats_t;
+-
+-/** An abstract data type representing some parameter.*/
+-typedef struct dessert_agentx_appparams {
+-
+- /** Internal. @internal */
+- struct dessert_agentx_appparams *prev;
+- /** Internal. @internal */
+- struct dessert_agentx_appparams *next;
+-
+- /** Internal. @internal Internal. */
+- uint8_t index;
+-
+- /** The name of the datum. */
+- char name[256];
+- /** A description of the datum*/
+- char desc[256];
+-
+- /** The type of the parameter.
+- *
+- * @see For valid values please refer to: \n DESSERT_APPPARAMS_VALUETYPE_BOOL
+- * @see DESSERT_APPPARAMS_VALUETYPE_INT32
+- * @see DESSERT_APPPARAMS_VALUETYPE_UINT32
+- * @see DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
+- */
+- int value_type;
+-
+- union {
+- /** A boolean.
+- *
+- * @see For valid values please refer to: \n DESSERT_APPPARAMS_BOOL_TRUE
+- * @see DESSERT_APPPARAMS_BOOL_FALSE
+- */
+- uint8_t bool;
+- /** A 32bit signed integer. */
+- int32_t int32;
+- /** A 32bit unsigned integer. */
+- uint32_t uint32;
+-
+- struct {
+- /** The length of the octetstring field. */
+- uint16_t octetstring_len;
+- /** Character pointer to some raw bytes. */
+- char *octetstring;
+- };
+- };
+-
+-} dessert_agentx_appparams_t;
+-
+-/** Callback type to call if the AppstatsTable is asked for by some snmp client.
+- *
+- * @param *appstats dessert_agentx_appstats_t the statistical datum to be filled out
+- *
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR to remove the corresponding callback entry
+- *
+- */
+-typedef int dessert_agentx_appstatscb_get_t(struct dessert_agentx_appstats *appstats);
+-
+-/** Callback type to call if the AppparamsTable is asked for by some snmp client.
+- *
+- * @param *appstats dessert_agentx_appparams_t the parameter to be filled out
+- *
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR to remove the corresponding callback entry
+- *
+- */
+-typedef int dessert_agentx_appparamscb_get_t(struct dessert_agentx_appparams *appparams);
+-
+-/** Callback type to call if the specific row represented by this callback is
+- * going to be set by some snmp client.
+- *
+- * @param *appstats dessert_agentx_appparams_t the new value
+- *
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR otherwise
+- *
+- */
+-typedef int dessert_agentx_appparamscb_set_t(struct dessert_agentx_appparams *appparams);
+-
+-/** A callback entry representing a statistical datum. */
+-typedef struct dessert_agentx_appstats_cb_entry {
+-
+- /** Interal. @internal */
+- struct dessert_agentx_appstats_cb_entry *prev;
+- /** Interal. @internal */
+- struct dessert_agentx_appstats_cb_entry *next;
+-
+- /** Flag indicating whether this entry represents a bulk entry.*/
+- uint8_t isbulk_flag;
+-
+- /** The getter callback. */
+- dessert_agentx_appstatscb_get_t *c;
+-
+-} dessert_agentx_appstats_cb_entry_t;
+-
+-/** A callback entry representing a parameter. */
+-typedef struct dessert_agentx_appparams_cb_entry {
+-
+- /** Internal. @internal */
+- struct dessert_agentx_appparams_cb_entry *prev;
+- /** Internal. @internal*/
+- struct dessert_agentx_appparams_cb_entry *next;
+-
+- /** Internal. @internal */
+- uint8_t index;
+-
+- /** The getter callback. */
+- dessert_agentx_appparamscb_get_t *get;
+- /** The setter callback. */
+- dessert_agentx_appparamscb_set_t *set;
+-
+-} dessert_agentx_appparams_cb_entry_t;
+-
+-
+-/******************************************************************************
+- * globals
+- ******************************************************************************/
+-
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-dessert_agentx_appstats_t *dessert_agentx_appstats_new(void);
+-void dessert_agentx_appstats_destroy(dessert_agentx_appstats_t *appstat);
+-
+-dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add(dessert_agentx_appstatscb_get_t *c);
+-dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add_bulk(dessert_agentx_appstatscb_get_t *c);
+-int dessert_agentx_appstats_del(dessert_agentx_appstats_cb_entry_t *e);
+-
+-dessert_agentx_appparams_t *dessert_agentx_appparam_new(void);
+-void dessert_agentx_appparam_destroy(dessert_agentx_appparams_t *appparam);
+-
+-dessert_agentx_appparams_cb_entry_t *dessert_agentx_appparams_add(dessert_agentx_appparamscb_get_t *get, dessert_agentx_appparamscb_set_t *set);
+-int dessert_agentx_appparams_del(dessert_agentx_appparams_cb_entry_t *e);
+-
+-/**************************************************************************//**
+- * @}
+- *
+- * @defgroup macros U S E F U L L _ MA C R O S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/** A convenience macro to safely iterate the list of mesh interfaces.
+- *
+- * @param __interface pointer to a temporal dessert_meshif_t
+- *
+- * @warning You must pair it with an ending MESHIFLIST_ITERATOR_STOP() macro!
+- * Please find an usage example in the Examples paragraph below.
+- *
+- * @par Examples:
+- *
+- * @li The do_something() function will be called for every mesh interface in the list.
+- * @code
+- * dessert_meshif_t *iface;
+- *
+- * MESHIFLIST_ITERATOR_START(iface)
+- * do_something(iface); // do something to every iface
+- * MESHIFLIST_ITERATOR_STOP;
+- * @endcode
+- */
+-#define MESHIFLIST_ITERATOR_START(__interface) \
+-pthread_rwlock_rdlock(&dessert_cfglock); \
+-DL_FOREACH(dessert_meshiflist_get(), __interface) {
+-
+-/** A convenience macro to safely iterate the list of mesh interfaces.
+- *
+- * @see MESHIFLIST_ITERATOR_START()
+- */
+-#define MESHIFLIST_ITERATOR_STOP } pthread_rwlock_unlock(&dessert_cfglock)
+-
+-/** A convenience macro to safely add @a __sec seconds and @a __usec microseconds
+- * to the @c struct @c timeval @a __tv in an <em>invariant respecting</em> manner.
+- *
+- * @param __tv the @c struct @c timeval to add to
+- * @param __sec the number of seconds to add up to @a __tv->tv_sec
+- * @param __usec the number of microseconds to add up to @a __tv.->tv_usec
+- *
+- * %DESCRIPTION: \n
+- * The <a href="http://www.gnu.org/s/libc/manual/html_node/Elapsed-Time.html#Elapsed-Time">GNU C Library Documentation</a>
+- * states about the @c tv_usec member of the @c struct @c timeval: <em>This is the
+- * rest of the elapsed time (a fraction of a second), represented as the number
+- * of microseconds. It is always less than one @a million.</em>
+- *
+- */
+-#define TIMEVAL_ADD(__tv, __sec, __usec) \
+- do { \
+- (__tv)->tv_sec += __sec; \
+- (__tv)->tv_usec += __usec; \
+- if((__tv)->tv_usec >= 1000000) { \
+- ++(__tv)->tv_sec; \
+- (__tv)->tv_usec -= 1000000; \
+- } \
+- } while(0)
+-
+-#define likely(x) (__builtin_expect((x),1))
+-#define unlikely(x) (__builtin_expect((x),0))
+-
+-#define __dessert_assert(func, file, line, e) \
+- ((void)_dessert_log(LOG_EMERG, func, file, line, "assertion `%s' failed!\n", e), abort)
+-
+-#ifdef NDEBUG
+-#define assert(e) ((void)0)
+-#else
+-#define assert(e) \
+- (__builtin_expect(!(e), 0) ? __dessert_assert(__FUNCTION__, __FILE__, __LINE__, #e) : (void)0)
+-#endif
+-
+-/** @} */
+-
+-/******************************************************************************
+- *
+- * ! ! ! ! O L D ! ! ! T O D O ! ! ! !
+- *
+- ******************************************************************************/
+-
+-/** the config-flag variable */
+-//extern uint16_t dessert_cfgflags; // TODO not used! to be removed??!?
+-
+-/** size of a dessert_msg buffer */
+-//#define dessert_msg_buflen(x) ((x->flags&DESSERT_FLAG_SPARSE)?(x->hlen+x->plen):(DESSERT_MAXFRAMELEN+DESSERT_MSGPROCLEN))
+-
+-//#define dessert_frameid_overflow(x, y) ((x>y)&&((x-y)>(DESSERT_FRAMEID_MAX/2)))
+-
+-
+-#endif /* DESSERT_H*/
+Index: libdessert0.86-0.86.14/dessert_agentx.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_agentx.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,563 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by David Gutzmann
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-/* global data storage // P U B L I C */
+-
+-/* global data storage // P R I V A T E */
+-pthread_rwlock_t _dessert_appstats_cblist_lock = PTHREAD_RWLOCK_INITIALIZER;
+-dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist = NULL;
+-
+-pthread_rwlock_t _dessert_appparams_cblist_lock = PTHREAD_RWLOCK_INITIALIZER;
+-dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist = NULL;
+-
+-/* local data storage*/
+-int keep_snmp_running = 1;
+-
+-pthread_mutex_t _dessert_agentx_appparams_nextindex_mutex =
+- PTHREAD_MUTEX_INITIALIZER;
+-uint8_t _dessert_agentx_appparams_nextindex = 0;
+-
+-/* internal functions forward declarations*/
+-static void *_dessert_agentx_worker(void *arg);
+-static dessert_agentx_appstats_cb_entry_t *_dessert_agentx_appstats_add(
+- dessert_agentx_appstatscb_get_t *c, uint8_t bulknobulk_flag);
+-static uint8_t _dessert_agentx_appparams_new_index(void);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * NET - S N M P // A G E N T _ X
+- *
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * appStats
+- ******************************************************************************/
+-
+-/** Creates and initializes a new dessert_agentx_appstats_t.
+- *
+- * @return the new dessert_agentx_appstats_t
+- *
+- * @warning A dessert_agentx_appstats_t allocated with this function must be
+- * freed with dessert_agentx_appstats_destroy().
+- *
+- * @see dessert_agentx_appstats_destroy()
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appstats_t *dessert_agentx_appstats_new() {
+- dessert_agentx_appstats_t *appstat;
+-
+- appstat = malloc(sizeof(dessert_agentx_appstats_t));
+-
+- appstat->prev = appstat;
+- appstat->next = NULL;
+-
+- memset(appstat->name,0, sizeof(appstat->name));
+- memset(appstat->desc,0, sizeof(appstat->desc));
+-
+- appstat->value_type = DESSERT_APPSTATS_VALUETYPE_BOOL;
+- appstat->node_or_link = DESSERT_APPSTATS_NODEORLINK_NONE;
+- memset(appstat->macaddress1, 0, ETHER_ADDR_LEN);
+- memset(appstat->macaddress2, 0, ETHER_ADDR_LEN);
+-
+- appstat->bool = DESSERT_APPSTATS_BOOL_FALSE;
+-
+- return appstat;
+-}
+-
+-/** Frees a dessert_agentx_appstats_t.
+- *
+- * @param appstat the dessert_agentx_appstats_t to be freed
+- *
+- * @warning Only use this method to free a dessert_agentx_appstats_t which was allocated with dessert_agentx_appstats_new().
+- *
+- * @see dessert_agentx_appstats_new()
+- *
+- * @par Description:\n
+- */
+-void dessert_agentx_appstats_destroy(dessert_agentx_appstats_t *appstat) {
+- free(appstat);
+-}
+-
+-/** Adds an application statistics callback.
+- *
+- * @param[in] *c the callback to add
+- *
+- * @retval pointer to the corresponding callback entry on success
+- * @retval NULL otherwise
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add(
+- dessert_agentx_appstatscb_get_t *c) {
+-
+- return (_dessert_agentx_appstats_add(c, DESSERT_APPSTATS_CB_NOBULK));
+-}
+-
+-/** Adds an application statistics bulk callback.
+- *
+- * @param[in] *c the callback to add
+- *
+- * @retval pointer to the corresponding callback entry on success
+- * @retval NULL otherwise
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add_bulk(
+- dessert_agentx_appstatscb_get_t *c) {
+-
+- return (_dessert_agentx_appstats_add(c, DESSERT_APPSTATS_CB_BULK));
+-}
+-
+-/** Deletes an application statistics callback.
+- *
+- * @param *e pointer to a callback entry
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR otherwise
+- *
+- * @see dessert_agentx_appstats_add()
+- * @see dessert_agentx_appstats_add_bulk()
+- *
+- * @par Description:\n
+- */
+-int dessert_agentx_appstats_del(dessert_agentx_appstats_cb_entry_t *e) {
+-
+- if (e == NULL) {
+- return DESSERT_ERR;
+- }
+-
+- pthread_rwlock_wrlock(&_dessert_appstats_cblist_lock);
+- DL_DELETE(_dessert_appstats_cblist, e);
+- pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
+-
+- free(e);
+-
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- * appParams
+- ******************************************************************************/
+-
+-/** Creates and initializes a new dessert_agentx_appparams_t.
+- *
+- * @return the new dessert_agentx_appparams_t
+- *
+- * @warning A dessert_agentx_appparams_t allocated with this function must be
+- * freed with dessert_agentx_appparams_destroy().
+- *
+- * @see dessert_agentx_appparams_destroy()
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appparams_t *dessert_agentx_appparam_new() {
+- dessert_agentx_appparams_t *appparam;
+-
+- appparam = malloc(sizeof(dessert_agentx_appparams_t));
+-
+- memset(appparam->name,0, sizeof(appparam->name));
+- memset(appparam->desc,0, sizeof(appparam->desc));
+-
+- appparam->value_type = DESSERT_APPPARAMS_VALUETYPE_BOOL;
+-
+- appparam->bool = DESSERT_APPSTATS_BOOL_FALSE;
+-
+- return appparam;
+-}
+-
+-/** Frees a dessert_agentx_appparams_t.
+- *
+- * @param appparam the dessert_agentx_appparams_t to be freed
+- *
+- * @warning Only use this method to free a dessert_agentx_appparams_t which was
+- * allocated with dessert_agentx_appparams_new().
+- *
+- * @see dessert_agentx_appparams_new()
+- *
+- * @par Description:\n
+- */
+-void dessert_agentx_appparam_destroy(dessert_agentx_appparams_t *appparam) {
+- free(appparam);
+-}
+-
+-/** Adds an application parameter callback.
+- *
+- * @param[in] *c the callback to add
+- *
+- * @retval pointer to the corresponding callback entry on success
+- * @retval NULL otherwise
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appparams_cb_entry_t *dessert_agentx_appparams_add(
+- dessert_agentx_appparamscb_get_t *get,
+- dessert_agentx_appparamscb_set_t *set) {
+-
+- dessert_agentx_appparams_cb_entry_t *e;
+-
+- e = malloc(sizeof(dessert_agentx_appparams_cb_entry_t));
+-
+- if (e == NULL) {
+- dessert_err("failed to allocate buffer for new dessert_agentx_appparams_entry_t");
+- return (NULL);
+- }
+-
+- e->index = _dessert_agentx_appparams_new_index();
+- e->get = get;
+- e->set = set;
+-
+- pthread_rwlock_wrlock(&_dessert_appparams_cblist_lock);
+- DL_APPEND(_dessert_appparams_cblist, e);
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+-
+- return (e);
+-}
+-
+-/** Deletes an application parameter callback.
+- *
+- * @param *e pointer to a callback entry
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR otherwise
+- *
+- * @see dessert_agentx_appparams_add()
+- *
+- * @par Description:\n
+- */
+-int dessert_agentx_appparams_del(dessert_agentx_appparams_cb_entry_t *e) {
+-
+- if (e == NULL) {
+- return DESSERT_ERR;
+- }
+-
+- pthread_rwlock_wrlock(&_dessert_appparams_cblist_lock);
+- DL_DELETE(_dessert_appparams_cblist, e);
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+-
+- /* TODO: invalidate row*/
+-
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * NET - S N M P // A G E N T _ X
+- *
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * appStats
+- ******************************************************************************/
+-
+-void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat){
+- if (appstat->value_type == DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
+- && appstat->octetstring != NULL) {
+- free(appstat->octetstring);
+- }
+- dessert_agentx_appstats_destroy(appstat);
+-}
+-
+-void _dessert_agentx_appstats_free_list(
+- dessert_agentx_appstats_t **appstats_list) {
+- dessert_agentx_appstats_t *appstat;
+- dessert_agentx_appstats_t *tbf;
+-
+- for (appstat = (*appstats_list); appstat;) {
+- tbf = appstat;
+- appstat = appstat->next;
+- _dessert_agentx_appstats_free(tbf);
+- }
+-}
+-
+-int _dessert_agentx_appstats_harvest_callbacks(
+- dessert_agentx_appstats_t **appstats_list) {
+- dessert_agentx_appstats_cb_entry_t *cbe;
+- dessert_agentx_appstats_t *new_appstat;
+- dessert_agentx_appstats_t *appstat;
+- int res = 0;
+-
+- pthread_rwlock_rdlock(&_dessert_appstats_cblist_lock);
+- DL_FOREACH(_dessert_appstats_cblist, cbe) {
+-
+- new_appstat = dessert_agentx_appstats_new();
+- if (new_appstat == NULL) {
+- dessert_err("failed to allocate buffer for new dessert_agentx_appstats_entry_t");
+-
+- dessert_err("freeing appstats harvested so far...");
+- _dessert_agentx_appstats_free_list(appstats_list);
+-
+- return DESSERT_ERR;
+- }
+-
+- res = cbe->c(new_appstat);
+-
+- if (res == DESSERT_OK) {
+- if (cbe->isbulk_flag & DESSERT_APPSTATS_CB_NOBULK) {
+-
+- DL_APPEND(*appstats_list, new_appstat);
+- } else { // DESSERT_APPSTATS_BULK
+- dessert_agentx_appstats_t temp;
+- DL_FOREACH(new_appstat, appstat ) {
+- temp.next = appstat->next;
+- temp.prev = appstat->prev;
+- DL_APPEND(*appstats_list, appstat);
+- appstat = &temp;
+- }
+- }
+- } else {
+- dessert_err("freeing list of appstats received from callback...");
+- _dessert_agentx_appstats_free_list(&new_appstat);
+- pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
+- dessert_agentx_appstats_del(cbe);
+- pthread_rwlock_rdlock(&_dessert_appstats_cblist_lock);
+- }
+-
+- }
+- pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
+-
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- * appParams
+- ******************************************************************************/
+-
+-void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam) {
+- if (appparam->value_type == DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
+- && appparam->octetstring != NULL) {
+- free(appparam->octetstring);
+- }
+- dessert_agentx_appparam_destroy(appparam);
+-}
+-
+-void _dessert_agentx_appparams_free_list(
+- dessert_agentx_appparams_t **appparams_list) {
+- dessert_agentx_appparams_t *appparam;
+- dessert_agentx_appparams_t *tbf;
+-
+- for (appparam = (*appparams_list); appparam;) {
+- tbf = appparam;
+- appparam = appparam->next;
+- _dessert_agentx_appparams_free(tbf);
+- }
+-}
+-
+-int _dessert_agentx_appparams_harvest_callbacks(
+- dessert_agentx_appparams_t **appparams_list) {
+- dessert_agentx_appparams_cb_entry_t *cbe;
+- dessert_agentx_appparams_t *new_appparam;
+- int res = 0;
+-
+- pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
+- DL_FOREACH(_dessert_appparams_cblist, cbe) {
+- new_appparam = dessert_agentx_appparam_new();
+-
+- if (new_appparam == NULL) {
+- dessert_err("failed to allocate buffer for new dessert_agentx_appparams_entry_t");
+-
+- dessert_err("freeing appstats harvested so far...");
+- _dessert_agentx_appparams_free_list(appparams_list);
+-
+- return DESSERT_ERR;
+- }
+-
+- res = cbe->get(new_appparam);
+- new_appparam->index = cbe->index;
+-
+- if (res == DESSERT_OK) {
+- DL_APPEND(*appparams_list, new_appparam);
+- } else {
+- _dessert_agentx_appparams_free(new_appparam);
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+- dessert_agentx_appparams_del(cbe);
+- pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
+- }
+-
+- } // DL_FOREACH
+-
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+-
+- return DESSERT_OK;
+-}
+-
+-dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(
+- int index) {
+- dessert_agentx_appparams_cb_entry_t *cbe;
+-
+- pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
+- DL_FOREACH(_dessert_appparams_cblist, cbe)
+- if (cbe->index == index)
+- break;
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+-
+- if (cbe->index == index)
+-
+- return cbe->set;
+- else {
+-
+- return NULL;
+- }
+-}
+-
+-/******************************************************************************
+- * other
+- ******************************************************************************/
+-
+-/** setup and initialize net-snmp subagent (via agent x)*/
+-void _dessert_agentx_init_subagent() {
+- /**************************************************************************
+- * setup snmp handling....
+- *************************************************************************/
+-
+- pthread_t snmp_worker;
+-
+- snmp_enable_calllog();
+- //debug_register_tokens("trace");
+- //debug_register_tokens("tdomain");
+- debug_register_tokens(AGENT);
+- //debug_register_tokens("snmp_agent");
+- //debug_register_tokens("helper:table:req");
+-
+- debug_register_tokens("dessertAppParamsTable");
+- debug_register_tokens("verbose:dessertAppParamsTable");
+- debug_register_tokens("internal:dessertAppParamsTable");
+-
+- debug_register_tokens("dessertAppParamsTable");
+- debug_register_tokens("verbose:dessertAppStatsTable");
+- debug_register_tokens("internal:dessertAppStatsTable");
+-
+- snmp_set_do_debugging(1);
+-
+- netsnmp_log_handler *logh;
+-
+- logh = netsnmp_register_loghandler(NETSNMP_LOGHANDLER_FILE, LOG_DEBUG);
+- if (logh) {
+- logh->pri_max = LOG_EMERG;
+- logh->token = strdup("/tmp/dessertAGENTX.log");
+- }
+-
+- netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
+-
+- //SOCK_STARTUP;
+- init_agent(AGENT);
+-
+- /*
+- * initialize the scalars
+- */
+- init_dessertObjects();
+-
+- /*
+- * init dessert{Mesh, Sys}ifTable mib code
+- */
+- init_dessertMeshifTable();
+- init_dessertSysifTable();
+-
+- /*
+- * init dessertApp{Stats, Param}Table mib code
+- */
+- init_dessertAppParamsTable();
+- init_dessertAppStatsTable();
+-
+- init_snmp(AGENT);
+- DEBUGMSGTL((AGENT, "Initialized agent and snmp.\n"));
+-
+- pthread_create(&snmp_worker, NULL, _dessert_agentx_worker, NULL);
+-}
+-
+-void dessert_agentx_stop_subagent() {
+- keep_snmp_running = 0;
+-}
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * NET - S N M P // A G E N T _ X
+- *
+- ******************************************************************************/
+-
+-static dessert_agentx_appstats_cb_entry_t *_dessert_agentx_appstats_add(
+- dessert_agentx_appstatscb_get_t *c, uint8_t bulknobulk_flag) {
+-
+- dessert_agentx_appstats_cb_entry_t *e;
+-
+- e = malloc(sizeof(dessert_agentx_appstats_cb_entry_t));
+-
+- if (e == NULL) {
+- dessert_err("failed to allocate buffer for new dessert_agentx_appstats_entry_t");
+- return (NULL);
+- }
+-
+- e->isbulk_flag |= bulknobulk_flag;
+- e->c = c;
+-
+- pthread_rwlock_wrlock(&_dessert_appstats_cblist_lock);
+- DL_APPEND(_dessert_appstats_cblist, e);
+- pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
+-
+- return (e);
+-}
+-
+-static uint8_t _dessert_agentx_appparams_new_index(void) {
+- uint8_t index;
+-
+- pthread_mutex_lock(&_dessert_agentx_appparams_nextindex_mutex);
+- index = _dessert_agentx_appparams_nextindex++;
+- pthread_mutex_unlock(&_dessert_agentx_appparams_nextindex_mutex);
+-
+- return index;
+-}
+-
+-static void *_dessert_agentx_worker(void *arg) {
+- DEBUGMSGTL((AGENT, "snmp_worker running...\n"));
+- dessert_info("snmp_worker running...");
+-
+- while (keep_snmp_running) {
+- /*
+- * if you use select(), see snmp_select_info() in snmp_api(3)
+- */
+- /*
+- * --- OR ---
+- */
+- agent_check_and_process(1); /* 0 == don't block */
+- }
+-
+- dessert_info("snmp_worker exiting...");
+-
+- return (NULL);
+-}
+Index: libdessert0.86-0.86.14/dessert_cli.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_cli.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,255 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-#ifndef HOST_NAME_MAX
+-#define HOST_NAME_MAX 32
+-#endif
+-
+-/* global data storage // P U B L I C */
+-struct cli_def *dessert_cli;
+-struct cli_command *dessert_cli_show;
+-struct cli_command *dessert_cli_cfg_iface;
+-struct cli_command *dessert_cli_cfg_no;
+-struct cli_command *dessert_cli_cfg_no_iface;
+-struct cli_command *dessert_cli_cfg_logging;
+-struct cli_command *dessert_cli_cfg_no_logging;
+-
+-/* global data storage // P R I V A T E */
+-/* nothing here - yet */
+-
+-/* local data storage*/
+-int _dessert_cli_sock;
+-struct sockaddr_in6 _dessert_cli_addr;
+-char _dessert_cli_hostname[HOST_NAME_MAX + DESSERT_PROTO_STRLEN + 1];
+-pthread_t _dessert_cli_worker;
+-
+-/* internal functions forward declarations*/
+-static void *_dessert_cli_accept_thread(void* arg);
+-static int _dessert_cli_cmd_dessertinfo(struct cli_def *cli, char *command,
+- char *argv[], int argc);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * C L I - C O M M A N D L I N E I N T E R F A C E
+- *
+- ******************************************************************************/
+-
+-/** Start up the command line interface.
+- *
+- * @param[in] port port to listen on
+- *
+- * @retval DESSERT_OK on success
+- * @retval -errno otherwise
+- *
+- * %DESCRIPTION:
+- *
+- */
+-int dessert_cli_run(int port) {
+- int on = 1;
+-
+- /* listen for connections */
+- _dessert_cli_sock = socket(AF_INET6, SOCK_STREAM, 0);
+- setsockopt(_dessert_cli_sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+- memset(&_dessert_cli_addr, 0, sizeof(_dessert_cli_addr));
+- _dessert_cli_addr.sin6_family = AF_INET6;
+- _dessert_cli_addr.sin6_addr = in6addr_any;
+- _dessert_cli_addr.sin6_port = htons(port);
+- if (bind(_dessert_cli_sock, (struct sockaddr *) &_dessert_cli_addr,
+- sizeof(_dessert_cli_addr))) {
+- dessert_err("cli socket bind to port %d failed - %s", port, strerror(errno));
+- return -errno;
+- }
+- listen(_dessert_cli_sock, 8);
+- dessert_debug("starting worker thread for cli");
+- pthread_create(&_dessert_cli_worker, NULL, _dessert_cli_accept_thread,
+- &_dessert_cli_sock);
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * C L I - C O M M A N D L I N E I N T E R F A C E
+- *
+- ******************************************************************************/
+-
+-/** internal function to initialize libcli */
+-int _dessert_cli_init() {
+-
+- dessert_cli = cli_init();
+-
+- /* set host name */
+- memset(_dessert_cli_hostname, 0x0, HOST_NAME_MAX + DESSERT_PROTO_STRLEN + 1);
+- gethostname(_dessert_cli_hostname, HOST_NAME_MAX);
+- strncpy(_dessert_cli_hostname + strlen(_dessert_cli_hostname), ":", 1);
+- strncpy(_dessert_cli_hostname + strlen(_dessert_cli_hostname),
+- dessert_proto, DESSERT_PROTO_STRLEN);
+- cli_set_hostname(dessert_cli, _dessert_cli_hostname);
+-
+- /* initialize show commands */
+- dessert_cli_show = cli_register_command(dessert_cli, NULL, "show", NULL,
+- PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "display information");
+- cli_register_command(dessert_cli, dessert_cli_show, "dessert-info",
+- _dessert_cli_cmd_dessertinfo, PRIVILEGE_UNPRIVILEGED, MODE_EXEC,
+- "display information about this program");
+- cli_register_command(dessert_cli, dessert_cli_show, "logging",
+- _dessert_cli_cmd_logging, PRIVILEGE_UNPRIVILEGED, MODE_EXEC,
+- "show logging ringbuffer");
+-
+- /* initialize config mode commands */
+- dessert_cli_cfg_iface = cli_register_command(dessert_cli, NULL,
+- "interface", NULL, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "create or configure interfaces");
+- dessert_cli_cfg_no = cli_register_command(dessert_cli, NULL, "no", NULL,
+- PRIVILEGE_PRIVILEGED, MODE_CONFIG, "negate command");
+- dessert_cli_cfg_no_iface = cli_register_command(dessert_cli,
+- dessert_cli_cfg_no, "interface", NULL, PRIVILEGE_PRIVILEGED,
+- MODE_CONFIG, "remove interface or negate interface config");
+- dessert_cli_cfg_logging = cli_register_command(dessert_cli, NULL,
+- "logging", NULL, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "change logging config");
+- dessert_cli_cfg_no_logging = cli_register_command(dessert_cli,
+- dessert_cli_cfg_no, "logging", NULL, PRIVILEGE_PRIVILEGED,
+- MODE_CONFIG, "disable logging for...");
+- cli_register_command(dessert_cli, dessert_cli_cfg_logging, "ringbuffer",
+- _dessert_cli_logging_ringbuffer, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "set logging ringbuffer size (in lines)");
+- cli_register_command(dessert_cli, dessert_cli_cfg_no_logging, "ringbuffer",
+- _dessert_cli_logging_ringbuffer, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "disable logging to ringbuffer");
+- cli_register_command(dessert_cli, dessert_cli_cfg_logging, "file",
+- _dessert_cli_logging_file, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "set logfile and enable file logging");
+- cli_register_command(dessert_cli, dessert_cli_cfg_no_logging, "file",
+- _dessert_cli_logging_file, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "set logfile disable file logging");
+-
+- /* initialize other commands */
+- cli_register_command(dessert_cli, NULL, "shutdown",
+- _dessert_cli_cmd_shutdown, PRIVILEGE_PRIVILEGED, MODE_EXEC,
+- "shut daemon down");
+-
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * C L I - C O M M A N D L I N E I N T E R F A C E
+- *
+- ******************************************************************************/
+-
+-/** command "show dessert-info" */
+-static int _dessert_cli_cmd_dessertinfo(struct cli_def *cli, char *command,
+- char *argv[], int argc) {
+- cli_print(cli, "\nprotocol running: %s v %d", dessert_proto, dessert_ver);
+- cli_print(cli, "libdessert version: %s", SHLIB_VERSION);
+- cli_print(
+- cli,
+- " ------------------------------------------------------------------------------ ");
+- cli_print(
+- cli,
+- " Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB). ");
+- cli_print(
+- cli,
+- " All rights reserved. ");
+- cli_print(
+- cli,
+- " ");
+- cli_print(
+- cli,
+- " These sources were originally developed by Philipp Schmidt ");
+- cli_print(
+- cli,
+- " at Freie Universitaet Berlin (http://www.fu-berlin.de/), ");
+- cli_print(
+- cli,
+- " Computer Systems and Telematics / Distributed, Embedded Systems (DES) group ");
+- cli_print(
+- cli,
+- " (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/) ");
+- cli_print(
+- cli,
+- " ------------------------------------------------------------------------------ ");
+- cli_print(
+- cli,
+- " This program is free software: you can redistribute it and/or modify it under ");
+- cli_print(
+- cli,
+- " the terms of the GNU General Public License as published by the Free Software ");
+- cli_print(
+- cli,
+- " Foundation, either version 3 of the License, or (at your option) any later ");
+- cli_print(
+- cli,
+- " version. ");
+- cli_print(
+- cli,
+- " ");
+- cli_print(
+- cli,
+- " This program is distributed in the hope that it will be useful, but WITHOUT ");
+- cli_print(
+- cli,
+- " ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ");
+- cli_print(
+- cli,
+- " FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ");
+- cli_print(
+- cli,
+- " ");
+- cli_print(
+- cli,
+- " You should have received a copy of the GNU General Public License along with ");
+- cli_print(
+- cli,
+- " this program. If not, see http://www.gnu.org/licenses/ . ");
+- cli_print(
+- cli,
+- " ------------------------------------------------------------------------------ ");
+- return CLI_OK;
+-}
+-
+-/** internal thread function running the cli */
+-static void *_dessert_cli_accept_thread(void* arg) {
+- int *s = (int *) arg;
+- int c;
+-
+- while ((c = accept(*s, NULL, 0))) {
+- cli_loop(dessert_cli, c); /* pass the connection off to libcli */
+- close(c);
+- }
+-
+- cli_done(dessert_cli); /* free data structures */
+-
+- return (NULL);
+-}
+Index: libdessert0.86-0.86.14/dessert_core.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_core.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,241 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-#include <sys/stat.h>
+-
+-/* global data storage // P U B L I C */
+-char dessert_proto[DESSERT_PROTO_STRLEN + 1];
+-u_int8_t dessert_ver;
+-u_int8_t dessert_l25_defsrc[ETHER_ADDR_LEN];
+-u_char ether_broadcast[ETHER_ADDR_LEN];
+-u_char ether_null[ETHER_ADDR_LEN];
+-pthread_rwlock_t dessert_cfglock = PTHREAD_RWLOCK_INITIALIZER;
+-
+-/* global data storage // P R I V A T E */
+-int _dessert_status = 0x0;
+-
+-/* local data storage*/
+-dessert_frameid_t _dessert_nextframeid = 0;
+-pthread_mutex_t _dessert_nextframeid_mutex = PTHREAD_MUTEX_INITIALIZER;
+-pthread_mutex_t _dessert_exit_mutex = PTHREAD_MUTEX_INITIALIZER;
+-pthread_cond_t _dessert_exit_do = PTHREAD_COND_INITIALIZER;
+-int _dessert_exit_code = 0;
+-char *dessert_pidfile_name;
+-
+-/* internal functions forward declarations*/
+-static void _dessert_cleanup(void);
+-static void _dessert_daemonize(void);
+-static int _dessert_pid(char* pidfile);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * C O R E
+- *
+- ******************************************************************************/
+-
+-/** Initializes dessert framework and sets up logging
+- * @arg *proto 4 char string for protocol name
+- * @arg version version number of protocol
+- * @arg opts @see DESSERT_OPT_*
+- * @returns DESSERT_OK on success, DESSERT_ERR otherwise
+- **/
+-int dessert_init(const char* proto, int version, uint16_t opts, char* pidfile) {
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- /* save global config */
+- memset(dessert_proto, 0x0, DESSERT_PROTO_STRLEN + 1);
+- strncpy(dessert_proto, proto, DESSERT_PROTO_STRLEN);
+- dessert_ver = version;
+-
+- /* initialize pseudo constants */
+- memset(ether_broadcast, 255, ETHER_ADDR_LEN);
+- memset(ether_null, 0, ETHER_ADDR_LEN);
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* daemonize if needed */
+- if ((opts & DESSERT_OPT_DAEMONIZE) && !(opts & DESSERT_OPT_NODAEMONIZE)) {
+- _dessert_daemonize();
+- }
+-
+- /* write pid to file if needed */
+- if (pidfile != NULL) {
+- dessert_pidfile_name = pidfile;
+- _dessert_pid(pidfile);
+- }
+-
+- /* initialize cli */
+- _dessert_cli_init();
+-
+- /* start periodic thread */
+- _dessert_periodic_init();
+-
+- /* initialize net-snmp subagent */
+- _dessert_agentx_init_subagent();
+-
+- return DESSERT_OK;
+-}
+-
+-/** main loop - wait until dessert_exit() is called or killed
+- * @return arg to dessert_exit
+- */
+-int dessert_run() {
+- pthread_mutex_lock(&_dessert_exit_mutex);
+- pthread_cond_wait(&_dessert_exit_do, &_dessert_exit_mutex);
+- _dessert_cleanup();
+- pthread_mutex_unlock(&_dessert_exit_mutex);
+- return (_dessert_exit_code);
+-}
+-
+-/**Causes dessert_run() to break out of the main loop.
+- */
+-void dessert_exit() {
+- /* kill snmp_worker thread */
+- dessert_agentx_stop_subagent();
+- pthread_cond_signal(&_dessert_exit_do);
+-}
+-
+-/** generates a new, runtime-unique frame id
+- * @returns runtime-unique frame id
+- **/
+-dessert_frameid_t _dessert_newframeid() {
+- dessert_frameid_t x;
+- pthread_mutex_lock(&_dessert_nextframeid_mutex);
+- x = _dessert_nextframeid++;
+- pthread_mutex_unlock(&_dessert_nextframeid_mutex);
+- return (x);
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * C O R E
+- *
+- ******************************************************************************/
+-
+-/** command "shutdown" */
+-int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[],
+- int argc) {
+- cli_print(cli, "daemon will shut down now!");
+- pthread_mutex_lock(&_dessert_exit_mutex);
+- pthread_cond_broadcast(&_dessert_exit_do);
+- pthread_mutex_unlock(&_dessert_exit_mutex);
+-
+- return CLI_OK;
+-}
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * C O R E
+- *
+- ******************************************************************************/
+-
+-/** internal function to clean up things */
+-void _dessert_cleanup(void) {
+- /* remove pidfile */
+- if (dessert_pidfile_name != NULL) {
+- unlink(dessert_pidfile_name);
+- }
+-}
+-
+-/** internal daemonize helper */
+-void _dessert_daemonize(void) {
+- pid_t pid, sid;
+-
+- /* Fork off the parent process */
+- pid = fork();
+- if (pid < 0) {
+- perror("could not create daemon process!");
+- exit(EXIT_FAILURE);
+- }
+- /* If we got a good PID, then
+- we can exit the parent process. */
+- if (pid > 0) {
+- exit(EXIT_SUCCESS);
+- }
+-
+- /* Change the file mode mask */
+- umask(0);
+-
+- /* Open any logs here */
+-
+- /* Create a new SID for the child process */
+- sid = setsid();
+- if (sid < 0) {
+- perror("could not set sid!");
+- exit(EXIT_FAILURE);
+- }
+-
+- /* Change the current working directory */
+- if ((chdir("/")) < 0) {
+- perror("could not chdir /!");
+- exit(EXIT_FAILURE);
+- }
+-
+- /* Close out the standard file descriptors */
+- close(STDIN_FILENO);
+- close(STDOUT_FILENO);
+- close(STDERR_FILENO);
+-
+- /* write config */
+- pthread_rwlock_wrlock(&dessert_cfglock);
+- _dessert_status |= _DESSERT_STATUS_DAEMON;
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* adopt logging */
+- dessert_logcfg(0x0);
+-}
+-
+-/** internal pid-write helper */
+-int _dessert_pid(char* pidfile) {
+- FILE *fd;
+-
+- fd = fopen(pidfile, "w");
+- if (fd == 0) {
+- dessert_warn("could not open pid file");
+- return 1;
+- } else {
+- int r;
+- r = fprintf(fd, "%d\n", getpid());
+- if (r < 0) {
+- dessert_warn("could not write to pid file");
+- return DESSERT_ERR;
+- }
+-
+- if (fclose(fd) != 0) {
+- dessert_warn("failed to close pid file");
+- }
+- }
+-
+- return DESSERT_OK;
+-}
+Index: libdessert0.86-0.86.14/dessert_internal.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_internal.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,219 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+-*******************************************************************************/
+-
+-#ifndef DESSERT_INTERNAL_H
+-#define DESSERT_INTERNAL_H
+-
+-/* load needed libs - quite dirty */
+-#include <stdlib.h>
+-#include <stdio.h>
+-#include <fcntl.h>
+-#include <string.h>
+-#include <stdarg.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <pthread.h>
+-#include <syslog.h>
+-#include <sys/socket.h>
+-#include <sys/ioctl.h>
+-#include <sys/sysctl.h>
+-#include <net/route.h>
+-#include <arpa/inet.h>
+-#include <netinet/in.h>
+-#include <libcli.h>
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-#include "utlist.h"
+-
+-
+-#include "snmp/dessertObjects.h"
+-#include "snmp/dessertMeshifTable.h"
+-#include "snmp/dessertSysifTable.h"
+-#include "snmp/dessertAppStatsTable.h"
+-#include "snmp/dessertAppParamsTable.h"
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * C O R E
+- *
+- ******************************************************************************/
+-
+-/** flag for _dessert_status - program is daemon */
+-#define _DESSERT_STATUS_DAEMON 0x1
+-
+-/** global status flag holder */
+-extern int _dessert_status;
+-
+-dessert_frameid_t _dessert_newframeid(void);
+-
+-int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[], int argc);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * C L I - C O M M A N D L I N E I N T E R F A C E
+- *
+- ******************************************************************************/
+-
+-int _dessert_cli_init(void);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * L O G F A C I L I T Y
+- *
+- ******************************************************************************/
+-
+-/** maximum size of a log line */
+-#define DESSERT_LOGLINE_MAX 1024
+-
+-/** logfile file pointer to use with DESSERT_OPT_LOGFILE */
+-extern FILE *dessert_logfd;
+-
+-int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[], int argc);
+-int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
+-int _dessert_cli_no_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
+-int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
+-int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * M E S H - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** callback list entry for dessert mesh interface callbacks */
+-typedef struct dessert_meshrxcbe {
+- /** pointer to callback to call */
+- dessert_meshrxcb_t *c;
+- /** priority - lowest first */
+- int prio;
+- /** next entry in list */
+- struct dessert_meshrxcbe *next;
+-} dessert_meshrxcbe_t;
+-
+-int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif);
+-int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len, dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif, dessert_frameid_t id);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * S Y S - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** callback list entry for tun/tap callbacks */
+-typedef struct dessert_sysrxcbe {
+- /** pointer to callback to call */
+- dessert_sysrxcb_t *c;
+- /** priority - lowest first */
+- int prio;
+- /** next entry in list */
+- struct dessert_sysrxcbe *next;
+-} dessert_sysrxcbe_t;
+-
+-extern struct dessert_sysif *_dessert_sysif;
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * M E S S A G E H A N D L I N G
+- *
+- ******************************************************************************/
+-
+-/** size of a dessert_msg struct */
+-#define DESSERT_MSGLEN sizeof(struct dessert_msg)
+-
+-/** size of a dessert_msg_proc struct */
+-#define DESSERT_MSGPROCLEN sizeof(struct dessert_msg_proc)
+-
+-/** maximum frame size to assemble as dessert_msg */
+-#define DESSERT_MAXFRAMEBUFLEN DESSERT_MAXFRAMELEN
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * P E R I O D I C T A S K S
+- *
+- ******************************************************************************/
+-
+-void _dessert_periodic_init(void);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * NET - S N M P // A G E N T _ X
+- *
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-#define AGENT "dessertAGENTX"
+-
+-#define DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT 10
+-#define DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT 10
+-#define DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT 10
+-#define DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT 1
+-
+-/******************************************************************************
+- * globals
+- ******************************************************************************/
+-
+-extern pthread_rwlock_t _dessert_appstats_cblist_lock;
+-extern dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist;
+-
+-extern pthread_rwlock_t _dessert_appparams_cblist_lock;
+-extern dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist;
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-int _dessert_agentx_appstats_harvest_callbacks(dessert_agentx_appstats_t **appstats_list);
+-void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat);
+-void _dessert_agentx_appstats_free_list(dessert_agentx_appstats_t **appstats_list);
+-
+-int _dessert_agentx_appparams_harvest_callbacks(dessert_agentx_appparams_t **appparams_list);
+-void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam);
+-void _dessert_agentx_appparams_free_list(dessert_agentx_appparams_t **appparams_list);
+-dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(int index);
+-
+-void _dessert_agentx_init_subagent(void);
+-void dessert_agentx_stop_subagent(void);
+-
+-
+-#endif /* DESSERT_INTERNAL_H */
+Index: libdessert0.86-0.86.14/dessert_log.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_log.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,417 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-#include <sys/stat.h>
+-
+-/* data storage */
+-FILE *dessert_logfd = NULL;
+-char dessert_logprefix[12];
+-
+-#define _DESSERT_LOGFLAG_SYSLOG 0x1
+-#define _DESSERT_LOGFLAG_LOGFILE 0x2
+-#define _DESSERT_LOGFLAG_STDERR 0x4
+-#define _DESSERT_LOGFLAG_RBUF 0x8
+-int _dessert_logflags = _DESSERT_LOGFLAG_STDERR;
+-int _dessert_loglevel = LOG_DEBUG;
+-
+-/* the logging ringbuffer */
+-char *_dessert_logrbuf = NULL; /* pointer to begin */
+-int _dessert_logrbuf_len = 0; /* length in lines (DESSERT_LOGLINE_MAX*_dessert_logrbuf_len*sizeof(char) would be in bytes) */
+-int _dessert_logrbuf_cur = 0; /* current position */
+-int _dessert_logrbuf_used = 0; /* used slots */
+-pthread_rwlock_t _dessert_logrbuf_len_lock = PTHREAD_RWLOCK_INITIALIZER; /* for resizing */
+-pthread_mutex_t _dessert_logrbuf_mutex = PTHREAD_MUTEX_INITIALIZER; /* for moving _dessert_logrbuf_cur */
+-
+-/* internal functions forward declarations TODO: cleanup */
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * L O G F A C I L I T Y
+- *
+- ******************************************************************************/
+-
+-/** Configure dessert logging framework and sets up logging.
+- *
+- * @arg opts OR'd flags - @see DESSERT_LOG_*
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_logcfg(uint16_t opts) {
+- snprintf(dessert_logprefix, 12, "dessert/%s", dessert_proto);
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- /* configure logging */
+- if ((opts & DESSERT_LOG_SYSLOG) && !(opts & DESSERT_LOG_NOSYSLOG)) {
+- if (!(_dessert_logflags & _DESSERT_LOGFLAG_SYSLOG)) {
+- /* initialize syslog channel */
+- openlog(dessert_logprefix, LOG_PID, LOG_DAEMON);
+- }
+- _dessert_logflags |= _DESSERT_LOGFLAG_SYSLOG;
+- } else if (!(opts & DESSERT_LOG_SYSLOG) && (opts & DESSERT_LOG_NOSYSLOG)) {
+- if (_dessert_logflags & _DESSERT_LOGFLAG_SYSLOG) {
+- /* close syslog channel */
+- closelog();
+- }
+- _dessert_logflags &= ~_DESSERT_LOGFLAG_SYSLOG;
+- }
+- if ((opts & DESSERT_LOG_STDERR) && !(opts & DESSERT_LOG_NOSTDERR)
+- && !(_dessert_status & _DESSERT_STATUS_DAEMON)) {
+- _dessert_logflags |= _DESSERT_LOGFLAG_STDERR;
+- } else if ((!(opts & DESSERT_LOG_STDERR) && (opts & DESSERT_LOG_NOSTDERR))
+- || (_dessert_status & _DESSERT_STATUS_DAEMON)) {
+- _dessert_logflags &= ~_DESSERT_LOGFLAG_STDERR;
+- }
+- if ((opts & DESSERT_LOG_FILE) && !(opts & DESSERT_LOG_NOFILE)
+- && dessert_logfd != NULL) {
+- _dessert_logflags |= _DESSERT_LOGFLAG_LOGFILE;
+- } else if ((!(opts & DESSERT_LOG_FILE) && (opts & DESSERT_LOG_NOFILE))
+- || dessert_logfd == NULL) {
+- _dessert_logflags &= ~_DESSERT_LOGFLAG_LOGFILE;
+- }
+- if ((opts & DESSERT_LOG_DEBUG) && !(opts & DESSERT_LOG_NODEBUG)) {
+- _dessert_loglevel = LOG_DEBUG;
+- } else if (!(opts & DESSERT_LOG_DEBUG) && (opts & DESSERT_LOG_NODEBUG)) {
+- _dessert_loglevel = LOG_INFO;
+- }
+- if ((opts & DESSERT_LOG_RBUF) && !(opts & DESSERT_LOG_NORBUF)) {
+- _dessert_logflags |= _DESSERT_LOGFLAG_RBUF;
+- } else if (!(opts & DESSERT_LOG_RBUF) && (opts & DESSERT_LOG_NORBUF)) {
+- _dessert_logflags &= ~_DESSERT_LOGFLAG_RBUF;
+- }
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return 0;
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * L O G F A C I L I T Y
+- *
+- ******************************************************************************/
+-
+-char* _dessert_log_rbuf_nextline(void) {
+- char* r = NULL;
+- pthread_mutex_lock(&_dessert_logrbuf_mutex);
+- if (_dessert_logrbuf_len > 0) {
+- if (_dessert_logrbuf_cur >= _dessert_logrbuf_len) {
+- _dessert_logrbuf_cur = 0;
+- }
+- r = _dessert_logrbuf + (DESSERT_LOGLINE_MAX * _dessert_logrbuf_cur);
+- _dessert_logrbuf_cur++;
+- if (_dessert_logrbuf_used < _dessert_logrbuf_len - 1) {
+- _dessert_logrbuf_used++;
+- }
+- }
+- pthread_mutex_unlock(&_dessert_logrbuf_mutex);
+-
+- return (r);
+-}
+-
+-/** internal log function
+- *
+- * @internal
+- *
+- * @param[in] level loglevel from <syslog.h>
+- * @param[in] *func function name called from
+- * @param[in] *file file name called from
+- * @param[in] *line line called from
+- * @param[in] *fmt printf format string
+- * @param[in] ... (var-arg) printf like variables
+- **/
+-void _dessert_log(int level, const char* func, const char* file, int line,
+- const char *fmt, ...) {
+- va_list args;
+- char *rbuf_line = NULL;
+- char buf[DESSERT_LOGLINE_MAX];
+- char lf[80];
+- char *lt;
+- char lds[27];
+- struct tm ldd;
+- time_t ldi;
+- int lf_slen, buf_slen;
+-
+- if (_dessert_loglevel < level)
+- return;
+-
+- snprintf(lf, 80, " (%s@%s:%d)", func, file, line);
+- lf_slen = strlen(lf);
+-
+- va_start(args, fmt);
+- vsnprintf(buf, DESSERT_LOGLINE_MAX, fmt, args);
+- va_end(args);
+- buf_slen = strlen(buf);
+-
+- if (_dessert_logflags | _DESSERT_LOGFLAG_SYSLOG) {
+- syslog(level, "%s%s", buf, lf);
+- }
+-
+- if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF) {
+- pthread_rwlock_rdlock(&_dessert_logrbuf_len_lock);
+- rbuf_line = _dessert_log_rbuf_nextline();
+- }
+-
+- if (_dessert_logflags | (_DESSERT_LOGFLAG_LOGFILE | _DESSERT_LOGFLAG_STDERR
+- | _DESSERT_LOGFLAG_RBUF)) {
+-
+- time(&ldi);
+- localtime_r(&ldi, &ldd);
+- snprintf(lds, 26, "%04d-%02d-%02d %02d:%02d:%02d%+05.1f ", ldd.tm_year
+- + 1900, ldd.tm_mon + 1, ldd.tm_mday, ldd.tm_hour, ldd.tm_min,
+- ldd.tm_sec, (double) ldd.tm_gmtoff / 3600);
+-
+- switch (level) {
+- case LOG_EMERG:
+- lt = "EMERG: ";
+- break;
+- case LOG_ALERT:
+- lt = "ALERT: ";
+- break;
+- case LOG_CRIT:
+- lt = "CRIT: ";
+- break;
+- case LOG_ERR:
+- lt = "ERR: ";
+- break;
+- case LOG_WARNING:
+- lt = "WARN: ";
+- break;
+- case LOG_NOTICE:
+- lt = "NOTICE:";
+- break;
+- case LOG_INFO:
+- lt = "INFO: ";
+- break;
+- default:
+- lt = "DEBUG: ";
+- break;
+- }
+-
+- if (32 + buf_slen + lf_slen > 80) {
+- if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
+- != NULL)
+- fprintf(dessert_logfd, "%s%s%s\n%80s\n", lds, lt, buf, lf);
+- if (_dessert_logflags & _DESSERT_LOGFLAG_STDERR)
+- fprintf(stderr, "%s%s%s\n%80s\n", lds, lt, buf, lf);
+- if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF && rbuf_line != NULL)
+- snprintf(rbuf_line, DESSERT_LOGLINE_MAX, "%s%s%s\n%80s", lds,
+- lt, buf, lf);
+- } else {
+- while (32 + buf_slen + lf_slen < 80) {
+- buf[buf_slen++] = ' ';
+- }
+- buf[buf_slen] = '\0';
+- if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
+- != NULL)
+- fprintf(dessert_logfd, "%s%s%s%s\n", lds, lt, buf, lf);
+- if (_dessert_logflags & _DESSERT_LOGFLAG_STDERR)
+- fprintf(stderr, "%s%s%s%s\n", lds, lt, buf, lf);
+- if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF && rbuf_line != NULL)
+- snprintf(rbuf_line, DESSERT_LOGLINE_MAX, "%s%s%s%s", lds, lt,
+- buf, lf);
+- }
+-
+- if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
+- != NULL) {
+- fflush(dessert_logfd);
+- }
+- if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF) {
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+- }
+-
+- }
+-}
+-
+-/** command "logging file" */
+-int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[],
+- int argc) {
+- FILE *newlogdf;
+-
+- if (argc != 1) {
+- cli_print(cli, "usage %s filename\n", command);
+- return CLI_ERROR;
+- }
+-
+- newlogdf = fopen(argv[0], "a");
+-
+- if (newlogdf == NULL) {
+- dessert_err("failed o open %s as logfile\n", argv[0]);
+- cli_print(cli, "failed o open %s as logfile\n", argv[0]);
+- return CLI_ERROR;
+- }
+-
+- /* clean up old logfile first */
+- if (dessert_logfd != NULL) {
+- dessert_logcfg(DESSERT_LOG_NOFILE);
+- fclose(dessert_logfd);
+- }
+-
+- dessert_logfd = newlogdf;
+- dessert_logcfg(DESSERT_LOG_FILE);
+-
+- return CLI_OK;
+-}
+-
+-/** command "logging file" */
+-int _dessert_cli_no_logging_file(struct cli_def *cli, char *command,
+- char *argv[], int argc) {
+- dessert_logcfg(DESSERT_LOG_NOFILE);
+- if (dessert_logfd != NULL) {
+- fclose(dessert_logfd);
+- }
+- dessert_logfd = NULL;
+- return CLI_OK;
+-}
+-
+-/** command "logging ringbuffer" */
+-int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command,
+- char *argv[], int argc) {
+- int newlen = -1;
+- if (argc != 1 || (newlen = (int) strtol(argv[0], NULL, 10)) < 0) {
+- cli_print(cli, "usage %s [buffer length]\n", command);
+- return CLI_ERROR;
+- }
+-
+- if (newlen == _dessert_logrbuf_len)
+- return CLI_OK;
+-
+- if (newlen == 0) {
+- cli_print(cli,
+- "will not set buffer length to 0 - use no logging ringbuffer instead\n");
+- return CLI_ERROR;
+- }
+-
+- pthread_rwlock_wrlock(&_dessert_logrbuf_len_lock);
+-
+- /* make logging buffer larger - easy if not ENOMEM*/
+- if (newlen > _dessert_logrbuf_len) {
+- _dessert_logrbuf = realloc(_dessert_logrbuf, newlen
+- * DESSERT_LOGLINE_MAX * sizeof(char));
+- if (_dessert_logrbuf == NULL) {
+- _dessert_logrbuf_len = 0;
+- _dessert_logrbuf_cur = 0;
+- } else {
+- _dessert_logrbuf_len = newlen;
+- }
+- dessert_logcfg(DESSERT_LOG_RBUF);
+- /* make logging buffer smaller - pain in the ass */
+- } else if (newlen < _dessert_logrbuf_len) {
+- /* move current log buffer if needed */
+- if (_dessert_logrbuf_cur > newlen) {
+- memmove(_dessert_logrbuf, _dessert_logrbuf + (DESSERT_LOGLINE_MAX
+- * (_dessert_logrbuf_cur - newlen)), newlen
+- * DESSERT_LOGLINE_MAX * sizeof(char));
+- _dessert_logrbuf_cur -= newlen;
+- }
+- _dessert_logrbuf = realloc(_dessert_logrbuf, newlen
+- * DESSERT_LOGLINE_MAX * sizeof(char));
+- if (_dessert_logrbuf == NULL) {
+- _dessert_logrbuf_len = 0;
+- _dessert_logrbuf_cur = 0;
+- } else {
+- _dessert_logrbuf_len = newlen;
+- }
+- } else {
+- dessert_err("this never happens");
+- }
+- if (_dessert_logrbuf_used > _dessert_logrbuf_len - 1)
+- _dessert_logrbuf_used = _dessert_logrbuf_len - 1;
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+- return CLI_OK;
+-
+-}
+-
+-/** command "no logging ringbuffer" */
+-int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command,
+- char *argv[], int argc) {
+- if (_dessert_logrbuf == NULL) {
+- return CLI_OK;
+- } else {
+- pthread_rwlock_wrlock(&_dessert_logrbuf_len_lock);
+- dessert_logcfg(DESSERT_LOG_NORBUF);
+- free(_dessert_logrbuf);
+- _dessert_logrbuf = NULL;
+- _dessert_logrbuf_len = 0;
+- _dessert_logrbuf_cur = 0;
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+- return CLI_OK;
+- }
+-
+-}
+-
+-/** command "show logging" */
+-int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[],
+- int argc) {
+- pthread_rwlock_rdlock(&_dessert_logrbuf_len_lock);
+- int i = 0;
+- int max = _dessert_logrbuf_len - 1;
+- char* line;
+-
+- if (_dessert_logrbuf_len < 1) {
+- cli_print(
+- cli,
+- "logging to ringbuffer is disables - use \"logging ringbuffer [int]\" in config-mode first");
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+- return CLI_ERROR;
+- }
+-
+- if (argc == 1) {
+- int max2 = (int) strtol(argv[0], NULL, 10);
+- if (max2 > 0) {
+- max = max2;
+- }
+- }
+-
+- /* where to start and print? */
+- if (max > _dessert_logrbuf_used) {
+- max = _dessert_logrbuf_used;
+- }
+- i = _dessert_logrbuf_cur - max - 1;
+- if (i < 0) {
+- i += _dessert_logrbuf_len;
+- }
+-
+- while (max > 0) {
+- i++;
+- max--;
+- if (i == _dessert_logrbuf_len) {
+- i = 0;
+- }
+- line = _dessert_logrbuf + (DESSERT_LOGLINE_MAX * i);
+- cli_print(cli, "%s", line);
+- }
+-
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+-
+- return CLI_OK;
+-}
+Index: libdessert0.86-0.86.14/dessert_meshiface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_meshiface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1220 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-#ifdef TARGET_FREEBSD
+-#include <ifaddrs.h>
+-#include <net/if_dl.h>
+-#endif
+-
+-/* global data storage // P U B L I C */
+-/* nothing here - yet */
+-
+-/* global data storage // P R I V A T E */
+-/* nothing here - yet */
+-
+-/* local data storage*/
+-dessert_meshif_t *_dessert_meshiflist = NULL;
+-
+-pthread_mutex_t _dessert_meshiflist_mutex = PTHREAD_MUTEX_INITIALIZER;
+-int _dessert_meshiflist_len = 0;
+-int _dessert_meshiflist_perm_count = 0;
+-int _dessert_meshiflist_current_perm = 0;
+-dessert_meshif_t ***_dessert_meshiflist_perms = NULL;
+-
+-dessert_meshrxcbe_t *_dessert_meshrxcblist;
+-int _dessert_meshrxcblistver = 0;
+-
+-/* internal functions forward declarations*/
+-static void _dessert_packet_process(u_char *args,
+- const struct pcap_pkthdr *header, const u_char *packet);
+-static void *_dessert_meshif_add_thread(void* arg);
+-static inline int _dessert_meshsend_if2(dessert_msg_t* msg,
+- dessert_meshif_t *iface);
+-static void _dessert_meshif_cleanup(dessert_meshif_t *meshif);
+-static void _dessert_meshiflist_update_permutations(void);
+-static inline int DL_LENGTH(dessert_meshif_t *l);
+-static inline void list2array(dessert_meshif_t *l, dessert_meshif_t **a,
+- int len);
+-static inline int fact(int i);
+-static inline void permutation(int k, int len, dessert_meshif_t **a);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * M E S H - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * sending messages
+- ******************************************************************************/
+-
+-/** Sends a \b dessert \b message via the specified interface or all interfaces.
+- *
+- * The original message buffer will not be altered, and the ethernet src address
+- * will be set correctly
+- *
+- * @param[in] *msgin message to send
+- * @param[in] *iface interface to send from - use NULL for all interfaces
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend(const dessert_msg_t* msgin, const dessert_meshif_t *iface) {
+- dessert_msg_t* msg;
+- int res;
+-
+- /* check message - we only send valid messages! */
+- if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
+- dessert_warn("will not send invalid message - aborting");
+- return EINVAL;
+- }
+-
+- /* clone message */
+- dessert_msg_clone(&msg, msgin, 1);
+- res = dessert_meshsend_fast(msg, iface);
+- dessert_msg_destroy(msg);
+-
+- return res;
+-
+-}
+-
+-/** Sends a \b dessert \b message via all interfaces, except via the specified interface.
+- *
+- * The original message buffer will not be altered, and the ethernet src address will be set correctly.
+- *
+- * @param[in] *msgin message to send
+- * @param[in] *iface interface NOT to send from - use NULL for all interfaces
+-
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_allbutone(const dessert_msg_t* msgin,
+- const dessert_meshif_t *iface) {
+- dessert_msg_t* msg;
+- int res;
+-
+- /* check message - we only send valid messages! */
+- if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
+- dessert_warn("will not send invalid message - aborting");
+- return EINVAL;
+- }
+-
+- /* clone message */
+- dessert_msg_clone(&msg, msgin, 1);
+- res = dessert_meshsend_fast_allbutone(msg, iface);
+- dessert_msg_destroy(msg);
+-
+- return res;
+-
+-}
+-
+-/** Sends a \b dessert \b message via the interface which is identified by the given hardware address.
+- *
+- * The original message buffer will not be altered, and the ethernet src address
+- * will be set correctly.
+- *
+- * @param[in] *msgin message to send
+- * @param[in] *hwaddr hardware address of the interface to send from
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_hwaddr(const dessert_msg_t* msgin,
+- const uint8_t hwaddr[ETHER_ADDR_LEN]) {
+- dessert_msg_t* msg;
+- int res;
+-
+- /* check message - we only send valid messages! */
+- if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
+- dessert_warn("will not send invalid message - aborting");
+- return EINVAL;
+- }
+-
+- /* clone message */
+- dessert_msg_clone(&msg, msgin, 1);
+- res = dessert_meshsend_fast_hwaddr(msg, hwaddr);
+- dessert_msg_destroy(msg);
+-
+- return res;
+-}
+-
+-/** Sends a \b dessert \b message via all interfaces in a randomized fashion.
+- *
+- * The original message buffer will not be altered, and the ethernet src address
+- * will be set correctly.
+- *
+- * @param[in] *msgin message to send
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_randomized(const dessert_msg_t* msgin) {
+- dessert_msg_t* msg;
+- int res;
+-
+- /* check message - we only send valid messages! */
+- if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
+- dessert_warn("will not send invalid message - aborting");
+- return EINVAL;
+- }
+-
+- /* clone message */
+- dessert_msg_clone(&msg, msgin, 1);
+- res = dessert_meshsend_fast_randomized(msg);
+- dessert_msg_destroy(msg);
+-
+- return res;
+-}
+-
+-/** Sends a \b dessert \b message fast via the specified interface or all interfaces.
+- *
+- * This method is faster than dessert_meshsend(), but does not check the message
+- * and may alter the message buffer.
+- *
+- * @param[in] *msg message to send
+- * @param[in] *iface interface to send from
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_fast(dessert_msg_t* msg, const dessert_meshif_t *iface) {
+- int res = 0;
+-
+- /* we have no iface - send on all! */
+- if (iface == NULL) {
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, iface) {
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, iface);
+- if (res) {
+- break;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- } else {
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, iface);
+- }
+-
+- return (res);
+-
+-}
+-
+-/** Sends a \b dessert \b message fast via all interfaces, except the specified interface.
+- *
+- * This method is faster than dessert_meshsend_allbutone(), but does not check the message
+- * and may alter the message buffer.
+- *
+- * @param[in] *msg message to send
+- * @param[in] *iface interface to NOT send from - use NULL for all interfaces
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_fast_allbutone(dessert_msg_t* msg,
+- const dessert_meshif_t *iface) {
+- dessert_meshif_t *curr_iface;
+- int res = 0;
+-
+- /* we have no iface - send on all! */
+- if (iface == NULL) {
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, curr_iface) {
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, iface);
+- if (res) {
+- break;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- } else {
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, curr_iface) {
+-
+- /* skip if it is the 'allbutone' interface */
+- if (curr_iface == iface)
+- curr_iface = curr_iface->next;
+-
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, iface);
+- if (res) {
+- break;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- }
+-
+- return (res);
+-
+-}
+-
+-/** Sends a \b dessert \b message fast via the interface specified by the given
+- * hardware address.
+- *
+- * This method is faster than dessert_meshsend_hwaddr(), but does not check the message
+- * and may alter the message buffer.
+- *
+- * @param[in] *msg message to send
+- * @param[in] *hwaddr hardware address of the interface to send from
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg,
+- const uint8_t hwaddr[ETHER_ADDR_LEN]) {
+- int res;
+- dessert_meshif_t *meshif;
+-
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, meshif) {
+- if (memcmp(meshif->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
+- break;
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- if (likely(meshif != NULL)) {
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, meshif->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, meshif);
+- } else {
+- dessert_err("No such interface - aborting");
+- return ENODEV;
+- }
+-
+- return (res);
+-}
+-
+-/** Sends a \b dessert \b message fast via all interfaces in a randomized fashion.
+- *
+- * This method is faster than dessert_meshsend_randomized(), but does not check
+- * the message and may alter the message buffer.
+- *
+- * @param[in] *msgin message to send
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_fast_randomized(dessert_msg_t* msgin) {
+- int i;
+- int res = 0;
+-
+- pthread_mutex_lock(&_dessert_meshiflist_mutex);
+- for (i = 0; i < _dessert_meshiflist_len; i++) {
+- res = dessert_meshsend_fast(msgin, _dessert_meshiflist_perms[_dessert_meshiflist_current_perm][i]);
+- if (res) {
+- break;
+- }
+- }
+- _dessert_meshiflist_current_perm = (_dessert_meshiflist_current_perm+1) % _dessert_meshiflist_perm_count;
+- pthread_mutex_unlock(&_dessert_meshiflist_mutex);
+-
+- return res;
+-}
+-
+-/** Sends a @b dessert @b message @a msg via the specified interface @a iface or
+- * all interfaces.
+- *
+- * This method is faster than dessert_meshsend(), but does not check the message
+- * and may alter the message buffer. In contrast to dessert_meshsend_fast() it
+- * does not write the ether_shost address.
+- *
+- * @param[in] *msg message to send
+- * @param[in] *iface interface to send from
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_raw(dessert_msg_t* msg, const dessert_meshif_t *iface) {
+- int res = 0;
+-
+- if (iface == NULL) {
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, iface) {
+- res = _dessert_meshsend_if2(msg, iface);
+- if (res) {
+- break;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- } else {
+- res = _dessert_meshsend_if2(msg, iface);
+- }
+-
+- return (res);
+-
+-}
+-
+-/******************************************************************************
+- * meshrx-callback handling
+- ******************************************************************************/
+-
+-/** Removes all occurrences of the given callback function @a c from the meshrx
+- * pipeline.
+- *
+- * @param[in] c callback function pointer
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR otherwise
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshrxcb_del(dessert_meshrxcb_t* c) {
+- int count = 0;
+- dessert_meshrxcbe_t *i, *last;
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- if (_dessert_meshrxcblist == NULL) {
+- count++;
+- goto dessert_meshrxcb_del_out;
+- }
+-
+- while (_dessert_meshrxcblist->c == c) {
+- count++;
+- i = _dessert_meshrxcblist;
+- _dessert_meshrxcblist = _dessert_meshrxcblist->next;
+- free(i);
+- if (_dessert_meshrxcblist == NULL) {
+- goto dessert_meshrxcb_del_out;
+- }
+- }
+-
+- for (i = _dessert_meshrxcblist; i->next != NULL; i = i->next) {
+- if (i->c == c) {
+- count++;
+- last->next = i->next;
+- free(i);
+- i = last;
+- }
+- last = i;
+- }
+-
+- dessert_meshrxcb_del_out: _dessert_meshrxcblistver++;
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return ((count > 0) ? DESSERT_OK : DESSERT_ERR);
+-
+-}
+-
+-/** Adds a callback function to the meshrx pipeline.
+- *
+- * The callback going to get called if a packet is received via a dessert interface.
+- *
+- * @param[in] c callback function
+- * @param[in] prio priority of the function - lower first!
+- *
+- * @retval DESSERT_OK on success
+- * @retval -errno on error
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio) {
+- dessert_meshrxcbe_t *cb, *i;
+-
+- cb = (dessert_meshrxcbe_t *) malloc(sizeof(dessert_meshrxcbe_t));
+- if (cb == NULL)
+- return (-errno);
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- cb->c = c;
+- cb->prio = prio;
+- cb->next = NULL;
+-
+- if (_dessert_meshrxcblist == NULL) {
+- _dessert_meshrxcblist = cb;
+- _dessert_meshrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+- }
+-
+- if (_dessert_meshrxcblist->prio > cb->prio) {
+- cb->next = _dessert_meshrxcblist;
+- _dessert_meshrxcblist = cb;
+- _dessert_meshrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+- }
+-
+- /* find right place for callback */
+- for (i = _dessert_meshrxcblist; i->next != NULL && i->next->prio
+- <= cb->prio; i = i->next)
+- ;
+-
+- /* insert it */
+- cb->next = i->next;
+- i->next = cb;
+- _dessert_meshrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- * mesh interface handling
+- ******************************************************************************/
+-
+-/** Returns the head of the list of mesh interfaces (_desert_meshiflist).
+- *
+- * @retval pointer if list is not empty
+- * @retval NULL otherwise
+- *
+- * %DESCRIPTION:
+- *
+- */
+-dessert_meshif_t* dessert_meshiflist_get() {
+- return _dessert_meshiflist;
+-}
+-
+-/** Looks for mesh interface with name @a dev in the list of mesh interfaces and
+- * returns a pointer to it.
+- *
+- * @param[in] *dev interface name
+- *
+- * @retval pointer if the interface is found
+- * @retval NULL otherwise
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-dessert_meshif_t* dessert_meshif_get_name(const char* dev) {
+- dessert_meshif_t *meshif = NULL;
+-
+- /* search dev name in iflist */
+- //meshif = _dessert_meshiflist;
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, meshif) {
+- if (strncmp(meshif->if_name, dev, IF_NAMESIZE) == 0)
+- break;
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return (meshif);
+-}
+-
+-/** Looks for mesh interface with hardware address @a hwaddr in the list of mesh
+- * interfaces and returns a pointer to it.
+- *
+- * @param[in] *hwaddr interface hardware address
+- *
+- * @retval pointer if the interface is found
+- * @retval NULL otherwise
+- *
+- * %DESCRIPTION:
+- *
+- */
+-dessert_meshif_t* dessert_meshif_get_hwaddr(const uint8_t hwaddr[ETHER_ADDR_LEN]) {
+- dessert_meshif_t *meshif = NULL;
+-
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, meshif) {
+- if (memcmp(meshif->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
+- break;
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return meshif;
+-}
+-
+-/** Removes the corresponding dessert_meshif struct from _dessert_meshiflist and does some cleanup.
+- *
+- * @param[in] dev interface name to remove from list
+- *
+- * @retval DESSERT_OK on success
+- * @retval -errno on error
+- *
+- * %DESCRIPTION:
+- *
+- */
+-int dessert_meshif_del(const char* dev) {
+- dessert_meshif_t *meshif;
+- // dessert_meshif_t *meshif_prev; TODO MESHIF_HASH
+-
+- /* lock the list */
+- pthread_rwlock_wrlock(&dessert_cfglock);
+- /* search dev name in iflist */
+- DL_FOREACH(_dessert_meshiflist, meshif) {
+- if (strncmp(meshif->if_name, dev, IF_NAMESIZE) == 0)
+- break;
+- }
+-
+- if (meshif == NULL) {
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return (ENODEV);
+- }
+-
+- /* remove it from list */
+- DL_DELETE(_dessert_meshiflist, meshif);
+- _dessert_meshiflist_update_permutations();
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* tell pcap not to further process packets */
+- pcap_breakloop(meshif->pcap);
+-
+- /* the remaining cleanup is done in the interface thread *
+- * using _dessert_meshif_cleanup */
+-
+- return DESSERT_OK;
+-
+-}
+-
+-/** Initializes given mesh interface, starts up the packet processor thread.
+-
+- * @param[in] *dev interface name
+- * @param[in] flags @todo Document the flags parameter.
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR on error
+- *
+- *
+- *
+- * %DESCRIPTION:
+- *
+- */
+-int dessert_meshif_add(const char* dev, uint8_t flags) {
+- dessert_meshif_t *meshif;
+-
+- uint8_t promisc = (flags & DESSERT_IF_NOPROMISC) ? 0 : 1;
+- struct bpf_program fp; /* filter program for libpcap */
+- char fe[64]; /* filter expression for libpcap */
+-
+- snprintf(fe, 64, "ether proto 0x%04x", DESSERT_ETHPROTO);
+-
+- /* init new interface entry */
+- meshif = (dessert_meshif_t*) malloc(sizeof(dessert_meshif_t));
+- if (meshif == NULL)
+- return (-errno);
+- memset((void *) meshif, 0, sizeof(dessert_meshif_t));
+- strncpy(meshif->if_name, dev, IF_NAMESIZE);
+- meshif->if_name[IF_NAMESIZE - 1] = '\0';
+- meshif->if_index = if_nametoindex(dev);
+- pthread_mutex_init(&(meshif->cnt_mutex), NULL);
+-
+- /* check if interface exists */
+- if (!meshif->if_index) {
+- dessert_err("interface %s - no such interface", meshif->if_name);
+- goto dessert_meshif_add_err;
+- }
+-
+- /* initialize libpcap */
+- meshif->pcap = pcap_open_live(meshif->if_name, DESSERT_MAXFRAMELEN,
+- promisc, 10, meshif->pcap_err);
+- if (meshif->pcap == NULL) {
+- dessert_err("pcap_open_live failed for interface %s(%d):\n%s",
+- meshif->if_name, meshif->if_index, meshif->pcap_err);
+- goto dessert_meshif_add_err;
+- }
+- if (pcap_datalink(meshif->pcap) != DLT_EN10MB) {
+- dessert_err("interface %s(%d) is not an ethernet interface!",
+- meshif->if_name, meshif->if_index);
+- goto dessert_meshif_add_err;
+- }
+-
+- /* pcap filter */
+- if (!(flags & DESSERT_IF_NOFILTER)) {
+- if (pcap_compile(meshif->pcap, &fp, fe, 0, 0) == -1) {
+- dessert_err("couldn't parse filter %s: %s\n", fe, pcap_geterr(meshif->pcap));
+- goto dessert_meshif_add_err;
+- }
+- if (pcap_setfilter(meshif->pcap, &fp) == -1) {
+- dessert_err("couldn't install filter %s: %s\n", fe, pcap_geterr(meshif->pcap));
+- goto dessert_meshif_add_err;
+- }
+- /* else { TODO: pcap_freecode() } */
+- }
+-
+- /* get hardware address */
+- if (_dessert_meshif_gethwaddr(meshif) != 0) {
+- dessert_err("failed to get hwaddr of interface %s(%d)",
+- meshif->if_name, meshif->if_index);
+- goto dessert_meshif_add_err;
+- }
+-
+- /* check whether we need to set defsrc (default source) */
+- if (memcmp(dessert_l25_defsrc, ether_null, ETHER_ADDR_LEN) == 0) {
+- memcpy(dessert_l25_defsrc, meshif->hwaddr, ETHER_ADDR_LEN);
+- dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
+- dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
+- }
+-
+- dessert_info("starting worker thread for interface %s(%d) hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- meshif->if_name, meshif->if_index,
+- meshif->hwaddr[0], meshif->hwaddr[1], meshif->hwaddr[2],
+- meshif->hwaddr[3], meshif->hwaddr[4], meshif->hwaddr[5]);
+-
+- /* start worker thread */
+- if (pthread_create(&(meshif->worker), NULL, _dessert_meshif_add_thread,
+- (void *) meshif)) {
+- dessert_err("creating worker thread failed for interface %s(%d)",
+- meshif->if_name, meshif->if_index);
+- goto dessert_meshif_add_err;
+- }
+-
+- /* prepend to interface list */
+- pthread_rwlock_wrlock(&dessert_cfglock);
+- DL_PREPEND(_dessert_meshiflist, meshif);
+- _dessert_meshiflist_update_permutations();
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return (DESSERT_OK);
+-
+- dessert_meshif_add_err:
+-
+- if (meshif->pcap != NULL) {
+- pcap_close(meshif->pcap);
+- }
+- free(meshif);
+- return (DESSERT_ERR);
+-}
+-
+-/*****************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * M E S H - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** Run all registered callbacks.
+- *
+- * @internal
+- *
+- * @return the return status of the last callback called
+- *
+- * @warning Use with care - never register as callback!
+- *
+- * %DESCRIPTION:
+- *
+- */
+-int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len,
+- dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif,
+- dessert_frameid_t id) {
+- dessert_msg_t *msg = msg_in;
+- dessert_msg_proc_t *proc = proc_in;
+- dessert_meshrxcbe_t *cb;
+- int res = 0;
+- dessert_meshrxcb_t **cbl = NULL;
+- int cbllen = 0;
+- int cblcur = -1;
+-
+- /* copy callbacks to internal list to release dessert_cfglock before invoking callbacks*/
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- cbllen = 0;
+- for (cb = _dessert_meshrxcblist; cb != NULL; cb = cb->next)
+- cbllen++;
+- cbl = malloc(cbllen * sizeof(dessert_meshrxcb_t *));
+- if (cbl == NULL) {
+- dessert_err("failed to allocate memory for internal callback list");
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_MSG_DROP;
+- }
+-
+- cblcur = 0;
+- for (cb = _dessert_meshrxcblist; cb != NULL; cb = cb->next)
+- cbl[cblcur++] = cb->c;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* call the interested */
+- res = 0;
+- cblcur = 0;
+- while (res > DESSERT_MSG_DROP && cblcur < cbllen) {
+-
+- _dessert_packet_process_cbagain: res = cbl[cblcur](msg, len, proc,
+- meshif, id);
+-
+- if (res == DESSERT_MSG_NEEDNOSPARSE && msg == msg_in) {
+- dessert_msg_clone(&msg, msg_in, 0);
+- len = DESSERT_MAXFRAMEBUFLEN;
+- goto _dessert_packet_process_cbagain;
+- } else if (res == DESSERT_MSG_NEEDNOSPARSE && msg != msg_in) {
+- dessert_warn("bogus DESSERT_MSG_NEEDNOSPARSE returned from callback!");
+- }
+-
+- if (res == DESSERT_MSG_NEEDMSGPROC && proc == NULL) {
+- proc = malloc(DESSERT_MSGPROCLEN);
+- memset(proc, 0, DESSERT_MSGPROCLEN);
+- goto _dessert_packet_process_cbagain;
+- } else if (res == DESSERT_MSG_NEEDMSGPROC && proc != NULL) {
+- dessert_warn("bogus DESSERT_MSG_NEEDMSGPROC returned from callback!");
+- }
+-
+- cblcur++;
+- }
+-
+- free(cbl);
+-
+- if (msg != msg_in)
+- dessert_msg_destroy(msg);
+-
+- if (proc != proc_in)
+- free(proc);
+-
+- return (res);
+-}
+-
+-/** Get the hardware address of the ethernet device behind meshif.
+- *
+- * @internal
+- *
+- * @param *meshif pointer to dessert_meshif_t to query
+- *
+- * @retval DESSERT_OK on success
+- *
+- * \warning This is a platform depended function!
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif)
+-#ifdef TARGET_DARWIN
+-{
+- /* the Apple way... */
+-
+- int mib[6];
+- size_t len;
+- uint8_t *buf, *next;
+- struct if_msghdr *ifm;
+- struct sockaddr_dl *sdl;
+- int ret = DESSERT_ERR;
+-
+- mib[0] = CTL_NET;
+- mib[1] = AF_ROUTE;
+- mib[2] = 0;
+- mib[3] = AF_LINK;
+- mib[4] = NET_RT_IFLIST;
+- mib[5] = 0;
+-
+- if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
+- dessert_err("Acquiring hwaddr failed: sysctl 1 error");
+- return(DESSERT_ERR);
+- }
+-
+- if ((buf = malloc(len)) == NULL) {
+- dessert_err("acquiring hwaddr failed: malloc error");
+- return(DESSERT_ERR);
+- }
+-
+- if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
+- dessert_err("acquiring hwaddr failed: sysctl 2 error");
+- return(DESSERT_ERR);
+- }
+-
+- for (next = buf; next < buf+len; next += ifm->ifm_msglen) {
+- ifm = (struct if_msghdr *)next;
+- if (ifm->ifm_type == RTM_IFINFO) {
+- sdl = (struct sockaddr_dl *)(ifm + 1);
+- if (strncmp(&sdl->sdl_data[0], meshif->if_name, sdl->sdl_len) == 0) {
+- memcpy(meshif->hwaddr, LLADDR(sdl), ETHER_ADDR_LEN);
+- ret = DESSERT_OK;
+- break;
+- }
+- }
+- }
+-
+- free(buf);
+- return ret;
+-}
+-#elif TARGET_FREEBSD
+-{
+- struct ifaddrs *ifaphead;
+- struct ifaddrs *ifap;
+- struct sockaddr_dl *sdl = NULL;
+-
+- if (getifaddrs(&ifaphead) != 0)
+- {
+- dessert_err("getifaddrs() failed");
+- return(DESSERT_ERR);
+- }
+-
+- for (ifap = ifaphead; ifap; ifap = ifap->ifa_next)
+- {
+- if ((ifap->ifa_addr->sa_family == AF_LINK))
+- {
+- if (strcmp(ifap->ifa_name,meshif->if_name) == 0)
+- {
+- sdl = (struct sockaddr_dl *)ifap->ifa_addr;
+- if (sdl)
+- {
+- memcpy(meshif->hwaddr, LLADDR(sdl), ETHER_ADDR_LEN);
+- return(DESSERT_OK);
+- }
+- }
+- }
+- }
+- return(DESSERT_ERR);
+-}
+-#elif TARGET_LINUX
+-{
+- /* the linux and solaris way */
+- int sockfd;
+- struct ifreq ifr;
+-
+- /* we need some socket to do that */
+- sockfd = socket(AF_INET, SOCK_STREAM, 0);
+-
+- /* set interface options and get hardware address */
+- strncpy(ifr.ifr_name, meshif->if_name, sizeof(ifr.ifr_name));
+-
+-#ifdef SIOCGIFHWADDR
+- if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) >= 0) {
+- memcpy(meshif->hwaddr, &ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN);
+- /* } */
+-#elif defined SIOCGENADDR
+- if ( ioctl(sd, SIOCGENADDR, &ifr_work) >= 0 ) {
+- memcpy( meshif->hwaddr, &ifr.ifr_enaddr, ETHER_ADDR_LEN );
+- /* } */
+-#else
+- if (false) {
+-#endif
+- close(sockfd);
+- return (DESSERT_OK);
+- } else {
+- dessert_err("acquiring hwaddr failed");
+- close(sockfd);
+- return (DESSERT_ERR);
+- }
+-}
+-#else
+-{
+- dessert_err("acquiring hwaddr failed - platform not supported");
+- return(DESSERT_ERR);
+-}
+-#endif
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * M E S H - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** Function to send packet via a single interface.
+- *
+- * @internal
+- *
+- * @param[in] *msg the message to send
+- * @param[in] *iface the interface the message should be send via
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if *iface is NULL
+- * @retval EIO if there was a problem sending the message
+- *
+- * %DESCRIPTION:
+- *
+- */
+-static inline int _dessert_meshsend_if2(dessert_msg_t* msg,
+- dessert_meshif_t *iface) {
+- int res;
+- uint8_t oldflags;
+- size_t msglen = ntohs(msg->hlen) + ntohs(msg->plen);
+-
+- /* check for null meshInterface */
+- if (iface == NULL) {
+- dessert_err("NULL-pointer given as interface - programming error!");
+- return EINVAL;
+- }
+-
+- /* send packet - temporally setting DESSERT_FLAG_SPARSE */
+- oldflags = msg->flags;
+- msg->flags &= ~DESSERT_FLAG_SPARSE;
+- res = pcap_inject(iface->pcap, (u_char *) msg, msglen);
+- msg->flags = oldflags;
+-
+- if (res != msglen) {
+- if (res == -1) {
+- dessert_warn("couldn't send message: %s\n", pcap_geterr(iface->pcap));
+- } else {
+- dessert_warn("couldn't send message: sent only %d of %d bytes\n",
+- res, msglen);
+- }
+- return (EIO);
+- }
+-
+- pthread_mutex_lock(&(iface->cnt_mutex));
+- iface->opkts++;
+- iface->obytes += res;
+- pthread_mutex_unlock(&(iface->cnt_mutex));
+-
+- return (DESSERT_OK);
+-
+-}
+-
+-/** Callback doing the main work for packets received through a dessert interface.
+- *
+- * @internal
+- *
+- * @param arg - meshif-pointer carried by libpcap in something else
+- * @param header - pointer to the header by libpcap
+- * @param packet - pointer to the packet by libpcap
+- *
+- * %DESCRIPTION:
+- *
+- */
+-static void _dessert_packet_process(u_char *args,
+- const struct pcap_pkthdr *header, const u_char *packet) {
+- dessert_meshif_t *meshif = (dessert_meshif_t *) args;
+- dessert_msg_t *msg = (dessert_msg_t *) packet;
+- size_t len = header->caplen;
+- dessert_frameid_t id;
+- dessert_msg_proc_t proc;
+-
+- /* is it something I understand? */
+- if (ntohs(msg->l2h.ether_type) != DESSERT_ETHPROTO) {
+- dessert_debug("got packet with ethertype %04x - discarding", ntohs(msg->l2h.ether_type));
+- return;
+- }
+-
+- /* check message */
+- if (header->caplen < header->len) {
+- dessert_warn("packet too short - check pcap_open_live() parameters");
+- return;
+- }
+- if (header->caplen < DESSERT_MSGLEN) {
+- dessert_notice("packet too short - shorter than DESSERT_MSGLEN");
+- return;
+- }
+-
+- /* generate frame id */
+- id = _dessert_newframeid();
+- memset(&proc, 0, DESSERT_MSGPROCLEN);
+-
+- /* count packet */
+- pthread_mutex_lock(&(meshif->cnt_mutex));
+- meshif->ipkts++;
+- meshif->ibytes += header->caplen;
+- pthread_mutex_unlock(&(meshif->cnt_mutex));
+-
+- _dessert_meshrxcb_runall(msg, len, &proc, meshif, id);
+-
+-}
+-
+-/** Internal routine called before interface thread finishes.
+- *
+- * @internal
+- *
+- * @param *meshif the interface to be cleaned up
+- *
+- * %DESCRIPTION:
+- *
+- */
+-static void _dessert_meshif_cleanup(dessert_meshif_t *meshif) {
+- pcap_close(meshif->pcap);
+- free(meshif);
+-}
+-
+-/** Internal thread function running the capture loop.
+- *
+- * @internal
+- *
+- * @param *arg a void pointer representing a dessert_meshif_t interface
+- *
+- * %DESCRIPTION:
+- */
+-static void *_dessert_meshif_add_thread(void* arg) {
+-
+- dessert_meshif_t *meshif = (dessert_meshif_t *) arg;
+-
+- pcap_loop(meshif->pcap, -1, _dessert_packet_process, (u_char *) meshif);
+-
+- _dessert_meshif_cleanup(meshif);
+-
+- return (NULL);
+-
+-}
+-
+-/** Internal function to update the lookup table of permutations of the current _dessert_meshiflist.
+- *
+- * @internal
+- *
+- * %DESCRIPTION: \n
+- */
+-static void _dessert_meshiflist_update_permutations() {
+- int i, r;
+-
+- pthread_mutex_lock(&_dessert_meshiflist_mutex);
+- _dessert_meshiflist_len = DL_LENGTH(_dessert_meshiflist);
+-
+- dessert_meshif_t **a = calloc(sizeof(a) * _dessert_meshiflist_len, 1);
+- list2array(_dessert_meshiflist, a, _dessert_meshiflist_len);
+-
+- _dessert_meshiflist_perm_count = fact(_dessert_meshiflist_len);
+-
+- if (_dessert_meshiflist_perms != NULL) {
+- free(_dessert_meshiflist_perms);
+- }
+- _dessert_meshiflist_perms = calloc(sizeof(dessert_meshif_t **) * _dessert_meshiflist_perm_count + sizeof(dessert_meshif_t *) * _dessert_meshiflist_perm_count * _dessert_meshiflist_len, 1);
+- for (i = 0; i < _dessert_meshiflist_perm_count; ++i) {
+- _dessert_meshiflist_perms[i]
+- = (dessert_meshif_t **) (((char *) _dessert_meshiflist_perms)
+- + sizeof(dessert_meshif_t **)
+- * _dessert_meshiflist_perm_count + i
+- * _dessert_meshiflist_len * sizeof(dessert_meshif_t *));
+- }
+-
+- for (r = 0; r < _dessert_meshiflist_perm_count; r++) {
+- memcpy(_dessert_meshiflist_perms[r], a, sizeof(dessert_meshif_t *)
+- * _dessert_meshiflist_len);
+- }
+- free(a);
+-
+- for(r = 0; r < _dessert_meshiflist_perm_count; r++){
+- permutation(r, _dessert_meshiflist_len, _dessert_meshiflist_perms[r]);
+- }
+-
+- pthread_mutex_unlock(&_dessert_meshiflist_mutex);
+-}
+-
+-/** Internal function to get the length of a double-linked utlist.
+- *
+- * @internal
+- *
+- * @param[in] *l a pointer to the list head
+- *
+- * @return the number of elements in the list
+- *
+- * %DESCRIPTION: \n
+- */
+-static inline int DL_LENGTH(dessert_meshif_t *l) {
+- int len = 0;
+- dessert_meshif_t *temp;
+- DL_FOREACH(l, temp)
+- len++;
+- return len;
+-}
+-
+-/** Internal function to copy the element pointers of the _dessert_meshiflist to an array.
+- *
+- * @internal
+- *
+- * @param[in] *l a pointer to the list head
+- * @param[out] **a a pointer to an array of dessert_meshif_t
+- *
+- * %DESCRIPTION: \n
+- */
+-static inline void list2array(dessert_meshif_t *l, dessert_meshif_t **a,
+- int len) {
+- dessert_meshif_t *t;
+- int i = 0;
+- DL_FOREACH(l, t) {
+- a[i++] = t;
+- if (--len == 0)
+- break;
+- }
+-}
+-
+-/** Internal function to compute the factorial of a given number.
+- *
+- * @internal
+- *
+- * @param[in] i the number
+- *
+- * @return the factorial
+- *
+- * %DESCRIPTION: \n
+- */
+-static inline int fact(int i){
+- int fact = 1;
+- while (i > 0) fact *= i--;
+- return fact;
+-}
+-
+-/** Internal function to produce a permutation of @a a.
+- *
+- * @internal
+- *
+- * @param[in] k the permutation to generate
+- * @param[in] len the number of elements in the array
+- * @param[out] the array to permute
+- *
+- * @note Algorithm adopted from the Wikipedia article on
+- * <a href="http://en.wikipedia.org/wiki/Permutation">Permutations</a>.
+- *
+- * %DESCRIPTION: \n
+- */
+-static inline void permutation(int k, int len, dessert_meshif_t **a) {
+- dessert_meshif_t *temp;
+- int j;
+-
+- for(j = 2 ; j <= len; j++ ) {
+- temp = a[(k%j)];
+- a[(k%j)] = a[j-1];
+- a[j-1] = temp;
+- k = k / j;
+- }
+-}
+Index: libdessert0.86-0.86.14/dessert_msg.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_msg.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,876 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-/* global data storage // P U B L I C */
+-
+-/* global data storage // P R I V A T E */
+-
+-/* local data storage*/
+-
+-/* internal functions forward declarations*/
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * M E S S A G E H A N D L I N G
+- *
+- ******************************************************************************/
+-
+-/** creates a new dessert_msg_t and initializes it.
+- * @arg **msgout (out) pointer to return message address
+- * @return 0 on success, -errno on error
+- **/
+-int dessert_msg_new(dessert_msg_t **msgout) {
+- dessert_msg_t *msg;
+-
+- msg = malloc(DESSERT_MAXFRAMEBUFLEN);
+-
+- if (msg == NULL) {
+- dessert_err("failed to allocate buffer for new message!");
+- return (-ENOMEM);
+- }
+-
+- memset(msg, 0, DESSERT_MAXFRAMEBUFLEN);
+- msg->l2h.ether_type = htons(DESSERT_ETHPROTO);
+- memset(msg->l2h.ether_dhost, 255, ETHER_ADDR_LEN);
+- memcpy(msg->proto, dessert_proto, DESSERT_PROTO_STRLEN);
+- msg->ver = dessert_ver;
+- msg->ttl = 0xff;
+- msg->u8 = 0x00;
+- msg->u16 = htons(0xbeef);
+- msg->hlen = htons(sizeof(dessert_msg_t));
+- msg->plen = htons(0);
+-
+- *msgout = msg;
+- return (DESSERT_OK);
+-
+-}
+-
+-/** generates a copy of a dessert_msg
+- * @arg **msgnew (out) pointer to return message address
+- * @arg *msgold pointer to the message to clone
+- * @arg sparse whether to allocate DESSERT_MAXFRAMELEN or only hlen+plen
+- * @return DESSERT_OK on success, -errno otherwise
+- **/
+-int dessert_msg_clone(dessert_msg_t **msgnew, const dessert_msg_t *msgold,
+- uint8_t sparse) {
+- dessert_msg_t *msg;
+- size_t msglen = ntohs(msgold->hlen) + ntohs(msgold->plen);
+-
+- if (sparse) {
+- msg = malloc(msglen);
+- } else {
+- msg = malloc(DESSERT_MAXFRAMEBUFLEN);
+- }
+-
+- if (msg == NULL) {
+- return (-errno);
+- }
+-
+- memcpy(msg, msgold, msglen);
+-
+- if (sparse) {
+- msg->flags |= DESSERT_FLAG_SPARSE;
+- } else {
+- msg->flags &= DESSERT_FLAG_SPARSE ^ DESSERT_FLAG_SPARSE;
+- }
+-
+- *msgnew = msg;
+- return (DESSERT_OK);
+-
+-}
+-
+-/** checks whether a dessert_msg is consistent
+- * @arg msg the message to be checked
+- * @arg len the length of the buffer
+- * @return DESSERT_OK on success
+- * @return -1 of the message is too large for the buffer
+- * @return -2 if the message was not intended to this daemon
+- * @return -3 if some extension is not consistent
+- * %DESCRIPTION:
+- ***********************************************************************/
+-int dessert_msg_check(const dessert_msg_t* msg, size_t len) {
+- dessert_ext_t *ext;
+-
+- /* is the message large enough to at least carry the header */
+- if (len < DESSERT_MSGLEN) {
+- dessert_info("message too short - shorter than DESSERT_MSGLEN");
+- return (-1);
+- }
+- if (ntohs(msg->hlen) + ntohs(msg->plen) > len) {
+- dessert_info("message too short - shorter than header + payload");
+- return (-1);
+- }
+-
+- /* right protocol and version */
+- if (msg->proto[0] != dessert_proto[0] || msg->proto[1] != dessert_proto[1]
+- || msg->proto[2] != dessert_proto[2] || msg->proto[3]
+- != dessert_proto[3]) {
+- dessert_info("wrong dessert protocol");
+- return (-2);
+- }
+- if (msg->ver != dessert_ver) {
+- dessert_info("wrong dessert protocol version");
+- return (-2);
+- }
+-
+- /* now check extensions.... */
+- ext = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
+- while ((uint8_t *) ext < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
+- /* does current extension fit into the header? */
+- if (((uint8_t *) ext + (size_t) ext->len) > ((uint8_t *) msg
+- + (size_t) ntohs(msg->hlen))) {
+- dessert_info("extension %x too long", ext->type);
+- return (-3);
+- }
+- if (ext->len < 2) {
+- dessert_info("extension %x too short", ext->type);
+- return (-3);
+- }
+-
+- ext = (dessert_ext_t *) ((uint8_t *) ext + (size_t) ext->len);
+- }
+-
+- /* message is valid */
+- return DESSERT_OK;
+-}
+-
+-/** dump a dessert_msg_t to a string
+- * @arg *msg the message to be dumped
+- * @arg len the length of the buffer
+- * @arg *buf text output buffer
+- * @arg blen text output buffer length
+- **/
+-void dessert_msg_dump(const dessert_msg_t* msg, size_t len, char *buf,
+- size_t blen) {
+- dessert_msg_proc_dump(msg, len, NULL, buf, blen);
+-}
+-
+-/** free a dessert_msg
+- * @arg *msg message to free
+- **/
+-void dessert_msg_destroy(dessert_msg_t* msg) {
+- free(msg);
+-}
+-
+-/** creates a new dessert_msg from an ethernet frame.
+- * @arg *eth ethernet frame to encapsulate
+- * @arg len length of the ethernet frame
+- * @arg **msgout (out) pointer to return message address
+- * @return DESSERT_OK on success, -errno otherwise
+- **/
+-int dessert_msg_ethencap(const struct ether_header* eth, size_t eth_len,
+- dessert_msg_t** msgout) {
+- int res;
+- dessert_ext_t *ext;
+- void *payload;
+-
+- /* check len */
+- if (eth_len > DESSERT_MAXFRAMELEN - DESSERT_MSGLEN + ETHER_HDR_LEN) {
+- dessert_debug("failed to encapsulate ethernet frame of %d bytes (max=%d)",
+- eth_len, DESSERT_MAXFRAMELEN - DESSERT_MSGLEN + ETHER_HDR_LEN);
+- return (-EMSGSIZE);
+- }
+-
+- /* create message */
+- res = dessert_msg_new(msgout);
+- if (res) {
+- return res;
+- }
+-
+- /* add ether header */
+- res = dessert_msg_addext(*msgout, &ext, DESSERT_EXT_ETH, ETHER_HDR_LEN);
+- if (res) {
+- return res;
+- }
+- memcpy(ext->data, eth, ETHER_HDR_LEN);
+-
+- /* copy message */
+- dessert_msg_addpayload(*msgout, &payload, (eth_len - ETHER_HDR_LEN));
+- memcpy(payload, ((uint8_t *) eth) + ETHER_HDR_LEN,
+- (eth_len - ETHER_HDR_LEN));
+-
+- return (DESSERT_OK);
+-}
+-
+-/** extracts an ethernet frame from a dessert_msg
+- * @arg *msg pointer to dessert_msg message to decapsulate
+- * @arg **ethout (out) pointer to return ethernet message
+- * @return eth_len on success, -1 otherwise
+- **/
+-int dessert_msg_ethdecap(const dessert_msg_t* msg, struct ether_header** ethout) {
+- dessert_ext_t *ext;
+- int res;
+-
+- /* create message */
+- size_t eth_len = ntohs(msg->plen) + ETHER_HDR_LEN;
+- *ethout = malloc(eth_len);
+- if (*ethout == NULL) {
+- return (-1);
+- }
+-
+- /* copy header */
+- res = dessert_msg_getext(msg, &ext, DESSERT_EXT_ETH, 0);
+- if (res != 1) {
+- free(ethout);
+- return (-1);
+- }
+- memcpy(*ethout, ext->data, ETHER_HDR_LEN);
+-
+- /* copy message */
+- memcpy(((uint8_t *) (*ethout)) + ETHER_HDR_LEN, (((uint8_t *) msg)
+- +ntohs(msg->hlen)), ntohs(msg->plen));
+-
+- return (eth_len);
+-}
+-
+-/** get the ether_header sent as DESSERT_EXT_ETH in a dessert_msg
+- * @arg *msg the message
+- * @return pointer to ether_header data, NULL if DESSERT_EXT_ETH not present
+- **/
+-struct ether_header* dessert_msg_getl25ether(const dessert_msg_t* msg) {
+- dessert_ext_t *ext;
+- struct ether_header *l25h;
+- int res;
+-
+- res = dessert_msg_getext(msg, &ext, DESSERT_EXT_ETH, 0);
+- if (res != 1) {
+- l25h = NULL;
+- } else {
+- l25h = (struct ether_header *) ext->data;
+- }
+-
+- return l25h;
+-}
+-
+-/** generates a copy of a dessert_msg_proc
+- * @arg **procnew (out) pointer to return message address
+- * @arg *procold pointer to the message to clone
+- * @return DESSERT_OK on success, -errno otherwise
+- **/
+-int dessert_msg_proc_clone(dessert_msg_proc_t **procnew,
+- const dessert_msg_proc_t *procold) {
+- if (procold == NULL) {
+- *procnew = procold;
+- return (DESSERT_OK);
+- }
+-
+- dessert_msg_proc_t *proc;
+-
+- proc = malloc(DESSERT_MSGPROCLEN);
+-
+- if (proc == NULL) {
+- return (-errno);
+- }
+-
+- memcpy(proc, procold, DESSERT_MSGPROCLEN);
+-
+- *procnew = proc;
+- return (DESSERT_OK);
+-
+-}
+-
+-/** dump a dessert_msg_t to a string
+- * @arg *msg the message to be dumped
+- * @arg len the length of the buffer
+- * @arg *proc the processing buffer
+- * @arg *buf text output buffer
+- * @arg blen text output buffer length
+- **/
+-void dessert_msg_proc_dump(const dessert_msg_t* msg, size_t len,
+- const dessert_msg_proc_t *proc, char *buf, size_t blen) {
+- dessert_ext_t *ext;
+- int extidx = 0;
+- int i;
+- struct ether_header *l25h;
+-
+-#define _dessert_msg_check_append(...) snprintf(buf+strlen(buf), blen-strlen(buf), __VA_ARGS__)
+- memset((void *) buf, 0, blen);
+-
+- _dessert_msg_check_append("\tl2_dhost: %02x:%02x:%02x:%02x:%02x:%02x\n",
+- msg->l2h.ether_dhost[0], msg->l2h.ether_dhost[1], msg->l2h.ether_dhost[2],
+- msg->l2h.ether_dhost[3], msg->l2h.ether_dhost[4], msg->l2h.ether_dhost[5]);
+- _dessert_msg_check_append("\tl2_shost: %02x:%02x:%02x:%02x:%02x:%02x\n",
+- msg->l2h.ether_shost[0], msg->l2h.ether_shost[1], msg->l2h.ether_shost[2],
+- msg->l2h.ether_shost[3], msg->l2h.ether_shost[4], msg->l2h.ether_shost[5]);
+- _dessert_msg_check_append("\tl2_type: %x\n\n", ntohs(msg->l2h.ether_type));
+-
+- _dessert_msg_check_append("\tproto: ");
+- strncpy(buf + strlen(buf), msg->proto, DESSERT_PROTO_STRLEN);
+- _dessert_msg_check_append("\n\tver: %d\n", msg->ver);
+-
+- _dessert_msg_check_append("\tflags: ");
+- if (msg->flags & DESSERT_FLAG_SPARSE)
+- _dessert_msg_check_append(" SPARSE");
+-
+- _dessert_msg_check_append("\n\tttl: %x\n", (msg->ttl));
+- _dessert_msg_check_append("\tu8: %x\n", (msg->u8));
+- _dessert_msg_check_append("\tu16: %x\n", ntohs(msg->u16));
+- _dessert_msg_check_append("\thlen: %d\n", ntohs(msg->hlen));
+- _dessert_msg_check_append("\tplen: %d\n\n", ntohs(msg->plen));
+-
+- /* get l2.5 header if possible */
+- if ((l25h = dessert_msg_getl25ether(msg)) != NULL) {
+- _dessert_msg_check_append("\tl25 proto: ethernet\n");
+-
+- _dessert_msg_check_append("\tl25_dhost: %02x:%02x:%02x:%02x:%02x:%02x\n",
+- l25h->ether_dhost[0], l25h->ether_dhost[1], l25h->ether_dhost[2],
+- l25h->ether_dhost[3], l25h->ether_dhost[4], l25h->ether_dhost[5]);
+- _dessert_msg_check_append("\tl25_shost: %02x:%02x:%02x:%02x:%02x:%02x\n",
+- l25h->ether_shost[0], l25h->ether_shost[1], l25h->ether_shost[2],
+- l25h->ether_shost[3], l25h->ether_shost[4], l25h->ether_shost[5]);
+- _dessert_msg_check_append("\tl25_type: %x\n\n", ntohs(l25h->ether_type));
+-
+- }
+-
+- /* we have a trace */
+- if (dessert_msg_trace_dump(msg, buf, blen - strlen(buf)) > 1)
+- _dessert_msg_check_append("\n");
+-
+- /* now other extensions.... */
+- ext = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
+- while ((uint8_t *) ext < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
+- _dessert_msg_check_append("\textension %d:\n", extidx);
+-
+- /* does current extension fit into the header? */
+- if ((((uint8_t *) ext + (size_t) ext->len) > ((uint8_t *) msg
+- + (size_t) ntohs(msg->hlen))) || (ext->len < 2)) {
+- _dessert_msg_check_append("\t\tbroken extension - giving up!\n");
+- break;
+- }
+-
+- _dessert_msg_check_append("\t\ttype: 0x%02x\n", ext->type);
+- _dessert_msg_check_append("\t\tlen: %d\n", ext->len);
+-
+- if (ext->type != DESSERT_EXT_ETH && ext->type != DESSERT_EXT_TRACE) {
+- _dessert_msg_check_append("\t\tdata: ");
+- for (i = 0; i < dessert_ext_getdatalen(ext); i++) {
+- _dessert_msg_check_append("0x%x ", ext->data[i]);
+- if (i % 12 == 1 && i != 1)
+- _dessert_msg_check_append("\t\t ");
+- }
+- }
+- _dessert_msg_check_append("\n");
+-
+- ext = (dessert_ext_t *) ((uint8_t *) ext + (size_t) ext->len);
+- extidx++;
+- }
+-
+- if (proc != NULL) {
+- _dessert_msg_check_append("\tlocal processing header:\n");
+- _dessert_msg_check_append("\tlflags: ");
+-
+- if (proc->lflags & DESSERT_LFLAG_SRC_SELF)
+- _dessert_msg_check_append(" DESSERT_FLAG_SRC_SELF");
+- if (proc->lflags & DESSERT_LFLAG_DST_SELF)
+- _dessert_msg_check_append(" DESSERT_FLAG_DST_MULTICAST");
+- if (proc->lflags & DESSERT_LFLAG_DST_MULTICAST)
+- _dessert_msg_check_append(" DESSERT_FLAG_DST_SELF");
+- if (proc->lflags & DESSERT_LFLAG_DST_BROADCAST)
+- _dessert_msg_check_append(" DESSERT_FLAG_DST_BROADCAST");
+- if (proc->lflags & DESSERT_LFLAG_PREVHOP_SELF)
+- _dessert_msg_check_append(" DESSERT_FLAG_PREVHOP_SELF");
+- if (proc->lflags & DESSERT_LFLAG_NEXTHOP_SELF)
+- _dessert_msg_check_append(" NEXTHOP_SELF");
+- if (proc->lflags & DESSERT_LFLAG_NEXTHOP_BROADCAST)
+- _dessert_msg_check_append(" NEXTHOP_BROADCAST");
+- }
+-
+-}
+-
+-/** free a dessert_prc_msg
+- * @arg *proc processing buffer to free
+- **/
+-void dessert_msg_proc_destroy(dessert_msg_proc_t* proc) {
+- free(proc);
+-}
+-
+-/** add or replace payload to a dessert_msg
+- * @arg *msg the message the payload should be added to
+- * @arg **payload (out) the pointer to place the payload
+- * @arg len the length of the payload
+- * @return DESSERT_OK on success, DESSERT_ERR otherwise
+- **/
+-int dessert_msg_addpayload(dessert_msg_t* msg, void** payload, int len) {
+- /* check payload */
+- if (len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen)) {
+- return DESSERT_ERR; /* too big */
+- }
+-
+- /* export payload pointer */
+- *payload = ((uint8_t *) msg + ntohs(msg->hlen));
+- msg->plen = htons(len);
+-
+- return DESSERT_OK;
+-}
+-
+-/** Retrieves a pointer to the payload of a dessert message @a msg.
+- *
+- * @param[in] *msg the message the payload should be retrieved from
+- * @param[out] **payload the pointer to place the payload in
+- *
+- * @return the length of the payload in bytes if any, 0 otherwise
+- */
+-int dessert_msg_getpayload(dessert_msg_t *msg, void** payload) {
+-
+- /* test if payload is present in msg */
+- if (msg->plen == 0) {
+- *payload = NULL;
+- return 0;
+- }
+-
+- *payload = (uint8_t *) msg + ntohs(msg->hlen);
+-
+- return msg->plen;
+-}
+-
+-
+-/** add an extension record to a dessert_msg
+- * @arg *msg the message the extension should be added to
+- * @arg **ext (out) the extension pointer to the reserved extension space
+- * @arg type the type of the extension
+- * @arg len the length of the ext data (without 2 byte extension header)
+- * @return DESSERT_OK on success,
+- **/
+-int dessert_msg_addext(dessert_msg_t *msg, dessert_ext_t **ext, uint8_t type,
+- size_t len) {
+-
+- /* check if sparse message */
+- if ((msg->flags & DESSERT_FLAG_SPARSE) > 0) {
+- dessert_debug("tried to add extension to a sparse message - use dessert_msg_clone() first!");
+- return -1;
+- }
+-
+- /* add DESSERT_EXTLEN to len for convenience*/
+- len += DESSERT_EXTLEN;
+-
+- /* check ext */
+- if (len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen) - ntohs(msg->plen)) {
+- dessert_debug("message would be too large after adding extension!");
+- return -2; /* too big */
+- } else if (len < DESSERT_EXTLEN) {
+- dessert_debug("extension too small!");
+- return -3; /* too small */
+- } else if (len > 255) {
+- dessert_debug("extension too big!");
+- return -2; /* too big */
+- }
+-
+- /* move payload if necessary */
+- if (ntohs(msg->plen) > 0) {
+- memmove(((uint8_t *) msg + ntohs(msg->hlen) + len), ((uint8_t *) msg
+- + ntohs(msg->hlen)), ntohs(msg->plen));
+- }
+-
+- /* get ext addr */
+- *ext = (dessert_ext_t *) ((uint8_t *) msg + ntohs(msg->hlen));
+-
+- /* update msg hlen */
+- msg->hlen = htons(ntohs(msg->hlen) + len);
+-
+- /* copy in extension data */
+- (*ext)->len = len;
+- (*ext)->type = type;
+-
+- return DESSERT_OK;
+-}
+-
+-/** remove an extension record from a dessert_msg
+- * @arg *msg the message the extension should be added to
+- * @arg *ext (out) the extension pointer to the extension to be removed
+- * @return DESSERT_OK on success,
+- **/
+-int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext) {
+-
+- /* check ext */
+- if ((((uint8_t *) ext) < ((uint8_t *) msg)) || (((uint8_t *) ext)
+- > (((uint8_t *) msg) + ntohs(msg->hlen)))) {
+- dessert_debug("extension not within packet header - won't remove");
+- return DESSERT_ERR;
+- }
+-
+- msg->hlen = htons(ntohs(msg->hlen) - ext->len);
+-
+- memmove(ext, ((uint8_t *) ext) + ext->len, (ntohs(msg->hlen)
+- + ntohs(msg->plen)) - (((uint8_t *) ext) - ((uint8_t *) msg)));
+-
+- return DESSERT_OK;
+-}
+-
+-/** Resizes a given extension record @a ext within in a @b dessert @b message
+- * @a msg to the new length @a new_len.
+- *
+- * @param[in] *msg the message
+- * @param[in] *ext the extension record
+- * @param[in] new_len the new length of the extension record
+- *
+- * @retval DESSERT_OK on success
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_msg_resizeext(dessert_msg_t *msg, dessert_ext_t *ext, size_t new_len) {
+-
+- int old_len = ext->len;
+-
+- /* check ext */
+- if (new_len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen) - ntohs(msg->plen) - old_len) {
+- dessert_debug("message would be too large after adding extension!");
+- return -2; /* too big */
+- } else if (new_len < DESSERT_EXTLEN) {
+- dessert_debug("extension too small!");
+- return -3; /* too small */
+- } else if (new_len > 255) {
+- dessert_debug("extension too big!");
+- return -2; /* too big */
+- }
+-
+- memmove(((uint8_t *)ext) + new_len,((uint8_t *)ext) + ext->len, ntohs(msg->hlen)
+- + ntohs(msg->plen) - (((uint8_t *) ext) - ((uint8_t *) msg)) - ext->len);
+-
+- msg->hlen = htons(ntohs(msg->hlen) - (ext->len - new_len));
+- ext->len = new_len;
+-
+- return DESSERT_OK;
+-}
+-
+-/** get an specific or all extensions
+- *
+- * @arg *msg the message
+- * @arg **ext (out) pointer to extracted extension
+- * sets *ext=NULL if extension not found
+- * may be NULL in this case only count/existence matters
+- * @arg type type of the ext to retrieve - use DESSERT_EXT_ANY to get any ext
+- * @arg index the index of the extension of that type, starting with 0
+- * @return 0 if the message has no such extension,
+- * @return count of extensions of that type if count > index
+- * @return -count of extensions of that type if count <= index
+- **/
+-int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext,
+- uint8_t type, int index) {
+- int i = 0;
+- dessert_ext_t *exti;
+-
+- if (ext != NULL)
+- *ext = NULL;
+-
+- exti = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
+- while ((uint8_t *) exti < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
+- /* does current extension fit into the header? */
+- if (type == exti->type || type == DESSERT_EXT_ANY) {
+- if (i == index && ext != NULL) {
+- *ext = exti;
+- }
+- i++;
+- }
+- exti = (dessert_ext_t *) (((uint8_t *) exti) + (size_t) exti->len);
+- }
+-
+- if (i <= index) {
+- i = -i;
+- }
+- return (i);
+-
+-}
+-
+-/** get an specific or all extensions
+- *
+- * @arg *msg the message
+- * @arg type type of the ext to retrieve - use DESSERT_EXT_ANY to get any ext
+- * @return 0 if the message has no such extension,
+- * @return count of extensions of that type
+- **/
+-int dessert_msg_get_ext_count(const dessert_msg_t* msg, uint8_t type) {
+- return dessert_msg_getext(msg, NULL, type, 0);
+-}
+-
+-/** add initial trace header to dessert message
+- * @arg *msg dessert_msg_t message used for tracing
+- * @arg mode trace mode
+- * use DESSERT_MSG_TRACE_HOST to only record default mac of hosts on the way
+- * use DESSERT_MSG_TRACE_IFACE to also trace input interface and last hop
+- * ®return DESSERT_OK on success
+- **/
+-int dessert_msg_trace_initiate(dessert_msg_t* msg, int mode) {
+-
+- dessert_ext_t *ext;
+- struct ether_header *l25h;
+-
+- if (mode != DESSERT_MSG_TRACE_HOST && mode != DESSERT_MSG_TRACE_IFACE)
+- return EINVAL;
+-
+- if (msg->flags & DESSERT_FLAG_SPARSE)
+- return DESSERT_MSG_NEEDNOSPARSE;
+-
+- dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE, mode);
+- memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
+- if (mode == DESSERT_MSG_TRACE_IFACE) {
+- memcpy((ext->data) + ETHER_ADDR_LEN, msg->l2h.ether_shost,
+- ETHER_ADDR_LEN);
+- l25h = dessert_msg_getl25ether(msg);
+- if (l25h == NULL) {
+- memcpy((ext->data) + ETHER_ADDR_LEN, ether_null, ETHER_ADDR_LEN);
+- } else {
+- memcpy((ext->data) + ETHER_ADDR_LEN * 2, l25h->ether_shost,
+- ETHER_ADDR_LEN);
+- }
+- }
+-
+- return DESSERT_OK;
+-
+-}
+-
+-/** dump packet trace to string
+- * @arg *msg dessert_msg_t message used for tracing
+- * @arg *buf char buffer to place string
+- * use DESSERT_MSG_TRACE_HOST to only record default mac of hosts on the way
+- * use DESSERT_MSG_TRACE_IFACE to also trace input interface and last hop
+- * ®return length of the string - 0 if msg has no trace header
+- **/
+-int dessert_msg_trace_dump(const dessert_msg_t* msg, char* buf, int blen) {
+-
+- dessert_ext_t *ext;
+- int x, i = 0;
+-
+-#define _dessert_msg_trace_dump_append(...) snprintf(buf+strlen(buf), blen-strlen(buf), __VA_ARGS__)
+-
+- x = dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, 0);
+- if (x < 1)
+- return 0;
+-
+- _dessert_msg_trace_dump_append("\tpacket trace:\n");
+- _dessert_msg_trace_dump_append("\t\tfrom %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[0], ext->data[1], ext->data[2],
+- ext->data[3], ext->data[4], ext->data[5]);
+-
+- if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
+- _dessert_msg_trace_dump_append("\t\t received on %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[6], ext->data[7], ext->data[8],
+- ext->data[9], ext->data[10], ext->data[11]);
+- _dessert_msg_trace_dump_append("\t\t l2.5 src %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[12], ext->data[13], ext->data[14],
+- ext->data[15], ext->data[16], ext->data[17]);
+- }
+-
+- for (i = 1; i < x; i++) {
+- dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, i);
+- _dessert_msg_trace_dump_append("\t\t#%3d %02x:%02x:%02x:%02x:%02x:%02x\n", i,
+- ext->data[0], ext->data[1], ext->data[2],
+- ext->data[3], ext->data[4], ext->data[5]);
+-
+- if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
+- _dessert_msg_trace_dump_append("\t\t received from %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[12], ext->data[13], ext->data[14],
+- ext->data[15], ext->data[16], ext->data[17]);
+- _dessert_msg_trace_dump_append("\t\t receiving iface %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[6], ext->data[7], ext->data[8],
+- ext->data[9], ext->data[10], ext->data[11]);
+- }
+- }
+-
+- return strlen(buf);
+-
+-}
+-
+-/** callback that checks whether a dessert_msg is consistent
+- * @arg *msg dessert_msg_t frame received
+- * @arg len length of ethernet frame received
+- * @arg *iface interface received packet on
+- * @return DESSERT_MSG_KEEP if message is valid, DESSERT_MSG_DROP otherwise
+- **/
+-int dessert_msg_check_cb(dessert_msg_t* msg, size_t len,
+- dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
+- dessert_frameid_t id) {
+- if (dessert_msg_check(msg, len)) {
+- dessert_debug("invalid package - discarding");
+- return DESSERT_MSG_DROP;
+- }
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/** dump a dessert_msg_t to debug log
+- * @arg *msg dessert_msg_t frame received
+- * @arg len length of ethernet frame received
+- * @arg *iface interface received packet on
+- * ®return DESSERT_MSG_KEEP always
+- **/
+-int dessert_msg_dump_cb(dessert_msg_t* msg, size_t len,
+- dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
+- dessert_frameid_t id) {
+- char buf[1024];
+-
+- dessert_msg_proc_dump(msg, len, proc, buf, 1024);
+- dessert_debug("received frame #%lu on interface %s - dump:\n%s", (unsigned long) id, iface->if_name, buf);
+-
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/** check if the message carries a trace extension and add the current trace info
+- * if iface is NULL, the packet is ignored
+- * @arg *msg dessert_msg_t frame received
+- * @arg len length of ethernet frame received
+- * @arg *iface interface received packet on
+- * ®return DESSERT_MSG_KEEP always
+- **/
+-int dessert_msg_trace_cb(dessert_msg_t* msg, size_t len,
+- dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
+- dessert_frameid_t id) {
+- dessert_ext_t *ext;
+-
+- /* abort if message has no trace extension */
+- if (dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, 0) == 0)
+- return DESSERT_MSG_KEEP;
+-
+- /* abort if iface is NULL */
+- if (iface == NULL)
+- return DESSERT_MSG_KEEP;
+-
+- /* we cannot add header to sparse messages */
+- if (msg->flags & DESSERT_FLAG_SPARSE)
+- return DESSERT_MSG_NEEDNOSPARSE;
+-
+- /* get the trace mode (hop vs interface) */
+- if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_HOST) {
+- dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE, DESSERT_MSG_TRACE_HOST);
+- memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
+- } else if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
+- dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE,
+- DESSERT_MSG_TRACE_IFACE);
+- memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
+- memcpy((ext->data) + ETHER_ADDR_LEN, iface->hwaddr, ETHER_ADDR_LEN);
+- memcpy((ext->data) + ETHER_ADDR_LEN * 2, msg->l2h.ether_shost,
+- ETHER_ADDR_LEN);
+- } else {
+- dessert_warn("got packet with %d bytes trace extension - ignoring");
+- }
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/** callback to set the local processing flags in dessert_msg_proc_t on an arriving dessert_msg_t
+- * @arg *msg dessert_msg_t frame received
+- * @arg len length of ethernet frame received
+- * @arg *iface interface received packet on
+- * ®return DESSERT_MSG_KEEP or DESSERT_MSG_NEEDMSGPROC
+- **/
+-int dessert_msg_ifaceflags_cb(dessert_msg_t* msg, size_t len,
+- dessert_msg_proc_t *proc, const dessert_meshif_t *riface,
+- dessert_frameid_t id) {
+-
+- dessert_meshif_t *iface;
+- struct ether_header *l25h;
+-
+- /* check if we have an processing header */
+- if (proc == NULL)
+- return DESSERT_MSG_NEEDMSGPROC;
+-
+- /* get l2.5 header if possible */
+- l25h = dessert_msg_getl25ether(msg);
+-
+- /* clear flags */
+- proc->lflags &= ~(DESSERT_LFLAG_DST_SELF | DESSERT_LFLAG_SRC_SELF
+- | DESSERT_LFLAG_NEXTHOP_SELF | DESSERT_LFLAG_PREVHOP_SELF
+- | DESSERT_LFLAG_NEXTHOP_BROADCAST
+- | DESSERT_LFLAG_DST_SELF_OVERHEARD
+- | DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD);
+-
+- /* checks against defaults */
+- if (l25h != NULL && memcmp(l25h->ether_dhost, ether_broadcast,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_DST_BROADCAST;
+- } else if (l25h != NULL && l25h->ether_dhost[0] & 0x01) { /* broadcast also has this bit set */
+- proc->lflags |= DESSERT_LFLAG_DST_MULTICAST;
+- }
+-
+- if (l25h != NULL && memcmp(l25h->ether_dhost, dessert_l25_defsrc,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_DST_SELF;
+- }
+- if (l25h != NULL && memcmp(l25h->ether_shost, dessert_l25_defsrc,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_SRC_SELF;
+- }
+- if (memcmp(msg->l2h.ether_dhost, dessert_l25_defsrc, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF;
+- }
+- if (memcmp(msg->l2h.ether_shost, dessert_l25_defsrc, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_PREVHOP_SELF;
+- }
+- if (memcmp(msg->l2h.ether_dhost, ether_broadcast, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_NEXTHOP_BROADCAST;
+- }
+-
+- /* checks against interfaces in list */
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(dessert_meshiflist_get(), iface) {
+- if (l25h != NULL && memcmp(l25h->ether_dhost, iface->hwaddr,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_DST_SELF;
+- if (memcmp(l25h->ether_dhost, riface->hwaddr, ETHER_ADDR_LEN) != 0) {
+- proc->lflags |= DESSERT_LFLAG_DST_SELF_OVERHEARD;
+- }
+- }
+- if (l25h != NULL && memcmp(l25h->ether_shost, iface->hwaddr,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_SRC_SELF;
+- }
+- if (memcmp(msg->l2h.ether_dhost, iface->hwaddr, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF;
+- if (memcmp(msg->l2h.ether_dhost, riface->hwaddr, ETHER_ADDR_LEN)
+- != 0) {
+- proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD;
+- }
+- }
+- if (memcmp(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_PREVHOP_SELF;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * M E S S A G E H A N D L I N G
+- *
+- ******************************************************************************/
+-
+-/* nothing here - yet */
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * M E S S A G E H A N D L I N G
+- *
+- ******************************************************************************/
+-
+-/* nothing here - yet */
+Index: libdessert0.86-0.86.14/dessert_periodic.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_periodic.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,326 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-/* global data storage // P U B L I C */
+-
+-/* global data storage // P R I V A T E */
+-dessert_periodic_t *_tasklist = NULL;
+-pthread_mutex_t _dessert_periodic_mutex = PTHREAD_MUTEX_INITIALIZER;
+-pthread_cond_t _dessert_periodic_changed = PTHREAD_COND_INITIALIZER;
+-pthread_t _dessert_periodic_worker;
+-int _dessert_periodic_worker_running = 0;
+-
+-/* local data storage*/
+-
+-/* local functions forward declarations*/
+-static int _dessert_periodic_add_periodic_t(dessert_periodic_t *task);
+-static void *_dessert_periodic_thread(void* arg);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * P E R I O D I C T A S K S
+- *
+- ******************************************************************************/
+-
+-/** Adds a delayed/periodic task to the task list
+- *
+- * @param[in] c callback to call when task is scheduled
+- * @param[in] data data to give to the callback
+- * @param[in] scheduled when should the callback be called the first time
+- * @param[in] interval how often should it be called (set to NULL if only once)
+- *
+- * @retval pointer if the callback was added successfully
+- * @retval NULL otherwise
+- *
+- * @note The <a href="http://www.gnu.org/s/libc/manual/html_node/Elapsed-Time.html#Elapsed-Time">GNU C Library Documentation</a>
+- * states about the @c tv_usec member of the @c struct @c timeval: <em>This is the
+- * rest of the elapsed time (a fraction of a second), represented as the number
+- * of microseconds. It is always less than one @a million.</em> So, to make sure
+- * this invariant is always met, consider using the provided TIMEVAL_ADD() macro.
+- *
+- * @par Description:
+- *
+- * @par Examples:
+- * @li Register a callback function to be executed every 1.5 seconds - and
+- * delay the first call to it for another 1.5 seconds:
+- * @code
+- * struct timeval interval;
+- * interval.tv_sec = 1;
+- * interval.tv_usec = 500000;
+- *
+- * struct timeval schedule;
+- * gettimeofday(&schedule, NULL);
+- * TIMEVAL_ADD(&schedule, 1, 500000);
+- *
+- * dessert_periodic_add(callback, NULL, &schedule, &interval);
+- * @endcode
+- *
+- *
+- */
+-dessert_periodic_t *dessert_periodic_add(dessert_periodiccallback_t* c,
+- void *data, const struct timeval *scheduled,
+- const struct timeval *interval) {
+- struct timeval now;
+- dessert_periodic_t *task;
+-
+- if (scheduled == NULL) {
+- gettimeofday(&now, NULL);
+- scheduled = &now;
+- }
+- assert(scheduled != NULL);
+-
+- /* sanity checks */
+- if (c == NULL) {
+- return (NULL);
+- }
+-
+- /* get task memory */
+- task = malloc(sizeof(dessert_periodic_t));
+- if (task == NULL) {
+- return NULL;
+- }
+-
+- /* copy data */
+- task->c = c;
+- task->data = data;
+- memcpy(&(task->scheduled), scheduled, sizeof(struct timeval));
+- if (interval == NULL) {
+- task->interval.tv_sec = 0;
+- task->interval.tv_usec = 0;
+- } else {
+- memcpy(&(task->interval), interval, sizeof(struct timeval));
+- }
+- task->next = NULL;
+-
+- pthread_mutex_lock(&_dessert_periodic_mutex);
+- _dessert_periodic_add_periodic_t(task);
+- pthread_mutex_unlock(&_dessert_periodic_mutex);
+-
+- return (task);
+-}
+-
+-/** Adds a delayed task to the task list
+- *
+- * This is an easier version of dessert_periodic_add() taking a single delay as parameter.
+- *
+- * @param[in] c callback to call when task is scheduled
+- * @param[in] data data to give to the callback
+- * @param[in] delay the delay in seconds
+- *
+- * %DESCRIPTION: \n
+- */
+-dessert_periodic_t *dessert_periodic_add_delayed(dessert_periodiccallback_t* c,
+- void *data, int delay) {
+- struct timeval at;
+- gettimeofday(&at, NULL);
+-
+- at.tv_sec += delay;
+-
+- return (dessert_periodic_add(c, data, &at, NULL));
+-}
+-
+-/** Removes a delayed/periodic task from the task list.
+- *
+- * @param[in] p pointer to task description
+- *
+- * @return -1 on failure, 0 if the task was removed
+- *
+- * %DESCRIPTION: \n
+- */
+-int dessert_periodic_del(dessert_periodic_t *p) {
+- dessert_periodic_t *i;
+- int x = -1;
+-
+- assert(p != NULL);
+-
+- pthread_mutex_lock(&_dessert_periodic_mutex);
+-
+- if (p == _tasklist) {
+- _tasklist = _tasklist->next;
+- x++;
+- }
+-
+- i = _tasklist;
+- while (i != NULL) {
+- if (i->next == p) {
+- i->next = p->next;
+- x++;
+- }
+- i = i->next;
+- }
+-
+- pthread_mutex_unlock(&_dessert_periodic_mutex);
+-
+- assert(x < 2);
+-
+- free(p);
+- return (x);
+-
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * P E R I O D I C T A S K S
+- *
+- ******************************************************************************/
+-
+-/** internal function to start periodic worker */
+-void _dessert_periodic_init() {
+- if (_dessert_periodic_worker_running == 0) {
+- _dessert_periodic_worker_running = 1;
+- pthread_create(&_dessert_periodic_worker, NULL,
+- _dessert_periodic_thread, NULL);
+- }
+-}
+-
+-/******************************************************************************
+- *
+- * LOCAL / PRIVATE
+- *
+- * P E R I O D I C T A S K S
+- *
+- ******************************************************************************/
+-
+-/* internal task list modifier - only call while holding _dessert_periodic_mutex */
+-static int _dessert_periodic_add_periodic_t(dessert_periodic_t *task) {
+-
+- dessert_periodic_t *i;
+-
+- /* first task? */
+- if (_tasklist == task) {
+- dessert_err("infinite loop in periodic tasklist requested - aborting!");
+- return (-1);
+- } else if (_tasklist == NULL) {
+- _tasklist = task;
+- pthread_cond_broadcast(&_dessert_periodic_changed);
+- }
+- /* is next task.... */
+- else if (task->scheduled.tv_sec < _tasklist->scheduled.tv_sec
+- || (task->scheduled.tv_sec == _tasklist->scheduled.tv_sec
+- && task->scheduled.tv_usec < _tasklist->scheduled.tv_usec)) {
+- task->next = _tasklist;
+- _tasklist = task;
+- pthread_cond_broadcast(&_dessert_periodic_changed);
+- }
+- /* search right place */
+- else {
+- i = _tasklist;
+- while (i->next != NULL && (i->next->scheduled.tv_sec
+- < task->scheduled.tv_sec || (i->next->scheduled.tv_sec
+- == task->scheduled.tv_sec && i->next->scheduled.tv_usec
+- <= task->scheduled.tv_usec))) {
+- i = i->next;
+- if (i->next == task) {
+- dessert_err("infinite loop in periodic tasklist requested - aborting!");
+- return (-1);
+- }
+- }
+- /* last or right place */
+- task->next = i->next;
+- i->next = task;
+- /* no need to tell periodic thread to check
+- again - next task has not changed */
+- }
+-
+- return (0);
+-
+-}
+-
+-/* internal worker for the task list */
+-static void *_dessert_periodic_thread(void* arg) {
+- dessert_periodic_t *next_task;
+- dessert_periodic_t task;
+- struct timeval now;
+- struct timespec ts;
+-
+- pthread_mutex_lock(&_dessert_periodic_mutex);
+-
+- while (1) {
+-
+- gettimeofday(&now, NULL);
+-
+- if (_tasklist == NULL) {
+- if (pthread_cond_wait(&_dessert_periodic_changed,
+- &_dessert_periodic_mutex) == EINVAL) {
+- dessert_err("sleeping failed in periodic scheduler - scheduler died");
+- break;
+- }
+- continue;
+- } else if (now.tv_sec < _tasklist->scheduled.tv_sec || (now.tv_sec
+- == _tasklist->scheduled.tv_sec && now.tv_usec
+- < _tasklist->scheduled.tv_usec)) {
+- ts.tv_sec = _tasklist->scheduled.tv_sec;
+- ts.tv_nsec = _tasklist->scheduled.tv_usec * 1000;
+- if (pthread_cond_timedwait(&_dessert_periodic_changed,
+- &_dessert_periodic_mutex, &ts) == EINVAL) {
+- dessert_err("sleeping failed in periodic scheduler - scheduler died");
+- break;
+- }
+- continue;
+- }
+-
+- /* run next task */
+- next_task = _tasklist;
+- _tasklist = next_task->next;
+-
+- /* safe task to local variable */
+- memcpy(&task, next_task, sizeof(dessert_periodic_t));
+-
+- /* periodic task - re-add */
+- if (next_task->interval.tv_sec != 0 || next_task->interval.tv_usec != 0) {
+- next_task->scheduled.tv_sec += next_task->interval.tv_sec;
+- next_task->scheduled.tv_usec += next_task->interval.tv_usec;
+- if (next_task->scheduled.tv_usec >= 1000000) {
+- next_task->scheduled.tv_sec += 1;
+- next_task->scheduled.tv_usec -= 1000000;
+- }
+- _dessert_periodic_add_periodic_t(next_task);
+- }
+- /* otherwise free memory */
+- else {
+- free(next_task);
+- }
+-
+- /* run the callback */
+- pthread_mutex_unlock(&_dessert_periodic_mutex);
+- /* call the callback - remove it from list if exits with nonzero code */
+- if (task.c(task.data, &(task.scheduled), &(task.interval))) {
+- dessert_periodic_del(next_task);
+- }
+- pthread_mutex_lock(&_dessert_periodic_mutex);
+- }
+-
+- pthread_mutex_unlock(&_dessert_periodic_mutex);
+- _dessert_periodic_worker_running = 0;
+-
+- return (NULL);
+-}
+Index: libdessert0.86-0.86.14/dessert_sysiface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_sysiface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,487 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- 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 3 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 http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-#ifdef TARGET_DARWIN
+-#define TUNSIFHEAD _IOW('t', 96, int)
+-#define TUNGIFHEAD _IOR('t', 97, int)
+-#endif
+-
+-#ifdef TARGET_FREEBSD
+-#include <net/if_tun.h>
+-#endif
+-
+-#ifdef TARGET_LINUX
+-#include <linux/if_tun.h>
+-#endif
+-
+-uint8_t dessert_sysif_hwaddr[ETHER_ADDR_LEN]; // TODO unused! to be removed ??!?
+-
+-/* global data storage // P U B L I C */
+-/* nothing here - yet */
+-
+-/* global data storage // P R I V A T E */
+-dessert_sysif_t *_dessert_sysif = NULL;
+-
+-/* local data storage*/
+-dessert_sysrxcbe_t *_dessert_sysrxcblist = NULL;
+-int _dessert_sysrxcblistver = 0;
+-
+-/* internal functions forward declarations*/
+-static void *_dessert_sysif_init_thread(void* arg);
+-static int _dessert_sysif_init_getmachack(dessert_msg_t *msg, size_t len,
+- dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * S Y S - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** Initializes the tun/tap Interface dev for des-sert.
+- * @arg *device interface name
+- * @arg flags @see DESSERT_TUN @see DESSERT_TAP @see DESSERT_MAKE_DEFSRC
+- * @return 0 -- on success
+- * @return EINVAL -- if message is broken
+- * @return EFAULT -- if interface not specified and not guessed
+- **/
+-int dessert_sysif_init(char* device, uint8_t flags) {
+-
+- char *buf;
+-
+-#ifdef TARGET_LINUX
+- struct ifreq ifr;
+-#endif
+-
+- /* initialize _dessert_sysif */
+- _dessert_sysif = malloc(sizeof(dessert_sysif_t));
+- if (_dessert_sysif == NULL)
+- return (-errno);
+- memset((void *) _dessert_sysif, 0, sizeof(dessert_sysif_t));
+- _dessert_sysif->flags = flags;
+- strncpy(_dessert_sysif->if_name, device, IF_NAMESIZE);
+- _dessert_sysif->if_name[IF_NAMESIZE - 1] = '\0';
+- pthread_mutex_init(&(_dessert_sysif->cnt_mutex), NULL);
+-
+-#ifdef TARGET_BSD
+-
+- /* open device */
+- buf = malloc(IF_NAMESIZE+6);
+- snprintf(buf, IF_NAMESIZE+6, "/dev/%s", device);
+- _dessert_sysif->fd = open(buf, O_RDWR);
+- if(_dessert_sysif->fd < 0) {
+- dessert_err("could not open interface %s using %s: %s", device, buf, strerror(errno));
+- free(buf);
+- return (-errno);
+- }
+- free(buf);
+-
+- /* set header mode on for mode tun */
+- if(flags & DESSERT_TUN) {
+- const int one = 1;
+- if(ioctl(_dessert_sysif->fd, TUNSIFHEAD, &one, sizeof one) == -1) {
+- dessert_err("setting TUNSIFHEAD failed: %s",strerror(errno));
+- goto dessert_sysif_init_err;
+- return (-errno);
+- }
+- }
+-
+-#elif TARGET_LINUX
+-
+- /* open device */
+- buf = "/dev/net/tun";
+- _dessert_sysif->fd = open(buf, O_RDWR);
+- memset(&ifr, 0, sizeof(ifr));
+- if (flags & DESSERT_TUN) {
+- ifr.ifr_flags = IFF_TUN; /* we want the service flag - no IFF_NO_PI */
+- } else {
+- ifr.ifr_flags = IFF_TAP | IFF_NO_PI; /* we want the service flag and IFF_NO_PI */
+- }
+- strcpy(ifr.ifr_name, _dessert_sysif->if_name);
+- if (ioctl(_dessert_sysif->fd, TUNSETIFF, (void *) &ifr) < 0) {
+- dessert_err("ioctl(TUNSETIFF) failed: %s", strerror(errno));
+- goto dessert_sysif_init_err;
+- return (-errno);
+- }
+- strcpy(_dessert_sysif->if_name, ifr.ifr_name);
+-
+-#else
+-
+- goto not_implemented;
+-
+-#endif
+-
+- /* check interface - abusing dessert_meshif methods */
+- _dessert_sysif->if_index = if_nametoindex(device);
+- if (!_dessert_sysif->if_index) {
+- dessert_err("interface %s - no such interface", _dessert_sysif->if_name);
+- goto dessert_sysif_init_err;
+- }
+-
+- /* do ifconfig to set the interface up - strange things happen otherwise */
+- buf = malloc(IF_NAMESIZE + 16);
+- snprintf(buf, IF_NAMESIZE + 15, "ifconfig %s up", _dessert_sysif->if_name);
+- system(buf);
+- free(buf);
+-
+- /* get hardware address in tap mode if possible */
+- if (flags & DESSERT_TAP) {
+- if (_dessert_meshif_gethwaddr((dessert_meshif_t *) _dessert_sysif) != 0) {
+- dessert_err("failed to get hwaddr of interface %s(%d) - hope src of first packet received from is it",
+- _dessert_sysif->if_name, _dessert_sysif->if_index, _dessert_sysif);
+- _dessert_sysif->flags |= _DESSERT_TAP_NOMAC;
+- dessert_sysrxcb_add(_dessert_sysif_init_getmachack, 0);
+- } else {
+- /* check whether we need to set defsrc */
+- if ((flags & DESSERT_MAKE_DEFSRC) || memcmp(dessert_l25_defsrc,
+- ether_null, ETHER_ADDR_LEN) == 0) {
+- memcpy(dessert_l25_defsrc, _dessert_sysif->hwaddr,
+- ETHER_ADDR_LEN);
+- dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
+- dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
+- }
+- }
+- }
+-
+- /* info message */
+- if (flags & DESSERT_TAP) {
+- dessert_info("starting worker thread for tap interface %s(%d) hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- _dessert_sysif->if_name, _dessert_sysif->if_index,
+- _dessert_sysif->hwaddr[0], _dessert_sysif->hwaddr[1], _dessert_sysif->hwaddr[2],
+- _dessert_sysif->hwaddr[3], _dessert_sysif->hwaddr[4], _dessert_sysif->hwaddr[5]);
+- } else {
+- dessert_info("starting worker thread for tap interface %s(%d) fd %d",
+- _dessert_sysif->if_name, _dessert_sysif->if_index, _dessert_sysif->fd);
+- }
+-
+- /* start worker thread */
+- if (pthread_create(&(_dessert_sysif->worker), NULL,
+- _dessert_sysif_init_thread, (void *) _dessert_sysif)) {
+- dessert_err("creating worker thread failed for interface %s(%d)",
+- _dessert_sysif->if_name, _dessert_sysif->if_index);
+- goto dessert_sysif_init_err;
+- }
+-
+- /* done */
+- return (DESSERT_OK);
+-
+- dessert_sysif_init_err: close(_dessert_sysif->fd);
+-
+- return (-errno);
+-}
+-
+-/** adds a callback function to call if a packet should be injected into dessert via a tun/tap interface
+- * @arg *c callback function
+- * @arg prio priority of the function - lower first!
+- * @return DESSERT_OK on success
+- * @return -errno on error
+- **/
+-int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio) {
+- dessert_sysrxcbe_t *cb, *i;
+-
+- cb = (struct dessert_sysrxcbe*) malloc(sizeof(struct dessert_sysrxcbe));
+- if (cb == NULL) {
+- dessert_err("failed to allocate memory for registering sys callback: %s", strerror(errno));
+- return (-errno);
+- }
+-
+- if (c == NULL) {
+- dessert_err("tried to add a null pointer as dessert_sysrxcb");
+- return (-EINVAL);
+- }
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- cb->c = c;
+- cb->prio = prio;
+- cb->next = NULL;
+-
+- if (_dessert_sysrxcblist == NULL) {
+- _dessert_sysrxcblist = cb;
+- _dessert_sysrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+- }
+-
+- if (_dessert_sysrxcblist->prio > cb->prio) {
+- cb->next = _dessert_sysrxcblist;
+- _dessert_sysrxcblist = cb;
+- _dessert_sysrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+- }
+-
+- /* find right place for callback */
+- for (i = _dessert_sysrxcblist; i->next != NULL && i->next->prio <= cb->prio; i
+- = i->next)
+- ;
+-
+- /* insert it */
+- cb->next = i->next;
+- i->next = cb;
+- _dessert_sysrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+-}
+-
+-/** removes all occurrences of the callback function from the list of callbacks.
+- * @arg c callback function
+- * @return DESSERT_OK on success, DESSERT_ERR on error
+- **/
+-int dessert_sysrxcb_del(dessert_sysrxcb_t* c) {
+- int count = 0;
+- dessert_sysrxcbe_t *i, *last;
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- if (_dessert_sysrxcblist == NULL) {
+- goto dessert_sysrxcb_del_out;
+- }
+-
+- while (_dessert_sysrxcblist->c == c) {
+- count++;
+- i = _dessert_sysrxcblist;
+- _dessert_sysrxcblist = _dessert_sysrxcblist->next;
+- free(i);
+- if (_dessert_sysrxcblist == NULL) {
+- goto dessert_sysrxcb_del_out;
+- }
+- }
+-
+- for (i = _dessert_sysrxcblist; i->next != NULL; i = i->next) {
+- if (i->c == c) {
+- count++;
+- last->next = i->next;
+- free(i);
+- i = last;
+- }
+- last = i;
+- }
+-
+- dessert_sysrxcb_del_out: _dessert_sysrxcblistver++;
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return ((count > 0) ? DESSERT_OK : DESSERT_ERR);
+-
+-}
+-
+-/** sends a packet via tun/tap interface to the kernel
+- * @arg *msg message to send
+- * @return DESSERT_OK on success
+- * @return -EIO if message failed to be sent
+- **/
+-int dessert_syssend_msg(dessert_msg_t *msg) {
+- struct ether_header *eth;
+- size_t eth_len;
+-
+- eth_len = dessert_msg_ethdecap(msg, &eth);
+- if (eth_len == -1) {
+- return (-EIO);
+- }
+- dessert_syssend(eth, eth_len);
+- free(eth);
+-
+- return DESSERT_OK;
+-}
+-
+-/** sends a packet via tun/tap interface to the kernel
+- * @arg *eth message to send
+- * @arg len length of message to send
+- * @return DESSERT_OK on success
+- * @return -EIO if message failed to be sent
+- **/
+-int dessert_syssend(const struct ether_header *eth, size_t len) {
+- ssize_t res = 0;
+-
+- if (_dessert_sysif == NULL)
+- return (-EIO);
+-
+- if (_dessert_sysif->flags & DESSERT_TUN) {
+- eth
+- = (struct ether_header *) (((uint8_t *) eth) + (ETHER_ADDR_LEN
+- * 2));
+- len -= (ETHER_ADDR_LEN * 2);
+- }
+-
+- res = write(_dessert_sysif->fd, (const void *) eth, len);
+-
+- if (res == len) {
+- pthread_mutex_lock(&(_dessert_sysif->cnt_mutex));
+- _dessert_sysif->opkts++;
+- _dessert_sysif->obytes += res;
+- pthread_mutex_unlock(&(_dessert_sysif->cnt_mutex));
+- return (DESSERT_OK);
+- } else {
+-
+- return (-EIO);
+- }
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * S Y S - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/* nothing here - yet */
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * S Y S - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** internal callback which gets registered if we can't find out mac address of tap interface */
+-static int _dessert_sysif_init_getmachack(dessert_msg_t *msg, size_t len,
+- dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id) {
+-
+- struct ether_header *eth;
+- dessert_msg_ethdecap(msg, &eth);
+-
+- /* hack to get the hardware address */
+- if (sysif->flags & _DESSERT_TAP_NOMAC) {
+- /* copy from first packet received */
+- memcpy(sysif->hwaddr, eth->ether_shost, ETHER_ADDR_LEN);
+- dessert_info("guessed hwaddr for %s: %02x:%02x:%02x:%02x:%02x:%02x", sysif->if_name,
+- sysif->hwaddr[0], sysif->hwaddr[1], sysif->hwaddr[2],
+- sysif->hwaddr[3], sysif->hwaddr[4], sysif->hwaddr[5]);
+- /* check whether we need to set defsrc */
+- if ((sysif->flags & DESSERT_MAKE_DEFSRC) || memcmp(dessert_l25_defsrc,
+- ether_null, ETHER_ADDR_LEN) == 0) {
+- memcpy(dessert_l25_defsrc, sysif->hwaddr, ETHER_ADDR_LEN);
+- dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
+- dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
+- }
+- sysif->flags &= ~_DESSERT_TAP_NOMAC;
+- }
+-
+- /* unregister me */
+- dessert_sysrxcb_del(_dessert_sysif_init_getmachack);
+-
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/** internal packet processing thread body */
+-static void *_dessert_sysif_init_thread(void* arg) {
+-
+- dessert_sysif_t *sysif = (dessert_sysif_t *) arg;
+- size_t len;
+- size_t buflen = ETHER_MAX_LEN;
+- char buf[buflen];
+- dessert_msg_proc_t proc;
+- dessert_frameid_t id;
+- dessert_sysrxcbe_t *cb;
+- int res;
+- int ex = 0;
+- dessert_sysrxcb_t **cbl = NULL;
+- int cbllen = 0;
+- int cblcur = -1;
+- int cblver = -1;
+-
+- while (!ex) {
+-
+- memset(buf, 0, buflen);
+-
+- if (sysif->flags & DESSERT_TUN) {
+- len = read((sysif->fd), buf + (ETHER_ADDR_LEN * 2), buflen
+- - (ETHER_ADDR_LEN * 2));
+- } else {
+- len = read((sysif->fd), buf, buflen);
+- }
+-
+- if (len == -1) {
+- dessert_debug("got %s while reading on %s (fd %d) - is the sys (tun/tap) interface up?", strerror(errno), sysif->if_name, sysif->fd);
+- sleep(1);
+- continue;
+- }
+- if (sysif->flags & DESSERT_TUN) {
+- len += (ETHER_ADDR_LEN * 2);
+- }
+-
+- /* copy callbacks to internal list to release dessert_cfglock before invoking callbacks*/
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- if (cblver < _dessert_sysrxcblistver) {
+- /* callback list changed - rebuild it */
+- cbllen = 0;
+- for (cb = _dessert_sysrxcblist; cb != NULL; cb = cb->next)
+- cbllen++;
+- cbl = realloc(cbl, cbllen * sizeof(dessert_sysrxcb_t *));
+- if (cbl == NULL) {
+- dessert_err("failed to allocate memory for internal callback list");
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return (NULL);
+- }
+-
+- cblcur = 0;
+- for (cb = _dessert_sysrxcblist; cb != NULL; cb = cb->next)
+- cbl[cblcur++] = cb->c;
+-
+- cblver = _dessert_sysrxcblistver;
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* generate frame id */
+- id = _dessert_newframeid();
+-
+- /* count packet */
+- pthread_mutex_lock(&(sysif->cnt_mutex));
+- sysif->ipkts++;
+- sysif->ibytes += len;
+- pthread_mutex_unlock(&(sysif->cnt_mutex));
+-
+- /* call the interested */
+- res = 0;
+- cblcur = 0;
+- memset(&proc, 0, DESSERT_MSGPROCLEN);
+- dessert_msg_t *msg;
+- while (res > DESSERT_MSG_DROP && cblcur < cbllen) {
+- if (dessert_msg_ethencap((struct ether_header *) buf, len, &msg)
+- < 0) {
+- dessert_err("failed to encapsulate ethernet frame on host-to-network-pipeline: %s", errno);
+- };
+- res = cbl[cblcur++](msg, len, &proc, sysif, id);
+- }
+- dessert_msg_destroy(msg);
+-
+- }
+- dessert_info("stopped reading on %s (fd %d): %s", sysif->if_name, sysif->fd, strerror(errno));
+-
+- free(cbl);
+- close(sysif->fd);
+-
+- return (NULL);
+-}
+Index: libdessert0.86-0.86.14/doxygen-include.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/doxygen-include.am 2009-12-09 16:38:27.242678444 +0100
+@@ -0,0 +1,203 @@
++# ---------------------------------------------------------------------------
++# Licensed to the Apache Software Foundation (ASF) under one or more
++# contributor license agreements. See the NOTICE file distributed with
++# this work for additional information regarding copyright ownership.
++# The ASF licenses this file to You under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++# ---------------------------------------------------------------------------
++
++# Copyright (C) 2004 Oren Ben-Kiki
++# This file is distributed under the same terms as the Automake macro files.
++
++# Generate automatic documentation using Doxygen. Goals and variables values
++# are controlled by the various DX_COND_??? conditionals set by autoconf.
++#
++# The provided goals are:
++# doxygen-doc: Generate all doxygen documentation.
++# doxygen-run: Run doxygen, which will generate some of the documentation
++# (HTML, CHM, CHI, MAN, RTF, XML) but will not do the post
++# processing required for the rest of it (PS, PDF, and some MAN).
++# doxygen-man: Rename some doxygen generated man pages.
++# doxygen-ps: Generate doxygen PostScript documentation.
++# doxygen-pdf: Generate doxygen PDF documentation.
++#
++# Note that by default these are not integrated into the automake goals. If
++# doxygen is used to generate man pages, you can achieve this integration by
++# setting man3_MANS to the list of man pages generated and then adding the
++# dependency:
++#
++# $(man3_MANS): doxygen-doc
++#
++# This will cause make to run doxygen and generate all the documentation.
++#
++# The following variable is intended for use in Makefile.am:
++#
++# DX_CLEANFILES = everything to clean.
++#
++# This is usually added to MOSTLYCLEANFILES.
++
++## --------------------------------- ##
++## Format-independent Doxygen rules. ##
++## --------------------------------- ##
++
++if DX_COND_doc
++
++## ------------------------------- ##
++## Rules specific for HTML output. ##
++## ------------------------------- ##
++
++if DX_COND_html
++
++DX_CLEAN_HTML = @DX_DOCDIR@/html
++
++endif DX_COND_html
++
++## ------------------------------ ##
++## Rules specific for CHM output. ##
++## ------------------------------ ##
++
++if DX_COND_chm
++
++DX_CLEAN_CHM = @DX_DOCDIR@/chm
++
++if DX_COND_chi
++
++DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi
++
++endif DX_COND_chi
++
++endif DX_COND_chm
++
++## ------------------------------ ##
++## Rules specific for MAN output. ##
++## ------------------------------ ##
++
++if DX_COND_man
++
++DX_CLEAN_MAN = @DX_DOCDIR@/man
++
++endif DX_COND_man
++
++## ------------------------------ ##
++## Rules specific for RTF output. ##
++## ------------------------------ ##
++
++if DX_COND_rtf
++
++DX_CLEAN_RTF = @DX_DOCDIR@/rtf
++
++endif DX_COND_rtf
++
++## ------------------------------ ##
++## Rules specific for XML output. ##
++## ------------------------------ ##
++
++if DX_COND_xml
++
++DX_CLEAN_XML = @DX_DOCDIR@/xml
++
++endif DX_COND_xml
++
++## ----------------------------- ##
++## Rules specific for PS output. ##
++## ----------------------------- ##
++
++if DX_COND_ps
++
++DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps
++
++DX_PS_GOAL = doxygen-ps
++
++doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps
++
++@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag
++ cd @DX_DOCDIR@/latex; \
++ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++ $(DX_LATEX) refman.tex; \
++ $(MAKEINDEX_PATH) refman.idx; \
++ $(DX_LATEX) refman.tex; \
++ countdown=5; \
++ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++ refman.log > /dev/null 2>&1 \
++ && test $$countdown -gt 0; do \
++ $(DX_LATEX) refman.tex; \
++ countdown=`expr $$countdown - 1`; \
++ done; \
++ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi
++
++endif DX_COND_ps
++
++## ------------------------------ ##
++## Rules specific for PDF output. ##
++## ------------------------------ ##
++
++if DX_COND_pdf
++
++DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf
++
++DX_PDF_GOAL = doxygen-pdf
++
++doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf
++
++@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag
++ cd @DX_DOCDIR@/latex; \
++ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++ $(DX_PDFLATEX) refman.tex; \
++ $(DX_MAKEINDEX) refman.idx; \
++ $(DX_PDFLATEX) refman.tex; \
++ countdown=5; \
++ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++ refman.log > /dev/null 2>&1 \
++ && test $$countdown -gt 0; do \
++ $(DX_PDFLATEX) refman.tex; \
++ countdown=`expr $$countdown - 1`; \
++ done; \
++ mv refman.pdf ../@PACKAGE@.pdf
++
++endif DX_COND_pdf
++
++## ------------------------------------------------- ##
++## Rules specific for LaTeX (shared for PS and PDF). ##
++## ------------------------------------------------- ##
++
++if DX_COND_latex
++
++DX_CLEAN_LATEX = @DX_DOCDIR@/latex
++
++endif DX_COND_latex
++
++.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag
++
++doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
++ rm -rf @DX_DOCDIR@
++ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
++
++DX_CLEANFILES = \
++ @DX_DOCDIR@/@PACKAGE@.tag \
++ -r \
++ $(DX_CLEAN_HTML) \
++ $(DX_CLEAN_CHM) \
++ $(DX_CLEAN_CHI) \
++ $(DX_CLEAN_MAN) \
++ $(DX_CLEAN_RTF) \
++ $(DX_CLEAN_XML) \
++ $(DX_CLEAN_PS) \
++ $(DX_CLEAN_PDF) \
++ $(DX_CLEAN_LATEX)
++
++endif DX_COND_doc
+Index: libdessert0.86-0.86.14/include/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/include/Makefile.am 2009-12-09 16:38:27.242678444 +0100
+@@ -0,0 +1,3 @@
++
++nobase_include_HEADERS = dessert/dessert.h dessert/utlist.h
++
+Index: libdessert0.86-0.86.14/include/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/include/Makefile.in 2009-12-09 16:38:51.048502815 +0100
+@@ -0,0 +1,490 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
++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@
++subdir = include
++DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = $(top_builddir)/config.h
++CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
++SOURCES =
++DIST_SOURCES =
++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__installdirs = "$(DESTDIR)$(includedir)"
++HEADERS = $(nobase_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@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++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@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++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@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++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@
++ax_pthread_config = @ax_pthread_config@
++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@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++nobase_include_HEADERS = dessert/dessert.h dessert/utlist.h
++all: all-am
++
++.SUFFIXES:
++$(srcdir)/Makefile.in: $(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 include/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu include/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: $(am__configure_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): $(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-nobase_includeHEADERS: $(nobase_include_HEADERS)
++ @$(NORMAL_INSTALL)
++ test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
++ @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
++ $(am__nobase_list) | while read dir files; do \
++ xfiles=; for file in $$files; do \
++ if test -f "$$file"; then xfiles="$$xfiles $$file"; \
++ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
++ test -z "$$xfiles" || { \
++ test "x$$dir" = x. || { \
++ echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \
++ $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \
++ echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \
++ $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \
++ done
++
++uninstall-nobase_includeHEADERS:
++ @$(NORMAL_UNINSTALL)
++ @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
++ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(includedir)" && rm -f $$files
++
++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"
++
++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 $(HEADERS)
++installdirs:
++ for dir in "$(DESTDIR)$(includedir)"; 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:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++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 distclean-tags
++
++dvi: dvi-am
++
++dvi-am:
++
++html: html-am
++
++html-am:
++
++info: info-am
++
++info-am:
++
++install-data-am: install-nobase_includeHEADERS
++
++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-nobase_includeHEADERS
++
++.MAKE: install-am install-strip
++
++.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
++ clean-libtool ctags 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-info \
++ install-info-am install-man install-nobase_includeHEADERS \
++ 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 \
++ tags uninstall uninstall-am uninstall-nobase_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:
+Index: libdessert0.86-0.86.14/include/dessert/dessert.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/include/dessert/dessert.h 2009-12-09 16:38:27.246011666 +0100
+@@ -0,0 +1,1334 @@
++/***************************************************************************//**
++ @file
++
++ @page license License
++
++ @brief Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB). \n
++ All rights reserved. \n
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group \n
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/) \n
++ -----------------------------------------------------------------------------\n
++ 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 3 of the License, or (at your option) any later
++ version. \n
++ \n
++ 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.\n
++ \n
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ . \n
++ -----------------------------------------------------------------------------\n
++ For further information and questions please use the web site \n
++ http://www.des-testbed.net/
++*******************************************************************************/
++
++/***************************************************************************//**
++ *
++ * @mainpage DES-SERT
++ *
++ *
++ * @section intro_sec Introduction
++ *
++ * DES-SERT, the DES Simple and Extensible Routing-Framework for Testbeds,
++ * is a framework designed to assist researchers implementing routing
++ * protocols for testbeds.
++ *
++ * DES-SERT enables the implementation of routing protocols on top of
++ * Ethernet via an underlay (Layer 2.5) in user space.
++ * It introduces an abstraction from OS specific issues and provides
++ * functionality and data structures to implement proactive, reactive,
++ * and hybrid routing protocols.
++
++ * While generally usable in many application scenarios, it is primarily
++ * used in DES-Mesh (http://www.des-testbed.net/), the multi-transceiver
++ * wireless mesh network testbed part of the DES-Testbed at Freie
++ * Universitaet Berlin, Germany.
++ *
++ * @section arch_sec DES-SERT Architecture
++ *
++ * DES-SERT introduces some concepts to implement routing protocols.
++ * When implementing a routing protocol with DES-SERT, you should be
++ * familiar with these concepts to structure and tailor your implementation.
++ *
++ *
++ * @subsection messages_subsec DES-SERT Messages
++ *
++ * Every packet you send or receive on the mesh is represented as a
++ * DES-SERT message. From a programmers point of view, a DES-SERT message
++ * is just a C-structure:
++ *
++ * @code
++ * typedef struct __attribute__ ((__packed__)) dessert_msg {
++ * struct ether_header l2h;
++ * char proto[DESSERT_PROTO_STRLEN];
++ * uint8_t ver;
++ * uint8_t flags;
++ * union {
++ * uint32_t u32;
++ * struct __attribute__ ((__packed__)) {
++ * uint8_t ttl;
++ * uint8_t u8;
++ * uint16_t u16;
++ * };
++ * };
++ * uint16_t hlen;
++ * uint16_t plen;
++ * } dessert_msg_t;
++ * @endcode
++ *
++ * Every message sent via the underlay carries this structure as a packet
++ * header. All data in a "dessert_msg" is stored in network byte order.
++ * DES-SERT tries to care as automatically as possible of this structure.
++ * Nevertheless you will have to care at least about: "l2h.ether_dhost" and
++ * "ttl".
++ *
++ * If you need to send some data along with every packet, e.g. some kind of
++ * metric or cost your routing protocol uses, you should try to fit this
++ * data into the "u8", "u16" and the upper 4 bits of the "flags" field.
++ * These fields will never be touched by DES-SERT except on initialization
++ * via "dessert_msg_new".
++ *
++ * Because just a C-structure is not really usable as a packet, there are some
++ * utility functions around - please have a look around in "dessert.h" and the
++ * doxygen documentation. The most important ones are: "dessert_msg_new" and
++ * "dessert_msg_destroy", which do not simply allocate memory for a DES-SERT
++ * message, but for a whole packet of maximum size and initialize the
++ * structures for further packet construction/processing.
++ *
++ * @code
++ * int dessert_msg_new(dessert_msg_t **msgout);
++ *
++ * void dessert_msg_destroy(dessert_msg_t* msg);
++ * @endcode
++ *
++ *
++ * @subsection extensions_subsec DES-SERT Extensions
++ *
++ * A DES-SERT extension is some structure used to piggyback data on a
++ * DES-SERT message. It consists of a 8-bit user supplied type field (with
++ * some reserved values), an 8-bit length field and user supplied data of
++ * arbitrary length of 253 bytes at most.
++ *
++ * It can be added to a message via dessert_msg_addext(), retrieved via
++ * dessert_msg_getext() and removed via dessert_msg_delext().
++ *
++ * @code
++ * int dessert_msg_addext(dessert_msg_t* msg, dessert_ext_t** ext,
++ * uint8_t type, size_t len);
++ *
++ * int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
++ *
++ * int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext,
++ * uint8_t type, int index);
++ *
++ * @endcode
++ *
++ * It is recommended not to put single data fields in extensions, but
++ * combine semantically related data in a struct and attach this struct
++ * as an extension because every extension carried introduces an 16-bit
++ * overhead to the packet.
++ *
++ *
++ * @subsection pipelines_subsec Processing Pipelines
++ *
++ * Routing algorithms are often split up in several parts like packet
++ * validation, loop-detection or routing table lookup.
++ * To implement these as independent and clear as possible, DES-SERT enables
++ * you to split up your packet processing in as many parts as you like.
++ *
++ * There are two separate processing pipelines - one for packets received
++ * from the kernel via a TUN or TAP interface and one for packets received
++ * via an interface used on the mesh network.
++ *
++ * You can register callbacks to be added to one of these pipelines with
++ * "dessert_sysrxcb_add" or "dessert_meshrxcb_add". Both take an additional
++ * integer argument ("priority") specifying the order the callbacks should
++ * be called. Higher "priority" value results in being called later
++ * within the pipeline.
++ *
++ * @code
++ * int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
++ *
++ * int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
++ * @endcode
++ *
++ * If a callback returns "DESSERT_MSG_KEEP" the packed will be processed by
++ * further callbacks, if it returns "DESSERT_MSG_DROP" the message will be
++ * dropped and no further callbacks will be called.
++ *
++ * You do not need to care about the management of the buffers for incoming
++ * messages - DES-SERT does this for you. Nevertheless if you need to add
++ * extensions or enlarge the payload of a message, you need to tell DES-SERT
++ * to enlarge the buffer for you if the flag "DESSERT_FLAG_SPARSE" is set on
++ * the message. You can do this by returning "DESSERT_MSG_NEEDNOSPARSE" from
++ * within a callback. The callback will be called again with a larger buffer
++ * and no "DESSERT_FLAG_SPARSE" flag being set.
++ *
++ *
++ * @subsection buffer_subsec Processing Buffer
++ *
++ * If you need to pass information along several callbacks, you can do this
++ * in the processing buffer passed to the the callbacks. This buffer contains
++ * some local processing flags ("lflags") set by the builtin callback
++ * "dessert_msg_ifaceflags_cb" (e.g. telling you about packet origin or if
++ * the packet is multicast) and 1KB of space for your callbacks to pass
++ * along arbitrary data.
++ *
++ * This buffer might only be allocated after you explicitly request it - in
++ * this case the proc argument is NULL and you can return the value
++ * "DESSERT_MSG_NEEDMSGPROC" from within your callback. The callback will
++ * be called again with a valid processing buffer.
++ *
++ *
++ * @section interfaces_sec Using Interfaces
++ *
++ *
++ * @subsection sysif_subsec Using a TUN/TAP interface
++ *
++ * First you have to choose whether to use a TUN or TAP interface. TUN
++ * interfaces are used to exchange IPv4 / IPv6 datagrams with the kernel
++ * network stack. TAP interfaces are used to exchange Ethernet frames
++ * with the kernel network stack. If you want to route Ethernet frames,
++ * you should choose a TAP interface. If you intend to implement
++ * a custom layer 2 to layer 3 mapping, you should use a TUN interface.
++
++ * Currently, you can only initialize and use a single sys (TUN/TAP) interface.
++ * This is done by "dessert_sysif_init". You must then set up the interface
++ * config in the kernel yourself e.g. by calling "ifconfig".
++ *
++ * @code
++ *
++ * int dessert_sysif_init(char* name, uint8_t flags);
++ *
++ * @endcode
++ *
++ * In either case, frames you receive from a TUN/TAP interface will be
++ * passed along the callbacks added by "dessert_sysrxcb_add" to the
++ * processing pipeline. Each of them will be called with a pointer to an
++ * Ethernet frame. In case of a TUN interface, "ether_shost" and "ether_dhost"
++ * are set to "00:00:00:00:00:00", and ether_type reflects whether the packet
++ * received is IPv4 oder IPv6.
++ *
++ * Packets are sent to the kernel network stack with "dessert_syssend".
++ * In case of a TUN Interface "ether_shost" and "ether_dhost" will be
++ * ignored.
++ *
++ * @code
++ * int dessert_syssend_msg(dessert_msg_t *msg);
++ *
++ * int dessert_syssend(const struct ether_header *eth, size_t len);
++ * @endcode
++ *
++ *
++ * @subsection meshif_subsec Using a Mesh Interface
++ *
++ * Mesh interfaces are used similar to the TUN/TAP interface with two major
++ * differences: You can have multiple mesh interfaces and they send and
++ * receive DES-SERT messages instead of Ethernet frames.
++ *
++ * You add an mesh interface using "dessert_meshif_add" and can send to it
++ * by calling "dessert_meshsend". If the interface parameter is NULL, the
++ * packet will be transmitted over every interface (good for flooding).
++ *
++ * @code
++ * int dessert_meshif_add(const char* dev, uint8_t flags);
++ *
++ *
++ * int dessert_meshsend(const dessert_msg_t* msgin,
++ * const dessert_meshif_t *iface);
++ *
++ * int dessert_meshsend_hwaddr(const dessert_msg_t* msgin,
++ * const uint8_t hwaddr[ETHER_ADDR_LEN]);
++ *
++ * int dessert_meshsend_allbutone(const dessert_msg_t* msgin,
++ * const dessert_meshif_t *iface);
++ *
++ * int dessert_meshsend_fast(dessert_msg_t* msg,
++ * const dessert_meshif_t *iface);
++ *
++ * int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg,
++ * const uint8_t hwaddr[ETHER_ADDR_LEN]);
++ *
++ * int dessert_meshsend_fast_allbutone(dessert_msg_t* msg,
++ * const dessert_meshif_t *iface);
++ *
++ * int dessert_meshsend_raw(dessert_msg_t* msg,
++ * const dessert_meshif_t *iface);
++ * @endcode
++ *
++ * @section logging_sec Logging
++ *
++ * You can write log messages easily with a bunch of macros provided
++ * by DES-SERT ("dessert_debug", "dessert_info" ,"dessert_notice",
++ * "dessert_warn", "dessert_warning", "dessert_err", "dessert_crit",
++ * "dessert_alert" and "dessert_emerg"). Each of them can be used like
++ * "printf" and logs to Syslog, STDERR, file or a ringbuffer depending
++ * on your configuration.
++ *
++ * DES-SERT also ships with a custom "assert" macro which acts like
++ * the original macro from the standard C library and uses the logging
++ * mechanism described above.
++ *
++ *
++ * @section periodics_sec Periodics
++ *
++ * Periodics help you to perform maintenance or delayed tasks. A task
++ * consists of a callback, which will be called at the time you requested,
++ * and a void pointer the callback is passed. You can add these tasks by
++ * calling "dessert_periodic_add" or "dessert_periodic_add_delayed".
++ *
++ *
++ * @section cli_sec CLI - Command Line Interface
++ *
++ * DES-SERT supports simple configuration and debugging of your routing
++ * protocol implementation by providing a Cisco like command line interface
++ * (cli) and a config file parser based upon it.
++ * This cli is realized through libcli (http://code.google.com/p/libcli/).
++ *
++ * DES-SERT does some of the initialization of libcli. Therefore, it provides
++ * the main cli anchor "dessert_cli" and some anchors to add commands below
++ * "dessert_cli_.*". Because DES-SERT only loosely wraps libcli, you should
++ * make yourself familiar with libcli itself. This may be improved in further
++ * DES-SERT releases.
++ *
++ * You can evaluate a config file by calling "cli_file" and start a thread
++ * enabling a telnet-interface for DES-SERT by calling "dessert_cli_run".
++ *
++ *
++ * @section all_sec Putting it all together
++ *
++ * Now you have learned about the most important aspects of DES-SERT.
++ * To write your own routing protocol implementation, you need to know
++ * how to put all this together.
++ *
++ * You should start with a main() program parsing the command line options
++ * and then calling "dessert_init()". This is needed to set up DES-SERT
++ * correctly. Afterwards you can register callbacks, read the config file
++ * and do what you like. If everything is set up, you call "dessert_run()"
++ * and let the event based framework do its job.
++ *
++ * If you would like to see a complete protocol implementation sample,
++ * have a look at the "gossiping" directory.
++ *
++ *
++ * @section feedback_sec Contact & Feedback
++ *
++ * We love feedback - if you have patches, comments or questions,
++ * please contact us! Recent contact information is available on
++ * http://www.des-testbed.net/des-sert/
++ *
++ ******************************************************************************/
++
++#ifndef DESSERT_H
++#define DESSERT_H
++
++#ifdef __DARWIN__
++#include <net/if_dl.h>
++#define TUN_BSD
++#endif
++
++#ifdef __linux__
++#define TUN_LINUX
++#endif
++
++#include <net/if.h>
++#include <net/ethernet.h>
++#include <pcap.h>
++#include <stdint.h>
++#include <syslog.h>
++#include <stdlib.h>
++#include <libcli.h>
++
++/***************************************************************************//**
++ *
++ * @defgroup global G L O B A L # D E F I N E S and T Y P E D E F S / S T R U C T U R E S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** ethernet protocol used on layer 2 */
++#define DESSERT_ETHPROTO 0x8042
++
++/** maximum frame size to assemble as dessert_msg */
++#define DESSERT_MAXFRAMELEN ETHER_MAX_LEN
++
++/** maximum size of the data part in dessert_ext */
++#define DESSERT_MAXEXTDATALEN 130
++
++/** length of protocol string used in dessert_msg */
++#define DESSERT_PROTO_STRLEN 4
++
++/** size of local message processing buffer */
++#define DESSERT_LBUF_LEN 1024
++
++/** return code for many dessert_* functions */
++#define DESSERT_OK 0
++
++/** return code for many dessert_* functions */
++#define DESSERT_ERR 1
++
++/******************************************************************************
++ * typedefs
++ ******************************************************************************/
++/** runtime-unique frame id */
++typedef uint64_t dessert_frameid_t;
++
++/** A basic message send on des-sert layer2.5. */
++typedef struct __attribute__ ((__packed__)) dessert_msg {
++ /** the layer2 header on the wire */
++ struct ether_header l2h;
++ /** short name of the protocol as passed to dessert_init() */
++ char proto[DESSERT_PROTO_STRLEN];
++ /** version of the app as passed to dessert_init() */
++ uint8_t ver;
++ /** flags - bits 1-4 reserved for dessert, bits 5-8 for app usage */
++ uint8_t flags;
++ union {
++ /** reserved for app usage */
++ uint32_t u32;
++ struct __attribute__ ((__packed__)) {
++ /** ttl or hopcount field for app usage - 0xff if not used*/
++ uint8_t ttl;
++ /** reserved for app usage - 0x00 if not used */
++ uint8_t u8;
++ /** reserved for app usage - 0xbeef if not used */
++ uint16_t u16;
++ };
++ };
++ /** header length incl. extensions - in network byte order */
++ uint16_t hlen;
++ /** payload length - in network byte order */
++ uint16_t plen;
++} dessert_msg_t;
++
++/** local processing struct for dessert_msg_t */
++typedef struct dessert_msg_proc {
++ /** 16 bits for local processing flags */
++ uint16_t lflags;
++ /** 16 bits reserved */
++ uint16_t lreserved;
++ /** DESSERT_LBUF_LEN bytes buffer */
++ char lbuf[DESSERT_LBUF_LEN];
++} dessert_msg_proc_t;
++
++/** a extension record to add to a dessert_msg */
++typedef struct __attribute__ ((__packed__)) dessert_ext {
++ /** type of the extension
++ * user supplied types must be >= DESSERT_EXT_USER */
++ uint8_t type;
++
++ /** length of the extension in bytes
++ * including the 2 bytes of the extension
++ * header itself*/
++ uint8_t len;
++
++ /** pointer to the data - real length is len-2 bytes */
++ uint8_t data[DESSERT_MAXEXTDATALEN];
++} dessert_ext_t;
++
++/** an interface used for dessert_msg frames */
++typedef struct dessert_meshif {
++ /** pointer to next interface */
++ struct dessert_meshif *next;
++ /** pointer to next interface */
++ struct dessert_meshif *prev;
++ /** name of interface */
++ char if_name[IFNAMSIZ];
++ /** system ifindex */
++ unsigned int if_index;
++ /** hardware address of interface */
++ uint8_t hwaddr[ETHER_ADDR_LEN]; /* uthash key*/
++ /** counter mutex */
++ pthread_mutex_t cnt_mutex;
++ /** packet counter in */
++ uint64_t ipkts;
++ /** packet counter out */
++ uint64_t opkts;
++ /** packet counter in */
++ uint64_t ibytes;
++ /** packet counter out */
++ uint64_t obytes;
++ /** libpcap descriptor for the interface */
++ pcap_t *pcap;
++ /** libpcap error message buffer */
++ char pcap_err[PCAP_ERRBUF_SIZE];
++ /** pthread running the request loop */
++ pthread_t worker;
++} dessert_meshif_t;
++
++/** A tun/tap interface used to inject packets to dessert implemented daemons.
++ *
++ * \note Please make sure first fields are equal to dessert_meshif to re-use
++ * _dessert_meshif_gethwaddr().
++ *
++ */
++typedef struct dessert_sysif {
++ /** pointer to next interface */
++ struct dessert_sysif *next;
++ /** name of interface */
++ char if_name[IFNAMSIZ];
++ /** system ifindex */
++ unsigned int if_index;
++ /** hardware address of the interface */
++ uint8_t hwaddr[ETHER_ADDR_LEN];
++ /** counter mutex */
++ pthread_mutex_t cnt_mutex;
++ /** packet counter in */
++ uint64_t ipkts;
++ /** packet counter out */
++ uint64_t opkts;
++ /** packet counter in */
++ uint64_t ibytes;
++ /** packet counter out */
++ uint64_t obytes;
++ /** file descriptor to read/write from/to */
++ int fd;
++ /** if it is a tun or tap interface */
++ uint8_t flags;
++ /** pthread running the request loop */
++ pthread_t worker;
++} dessert_sysif_t;
++
++/** Callback type to call if a packed is received via a dessert mesh interface.
++ *
++ * @param *msg dessert_msg_t frame received
++ * @param len length of the buffer pointed to from dessert_msg_t
++ * @param *proc local processing buffer passed along the callback pipeline - may be NULL
++ * @param *iface interface received packet on - may be NULL
++ * @param id unique internal frame id of the packet
++ *
++ * @retval DESSERT_MSG_KEEP to continue processing the packet
++ * @retval DESSERT_MSG_DROP to drop it
++ * @retval DESSERT_MSG_NEEDMSGPROC to get a processing buffer
++ * @retval DESSERT_MSG_NEEDNOSPARSE to get a full packet buffer (e.g. needed to add extensions)
++ *
++ * \warning The callbacks are invoked with no locks hold by the thread,
++ * \warning YOU MUST make sure the thread holds no locks after the callback exits.
++ * \warning YOU MUST also make sure not to do anything blocking in a callback!
++ *
++ * If the callback exits with DESSERT_MSG_NEEDMSGPROC or DESSERT_MSG_NEEDNOSPARSE
++ * and the respective buffer is NULL or sparse, the callback is called again after
++ * providing the requested resource.
++ *
++ */
++typedef int dessert_meshrxcb_t(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
++
++/** Callback type to call if a packed should be injected into dessert via a tun/tap interface.
++ *
++ * @param *msg dessert msg received - original ethernet frame is encapsulated within
++ * @param len length of ethernet frame received
++ * @param *proc local processing buffer passed along the callback pipeline - may be NULL
++ * @param *sysif interface received packet on
++ * @param id unique internal frame id of the packet
++ *
++ * @retval DESSERT_MSG_KEEP to continue processing the packet
++ * @retval DESSERT_MSG_DROP to drop it
++ *
++ * \warning The callbacks are invoked with no locks hold by the thread,
++ * \warning YOU MUST make sure the thread holds no locks after the callback exits.
++ * \warning YOU MUST also make sure not to do anything blocking in a callback!
++ *
++*/
++typedef int dessert_sysrxcb_t(dessert_msg_t *msg, size_t len, dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id);
++
++/** callbacks type to call in a periodic task
++ *
++ * The callbacks are invoked with no locks hold by the thread,
++ * YOU MUST make sure the thread holds no locks after the callback exits.
++ * YOU MUST also make sure not to do anything blocking in a callback!
++ *
++ * @arg *data void pointer to pass to the callback
++ * @arg scheduled when this call was scheduled
++ * @arg interval how often this call should be scheduled
++ * ®return should be 0, otherwise the callback is unregistered
++ */
++typedef int dessert_periodiccallback_t(void *data, struct timeval *scheduled, struct timeval *interval);
++
++/** definition of a periodic tasklist entry */
++typedef struct dessert_periodic {
++ /** callback to call */
++ dessert_periodiccallback_t *c;
++ /** when to call next */
++ struct timeval scheduled;
++ /** call every */
++ struct timeval interval;
++ /** data pointer to pass to callback */
++ void *data;
++ /** internal pointer for task list */
++ struct dessert_periodic *next;
++} dessert_periodic_t;
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup core C O R E
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** type for local unique packet identification */
++#define DESSERT_FRAMEID_MAX ((uint64_t)-1)
++
++/** flag for dessert_init - daemonize when calling
++ * disables logging to STDERR */
++#define DESSERT_OPT_DAEMONIZE 0x0100
++
++/** flag for dessert_init - do not daemonize when calling */
++#define DESSERT_OPT_NODAEMONIZE 0x0200
++
++/** flag for dessert_init - create and write pid file */
++#define DESSERT_OPT_PID 0x0400
++
++/** flag for dessert_init - do not create and write pid file */
++#define DESSERT_OPT_NOPID 0x0800
++
++/******************************************************************************
++ * globals
++ ******************************************************************************/
++
++/** protocol string used in dessert_msg frames */
++extern char dessert_proto[DESSERT_PROTO_STRLEN+1];
++
++/** version int used in dessert_msg frames */
++extern u_int8_t dessert_ver;
++
++/** default src address used for local generated dessert_msg frames */
++extern u_int8_t dessert_l25_defsrc[ETHER_ADDR_LEN];
++
++
++/** constant holding ethernet broadcast address after dessert_init */
++extern u_char ether_broadcast[ETHER_ADDR_LEN];
++
++/** constant holding ethernet null address after dessert_init */
++extern u_char ether_null[ETHER_ADDR_LEN];
++
++/** the config funnel */
++extern pthread_rwlock_t dessert_cfglock;
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++int dessert_init(const char* proto, int version, uint16_t opts, char* pidfile);
++
++int dessert_run(void);
++void dessert_exit(void);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup cli C L I - C O M M A N D _ L I N E _ I N T E R F A C E
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * globals
++ ******************************************************************************/
++
++extern struct cli_def *dessert_cli;
++
++extern struct cli_command *dessert_cli_show;
++extern struct cli_command *dessert_cli_cfg_iface;
++extern struct cli_command *dessert_cli_cfg_no;
++extern struct cli_command *dessert_cli_cfg_no_iface;
++extern struct cli_command *dessert_cli_cfg_set;
++extern struct cli_command *dessert_cli_cfg_logging;
++extern struct cli_command *dessert_cli_cfg_no_logging;
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++int dessert_cli_run(int port);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup log L O G _ F A C I L I T Y
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** flag for dessert_logcfg - enable syslog logging */
++#define DESSERT_LOG_SYSLOG 0x0001
++
++/** flag for dessert_logcfg - disable syslog logging */
++#define DESSERT_LOG_NOSYSLOG 0x0002
++
++/** flag for dessert_logcfg - enable logfile logging
++ * @warning before using this you MUST use fopen(dessert_logfd, ...) to open the logfile */
++#define DESSERT_LOG_FILE 0x0004
++
++/** flag for dessert_logcfg - disable logfile logging */
++#define DESSERT_LOG_NOFILE 0x0008
++
++/** flag for dessert_logcfg - enable logging to stderr */
++#define DESSERT_LOG_STDERR 0x0010
++
++/** flag for dessert_logcfg - disable logging to stderr */
++#define DESSERT_LOG_NOSTDERR 0x0020
++
++/** flag for dessert_logcfg - enable logging to ringbuffer */
++#define DESSERT_LOG_RBUF 0x0040
++
++/** flag for dessert_logcfg - disable logging to ringbuffer */
++#define DESSERT_LOG_NORBUF 0x0080
++
++/** flag for dessert_logcfg - enable debug loglevel */
++#define DESSERT_LOG_DEBUG 0x0100
++
++/** flag for dessert_logcfg - disable debug loglevel */
++#define DESSERT_LOG_NODEBUG 0x0200
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++int dessert_logcfg(uint16_t opts);
++void _dessert_log(int level, const char* func, const char* file, int line, const char *fmt, ...);
++/** log at DEBUG level */
++#define dessert_debug(...) _dessert_log(LOG_DEBUG, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at INFO level */
++#define dessert_info(...) _dessert_log(LOG_INFO, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at NOTICE level */
++#define dessert_notice(...) _dessert_log(LOG_NOTICE, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at WARNING level */
++#define dessert_warn(...) _dessert_log(LOG_WARNING, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at WARNING level */
++#define dessert_warning(...) _dessert_log(LOG_WARNING, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at ERR level */
++#define dessert_err(...) _dessert_log(LOG_ERR, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at CRIT level */
++#define dessert_crit(...) _dessert_log(LOG_CRIT, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at ALERT level */
++#define dessert_alert(...) _dessert_log(LOG_ALERT, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at EMERG level */
++#define dessert_emerg(...) _dessert_log(LOG_EMERG, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup mesh M E S H - I N T E R F A C E S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** return code for dessert_meshrxcb_t - forces to copy the message and call again*/
++#define DESSERT_MSG_NEEDNOSPARSE 1
++
++/** return code for dessert_meshrxcb_t - forces to generate processing info and call again*/
++#define DESSERT_MSG_NEEDMSGPROC 2
++
++/** return code for dessert_meshrxcb_t and dessert_sysrxcb_t */
++#define DESSERT_MSG_KEEP 0
++
++/** return code for dessert_meshrxcb_t and dessert_sysrxcb_t */
++#define DESSERT_MSG_DROP -1
++
++/** flag for dessert_meshif_add - set interface in promiscuous-mode (default) */
++#define DESSERT_IF_PROMISC 0x0
++
++/** flag for dessert_meshif_add - do not set interface in promiscuous-mode */
++#define DESSERT_IF_NOPROMISC 0x1
++
++/** flag for dessert_meshif_add - filter out non-des-sert frames in libpcap (default) */
++#define DESSERT_IF_FILTER 0x0
++
++/** flag for dessert_meshif_add - do not filter out non-des-sert frames in libpcap */
++#define DESSERT_IF_NOFILTER 0x2
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++/* sending messages */
++int dessert_meshsend(const dessert_msg_t* msgin, const dessert_meshif_t *iface);
++int dessert_meshsend_allbutone(const dessert_msg_t* msgin, const dessert_meshif_t *iface);
++int dessert_meshsend_hwaddr(const dessert_msg_t* msgin, const uint8_t hwaddr[ETHER_ADDR_LEN]);
++int dessert_meshsend_randomized(const dessert_msg_t* msgin);
++
++int dessert_meshsend_fast(dessert_msg_t* msg, const dessert_meshif_t *iface);
++int dessert_meshsend_fast_allbutone(dessert_msg_t* msg, const dessert_meshif_t *iface);
++int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg, const uint8_t hwaddr[ETHER_ADDR_LEN]);
++int dessert_meshsend_fast_randomized(dessert_msg_t* msgin);
++int dessert_meshsend_raw(dessert_msg_t* msg, const dessert_meshif_t *iface);
++
++/* meshrx-callback handling */
++int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
++int dessert_meshrxcb_del(dessert_meshrxcb_t* c);
++
++/* mesh interface handling */
++int dessert_meshif_add(const char* dev, uint8_t flags);
++int dessert_meshif_del(const char* dev);
++
++dessert_meshif_t * dessert_meshif_get_name(const char* dev);
++dessert_meshif_t * dessert_meshif_get_hwaddr(const uint8_t hwaddr[ETHER_ADDR_LEN]);
++dessert_meshif_t * dessert_meshiflist_get(void);
++/*\}*/
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup sys S Y S - I N T E R F A C E S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** flag for dessert_sysif_init - open tun (ip/ipv6) device */
++#define DESSERT_TUN 0x00
++
++/** flag for dessert_sysif_init - open tap (ethernet) device */
++#define DESSERT_TAP 0x01
++
++/** flag for dessert_sysif_init - set dessert_l25_defsrc to mac of tap device */
++#define DESSERT_MAKE_DEFSRC 0x02
++
++/** flag for dessert_sysif_init - get mac for tap failed - try mac in src of first packet */
++#define _DESSERT_TAP_NOMAC 0x80
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++int dessert_sysif_init(char* name, uint8_t flags);
++
++int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
++int dessert_sysrxcb_del(dessert_sysrxcb_t* c);
++
++int dessert_syssend_msg(dessert_msg_t *msg);
++int dessert_syssend(const struct ether_header *eth, size_t len);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup msg M E S S A G E _ H A N D L I N G
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** flag for dessert_msg.flags - message len is hlen+plen
++ * if not set buffer len is assumed as DESSERT_MAXFRAMELEN + DESSERT_MSGPROCLEN */
++#define DESSERT_FLAG_SPARSE 0x1
++
++/* *********************** */
++
++/** flag for dessert_msg_proc.lflags - l25 src is one of our interfaces */
++#define DESSERT_LFLAG_SRC_SELF 0x0002
++
++/** flag for dessert_msg_proc.lflags - l25 dst is multicast address*/
++#define DESSERT_LFLAG_DST_MULTICAST 0x0004
++
++/** flag for dessert_msg_proc.lflags - l25 dst is one of our interfaces */
++#define DESSERT_LFLAG_DST_SELF 0x0008
++
++/** flag for dessert_msg_proc.lflags - l25 dst is broadcast */
++#define DESSERT_LFLAG_DST_BROADCAST 0x0010
++
++/** flag for dessert_msg_proc.lflags - l2 src is one of our interfaces */
++#define DESSERT_LFLAG_PREVHOP_SELF 0x0020
++
++/** flag for dessert_msg_proc.lflags - l2 dst is one of our interfaces */
++#define DESSERT_LFLAG_NEXTHOP_SELF 0x0040
++
++/** flag for dessert_msg_proc.lflags - l2 dst is broadcast */
++#define DESSERT_LFLAG_NEXTHOP_BROADCAST 0x0080
++
++/** flag for dessert_msg_proc.lflags - l25 dst is one of our interfaces,
++ * but we received the message not via the indented interface, e.g. we
++ * overheard it */
++#define DESSERT_LFLAG_DST_SELF_OVERHEARD 0x0100
++
++/** flag for dessert_msg_proc.lflags - l2 dst is one of our interfaces,
++ * but we received the message not via the indented interface, e.g. we
++ * overheard it */
++#define DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD 0x0200
++
++/* *********************** */
++
++/** length of dessert_ext header */
++#define DESSERT_EXTLEN (sizeof(struct dessert_ext) - DESSERT_MAXEXTDATALEN)
++
++/** dessert_ext type wildcard - any extension */
++#define DESSERT_EXT_ANY 0x00
++
++/** dessert_ext type for ethernet header */
++#define DESSERT_EXT_ETH 0x01
++
++/** dessert_ext type for packet tracing */
++#define DESSERT_EXT_TRACE 0x02
++
++/** first dessert_ext type for usage by the user */
++#define DESSERT_EXT_USER 0x40
++
++/* *********************** */
++
++/** packet tracing flag - only record hosts */
++#define DESSERT_MSG_TRACE_HOST (ETHER_ADDR_LEN)
++
++/** packet tracing flag - record interfaces */
++#define DESSERT_MSG_TRACE_IFACE (3*ETHER_ADDR_LEN)
++
++/* *********************** */
++
++/** Returns the length of a given extension. */
++#define dessert_ext_getdatalen(ext) (ext->len - DESSERT_EXTLEN)
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++int dessert_msg_new(dessert_msg_t **msgout);
++int dessert_msg_clone(dessert_msg_t **msgnew, const dessert_msg_t *msgold, uint8_t sparse);
++int dessert_msg_check(const dessert_msg_t* msg, size_t len);
++void dessert_msg_dump(const dessert_msg_t* msg, size_t len, char *buf, size_t blen);
++void dessert_msg_destroy(dessert_msg_t* msg);
++
++int dessert_msg_ethencap(const struct ether_header* eth, size_t eth_len, dessert_msg_t **msgout);
++int dessert_msg_ethdecap(const dessert_msg_t* msg, struct ether_header** ethout);
++struct ether_header* dessert_msg_getl25ether (const dessert_msg_t* msg);
++
++int dessert_msg_proc_clone(dessert_msg_proc_t **procnew, const dessert_msg_proc_t *procold);
++void dessert_msg_proc_dump(const dessert_msg_t* msg, size_t len, const dessert_msg_proc_t *proc, char *buf, size_t blen);
++void dessert_msg_proc_destroy(dessert_msg_proc_t* proc);
++
++int dessert_msg_addpayload(dessert_msg_t* msg, void** payload, int len);
++int dessert_msg_getpayload(dessert_msg_t *msg, void **payload);
++int dessert_msg_addext(dessert_msg_t* msg, dessert_ext_t** ext, uint8_t type, size_t len);
++int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
++int dessert_msg_resizeext(dessert_msg_t *msg, dessert_ext_t *ext, size_t new_len);
++int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext, uint8_t type, int index);
++int dessert_msg_get_ext_count(const dessert_msg_t* msg, uint8_t type);
++
++int dessert_msg_trace_initiate(dessert_msg_t* msg, int mode);
++int dessert_msg_trace_dump(const dessert_msg_t* msg, char* buf, int blen);
++
++int dessert_msg_dump_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
++int dessert_msg_check_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
++int dessert_msg_trace_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
++int dessert_msg_ifaceflags_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *riface, dessert_frameid_t id);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup periodic P E R I O D I C _ T A S K S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++dessert_periodic_t *dessert_periodic_add(dessert_periodiccallback_t* c, void *data, const struct timeval *scheduled, const struct timeval *interval);
++dessert_periodic_t *dessert_periodic_add_delayed(dessert_periodiccallback_t* c, void *data, int delay);
++int dessert_periodic_del(dessert_periodic_t *p);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup agentx NET - S N M P // A G E N T _ X
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++/** Flag indicating the dessert_agentx_appstats_t is of type bool. */
++#define DESSERT_APPSTATS_VALUETYPE_BOOL 0
++
++/** Flag indicating the dessert_agentx_appstats_t is of type int32. */
++#define DESSERT_APPSTATS_VALUETYPE_INT32 1
++
++/** Flag indicating the dessert_agentx_appstats_t is of type uint32. */
++#define DESSERT_APPSTATS_VALUETYPE_UINT32 2
++
++/** Flag indicating the dessert_agentx_appstats_t is of type counter64. */
++#define DESSERT_APPSTATS_VALUETYPE_COUNTER64 3
++
++/** Flag indicating the dessert_agentx_appstats_t is of type octetstring. */
++#define DESSERT_APPSTATS_VALUETYPE_OCTETSTRING 4
++
++/* *********************** */
++
++/** Flag indicating the dessert_agentx_appstats_t does not contain information regarding a node or a link. */
++#define DESSERT_APPSTATS_NODEORLINK_NONE 0
++
++/** Flag indicating the dessert_agentx_appstats_t contains information regarding a node. */
++#define DESSERT_APPSTATS_NODEORLINK_NODE 1
++
++/** Flag indicating the dessert_agentx_appstats_t contains information regarding a link. */
++#define DESSERT_APPSTATS_NODEORLINK_LINK 2
++
++/* *********************** */
++
++/** What is considered to be TRUE in a dessert_agentx_appstats_t. */
++#define DESSERT_APPSTATS_BOOL_TRUE 1
++
++/** What is considered to be FALSE in a dessert_agentx_appstats_t. */
++#define DESSERT_APPSTATS_BOOL_FALSE 0
++
++/* *********************** */
++
++/** Flag indicating the dessert_agentx_appparams_t is of type bool. */
++#define DESSERT_APPPARAMS_VALUETYPE_BOOL 0
++
++/** Flag indicating the dessert_agentx_appparams_t is of type int32. */
++#define DESSERT_APPPARAMS_VALUETYPE_INT32 1
++
++/** Flag indicating the dessert_agentx_appparams_t is of type uint32. */
++#define DESSERT_APPPARAMS_VALUETYPE_UINT32 2
++
++/** Flag indicating the dessert_agentx_appparams_t is of type octetstring. */
++#define DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING 3
++
++/* *********************** */
++
++/** What is considered to be TRUE in a dessert_agentx_appparams_t. */
++#define DESSERT_APPPARAMS_BOOL_TRUE 1
++
++/** What is considered to be FALSE in a dessert_agentx_appparams_t. */
++#define DESSERT_APPPARAMS_BOOL_FALSE 0
++
++/* *********************** */
++
++/** Flag indicating if a appstats callback entry is of type bulk. */
++#define DESSERT_APPSTATS_CB_BULK 1
++/** Flag indicating if a appstats callback entry is of type nobulk. */
++#define DESSERT_APPSTATS_CB_NOBULK 2
++
++/******************************************************************************
++ * typedefs
++ ******************************************************************************/
++
++/** An abstract data type representing some statistical datum.*/
++typedef struct dessert_agentx_appstats {
++
++ /** A prev pointer. @internal */
++ struct dessert_agentx_appstats *prev;
++ /** A next pointer. @internal */
++ struct dessert_agentx_appstats *next;
++
++ /** The name of the datum. */
++ char name[256];
++ /** A description of the datum*/
++ char desc[256];
++
++ /** The type of the datum.
++ *
++ * @see For valid values please refer to: \n DESSERT_APPSTATS_VALUETYPE_BOOL
++ * @see DESSERT_APPSTATS_VALUETYPE_INT32
++ * @see DESSERT_APPSTATS_VALUETYPE_UINT32
++ * @see DESSERT_APPSTATS_VALUETYPE_COUNTER64
++ * @see DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
++ */
++ int value_type;
++ /** Indicates if this datum contains information about a node or a link
++ *
++ * @see For valid values please refer to: \n DESSERT_APPSTATS_NODEORLINK_NONE
++ * @see DESSERT_APPSTATS_NODEORLINK_NODE
++ * @see DESSERT_APPSTATS_NODEORLINK_LINK
++ */
++ int node_or_link;
++
++ /** Field representing a mac address if this datum contains information about a node or a link. */
++ uint8_t macaddress1 [ETHER_ADDR_LEN];
++ /** Field representing a mac address if this datum contains information about a link. */
++ uint8_t macaddress2 [ETHER_ADDR_LEN];
++
++ union {
++ /** A boolean.
++ *
++ * @see For valid values please refer to: \n DESSERT_APPSTATS_BOOL_TRUE
++ * @see DESSERT_APPSTATS_BOOL_FALSE
++ */
++ uint8_t bool;
++ /** A 32bit signed integer. */
++ int32_t int32;
++ /** A 32bit unsigned integer. */
++ uint32_t uint32;
++ /** A 64bit unsigned integer with counter semantics */
++ uint64_t counter64;
++
++ struct {
++ /** The length of the octetstring field. */
++ uint8_t octetstring_len;
++ /** Character pointer to some raw bytes. */
++ char *octetstring;
++ };
++ };
++
++} dessert_agentx_appstats_t;
++
++/** An abstract data type representing some parameter.*/
++typedef struct dessert_agentx_appparams {
++
++ /** Internal. @internal */
++ struct dessert_agentx_appparams *prev;
++ /** Internal. @internal */
++ struct dessert_agentx_appparams *next;
++
++ /** Internal. @internal Internal. */
++ uint8_t index;
++
++ /** The name of the datum. */
++ char name[256];
++ /** A description of the datum*/
++ char desc[256];
++
++ /** The type of the parameter.
++ *
++ * @see For valid values please refer to: \n DESSERT_APPPARAMS_VALUETYPE_BOOL
++ * @see DESSERT_APPPARAMS_VALUETYPE_INT32
++ * @see DESSERT_APPPARAMS_VALUETYPE_UINT32
++ * @see DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
++ */
++ int value_type;
++
++ union {
++ /** A boolean.
++ *
++ * @see For valid values please refer to: \n DESSERT_APPPARAMS_BOOL_TRUE
++ * @see DESSERT_APPPARAMS_BOOL_FALSE
++ */
++ uint8_t bool;
++ /** A 32bit signed integer. */
++ int32_t int32;
++ /** A 32bit unsigned integer. */
++ uint32_t uint32;
++
++ struct {
++ /** The length of the octetstring field. */
++ uint16_t octetstring_len;
++ /** Character pointer to some raw bytes. */
++ char *octetstring;
++ };
++ };
++
++} dessert_agentx_appparams_t;
++
++/** Callback type to call if the AppstatsTable is asked for by some snmp client.
++ *
++ * @param *appstats dessert_agentx_appstats_t the statistical datum to be filled out
++ *
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR to remove the corresponding callback entry
++ *
++ */
++typedef int dessert_agentx_appstatscb_get_t(struct dessert_agentx_appstats *appstats);
++
++/** Callback type to call if the AppparamsTable is asked for by some snmp client.
++ *
++ * @param *appstats dessert_agentx_appparams_t the parameter to be filled out
++ *
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR to remove the corresponding callback entry
++ *
++ */
++typedef int dessert_agentx_appparamscb_get_t(struct dessert_agentx_appparams *appparams);
++
++/** Callback type to call if the specific row represented by this callback is
++ * going to be set by some snmp client.
++ *
++ * @param *appstats dessert_agentx_appparams_t the new value
++ *
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR otherwise
++ *
++ */
++typedef int dessert_agentx_appparamscb_set_t(struct dessert_agentx_appparams *appparams);
++
++/** A callback entry representing a statistical datum. */
++typedef struct dessert_agentx_appstats_cb_entry {
++
++ /** Interal. @internal */
++ struct dessert_agentx_appstats_cb_entry *prev;
++ /** Interal. @internal */
++ struct dessert_agentx_appstats_cb_entry *next;
++
++ /** Flag indicating whether this entry represents a bulk entry.*/
++ uint8_t isbulk_flag;
++
++ /** The getter callback. */
++ dessert_agentx_appstatscb_get_t *c;
++
++} dessert_agentx_appstats_cb_entry_t;
++
++/** A callback entry representing a parameter. */
++typedef struct dessert_agentx_appparams_cb_entry {
++
++ /** Internal. @internal */
++ struct dessert_agentx_appparams_cb_entry *prev;
++ /** Internal. @internal*/
++ struct dessert_agentx_appparams_cb_entry *next;
++
++ /** Internal. @internal */
++ uint8_t index;
++
++ /** The getter callback. */
++ dessert_agentx_appparamscb_get_t *get;
++ /** The setter callback. */
++ dessert_agentx_appparamscb_set_t *set;
++
++} dessert_agentx_appparams_cb_entry_t;
++
++
++/******************************************************************************
++ * globals
++ ******************************************************************************/
++
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++dessert_agentx_appstats_t *dessert_agentx_appstats_new(void);
++void dessert_agentx_appstats_destroy(dessert_agentx_appstats_t *appstat);
++
++dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add(dessert_agentx_appstatscb_get_t *c);
++dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add_bulk(dessert_agentx_appstatscb_get_t *c);
++int dessert_agentx_appstats_del(dessert_agentx_appstats_cb_entry_t *e);
++
++dessert_agentx_appparams_t *dessert_agentx_appparam_new(void);
++void dessert_agentx_appparam_destroy(dessert_agentx_appparams_t *appparam);
++
++dessert_agentx_appparams_cb_entry_t *dessert_agentx_appparams_add(dessert_agentx_appparamscb_get_t *get, dessert_agentx_appparamscb_set_t *set);
++int dessert_agentx_appparams_del(dessert_agentx_appparams_cb_entry_t *e);
++
++/**************************************************************************//**
++ * @}
++ *
++ * @defgroup macros U S E F U L L _ MA C R O S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/** A convenience macro to safely iterate the list of mesh interfaces.
++ *
++ * @param __interface pointer to a temporal dessert_meshif_t
++ *
++ * @warning You must pair it with an ending MESHIFLIST_ITERATOR_STOP() macro!
++ * Please find an usage example in the Examples paragraph below.
++ *
++ * @par Examples:
++ *
++ * @li The do_something() function will be called for every mesh interface in the list.
++ * @code
++ * dessert_meshif_t *iface;
++ *
++ * MESHIFLIST_ITERATOR_START(iface)
++ * do_something(iface); // do something to every iface
++ * MESHIFLIST_ITERATOR_STOP;
++ * @endcode
++ */
++#define MESHIFLIST_ITERATOR_START(__interface) \
++pthread_rwlock_rdlock(&dessert_cfglock); \
++DL_FOREACH(dessert_meshiflist_get(), __interface) {
++
++/** A convenience macro to safely iterate the list of mesh interfaces.
++ *
++ * @see MESHIFLIST_ITERATOR_START()
++ */
++#define MESHIFLIST_ITERATOR_STOP } pthread_rwlock_unlock(&dessert_cfglock)
++
++/** A convenience macro to safely add @a __sec seconds and @a __usec microseconds
++ * to the @c struct @c timeval @a __tv in an <em>invariant respecting</em> manner.
++ *
++ * @param __tv the @c struct @c timeval to add to
++ * @param __sec the number of seconds to add up to @a __tv->tv_sec
++ * @param __usec the number of microseconds to add up to @a __tv.->tv_usec
++ *
++ * %DESCRIPTION: \n
++ * The <a href="http://www.gnu.org/s/libc/manual/html_node/Elapsed-Time.html#Elapsed-Time">GNU C Library Documentation</a>
++ * states about the @c tv_usec member of the @c struct @c timeval: <em>This is the
++ * rest of the elapsed time (a fraction of a second), represented as the number
++ * of microseconds. It is always less than one @a million.</em>
++ *
++ */
++#define TIMEVAL_ADD(__tv, __sec, __usec) \
++ do { \
++ (__tv)->tv_sec += __sec; \
++ (__tv)->tv_usec += __usec; \
++ if((__tv)->tv_usec >= 1000000) { \
++ ++(__tv)->tv_sec; \
++ (__tv)->tv_usec -= 1000000; \
++ } \
++ } while(0)
++
++#define likely(x) (__builtin_expect((x),1))
++#define unlikely(x) (__builtin_expect((x),0))
++
++#define __dessert_assert(func, file, line, e) \
++ ((void)_dessert_log(LOG_EMERG, func, file, line, "assertion `%s' failed!\n", e), abort)
++
++#ifdef NDEBUG
++#define assert(e) ((void)0)
++#else
++#define assert(e) \
++ (__builtin_expect(!(e), 0) ? __dessert_assert(__FUNCTION__, __FILE__, __LINE__, #e) : (void)0)
++#endif
++
++/** @} */
++
++/******************************************************************************
++ *
++ * ! ! ! ! O L D ! ! ! T O D O ! ! ! !
++ *
++ ******************************************************************************/
++
++/** the config-flag variable */
++//extern uint16_t dessert_cfgflags; // TODO not used! to be removed??!?
++
++/** size of a dessert_msg buffer */
++//#define dessert_msg_buflen(x) ((x->flags&DESSERT_FLAG_SPARSE)?(x->hlen+x->plen):(DESSERT_MAXFRAMELEN+DESSERT_MSGPROCLEN))
++
++//#define dessert_frameid_overflow(x, y) ((x>y)&&((x-y)>(DESSERT_FRAMEID_MAX/2)))
++
++
++#endif /* DESSERT_H*/
+Index: libdessert0.86-0.86.14/include/dessert/utlist.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/include/dessert/utlist.h 2009-12-09 16:38:27.246011666 +0100
+@@ -0,0 +1,349 @@
++/*
++Copyright (c) 2007-2009, Troy D. Hanson
++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.
++
++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 COPYRIGHT OWNER
++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.
++*/
++
++#ifndef UTLIST_H
++#define UTLIST_H
++
++#define UTLIST_VERSION 1.8
++
++/*
++ * This file contains macros to manipulate singly and doubly-linked lists.
++ *
++ * 1. LL_ macros: singly-linked lists.
++ * 2. DL_ macros: doubly-linked lists.
++ * 3. CDL_ macros: circular doubly-linked lists.
++ *
++ * To use singly-linked lists, your structure must have a "next" pointer.
++ * To use doubly-linked lists, your structure must "prev" and "next" pointers.
++ * Either way, the pointer to the head of the list must be initialized to NULL.
++ *
++ * ----------------.EXAMPLE -------------------------
++ * struct item {
++ * int id;
++ * struct item *prev, *next;
++ * }
++ *
++ * struct item *list = NULL:
++ *
++ * int main() {
++ * struct item *item;
++ * ... allocate and populate item ...
++ * DL_APPEND(list, item);
++ * }
++ * --------------------------------------------------
++ *
++ * For doubly-linked lists, the append and delete macros are O(1)
++ * For singly-linked lists, append and delete are O(n) but prepend is O(1)
++ * The sort macro is O(n log(n)) for all types of single/double/circular lists.
++ */
++
++/******************************************************************************
++ * The sort macro is an adaptation of Simon Tatham's O(n log(n)) mergesort *
++ * Unwieldy variable names used here to avoid shadowing passed-in variables. *
++ *****************************************************************************/
++#define LL_SORT(list, cmp) \
++do { \
++ __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
++ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
++ if (list) { \
++ _ls_insize = 1; \
++ _ls_looping = 1; \
++ while (_ls_looping) { \
++ _ls_p = list; \
++ _ls_oldhead = list; \
++ list = NULL; \
++ _ls_tail = NULL; \
++ _ls_nmerges = 0; \
++ while (_ls_p) { \
++ _ls_nmerges++; \
++ _ls_q = _ls_p; \
++ _ls_psize = 0; \
++ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
++ _ls_psize++; \
++ _ls_q = _ls_q->next; \
++ if (!_ls_q) break; \
++ } \
++ _ls_qsize = _ls_insize; \
++ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
++ if (_ls_psize == 0) { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ } else if (_ls_qsize == 0 || !_ls_q) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ } else if (cmp(_ls_p,_ls_q) <= 0) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ } else { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ } \
++ if (_ls_tail) { \
++ _ls_tail->next = _ls_e; \
++ } else { \
++ list = _ls_e; \
++ } \
++ _ls_tail = _ls_e; \
++ } \
++ _ls_p = _ls_q; \
++ } \
++ _ls_tail->next = NULL; \
++ if (_ls_nmerges <= 1) { \
++ _ls_looping=0; \
++ } \
++ _ls_insize *= 2; \
++ } \
++ } \
++} while (0)
++
++#define DL_SORT(list, cmp) \
++do { \
++ __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
++ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
++ if (list) { \
++ _ls_insize = 1; \
++ _ls_looping = 1; \
++ while (_ls_looping) { \
++ _ls_p = list; \
++ _ls_oldhead = list; \
++ list = NULL; \
++ _ls_tail = NULL; \
++ _ls_nmerges = 0; \
++ while (_ls_p) { \
++ _ls_nmerges++; \
++ _ls_q = _ls_p; \
++ _ls_psize = 0; \
++ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
++ _ls_psize++; \
++ _ls_q = _ls_q->next; \
++ if (!_ls_q) break; \
++ } \
++ _ls_qsize = _ls_insize; \
++ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
++ if (_ls_psize == 0) { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ } else if (_ls_qsize == 0 || !_ls_q) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ } else if (cmp(_ls_p,_ls_q) <= 0) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ } else { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ } \
++ if (_ls_tail) { \
++ _ls_tail->next = _ls_e; \
++ } else { \
++ list = _ls_e; \
++ } \
++ _ls_e->prev = _ls_tail; \
++ _ls_tail = _ls_e; \
++ } \
++ _ls_p = _ls_q; \
++ } \
++ list->prev = _ls_tail; \
++ _ls_tail->next = NULL; \
++ if (_ls_nmerges <= 1) { \
++ _ls_looping=0; \
++ } \
++ _ls_insize *= 2; \
++ } \
++ } \
++} while (0)
++
++#define CDL_SORT(list, cmp) \
++do { \
++ __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
++ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
++ if (list) { \
++ _ls_insize = 1; \
++ _ls_looping = 1; \
++ while (_ls_looping) { \
++ _ls_p = list; \
++ _ls_oldhead = list; \
++ list = NULL; \
++ _ls_tail = NULL; \
++ _ls_nmerges = 0; \
++ while (_ls_p) { \
++ _ls_nmerges++; \
++ _ls_q = _ls_p; \
++ _ls_psize = 0; \
++ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
++ _ls_psize++; \
++ _ls_q = ((_ls_q->next == _ls_oldhead) ? NULL : _ls_q->next); \
++ if (!_ls_q) break; \
++ } \
++ _ls_qsize = _ls_insize; \
++ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
++ if (_ls_psize == 0) { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
++ } else if (_ls_qsize == 0 || !_ls_q) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
++ } else if (cmp(_ls_p,_ls_q) <= 0) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
++ } else { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
++ } \
++ if (_ls_tail) { \
++ _ls_tail->next = _ls_e; \
++ } else { \
++ list = _ls_e; \
++ } \
++ _ls_e->prev = _ls_tail; \
++ _ls_tail = _ls_e; \
++ } \
++ _ls_p = _ls_q; \
++ } \
++ list->prev = _ls_tail; \
++ _ls_tail->next = list; \
++ if (_ls_nmerges <= 1) { \
++ _ls_looping=0; \
++ } \
++ _ls_insize *= 2; \
++ } \
++ } \
++} while (0)
++
++/******************************************************************************
++ * singly linked list macros (non-circular) *
++ *****************************************************************************/
++#define LL_PREPEND(head,add) \
++do { \
++ (add)->next = head; \
++ head = add; \
++} while (0)
++
++#define LL_APPEND(head,add) \
++do { \
++ __typeof__(head) _tmp; \
++ (add)->next=NULL; \
++ if (head) { \
++ _tmp = head; \
++ while (_tmp->next) { _tmp = _tmp->next; } \
++ _tmp->next=(add); \
++ } else { \
++ (head)=(add); \
++ } \
++} while (0)
++
++#define LL_DELETE(head,del) \
++do { \
++ __typeof__(head) _tmp; \
++ if ((head) == (del)) { \
++ (head)=(head)->next; \
++ } else { \
++ _tmp = head; \
++ while (_tmp->next && (_tmp->next != (del))) { \
++ _tmp = _tmp->next; \
++ } \
++ if (_tmp->next) { \
++ _tmp->next = ((del)->next); \
++ } \
++ } \
++} while (0)
++
++#define LL_FOREACH(head,el) \
++ for(el=head;el;el=el->next)
++
++/******************************************************************************
++ * doubly linked list macros (non-circular) *
++ *****************************************************************************/
++#define DL_PREPEND(head,add) \
++do { \
++ (add)->next = head; \
++ if (head) { \
++ (add)->prev = (head)->prev; \
++ (head)->prev = (add); \
++ } else { \
++ (add)->prev = (add); \
++ } \
++ (head) = (add); \
++} while (0)
++
++#define DL_APPEND(head,add) \
++do { \
++ if (head) { \
++ (add)->prev = (head)->prev; \
++ (head)->prev->next = (add); \
++ (head)->prev = (add); \
++ (add)->next = NULL; \
++ } else { \
++ (head)=(add); \
++ (head)->prev = (head); \
++ (head)->next = NULL; \
++ } \
++} while (0);
++
++#define DL_DELETE(head,del) \
++do { \
++ if ((del)->prev == (del)) { \
++ (head)=NULL; \
++ } else if ((del)==(head)) { \
++ (del)->next->prev = (del)->prev; \
++ (head) = (del)->next; \
++ } else { \
++ (del)->prev->next = (del)->next; \
++ if ((del)->next) { \
++ (del)->next->prev = (del)->prev; \
++ } else { \
++ (head)->prev = (del)->prev; \
++ } \
++ } \
++} while (0);
++
++
++#define DL_FOREACH(head,el) \
++ for(el=head;el;el=el->next)
++
++/******************************************************************************
++ * circular doubly linked list macros *
++ *****************************************************************************/
++#define CDL_PREPEND(head,add) \
++do { \
++ if (head) { \
++ (add)->prev = (head)->prev; \
++ (add)->next = (head); \
++ (head)->prev = (add); \
++ (add)->prev->next = (add); \
++ } else { \
++ (add)->prev = (add); \
++ (add)->next = (add); \
++ } \
++(head)=(add); \
++} while (0)
++
++#define CDL_DELETE(head,del) \
++do { \
++ if ( ((head)==(del)) && ((head)->next == (head))) { \
++ (head) = 0L; \
++ } else { \
++ (del)->next->prev = (del)->prev; \
++ (del)->prev->next = (del)->next; \
++ if ((del) == (head)) (head)=(del)->next; \
++ } \
++} while (0);
++
++#define CDL_FOREACH(head,el) \
++ for(el=head;el;el= (el->next==head ? 0L : el->next))
++
++
++#endif /* UTLIST_H */
++
+Index: libdessert0.86-0.86.14/install-sh
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/install-sh 2009-12-09 16:38:27.246011666 +0100
+@@ -0,0 +1,520 @@
++#!/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:
+Index: libdessert0.86-0.86.14/libdessert.pc.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/libdessert.pc.in 2009-12-09 16:38:27.246011666 +0100
+@@ -0,0 +1,11 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: @PACKAGE_NAME@
++Description: DES-SERT - an Extensible Routing-Framework for Testbeds
++Version: @VERSION@
++Libs: @PTHREAD_LIBS@ -L${libdir} -ldessert
++Cflags: @PTHREAD_CFLAGS@ -I${includedir}
++
+Index: libdessert0.86-0.86.14/ltmain.sh
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/ltmain.sh 2009-12-09 16:38:27.254756172 +0100
+@@ -0,0 +1,8413 @@
++# Generated from ltmain.m4sh.
++
++# ltmain.sh (GNU libtool) 2.2.6
++# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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.6 Debian-2.2.6a-4
++# automake: $automake_version
++# autoconf: $autoconf_version
++#
++# Report bugs to <bug-libtool@gnu.org>.
++
++PROGRAM=ltmain.sh
++PACKAGE=libtool
++VERSION="2.2.6 Debian-2.2.6a-4"
++TIMESTAMP=""
++package_revision=1.3012
++
++# 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 <<EOF
++$*
++EOF
++ exit $EXIT_SUCCESS
++fi
++
++magic="%%%MAGIC variable%%%"
++magic_exe="%%%MAGIC EXE variable%%%"
++
++# Global variables.
++# $mode is unset
++nonopt=
++execute_dlfiles=
++preserve_args=
++lo2o="s/\\.lo\$/.${objext}/"
++o2lo="s/\\.${objext}\$/.lo/"
++extracted_archives=
++extracted_serial=0
++
++opt_dry_run=false
++opt_duplicate_deps=false
++opt_silent=false
++opt_debug=:
++
++# If this variable is set in any of the actions, the command in it
++# will be execed at the end. This prevents here-documents from being
++# left over by shells.
++exec_cmd=
++
++# func_fatal_configuration arg...
++# Echo program name prefixed message to standard error, followed by
++# a configuration failure hint, and exit.
++func_fatal_configuration ()
++{
++ func_error ${1+"$@"}
++ func_error "See the $PACKAGE documentation for more information."
++ func_fatal_error "Fatal configuration error."
++}
++
++
++# func_config
++# Display the configuration for all the tags in this script.
++func_config ()
++{
++ re_begincf='^# ### BEGIN LIBTOOL'
++ re_endcf='^# ### END LIBTOOL'
++
++ # Default configuration.
++ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
++
++ # Now print the configurations for the tags.
++ for tagname in $taglist; do
++ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
++ done
++
++ exit $?
++}
++
++# func_features
++# Display the features supported by this script.
++func_features ()
++{
++ $ECHO "host: $host"
++ if test "$build_libtool_libs" = yes; then
++ $ECHO "enable shared libraries"
++ else
++ $ECHO "disable shared libraries"
++ fi
++ if test "$build_old_libs" = yes; then
++ $ECHO "enable static libraries"
++ else
++ $ECHO "disable static libraries"
++ fi
++
++ exit $?
++}
++
++# func_enable_tag tagname
++# Verify that TAGNAME is valid, and either flag an error and exit, or
++# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
++# variable here.
++func_enable_tag ()
++{
++ # Global variable:
++ tagname="$1"
++
++ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
++ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
++ sed_extractcf="/$re_begincf/,/$re_endcf/p"
++
++ # Validate tagname.
++ case $tagname in
++ *[!-_A-Za-z0-9,/]*)
++ func_fatal_error "invalid tag name: $tagname"
++ ;;
++ esac
++
++ # Don't test for the "default" C tag, as we know it's
++ # there but not specially marked.
++ case $tagname in
++ CC) ;;
++ *)
++ if $GREP "$re_begincf" "$progpath" >/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 <<EOF
++# $write_libobj - a libtool object file
++# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
++#
++# Please DO NOT delete this file!
++# It is necessary for linking the library.
++
++# Name of the PIC object.
++pic_object=$write_lobj
++
++# Name of the non-PIC object
++non_pic_object=$write_oldobj
++
++EOF
++ $MV "${write_libobj}T" "${write_libobj}"
++ }
++}
++
++# func_mode_compile arg...
++func_mode_compile ()
++{
++ $opt_debug
++ # Get the compilation command and the source file.
++ base_compile=
++ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
++ suppress_opt=yes
++ suppress_output=
++ arg_mode=normal
++ libobj=
++ later=
++ pie_flag=
++
++ for arg
++ do
++ case $arg_mode in
++ arg )
++ # do not "continue". Instead, add this to base_compile
++ lastarg="$arg"
++ arg_mode=normal
++ ;;
++
++ target )
++ libobj="$arg"
++ arg_mode=normal
++ continue
++ ;;
++
++ normal )
++ # Accept any command-line options.
++ case $arg in
++ -o)
++ test -n "$libobj" && \
++ func_fatal_error "you cannot specify \`-o' more than once"
++ arg_mode=target
++ continue
++ ;;
++
++ -pie | -fpie | -fPIE)
++ pie_flag="$pie_flag $arg"
++ continue
++ ;;
++
++ -shared | -static | -prefer-pic | -prefer-non-pic)
++ later="$later $arg"
++ continue
++ ;;
++
++ -no-suppress)
++ suppress_opt=no
++ continue
++ ;;
++
++ -Xcompiler)
++ arg_mode=arg # the next one goes into the "base_compile" arg list
++ continue # The current "srcfile" will either be retained or
++ ;; # replaced later. I would guess that would be a bug.
++
++ -Wc,*)
++ func_stripname '-Wc,' '' "$arg"
++ args=$func_stripname_result
++ lastarg=
++ save_ifs="$IFS"; IFS=','
++ for arg in $args; do
++ IFS="$save_ifs"
++ func_quote_for_eval "$arg"
++ lastarg="$lastarg $func_quote_for_eval_result"
++ done
++ IFS="$save_ifs"
++ func_stripname ' ' '' "$lastarg"
++ lastarg=$func_stripname_result
++
++ # Add the arguments to base_compile.
++ base_compile="$base_compile $lastarg"
++ continue
++ ;;
++
++ *)
++ # Accept the current argument as the source file.
++ # The previous "srcfile" becomes the current argument.
++ #
++ lastarg="$srcfile"
++ srcfile="$arg"
++ ;;
++ esac # case $arg
++ ;;
++ esac # case $arg_mode
++
++ # Aesthetically quote the previous argument.
++ func_quote_for_eval "$lastarg"
++ base_compile="$base_compile $func_quote_for_eval_result"
++ done # for arg
++
++ case $arg_mode in
++ arg)
++ func_fatal_error "you must specify an argument for -Xcompile"
++ ;;
++ target)
++ func_fatal_error "you must specify a target with \`-o'"
++ ;;
++ *)
++ # Get the name of the library object.
++ test -z "$libobj" && {
++ func_basename "$srcfile"
++ libobj="$func_basename_result"
++ }
++ ;;
++ esac
++
++ # Recognize several different file suffixes.
++ # If the user specifies -o file.o, it is replaced with file.lo
++ case $libobj in
++ *.[cCFSifmso] | \
++ *.ada | *.adb | *.ads | *.asm | \
++ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
++ *.[fF][09]? | *.for | *.java | *.obj | *.sx)
++ func_xform "$libobj"
++ libobj=$func_xform_result
++ ;;
++ esac
++
++ case $libobj in
++ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
++ *)
++ func_fatal_error "cannot determine name of library object from \`$libobj'"
++ ;;
++ esac
++
++ func_infer_tag $base_compile
++
++ for arg in $later; do
++ case $arg in
++ -shared)
++ test "$build_libtool_libs" != yes && \
++ func_fatal_configuration "can not build a shared library"
++ build_old_libs=no
++ continue
++ ;;
++
++ -static)
++ build_libtool_libs=no
++ build_old_libs=yes
++ continue
++ ;;
++
++ -prefer-pic)
++ pic_mode=yes
++ continue
++ ;;
++
++ -prefer-non-pic)
++ pic_mode=no
++ continue
++ ;;
++ esac
++ done
++
++ func_quote_for_eval "$libobj"
++ test "X$libobj" != "X$func_quote_for_eval_result" \
++ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
++ && 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 >/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 <<EOF
++
++/* $cwrappersource - temporary wrapper executable 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 executable should never be moved out of the build directory.
++ If it is, it will not operate correctly.
++
++ Currently, it simply execs the wrapper *script* "$SHELL $output",
++ but could eventually absorb all of the scripts functionality and
++ exec $objdir/$outputname directly.
++*/
++EOF
++ cat <<"EOF"
++#include <stdio.h>
++#include <stdlib.h>
++#ifdef _MSC_VER
++# include <direct.h>
++# include <process.h>
++# include <io.h>
++# define setmode _setmode
++#else
++# include <unistd.h>
++# include <stdint.h>
++# ifdef __CYGWIN__
++# include <io.h>
++# 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 <malloc.h>
++#include <stdarg.h>
++#include <assert.h>
++#include <string.h>
++#include <ctype.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <sys/stat.h>
++
++#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 <<EOF
++
++static const char *script_text_part2 =
++EOF
++ func_emit_wrapper_part2 yes |
++ $SED -e 's/\([\\"]\)/\\\1/g' \
++ -e 's/^/ "/' -e 's/$/\\n"/'
++ echo ";"
++
++ cat <<EOF
++const char * MAGIC_EXE = "$magic_exe";
++const char * LIB_PATH_VARNAME = "$shlibpath_var";
++EOF
++
++ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
++ func_to_host_pathlist "$temp_rpath"
++ cat <<EOF
++const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
++EOF
++ else
++ cat <<"EOF"
++const char * LIB_PATH_VALUE = "";
++EOF
++ fi
++
++ if test -n "$dllsearchpath"; then
++ func_to_host_pathlist "$dllsearchpath:"
++ cat <<EOF
++const char * EXE_PATH_VARNAME = "PATH";
++const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
++EOF
++ else
++ cat <<"EOF"
++const char * EXE_PATH_VARNAME = "";
++const char * EXE_PATH_VALUE = "";
++EOF
++ fi
++
++ if test "$fast_install" = yes; then
++ cat <<EOF
++const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
++EOF
++ else
++ cat <<EOF
++const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
++EOF
++ fi
++
++
++ cat <<"EOF"
++
++#define LTWRAPPER_OPTION_PREFIX "--lt-"
++#define LTWRAPPER_OPTION_PREFIX_LENGTH 5
++
++static const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH;
++static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
++
++static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
++
++static const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
++static const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set";
++ /* argument is putenv-style "foo=bar", value of foo is set to bar */
++
++static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
++static const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend";
++ /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
++
++static const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
++static const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append";
++ /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
++
++int
++main (int argc, char *argv[])
++{
++ char **newargz;
++ int newargc;
++ char *tmp_pathspec;
++ char *actual_cwrapper_path;
++ char *actual_cwrapper_name;
++ char *target_name;
++ char *lt_argv_zero;
++ intptr_t rval = 127;
++
++ int i;
++
++ program_name = (char *) xstrdup (base_name (argv[0]));
++ LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
++ LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
++
++ /* very simple arg parsing; don't want to rely on getopt */
++ for (i = 1; i < argc; i++)
++ {
++ if (strcmp (argv[i], dumpscript_opt) == 0)
++ {
++EOF
++ case "$host" in
++ *mingw* | *cygwin* )
++ # make stdout use "unix" line endings
++ echo " setmode(1,_O_BINARY);"
++ ;;
++ esac
++
++ cat <<"EOF"
++ printf ("%s", script_text_part1);
++ printf ("%s", script_text_part2);
++ return 0;
++ }
++ }
++
++ newargz = XMALLOC (char *, argc + 1);
++ tmp_pathspec = find_executable (argv[0]);
++ if (tmp_pathspec == NULL)
++ lt_fatal ("Couldn't find %s", argv[0]);
++ LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
++ tmp_pathspec));
++
++ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
++ LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
++ actual_cwrapper_path));
++ XFREE (tmp_pathspec);
++
++ actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
++ strendzap (actual_cwrapper_path, actual_cwrapper_name);
++
++ /* wrapper name transforms */
++ strendzap (actual_cwrapper_name, ".exe");
++ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
++ XFREE (actual_cwrapper_name);
++ actual_cwrapper_name = tmp_pathspec;
++ tmp_pathspec = 0;
++
++ /* target_name transforms -- use actual target program name; might have lt- prefix */
++ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
++ strendzap (target_name, ".exe");
++ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
++ XFREE (target_name);
++ target_name = tmp_pathspec;
++ tmp_pathspec = 0;
++
++ LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
++ target_name));
++EOF
++
++ cat <<EOF
++ newargz[0] =
++ XMALLOC (char, (strlen (actual_cwrapper_path) +
++ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
++ strcpy (newargz[0], actual_cwrapper_path);
++ strcat (newargz[0], "$objdir");
++ strcat (newargz[0], "/");
++EOF
++
++ cat <<"EOF"
++ /* stop here, and copy so we don't have to do this twice */
++ tmp_pathspec = xstrdup (newargz[0]);
++
++ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
++ strcat (newargz[0], actual_cwrapper_name);
++
++ /* DO want the lt- prefix here if it exists, so use target_name */
++ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
++ XFREE (tmp_pathspec);
++ tmp_pathspec = NULL;
++EOF
++
++ case $host_os in
++ mingw*)
++ cat <<"EOF"
++ {
++ char* p;
++ while ((p = strchr (newargz[0], '\\')) != NULL)
++ {
++ *p = '/';
++ }
++ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
++ {
++ *p = '/';
++ }
++ }
++EOF
++ ;;
++ esac
++
++ cat <<"EOF"
++ XFREE (target_name);
++ XFREE (actual_cwrapper_path);
++ XFREE (actual_cwrapper_name);
++
++ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
++ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
++ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
++ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
++
++ newargc=0;
++ for (i = 1; i < argc; i++)
++ {
++ if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
++ {
++ if (argv[i][env_set_opt_len] == '=')
++ {
++ const char *p = argv[i] + env_set_opt_len + 1;
++ lt_opt_process_env_set (p);
++ }
++ else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
++ {
++ lt_opt_process_env_set (argv[++i]); /* don't copy */
++ }
++ else
++ lt_fatal ("%s missing required argument", env_set_opt);
++ continue;
++ }
++ if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
++ {
++ if (argv[i][env_prepend_opt_len] == '=')
++ {
++ const char *p = argv[i] + env_prepend_opt_len + 1;
++ lt_opt_process_env_prepend (p);
++ }
++ else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
++ {
++ lt_opt_process_env_prepend (argv[++i]); /* don't copy */
++ }
++ else
++ lt_fatal ("%s missing required argument", env_prepend_opt);
++ continue;
++ }
++ if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
++ {
++ if (argv[i][env_append_opt_len] == '=')
++ {
++ const char *p = argv[i] + env_append_opt_len + 1;
++ lt_opt_process_env_append (p);
++ }
++ else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
++ {
++ lt_opt_process_env_append (argv[++i]); /* don't copy */
++ }
++ else
++ lt_fatal ("%s missing required argument", env_append_opt);
++ continue;
++ }
++ if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
++ {
++ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
++ namespace, but it is not one of the ones we know about and
++ have already dealt with, above (inluding dump-script), then
++ report an error. Otherwise, targets might begin to believe
++ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
++ namespace. The first time any user complains about this, we'll
++ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
++ or a configure.ac-settable value.
++ */
++ lt_fatal ("Unrecognized option in %s namespace: '%s'",
++ ltwrapper_option_prefix, argv[i]);
++ }
++ /* otherwise ... */
++ newargz[++newargc] = xstrdup (argv[i]);
++ }
++ newargz[++newargc] = NULL;
++
++ LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
++ for (i = 0; i < newargc; i++)
++ {
++ LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
++ }
++
++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 : "<NULL>"),
++ (value ? value : "<NULL>")));
++ {
++#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 : "<NULL>"),
++ (value ? value : "<NULL>")));
++
++ 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 : "<NULL>"),
++ (value ? value : "<NULL>")));
++
++ 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%"
++ test "X$link_all_deplibs" != Xno && libs="$libs $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"
++ 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
++ elif test "$linkmode" != prog && test "$linkmode" != lib; then
++ func_fatal_error "\`$lib' is not a convenience library"
++ fi
++ 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
++ path=
++ 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
++ ;;
++ *)
++ func_fatal_configuration "$modename: unknown library version type \`$version_type'"
++ ;;
++ 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 <<EOF
++ int main() { return 0; }
++EOF
++ $opt_dry_run || $RM conftest
++ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
++ ldd_output=`ldd conftest`
++ for i in $deplibs; do
++ case $i in
++ -l*)
++ func_stripname -l '' "$i"
++ name=$func_stripname_result
++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++ case " $predeps $postdeps " in
++ *" $i "*)
++ newdeplibs="$newdeplibs $i"
++ i=""
++ ;;
++ esac
++ fi
++ if test -n "$i" ; then
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
++ set dummy $deplib_matches; shift
++ deplib_match=$1
++ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
++ newdeplibs="$newdeplibs $i"
++ else
++ droppeddeps=yes
++ $ECHO
++ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
++ $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 I believe you do not have"
++ $ECHO "*** because a test_compile did reveal that the linker did not use it for"
++ $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
++ fi
++ fi
++ ;;
++ *)
++ newdeplibs="$newdeplibs $i"
++ ;;
++ esac
++ done
++ else
++ # Error occurred in the first compile. Let's try to salvage
++ # the situation: Compile a separate program for each library.
++ for i in $deplibs; do
++ case $i in
++ -l*)
++ func_stripname -l '' "$i"
++ name=$func_stripname_result
++ $opt_dry_run || $RM conftest
++ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
++ ldd_output=`ldd conftest`
++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++ case " $predeps $postdeps " in
++ *" $i "*)
++ newdeplibs="$newdeplibs $i"
++ i=""
++ ;;
++ esac
++ fi
++ if test -n "$i" ; then
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
++ set dummy $deplib_matches; shift
++ deplib_match=$1
++ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
++ newdeplibs="$newdeplibs $i"
++ else
++ droppeddeps=yes
++ $ECHO
++ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
++ $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 a test_compile did reveal that the linker did not use this one"
++ $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
++ fi
++ fi
++ else
++ droppeddeps=yes
++ $ECHO
++ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
++ $ECHO "*** make it link in! You will probably need to install it or some"
++ $ECHO "*** library that it depends on before this library will be fully"
++ $ECHO "*** functional. Installing it before continuing would be even better."
++ fi
++ ;;
++ *)
++ newdeplibs="$newdeplibs $i"
++ ;;
++ esac
++ done
++ fi
++ ;;
++ file_magic*)
++ set dummy $deplibs_check_method; shift
++ file_magic_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
++ # 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
++
+Index: libdessert0.86-0.86.14/m4/ac_doxygen.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ac_doxygen.m4 2009-12-09 16:38:27.254756172 +0100
+@@ -0,0 +1,324 @@
++#
++# Copyright 2007 Oren Ben-Kiki
++#
++# Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
++# implied. See the License for the specific language governing
++# permissions and limitations under the License.
++#
++
++
++# Generate automatic documentation using Doxygen. Works in concert with the
++# aminclude.m4 file and a compatible doxygen configuration file. Defines the
++# following public macros:
++#
++# DX_???_FEATURE(ON|OFF) - control the default setting fo a Doxygen feature.
++# Supported features are 'DOXYGEN' itself, 'DOT' for generating graphics,
++# 'HTML' for plain HTML, 'CHM' for compressed HTML help (for MS users), 'CHI'
++# for generating a seperate .chi file by the .chm file, and 'MAN', 'RTF',
++# 'XML', 'PDF' and 'PS' for the appropriate output formats. The environment
++# variable DOXYGEN_PAPER_SIZE may be specified to override the default 'a4wide'
++# paper size.
++#
++# By default, HTML, PDF and PS documentation is generated as this seems to be
++# the most popular and portable combination. MAN pages created by Doxygen are
++# usually problematic, though by picking an appropriate subset and doing some
++# massaging they might be better than nothing. CHM and RTF are specific for MS
++# (note that you can't generate both HTML and CHM at the same time). The XML is
++# rather useless unless you apply specialized post-processing to it.
++#
++# The macro mainly controls the default state of the feature. The use can
++# override the default by specifying --enable or --disable. The macros ensure
++# that contradictory flags are not given (e.g., --enable-doxygen-html and
++# --enable-doxygen-chm, --enable-doxygen-anything with --disable-doxygen, etc.)
++# Finally, each feature will be automatically disabled (with a warning) if the
++# required programs are missing.
++#
++# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN with
++# the following parameters: a one-word name for the project for use as a
++# filename base etc., an optional configuration file name (the default is
++# 'Doxyfile', the same as Doxygen's default), and an optional output directory
++# name (the default is 'doxygen-doc').
++
++## ----------##
++## Defaults. ##
++## ----------##
++
++DX_ENV=""
++AC_DEFUN([DX_FEATURE_doc], ON)
++AC_DEFUN([DX_FEATURE_dot], ON)
++AC_DEFUN([DX_FEATURE_man], OFF)
++AC_DEFUN([DX_FEATURE_html], ON)
++AC_DEFUN([DX_FEATURE_chm], OFF)
++AC_DEFUN([DX_FEATURE_chi], OFF)
++AC_DEFUN([DX_FEATURE_rtf], OFF)
++AC_DEFUN([DX_FEATURE_xml], OFF)
++AC_DEFUN([DX_FEATURE_pdf], ON)
++AC_DEFUN([DX_FEATURE_ps], ON)
++
++## --------------- ##
++## Private macros. ##
++## --------------- ##
++
++# DX_ENV_APPEND(VARIABLE, VALUE)
++# ------------------------------
++# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen.
++AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])])
++
++# DX_DIRNAME_EXPR
++# ---------------
++# Expand into a shell expression prints the directory part of a path.
++AC_DEFUN([DX_DIRNAME_EXPR],
++ [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']])
++
++# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF)
++# -------------------------------------
++# Expands according to the M4 (static) status of the feature.
++AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])])
++
++# DX_REQUIRE_PROG(VARIABLE, PROGRAM)
++# ----------------------------------
++# Require the specified program to be found for the DX_CURRENT_FEATURE to work.
++AC_DEFUN([DX_REQUIRE_PROG], [
++AC_PATH_TOOL([$1], [$2])
++if test "$DX_FLAG_$[DX_CURRENT_FEATURE$$1]" = 1; then
++ AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION])
++ AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
++fi
++])
++
++# DX_TEST_FEATURE(FEATURE)
++# ------------------------
++# Expand to a shell expression testing whether the feature is active.
++AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1])
++
++# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE)
++# -------------------------------------------------
++# Verify that a required features has the right state before trying to turn on
++# the DX_CURRENT_FEATURE.
++AC_DEFUN([DX_CHECK_DEPEND], [
++test "$DX_FLAG_$1" = "$2" \
++|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1,
++ requires, contradicts) doxygen-DX_CURRENT_FEATURE])
++])
++
++# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE)
++# ----------------------------------------------------------
++# Turn off the DX_CURRENT_FEATURE if the required feature is off.
++AC_DEFUN([DX_CLEAR_DEPEND], [
++test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
++])
++
++# DX_FEATURE_ARG(FEATURE, DESCRIPTION,
++# CHECK_DEPEND, CLEAR_DEPEND,
++# REQUIRE, DO-IF-ON, DO-IF-OFF)
++# --------------------------------------------
++# Parse the command-line option controlling a feature. CHECK_DEPEND is called
++# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND),
++# otherwise CLEAR_DEPEND is called to turn off the default state if a required
++# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional
++# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and
++# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature.
++AC_DEFUN([DX_ARG_ABLE], [
++ AC_DEFUN([DX_CURRENT_FEATURE], [$1])
++ AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2])
++ AC_ARG_ENABLE(doxygen-$1,
++ [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1],
++ [--enable-doxygen-$1]),
++ DX_IF_FEATURE([$1], [don't $2], [$2]))],
++ [
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ AC_SUBST([DX_FLAG_$1], 1)
++ $3
++;; #(
++n|N|no|No|NO)
++ AC_SUBST([DX_FLAG_$1], 0)
++;; #(
++*)
++ AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1])
++;;
++esac
++], [
++AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)])
++$4
++])
++if DX_TEST_FEATURE([$1]); then
++ $5
++ :
++fi
++if DX_TEST_FEATURE([$1]); then
++ AM_CONDITIONAL(DX_COND_$1, :)
++ $6
++ :
++else
++ AM_CONDITIONAL(DX_COND_$1, false)
++ $7
++ :
++fi
++])
++
++## -------------- ##
++## Public macros. ##
++## -------------- ##
++
++# DX_XXX_FEATURE(DEFAULT_STATE)
++# -----------------------------
++AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])])
++AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])])
++AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])])
++AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])])
++AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])])
++AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])])
++AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])
++AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])
++AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])])
++AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])])
++
++# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR])
++# ---------------------------------------------------------
++# PROJECT also serves as the base name for the documentation files.
++# The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc".
++AC_DEFUN([DX_INIT_DOXYGEN], [
++
++# Files:
++AC_SUBST([DX_PROJECT], [$1])
++AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])])
++AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])])
++
++# Environment variables used inside doxygen.cfg:
++DX_ENV_APPEND(SRCDIR, $srcdir)
++DX_ENV_APPEND(PROJECT, $DX_PROJECT)
++DX_ENV_APPEND(DOCDIR, $DX_DOCDIR)
++DX_ENV_APPEND(VERSION, $PACKAGE_VERSION)
++
++# Doxygen itself:
++DX_ARG_ABLE(doc, [generate any doxygen documentation],
++ [],
++ [],
++ [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen)
++ DX_REQUIRE_PROG([DX_PERL], perl)],
++ [DX_ENV_APPEND(PERL_PATH, $DX_PERL)])
++
++# Dot for graphics:
++DX_ARG_ABLE(dot, [generate graphics for doxygen documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [DX_REQUIRE_PROG([DX_DOT], dot)],
++ [DX_ENV_APPEND(HAVE_DOT, YES)
++ DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])],
++ [DX_ENV_APPEND(HAVE_DOT, NO)])
++
++# Man pages generation:
++DX_ARG_ABLE(man, [generate doxygen manual pages],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [],
++ [DX_ENV_APPEND(GENERATE_MAN, YES)],
++ [DX_ENV_APPEND(GENERATE_MAN, NO)])
++
++# RTF file generation:
++DX_ARG_ABLE(rtf, [generate doxygen RTF documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [],
++ [DX_ENV_APPEND(GENERATE_RTF, YES)],
++ [DX_ENV_APPEND(GENERATE_RTF, NO)])
++
++# XML file generation:
++DX_ARG_ABLE(xml, [generate doxygen XML documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [],
++ [DX_ENV_APPEND(GENERATE_XML, YES)],
++ [DX_ENV_APPEND(GENERATE_XML, NO)])
++
++# (Compressed) HTML help generation:
++DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [DX_REQUIRE_PROG([DX_HHC], hhc)],
++ [DX_ENV_APPEND(HHC_PATH, $DX_HHC)
++ DX_ENV_APPEND(GENERATE_HTML, YES)
++ DX_ENV_APPEND(GENERATE_HTMLHELP, YES)],
++ [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)])
++
++# Seperate CHI file generation.
++DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file],
++ [DX_CHECK_DEPEND(chm, 1)],
++ [DX_CLEAR_DEPEND(chm, 1)],
++ [],
++ [DX_ENV_APPEND(GENERATE_CHI, YES)],
++ [DX_ENV_APPEND(GENERATE_CHI, NO)])
++
++# Plain HTML pages generation:
++DX_ARG_ABLE(html, [generate doxygen plain HTML documentation],
++ [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)],
++ [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)],
++ [],
++ [DX_ENV_APPEND(GENERATE_HTML, YES)],
++ [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)])
++
++# PostScript file generation:
++DX_ARG_ABLE(ps, [generate doxygen PostScript documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [DX_REQUIRE_PROG([DX_LATEX], latex)
++ DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
++ DX_REQUIRE_PROG([DX_DVIPS], dvips)
++ DX_REQUIRE_PROG([DX_EGREP], egrep)])
++
++# PDF file generation:
++DX_ARG_ABLE(pdf, [generate doxygen PDF documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex)
++ DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
++ DX_REQUIRE_PROG([DX_EGREP], egrep)])
++
++# LaTeX generation for PS and/or PDF:
++if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then
++ AM_CONDITIONAL(DX_COND_latex, :)
++ DX_ENV_APPEND(GENERATE_LATEX, YES)
++else
++ AM_CONDITIONAL(DX_COND_latex, false)
++ DX_ENV_APPEND(GENERATE_LATEX, NO)
++fi
++
++# Paper size for PS and/or PDF:
++AC_ARG_VAR(DOXYGEN_PAPER_SIZE,
++ [a4wide (default), a4, letter, legal or executive])
++case "$DOXYGEN_PAPER_SIZE" in
++#(
++"")
++ AC_SUBST(DOXYGEN_PAPER_SIZE, "")
++;; #(
++a4wide|a4|letter|legal|executive)
++ DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE)
++;; #(
++*)
++ AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'])
++;;
++esac
++
++#For debugging:
++#echo DX_FLAG_doc=$DX_FLAG_doc
++#echo DX_FLAG_dot=$DX_FLAG_dot
++#echo DX_FLAG_man=$DX_FLAG_man
++#echo DX_FLAG_html=$DX_FLAG_html
++#echo DX_FLAG_chm=$DX_FLAG_chm
++#echo DX_FLAG_chi=$DX_FLAG_chi
++#echo DX_FLAG_rtf=$DX_FLAG_rtf
++#echo DX_FLAG_xml=$DX_FLAG_xml
++#echo DX_FLAG_pdf=$DX_FLAG_pdf
++#echo DX_FLAG_ps=$DX_FLAG_ps
++#echo DX_ENV=$DX_ENV
++])
+Index: libdessert0.86-0.86.14/m4/ax_pthread.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ax_pthread.m4 2009-12-09 16:38:27.254756172 +0100
+@@ -0,0 +1,272 @@
++# ===========================================================================
++# http://www.nongnu.org/autoconf-archive/ax_pthread.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
++#
++# DESCRIPTION
++#
++# This macro figures out how to build C programs using POSIX threads. It
++# sets the PTHREAD_LIBS output variable to the threads library and linker
++# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
++# flags that are needed. (The user can also force certain compiler
++# flags/libs to be tested by setting these environment variables.)
++#
++# Also sets PTHREAD_CC to any special C compiler that is needed for
++# multi-threaded programs (defaults to the value of CC otherwise). (This
++# is necessary on AIX to use the special cc_r compiler alias.)
++#
++# NOTE: You are assumed to not only compile your program with these flags,
++# but also link it with them as well. e.g. you should link with
++# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
++#
++# If you are only building threads programs, you may wish to use these
++# variables in your default LIBS, CFLAGS, and CC:
++#
++# LIBS="$PTHREAD_LIBS $LIBS"
++# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++# CC="$PTHREAD_CC"
++#
++# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
++# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
++# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
++#
++# ACTION-IF-FOUND is a list of shell commands to run if a threads library
++# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
++# is not found. If ACTION-IF-FOUND is not specified, the default action
++# will define HAVE_PTHREAD.
++#
++# Please let the authors know if this macro fails on any platform, or if
++# you have any other suggestions or comments. This macro was based on work
++# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
++# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
++# Alejandro Forero Cuervo to the autoconf macro repository. We are also
++# grateful for the helpful feedback of numerous users.
++#
++# LICENSE
++#
++# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
++#
++# 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 3 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 <http://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
++AC_DEFUN([AX_PTHREAD], [
++AC_REQUIRE([AC_CANONICAL_HOST])
++AC_LANG_SAVE
++AC_LANG_C
++ax_pthread_ok=no
++
++# We used to check for pthread.h first, but this fails if pthread.h
++# requires special compiler flags (e.g. on True64 or Sequent).
++# It gets checked for in the link test anyway.
++
++# First of all, check if the user has set any of the PTHREAD_LIBS,
++# etcetera environment variables, and if threads linking works using
++# them:
++if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
++ save_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++ save_LIBS="$LIBS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
++ AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
++ AC_MSG_RESULT($ax_pthread_ok)
++ if test x"$ax_pthread_ok" = xno; then
++ PTHREAD_LIBS=""
++ PTHREAD_CFLAGS=""
++ fi
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++fi
++
++# We must check for the threads library under a number of different
++# names; the ordering is very important because some systems
++# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
++# libraries is broken (non-POSIX).
++
++# Create a list of thread flags to try. Items starting with a "-" are
++# C compiler flags, and other items are library names, except for "none"
++# which indicates that we try without any flags at all, and "pthread-config"
++# which is a program returning the flags for the Pth emulation library.
++
++ax_pthread_flags="pthread pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
++
++# The ordering *is* (sometimes) important. Some notes on the
++# individual items follow:
++
++# pthreads: AIX (must check this before -lpthread)
++# none: in case threads are in libc; should be tried before -Kthread and
++# other compiler flags to prevent continual compiler warnings
++# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
++# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
++# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
++# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
++# -pthreads: Solaris/gcc
++# -mthreads: Mingw32/gcc, Lynx/gcc
++# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
++# doesn't hurt to check since this sometimes defines pthreads too;
++# also defines -D_REENTRANT)
++# ... -mt is also the pthreads flag for HP/aCC
++# pthread: Linux, etcetera
++# --thread-safe: KAI C++
++# pthread-config: use pthread-config program (for GNU Pth library)
++
++case "${host_cpu}-${host_os}" in
++ *solaris*)
++
++ # On Solaris (at least, for some versions), libc contains stubbed
++ # (non-functional) versions of the pthreads routines, so link-based
++ # tests will erroneously succeed. (We need to link with -pthreads/-mt/
++ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
++ # a function called by this macro, so we could check for that, but
++ # who knows whether they'll stub that too in a future libc.) So,
++ # we'll just look for -pthreads and -lpthread first:
++
++ ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
++ ;;
++esac
++
++if test x"$ax_pthread_ok" = xno; then
++for flag in $ax_pthread_flags; do
++
++ case $flag in
++ none)
++ AC_MSG_CHECKING([whether pthreads work without any flags])
++ ;;
++
++ -*)
++ AC_MSG_CHECKING([whether pthreads work with $flag])
++ PTHREAD_CFLAGS="$flag"
++ ;;
++
++ pthread-config)
++ AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
++ if test x"$ax_pthread_config" = xno; then continue; fi
++ PTHREAD_CFLAGS="`pthread-config --cflags`"
++ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
++ ;;
++
++ *)
++ AC_MSG_CHECKING([for the pthreads library -l$flag])
++ PTHREAD_LIBS="-l$flag"
++ ;;
++ esac
++
++ save_LIBS="$LIBS"
++ save_CFLAGS="$CFLAGS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++
++ # Check for various functions. We must include pthread.h,
++ # since some functions may be macros. (On the Sequent, we
++ # need a special flag -Kthread to make this header compile.)
++ # We check for pthread_join because it is in -lpthread on IRIX
++ # while pthread_create is in libc. We check for pthread_attr_init
++ # due to DEC craziness with -lpthreads. We check for
++ # pthread_cleanup_push because it is one of the few pthread
++ # functions on Solaris that doesn't have a non-functional libc stub.
++ # We try pthread_create on general principles.
++ AC_TRY_LINK([#include <pthread.h>],
++ [pthread_t th; pthread_join(th, 0);
++ pthread_attr_init(0); pthread_cleanup_push(0, 0);
++ pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
++ [ax_pthread_ok=yes])
++
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++
++ AC_MSG_RESULT($ax_pthread_ok)
++ if test "x$ax_pthread_ok" = xyes; then
++ break;
++ fi
++
++ PTHREAD_LIBS=""
++ PTHREAD_CFLAGS=""
++done
++fi
++
++# Various other checks:
++if test "x$ax_pthread_ok" = xyes; then
++ save_LIBS="$LIBS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ save_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++
++ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
++ AC_MSG_CHECKING([for joinable pthread attribute])
++ attr_name=unknown
++ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
++ AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
++ [attr_name=$attr; break])
++ done
++ AC_MSG_RESULT($attr_name)
++ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
++ AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
++ [Define to necessary symbol if this constant
++ uses a non-standard name on your system.])
++ fi
++
++ AC_MSG_CHECKING([if more special flags are required for pthreads])
++ flag=no
++ case "${host_cpu}-${host_os}" in
++ *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
++ *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
++ esac
++ AC_MSG_RESULT(${flag})
++ if test "x$flag" != xno; then
++ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
++ fi
++
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++
++ # More AIX lossage: must compile with xlc_r or cc_r
++ if test x"$GCC" != xyes; then
++ AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
++ else
++ PTHREAD_CC=$CC
++ fi
++else
++ PTHREAD_CC="$CC"
++fi
++
++AC_SUBST(PTHREAD_LIBS)
++AC_SUBST(PTHREAD_CFLAGS)
++AC_SUBST(PTHREAD_CC)
++
++# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
++if test x"$ax_pthread_ok" = xyes; then
++ ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
++ :
++else
++ ax_pthread_ok=no
++ $2
++fi
++AC_LANG_RESTORE
++])dnl AX_PTHREAD
+Index: libdessert0.86-0.86.14/m4/libtool.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/libtool.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,7376 @@
++# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
++#
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
++# 2006, 2007, 2008 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 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 56 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_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
++
++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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "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
++_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_CMD_RELOAD])dnl
++m4_require([_LT_CHECK_MAGIC_METHOD])dnl
++m4_require([_LT_CMD_OLD_ARCHIVE])dnl
++m4_require([_LT_CMD_GLOBAL_SYMBOLS])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
++_LT_PROG_ECHO_BACKSLASH
++
++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
++
++# Sed substitution that helps us do robust quoting. It backslashifies
++# 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'
++
++# 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_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
++
++
++## ------------------------------------- ##
++## Accumulate code for creating libtool. ##
++## ------------------------------------- ##
++
++# 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], [[!?.]$], [], [.])
++)])
++
++
++
++## ------------------------ ##
++## FIXME: Eliminate VARNAME ##
++## ------------------------ ##
++
++
++# _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 "X$][$1" | $Xsed -e "$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:
++#
++# <var>='`$ECHO "X$<var>" | $Xsed -e "$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'
++
++# Quote evaled strings.
++for var in lt_decl_all_varnames([[ \
++]], lt_decl_quote_varnames); do
++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++ *[[\\\\\\\`\\"\\\$]]*)
++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$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 "X\\\\\$\$var"\` in
++ *[[\\\\\\\`\\"\\\$]]*)
++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
++ ;;
++ *)
++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
++ ;;
++ esac
++done
++
++# Fix-up fallback echo if it was mangled by the above quoting rules.
++case \$lt_ECHO in
++*'\\\[$]0 --fallback-echo"')dnl "
++ lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
++ ;;
++esac
++
++_LT_OUTPUT_LIBTOOL_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])
++cat >"$CONFIG_LT" <<_LTEOF
++#! $SHELL
++# Generated by $as_me.
++# Run this file to recreate a libtool stub with the current configuration.
++
++lt_cl_silent=false
++SHELL=\${CONFIG_SHELL-$SHELL}
++_LTEOF
++
++cat >>"$CONFIG_LT" <<\_LTEOF
++AS_SHELL_SANITIZE
++_AS_PREPARE
++
++exec AS_MESSAGE_FD>&1
++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 <bug-libtool@gnu.org>."
++
++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) 2008 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.
++if test "$no_create" != yes; then
++ 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)
++fi
++])# 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 '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ _LT_PROG_XSI_SHELLFNS
++
++ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ 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)],
++ [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
++
++
++# _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([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)])
++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], [])
++
++
++# _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 test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 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"
++ ])
++ 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" != ":"; then
++ _lt_dsymutil='~$DSYMUTIL $lib || :'
++ else
++ _lt_dsymutil=
++ fi
++ ;;
++ esac
++])
++
++
++# _LT_DARWIN_LINKER_FEATURES
++# --------------------------
++# 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
++ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
++ _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=echo
++ _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
++# -----------------------
++# 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.
++m4_defun([_LT_SYS_MODULE_PATH_AIX],
++[m4_require([_LT_DECL_SED])dnl
++AC_LINK_IFELSE(AC_LANG_PROGRAM,[
++lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\(.*\)$/\1/
++ p
++ }
++ }'
++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 "$aix_libpath"; then
++ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++fi],[])
++if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++])# _LT_SYS_MODULE_PATH_AIX
++
++
++# _LT_SHELL_INIT(ARG)
++# -------------------
++m4_define([_LT_SHELL_INIT],
++[ifdef([AC_DIVERSION_NOTICE],
++ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
++ [AC_DIVERT_PUSH(NOTICE)])
++$1
++AC_DIVERT_POP
++])# _LT_SHELL_INIT
++
++
++# _LT_PROG_ECHO_BACKSLASH
++# -----------------------
++# Add some code to the start of the generated configure script which
++# will find an echo command which doesn't interpret backslashes.
++m4_defun([_LT_PROG_ECHO_BACKSLASH],
++[_LT_SHELL_INIT([
++# Check that we are running under the correct shell.
++SHELL=${CONFIG_SHELL-/bin/sh}
++
++case X$lt_ECHO in
++X*--fallback-echo)
++ # Remove one level of quotation (which was required for Make).
++ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
++ ;;
++esac
++
++ECHO=${lt_ECHO-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.
++ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
++fi
++
++if test "X[$]1" = X--fallback-echo; then
++ # used as fallback echo
++ shift
++ cat <<_LT_EOF
++[$]*
++_LT_EOF
++ exit 0
++fi
++
++# 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
++
++if test -z "$lt_ECHO"; then
++ if test "X${echo_test_string+set}" != Xset; then
++ # find a string as large as possible, as long as the shell can cope with it
++ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
++ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
++ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
++ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
++ then
++ break
++ fi
++ done
++ fi
++
++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ :
++ else
++ # The Solaris, AIX, and Digital Unix default echo programs unquote
++ # backslashes. This makes it impossible to quote backslashes using
++ # echo "$something" | sed 's/\\/\\\\/g'
++ #
++ # So, first we look for a working echo in the user's PATH.
++
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ for dir in $PATH /usr/ucb; do
++ IFS="$lt_save_ifs"
++ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
++ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ ECHO="$dir/echo"
++ break
++ fi
++ done
++ IFS="$lt_save_ifs"
++
++ if test "X$ECHO" = Xecho; then
++ # We didn't find a better echo, so look for alternatives.
++ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ # This shell has a builtin print -r that does the trick.
++ ECHO='print -r'
++ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
++ test "X$CONFIG_SHELL" != X/bin/ksh; then
++ # If we have ksh, try running configure again with it.
++ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
++ export ORIGINAL_CONFIG_SHELL
++ CONFIG_SHELL=/bin/ksh
++ export CONFIG_SHELL
++ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
++ else
++ # Try using printf.
++ ECHO='printf %s\n'
++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ # Cool, printf works
++ :
++ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
++ test "X$echo_testing_string" = 'X\t' &&
++ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
++ export CONFIG_SHELL
++ SHELL="$CONFIG_SHELL"
++ export SHELL
++ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
++ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
++ test "X$echo_testing_string" = 'X\t' &&
++ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
++ else
++ # maybe with a smaller string...
++ prev=:
++
++ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
++ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
++ then
++ break
++ fi
++ prev="$cmd"
++ done
++
++ if test "$prev" != 'sed 50q "[$]0"'; then
++ echo_test_string=`eval $prev`
++ export echo_test_string
++ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
++ else
++ # Oops. We lost completely, so just stick with echo.
++ ECHO=echo
++ fi
++ fi
++ fi
++ fi
++ fi
++fi
++
++# Copy echo and quote the copy suitably for passing to libtool from
++# the Makefile, instead of quoting the original, which is used later.
++lt_ECHO=$ECHO
++if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
++ lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
++fi
++
++AC_SUBST(lt_ECHO)
++])
++_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
++_LT_DECL([], [ECHO], [1],
++ [An echo program that does not interpret backslashes])
++])# _LT_PROG_ECHO_BACKSLASH
++
++
++# _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 __oline__ "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
++ ;;
++sparc*-*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*) LD="${LD-ld} -m elf64_sparc" ;;
++ *)
++ 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_CMD_OLD_ARCHIVE
++# -------------------
++m4_defun([_LT_CMD_OLD_ARCHIVE],
++[AC_CHECK_TOOL(AR, ar, false)
++test -z "$AR" && AR=ar
++test -z "$AR_FLAGS" && AR_FLAGS=cru
++_LT_DECL([], [AR], [1], [The archiver])
++_LT_DECL([], [AR_FLAGS], [1])
++
++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 \$oldlib"
++ ;;
++ *)
++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
++ ;;
++ esac
++ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
++fi
++_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_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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
++ (eval "$lt_compile" 2>conftest.err)
++ ac_status=$?
++ cat conftest.err >&AS_MESSAGE_LOG_FD
++ echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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;
++ ;;
++
++ 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
++ ;;
++
++ 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"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
++ = "XX$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 __oline__ "configure"
++#include "confdefs.h"
++
++#if HAVE_DLFCN_H
++#include <dlfcn.h>
++#endif
++
++#include <stdio.h>
++
++#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
++
++void fnord() { int i=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;
++ /* 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:__oline__: $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:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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
++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
++ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
++ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
++ # 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 -e 's/;/ /g'`
++ else
++ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # 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; }
++}'`
++ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
++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
++ 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
++ 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<name>.so
++ # instead of lib<name>.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=`$ECHO "X$lib" | $Xsed -e '\''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
++ 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,$host_os in
++ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ 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="/usr/lib /lib/w32api /lib /usr/local/lib"
++ ;;
++ mingw* | cegcc*)
++ # MinGW DLLs use traditional 'lib' prefix
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
++ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
++ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
++ # It is most probably a Windows format PATH printed by
++ # mingw gcc, but we are running on Cygwin. Gcc prints its search
++ # path with ; separators, and with drive letters. We can handle the
++ # drive letters (cygwin fileutils understands them), so leave them,
++ # especially as we might pass files found there to a mingw objdump,
++ # which wouldn't understand a cygwinified path. Ahh.
++ 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
++ ;;
++ 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
++ ;;
++
++ *)
++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ ;;
++ esac
++ dynamic_linker='Win32 ld.exe'
++ # 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
++ 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
++ ;;
++
++freebsd1*)
++ dynamic_linker=no
++ ;;
++
++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[[123]]*) 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
++ 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
++ 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'
++ ;;
++
++interix[[3-9]]*)
++ version_type=linux
++ 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
++ 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 Linux ELF.
++linux* | k*bsd*-gnu)
++ version_type=linux
++ 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
++ 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],
++ [shlibpath_overrides_runpath=yes])])
++ LDFLAGS=$save_LDFLAGS
++ libdir=$save_libdir
++
++ # 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
++
++ # 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;/^$/d' | tr '\n' ' '`
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $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'
++ ;;
++
++netbsdelf*-gnu)
++ version_type=linux
++ 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='NetBSD ld.elf_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
++ 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
++ 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
++ 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
++ 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
++ 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
++ 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([], [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
++
++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 </dev/null` in
++ *GNU* | *'with BFD'*)
++ test "$with_gnu_ld" != no && break
++ ;;
++ *)
++ test "$with_gnu_ld" != yes && break
++ ;;
++ esac
++ fi
++ done
++ IFS="$lt_save_ifs"
++else
++ lt_cv_path_LD="$LD" # Let the user override the test with a path.
++fi])
++LD="$lt_cv_path_LD"
++if test -n "$LD"; then
++ AC_MSG_RESULT($LD)
++else
++ AC_MSG_RESULT(no)
++fi
++test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
++_LT_PATH_LD_GNU
++AC_SUBST([LD])
++
++_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
++])# LT_PATH_LD
++
++# Old names:
++AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
++AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AM_PROG_LD], [])
++dnl AC_DEFUN([AC_PROG_LD], [])
++
++
++# _LT_PATH_LD_GNU
++#- --------------
++m4_defun([_LT_PATH_LD_GNU],
++[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
++[# I'd rather use --version here, but apparently some GNU lds only accept -v.
++case `$LD -v 2>&1 </dev/null` in
++*GNU* | *'with BFD'*)
++ lt_cv_prog_gnu_ld=yes
++ ;;
++*)
++ lt_cv_prog_gnu_ld=no
++ ;;
++esac])
++with_gnu_ld=$lt_cv_prog_gnu_ld
++])# _LT_PATH_LD_GNU
++
++
++# _LT_CMD_RELOAD
++# --------------
++# find reload flag for linker
++# -- PORTME Some linkers may need a different reload flag.
++m4_defun([_LT_CMD_RELOAD],
++[AC_CACHE_CHECK([for $LD option to reload object files],
++ lt_cv_ld_reload_flag,
++ [lt_cv_ld_reload_flag='-r'])
++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
++ 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
++_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
++_LT_DECL([], [reload_cmds], [2])dnl
++])# _LT_CMD_RELOAD
++
++
++# _LT_CHECK_MAGIC_METHOD
++# ----------------------
++# how to check for library dependencies
++# -- PORTME fill in with the dynamic library characteristics
++m4_defun([_LT_CHECK_MAGIC_METHOD],
++[m4_require([_LT_DECL_EGREP])
++m4_require([_LT_DECL_OBJDUMP])
++AC_CACHE_CHECK([how to recognize dependent libraries],
++lt_cv_deplibs_check_method,
++[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.
++ if ( 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
++ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ 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
++ ;;
++
++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]) 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 Linux ELF.
++linux* | k*bsd*-gnu)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++netbsd* | netbsdelf*-gnu)
++ 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_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_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.
++ AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
++ 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:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
++ (eval "$ac_compile" 2>conftest.err)
++ cat conftest.err >&AS_MESSAGE_LOG_FD
++ (eval echo "\"\$as_me:__oline__: $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:__oline__: 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_LIB_M
++# --------
++# check for math library
++AC_DEFUN([LT_LIB_M],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++LIBM=
++case $host in
++*-*-beos* | *-*-cygwin* | *-*-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
++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
++
++ _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([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};"\
++" /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
++
++ # 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
++#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. */
++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_save_LIBS="$LIBS"
++ lt_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_save_LIBS"
++ CFLAGS="$lt_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
++
++_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_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)=
++
++AC_MSG_CHECKING([for $compiler option to produce PIC])
++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)=
++ ;;
++ 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
++ ;;
++ 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)
++ 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*)
++ # IBM XL 8.0 on PPC
++ _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* | netbsdelf*-gnu)
++ ;;
++ *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*)
++ # 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'
++ ;;
++
++ 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
++ 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)
++ 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'
++ ;;
++ pgcc* | pgf77* | pgf90* | pgf95*)
++ # 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*)
++ # IBM XL C 8.0/Fortran 10.1 on PPC
++ _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)='-Wl,'
++ ;;
++ *Sun\ F*)
++ # 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)=''
++ ;;
++ 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*)
++ _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_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
++_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
++ [How to pass a linker flag through the compiler])
++
++#
++# 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])
++
++#
++# 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_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'
++ 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
++ 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")) && ([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*)
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
++ ;;
++ linux* | k*bsd*-gnu)
++ _LT_TAGVAR(link_all_deplibs, $1)=no
++ ;;
++ *)
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ ;;
++ esac
++ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
++], [
++ 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_flag_spec_ld, $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
++ ;;
++ linux* | k*bsd*-gnu)
++ _LT_TAGVAR(link_all_deplibs, $1)=no
++ ;;
++ esac
++
++ _LT_TAGVAR(ld_shlibs, $1)=yes
++ if test "$with_gnu_ld" = 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
++ *\ [[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.9.1, 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 modify your PATH
++*** so that a non-GNU linker is found, and then restart.
++
++_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 <jrb3@best.com> 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(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/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
++
++ 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
++ ;;
++
++ 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)
++ 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=
++ 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; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ tmp_addflag=' $pic_flag'
++ ;;
++ pgf77* | pgf90* | pgf95*) # 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; $ECHO \"$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]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
++ tmp_sharedflag='-qmkshrobj'
++ tmp_addflag= ;;
++ 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; $ECHO \"$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*)
++ # 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)=
++ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
++ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_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 $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ fi
++ ;;
++ esac
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++
++ netbsd* | netbsdelf*-gnu)
++ 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 $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'
++ 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 $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
++ ;;
++
++ 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 $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
++
++ 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
++ 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")) && ([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
++ _LT_TAGVAR(link_all_deplibs, $1)=no
++ 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
++ _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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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
++ _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'
++ # Exported symbols can be pulled into shared objects from archives
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
++ _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.
++ _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 `$ECHO "X$deplibs" | $Xsed -e '\''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(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++ ;;
++
++ 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
++ ;;
++
++ freebsd1*)
++ _LT_TAGVAR(ld_shlibs, $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 -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 -fPIC ${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 -a "$with_gnu_ld" = no; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${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_flag_spec_ld, $1)='+b $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 -a "$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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${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'
++ ;;
++ *)
++ _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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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.
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ AC_LINK_IFELSE(int foo(void) {},
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ )
++ LDFLAGS="$save_LDFLAGS"
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -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" && $ECHO "X-set_version $verstring" | $Xsed` -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* | netbsdelf*-gnu)
++ 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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 ${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 ${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_MSG_CHECKING([whether -lc should be explicitly linked in])
++ $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_TAGVAR(archive_cmds_need_lc, $1)=no
++ else
++ _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*
++ AC_MSG_RESULT([$_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_flag_spec_ld], [1],
++ [[If ld is used when linking, 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([], [fix_srcfile_path], [1],
++ [Fix the shell variable $srcfile for the compiler])
++_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([], [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
++
++## 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...
++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_PROG_CXX
++# ------------
++# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
++# compiler, we have our own version here.
++m4_defun([_LT_PROG_CXX],
++[
++pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
++AC_PROG_CXX
++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
++popdef([AC_MSG_ERROR])
++])# _LT_PROG_CXX
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([_LT_PROG_CXX], [])
++
++
++# _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],
++[AC_REQUIRE([_LT_PROG_CXX])dnl
++m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_DECL_EGREP])dnl
++
++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_flag_spec_ld, $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(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_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++"}
++ 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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -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 "\-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
++ _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 $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; 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
++ _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'
++ # Exported symbols can be pulled into shared objects from archives
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
++ _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 <jrb3@best.com> 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*)
++ # _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(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
++ ;;
++ 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
++ ;;
++
++ freebsd[[12]]*)
++ # 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*)
++ ;;
++
++ 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; $ECHO "X$list" | $Xsed'
++ ;;
++ *)
++ if test "$GXX" = yes; then
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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; $ECHO "X$list" | $Xsed'
++ ;;
++ *)
++ 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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${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" && $ECHO "X-set_version $verstring" | $Xsed` -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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -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)
++ 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; $ECHO "X$list" | $Xsed'
++
++ _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 | $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 | $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 | $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 | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
++ ;;
++ *) # Version 6 will 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; $ECHO \"$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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++ ;;
++ xl*)
++ # 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; $ECHO \"$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='echo'
++
++ # 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=echo
++ 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" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -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" && $ECHO "X-set_version $verstring" | $Xsed` -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 "X-set_version $verstring" | $Xsed` -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=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++ ;;
++ *)
++ 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" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${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 "\-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*)
++ # 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='echo'
++
++ # 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 -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 -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 "\-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 "\-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(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
++ 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_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
++# 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
++])
++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 $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
++ else
++ prev=
++ fi
++
++ if test "$pre_test_object_deps_done" = no; then
++ case $p 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
++ ;;
++
++ *.$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
++
++# 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*)
++ # 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_PROG_F77
++# ------------
++# Since AC_PROG_F77 is broken, in that it returns the empty string
++# if there is no fortran compiler, we have our own version here.
++m4_defun([_LT_PROG_F77],
++[
++pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
++AC_PROG_F77
++if test -z "$F77" || test "X$F77" = "Xno"; then
++ _lt_disable_F77=yes
++fi
++popdef([AC_MSG_ERROR])
++])# _LT_PROG_F77
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([_LT_PROG_F77], [])
++
++
++# _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_REQUIRE([_LT_PROG_F77])dnl
++AC_LANG_PUSH(Fortran 77)
++
++_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_flag_spec_ld, $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(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
++ CC=${F77-"f77"}
++ 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"
++fi # test "$_lt_disable_F77" != yes
++
++AC_LANG_POP
++])# _LT_LANG_F77_CONFIG
++
++
++# _LT_PROG_FC
++# -----------
++# Since AC_PROG_FC is broken, in that it returns the empty string
++# if there is no fortran compiler, we have our own version here.
++m4_defun([_LT_PROG_FC],
++[
++pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
++AC_PROG_FC
++if test -z "$FC" || test "X$FC" = "Xno"; then
++ _lt_disable_FC=yes
++fi
++popdef([AC_MSG_ERROR])
++])# _LT_PROG_FC
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([_LT_PROG_FC], [])
++
++
++# _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_REQUIRE([_LT_PROG_FC])dnl
++AC_LANG_PUSH(Fortran)
++
++_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_flag_spec_ld, $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(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
++ CC=${FC-"f95"}
++ 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"
++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_GCC=$GCC
++GCC=yes
++CC=${GCJ-"gcj"}
++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
++
++## 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...
++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"
++])# _LT_LANG_GCJ_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_GCC=$GCC
++GCC=
++CC=${RC-"windres"}
++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"
++])# _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_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_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"}, \
++ = c,a/b,, \
++ && 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_XSI_SHELLFNS
++# ---------------------
++# Bourne and XSI compatible variants of some useful shell functions.
++m4_defun([_LT_PROG_XSI_SHELLFNS],
++[case $xsi_shell in
++ yes)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++}
++
++# func_basename file
++func_basename ()
++{
++ func_basename_result="${1##*/}"
++}
++
++# 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 ()
++{
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++ func_basename_result="${1##*/}"
++}
++
++# func_stripname 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).
++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}"}
++}
++
++# func_opt_split
++func_opt_split ()
++{
++ func_opt_split_opt=${1%%=*}
++ func_opt_split_arg=${1#*=}
++}
++
++# func_lo2o object
++func_lo2o ()
++{
++ case ${1} in
++ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
++ *) func_lo2o_result=${1} ;;
++ esac
++}
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=${1%.*}.lo
++}
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=$(( $[*] ))
++}
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=${#1}
++}
++
++_LT_EOF
++ ;;
++ *) # Bourne compatible functions.
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ # 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 file
++func_basename ()
++{
++ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
++}
++
++dnl func_dirname_and_basename
++dnl A portable version of this function is already defined in general.m4sh
++dnl so there is no need for it here.
++
++# func_stripname 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).
++# func_strip_suffix prefix name
++func_stripname ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "X${3}" \
++ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "X${3}" \
++ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
++ esac
++}
++
++# sed scripts:
++my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
++my_sed_long_arg='1s/^-[[^=]]*=//'
++
++# func_opt_split
++func_opt_split ()
++{
++ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
++ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
++}
++
++# func_lo2o object
++func_lo2o ()
++{
++ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
++}
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
++}
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=`expr "$[@]"`
++}
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
++}
++
++_LT_EOF
++esac
++
++case $lt_shell_append in
++ yes)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "$[1]+=\$[2]"
++}
++_LT_EOF
++ ;;
++ *)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "$[1]=\$$[1]\$[2]"
++}
++
++_LT_EOF
++ ;;
++ esac
++])
+Index: libdessert0.86-0.86.14/m4/ltoptions.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ltoptions.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,368 @@
++# Helper functions for option handling. -*- 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 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
++
++
++## --------------------------------- ##
++## Macros to handle LT_INIT 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], [0], [Assembler program])dnl
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
++
++test -z "$OBJDUMP" && OBJDUMP=objdump
++_LT_DECL([], [OBJDUMP], [0], [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],
++ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
++ [pic_mode="$withval"],
++ [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], [])
++
++## ----------------- ##
++## LTDL_INIT Options ##
++## ----------------- ##
++
++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])])
+Index: libdessert0.86-0.86.14/m4/ltsugar.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ltsugar.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,123 @@
++# 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
++])
+Index: libdessert0.86-0.86.14/m4/ltversion.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ltversion.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,23 @@
++# 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.
++
++# Generated from ltversion.in.
++
++# serial 3012 ltversion.m4
++# This file is part of GNU Libtool
++
++m4_define([LT_PACKAGE_VERSION], [2.2.6])
++m4_define([LT_PACKAGE_REVISION], [1.3012])
++
++AC_DEFUN([LTVERSION_VERSION],
++[macro_version='2.2.6'
++macro_revision='1.3012'
++_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
++_LT_DECL(, macro_revision, 0)
++])
+Index: libdessert0.86-0.86.14/m4/lt~obsolete.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/lt~obsolete.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,92 @@
++# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
++#
++# Copyright (C) 2004, 2005, 2007 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 4 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_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
++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])])
+Index: libdessert0.86-0.86.14/m4/net-snmp.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/net-snmp.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,10 @@
++AC_DEFUN([AC_CHECK_NET_SNMP],[
++AC_MSG_CHECKING([Searching for net-snmp lib])
++AC_CHECK_PROG([SNMP_LIBS],[net-snmp-config],[`net-snmp-config --agent-libs`],[none])
++AC_CHECK_PROG([SNMP_CFLGAS],[net-snmp-config],[`net-snmp-config --cflags`],[none])
++if test x"${SNMP_LIBS}" = "xnone"; then
++AC_MSG_ERROR([net-snmp-config not found, please install the development package of net-snmp])
++else
++AC_MSG_RESULT([found net-snmp-config])
++fi
++])
+Index: libdessert0.86-0.86.14/m4/pcap.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/pcap.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,10 @@
++AC_DEFUN([AC_CHECK_PCAP],[
++AC_MSG_CHECKING([Searching for pcap lib])
++AC_CHECK_PROG([PCAP_LIBS],[pcap-config],[`pcap-config --libs`],[none])
++AC_CHECK_PROG([PCAP_CFLGAS],[pcap-config],[`pcap-config --cflags`],[none])
++if test x"${PCAP_LIBS}" = "xnone"; then
++AC_MSG_ERROR([pcap-config not found, please install the development package of libpcap])
++else
++AC_MSG_RESULT([found pcap])
++fi
++])
+Index: libdessert0.86-0.86.14/missing
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/missing 2009-12-09 16:38:27.264756682 +0100
+@@ -0,0 +1,376 @@
++#! /bin/sh
++# Common stub for a few missing GNU programs while installing.
++
++scriptversion=2009-04-28.21; # UTC
++
++# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
++# 2008, 2009 Free Software Foundation, Inc.
++# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
++
++# 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, see <http://www.gnu.org/licenses/>.
++
++# 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.
++
++if test $# -eq 0; then
++ echo 1>&2 "Try \`$0 --help' for more information"
++ exit 1
++fi
++
++run=:
++sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
++sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
++
++# In the cases where this matters, `missing' is being run in the
++# srcdir already.
++if test -f configure.ac; then
++ configure_ac=configure.ac
++else
++ configure_ac=configure.in
++fi
++
++msg="missing on your system"
++
++case $1 in
++--run)
++ # Try to run requested program, and just exit if it succeeds.
++ run=
++ shift
++ "$@" && exit 0
++ # Exit code 63 means version mismatch. This often happens
++ # when the user try to use an ancient version of a tool on
++ # a file that requires a minimum version. In this case we
++ # we should proceed has if the program had been absent, or
++ # if --run hadn't been passed.
++ if test $? = 63; then
++ run=:
++ msg="probably too old"
++ fi
++ ;;
++
++ -h|--h|--he|--hel|--help)
++ echo "\
++$0 [OPTION]... PROGRAM [ARGUMENT]...
++
++Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
++error status if there is no known handling for PROGRAM.
++
++Options:
++ -h, --help display this help and exit
++ -v, --version output version information and exit
++ --run try to run the given command, and emulate it if it fails
++
++Supported PROGRAM values:
++ aclocal touch file \`aclocal.m4'
++ autoconf touch file \`configure'
++ autoheader touch file \`config.h.in'
++ autom4te touch the output file, or create a stub one
++ automake touch all \`Makefile.in' files
++ bison create \`y.tab.[ch]', if possible, from existing .[ch]
++ flex create \`lex.yy.c', if possible, from existing .c
++ help2man touch the output file
++ lex create \`lex.yy.c', if possible, from existing .c
++ makeinfo touch the output file
++ tar try tar, gnutar, gtar, then tar without non-portable flags
++ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
++
++Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
++\`g' are ignored when checking the name.
++
++Send bug reports to <bug-automake@gnu.org>."
++ exit $?
++ ;;
++
++ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
++ echo "missing $scriptversion (GNU Automake)"
++ exit $?
++ ;;
++
++ -*)
++ echo 1>&2 "$0: Unknown \`$1' option"
++ echo 1>&2 "Try \`$0 --help' for more information"
++ exit 1
++ ;;
++
++esac
++
++# normalize program name to check for.
++program=`echo "$1" | sed '
++ s/^gnu-//; t
++ s/^gnu//; t
++ s/^g//; t'`
++
++# Now exit if we have it, but it failed. Also exit now if we
++# don't have it and --version was passed (most likely to detect
++# the program). This is about non-GNU programs, so use $1 not
++# $program.
++case $1 in
++ lex*|yacc*)
++ # Not GNU programs, they don't have --version.
++ ;;
++
++ tar*)
++ if test -n "$run"; then
++ echo 1>&2 "ERROR: \`tar' requires --run"
++ exit 1
++ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
++ exit 1
++ fi
++ ;;
++
++ *)
++ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
++ # We have it, but it failed.
++ exit 1
++ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
++ # Could not run --version or --help. This is probably someone
++ # running `$TOOL --version' or `$TOOL --help' to check whether
++ # $TOOL exists and not knowing $TOOL uses missing.
++ exit 1
++ fi
++ ;;
++esac
++
++# If it does not exist, or fails to run (possibly an outdated version),
++# try to emulate it.
++case $program in
++ aclocal*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
++ to install the \`Automake' and \`Perl' packages. Grab them from
++ any GNU archive site."
++ touch aclocal.m4
++ ;;
++
++ autoconf*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified \`${configure_ac}'. You might want to install the
++ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
++ archive site."
++ touch configure
++ ;;
++
++ autoheader*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified \`acconfig.h' or \`${configure_ac}'. You might want
++ to install the \`Autoconf' and \`GNU m4' packages. Grab them
++ from any GNU archive site."
++ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
++ test -z "$files" && files="config.h"
++ touch_files=
++ for f in $files; do
++ case $f in
++ *:*) touch_files="$touch_files "`echo "$f" |
++ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
++ *) touch_files="$touch_files $f.in";;
++ esac
++ done
++ touch $touch_files
++ ;;
++
++ automake*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
++ You might want to install the \`Automake' and \`Perl' packages.
++ Grab them from any GNU archive site."
++ find . -type f -name Makefile.am -print |
++ sed 's/\.am$/.in/' |
++ while read f; do touch "$f"; done
++ ;;
++
++ autom4te*)
++ echo 1>&2 "\
++WARNING: \`$1' is needed, but is $msg.
++ You might have modified some files without having the
++ proper tools for further handling them.
++ You can get \`$1' as part of \`Autoconf' from any GNU
++ archive site."
++
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
++ if test -f "$file"; then
++ touch $file
++ else
++ test -z "$file" || exec >$file
++ echo "#! /bin/sh"
++ echo "# Created by GNU Automake missing as a replacement of"
++ echo "# $ $@"
++ echo "exit 0"
++ chmod +x $file
++ exit 1
++ fi
++ ;;
++
++ bison*|yacc*)
++ echo 1>&2 "\
++WARNING: \`$1' $msg. You should only need it if
++ you modified a \`.y' file. You may need the \`Bison' package
++ in order for those modifications to take effect. You can get
++ \`Bison' from any GNU archive site."
++ rm -f y.tab.c y.tab.h
++ if test $# -ne 1; then
++ eval LASTARG="\${$#}"
++ case $LASTARG in
++ *.y)
++ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
++ if test -f "$SRCFILE"; then
++ cp "$SRCFILE" y.tab.c
++ fi
++ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
++ if test -f "$SRCFILE"; then
++ cp "$SRCFILE" y.tab.h
++ fi
++ ;;
++ esac
++ fi
++ if test ! -f y.tab.h; then
++ echo >y.tab.h
++ fi
++ if test ! -f y.tab.c; then
++ echo 'main() { return 0; }' >y.tab.c
++ fi
++ ;;
++
++ lex*|flex*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified a \`.l' file. You may need the \`Flex' package
++ in order for those modifications to take effect. You can get
++ \`Flex' from any GNU archive site."
++ rm -f lex.yy.c
++ if test $# -ne 1; then
++ eval LASTARG="\${$#}"
++ case $LASTARG in
++ *.l)
++ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
++ if test -f "$SRCFILE"; then
++ cp "$SRCFILE" lex.yy.c
++ fi
++ ;;
++ esac
++ fi
++ if test ! -f lex.yy.c; then
++ echo 'main() { return 0; }' >lex.yy.c
++ fi
++ ;;
++
++ help2man*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified a dependency of a manual page. You may need the
++ \`Help2man' package in order for those modifications to take
++ effect. You can get \`Help2man' from any GNU archive site."
++
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
++ if test -f "$file"; then
++ touch $file
++ else
++ test -z "$file" || exec >$file
++ echo ".ab help2man is required to generate this page"
++ exit $?
++ fi
++ ;;
++
++ makeinfo*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified a \`.texi' or \`.texinfo' file, or any other file
++ indirectly affecting the aspect of the manual. The spurious
++ call might also be the consequence of using a buggy \`make' (AIX,
++ DU, IRIX). You might want to install the \`Texinfo' package or
++ the \`GNU make' package. Grab either from any GNU archive site."
++ # The file to touch is that specified with -o ...
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
++ if test -z "$file"; then
++ # ... or it is the one specified with @setfilename ...
++ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
++ file=`sed -n '
++ /^@setfilename/{
++ s/.* \([^ ]*\) *$/\1/
++ p
++ q
++ }' $infile`
++ # ... or it is derived from the source name (dir/f.texi becomes f.info)
++ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
++ fi
++ # If the file does not exist, the user really needs makeinfo;
++ # let's fail without touching anything.
++ test -f $file || exit 1
++ touch $file
++ ;;
++
++ tar*)
++ shift
++
++ # We have already tried tar in the generic part.
++ # Look for gnutar/gtar before invocation to avoid ugly error
++ # messages.
++ if (gnutar --version > /dev/null 2>&1); then
++ gnutar "$@" && exit 0
++ fi
++ if (gtar --version > /dev/null 2>&1); then
++ gtar "$@" && exit 0
++ fi
++ firstarg="$1"
++ if shift; then
++ case $firstarg in
++ *o*)
++ firstarg=`echo "$firstarg" | sed s/o//`
++ tar "$firstarg" "$@" && exit 0
++ ;;
++ esac
++ case $firstarg in
++ *h*)
++ firstarg=`echo "$firstarg" | sed s/h//`
++ tar "$firstarg" "$@" && exit 0
++ ;;
++ esac
++ fi
++
++ echo 1>&2 "\
++WARNING: I can't seem to be able to run \`tar' with the given arguments.
++ You may want to install GNU tar or Free paxutils, or check the
++ command line arguments."
++ exit 1
++ ;;
++
++ *)
++ echo 1>&2 "\
++WARNING: \`$1' is needed, and is $msg.
++ You might have modified some files without having the
++ proper tools for further handling them. Check the \`README' file,
++ it often tells you about the needed prerequisites for installing
++ this package. You may also peek at any GNU archive site, in case
++ some other package would contain this missing \`$1' program."
++ exit 1
++ ;;
++esac
++
++exit 0
++
++# 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:
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,231 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/** \page MFD helper for dessertAppParamsTable
+- *
+- * \section intro Introduction
+- * Introductory text.
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-
+-#include <net-snmp/agent/mib_modules.h>
+-
+-#include "dessertAppParamsTable_interface.h"
+-
+-oid dessertAppParamsTable_oid[] =
+- { DESSERTAPPPARAMSTABLE_OID };
+-int dessertAppParamsTable_oid_size =
+-OID_LENGTH(dessertAppParamsTable_oid);
+-
+-dessertAppParamsTable_registration dessertAppParamsTable_user_context;
+-
+-void initialize_table_dessertAppParamsTable(void);
+-void shutdown_table_dessertAppParamsTable(void);
+-
+-
+-/**
+- * Initializes the dessertAppParamsTable module
+- */
+-void
+-init_dessertAppParamsTable(void)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:init_dessertAppParamsTable",
+- "called\n"));
+-
+- /*
+- * TODO:300:o: Perform dessertAppParamsTable one-time module initialization.
+- */
+-
+- /*
+- * here we initialize all the tables we're planning on supporting
+- */
+- if (should_init("dessertAppParamsTable"))
+- initialize_table_dessertAppParamsTable();
+-
+-} /* init_dessertAppParamsTable */
+-
+-/**
+- * Shut-down the dessertAppParamsTable module (agent is exiting)
+- */
+-void
+-shutdown_dessertAppParamsTable(void)
+-{
+- if (should_init("dessertAppParamsTable"))
+- shutdown_table_dessertAppParamsTable();
+-
+-}
+-
+-/**
+- * Initialize the table dessertAppParamsTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-initialize_table_dessertAppParamsTable(void)
+-{
+- dessertAppParamsTable_registration *user_context;
+- u_long flags;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:initialize_table_dessertAppParamsTable", "called\n"));
+-
+- /*
+- * TODO:301:o: Perform dessertAppParamsTable one-time table initialization.
+- */
+-
+- /*
+- * TODO:302:o: |->Initialize dessertAppParamsTable user context
+- * if you'd like to pass in a pointer to some data for this
+- * table, allocate or set it up here.
+- */
+- /*
+- * a netsnmp_data_list is a simple way to store void pointers. A simple
+- * string token is used to add, find or remove pointers.
+- */
+- user_context =
+- netsnmp_create_data_list("dessertAppParamsTable", NULL, NULL);
+-
+- /*
+- * No support for any flags yet, but in the future you would
+- * set any flags here.
+- */
+- flags = 0;
+-
+- /*
+- * call interface initialization code
+- */
+- _dessertAppParamsTable_initialize_interface(user_context, flags);
+-} /* initialize_table_dessertAppParamsTable */
+-
+-/**
+- * Shutdown the table dessertAppParamsTable
+- */
+-void
+-shutdown_table_dessertAppParamsTable(void)
+-{
+- /*
+- * call interface shutdown code
+- */
+- _dessertAppParamsTable_shutdown_interface
+- (&dessertAppParamsTable_user_context);
+-}
+-
+-/**
+- * extra context initialization (eg default values)
+- *
+- * @param rowreq_ctx : row request context
+- * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+- *
+- * @retval MFD_SUCCESS : no errors
+- * @retval MFD_ERROR : error (context allocate will fail)
+- */
+-int
+-dessertAppParamsTable_rowreq_ctx_init(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, void *user_init_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_rowreq_ctx_init", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:210:o: |-> Perform extra dessertAppParamsTable rowreq initialization. (eg DEFVALS)
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_rowreq_ctx_init */
+-
+-/**
+- * extra context cleanup
+- *
+- */
+-void
+-dessertAppParamsTable_rowreq_ctx_cleanup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_rowreq_ctx_cleanup", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:211:o: |-> Perform extra dessertAppParamsTable rowreq cleanup.
+- */
+-} /* dessertAppParamsTable_rowreq_ctx_cleanup */
+-
+-/**
+- * pre-request callback
+- *
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error
+- */
+-int
+-dessertAppParamsTable_pre_request(dessertAppParamsTable_registration *
+- user_context)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_pre_request", "called\n"));
+-
+- /*
+- * TODO:510:o: Perform dessertAppParamsTable pre-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_pre_request */
+-
+-/**
+- * post-request callback
+- *
+- * Note:
+- * New rows have been inserted into the container, and
+- * deleted rows have been removed from the container and
+- * released.
+- *
+- * @param user_context
+- * @param rc : MFD_SUCCESS if all requests succeeded
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error (ignored)
+- */
+-int
+-dessertAppParamsTable_post_request(dessertAppParamsTable_registration *
+- user_context, int rc)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_post_request", "called\n"));
+-
+- /*
+- * TODO:511:o: Perform dessertAppParamsTable post-request actions.
+- */
+-
+- /*
+- * check to set if any rows were changed.
+- */
+- if (dessertAppParamsTable_dirty_get()) {
+- /*
+- * check if request was successful. If so, this would be
+- * a good place to save data to its persistent store.
+- */
+- if (MFD_SUCCESS == rc) {
+- /*
+- * save changed rows, if you haven't already
+- */
+- }
+-
+- dessertAppParamsTable_dirty_set(0); /* clear table dirty flag */
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_post_request */
+-
+-
+-/** @{ */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,252 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_H
+-#define DESSERTAPPPARAMSTABLE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-/** @addtogroup misc misc: Miscellaneous routines
+- *
+- * @{
+- */
+-#include <net-snmp/library/asn1.h>
+-
+- /*
+- * other required module components
+- */
+- /* *INDENT-OFF* */
+-config_add_mib(DESSERT-MIB)
+-config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_interface)
+-config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_access)
+-config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_get)
+-config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_set)
+- /* *INDENT-ON* */
+-
+- /*
+- * OID and column number definitions for dessertAppParamsTable
+- */
+-#include "dessertAppParamsTable_oids.h"
+-
+- /*
+- * enum definions
+- */
+-#include "dessertAppParamsTable_enums.h"
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+- void init_dessertAppParamsTable(void);
+- void shutdown_dessertAppParamsTable(void);
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+- /*
+- *********************************************************************
+- * When you register your mib, you get to provide a generic
+- * pointer that will be passed back to you for most of the
+- * functions calls.
+- *
+- * TODO:100:r: Review all context structures
+- */
+- /*
+- * TODO:101:o: |-> Review dessertAppParamsTable registration context.
+- */
+- typedef netsnmp_data_list dessertAppParamsTable_registration;
+-
+-/**********************************************************************/
+- /*
+- * TODO:110:r: |-> Review dessertAppParamsTable data context structure.
+- * This structure is used to represent the data for dessertAppParamsTable.
+- */
+- /*
+- * This structure contains storage for all the columns defined in the
+- * dessertAppParamsTable.
+- */
+- typedef struct dessertAppParamsTable_data_s {
+-
+- /*
+- * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appParamsName[255];
+- size_t appParamsName_len; /* # of char elements, not bytes */
+-
+- /*
+- * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appParamsDesc[255];
+- size_t appParamsDesc_len; /* # of char elements, not bytes */
+-
+- /*
+- * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- u_long appParamsValueType;
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- u_long appParamsTruthValue;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- long appParamsInteger32;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- u_long appParamsUnsigned32;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- char appParamsOctetString[1024];
+- size_t appParamsOctetString_len; /* # of char elements, not bytes */
+-
+- } dessertAppParamsTable_data;
+-
+-
+- /*
+- *********************************************************************
+- * TODO:115:o: |-> Review dessertAppParamsTable undo context.
+- * We're just going to use the same data structure for our
+- * undo_context. If you want to do something more efficent,
+- * define your typedef here.
+- */
+- typedef dessertAppParamsTable_data dessertAppParamsTable_undo_data;
+-
+- /*
+- * TODO:120:r: |-> Review dessertAppParamsTable mib index.
+- * This structure is used to represent the index for dessertAppParamsTable.
+- */
+- typedef struct dessertAppParamsTable_mib_index_s {
+-
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- long appParamsIndex;
+-
+-
+- } dessertAppParamsTable_mib_index;
+-
+- /*
+- * TODO:121:r: | |-> Review dessertAppParamsTable max index length.
+- * If you KNOW that your indexes will never exceed a certain
+- * length, update this macro to that length.
+- */
+-#define MAX_dessertAppParamsTable_IDX_LEN 1
+-
+-
+- /*
+- *********************************************************************
+- * TODO:130:o: |-> Review dessertAppParamsTable Row request (rowreq) context.
+- * When your functions are called, you will be passed a
+- * dessertAppParamsTable_rowreq_ctx pointer.
+- */
+- typedef struct dessertAppParamsTable_rowreq_ctx_s {
+-
+- /** this must be first for container compare to work */
+- netsnmp_index oid_idx;
+- oid oid_tmp[MAX_dessertAppParamsTable_IDX_LEN];
+-
+- dessertAppParamsTable_mib_index tbl_idx;
+-
+- dessertAppParamsTable_data data;
+- unsigned int column_exists_flags; /* flags for existence */
+- dessertAppParamsTable_undo_data *undo;
+- unsigned int column_set_flags; /* flags for set columns */
+-
+-
+- /*
+- * flags per row. Currently, the first (lower) 8 bits are reserved
+- * for the user. See mfd.h for other flags.
+- */
+- u_int rowreq_flags;
+-
+- /*
+- * TODO:131:o: | |-> Add useful data to dessertAppParamsTable rowreq context.
+- */
+-
+- /*
+- * storage for future expansion
+- */
+- netsnmp_data_list *dessertAppParamsTable_data_list;
+-
+- } dessertAppParamsTable_rowreq_ctx;
+-
+- typedef struct dessertAppParamsTable_ref_rowreq_ctx_s {
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
+- } dessertAppParamsTable_ref_rowreq_ctx;
+-
+- /*
+- *********************************************************************
+- * function prototypes
+- */
+- int
+- dessertAppParamsTable_pre_request
+- (dessertAppParamsTable_registration * user_context);
+- int
+- dessertAppParamsTable_post_request
+- (dessertAppParamsTable_registration * user_context, int rc);
+-
+- int
+- dessertAppParamsTable_rowreq_ctx_init
+- (dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- void *user_init_ctx);
+- void
+- dessertAppParamsTable_rowreq_ctx_cleanup
+- (dessertAppParamsTable_rowreq_ctx * rowreq_ctx);
+-
+- int
+- dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- dessertAppParamsTable_rowreq_ctx
+- *dessertAppParamsTable_row_find_by_mib_index
+- (dessertAppParamsTable_mib_index * mib_idx);
+-
+- extern oid dessertAppParamsTable_oid[];
+- extern int dessertAppParamsTable_oid_size;
+-
+-
+-#include "dessertAppParamsTable_interface.h"
+-#include "dessertAppParamsTable_data_access.h"
+-#include "dessertAppParamsTable_data_get.h"
+-#include "dessertAppParamsTable_data_set.h"
+-
+- /*
+- * DUMMY markers, ignore
+- *
+- * TODO:099:x: *************************************************************
+- * TODO:199:x: *************************************************************
+- * TODO:299:x: *************************************************************
+- * TODO:399:x: *************************************************************
+- * TODO:499:x: *************************************************************
+- */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_access.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_access.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,352 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-#include "dessertAppParamsTable_data_access.h"
+-#include "../dessert.h"
+-#include "../dessert_internal.h"
+-
+-
+-/** @ingroup interface
+- * @addtogroup data_access data_access: Routines to access data
+- *
+- * These routines are used to locate the data used to satisfy
+- * requests.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-
+-/**
+- * initialization for dessertAppParamsTable data access
+- *
+- * This function is called during startup to allow you to
+- * allocate any resources you need for the data table.
+- *
+- * @param dessertAppParamsTable_reg
+- * Pointer to dessertAppParamsTable_registration
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : unrecoverable error.
+- */
+-int
+-dessertAppParamsTable_init_data(dessertAppParamsTable_registration *
+- dessertAppParamsTable_reg)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_init_data", "called\n"));
+-
+- /*
+- * TODO:303:o: Initialize dessertAppParamsTable data.
+- */
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_init_data */
+-
+-/**
+- * container overview
+- *
+- */
+-
+-/**
+- * container initialization
+- *
+- * @param container_ptr_ptr A pointer to a container pointer. If you
+- * create a custom container, use this parameter to return it
+- * to the MFD helper. If set to NULL, the MFD helper will
+- * allocate a container for you.
+- *
+- * This function is called at startup to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases. If no custom
+- * container is allocated, the MFD code will create one for your.
+- *
+- * @remark
+- * This would also be a good place to do any initialization needed
+- * for you data source. For example, opening a connection to another
+- * process that will supply the data, opening a database, etc.
+- */
+-void
+-dessertAppParamsTable_container_init(netsnmp_container **
+- container_ptr_ptr, netsnmp_cache * cache)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_init", "called\n"));
+-
+- if (NULL == container_ptr_ptr) {
+- snmp_log(LOG_ERR,
+- "bad container param to dessertAppParamsTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * For advanced users, you can use a custom container. If you
+- * do not create one, one will be created for you.
+- */
+- *container_ptr_ptr = NULL;
+- if (NULL == cache) {
+- snmp_log(LOG_ERR,
+- "bad cache param to dessertAppParamsTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * TODO:345:A: Set up dessertAppStatsTable cache properties.
+- *
+- * Also for advanced users, you can set parameters for the
+- * cache. Do not change the magic pointer, as it is used
+- * by the MFD helper. To completely disable caching, set
+- * cache->enabled to 0.
+- */
+- cache->timeout = DESSERTAPPPARAMSTABLE_CACHE_TIMEOUT; /* seconds */
+-} /* dessertAppParamsTable_container_init */
+-
+-/**
+- * container shutdown
+- *
+- * @param container_ptr A pointer to the container.
+- *
+- * This function is called at shutdown to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases.
+- *
+- * This function is called before dessertAppParamsTable_container_free().
+- *
+- * @remark
+- * This would also be a good place to do any cleanup needed
+- * for you data source. For example, closing a connection to another
+- * process that supplied the data, closing a database, etc.
+- */
+-void
+-dessertAppParamsTable_container_shutdown(netsnmp_container * container_ptr)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_shutdown", "called\n"));
+-
+- if (NULL == container_ptr) {
+- snmp_log(LOG_ERR,
+- "bad params to dessertAppParamsTable_container_shutdown\n");
+- return;
+- }
+-
+-} /* dessertAppParamsTable_container_shutdown */
+-
+-/**
+- * load initial data
+- *
+- * TODO:350:M: Implement dessertAppParamsTable data load
+- *
+- * @param container container to which items should be inserted
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+- * @retval MFD_ERROR : other error.
+- *
+- * This function is called to load the index(es) (and data, optionally)
+- * for the every row in the data set.
+- *
+- * @remark
+- * While loading the data, the only important thing is the indexes.
+- * If access to your data is cheap/fast (e.g. you have a pointer to a
+- * structure in memory), it would make sense to update the data here.
+- * If, however, the accessing the data invovles more work (e.g. parsing
+- * some other existing data, or peforming calculations to derive the data),
+- * then you can limit yourself to setting the indexes and saving any
+- * information you will need later. Then use the saved information in
+- * dessertAppParamsTable_row_prep() for populating data.
+- *
+- * @note
+- * If you need consistency between rows (like you want statistics
+- * for each row to be from the same time frame), you should set all
+- * data here.
+- *
+- */
+-int
+-dessertAppParamsTable_container_load(netsnmp_container * container)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
+- size_t count = 0;
+-
+- dessert_agentx_appparams_t *appparams_list = NULL;
+- dessert_agentx_appparams_t *appparam;
+-
+- /*
+- * temporary storage for index values
+- */
+- long appParamsIndex;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_load", "called\n"));
+- dessert_debug("dessertAppParamsTable_container_load called");
+-
+- /* harvest the appparams from the getter callbacks registered via *dessert_agentx_appparams_add* */
+- if (_dessert_agentx_appparams_harvest_callbacks(&appparams_list)
+- == DESSERT_ERR) {
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+-
+- /*
+- * TODO:351:M: |-> Load/update data in the dessertAppParamsTable container.
+- * loop over your dessertAppParamsTable data, allocate a rowreq context,
+- * set the index(es) [and data, optionally] and insert into
+- * the container.
+- */
+- DL_FOREACH(appparams_list, appparam) {
+-
+- appParamsIndex = appparam->index;
+-
+- /*
+- * TODO:352:M: | |-> set indexes in new dessertAppParamsTable rowreq context.
+- * data context will be set from the param (unless NULL,
+- * in which case a new data context will be allocated)
+- */
+- rowreq_ctx = dessertAppParamsTable_allocate_rowreq_ctx();
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "memory allocation failed\n");
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+- if (MFD_SUCCESS !=
+- dessertAppParamsTable_indexes_set(rowreq_ctx,
+- appParamsIndex)) {
+- snmp_log(LOG_ERR,
+- "error setting index while loading "
+- "dessertAppParamsTable data.\n");
+- dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
+- continue;
+- }
+-
+- /* clear all column flags */
+- rowreq_ctx->column_exists_flags = 0;
+-
+- /* these columns are always present*/
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSNAME_FLAG
+- | COLUMN_APPPARAMSDESC_FLAG | COLUMN_APPPARAMSVALUETYPE_FLAG;
+-
+- rowreq_ctx->data.appParamsName_len = strlen(appparam->name);
+- strcpy(rowreq_ctx->data.appParamsName, appparam->name);
+-
+- rowreq_ctx->data.appParamsDesc_len = strlen(appparam->desc);
+- strcpy(rowreq_ctx->data.appParamsDesc, appparam->desc);
+-
+- appParamsValueType_map(&(rowreq_ctx->data.appParamsValueType), appparam->value_type);
+-
+- /* which of the 'value'-columns is actually present? */
+- switch (appparam->value_type) {
+-
+- case DESSERT_APPPARAMS_VALUETYPE_BOOL:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- appParamsTruthValue_map(&(rowreq_ctx->data.appParamsTruthValue) , appparam->bool);
+-
+- break;
+-
+- case DESSERT_APPPARAMS_VALUETYPE_INT32:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
+- rowreq_ctx->data.appParamsInteger32 = appparam->int32;
+-
+- break;
+-
+- case DESSERT_APPPARAMS_VALUETYPE_UINT32:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- rowreq_ctx->data.appParamsUnsigned32 = appparam->uint32;
+-
+- break;
+-
+- case DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- rowreq_ctx->data.appParamsOctetString_len = appparam->octetstring_len;
+- memcpy(&(rowreq_ctx->data.appParamsOctetString), appparam->octetstring, appparam->octetstring_len);
+-
+- break;
+-
+- default:
+- dessert_err("appparam->value_type not valid!");
+- }
+-
+- /*
+- * insert into table container
+- */
+- CONTAINER_INSERT(container, rowreq_ctx);
+- }
+-
+- _dessert_agentx_appparams_free_list(&appparams_list);
+-
+- DEBUGMSGT(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_load", "inserted %d records\n", count));
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_container_load */
+-
+-/**
+- * container clean up
+- *
+- * @param container container with all current items
+- *
+- * This optional callback is called prior to all
+- * item's being removed from the container. If you
+- * need to do any processing before that, do it here.
+- *
+- * @note
+- * The MFD helper will take care of releasing all the row contexts.
+- *
+- */
+-void
+-dessertAppParamsTable_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_free", "called\n"));
+-
+- /*
+- * TODO:380:M: Free dessertAppParamsTable container data.
+- */
+-} /* dessertAppParamsTable_container_free */
+-
+-/**
+- * prepare row for processing.
+- *
+- * When the agent has located the row for a request, this function is
+- * called to prepare the row for processing. If you fully populated
+- * the data context during the index setup phase, you may not need to
+- * do anything.
+- *
+- * @param rowreq_ctx pointer to a context.
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- */
+-int
+-dessertAppParamsTable_row_prep(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_row_prep", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:390:o: Prepare row for request.
+- * If populating row data was delayed, this is the place to
+- * fill in the row for this request.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_row_prep */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_access.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_access.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,93 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_DATA_ACCESS_H
+-#define DESSERTAPPPARAMSTABLE_DATA_ACCESS_H
+-
+-#include "../dessert_internal.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-
+-
+- int
+- dessertAppParamsTable_init_data(dessertAppParamsTable_registration
+- * dessertAppParamsTable_reg);
+-
+-
+- /*
+- * TODO:180:o: Review dessertAppParamsTable cache timeout.
+- * The number of seconds before the cache times out
+- */
+-#define DESSERTAPPPARAMSTABLE_CACHE_TIMEOUT DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT
+-
+- void dessertAppParamsTable_container_init(netsnmp_container
+- **
+- container_ptr_ptr,
+- netsnmp_cache *
+- cache);
+- void
+- dessertAppParamsTable_container_shutdown(netsnmp_container *
+- container_ptr);
+-
+- int dessertAppParamsTable_container_load(netsnmp_container
+- * container);
+- void dessertAppParamsTable_container_free(netsnmp_container
+- * container);
+-
+- int dessertAppParamsTable_cache_load(netsnmp_container *
+- container);
+- void dessertAppParamsTable_cache_free(netsnmp_container *
+- container);
+-
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- *********************************************************************
+- * Since we have no idea how you really access your data, we'll go with
+- * a worst case example: a flat text file.
+- */
+-#define MAX_LINE_SIZE 256
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+- int
+- dessertAppParamsTable_row_prep(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_get.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_get.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,731 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-
+-
+-/** @defgroup data_get data_get: Routines to get data
+- *
+- * TODO:230:M: Implement dessertAppParamsTable get routines.
+- * TODO:240:M: Implement dessertAppParamsTable mapping routines (if any).
+- *
+- * These routine are used to get the value for individual objects. The
+- * row context is passed, along with a pointer to the memory where the
+- * value should be copied.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-
+-/*
+- * ---------------------------------------------------------------------
+- * * TODO:200:r: Implement dessertAppParamsTable data context functions.
+- */
+-
+-
+-/**
+- * set mib index(es)
+- *
+- * @param tbl_idx mib index structure
+- * @param appParamsIndex_val
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This convenience function is useful for setting all the MIB index
+- * components with a single function call. It is assume that the C values
+- * have already been mapped from their native/rawformat to the MIB format.
+- */
+-int
+-dessertAppParamsTable_indexes_set_tbl_idx(dessertAppParamsTable_mib_index *
+- tbl_idx, long appParamsIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_indexes_set_tbl_idx", "called\n"));
+-
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- tbl_idx->appParamsIndex = appParamsIndex_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_indexes_set_tbl_idx */
+-
+-/**
+- * @internal
+- * set row context indexes
+- *
+- * @param reqreq_ctx the row context that needs updated indexes
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This function sets the mib indexs, then updates the oid indexs
+- * from the mib index.
+- */
+-int
+-dessertAppParamsTable_indexes_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, long appParamsIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_indexes_set", "called\n"));
+-
+- if (MFD_SUCCESS !=
+- dessertAppParamsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+- appParamsIndex_val))
+- return MFD_ERROR;
+-
+- /*
+- * convert mib index to oid index
+- */
+- rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+- if (0 != dessertAppParamsTable_index_to_oid(&rowreq_ctx->oid_idx,
+- &rowreq_ctx->tbl_idx)) {
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_indexes_set */
+-
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsName
+- * appParamsName is subid 2 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.2
+- * Description:
+-The name of the parameter.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the appParamsName data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsName_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appParamsName_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appParamsName.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appParamsName_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appParamsName_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appParamsName_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- char **appParamsName_val_ptr_ptr,
+- size_t *appParamsName_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appParamsName_val_ptr_ptr)
+- && (NULL != *appParamsName_val_ptr_ptr));
+- netsnmp_assert(NULL != appParamsName_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsName_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsName data.
+- * copy (* appParamsName_val_ptr_ptr ) data and (* appParamsName_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appParamsName data
+- */
+- if ((NULL == (*appParamsName_val_ptr_ptr)) ||
+- ((*appParamsName_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appParamsName_len *
+- sizeof(rowreq_ctx->data.appParamsName[0])))) {
+- /*
+- * allocate space for appParamsName data
+- */
+- (*appParamsName_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appParamsName_len *
+- sizeof(rowreq_ctx->data.appParamsName[0]));
+- if (NULL == (*appParamsName_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appParamsName_val_ptr_len_ptr) =
+- rowreq_ctx->data.appParamsName_len *
+- sizeof(rowreq_ctx->data.appParamsName[0]);
+- memcpy((*appParamsName_val_ptr_ptr), rowreq_ctx->data.appParamsName,
+- rowreq_ctx->data.appParamsName_len *
+- sizeof(rowreq_ctx->data.appParamsName[0]));
+-
+- return MFD_SUCCESS;
+-} /* appParamsName_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsDesc
+- * appParamsDesc is subid 3 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.3
+- * Description:
+-A short description of the parameter
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the appParamsDesc data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsDesc_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appParamsDesc_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appParamsDesc.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appParamsDesc_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appParamsDesc_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appParamsDesc_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- char **appParamsDesc_val_ptr_ptr,
+- size_t *appParamsDesc_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appParamsDesc_val_ptr_ptr)
+- && (NULL != *appParamsDesc_val_ptr_ptr));
+- netsnmp_assert(NULL != appParamsDesc_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsDesc_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsDesc data.
+- * copy (* appParamsDesc_val_ptr_ptr ) data and (* appParamsDesc_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appParamsDesc data
+- */
+- if ((NULL == (*appParamsDesc_val_ptr_ptr)) ||
+- ((*appParamsDesc_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appParamsDesc_len *
+- sizeof(rowreq_ctx->data.appParamsDesc[0])))) {
+- /*
+- * allocate space for appParamsDesc data
+- */
+- (*appParamsDesc_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appParamsDesc_len *
+- sizeof(rowreq_ctx->data.appParamsDesc[0]));
+- if (NULL == (*appParamsDesc_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appParamsDesc_val_ptr_len_ptr) =
+- rowreq_ctx->data.appParamsDesc_len *
+- sizeof(rowreq_ctx->data.appParamsDesc[0]);
+- memcpy((*appParamsDesc_val_ptr_ptr), rowreq_ctx->data.appParamsDesc,
+- rowreq_ctx->data.appParamsDesc_len *
+- sizeof(rowreq_ctx->data.appParamsDesc[0]));
+-
+- return MFD_SUCCESS;
+-} /* appParamsDesc_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsValueType
+- * appParamsValueType is subid 4 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.4
+- * Description:
+-Indicates which of the columns (appParamsTruthValue,
+- appParamsInterger32, appParamsUInteger32, appParamsOctetString) in the
+- dessertAppParamsTable is actually valid.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- * Enum range: 3/8. Values: bool(0), int32(1), uint32(2), counter64(3), octetstring(4)
+- *
+- * Its syntax is DessertAppValueType (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appParamsValueType.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appParamsValueType_map(u_long * mib_appParamsValueType_val_ptr,
+- u_long raw_appParamsValueType_val)
+-{
+- netsnmp_assert(NULL != mib_appParamsValueType_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsValueType_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appParamsValueType enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appParamsValueType_val) {
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_BOOL:
+- *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_BOOL;
+- break;
+-
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_INT32:
+- *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_INT32;
+- break;
+-
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_UINT32:
+- *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_UINT32;
+- break;
+-
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_OCTETSTRING:
+- *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_OCTETSTRING;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't map value %ld for appParamsValueType\n",
+- raw_appParamsValueType_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appParamsValueType_map */
+-
+-/**
+- * Extract the current value of the appParamsValueType data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsValueType_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appParamsValueType_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appParamsValueType_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appParamsValueType_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsValueType_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsValueType data.
+- * copy (* appParamsValueType_val_ptr ) from rowreq_ctx->data
+- */
+- (*appParamsValueType_val_ptr) = rowreq_ctx->data.appParamsValueType;
+-
+- return MFD_SUCCESS;
+-} /* appParamsValueType_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsTruthValue
+- * appParamsTruthValue is subid 5 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.5
+- * Description:
+-A parameter with TruthValue semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- * Enum range: 2/8. Values: true(1), false(2)
+- *
+- * Its syntax is TruthValue (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appParamsTruthValue.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appParamsTruthValue_map(u_long * mib_appParamsTruthValue_val_ptr,
+- u_long raw_appParamsTruthValue_val)
+-{
+- netsnmp_assert(NULL != mib_appParamsTruthValue_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appParamsTruthValue enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appParamsTruthValue_val) {
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE:
+- *mib_appParamsTruthValue_val_ptr = TRUTHVALUE_TRUE;
+- break;
+-
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE:
+- *mib_appParamsTruthValue_val_ptr = TRUTHVALUE_FALSE;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't map value %ld for appParamsTruthValue\n",
+- raw_appParamsTruthValue_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_map */
+-
+-/**
+- * Extract the current value of the appParamsTruthValue data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsTruthValue_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appParamsTruthValue_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appParamsTruthValue_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appParamsTruthValue_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsTruthValue data.
+- * copy (* appParamsTruthValue_val_ptr ) from rowreq_ctx->data
+- */
+- (*appParamsTruthValue_val_ptr) = rowreq_ctx->data.appParamsTruthValue;
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsInteger32
+- * appParamsInteger32 is subid 6 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.6
+- * Description:
+-A parameter with Integer32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- *
+- * Its syntax is INTEGER32 (based on perltype INTEGER32)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+- */
+-/**
+- * Extract the current value of the appParamsInteger32 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsInteger32_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appParamsInteger32_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- long *appParamsInteger32_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appParamsInteger32_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsInteger32 data.
+- * copy (* appParamsInteger32_val_ptr ) from rowreq_ctx->data
+- */
+- (*appParamsInteger32_val_ptr) = rowreq_ctx->data.appParamsInteger32;
+-
+- return MFD_SUCCESS;
+-} /* appParamsInteger32_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsUnsigned32
+- * appParamsUnsigned32 is subid 7 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.7
+- * Description:
+-A parameter with Unsigned32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- *
+- * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+- * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+- */
+-/**
+- * Extract the current value of the appParamsUnsigned32 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsUnsigned32_val_ptr
+- * Pointer to storage for a u_long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appParamsUnsigned32_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appParamsUnsigned32_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appParamsUnsigned32_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsUnsigned32 data.
+- * copy (* appParamsUnsigned32_val_ptr ) from rowreq_ctx->data
+- */
+- (*appParamsUnsigned32_val_ptr) = rowreq_ctx->data.appParamsUnsigned32;
+-
+- return MFD_SUCCESS;
+-} /* appParamsUnsigned32_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsOctetString
+- * appParamsOctetString is subid 9 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.9
+- * Description:
+-A parameter containing of up to 1024 octets.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 1
+- * hint: 1024a
+- *
+- * Ranges: 0 - 1024;
+- *
+- * Its syntax is DessertApplicationOctetString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 1024)
+- */
+-/**
+- * Extract the current value of the appParamsOctetString data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsOctetString_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appParamsOctetString_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appParamsOctetString.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appParamsOctetString_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appParamsOctetString_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appParamsOctetString_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- char **appParamsOctetString_val_ptr_ptr,
+- size_t *appParamsOctetString_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appParamsOctetString_val_ptr_ptr)
+- && (NULL != *appParamsOctetString_val_ptr_ptr));
+- netsnmp_assert(NULL != appParamsOctetString_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsOctetString data.
+- * copy (* appParamsOctetString_val_ptr_ptr ) data and (* appParamsOctetString_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appParamsOctetString data
+- */
+- if ((NULL == (*appParamsOctetString_val_ptr_ptr)) ||
+- ((*appParamsOctetString_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0])))) {
+- /*
+- * allocate space for appParamsOctetString data
+- */
+- (*appParamsOctetString_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0]));
+- if (NULL == (*appParamsOctetString_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appParamsOctetString_val_ptr_len_ptr) =
+- rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0]);
+- memcpy((*appParamsOctetString_val_ptr_ptr),
+- rowreq_ctx->data.appParamsOctetString,
+- rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0]));
+-
+- return MFD_SUCCESS;
+-} /* appParamsOctetString_get */
+-
+-
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_get.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_get.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,136 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- *
+- * @file dessertAppParamsTable_data_get.h
+- *
+- * @addtogroup get
+- *
+- * Prototypes for get functions
+- *
+- * @{
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_DATA_GET_H
+-#define DESSERTAPPPARAMSTABLE_DATA_GET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * GET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * GET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+- /*
+- * indexes
+- */
+- int appParamsIndex_map(long *mib_appParamsIndex_val_ptr,
+- long raw_appParamsIndex_val);
+-
+- int appParamsName_map(char **mib_appParamsName_val_ptr_ptr,
+- size_t
+- *mib_appParamsName_val_ptr_len_ptr,
+- char *raw_appParamsName_val_ptr,
+- size_t raw_appParamsName_val_ptr_len,
+- int allow_realloc);
+- int appParamsName_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appParamsName_val_ptr_ptr,
+- size_t
+- *appParamsName_val_ptr_len_ptr);
+- int appParamsDesc_map(char **mib_appParamsDesc_val_ptr_ptr,
+- size_t
+- *mib_appParamsDesc_val_ptr_len_ptr,
+- char *raw_appParamsDesc_val_ptr,
+- size_t raw_appParamsDesc_val_ptr_len,
+- int allow_realloc);
+- int appParamsDesc_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appParamsDesc_val_ptr_ptr,
+- size_t
+- *appParamsDesc_val_ptr_len_ptr);
+- int appParamsValueType_map(u_long *
+- mib_appParamsValueType_val_ptr,
+- u_long
+- raw_appParamsValueType_val);
+- int appParamsValueType_get(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long *
+- appParamsValueType_val_ptr);
+- int appParamsTruthValue_map(u_long *
+- mib_appParamsTruthValue_val_ptr,
+- u_long
+- raw_appParamsTruthValue_val);
+- int
+- appParamsTruthValue_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long * appParamsTruthValue_val_ptr);
+- int appParamsInteger32_map(long
+- *mib_appParamsInteger32_val_ptr,
+- long
+- raw_appParamsInteger32_val);
+- int appParamsInteger32_get(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- long
+- *appParamsInteger32_val_ptr);
+- int appParamsUnsigned32_map(u_long *
+- mib_appParamsUnsigned32_val_ptr,
+- u_long
+- raw_appParamsUnsigned32_val);
+- int
+- appParamsUnsigned32_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long * appParamsUnsigned32_val_ptr);
+- int appParamsOctetString_map(char
+- **mib_appParamsOctetString_val_ptr_ptr,
+- size_t
+- *mib_appParamsOctetString_val_ptr_len_ptr,
+- char
+- *raw_appParamsOctetString_val_ptr,
+- size_t
+- raw_appParamsOctetString_val_ptr_len,
+- int allow_realloc);
+- int
+- appParamsOctetString_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appParamsOctetString_val_ptr_ptr,
+- size_t
+- *appParamsOctetString_val_ptr_len_ptr);
+-
+-
+- int
+- dessertAppParamsTable_indexes_set_tbl_idx
+- (dessertAppParamsTable_mib_index * tbl_idx,
+- long appParamsIndex_val);
+- int
+- dessertAppParamsTable_indexes_set(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- long appParamsIndex_val);
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_DATA_GET_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_set.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_set.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1241 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-#include "dessertAppParamsTable_enums.h"
+-#include "../dessert_internal.h"
+-
+-
+-/** @defgroup data_set data_set: Routines to set data
+- *
+- * These routines are used to set the value for individual objects. The
+- * row context is passed, along with the new value.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+- /*
+- * NOTE: if you update this chart, please update the versions in
+- * local/mib2c-conf.d/parent-set.m2i
+- * agent/mibgroup/helpers/baby_steps.c
+- * while you're at it.
+- */
+- /*
+- ***********************************************************************
+- * Baby Steps Flow Chart (2004.06.05) *
+- * *
+- * +--------------+ +================+ U = unconditional path *
+- * |optional state| ||required state|| S = path for success *
+- * +--------------+ +================+ E = path for error *
+- ***********************************************************************
+- *
+- * +--------------+
+- * | pre |
+- * | request |
+- * +--------------+
+- * | U
+- * +==============+
+- * +----------------|| object ||
+- * | E || lookup ||
+- * | +==============+
+- * | | S
+- * | +==============+
+- * | E || check ||
+- * |<---------------|| values ||
+- * | +==============+
+- * | | S
+- * | +==============+
+- * | +<-------|| undo ||
+- * | | E || setup ||
+- * | | +==============+
+- * | | | S
+- * | | +==============+
+- * | | || set ||-------------------------->+
+- * | | || value || E |
+- * | | +==============+ |
+- * | | | S |
+- * | | +--------------+ |
+- * | | | check |-------------------------->|
+- * | | | consistency | E |
+- * | | +--------------+ |
+- * | | | S |
+- * | | +==============+ +==============+ |
+- * | | || commit ||-------->|| undo || |
+- * | | || || E || commit || |
+- * | | +==============+ +==============+ |
+- * | | | S U |<--------+
+- * | | +--------------+ +==============+
+- * | | | irreversible | || undo ||
+- * | | | commit | || set ||
+- * | | +--------------+ +==============+
+- * | | | U U |
+- * | +-------------->|<------------------------+
+- * | +==============+
+- * | || undo ||
+- * | || cleanup ||
+- * | +==============+
+- * +---------------------->| U
+- * +--------------+
+- * | post |
+- * | request |
+- * +--------------+
+- *
+- */
+-
+-/**
+- * Setup up context with information needed to undo a set request.
+- *
+- * This function will be called before the individual node undo setup
+- * functions are called. If you need to do any undo setup that is not
+- * related to a specific column, you can do it here.
+- *
+- * Note that the undo context has been allocated with
+- * dessertAppParamsTable_allocate_data(), but may need extra
+- * initialization similar to what you may have done in
+- * dessertAppParamsTable_rowreq_ctx_init().
+- * Note that an individual node's undo_setup function will only be called
+- * if that node is being set to a new value.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in the node's undo_setup
+- * function, so it won't be done unless it is necessary.
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- */
+-int
+-dessertAppParamsTable_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_setup", "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:451:M: |-> Setup dessertAppParamsTable undo.
+- * set up dessertAppParamsTable undo information, in preparation for a set.
+- * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
+- */
+-
+- return rc;
+-} /* dessertAppParamsTable_undo_setup */
+-
+-/**
+- * Undo a set request.
+- *
+- * This function will be called before the individual node undo
+- * functions are called. If you need to do any undo that is not
+- * related to a specific column, you can do it here.
+- *
+- * Note that an individual node's undo function will only be called
+- * if that node is being set to a new value.
+- *
+- * If there is anything specific to a particular column (e.g. releasing
+- * memory for a string), you should do that setup in the node's undo
+- * function, so it won't be done unless it is necessary.
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- */
+-int
+-dessertAppParamsTable_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo",
+- "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:451:M: |-> dessertAppParamsTable undo.
+- * dessertAppParamsTable undo information, in response to a failed set.
+- * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
+- */
+-
+- return rc;
+-} /* dessertAppParamsTable_undo_setup */
+-
+-/**
+- * Cleanup up context undo information.
+- *
+- * This function will be called after set/commit processing. If you
+- * allocated any resources in undo_setup, this is the place to release
+- * those resources.
+- *
+- * This function is called regardless of the success or failure of the set
+- * request. If you need to perform different steps for cleanup depending
+- * on success or failure, you can add a flag to the rowreq_ctx.
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error
+- */
+-int
+-dessertAppParamsTable_undo_cleanup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_cleanup", "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:452:M: |-> Cleanup dessertAppParamsTable undo.
+- * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
+- */
+-
+- return rc;
+-} /* dessertAppParamsTable_undo_cleanup */
+-
+-/**
+- * commit new values.
+- *
+- * At this point, you should have done everything you can to ensure that
+- * this commit will not fail.
+- *
+- * Should you need different behavior depending on which columns were
+- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+- * set. The definitions for the COLUMN_*_FLAG bits can be found in
+- * dessertAppParamsTable_oids.h.
+- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+- *
+- * @param dessertAppParamsTable_rowreq_ctx
+- * Pointer to the users context.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error
+- */
+-int
+-dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+- int save_flags;
+- dessert_agentx_appparams_t *appparam;
+- dessert_agentx_appparamscb_set_t *set;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_commit", "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- set = _dessert_agentx_appparams_getsettercbforindex(rowreq_ctx->tbl_idx.appParamsIndex);
+-
+- if (set == NULL) {
+- snmp_log(
+- LOG_ERR,
+- "dessertAppParamsTable commit failed, no setter for index %ld!\n",
+- rowreq_ctx->tbl_idx.appParamsIndex);
+- return MFD_ERROR;
+- }
+-
+- /*
+- * save flags, then clear until we actually do something
+- */
+- save_flags = rowreq_ctx->column_set_flags;
+- rowreq_ctx->column_set_flags = 0;
+-
+- appparam = malloc(sizeof(dessert_agentx_appparams_t));
+-
+- appparam->index = rowreq_ctx->tbl_idx.appParamsIndex;
+- appparam->value_type = rowreq_ctx->data.appParamsValueType;
+-
+- dessert_debug("commit\n"
+- "\n\t\trowreq_ctx->tbl_idx \t[%u]"
+- "\n\t\trowreq_ctx->data.appParamsValueType \t[%u]"
+- "\n\t\trowreq_ctx->data.appParamsTruthValue \t[%u]"
+- "\n\t\trowreq_ctx->data.appParamsInteger32 \t[%d]"
+- "\n\t\trowreq_ctx->data.appParamsUnsigned32 \t[%u]"
+- "\n\t\trowreq_ctx->data.appParamsOctetString_len \t[%u]"
+-
+- "\n",rowreq_ctx->tbl_idx,
+- rowreq_ctx->data.appParamsValueType,
+- rowreq_ctx->data.appParamsTruthValue,
+- rowreq_ctx->data.appParamsInteger32,
+- rowreq_ctx->data.appParamsUnsigned32,
+- rowreq_ctx->data.appParamsOctetString_len
+- );
+-
+- /*
+- * commit dessertAppParamsTable data
+- * 1) check the column's flag in save_flags to see if it was set.
+- * 2) clear the flag when you handle that column
+- * 3) set the column's flag in column_set_flags if it needs undo
+- * processing in case of a failure.
+- */
+- if (save_flags & COLUMN_APPPARAMSTRUTHVALUE_FLAG) {
+- /* clear appParamsTruthValue */
+- save_flags &= ~COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- /*
+- * commit column appParamsTruthValue.
+- */
+-
+- appparam->bool = rowreq_ctx->data.appParamsTruthValue;
+-
+- rc = set(appparam);
+- if (DESSERT_ERR == rc) {
+- snmp_log(LOG_ERR,
+- "dessertAppParamsTable column appParamsTruthValue commit failed\n");
+- } else {
+- /*
+- * set flag, in case we need to undo appParamsTruthValue
+- */
+- rowreq_ctx->column_set_flags |=
+- COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- }
+- }
+-
+- if (save_flags & COLUMN_APPPARAMSINTEGER32_FLAG) {
+- /* clear appParamsInteger32 */
+- save_flags &= ~COLUMN_APPPARAMSINTEGER32_FLAG;
+- /*
+- * commit column appParamsInteger32.
+- */
+-
+- appparam->int32 = rowreq_ctx->data.appParamsInteger32;
+-
+- rc = set(appparam);
+- if (DESSERT_ERR == rc) {
+- snmp_log(LOG_ERR,
+- "dessertAppParamsTable column appParamsInteger32 commit failed\n");
+- } else {
+- /*
+- * set flag, in case we need to undo appParamsInteger32
+- */
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
+- }
+- }
+-
+- if (save_flags & COLUMN_APPPARAMSUNSIGNED32_FLAG) {
+- /* clear appParamsUnsigned32 */
+- save_flags &= ~COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- /*
+- * commit column appParamsUnsigned32.
+- */
+-
+- appparam->uint32 = rowreq_ctx->data.appParamsUnsigned32;
+-
+- rc = set(appparam);
+- if (DESSERT_ERR == rc) {
+- snmp_log(LOG_ERR,
+- "dessertAppParamsTable column appParamsUnsigned32 commit failed\n");
+- } else {
+- /*
+- * set flag, in case we need to undo appParamsUnsigned32
+- */
+- rowreq_ctx->column_set_flags |=
+- COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- }
+- }
+-
+- if (save_flags & COLUMN_APPPARAMSOCTETSTRING_FLAG) {
+- /* clear appParamsOctetString */
+- save_flags &= ~COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- /*
+- * TODO:482:o: |-> commit column appParamsOctetString.
+- */
+-
+- appparam->octetstring_len = rowreq_ctx->data.appParamsOctetString_len;
+- appparam->octetstring = malloc(sizeof(char) * appparam->octetstring_len);
+- memcpy(appparam->octetstring, rowreq_ctx->data.appParamsOctetString, rowreq_ctx->data.appParamsOctetString_len * sizeof(rowreq_ctx->data.appParamsOctetString[0]));
+-
+- rc = set(appparam);
+- if (DESSERT_ERR == rc) {
+- snmp_log(LOG_ERR,
+- "dessertAppParamsTable column appParamsOctetString commit failed\n");
+- } else {
+- /*
+- * set flag, in case we need to undo appParamsOctetString
+- */
+- dessert_debug("dessertAppParamsTable column appParamsOctetString commited");
+- rowreq_ctx->column_set_flags |=
+- COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- }
+- }
+-
+- if (rc == DESSERT_ERR) rc = -1; else {rc = MFD_SUCCESS;}
+-
+- /*
+- * if we successfully committed this row, set the dirty flag.
+- */
+- if (MFD_SUCCESS == rc) {
+- rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+- }
+-
+- if (save_flags) {
+- snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+- save_flags);
+- return MFD_ERROR;
+- }
+-
+- _dessert_agentx_appparams_free(appparam);
+-
+- return rc;
+-} /* dessertAppParamsTable_commit */
+-
+-/**
+- * undo commit new values.
+- *
+- * Should you need different behavior depending on which columns were
+- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+- * set. The definitions for the COLUMN_*_FLAG bits can be found in
+- * dessertAppParamsTable_oids.h.
+- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+- *
+- * @param dessertAppParamsTable_rowreq_ctx
+- * Pointer to the users context.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error
+- */
+-int
+-dessertAppParamsTable_undo_commit(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_commit", "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:485:M: |-> Undo dessertAppParamsTable commit.
+- * check the column's flag in rowreq_ctx->column_set_flags to see
+- * if it was set during commit, then undo it.
+- *
+- * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+- */
+-
+-
+- /*
+- * if we successfully un-commited this row, clear the dirty flag.
+- */
+- if (MFD_SUCCESS == rc) {
+- rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+- }
+-
+- return rc;
+-} /* dessertAppParamsTable_undo_commit */
+-
+-/*
+- * TODO:440:M: Implement dessertAppParamsTable node value checks.
+- * TODO:450:M: Implement dessertAppParamsTable undo functions.
+- * TODO:460:M: Implement dessertAppParamsTable set functions.
+- * TODO:480:M: Implement dessertAppParamsTable commit functions.
+- */
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsTruthValue
+- * appParamsTruthValue is subid 5 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.5
+- * Description:
+-A parameter with TruthValue semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- * Enum range: 2/8. Values: true(1), false(2)
+- *
+- * Its syntax is TruthValue (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * Check that the proposed new value is potentially valid.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsTruthValue_val
+- * A long containing the new value.
+- *
+- * @retval MFD_SUCCESS : incoming value is legal
+- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+- *
+- * This is the place to check for requirements that are not
+- * expressed in the mib syntax (for example, a requirement that
+- * is detailed in the description for an object).
+- *
+- * You should check that the requested change between the undo value and the
+- * new value is legal (ie, the transistion from one value to another
+- * is legal).
+- *
+- *@note
+- * This check is only to determine if the new value
+- * is \b potentially valid. This is the first check of many, and
+- * is one of the simplest ones.
+- *
+- *@note
+- * this is not the place to do any checks for values
+- * which depend on some other value in the mib. Those
+- * types of checks should be done in the
+- * dessertAppParamsTable_check_dependencies() function.
+- *
+- * The following checks have already been done for you:
+- * The syntax is ASN_INTEGER
+- * The value is one of true(1), false(2)
+- *
+- * If there a no other checks you need to do, simply return MFD_SUCCESS.
+- *
+- */
+-int
+-appParamsTruthValue_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, u_long appParamsTruthValue_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_check_value", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * Check for valid appParamsTruthValue value.
+- */
+-
+- if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_BOOL) {
+-
+- return MFD_NOT_VALID_EVER;
+- } else {
+-
+- return MFD_SUCCESS; /* appParamsTruthValue value not illegal */
+- }
+-} /* appParamsTruthValue_check_value */
+-
+-/**
+- * Save old value information
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- *
+- * This function will be called after the table level undo setup function
+- * dessertAppParamsTable_undo_setup has been called.
+- *
+- *@note
+- * this function will only be called if a new value is set for this column.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in this function, so it
+- * won't be done unless it is necessary.
+- */
+-int
+-appParamsTruthValue_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_undo_setup", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:455:o: |-> Setup appParamsTruthValue undo.
+- */
+- /*
+- * copy appParamsTruthValue data
+- * set rowreq_ctx->undo->appParamsTruthValue from rowreq_ctx->data.appParamsTruthValue
+- */
+- rowreq_ctx->undo->appParamsTruthValue =
+- rowreq_ctx->data.appParamsTruthValue;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_undo_setup */
+-
+-/**
+- * Set the new value.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context. You should know how to
+- * manipulate the value from this object.
+- * @param appParamsTruthValue_val
+- * A long containing the new value.
+- */
+-int
+-appParamsTruthValue_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long appParamsTruthValue_val)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_set",
+- "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:245:o: |-> Implement appParamsTruthValue reverse mapping.
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- */
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- switch (appParamsTruthValue_val) {
+- case TRUTHVALUE_TRUE:
+- rowreq_ctx->data.appParamsTruthValue =
+- INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE;
+- break;
+-
+- case TRUTHVALUE_FALSE:
+- rowreq_ctx->data.appParamsTruthValue =
+- INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't reverse map value %ld for appParamsTruthValue\n",
+- appParamsTruthValue_val);
+- return SNMP_ERR_GENERR;
+- }
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_set */
+-
+-/**
+- * undo the previous set.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context.
+- */
+-int
+-appParamsTruthValue_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_undo",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:456:o: |-> Clean up appParamsTruthValue undo.
+- */
+- /*
+- * copy appParamsTruthValue data
+- * set rowreq_ctx->data.appParamsTruthValue from rowreq_ctx->undo->appParamsTruthValue
+- */
+- rowreq_ctx->data.appParamsTruthValue =
+- rowreq_ctx->undo->appParamsTruthValue;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_undo */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsInteger32
+- * appParamsInteger32 is subid 6 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.6
+- * Description:
+-A parameter with Integer32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- *
+- * Its syntax is INTEGER32 (based on perltype INTEGER32)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+- */
+-/**
+- * Check that the proposed new value is potentially valid.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsInteger32_val
+- * A long containing the new value.
+- *
+- * @retval MFD_SUCCESS : incoming value is legal
+- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+- *
+- * This is the place to check for requirements that are not
+- * expressed in the mib syntax (for example, a requirement that
+- * is detailed in the description for an object).
+- *
+- * You should check that the requested change between the undo value and the
+- * new value is legal (ie, the transistion from one value to another
+- * is legal).
+- *
+- *@note
+- * This check is only to determine if the new value
+- * is \b potentially valid. This is the first check of many, and
+- * is one of the simplest ones.
+- *
+- *@note
+- * this is not the place to do any checks for values
+- * which depend on some other value in the mib. Those
+- * types of checks should be done in the
+- * dessertAppParamsTable_check_dependencies() function.
+- *
+- * The following checks have already been done for you:
+- * The syntax is ASN_INTEGER
+- *
+- * If there a no other checks you need to do, simply return MFD_SUCCESS.
+- *
+- */
+-int
+-appParamsInteger32_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, long appParamsInteger32_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_check_value", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * Check for valid appParamsInteger32 value.
+- */
+-
+- dessert_debug("check_value\n\t\trowreq_ctx->data.appParamsValueType [%d]",rowreq_ctx->data.appParamsValueType);
+- if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_INT32) {
+-
+- return MFD_NOT_VALID_EVER;
+- } else {
+-
+- return MFD_SUCCESS; /* appParamsInteger32 value not illegal */
+- }
+-} /* appParamsInteger32_check_value */
+-
+-/**
+- * Save old value information
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- *
+- * This function will be called after the table level undo setup function
+- * dessertAppParamsTable_undo_setup has been called.
+- *
+- *@note
+- * this function will only be called if a new value is set for this column.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in this function, so it
+- * won't be done unless it is necessary.
+- */
+-int
+-appParamsInteger32_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_undo_setup", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:455:o: |-> Setup appParamsInteger32 undo.
+- */
+- /*
+- * copy appParamsInteger32 data
+- * set rowreq_ctx->undo->appParamsInteger32 from rowreq_ctx->data.appParamsInteger32
+- */
+- rowreq_ctx->undo->appParamsInteger32 =
+- rowreq_ctx->data.appParamsInteger32;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsInteger32_undo_setup */
+-
+-/**
+- * Set the new value.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context. You should know how to
+- * manipulate the value from this object.
+- * @param appParamsInteger32_val
+- * A long containing the new value.
+- */
+-int
+-appParamsInteger32_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- long appParamsInteger32_val)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_set",
+- "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:245:o: |-> Implement appParamsInteger32 reverse mapping.
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- */
+- /*
+- * TODO:461:M: |-> Set appParamsInteger32 value.
+- * set appParamsInteger32 value in rowreq_ctx->data
+- */
+- rowreq_ctx->data.appParamsInteger32 = appParamsInteger32_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsInteger32_set */
+-
+-/**
+- * undo the previous set.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context.
+- */
+-int
+-appParamsInteger32_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_undo",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:456:o: |-> Clean up appParamsInteger32 undo.
+- */
+- /*
+- * copy appParamsInteger32 data
+- * set rowreq_ctx->data.appParamsInteger32 from rowreq_ctx->undo->appParamsInteger32
+- */
+- rowreq_ctx->data.appParamsInteger32 =
+- rowreq_ctx->undo->appParamsInteger32;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsInteger32_undo */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsUnsigned32
+- * appParamsUnsigned32 is subid 7 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.7
+- * Description:
+-A parameter with Unsigned32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- *
+- * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+- * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+- */
+-/**
+- * Check that the proposed new value is potentially valid.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsUnsigned32_val
+- * A u_long containing the new value.
+- *
+- * @retval MFD_SUCCESS : incoming value is legal
+- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+- *
+- * This is the place to check for requirements that are not
+- * expressed in the mib syntax (for example, a requirement that
+- * is detailed in the description for an object).
+- *
+- * You should check that the requested change between the undo value and the
+- * new value is legal (ie, the transistion from one value to another
+- * is legal).
+- *
+- *@note
+- * This check is only to determine if the new value
+- * is \b potentially valid. This is the first check of many, and
+- * is one of the simplest ones.
+- *
+- *@note
+- * this is not the place to do any checks for values
+- * which depend on some other value in the mib. Those
+- * types of checks should be done in the
+- * dessertAppParamsTable_check_dependencies() function.
+- *
+- * The following checks have already been done for you:
+- * The syntax is ASN_UNSIGNED
+- *
+- * If there a no other checks you need to do, simply return MFD_SUCCESS.
+- *
+- */
+-int
+-appParamsUnsigned32_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, u_long appParamsUnsigned32_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_check_value", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:441:o: |-> Check for valid appParamsUnsigned32 value.
+- */
+- if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_UINT32) {
+-
+- return MFD_NOT_VALID_EVER;
+- } else {
+-
+- return MFD_SUCCESS; /* appParamsUnsigned32 value not illegal */
+- }
+-} /* appParamsUnsigned32_check_value */
+-
+-/**
+- * Save old value information
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- *
+- * This function will be called after the table level undo setup function
+- * dessertAppParamsTable_undo_setup has been called.
+- *
+- *@note
+- * this function will only be called if a new value is set for this column.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in this function, so it
+- * won't be done unless it is necessary.
+- */
+-int
+-appParamsUnsigned32_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_undo_setup", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:455:o: |-> Setup appParamsUnsigned32 undo.
+- */
+- /*
+- * copy appParamsUnsigned32 data
+- * set rowreq_ctx->undo->appParamsUnsigned32 from rowreq_ctx->data.appParamsUnsigned32
+- */
+- rowreq_ctx->undo->appParamsUnsigned32 =
+- rowreq_ctx->data.appParamsUnsigned32;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsUnsigned32_undo_setup */
+-
+-/**
+- * Set the new value.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context. You should know how to
+- * manipulate the value from this object.
+- * @param appParamsUnsigned32_val
+- * A u_long containing the new value.
+- */
+-int
+-appParamsUnsigned32_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long appParamsUnsigned32_val)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_set",
+- "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:245:o: |-> Implement appParamsUnsigned32 reverse mapping.
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- */
+- /*
+- * TODO:461:M: |-> Set appParamsUnsigned32 value.
+- * set appParamsUnsigned32 value in rowreq_ctx->data
+- */
+- rowreq_ctx->data.appParamsUnsigned32 = appParamsUnsigned32_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsUnsigned32_set */
+-
+-/**
+- * undo the previous set.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context.
+- */
+-int
+-appParamsUnsigned32_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_undo",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:456:o: |-> Clean up appParamsUnsigned32 undo.
+- */
+- /*
+- * copy appParamsUnsigned32 data
+- * set rowreq_ctx->data.appParamsUnsigned32 from rowreq_ctx->undo->appParamsUnsigned32
+- */
+- rowreq_ctx->data.appParamsUnsigned32 =
+- rowreq_ctx->undo->appParamsUnsigned32;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsUnsigned32_undo */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsOctetString
+- * appParamsOctetString is subid 9 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.9
+- * Description:
+-A parameter containing of up to 1024 octets.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 1
+- * hint: 1024a
+- *
+- * Ranges: 0 - 1024;
+- *
+- * Its syntax is DessertApplicationOctetString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 1024)
+- */
+-/**
+- * Check that the proposed new value is potentially valid.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsOctetString_val_ptr
+- * A char containing the new value.
+- * @param appParamsOctetString_val_ptr_len
+- * The size (in bytes) of the data pointed to by appParamsOctetString_val_ptr
+- *
+- * @retval MFD_SUCCESS : incoming value is legal
+- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+- *
+- * This is the place to check for requirements that are not
+- * expressed in the mib syntax (for example, a requirement that
+- * is detailed in the description for an object).
+- *
+- * You should check that the requested change between the undo value and the
+- * new value is legal (ie, the transistion from one value to another
+- * is legal).
+- *
+- *@note
+- * This check is only to determine if the new value
+- * is \b potentially valid. This is the first check of many, and
+- * is one of the simplest ones.
+- *
+- *@note
+- * this is not the place to do any checks for values
+- * which depend on some other value in the mib. Those
+- * types of checks should be done in the
+- * dessertAppParamsTable_check_dependencies() function.
+- *
+- * The following checks have already been done for you:
+- * The syntax is ASN_OCTET_STR
+- * The length is < sizeof(rowreq_ctx->data.appParamsOctetString).
+- * The length is in (one of) the range set(s): 0 - 1024
+- *
+- * If there a no other checks you need to do, simply return MFD_SUCCESS.
+- *
+- */
+-int
+-appParamsOctetString_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char *appParamsOctetString_val_ptr,
+- size_t appParamsOctetString_val_ptr_len)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_check_value", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+- netsnmp_assert(NULL != appParamsOctetString_val_ptr);
+-
+- /*
+- * TODO:441:o: |-> Check for valid appParamsOctetString value.
+- */
+- if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING) {
+-
+- return MFD_NOT_VALID_EVER;
+- } else {
+-
+- return MFD_SUCCESS; /* appParamsOctetString value not illegal */
+- }
+-} /* appParamsOctetString_check_value */
+-
+-/**
+- * Save old value information
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- *
+- * This function will be called after the table level undo setup function
+- * dessertAppParamsTable_undo_setup has been called.
+- *
+- *@note
+- * this function will only be called if a new value is set for this column.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in this function, so it
+- * won't be done unless it is necessary.
+- */
+-int
+-appParamsOctetString_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_undo_setup", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:455:o: |-> Setup appParamsOctetString undo.
+- */
+- /*
+- * copy appParamsOctetString and appParamsOctetString_len data
+- * set rowreq_ctx->undo->appParamsOctetString from rowreq_ctx->data.appParamsOctetString
+- */
+- memcpy(rowreq_ctx->undo->appParamsOctetString,
+- rowreq_ctx->data.appParamsOctetString,
+- (rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->undo->appParamsOctetString[0])));
+- rowreq_ctx->undo->appParamsOctetString_len =
+- rowreq_ctx->data.appParamsOctetString_len;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsOctetString_undo_setup */
+-
+-/**
+- * Set the new value.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context. You should know how to
+- * manipulate the value from this object.
+- * @param appParamsOctetString_val_ptr
+- * A char containing the new value.
+- * @param appParamsOctetString_val_ptr_len
+- * The size (in bytes) of the data pointed to by appParamsOctetString_val_ptr
+- */
+-int
+-appParamsOctetString_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- char *appParamsOctetString_val_ptr,
+- size_t appParamsOctetString_val_ptr_len)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_set",
+- "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+- netsnmp_assert(NULL != appParamsOctetString_val_ptr);
+-
+- /*
+- * TODO:245:o: |-> Implement appParamsOctetString reverse mapping.
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- */
+- /*
+- * TODO:461:M: |-> Set appParamsOctetString value.
+- * set appParamsOctetString value in rowreq_ctx->data
+- */
+- memcpy(rowreq_ctx->data.appParamsOctetString,
+- appParamsOctetString_val_ptr, appParamsOctetString_val_ptr_len);
+- /** convert bytes to number of char */
+- rowreq_ctx->data.appParamsOctetString_len =
+- appParamsOctetString_val_ptr_len /
+- sizeof(appParamsOctetString_val_ptr[0]);
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsOctetString_set */
+-
+-/**
+- * undo the previous set.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context.
+- */
+-int
+-appParamsOctetString_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_undo",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:456:o: |-> Clean up appParamsOctetString undo.
+- */
+- /*
+- * copy appParamsOctetString and appParamsOctetString_len data
+- * set rowreq_ctx->data.appParamsOctetString from rowreq_ctx->undo->appParamsOctetString
+- */
+- memcpy(rowreq_ctx->data.appParamsOctetString,
+- rowreq_ctx->undo->appParamsOctetString,
+- (rowreq_ctx->undo->appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0])));
+- rowreq_ctx->data.appParamsOctetString_len =
+- rowreq_ctx->undo->appParamsOctetString_len;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsOctetString_undo */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_set.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_set.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,168 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_DATA_SET_H
+-#define DESSERTAPPPARAMSTABLE_DATA_SET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * SET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * SET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-
+-
+- int
+- dessertAppParamsTable_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- dessertAppParamsTable_undo_cleanup(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx);
+- int
+- dessertAppParamsTable_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- dessertAppParamsTable_undo_commit(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx);
+-
+-
+- int
+- appParamsName_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, char *appParamsName_val_ptr,
+- size_t appParamsName_val_ptr_len);
+- int
+- appParamsName_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int appParamsName_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char *appParamsName_val_ptr,
+- size_t appParamsName_val_ptr_len);
+- int appParamsName_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsDesc_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, char *appParamsDesc_val_ptr,
+- size_t appParamsDesc_val_ptr_len);
+- int
+- appParamsDesc_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int appParamsDesc_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char *appParamsDesc_val_ptr,
+- size_t appParamsDesc_val_ptr_len);
+- int appParamsDesc_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsValueType_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsValueType_val);
+- int
+- appParamsValueType_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int appParamsValueType_set(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long appParamsValueType_val);
+- int
+- appParamsValueType_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsTruthValue_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsTruthValue_val);
+- int
+- appParamsTruthValue_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- appParamsTruthValue_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsTruthValue_val);
+- int
+- appParamsTruthValue_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsInteger32_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- long appParamsInteger32_val);
+- int
+- appParamsInteger32_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int appParamsInteger32_set(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- long appParamsInteger32_val);
+- int
+- appParamsInteger32_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsUnsigned32_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsUnsigned32_val);
+- int
+- appParamsUnsigned32_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- appParamsUnsigned32_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsUnsigned32_val);
+- int
+- appParamsUnsigned32_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsOctetString_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char
+- *appParamsOctetString_val_ptr,
+- size_t
+- appParamsOctetString_val_ptr_len);
+- int
+- appParamsOctetString_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- appParamsOctetString_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char *appParamsOctetString_val_ptr,
+- size_t appParamsOctetString_val_ptr_len);
+- int
+- appParamsOctetString_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+- int
+- dessertAppParamsTable_check_dependencies
+- (dessertAppParamsTable_rowreq_ctx * ctx);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_enums.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_enums.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,93 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_ENUMS_H
+-#define DESSERTAPPPARAMSTABLE_ENUMS_H
+-
+-#include "../dessert.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- * NOTES on enums
+- * ==============
+- *
+- * Value Mapping
+- * -------------
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them
+- * below. For example, a boolean flag (1/0) is usually represented
+- * as a TruthValue in a MIB, which maps to the values (1/2).
+- *
+- */
+-/*************************************************************************
+- *************************************************************************
+- *
+- * enum definitions for table dessertAppParamsTable
+- *
+- *************************************************************************
+- *************************************************************************/
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appParamsValueType (DessertAppValueType / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef DESSERTAPPVALUETYPE_ENUMS
+-#define DESSERTAPPVALUETYPE_ENUMS
+-
+-#define DESSERTAPPVALUETYPE_BOOL 0
+-#define DESSERTAPPVALUETYPE_INT32 1
+-#define DESSERTAPPVALUETYPE_UINT32 2
+-#define DESSERTAPPVALUETYPE_COUNTER64 3
+-#define DESSERTAPPVALUETYPE_OCTETSTRING 4
+-
+-#endif /* DESSERTAPPVALUETYPE_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appParamsValueType enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_BOOL DESSERT_APPPARAMS_VALUETYPE_BOOL
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_INT32 DESSERT_APPPARAMS_VALUETYPE_INT32
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_UINT32 DESSERT_APPPARAMS_VALUETYPE_UINT32
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_COUNTER64 DESSERT_APPPARAMS_VALUETYPE_COUNTER64
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_OCTETSTRING DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
+-
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appParamsTruthValue (TruthValue / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef TRUTHVALUE_ENUMS
+-#define TRUTHVALUE_ENUMS
+-
+-#define TRUTHVALUE_TRUE 1
+-#define TRUTHVALUE_FALSE 2
+-
+-#endif /* TRUTHVALUE_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appParamsTruthValue enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE DESSERT_APPPARAMS_BOOL_TRUE
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE DESSERT_APPPARAMS_BOOL_FALSE
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_interface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_interface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1843 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-
+-
+-#include <net-snmp/agent/table_container.h>
+-#include <net-snmp/library/container.h>
+-
+-#include "dessertAppParamsTable_interface.h"
+-
+-#include <ctype.h>
+-
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-typedef struct dessertAppParamsTable_interface_ctx_s {
+-
+- netsnmp_container *container;
+- netsnmp_cache *cache;
+-
+- dessertAppParamsTable_registration *user_ctx;
+-
+- netsnmp_table_registration_info tbl_info;
+-
+- netsnmp_baby_steps_access_methods access_multiplexer;
+-
+- u_int table_dirty;
+-
+-} dessertAppParamsTable_interface_ctx;
+-
+-static dessertAppParamsTable_interface_ctx dessertAppParamsTable_if_ctx;
+-
+-static void
+-_dessertAppParamsTable_container_init(dessertAppParamsTable_interface_ctx *
+- if_ctx);
+-static void
+-_dessertAppParamsTable_container_shutdown
+-(dessertAppParamsTable_interface_ctx * if_ctx);
+-
+-
+-netsnmp_container *
+-dessertAppParamsTable_container_get(void)
+-{
+- return dessertAppParamsTable_if_ctx.container;
+-}
+-
+-dessertAppParamsTable_registration *
+-dessertAppParamsTable_registration_get(void)
+-{
+- return dessertAppParamsTable_if_ctx.user_ctx;
+-}
+-
+-dessertAppParamsTable_registration *
+-dessertAppParamsTable_registration_set(dessertAppParamsTable_registration *
+- newreg)
+-{
+- dessertAppParamsTable_registration *old =
+- dessertAppParamsTable_if_ctx.user_ctx;
+- dessertAppParamsTable_if_ctx.user_ctx = newreg;
+- return old;
+-}
+-
+-int
+-dessertAppParamsTable_container_size(void)
+-{
+- return CONTAINER_SIZE(dessertAppParamsTable_if_ctx.container);
+-}
+-
+-u_int
+-dessertAppParamsTable_dirty_get(void)
+-{
+- return dessertAppParamsTable_if_ctx.table_dirty;
+-}
+-
+-void
+-dessertAppParamsTable_dirty_set(u_int status)
+-{
+- DEBUGMSGTL(("dessertAppParamsTable:dessertAppParamsTable_dirty_set",
+- "called. was %d, now %d\n",
+- dessertAppParamsTable_if_ctx.table_dirty, status));
+- dessertAppParamsTable_if_ctx.table_dirty = status;
+-}
+-
+-/*
+- * mfd multiplexer modes
+- */
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_pre_request;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_post_request;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_object_lookup;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_get_values;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_check_objects;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_setup;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_set_values;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_cleanup;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_values;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_commit;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_commit;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_irreversible_commit;
+-
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_undo_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column);
+-
+-dessertAppParamsTable_data *dessertAppParamsTable_allocate_data(void);
+-
+-/**
+- * @internal
+- * Initialize the table dessertAppParamsTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-_dessertAppParamsTable_initialize_interface
+- (dessertAppParamsTable_registration * reg_ptr, u_long flags)
+-{
+- netsnmp_baby_steps_access_methods *access_multiplexer =
+- &dessertAppParamsTable_if_ctx.access_multiplexer;
+- netsnmp_table_registration_info *tbl_info =
+- &dessertAppParamsTable_if_ctx.tbl_info;
+- netsnmp_handler_registration *reginfo;
+- netsnmp_mib_handler *handler;
+- int mfd_modes = 0;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_initialize_interface", "called\n"));
+-
+-
+- /*************************************************
+- *
+- * save interface context for dessertAppParamsTable
+- */
+- /*
+- * Setting up the table's definition
+- */
+- netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+- /** index: appParamsIndex */
+- 0);
+-
+- /*
+- * Define the minimum and maximum accessible columns. This
+- * optimizes retrival.
+- */
+- tbl_info->min_column = DESSERTAPPPARAMSTABLE_MIN_COL;
+- tbl_info->max_column = DESSERTAPPPARAMSTABLE_MAX_COL;
+-
+- /*
+- * save users context
+- */
+- dessertAppParamsTable_if_ctx.user_ctx = reg_ptr;
+-
+- /*
+- * call data access initialization code
+- */
+- dessertAppParamsTable_init_data(reg_ptr);
+-
+- /*
+- * set up the container
+- */
+- _dessertAppParamsTable_container_init(&dessertAppParamsTable_if_ctx);
+- if (NULL == dessertAppParamsTable_if_ctx.container) {
+- snmp_log(LOG_ERR,
+- "could not initialize container for dessertAppParamsTable\n");
+- return;
+- }
+-
+- /*
+- * access_multiplexer: REQUIRED wrapper for get request handling
+- */
+- access_multiplexer->object_lookup =
+- _mfd_dessertAppParamsTable_object_lookup;
+- access_multiplexer->get_values = _mfd_dessertAppParamsTable_get_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->pre_request =
+- _mfd_dessertAppParamsTable_pre_request;
+- access_multiplexer->post_request =
+- _mfd_dessertAppParamsTable_post_request;
+-
+-
+- /*
+- * REQUIRED wrappers for set request handling
+- */
+- access_multiplexer->object_syntax_checks =
+- _mfd_dessertAppParamsTable_check_objects;
+- access_multiplexer->undo_setup = _mfd_dessertAppParamsTable_undo_setup;
+- access_multiplexer->undo_cleanup =
+- _mfd_dessertAppParamsTable_undo_cleanup;
+- access_multiplexer->set_values = _mfd_dessertAppParamsTable_set_values;
+- access_multiplexer->undo_sets = _mfd_dessertAppParamsTable_undo_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->commit = _mfd_dessertAppParamsTable_commit;
+- access_multiplexer->undo_commit =
+- _mfd_dessertAppParamsTable_undo_commit;
+- access_multiplexer->irreversible_commit =
+- _mfd_dessertAppParamsTable_irreversible_commit;
+-
+- /*************************************************
+- *
+- * Create a registration, save our reg data, register table.
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:init_dessertAppParamsTable",
+- "Registering dessertAppParamsTable as a mibs-for-dummies table.\n"));
+- handler =
+- netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+- reginfo =
+- netsnmp_handler_registration_create("dessertAppParamsTable",
+- handler,
+- dessertAppParamsTable_oid,
+- dessertAppParamsTable_oid_size,
+- HANDLER_CAN_BABY_STEP |
+- HANDLER_CAN_RWRITE);
+- if (NULL == reginfo) {
+- snmp_log(LOG_ERR,
+- "error registering table dessertAppParamsTable\n");
+- return;
+- }
+- reginfo->my_reg_void = &dessertAppParamsTable_if_ctx;
+-
+- /*************************************************
+- *
+- * set up baby steps handler, create it and inject it
+- */
+- if (access_multiplexer->object_lookup)
+- mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+- if (access_multiplexer->set_values)
+- mfd_modes |= BABY_STEP_SET_VALUES;
+- if (access_multiplexer->irreversible_commit)
+- mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+- if (access_multiplexer->object_syntax_checks)
+- mfd_modes |= BABY_STEP_CHECK_OBJECT;
+-
+- if (access_multiplexer->pre_request)
+- mfd_modes |= BABY_STEP_PRE_REQUEST;
+- if (access_multiplexer->post_request)
+- mfd_modes |= BABY_STEP_POST_REQUEST;
+-
+- if (access_multiplexer->undo_setup)
+- mfd_modes |= BABY_STEP_UNDO_SETUP;
+- if (access_multiplexer->undo_cleanup)
+- mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+- if (access_multiplexer->undo_sets)
+- mfd_modes |= BABY_STEP_UNDO_SETS;
+-
+- if (access_multiplexer->row_creation)
+- mfd_modes |= BABY_STEP_ROW_CREATE;
+- if (access_multiplexer->consistency_checks)
+- mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+- if (access_multiplexer->commit)
+- mfd_modes |= BABY_STEP_COMMIT;
+- if (access_multiplexer->undo_commit)
+- mfd_modes |= BABY_STEP_UNDO_COMMIT;
+-
+- handler = netsnmp_baby_steps_handler_get(mfd_modes);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+- */
+- handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject container_table helper
+- */
+- handler =
+- netsnmp_container_table_handler_get(tbl_info,
+- dessertAppParamsTable_if_ctx.
+- container,
+- TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject cache helper
+- */
+- if (NULL != dessertAppParamsTable_if_ctx.cache) {
+- handler =
+- netsnmp_cache_handler_get(dessertAppParamsTable_if_ctx.cache);
+- netsnmp_inject_handler(reginfo, handler);
+- }
+-
+- /*
+- * register table
+- */
+- netsnmp_register_table(reginfo, tbl_info);
+-
+-} /* _dessertAppParamsTable_initialize_interface */
+-
+-/**
+- * @internal
+- * Shutdown the table dessertAppParamsTable
+- */
+-void
+-_dessertAppParamsTable_shutdown_interface
+- (dessertAppParamsTable_registration * reg_ptr)
+-{
+- /*
+- * shutdown the container
+- */
+- _dessertAppParamsTable_container_shutdown
+- (&dessertAppParamsTable_if_ctx);
+-}
+-
+-void
+-dessertAppParamsTable_valid_columns_set(netsnmp_column_info *vc)
+-{
+- dessertAppParamsTable_if_ctx.tbl_info.valid_columns = vc;
+-} /* dessertAppParamsTable_valid_columns_set */
+-
+-/**
+- * @internal
+- * convert the index component stored in the context to an oid
+- */
+-int
+-dessertAppParamsTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertAppParamsTable_mib_index *
+- mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- netsnmp_variable_list var_appParamsIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_appParamsIndex, 0x00, sizeof(var_appParamsIndex));
+- var_appParamsIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_appParamsIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_index_to_oid", "called\n"));
+-
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- snmp_set_var_value(&var_appParamsIndex,
+- (u_char *) & mib_idx->appParamsIndex,
+- sizeof(mib_idx->appParamsIndex));
+-
+-
+- err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+- NULL, 0, &var_appParamsIndex);
+- if (err)
+- snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_appParamsIndex);
+-
+- return err;
+-} /* dessertAppParamsTable_index_to_oid */
+-
+-/**
+- * extract dessertAppParamsTable indexes from a netsnmp_index
+- *
+- * @retval SNMP_ERR_NOERROR : no error
+- * @retval SNMP_ERR_GENERR : error
+- */
+-int
+-dessertAppParamsTable_index_from_oid(netsnmp_index * oid_idx,
+- dessertAppParamsTable_mib_index *
+- mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- netsnmp_variable_list var_appParamsIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_appParamsIndex, 0x00, sizeof(var_appParamsIndex));
+- var_appParamsIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_appParamsIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_index_from_oid", "called\n"));
+-
+- /*
+- * parse the oid into the individual index components
+- */
+- err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+- &var_appParamsIndex);
+- if (err == SNMP_ERR_NOERROR) {
+- /*
+- * copy out values
+- */
+- mib_idx->appParamsIndex =
+- *((long *) var_appParamsIndex.val.string);
+-
+-
+- }
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_appParamsIndex);
+-
+- return err;
+-} /* dessertAppParamsTable_index_from_oid */
+-
+-
+-/*
+- * dessertAppParamsTable_allocate_data
+- *
+- * Purpose: create new dessertAppParamsTable_data.
+- */
+-dessertAppParamsTable_data *
+-dessertAppParamsTable_allocate_data(void)
+-{
+- dessertAppParamsTable_data *rtn =
+- SNMP_MALLOC_TYPEDEF(dessertAppParamsTable_data);
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_allocate_data", "called\n"));
+-
+- if (NULL == rtn) {
+- snmp_log(LOG_ERR, "unable to malloc memory for new "
+- "dessertAppParamsTable_data.\n");
+- }
+-
+- return rtn;
+-} /* dessertAppParamsTable_allocate_data */
+-
+-/*
+- * dessertAppParamsTable_release_data
+- *
+- * Purpose: release dessertAppParamsTable data.
+- */
+-void
+-dessertAppParamsTable_release_data(dessertAppParamsTable_data * data)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_release_data", "called\n"));
+-
+- free(data);
+-} /* dessertAppParamsTable_release_data */
+-
+-/*
+- *********************************************************************
+- * @internal
+- * allocate resources for a dessertAppParamsTable_rowreq_ctx
+- */
+-dessertAppParamsTable_rowreq_ctx *
+-dessertAppParamsTable_allocate_rowreq_ctx(void)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- SNMP_MALLOC_TYPEDEF(dessertAppParamsTable_rowreq_ctx);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:dessertAppParamsTable_allocate_rowreq_ctx", "called\n"));
+-
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+- "dessertAppParamsTable_rowreq_ctx.\n");
+- return NULL;
+- }
+-
+- rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+-
+- rowreq_ctx->dessertAppParamsTable_data_list = NULL;
+-
+-
+- return rowreq_ctx;
+-} /* dessertAppParamsTable_allocate_rowreq_ctx */
+-
+-/*
+- * @internal
+- * release resources for a dessertAppParamsTable_rowreq_ctx
+- */
+-void
+-dessertAppParamsTable_release_rowreq_ctx(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:dessertAppParamsTable_release_rowreq_ctx", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+-
+- if (rowreq_ctx->undo)
+- dessertAppParamsTable_release_data(rowreq_ctx->undo);
+-
+- /*
+- * free index oid pointer
+- */
+- if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+- free(rowreq_ctx->oid_idx.oids);
+-
+- SNMP_FREE(rowreq_ctx);
+-} /* dessertAppParamsTable_release_rowreq_ctx */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppParamsTable_pre_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_pre_request", "called\n"));
+-
+- if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable",
+- "skipping additional pre_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- rc = dessertAppParamsTable_pre_request(dessertAppParamsTable_if_ctx.
+- user_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable", "error %d from "
+- "dessertAppParamsTable_pre_request\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_pre_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppParamsTable_post_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc, packet_rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_post_request", "called\n"));
+-
+- /*
+- * release row context, if deleted
+- */
+- if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+- dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
+-
+- /*
+- * wait for last call before calling user
+- */
+- if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable",
+- "waiting for last post_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+- if ((MFD_SUCCESS != packet_rc) && dessertAppParamsTable_dirty_get()) {
+- /*
+- * we shouldn't get here. the undo steps should also clear
+- * the dirty flags.
+- */
+- snmp_log(LOG_WARNING,
+- "dessertAppParamsTable dirty flag set in post_request "
+- "but status != SUCCESS.\n");
+- }
+-
+- rc = dessertAppParamsTable_post_request(dessertAppParamsTable_if_ctx.
+- user_ctx, packet_rc);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable", "error %d from "
+- "dessertAppParamsTable_post_request\n", rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_post_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppParamsTable_object_lookup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc = SNMP_ERR_NOERROR;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_object_lookup", "called\n"));
+-
+- /*
+- * get our context from mfd
+- * dessertAppParamsTable_interface_ctx *if_ctx =
+- * (dessertAppParamsTable_interface_ctx *)reginfo->my_reg_void;
+- */
+-
+- if (NULL == rowreq_ctx) {
+- rc = SNMP_ERR_NOCREATION;
+- }
+-
+- if (MFD_SUCCESS != rc)
+- netsnmp_request_set_error_all(requests, rc);
+- else
+- dessertAppParamsTable_row_prep(rowreq_ctx);
+-
+- return SNMP_VALIDATE_ERR(rc);
+-} /* _mfd_dessertAppParamsTable_object_lookup */
+-
+-/***********************************************************************
+- *
+- * GET processing
+- *
+- ***********************************************************************/
+-/*
+- * @internal
+- * Retrieve the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_get_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "called for %d\n", column));
+-
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSNAME:
+- if (!(COLUMN_APPPARAMSNAME_FLAG & rowreq_ctx->column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsName) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appParamsName_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSDESC:
+- if (!(COLUMN_APPPARAMSDESC_FLAG & rowreq_ctx->column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsDesc) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appParamsDesc_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPPARAMSVALUETYPE:
+- if (!
+- (COLUMN_APPPARAMSVALUETYPE_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsValueType) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appParamsValueType_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- if (!
+- (COLUMN_APPPARAMSTRUTHVALUE_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsTruthValue) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appParamsTruthValue_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- if (!
+- (COLUMN_APPPARAMSINTEGER32_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsInteger32) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(long);
+- var->type = ASN_INTEGER;
+- rc = appParamsInteger32_get(rowreq_ctx, (long *) var->val.string);
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- if (!
+- (COLUMN_APPPARAMSUNSIGNED32_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsUnsigned32) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_UNSIGNED;
+- rc = appParamsUnsigned32_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- if (!
+- (COLUMN_APPPARAMSOCTETSTRING_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsOctetString) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appParamsOctetString_get(rowreq_ctx,
+- (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- default:
+- if (DESSERTAPPPARAMSTABLE_MIN_COL <= column
+- && column <= DESSERTAPPPARAMSTABLE_MAX_COL) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "assume column %d is reserved\n", column));
+- rc = MFD_SKIP;
+- } else {
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_get_column\n",
+- column);
+- }
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_get_column */
+-
+-int
+-_mfd_dessertAppParamsTable_get_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- u_char *old_string;
+- void (*dataFreeHook) (void *);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- DEBUGMSGTL(("9:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_values", "exists %p\n", rowreq_ctx->column_exists_flags));
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * save old pointer, so we can free it if replaced
+- */
+- old_string = requests->requestvb->val.string;
+- dataFreeHook = requests->requestvb->dataFreeHook;
+- if (NULL == requests->requestvb->val.string) {
+- requests->requestvb->val.string = requests->requestvb->buf;
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- } else if (requests->requestvb->buf ==
+- requests->requestvb->val.string) {
+- if (requests->requestvb->val_len !=
+- sizeof(requests->requestvb->buf))
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- }
+-
+- /*
+- * get column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_get_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- if (MFD_SKIP == rc) {
+- requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+- rc = SNMP_ERR_NOERROR;
+- }
+- } else if (NULL == requests->requestvb->val.string) {
+- snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+- rc = SNMP_ERR_GENERR;
+- }
+- if (rc)
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+-
+- /*
+- * if the buffer wasn't used previously for the old data (i.e. it
+- * was allcoated memory) and the get routine replaced the pointer,
+- * we need to free the previous pointer.
+- */
+- if (old_string && (old_string != requests->requestvb->buf) &&
+- (requests->requestvb->val.string != old_string)) {
+- if (dataFreeHook)
+- (*dataFreeHook) (old_string);
+- else
+- free(old_string);
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_get_values */
+-
+-
+-/***********************************************************************
+- *
+- * SET processing
+- *
+- ***********************************************************************/
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: Syntax checks
+- *
+- *---------------------------------------------------------------------*/
+-/*
+- * @internal
+- * Check the syntax for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_check_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_check_column", "called for %d\n", column));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+- /*
+- * (INDEX) appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSINDEX:
+- rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+- break;
+-
+- /*
+- * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSNAME:
+- rc = SNMP_ERR_NOTWRITABLE;
+- break;
+-
+- /*
+- * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSDESC:
+- rc = SNMP_ERR_NOTWRITABLE;
+- break;
+-
+- /*
+- * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPPARAMSVALUETYPE:
+- rc = SNMP_ERR_NOTWRITABLE;
+- break;
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+- sizeof(rowreq_ctx->data.
+- appParamsTruthValue));
+- /*
+- * check that the value is one of defined enums
+- */
+- if ((SNMPERR_SUCCESS == rc)
+- && (*var->val.integer != TRUTHVALUE_TRUE)
+- && (*var->val.integer != TRUTHVALUE_FALSE)
+- ) {
+- rc = SNMP_ERR_WRONGVALUE;
+- }
+- if (SNMPERR_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsTruthValue", "varbind validation failed (eg bad type or size)\n"));
+- } else {
+- rc = appParamsTruthValue_check_value(rowreq_ctx,
+- *((u_long *) var->val.
+- string));
+- if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+- && (MFD_NOT_VALID_NOW != rc)) {
+- snmp_log(LOG_ERR,
+- "bad rc %d from appParamsTruthValue_check_value\n",
+- rc);
+- rc = SNMP_ERR_GENERR;
+- }
+- }
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+- sizeof(rowreq_ctx->data.
+- appParamsInteger32));
+- if (SNMPERR_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsInteger32", "varbind validation failed (eg bad type or size)\n"));
+- } else {
+- rc = appParamsInteger32_check_value(rowreq_ctx,
+- *((long *) var->val.
+- string));
+- if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+- && (MFD_NOT_VALID_NOW != rc)) {
+- snmp_log(LOG_ERR,
+- "bad rc %d from appParamsInteger32_check_value\n",
+- rc);
+- rc = SNMP_ERR_GENERR;
+- }
+- }
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- rc = netsnmp_check_vb_type_and_size(var, ASN_UNSIGNED,
+- sizeof(rowreq_ctx->data.
+- appParamsUnsigned32));
+- if (SNMPERR_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsUnsigned32", "varbind validation failed (eg bad type or size)\n"));
+- } else {
+- rc = appParamsUnsigned32_check_value(rowreq_ctx,
+- *((u_long *) var->val.
+- string));
+- if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+- && (MFD_NOT_VALID_NOW != rc)) {
+- snmp_log(LOG_ERR,
+- "bad rc %d from appParamsUnsigned32_check_value\n",
+- rc);
+- rc = SNMP_ERR_GENERR;
+- }
+- }
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- rc = netsnmp_check_vb_type_and_max_size(var, ASN_OCTET_STR,
+- sizeof(rowreq_ctx->data.
+- appParamsOctetString));
+- /*
+- * check defined range(s).
+- */
+- if ((SNMPERR_SUCCESS == rc)
+- && ((var->val_len < 0) || (var->val_len > 1024))
+- ) {
+- rc = SNMP_ERR_WRONGLENGTH;
+- }
+- if (SNMPERR_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsOctetString", "varbind validation failed (eg bad type or size)\n"));
+- } else {
+- rc = appParamsOctetString_check_value(rowreq_ctx,
+- (char *) var->val.string,
+- var->val_len);
+- if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+- && (MFD_NOT_VALID_NOW != rc)) {
+- snmp_log(LOG_ERR,
+- "bad rc %d from appParamsOctetString_check_value\n",
+- rc);
+- rc = SNMP_ERR_GENERR;
+- }
+- }
+- break;
+-
+- default: /** We shouldn't get here */
+- rc = SNMP_ERR_GENERR;
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_check_column\n",
+- column);
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_check_column */
+-
+-int
+-_mfd_dessertAppParamsTable_check_objects(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_check_objects", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- for (; requests; requests = requests->next) {
+-
+- /*
+- * get column number from table request info, and check that column
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_check_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+- break;
+- }
+-
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_check_objects */
+-
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: Undo setup
+- *
+- *---------------------------------------------------------------------*/
+-/*
+- * @internal
+- * Set the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_undo_setup_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_undo_setup_column", "called for %d\n", column));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- rc = appParamsTruthValue_undo_setup(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
+- rc = appParamsInteger32_undo_setup(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- rc = appParamsUnsigned32_undo_setup(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- rc = appParamsOctetString_undo_setup(rowreq_ctx);
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_undo_setup_column\n",
+- column);
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_undo_setup_column */
+-
+-
+-/**
+- * @internal
+- * undo setup
+- */
+-int
+-_mfd_dessertAppParamsTable_undo_setup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_setup", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * allocate undo context
+- */
+- rowreq_ctx->undo = dessertAppParamsTable_allocate_data();
+- if (NULL == rowreq_ctx->undo) {
+- /** msg already logged */
+- netsnmp_request_set_error_all(requests,
+- SNMP_ERR_RESOURCEUNAVAILABLE);
+- return SNMP_ERR_NOERROR;
+- }
+-
+- /*
+- * row undo setup
+- */
+- rowreq_ctx->column_set_flags = 0;
+- rc = dessertAppParamsTable_undo_setup(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_setup\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- } else {
+- /*
+- * column undo setup
+- */
+- netsnmp_table_request_info *tri;
+- for (; requests; requests = requests->next) {
+- /*
+- * set column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_undo_setup_column(rowreq_ctx,
+- tri->colnum);
+- if (MFD_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_setup_column\n",
+- rc));
+- netsnmp_set_request_error(agtreq_info, requests,
+- SNMP_VALIDATE_ERR(rc));
+- }
+- } /* for results */
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_undo_setup */
+-
+-/**
+- * @internal
+- * undo setup
+- */
+-int
+-_mfd_dessertAppParamsTable_undo_cleanup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_cleanup", "called\n"));
+-
+- /*
+- * failed row create in early stages has no rowreq_ctx
+- */
+- if (NULL == rowreq_ctx)
+- return MFD_SUCCESS;
+-
+- /*
+- * call user cleanup
+- */
+- rc = dessertAppParamsTable_undo_cleanup(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_cleanup\n", rc));
+- }
+-
+- /*
+- * release undo context, if needed
+- */
+- if (rowreq_ctx->undo) {
+- dessertAppParamsTable_release_data(rowreq_ctx->undo);
+- rowreq_ctx->undo = NULL;
+- }
+-
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_undo_cleanup */
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: Set values
+- *
+- *---------------------------------------------------------------------*/
+-/*
+- * @internal
+- * Set the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_set_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_set_column", "called for %d\n", column));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- rc = appParamsTruthValue_set(rowreq_ctx,
+- *((u_long *) var->val.string));
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
+- rc = appParamsInteger32_set(rowreq_ctx,
+- *((long *) var->val.string));
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- rc = appParamsUnsigned32_set(rowreq_ctx,
+- *((u_long *) var->val.string));
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- rc = appParamsOctetString_set(rowreq_ctx, (char *) var->val.string,
+- var->val_len);
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_set_column\n",
+- column);
+- rc = SNMP_ERR_GENERR;
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_set_column */
+-
+-int
+-_mfd_dessertAppParamsTable_set_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- int rc = SNMP_ERR_NOERROR;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_set_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- rowreq_ctx->column_set_flags = 0;
+- for (; requests; requests = requests->next) {
+- /*
+- * set column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_set_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (MFD_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_set_column\n", rc));
+- netsnmp_set_request_error(agtreq_info, requests,
+- SNMP_VALIDATE_ERR(rc));
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_set_values */
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: commit
+- *
+- *---------------------------------------------------------------------*/
+-/**
+- * @internal
+- * commit the values
+- */
+-int
+-_mfd_dessertAppParamsTable_commit(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_commit", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- rc = dessertAppParamsTable_commit(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_commit\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+- /*
+- * if we successfully commited this row, set the dirty flag. Use the
+- * current value + 1 (i.e. dirty = # rows changed).
+- * this is checked in post_request...
+- */
+- dessertAppParamsTable_dirty_set(dessertAppParamsTable_dirty_get() + 1); /* set table dirty flag */
+- }
+-
+- return SNMP_ERR_NOERROR;
+-}
+-
+-int
+-_mfd_dessertAppParamsTable_undo_commit(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_commit", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+- u_int d = dessertAppParamsTable_dirty_get();
+-
+- netsnmp_assert(d != 0);
+- if (d)
+- dessertAppParamsTable_dirty_set(d - 1);
+- }
+-
+- rc = dessertAppParamsTable_undo_commit(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_commit\n", rc));
+- }
+-
+- if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+- snmp_log(LOG_WARNING,
+- "dessertAppParamsTable row dirty flag still set after undo_commit\n");
+- rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_commit */
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: Undo
+- *
+- *---------------------------------------------------------------------*/
+-/**
+- * @internal
+- * undo the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_undo_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_undo_column", "called for %d\n", column));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- rc = appParamsTruthValue_undo(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- rc = appParamsInteger32_undo(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- rc = appParamsUnsigned32_undo(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- rc = appParamsOctetString_undo(rowreq_ctx);
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_undo_column\n",
+- column);
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_undo_column */
+-
+-int
+-_mfd_dessertAppParamsTable_undo_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- rc = dessertAppParamsTable_undo(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo\n", rc));
+- }
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * set column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_undo_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_column\n", rc));
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_undo_values */
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: irreversible commit
+- *
+- *---------------------------------------------------------------------*/
+-/**
+- * @internal
+- * commit irreversible actions
+- */
+-int
+-_mfd_dessertAppParamsTable_irreversible_commit(netsnmp_mib_handler
+- *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info
+- *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_irreversible:commit", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * check for and handle row creation/deletion
+- * and update column exist flags...
+- */
+- if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+- if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+- CONTAINER_REMOVE(dessertAppParamsTable_if_ctx.container,
+- rowreq_ctx);
+- } else {
+- if (rowreq_ctx->column_set_flags) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_irreversible_commit", "updating exists (%p) w/set (%p) = %p\n", rowreq_ctx->column_exists_flags, rowreq_ctx->column_set_flags, (rowreq_ctx->column_exists_flags | rowreq_ctx->column_set_flags)));
+- rowreq_ctx->column_exists_flags |=
+- rowreq_ctx->column_set_flags;
+- rowreq_ctx->column_set_flags = 0;
+- }
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_irreversible_commit */
+-
+-/***********************************************************************
+- *
+- * DATA ACCESS
+- *
+- ***********************************************************************/
+-static void _container_free(netsnmp_container * container);
+-
+-/**
+- * @internal
+- */
+-static int
+-_cache_load(netsnmp_cache * cache, void *vmagic)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_cache_load", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache for dessertAppParamsTable_cache_load\n");
+- return -1;
+- }
+-
+- /** should only be called for an invalid or expired cache */
+- netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+-
+- /*
+- * call user code
+- */
+- return dessertAppParamsTable_container_load((netsnmp_container *)
+- cache->magic);
+-} /* _cache_load */
+-
+-/**
+- * @internal
+- */
+-static void
+-_cache_free(netsnmp_cache * cache, void *magic)
+-{
+- netsnmp_container *container;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_cache_free", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache in dessertAppParamsTable_cache_free\n");
+- return;
+- }
+-
+- container = (netsnmp_container *) cache->magic;
+-
+- _container_free(container);
+-} /* _cache_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_item_free(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- void *context)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_container_item_free",
+- "called\n"));
+-
+- if (NULL == rowreq_ctx)
+- return;
+-
+- dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
+-} /* _container_item_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_container_free",
+- "called\n"));
+-
+- if (NULL == container) {
+- snmp_log(LOG_ERR,
+- "invalid container in dessertAppParamsTable_container_free\n");
+- return;
+- }
+-
+- /*
+- * call user code
+- */
+- dessertAppParamsTable_container_free(container);
+-
+- /*
+- * free all items. inefficient, but easy.
+- */
+- CONTAINER_CLEAR(container,
+- (netsnmp_container_obj_func *) _container_item_free,
+- NULL);
+-} /* _container_free */
+-
+-/**
+- * @internal
+- * initialize the container with functions or wrappers
+- */
+-void
+-_dessertAppParamsTable_container_init(dessertAppParamsTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_container_init", "called\n"));
+-
+- /*
+- * cache init
+- */
+- if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+- _cache_load, _cache_free,
+- dessertAppParamsTable_oid,
+- dessertAppParamsTable_oid_size);
+-
+- if (NULL == if_ctx->cache) {
+- snmp_log(LOG_ERR,
+- "error creating cache for dessertAppParamsTable\n");
+- return;
+- }
+-
+- if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+-
+- dessertAppParamsTable_container_init(&if_ctx->container,
+- if_ctx->cache);
+- if (NULL == if_ctx->container)
+- if_ctx->container =
+- netsnmp_container_find
+- ("dessertAppParamsTable:table_container");
+- if (NULL == if_ctx->container) {
+- snmp_log(LOG_ERR, "error creating container in "
+- "dessertAppParamsTable_container_init\n");
+- return;
+- }
+-
+- if (NULL != if_ctx->cache)
+- if_ctx->cache->magic = (void *) if_ctx->container;
+-} /* _dessertAppParamsTable_container_init */
+-
+-/**
+- * @internal
+- * shutdown the container with functions or wrappers
+- */
+-void
+-_dessertAppParamsTable_container_shutdown
+- (dessertAppParamsTable_interface_ctx * if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_container_shutdown", "called\n"));
+-
+- dessertAppParamsTable_container_shutdown(if_ctx->container);
+-
+- _container_free(if_ctx->container);
+-
+-} /* _dessertAppParamsTable_container_shutdown */
+-
+-
+-dessertAppParamsTable_rowreq_ctx *
+-dessertAppParamsTable_row_find_by_mib_index(dessertAppParamsTable_mib_index
+- * mib_idx)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
+- oid oid_tmp[MAX_OID_LEN];
+- netsnmp_index oid_idx;
+- int rc;
+-
+- /*
+- * set up storage for OID
+- */
+- oid_idx.oids = oid_tmp;
+- oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+-
+- /*
+- * convert
+- */
+- rc = dessertAppParamsTable_index_to_oid(&oid_idx, mib_idx);
+- if (MFD_SUCCESS != rc)
+- return NULL;
+-
+- rowreq_ctx =
+- CONTAINER_FIND(dessertAppParamsTable_if_ctx.container, &oid_idx);
+-
+- return rowreq_ctx;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_interface.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_interface.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,101 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/** @ingroup interface: Routines to interface to Net-SNMP
+- *
+- * \warning This code should not be modified, called directly,
+- * or used to interpret functionality. It is subject to
+- * change at any time.
+- *
+- * @{
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_INTERFACE_H
+-#define DESSERTAPPPARAMSTABLE_INTERFACE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-#include "dessertAppParamsTable.h"
+-
+-
+- /*
+- ********************************************************************
+- * Table declarations
+- */
+-
+- /*
+- * PUBLIC interface initialization routine
+- */
+- void
+- _dessertAppParamsTable_initialize_interface
+- (dessertAppParamsTable_registration * user_ctx, u_long flags);
+- void
+- _dessertAppParamsTable_shutdown_interface
+- (dessertAppParamsTable_registration * user_ctx);
+-
+- dessertAppParamsTable_registration
+- *dessertAppParamsTable_registration_get(void);
+-
+- dessertAppParamsTable_registration
+- *dessertAppParamsTable_registration_set
+- (dessertAppParamsTable_registration * newreg);
+-
+- netsnmp_container *dessertAppParamsTable_container_get(void);
+- int dessertAppParamsTable_container_size(void);
+-
+- u_int dessertAppParamsTable_dirty_get(void);
+- void dessertAppParamsTable_dirty_set(u_int status);
+-
+- dessertAppParamsTable_rowreq_ctx
+- *dessertAppParamsTable_allocate_rowreq_ctx(void);
+- void
+- dessertAppParamsTable_release_rowreq_ctx
+- (dessertAppParamsTable_rowreq_ctx * rowreq_ctx);
+-
+- int dessertAppParamsTable_index_to_oid(netsnmp_index *
+- oid_idx,
+- dessertAppParamsTable_mib_index
+- * mib_idx);
+- int dessertAppParamsTable_index_from_oid(netsnmp_index *
+- oid_idx,
+- dessertAppParamsTable_mib_index
+- * mib_idx);
+-
+- /*
+- * access to certain internals. use with caution!
+- */
+- void
+- dessertAppParamsTable_valid_columns_set(netsnmp_column_info *vc);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_INTERFACE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_oids.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_oids.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,56 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_OIDS_H
+-#define DESSERTAPPPARAMSTABLE_OIDS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- * column number definitions for table dessertAppParamsTable
+- */
+-#define DESSERTAPPPARAMSTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,9
+-
+-#define COLUMN_APPPARAMSINDEX 1
+-
+-#define COLUMN_APPPARAMSNAME 2
+-#define COLUMN_APPPARAMSNAME_FLAG (0x1 << 1)
+-
+-#define COLUMN_APPPARAMSDESC 3
+-#define COLUMN_APPPARAMSDESC_FLAG (0x1 << 2)
+-
+-#define COLUMN_APPPARAMSVALUETYPE 4
+-#define COLUMN_APPPARAMSVALUETYPE_FLAG (0x1 << 3)
+-
+-#define COLUMN_APPPARAMSTRUTHVALUE 5
+-#define COLUMN_APPPARAMSTRUTHVALUE_FLAG (0x1 << 4)
+-
+-#define COLUMN_APPPARAMSINTEGER32 6
+-#define COLUMN_APPPARAMSINTEGER32_FLAG (0x1 << 5)
+-
+-#define COLUMN_APPPARAMSUNSIGNED32 7
+-#define COLUMN_APPPARAMSUNSIGNED32_FLAG (0x1 << 6)
+-
+-#define COLUMN_APPPARAMSOCTETSTRING 9
+-#define COLUMN_APPPARAMSOCTETSTRING_FLAG (0x1 << 8)
+-
+-
+-#define DESSERTAPPPARAMSTABLE_MIN_COL COLUMN_APPPARAMSNAME
+-#define DESSERTAPPPARAMSTABLE_MAX_COL COLUMN_APPPARAMSOCTETSTRING
+-
+-
+- /*
+- * OR together all the writable cols.
+- */
+-#define DESSERTAPPPARAMSTABLE_SETTABLE_COLS (COLUMN_APPPARAMSTRUTHVALUE_FLAG | COLUMN_APPPARAMSINTEGER32_FLAG | COLUMN_APPPARAMSUNSIGNED32_FLAG | COLUMN_APPPARAMSOCTETSTRING_FLAG)
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,173 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/** \page MFD helper for dessertAppStatsTable
+- *
+- * \section intro Introduction
+- * Introductory text.
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-
+-#include <net-snmp/agent/mib_modules.h>
+-
+-#include "dessertAppStatsTable_interface.h"
+-
+-oid dessertAppStatsTable_oid[] = { DESSERTAPPSTATSTABLE_OID };
+-
+-int dessertAppStatsTable_oid_size =
+-OID_LENGTH(dessertAppStatsTable_oid);
+-
+-dessertAppStatsTable_registration dessertAppStatsTable_user_context;
+-
+-void initialize_table_dessertAppStatsTable(void);
+-void shutdown_table_dessertAppStatsTable(void);
+-
+-
+-/**
+- * Initializes the dessertAppStatsTable module
+- */
+-void
+-init_dessertAppStatsTable(void)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:init_dessertAppStatsTable",
+- "called\n"));
+-
+- /*
+- * TODO:300:o: Perform dessertAppStatsTable one-time module initialization.
+- */
+-
+- /*
+- * here we initialize all the tables we're planning on supporting
+- */
+- if (should_init("dessertAppStatsTable"))
+- initialize_table_dessertAppStatsTable();
+-
+-} /* init_dessertAppStatsTable */
+-
+-/**
+- * Shut-down the dessertAppStatsTable module (agent is exiting)
+- */
+-void
+-shutdown_dessertAppStatsTable(void)
+-{
+- if (should_init("dessertAppStatsTable"))
+- shutdown_table_dessertAppStatsTable();
+-
+-}
+-
+-/**
+- * Initialize the table dessertAppStatsTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-initialize_table_dessertAppStatsTable(void)
+-{
+- dessertAppStatsTable_registration *user_context;
+- u_long flags;
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:initialize_table_dessertAppStatsTable", "called\n"));
+-
+- /*
+- * TODO:301:o: Perform dessertAppStatsTable one-time table initialization.
+- */
+-
+- /*
+- * TODO:302:o: |->Initialize dessertAppStatsTable user context
+- * if you'd like to pass in a pointer to some data for this
+- * table, allocate or set it up here.
+- */
+- /*
+- * a netsnmp_data_list is a simple way to store void pointers. A simple
+- * string token is used to add, find or remove pointers.
+- */
+- user_context =
+- netsnmp_create_data_list("dessertAppStatsTable", NULL, NULL);
+-
+- /*
+- * No support for any flags yet, but in the future you would
+- * set any flags here.
+- */
+- flags = 0;
+-
+- /*
+- * call interface initialization code
+- */
+- _dessertAppStatsTable_initialize_interface(user_context, flags);
+-} /* initialize_table_dessertAppStatsTable */
+-
+-/**
+- * Shutdown the table dessertAppStatsTable
+- */
+-void
+-shutdown_table_dessertAppStatsTable(void)
+-{
+- /*
+- * call interface shutdown code
+- */
+- _dessertAppStatsTable_shutdown_interface
+- (&dessertAppStatsTable_user_context);
+-}
+-
+-/**
+- * pre-request callback
+- *
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error
+- */
+-int
+-dessertAppStatsTable_pre_request(dessertAppStatsTable_registration *
+- user_context)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_pre_request", "called\n"));
+-
+- /*
+- * TODO:510:o: Perform dessertAppStatsTable pre-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_pre_request */
+-
+-/**
+- * post-request callback
+- *
+- * Note:
+- * New rows have been inserted into the container, and
+- * deleted rows have been removed from the container and
+- * released.
+- *
+- * @param user_context
+- * @param rc : MFD_SUCCESS if all requests succeeded
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error (ignored)
+- */
+-int
+-dessertAppStatsTable_post_request(dessertAppStatsTable_registration *
+- user_context, int rc)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_post_request", "called\n"));
+-
+- /*
+- * TODO:511:o: Perform dessertAppStatsTable post-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_post_request */
+-
+-
+-/** @{ */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,251 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_H
+-#define DESSERTAPPSTATSTABLE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-/** @addtogroup misc misc: Miscellaneous routines
+- *
+- * @{
+- */
+-#include <net-snmp/library/asn1.h>
+-
+- /*
+- * other required module components
+- */
+- /* *INDENT-OFF* */
+-config_add_mib(DESSERT-MIB)
+-config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_interface)
+-config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_access)
+-config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_get)
+-config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_set)
+- /* *INDENT-ON* */
+-
+- /*
+- * OID and column number definitions for dessertAppStatsTable
+- */
+-#include "dessertAppStatsTable_oids.h"
+-
+- /*
+- * enum definions
+- */
+-#include "dessertAppStatsTable_enums.h"
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+- void init_dessertAppStatsTable(void);
+- void shutdown_dessertAppStatsTable(void);
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+- /*
+- *********************************************************************
+- * When you register your mib, you get to provide a generic
+- * pointer that will be passed back to you for most of the
+- * functions calls.
+- *
+- * TODO:100:r: Review all context structures
+- */
+- /*
+- * TODO:101:o: |-> Review dessertAppStatsTable registration context.
+- */
+- typedef netsnmp_data_list dessertAppStatsTable_registration;
+-
+-/**********************************************************************/
+- /*
+- * TODO:110:r: |-> Review dessertAppStatsTable data context structure.
+- * This structure is used to represent the data for dessertAppStatsTable.
+- */
+- /*
+- * This structure contains storage for all the columns defined in the
+- * dessertAppStatsTable.
+- */
+- typedef struct dessertAppStatsTable_data_s {
+-
+- /*
+- * appStatsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appStatsName[255];
+- size_t appStatsName_len; /* # of char elements, not bytes */
+-
+- /*
+- * appStatsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appStatsDesc[255];
+- size_t appStatsDesc_len; /* # of char elements, not bytes */
+-
+- /*
+- * appStatsNodeOrLink(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- u_long appStatsNodeOrLink;
+-
+- /*
+- * appStatsValueType(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- u_long appStatsValueType;
+-
+- /*
+- * appStatsMacAddress1(6)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appStatsMacAddress1[6];
+- size_t appStatsMacAddress1_len; /* # of char elements, not bytes */
+-
+- /*
+- * appStatsMacAddress2(7)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appStatsMacAddress2[6];
+- size_t appStatsMacAddress2_len; /* # of char elements, not bytes */
+-
+- /*
+- * appStatsTruthValue(8)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- u_long appStatsTruthValue;
+-
+- /*
+- * appStatsInteger32(9)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+- */
+- long appStatsInteger32;
+-
+- /*
+- * appStatsUnsigned32(10)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+- */
+- u_long appStatsUnsigned32;
+-
+- /*
+- * appStatsCounter64(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 appStatsCounter64;
+-
+- /*
+- * appStatsOctetString(12)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+- */
+- char appStatsOctetString[1024];
+- size_t appStatsOctetString_len; /* # of char elements, not bytes */
+-
+- } dessertAppStatsTable_data;
+-
+-
+- /*
+- * TODO:120:r: |-> Review dessertAppStatsTable mib index.
+- * This structure is used to represent the index for dessertAppStatsTable.
+- */
+- typedef struct dessertAppStatsTable_mib_index_s {
+-
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long appStatsIndex;
+-
+-
+- } dessertAppStatsTable_mib_index;
+-
+- /*
+- * TODO:121:r: | |-> Review dessertAppStatsTable max index length.
+- * If you KNOW that your indexes will never exceed a certain
+- * length, update this macro to that length.
+- */
+-#define MAX_dessertAppStatsTable_IDX_LEN 1
+-
+-
+- /*
+- *********************************************************************
+- * TODO:130:o: |-> Review dessertAppStatsTable Row request (rowreq) context.
+- * When your functions are called, you will be passed a
+- * dessertAppStatsTable_rowreq_ctx pointer.
+- */
+- typedef struct dessertAppStatsTable_rowreq_ctx_s {
+-
+- /** this must be first for container compare to work */
+- netsnmp_index oid_idx;
+- oid oid_tmp[MAX_dessertAppStatsTable_IDX_LEN];
+-
+- dessertAppStatsTable_mib_index tbl_idx;
+-
+- dessertAppStatsTable_data data;
+- unsigned int column_exists_flags; /* flags for existence */
+-
+- /*
+- * flags per row. Currently, the first (lower) 8 bits are reserved
+- * for the user. See mfd.h for other flags.
+- */
+- u_int rowreq_flags;
+-
+- /*
+- * TODO:131:o: | |-> Add useful data to dessertAppStatsTable rowreq context.
+- */
+-
+- /*
+- * storage for future expansion
+- */
+- netsnmp_data_list *dessertAppStatsTable_data_list;
+-
+- } dessertAppStatsTable_rowreq_ctx;
+-
+- typedef struct dessertAppStatsTable_ref_rowreq_ctx_s {
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
+- } dessertAppStatsTable_ref_rowreq_ctx;
+-
+- /*
+- *********************************************************************
+- * function prototypes
+- */
+- int
+- dessertAppStatsTable_pre_request(dessertAppStatsTable_registration
+- * user_context);
+- int
+- dessertAppStatsTable_post_request(dessertAppStatsTable_registration
+- * user_context, int rc);
+-
+-
+- dessertAppStatsTable_rowreq_ctx
+- *dessertAppStatsTable_row_find_by_mib_index
+- (dessertAppStatsTable_mib_index * mib_idx);
+-
+- extern oid dessertAppStatsTable_oid[];
+- extern int dessertAppStatsTable_oid_size;
+-
+-
+-#include "dessertAppStatsTable_interface.h"
+-#include "dessertAppStatsTable_data_access.h"
+-#include "dessertAppStatsTable_data_get.h"
+-#include "dessertAppStatsTable_data_set.h"
+-
+- /*
+- * DUMMY markers, ignore
+- *
+- * TODO:099:x: *************************************************************
+- * TODO:199:x: *************************************************************
+- * TODO:299:x: *************************************************************
+- * TODO:399:x: *************************************************************
+- * TODO:499:x: *************************************************************
+- */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_access.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_access.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,407 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-#include "dessertAppStatsTable_data_access.h"
+-#include "../dessert.h"
+-#include "../dessert_internal.h"
+-
+-/** @ingroup interface
+- * @addtogroup data_access data_access: Routines to access data
+- *
+- * These routines are used to locate the data used to satisfy
+- * requests.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+-
+-/**
+- * initialization for dessertAppStatsTable data access
+- *
+- * This function is called during startup to allow you to
+- * allocate any resources you need for the data table.
+- *
+- * @param dessertAppStatsTable_reg
+- * Pointer to dessertAppStatsTable_registration
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : unrecoverable error.
+- */
+-int
+-dessertAppStatsTable_init_data(dessertAppStatsTable_registration *
+- dessertAppStatsTable_reg)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_init_data", "called\n"));
+-
+- /*
+- * TODO:303:o: Initialize dessertAppStatsTable data.
+- */
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- * if you are the sole writer for the file, you could
+- * open it here. However, as stated earlier, we are assuming
+- * the worst case, which in this case means that the file is
+- * written to by someone else, and might not even exist when
+- * we start up. So we can't do anything here.
+- */
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_init_data */
+-
+-/**
+- * container overview
+- *
+- */
+-
+-/**
+- * container initialization
+- *
+- * @param container_ptr_ptr A pointer to a container pointer. If you
+- * create a custom container, use this parameter to return it
+- * to the MFD helper. If set to NULL, the MFD helper will
+- * allocate a container for you.
+- * @param cache A pointer to a cache structure. You can set the timeout
+- * and other cache flags using this pointer.
+- *
+- * This function is called at startup to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases. If no custom
+- * container is allocated, the MFD code will create one for your.
+- *
+- * This is also the place to set up cache behavior. The default, to
+- * simply set the cache timeout, will work well with the default
+- * container. If you are using a custom container, you may want to
+- * look at the cache helper documentation to see if there are any
+- * flags you want to set.
+- *
+- * @remark
+- * This would also be a good place to do any initialization needed
+- * for you data source. For example, opening a connection to another
+- * process that will supply the data, opening a database, etc.
+- */
+-void
+-dessertAppStatsTable_container_init(netsnmp_container ** container_ptr_ptr,
+- netsnmp_cache * cache)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_init", "called\n"));
+-
+- if (NULL == container_ptr_ptr) {
+- snmp_log(LOG_ERR,
+- "bad container param to dessertAppStatsTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * For advanced users, you can use a custom container. If you
+- * do not create one, one will be created for you.
+- */
+- *container_ptr_ptr = NULL;
+-
+- if (NULL == cache) {
+- snmp_log(LOG_ERR,
+- "bad cache param to dessertAppStatsTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * TODO:345:A: Set up dessertAppStatsTable cache properties.
+- *
+- * Also for advanced users, you can set parameters for the
+- * cache. Do not change the magic pointer, as it is used
+- * by the MFD helper. To completely disable caching, set
+- * cache->enabled to 0.
+- */
+- cache->timeout = DESSERTAPPSTATSTABLE_CACHE_TIMEOUT; /* seconds */
+-} /* dessertAppStatsTable_container_init */
+-
+-/**
+- * container shutdown
+- *
+- * @param container_ptr A pointer to the container.
+- *
+- * This function is called at shutdown to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases.
+- *
+- * This function is called before dessertAppStatsTable_container_free().
+- *
+- * @remark
+- * This would also be a good place to do any cleanup needed
+- * for you data source. For example, closing a connection to another
+- * process that supplied the data, closing a database, etc.
+- */
+-void
+-dessertAppStatsTable_container_shutdown(netsnmp_container * container_ptr)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_shutdown", "called\n"));
+-
+- if (NULL == container_ptr) {
+- snmp_log(LOG_ERR,
+- "bad params to dessertAppStatsTable_container_shutdown\n");
+- return;
+- }
+-
+-} /* dessertAppStatsTable_container_shutdown */
+-
+-/**
+- * load initial data
+- *
+- * This function will also be called by the cache helper to load
+- * the container again (after the container free function has been
+- * called to free the previous contents).
+- *
+- * @param container container to which items should be inserted
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+- * @retval MFD_ERROR : other error.
+- *
+- * This function is called to load the index(es) (and data, optionally)
+- * for the every row in the data set.
+- *
+- * @remark
+- * While loading the data, the only important thing is the indexes.
+- * If access to your data is cheap/fast (e.g. you have a pointer to a
+- * structure in memory), it would make sense to update the data here.
+- * If, however, the accessing the data invovles more work (e.g. parsing
+- * some other existing data, or peforming calculations to derive the data),
+- * then you can limit yourself to setting the indexes and saving any
+- * information you will need later. Then use the saved information in
+- * dessertAppStatsTable_row_prep() for populating data.
+- *
+- * @note
+- * If you need consistency between rows (like you want statistics
+- * for each row to be from the same time frame), you should set all
+- * data here.
+- *
+- */
+-int dessertAppStatsTable_container_load(netsnmp_container * container) {
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
+- size_t count = 0;
+-
+- dessert_agentx_appstats_t *appstats_list = NULL;
+- dessert_agentx_appstats_t *appstat;
+-
+- /*
+- * temporary storage for index values
+- */
+- long appStatsIndex;
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_load", "called\n"));
+- dessert_debug("dessertAppStatsTable_container_load called");
+-
+- /* harvest the appstats from the callbacks registered via *dessert_agentx_appstats_add* */
+- if (_dessert_agentx_appstats_harvest_callbacks(&appstats_list)
+- == DESSERT_ERR)
+- return MFD_RESOURCE_UNAVAILABLE;
+-
+- /*
+- * Load/update data in the dessertAppStatsTable container.
+- * loop over your dessertAppStatsTable data, allocate a rowreq context,
+- * set the index(es) [and data, optionally] and insert into
+- * the container.
+- */
+- DL_FOREACH(appstats_list, appstat) {
+-
+- appStatsIndex = count++;
+-
+- /*
+- * set indexes in new dessertAppStatsTable rowreq context.
+- */
+- rowreq_ctx = dessertAppStatsTable_allocate_rowreq_ctx();
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "memory allocation failed\n");
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+- if (MFD_SUCCESS != dessertAppStatsTable_indexes_set(rowreq_ctx,
+- appStatsIndex)) {
+- snmp_log(LOG_ERR, "error setting index while loading "
+- "dessertAppStatsTable data.\n");
+- dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
+- continue;
+- }
+-
+- /* clear all column flags */
+- rowreq_ctx->column_exists_flags = 0;
+-
+- /* these columns are always present*/
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSNAME_FLAG
+- | COLUMN_APPSTATSDESC_FLAG | COLUMN_APPSTATSNODEORLINK_FLAG
+- | COLUMN_APPSTATSVALUETYPE_FLAG;
+-
+- rowreq_ctx->data.appStatsName_len = strlen(appstat->name);
+- strcpy(rowreq_ctx->data.appStatsName, appstat->name);
+-
+- rowreq_ctx->data.appStatsDesc_len = strlen(appstat->desc);
+- strcpy(rowreq_ctx->data.appStatsDesc, appstat->desc);
+-
+- appStatsNodeOrLink_map(&(rowreq_ctx->data.appStatsNodeOrLink),appstat->node_or_link);
+- appStatsValueType_map(&(rowreq_ctx->data.appStatsValueType),appstat->value_type);
+-
+- /* are the macaddress? columns present?*/
+- switch (appstat->node_or_link) {
+-
+- case DESSERT_APPSTATS_NODEORLINK_NONE:
+- break;
+- case DESSERT_APPSTATS_NODEORLINK_NODE:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSMACADDRESS1_FLAG;
+-
+- rowreq_ctx->data.appStatsMacAddress1_len = ETHER_ADDR_LEN;
+- memcpy(rowreq_ctx->data.appStatsMacAddress1, appstat->macaddress1,
+- ETHER_ADDR_LEN);
+-
+- break;
+- case DESSERT_APPSTATS_NODEORLINK_LINK:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSMACADDRESS1_FLAG
+- | COLUMN_APPSTATSMACADDRESS2_FLAG;
+-
+- rowreq_ctx->data.appStatsMacAddress1_len = ETHER_ADDR_LEN;
+- memcpy(rowreq_ctx->data.appStatsMacAddress1, appstat->macaddress1,
+- ETHER_ADDR_LEN);
+-
+- rowreq_ctx->data.appStatsMacAddress2_len = ETHER_ADDR_LEN;
+- memcpy(rowreq_ctx->data.appStatsMacAddress2, appstat->macaddress2,
+- ETHER_ADDR_LEN);
+-
+- break;
+- default:
+- dessert_err("appstats->node_or_link not valid!");
+- }
+-
+- /* which of the 'value'-columns is actually present? */
+- switch (appstat->value_type) {
+-
+- case DESSERT_APPSTATS_VALUETYPE_BOOL:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSTRUTHVALUE_FLAG;
+- appStatsTruthValue_map(&(rowreq_ctx->data.appStatsTruthValue),appstat->bool);
+- break;
+-
+- case DESSERT_APPSTATS_VALUETYPE_INT32:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSINTEGER32_FLAG;
+- rowreq_ctx->data.appStatsInteger32 = appstat->int32;
+-
+- break;
+-
+- case DESSERT_APPSTATS_VALUETYPE_UINT32:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSUNSIGNED32_FLAG;
+- rowreq_ctx->data.appStatsUnsigned32 = appstat->uint32;
+-
+- break;
+-
+- case DESSERT_APPSTATS_VALUETYPE_COUNTER64:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSCOUNTER64_FLAG;
+- rowreq_ctx->data.appStatsCounter64.low = appstat->counter64
+- & 0xffffffff;
+- rowreq_ctx->data.appStatsCounter64.high = appstat->counter64 >> 32;
+-
+- break;
+-
+- case DESSERT_APPSTATS_VALUETYPE_OCTETSTRING:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSOCTETSTRING_FLAG;
+- rowreq_ctx->data.appStatsOctetString_len = appstat->octetstring_len;
+- memcpy(&(rowreq_ctx->data.appStatsOctetString), appstat->octetstring, appstat->octetstring_len);
+-
+- break;
+-
+- default:
+- dessert_err("appstats->value_type not valid! [%s]", appstat->name);
+- }
+-
+- /*
+- * insert into table container
+- */
+- CONTAINER_INSERT(container, rowreq_ctx);
+- }
+-
+- _dessert_agentx_appstats_free_list(&appstats_list);
+-
+- DEBUGMSGT(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_load", "inserted %d records\n", count));
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_container_load */
+-
+-/**
+- * container clean up
+- *
+- * @param container container with all current items
+- *
+- * This optional callback is called prior to all
+- * item's being removed from the container. If you
+- * need to do any processing before that, do it here.
+- *
+- * @note
+- * The MFD helper will take care of releasing all the row contexts.
+- *
+- */
+-void
+-dessertAppStatsTable_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_free", "called\n"));
+-
+- /*
+- * TODO:380:M: Free dessertAppStatsTable container data.
+- */
+-} /* dessertAppStatsTable_container_free */
+-
+-/**
+- * prepare row for processing.
+- *
+- * When the agent has located the row for a request, this function is
+- * called to prepare the row for processing. If you fully populated
+- * the data context during the index setup phase, you may not need to
+- * do anything.
+- *
+- * @param rowreq_ctx pointer to a context.
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- */
+-int
+-dessertAppStatsTable_row_prep(dessertAppStatsTable_rowreq_ctx * rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_row_prep", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:390:o: Prepare row for request.
+- * If populating row data was delayed, this is the place to
+- * fill in the row for this request.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_row_prep */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_access.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_access.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,93 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_DATA_ACCESS_H
+-#define DESSERTAPPSTATSTABLE_DATA_ACCESS_H
+-
+-#include "../dessert_internal.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+-
+-
+- int
+- dessertAppStatsTable_init_data(dessertAppStatsTable_registration *
+- dessertAppStatsTable_reg);
+-
+-
+- /*
+- * TODO:180:o: Review dessertAppStatsTable cache timeout.
+- * The number of seconds before the cache times out
+- */
+-#define DESSERTAPPSTATSTABLE_CACHE_TIMEOUT DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT
+-
+- void dessertAppStatsTable_container_init(netsnmp_container
+- **
+- container_ptr_ptr,
+- netsnmp_cache *
+- cache);
+- void
+- dessertAppStatsTable_container_shutdown(netsnmp_container *
+- container_ptr);
+-
+- int dessertAppStatsTable_container_load(netsnmp_container *
+- container);
+- void dessertAppStatsTable_container_free(netsnmp_container *
+- container);
+-
+- int dessertAppStatsTable_cache_load(netsnmp_container *
+- container);
+- void dessertAppStatsTable_cache_free(netsnmp_container *
+- container);
+-
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- *********************************************************************
+- * Since we have no idea how you really access your data, we'll go with
+- * a worst case example: a flat text file.
+- */
+-#define MAX_LINE_SIZE 256
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+- int
+- dessertAppStatsTable_row_prep(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_get.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_get.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1088 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-
+-
+-/** @defgroup data_get data_get: Routines to get data
+- *
+- * TODO:230:M: Implement dessertAppStatsTable get routines.
+- * TODO:240:M: Implement dessertAppStatsTable mapping routines (if any).
+- *
+- * These routine are used to get the value for individual objects. The
+- * row context is passed, along with a pointer to the memory where the
+- * value should be copied.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+-
+-/*
+- * ---------------------------------------------------------------------
+- * * TODO:200:r: Implement dessertAppStatsTable data context functions.
+- */
+-
+-
+-/**
+- * set mib index(es)
+- *
+- * @param tbl_idx mib index structure
+- * @param appStatsIndex_val
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This convenience function is useful for setting all the MIB index
+- * components with a single function call. It is assume that the C values
+- * have already been mapped from their native/rawformat to the MIB format.
+- */
+-int
+-dessertAppStatsTable_indexes_set_tbl_idx(dessertAppStatsTable_mib_index *
+- tbl_idx, long appStatsIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_indexes_set_tbl_idx", "called\n"));
+-
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- tbl_idx->appStatsIndex = appStatsIndex_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_indexes_set_tbl_idx */
+-
+-/**
+- * @internal
+- * set row context indexes
+- *
+- * @param reqreq_ctx the row context that needs updated indexes
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This function sets the mib indexs, then updates the oid indexs
+- * from the mib index.
+- */
+-int
+-dessertAppStatsTable_indexes_set(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx, long appStatsIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_indexes_set", "called\n"));
+-
+- if (MFD_SUCCESS !=
+- dessertAppStatsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+- appStatsIndex_val))
+- return MFD_ERROR;
+-
+- /*
+- * convert mib index to oid index
+- */
+- rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+- if (0 != dessertAppStatsTable_index_to_oid(&rowreq_ctx->oid_idx,
+- &rowreq_ctx->tbl_idx)) {
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_indexes_set */
+-
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsName
+- * appStatsName is subid 2 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.2
+- * Description:
+-The name of the statistical datum
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the appStatsName data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsName_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsName_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsName.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsName_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsName_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsName_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsName_val_ptr_ptr,
+- size_t *appStatsName_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsName_val_ptr_ptr)
+- && (NULL != *appStatsName_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsName_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsName_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsName data.
+- * copy (* appStatsName_val_ptr_ptr ) data and (* appStatsName_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsName data
+- */
+- if ((NULL == (*appStatsName_val_ptr_ptr)) ||
+- ((*appStatsName_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsName_len *
+- sizeof(rowreq_ctx->data.appStatsName[0])))) {
+- /*
+- * allocate space for appStatsName data
+- */
+- (*appStatsName_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsName_len *
+- sizeof(rowreq_ctx->data.appStatsName[0]));
+- if (NULL == (*appStatsName_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsName_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsName_len *
+- sizeof(rowreq_ctx->data.appStatsName[0]);
+- memcpy((*appStatsName_val_ptr_ptr), rowreq_ctx->data.appStatsName,
+- rowreq_ctx->data.appStatsName_len *
+- sizeof(rowreq_ctx->data.appStatsName[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsName_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsDesc
+- * appStatsDesc is subid 3 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.3
+- * Description:
+-A short description of the statistical datum
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the appStatsDesc data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsDesc_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsDesc_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsDesc.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsDesc_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsDesc_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsDesc_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsDesc_val_ptr_ptr,
+- size_t *appStatsDesc_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsDesc_val_ptr_ptr)
+- && (NULL != *appStatsDesc_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsDesc_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsDesc_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsDesc data.
+- * copy (* appStatsDesc_val_ptr_ptr ) data and (* appStatsDesc_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsDesc data
+- */
+- if ((NULL == (*appStatsDesc_val_ptr_ptr)) ||
+- ((*appStatsDesc_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsDesc_len *
+- sizeof(rowreq_ctx->data.appStatsDesc[0])))) {
+- /*
+- * allocate space for appStatsDesc data
+- */
+- (*appStatsDesc_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsDesc_len *
+- sizeof(rowreq_ctx->data.appStatsDesc[0]));
+- if (NULL == (*appStatsDesc_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsDesc_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsDesc_len *
+- sizeof(rowreq_ctx->data.appStatsDesc[0]);
+- memcpy((*appStatsDesc_val_ptr_ptr), rowreq_ctx->data.appStatsDesc,
+- rowreq_ctx->data.appStatsDesc_len *
+- sizeof(rowreq_ctx->data.appStatsDesc[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsDesc_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsNodeOrLink
+- * appStatsNodeOrLink is subid 4 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.4
+- * Description:
+-Determines which of the appStatsMacAddress{1,2} coloumns
+- is valid and therefore indicates whether the information provided
+- by this row relates to a node or a link.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- * Enum range: 3/8. Values: none(0), node(1), link(2)
+- *
+- * Its syntax is INTEGER (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appStatsNodeOrLink.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appStatsNodeOrLink_map(u_long * mib_appStatsNodeOrLink_val_ptr,
+- u_long raw_appStatsNodeOrLink_val)
+-{
+- netsnmp_assert(NULL != mib_appStatsNodeOrLink_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsNodeOrLink_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appStatsNodeOrLink enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appStatsNodeOrLink_val) {
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NONE:
+- *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_NONE;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NODE:
+- *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_NODE;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_LINK:
+- *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_LINK;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't map value %ld for appStatsNodeOrLink\n",
+- raw_appStatsNodeOrLink_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appStatsNodeOrLink_map */
+-
+-/**
+- * Extract the current value of the appStatsNodeOrLink data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsNodeOrLink_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsNodeOrLink_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appStatsNodeOrLink_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsNodeOrLink_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsNodeOrLink_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsNodeOrLink data.
+- * copy (* appStatsNodeOrLink_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsNodeOrLink_val_ptr) = rowreq_ctx->data.appStatsNodeOrLink;
+-
+- return MFD_SUCCESS;
+-} /* appStatsNodeOrLink_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsValueType
+- * appStatsValueType is subid 5 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.5
+- * Description:
+-Indicates which of the coloumns (appStatsTruthValue,
+- appStatsInterger32, appStatsUInteger32, appStatsCounter64,
+- appStatsOctetString) in the dessertAppStatsTable is actually valid.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- * Enum range: 3/8. Values: bool(0), int32(1), uint32(2), counter64(3), octetstring(4)
+- *
+- * Its syntax is INTEGER (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appStatsValueType.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appStatsValueType_map(u_long * mib_appStatsValueType_val_ptr,
+- u_long raw_appStatsValueType_val)
+-{
+- netsnmp_assert(NULL != mib_appStatsValueType_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsValueType_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appStatsValueType enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appStatsValueType_val) {
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_BOOL:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_BOOL;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_INT32:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_INT32;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_UINT32:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_UINT32;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_COUNTER64:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_COUNTER64;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_OCTETSTRING:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_OCTETSTRING;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR, "couldn't map value %ld for appStatsValueType\n",
+- raw_appStatsValueType_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appStatsValueType_map */
+-
+-/**
+- * Extract the current value of the appStatsValueType data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsValueType_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsValueType_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appStatsValueType_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsValueType_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsValueType_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsValueType data.
+- * copy (* appStatsValueType_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsValueType_val_ptr) = rowreq_ctx->data.appStatsValueType;
+-
+- return MFD_SUCCESS;
+-} /* appStatsValueType_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsMacAddress1
+- * appStatsMacAddress1 is subid 6 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.6
+- * Description:
+-The hardware address of a node.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 1x:
+- *
+- * Ranges: 6;
+- *
+- * Its syntax is MacAddress (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 6)
+- */
+-/**
+- * Extract the current value of the appStatsMacAddress1 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsMacAddress1_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsMacAddress1_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsMacAddress1.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsMacAddress1_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsMacAddress1_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsMacAddress1_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsMacAddress1_val_ptr_ptr,
+- size_t *appStatsMacAddress1_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsMacAddress1_val_ptr_ptr)
+- && (NULL != *appStatsMacAddress1_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsMacAddress1_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsMacAddress1_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsMacAddress1 data.
+- * copy (* appStatsMacAddress1_val_ptr_ptr ) data and (* appStatsMacAddress1_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsMacAddress1 data
+- */
+- if ((NULL == (*appStatsMacAddress1_val_ptr_ptr)) ||
+- ((*appStatsMacAddress1_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsMacAddress1_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress1[0])))) {
+- /*
+- * allocate space for appStatsMacAddress1 data
+- */
+- (*appStatsMacAddress1_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsMacAddress1_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress1[0]));
+- if (NULL == (*appStatsMacAddress1_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsMacAddress1_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsMacAddress1_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress1[0]);
+- memcpy((*appStatsMacAddress1_val_ptr_ptr),
+- rowreq_ctx->data.appStatsMacAddress1,
+- rowreq_ctx->data.appStatsMacAddress1_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress1[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsMacAddress1_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsMacAddress2
+- * appStatsMacAddress2 is subid 7 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.7
+- * Description:
+-The hardware address of a second node.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 1x:
+- *
+- * Ranges: 6;
+- *
+- * Its syntax is MacAddress (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 6)
+- */
+-/**
+- * Extract the current value of the appStatsMacAddress2 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsMacAddress2_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsMacAddress2_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsMacAddress2.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsMacAddress2_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsMacAddress2_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsMacAddress2_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsMacAddress2_val_ptr_ptr,
+- size_t *appStatsMacAddress2_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsMacAddress2_val_ptr_ptr)
+- && (NULL != *appStatsMacAddress2_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsMacAddress2_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsMacAddress2_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsMacAddress2 data.
+- * copy (* appStatsMacAddress2_val_ptr_ptr ) data and (* appStatsMacAddress2_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsMacAddress2 data
+- */
+- if ((NULL == (*appStatsMacAddress2_val_ptr_ptr)) ||
+- ((*appStatsMacAddress2_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsMacAddress2_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress2[0])))) {
+- /*
+- * allocate space for appStatsMacAddress2 data
+- */
+- (*appStatsMacAddress2_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsMacAddress2_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress2[0]));
+- if (NULL == (*appStatsMacAddress2_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsMacAddress2_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsMacAddress2_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress2[0]);
+- memcpy((*appStatsMacAddress2_val_ptr_ptr),
+- rowreq_ctx->data.appStatsMacAddress2,
+- rowreq_ctx->data.appStatsMacAddress2_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress2[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsMacAddress2_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsTruthValue
+- * appStatsTruthValue is subid 8 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.8
+- * Description:
+-A statistical datum with TruthValue semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- * Enum range: 2/8. Values: true(1), false(2)
+- *
+- * Its syntax is TruthValue (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appStatsTruthValue.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appStatsTruthValue_map(u_long * mib_appStatsTruthValue_val_ptr,
+- u_long raw_appStatsTruthValue_val)
+-{
+- netsnmp_assert(NULL != mib_appStatsTruthValue_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsTruthValue_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appStatsTruthValue enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appStatsTruthValue_val) {
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_TRUE:
+- *mib_appStatsTruthValue_val_ptr = TRUTHVALUE_TRUE;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_FALSE:
+- *mib_appStatsTruthValue_val_ptr = TRUTHVALUE_FALSE;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't map value %ld for appStatsTruthValue\n",
+- raw_appStatsTruthValue_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appStatsTruthValue_map */
+-
+-/**
+- * Extract the current value of the appStatsTruthValue data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsTruthValue_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsTruthValue_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appStatsTruthValue_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsTruthValue_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsTruthValue_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsTruthValue data.
+- * copy (* appStatsTruthValue_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsTruthValue_val_ptr) = rowreq_ctx->data.appStatsTruthValue;
+-
+- return MFD_SUCCESS;
+-} /* appStatsTruthValue_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsInteger32
+- * appStatsInteger32 is subid 9 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.9
+- * Description:
+-A statistical datum with Integer32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is INTEGER32 (based on perltype INTEGER32)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+- */
+-/**
+- * Extract the current value of the appStatsInteger32 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsInteger32_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsInteger32_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- long *appStatsInteger32_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsInteger32_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsInteger32_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsInteger32 data.
+- * copy (* appStatsInteger32_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsInteger32_val_ptr) = rowreq_ctx->data.appStatsInteger32;
+-
+- return MFD_SUCCESS;
+-} /* appStatsInteger32_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsUnsigned32
+- * appStatsUnsigned32 is subid 10 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.10
+- * Description:
+-A statistical datum with Unsigned32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+- * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+- */
+-/**
+- * Extract the current value of the appStatsUnsigned32 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsUnsigned32_val_ptr
+- * Pointer to storage for a u_long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsUnsigned32_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appStatsUnsigned32_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsUnsigned32_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsUnsigned32_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsUnsigned32 data.
+- * copy (* appStatsUnsigned32_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsUnsigned32_val_ptr) = rowreq_ctx->data.appStatsUnsigned32;
+-
+- return MFD_SUCCESS;
+-} /* appStatsUnsigned32_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsCounter64
+- * appStatsCounter64 is subid 11 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.11
+- * Description:
+-A statistical datum with Counter64 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the appStatsCounter64 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsCounter64_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsCounter64_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * appStatsCounter64_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsCounter64_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy appStatsCounter64 data.
+- * get (* appStatsCounter64_val_ptr ).low and (* appStatsCounter64_val_ptr ).high from rowreq_ctx->data
+- */
+- (*appStatsCounter64_val_ptr).high =
+- rowreq_ctx->data.appStatsCounter64.high;
+- (*appStatsCounter64_val_ptr).low =
+- rowreq_ctx->data.appStatsCounter64.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* appStatsCounter64_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsOctetString
+- * appStatsOctetString is subid 12 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.12
+- * Description:
+-A statistical datum containing of up to 1024 octets.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 0
+- * settable 0
+- *
+- * Ranges: 0 - 1024;
+- *
+- * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 1024)
+- */
+-/**
+- * Extract the current value of the appStatsOctetString data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsOctetString_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsOctetString_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsOctetString.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsOctetString_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsOctetString_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsOctetString_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsOctetString_val_ptr_ptr,
+- size_t *appStatsOctetString_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsOctetString_val_ptr_ptr)
+- && (NULL != *appStatsOctetString_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsOctetString_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsOctetString_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsOctetString data.
+- * copy (* appStatsOctetString_val_ptr_ptr ) data and (* appStatsOctetString_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsOctetString data
+- */
+- if ((NULL == (*appStatsOctetString_val_ptr_ptr)) ||
+- ((*appStatsOctetString_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsOctetString_len *
+- sizeof(rowreq_ctx->data.appStatsOctetString[0])))) {
+- /*
+- * allocate space for appStatsOctetString data
+- */
+- (*appStatsOctetString_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsOctetString_len *
+- sizeof(rowreq_ctx->data.appStatsOctetString[0]));
+- if (NULL == (*appStatsOctetString_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsOctetString_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsOctetString_len *
+- sizeof(rowreq_ctx->data.appStatsOctetString[0]);
+- memcpy((*appStatsOctetString_val_ptr_ptr),
+- rowreq_ctx->data.appStatsOctetString,
+- rowreq_ctx->data.appStatsOctetString_len *
+- sizeof(rowreq_ctx->data.appStatsOctetString[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsOctetString_get */
+-
+-
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_get.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_get.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,174 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- *
+- * @file dessertAppStatsTable_data_get.h
+- *
+- * @addtogroup get
+- *
+- * Prototypes for get functions
+- *
+- * @{
+- */
+-#ifndef DESSERTAPPSTATSTABLE_DATA_GET_H
+-#define DESSERTAPPSTATSTABLE_DATA_GET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * GET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * GET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+- /*
+- * indexes
+- */
+- int appStatsIndex_map(uint *mib_appStatsIndex_val_ptr, uint
+- raw_appStatsIndex_val);
+-
+- int appStatsName_map(char **mib_appStatsName_val_ptr_ptr,
+- size_t
+- *mib_appStatsName_val_ptr_len_ptr,
+- char *raw_appStatsName_val_ptr,
+- size_t raw_appStatsName_val_ptr_len,
+- int allow_realloc);
+- int appStatsName_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appStatsName_val_ptr_ptr,
+- size_t *appStatsName_val_ptr_len_ptr);
+- int appStatsDesc_map(char **mib_appStatsDesc_val_ptr_ptr,
+- size_t
+- *mib_appStatsDesc_val_ptr_len_ptr,
+- char *raw_appStatsDesc_val_ptr,
+- size_t raw_appStatsDesc_val_ptr_len,
+- int allow_realloc);
+- int appStatsDesc_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appStatsDesc_val_ptr_ptr,
+- size_t *appStatsDesc_val_ptr_len_ptr);
+- int appStatsNodeOrLink_map(u_long *
+- mib_appStatsNodeOrLink_val_ptr,
+- u_long
+- raw_appStatsNodeOrLink_val);
+- int appStatsNodeOrLink_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long *
+- appStatsNodeOrLink_val_ptr);
+- int appStatsValueType_map(u_long *
+- mib_appStatsValueType_val_ptr,
+- u_long
+- raw_appStatsValueType_val);
+- int appStatsValueType_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long *
+- appStatsValueType_val_ptr);
+- int appStatsMacAddress1_map(char
+- **mib_appStatsMacAddress1_val_ptr_ptr,
+- size_t
+- *mib_appStatsMacAddress1_val_ptr_len_ptr,
+- char
+- *raw_appStatsMacAddress1_val_ptr,
+- size_t
+- raw_appStatsMacAddress1_val_ptr_len,
+- int allow_realloc);
+- int appStatsMacAddress1_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- char
+- **appStatsMacAddress1_val_ptr_ptr,
+- size_t
+- *appStatsMacAddress1_val_ptr_len_ptr);
+- int appStatsMacAddress2_map(char
+- **mib_appStatsMacAddress2_val_ptr_ptr,
+- size_t
+- *mib_appStatsMacAddress2_val_ptr_len_ptr,
+- char
+- *raw_appStatsMacAddress2_val_ptr,
+- size_t
+- raw_appStatsMacAddress2_val_ptr_len,
+- int allow_realloc);
+- int appStatsMacAddress2_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- char
+- **appStatsMacAddress2_val_ptr_ptr,
+- size_t
+- *appStatsMacAddress2_val_ptr_len_ptr);
+- int appStatsTruthValue_map(u_long *
+- mib_appStatsTruthValue_val_ptr,
+- u_long
+- raw_appStatsTruthValue_val);
+- int appStatsTruthValue_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long *
+- appStatsTruthValue_val_ptr);
+- int appStatsInteger32_map(long
+- *mib_appStatsInteger32_val_ptr,
+- long raw_appStatsInteger32_val);
+- int appStatsInteger32_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- long *appStatsInteger32_val_ptr);
+- int appStatsUnsigned32_map(u_long *
+- mib_appStatsUnsigned32_val_ptr,
+- u_long
+- raw_appStatsUnsigned32_val);
+- int appStatsUnsigned32_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long *
+- appStatsUnsigned32_val_ptr);
+- int appStatsCounter64_map(U64 *
+- mib_appStatsCounter64_val_ptr,
+- U64 raw_appStatsCounter64_val);
+- int appStatsCounter64_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * appStatsCounter64_val_ptr);
+- int appStatsOctetString_map(char
+- **mib_appStatsOctetString_val_ptr_ptr,
+- size_t
+- *mib_appStatsOctetString_val_ptr_len_ptr,
+- char
+- *raw_appStatsOctetString_val_ptr,
+- size_t
+- raw_appStatsOctetString_val_ptr_len,
+- int allow_realloc);
+- int appStatsOctetString_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- char
+- **appStatsOctetString_val_ptr_ptr,
+- size_t
+- *appStatsOctetString_val_ptr_len_ptr);
+-
+-
+- int
+- dessertAppStatsTable_indexes_set_tbl_idx
+- (dessertAppStatsTable_mib_index * tbl_idx, long appStatsIndex_val);
+- int
+- dessertAppStatsTable_indexes_set(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx, long appStatsIndex_val);
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_DATA_GET_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_set.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_set.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-
+-
+-/** @defgroup data_set data_set: Routines to set data
+- *
+- * These routines are used to set the value for individual objects. The
+- * row context is passed, along with the new value.
+- *
+- * @{
+- */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_set.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_set.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_DATA_SET_H
+-#define DESSERTAPPSTATSTABLE_DATA_SET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * SET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * SET Table declarations
+- */
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_enums.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_enums.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,118 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_ENUMS_H
+-#define DESSERTAPPSTATSTABLE_ENUMS_H
+-
+-#include "../dessert.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- * NOTES on enums
+- * ==============
+- *
+- * Value Mapping
+- * -------------
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them
+- * below. For example, a boolean flag (1/0) is usually represented
+- * as a TruthValue in a MIB, which maps to the values (1/2).
+- *
+- */
+-/*************************************************************************
+- *************************************************************************
+- *
+- * enum definitions for table dessertAppStatsTable
+- *
+- *************************************************************************
+- *************************************************************************/
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appStatsNodeOrLink (INTEGER / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef APPSTATSNODEORLINK_ENUMS
+-#define APPSTATSNODEORLINK_ENUMS
+-
+-#define APPSTATSNODEORLINK_NONE 0
+-#define APPSTATSNODEORLINK_NODE 1
+-#define APPSTATSNODEORLINK_LINK 2
+-
+-#endif /* APPSTATSNODEORLINK_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appStatsNodeOrLink enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NONE DESSERT_APPSTATS_NODEORLINK_NONE
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NODE DESSERT_APPSTATS_NODEORLINK_NODE
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_LINK DESSERT_APPSTATS_NODEORLINK_LINK
+-
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appStatsValueType (INTEGER / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef APPSTATSVALUETYPE_ENUMS
+-#define APPSTATSVALUETYPE_ENUMS
+-
+-#define APPSTATSVALUETYPE_BOOL 0
+-#define APPSTATSVALUETYPE_INT32 1
+-#define APPSTATSVALUETYPE_UINT32 2
+-#define APPSTATSVALUETYPE_COUNTER64 3
+-#define APPSTATSVALUETYPE_OCTETSTRING 4
+-
+-#endif /* APPSTATSVALUETYPE_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appStatsValueType enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_BOOL DESSERT_APPSTATS_VALUETYPE_BOOL
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_INT32 DESSERT_APPSTATS_VALUETYPE_INT32
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_UINT32 DESSERT_APPSTATS_VALUETYPE_UINT32
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_COUNTER64 DESSERT_APPSTATS_VALUETYPE_COUNTER64
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_OCTETSTRING DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
+-
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appStatsTruthValue (TruthValue / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef TRUTHVALUE_ENUMS
+-#define TRUTHVALUE_ENUMS
+-
+-#define TRUTHVALUE_TRUE 1
+-#define TRUTHVALUE_FALSE 2
+-
+-#endif /* TRUTHVALUE_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appStatsTruthValue enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_TRUE DESSERT_APPSTATS_BOOL_TRUE
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_FALSE DESSERT_APPSTATS_BOOL_FALSE
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_interface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_interface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1069 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-
+-
+-#include <net-snmp/agent/table_container.h>
+-#include <net-snmp/library/container.h>
+-
+-#include "dessertAppStatsTable_interface.h"
+-
+-#include <ctype.h>
+-
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+-typedef struct dessertAppStatsTable_interface_ctx_s {
+-
+- netsnmp_container *container;
+- netsnmp_cache *cache;
+-
+- dessertAppStatsTable_registration *user_ctx;
+-
+- netsnmp_table_registration_info tbl_info;
+-
+- netsnmp_baby_steps_access_methods access_multiplexer;
+-
+-} dessertAppStatsTable_interface_ctx;
+-
+-static dessertAppStatsTable_interface_ctx dessertAppStatsTable_if_ctx;
+-
+-static void
+-_dessertAppStatsTable_container_init(dessertAppStatsTable_interface_ctx *
+- if_ctx);
+-static void
+-_dessertAppStatsTable_container_shutdown(dessertAppStatsTable_interface_ctx
+- * if_ctx);
+-
+-
+-netsnmp_container *
+-dessertAppStatsTable_container_get(void)
+-{
+- return dessertAppStatsTable_if_ctx.container;
+-}
+-
+-dessertAppStatsTable_registration *
+-dessertAppStatsTable_registration_get(void)
+-{
+- return dessertAppStatsTable_if_ctx.user_ctx;
+-}
+-
+-dessertAppStatsTable_registration *
+-dessertAppStatsTable_registration_set(dessertAppStatsTable_registration *
+- newreg)
+-{
+- dessertAppStatsTable_registration *old =
+- dessertAppStatsTable_if_ctx.user_ctx;
+- dessertAppStatsTable_if_ctx.user_ctx = newreg;
+- return old;
+-}
+-
+-int
+-dessertAppStatsTable_container_size(void)
+-{
+- return CONTAINER_SIZE(dessertAppStatsTable_if_ctx.container);
+-}
+-
+-/*
+- * mfd multiplexer modes
+- */
+-static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_pre_request;
+-static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_post_request;
+-static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_object_lookup;
+-static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_get_values;
+-/**
+- * @internal
+- * Initialize the table dessertAppStatsTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-_dessertAppStatsTable_initialize_interface
+- (dessertAppStatsTable_registration * reg_ptr, u_long flags)
+-{
+- netsnmp_baby_steps_access_methods *access_multiplexer =
+- &dessertAppStatsTable_if_ctx.access_multiplexer;
+- netsnmp_table_registration_info *tbl_info =
+- &dessertAppStatsTable_if_ctx.tbl_info;
+- netsnmp_handler_registration *reginfo;
+- netsnmp_mib_handler *handler;
+- int mfd_modes = 0;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_initialize_interface", "called\n"));
+-
+-
+- /*************************************************
+- *
+- * save interface context for dessertAppStatsTable
+- */
+- /*
+- * Setting up the table's definition
+- */
+- netsnmp_table_helper_add_indexes(tbl_info,ASN_INTEGER,
+- /** index: appStatsIndex */
+- 0);
+-
+- /*
+- * Define the minimum and maximum accessible columns. This
+- * optimizes retrival.
+- */
+- tbl_info->min_column = DESSERTAPPSTATSTABLE_MIN_COL;
+- tbl_info->max_column = DESSERTAPPSTATSTABLE_MAX_COL;
+-
+- /*
+- * save users context
+- */
+- dessertAppStatsTable_if_ctx.user_ctx = reg_ptr;
+-
+- /*
+- * call data access initialization code
+- */
+- dessertAppStatsTable_init_data(reg_ptr);
+-
+- /*
+- * set up the container
+- */
+- _dessertAppStatsTable_container_init(&dessertAppStatsTable_if_ctx);
+- if (NULL == dessertAppStatsTable_if_ctx.container) {
+- snmp_log(LOG_ERR,
+- "could not initialize container for dessertAppStatsTable\n");
+- return;
+- }
+-
+- /*
+- * access_multiplexer: REQUIRED wrapper for get request handling
+- */
+- access_multiplexer->object_lookup =
+- _mfd_dessertAppStatsTable_object_lookup;
+- access_multiplexer->get_values = _mfd_dessertAppStatsTable_get_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->pre_request =
+- _mfd_dessertAppStatsTable_pre_request;
+- access_multiplexer->post_request =
+- _mfd_dessertAppStatsTable_post_request;
+-
+-
+- /*************************************************
+- *
+- * Create a registration, save our reg data, register table.
+- */
+- DEBUGMSGTL(("dessertAppStatsTable:init_dessertAppStatsTable",
+- "Registering dessertAppStatsTable as a mibs-for-dummies table.\n"));
+- handler =
+- netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+- reginfo =
+- netsnmp_handler_registration_create("dessertAppStatsTable",
+- handler,
+- dessertAppStatsTable_oid,
+- dessertAppStatsTable_oid_size,
+- HANDLER_CAN_BABY_STEP |
+- HANDLER_CAN_RONLY);
+- if (NULL == reginfo) {
+- snmp_log(LOG_ERR,
+- "error registering table dessertAppStatsTable\n");
+- return;
+- }
+- reginfo->my_reg_void = &dessertAppStatsTable_if_ctx;
+-
+- /*************************************************
+- *
+- * set up baby steps handler, create it and inject it
+- */
+- if (access_multiplexer->object_lookup)
+- mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+- if (access_multiplexer->set_values)
+- mfd_modes |= BABY_STEP_SET_VALUES;
+- if (access_multiplexer->irreversible_commit)
+- mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+- if (access_multiplexer->object_syntax_checks)
+- mfd_modes |= BABY_STEP_CHECK_OBJECT;
+-
+- if (access_multiplexer->pre_request)
+- mfd_modes |= BABY_STEP_PRE_REQUEST;
+- if (access_multiplexer->post_request)
+- mfd_modes |= BABY_STEP_POST_REQUEST;
+-
+- if (access_multiplexer->undo_setup)
+- mfd_modes |= BABY_STEP_UNDO_SETUP;
+- if (access_multiplexer->undo_cleanup)
+- mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+- if (access_multiplexer->undo_sets)
+- mfd_modes |= BABY_STEP_UNDO_SETS;
+-
+- if (access_multiplexer->row_creation)
+- mfd_modes |= BABY_STEP_ROW_CREATE;
+- if (access_multiplexer->consistency_checks)
+- mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+- if (access_multiplexer->commit)
+- mfd_modes |= BABY_STEP_COMMIT;
+- if (access_multiplexer->undo_commit)
+- mfd_modes |= BABY_STEP_UNDO_COMMIT;
+-
+- handler = netsnmp_baby_steps_handler_get(mfd_modes);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+- */
+- handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject container_table helper
+- */
+- handler =
+- netsnmp_container_table_handler_get(tbl_info,
+- dessertAppStatsTable_if_ctx.
+- container,
+- TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject cache helper
+- */
+- if (NULL != dessertAppStatsTable_if_ctx.cache) {
+- handler =
+- netsnmp_cache_handler_get(dessertAppStatsTable_if_ctx.cache);
+- netsnmp_inject_handler(reginfo, handler);
+- }
+-
+- /*
+- * register table
+- */
+- netsnmp_register_table(reginfo, tbl_info);
+-
+-} /* _dessertAppStatsTable_initialize_interface */
+-
+-/**
+- * @internal
+- * Shutdown the table dessertAppStatsTable
+- */
+-void
+-_dessertAppStatsTable_shutdown_interface(dessertAppStatsTable_registration
+- * reg_ptr)
+-{
+- /*
+- * shutdown the container
+- */
+- _dessertAppStatsTable_container_shutdown(&dessertAppStatsTable_if_ctx);
+-}
+-
+-void
+-dessertAppStatsTable_valid_columns_set(netsnmp_column_info *vc)
+-{
+- dessertAppStatsTable_if_ctx.tbl_info.valid_columns = vc;
+-} /* dessertAppStatsTable_valid_columns_set */
+-
+-/**
+- * @internal
+- * convert the index component stored in the context to an oid
+- */
+-int
+-dessertAppStatsTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertAppStatsTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_appStatsIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_appStatsIndex, 0x00, sizeof(var_appStatsIndex));
+- var_appStatsIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_appStatsIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_index_to_oid", "called\n"));
+-
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- snmp_set_var_value(&var_appStatsIndex,
+- (u_char *) & mib_idx->appStatsIndex,
+- sizeof(mib_idx->appStatsIndex));
+-
+-
+- err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+- NULL, 0, &var_appStatsIndex);
+- if (err)
+- snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_appStatsIndex);
+-
+- return err;
+-} /* dessertAppStatsTable_index_to_oid */
+-
+-/**
+- * extract dessertAppStatsTable indexes from a netsnmp_index
+- *
+- * @retval SNMP_ERR_NOERROR : no error
+- * @retval SNMP_ERR_GENERR : error
+- */
+-int
+-dessertAppStatsTable_index_from_oid(netsnmp_index * oid_idx,
+- dessertAppStatsTable_mib_index *
+- mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_appStatsIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_appStatsIndex, 0x00, sizeof(var_appStatsIndex));
+- var_appStatsIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_appStatsIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_index_from_oid", "called\n"));
+-
+- /*
+- * parse the oid into the individual index components
+- */
+- err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+- &var_appStatsIndex);
+- if (err == SNMP_ERR_NOERROR) {
+- /*
+- * copy out values
+- */
+- mib_idx->appStatsIndex = *((long *)var_appStatsIndex.val.string);
+-
+-
+- }
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_appStatsIndex);
+-
+- return err;
+-} /* dessertAppStatsTable_index_from_oid */
+-
+-
+-/*
+- *********************************************************************
+- * @internal
+- * allocate resources for a dessertAppStatsTable_rowreq_ctx
+- */
+-dessertAppStatsTable_rowreq_ctx *
+-dessertAppStatsTable_allocate_rowreq_ctx(void)
+-{
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
+- SNMP_MALLOC_TYPEDEF(dessertAppStatsTable_rowreq_ctx);
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:dessertAppStatsTable_allocate_rowreq_ctx", "called\n"));
+-
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+- "dessertAppStatsTable_rowreq_ctx.\n");
+- return NULL;
+- }
+-
+- rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+-
+- rowreq_ctx->dessertAppStatsTable_data_list = NULL;
+-
+-
+- return rowreq_ctx;
+-} /* dessertAppStatsTable_allocate_rowreq_ctx */
+-
+-/*
+- * @internal
+- * release resources for a dessertAppStatsTable_rowreq_ctx
+- */
+-void
+-dessertAppStatsTable_release_rowreq_ctx(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:dessertAppStatsTable_release_rowreq_ctx", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+-
+- /*
+- * free index oid pointer
+- */
+- if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+- free(rowreq_ctx->oid_idx.oids);
+-
+- SNMP_FREE(rowreq_ctx);
+-} /* dessertAppStatsTable_release_rowreq_ctx */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppStatsTable_pre_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_pre_request", "called\n"));
+-
+- if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable",
+- "skipping additional pre_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- rc = dessertAppStatsTable_pre_request(dessertAppStatsTable_if_ctx.
+- user_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppStatsTable", "error %d from "
+- "dessertAppStatsTable_pre_request\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppStatsTable_pre_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppStatsTable_post_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc, packet_rc;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_post_request", "called\n"));
+-
+- /*
+- * release row context, if deleted
+- */
+- if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+- dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
+-
+- /*
+- * wait for last call before calling user
+- */
+- if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable",
+- "waiting for last post_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+- rc = dessertAppStatsTable_post_request(dessertAppStatsTable_if_ctx.
+- user_ctx, packet_rc);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppStatsTable", "error %d from "
+- "dessertAppStatsTable_post_request\n", rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppStatsTable_post_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppStatsTable_object_lookup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc = SNMP_ERR_NOERROR;
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_object_lookup", "called\n"));
+-
+- /*
+- * get our context from mfd
+- * dessertAppStatsTable_interface_ctx *if_ctx =
+- * (dessertAppStatsTable_interface_ctx *)reginfo->my_reg_void;
+- */
+-
+- if (NULL == rowreq_ctx) {
+- rc = SNMP_ERR_NOCREATION;
+- }
+-
+- if (MFD_SUCCESS != rc)
+- netsnmp_request_set_error_all(requests, rc);
+- else
+- dessertAppStatsTable_row_prep(rowreq_ctx);
+-
+- return SNMP_VALIDATE_ERR(rc);
+-} /* _mfd_dessertAppStatsTable_object_lookup */
+-
+-/***********************************************************************
+- *
+- * GET processing
+- *
+- ***********************************************************************/
+-/*
+- * @internal
+- * Retrieve the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppStatsTable_get_column(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "called for %d\n", column));
+-
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appStatsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPSTATSNAME:
+- if (!(COLUMN_APPSTATSNAME_FLAG & rowreq_ctx->column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsName) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsName_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appStatsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPSTATSDESC:
+- if (!(COLUMN_APPSTATSDESC_FLAG & rowreq_ctx->column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsDesc) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsDesc_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appStatsNodeOrLink(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPSTATSNODEORLINK:
+- if (!
+- (COLUMN_APPSTATSNODEORLINK_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsNodeOrLink) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appStatsNodeOrLink_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsValueType(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPSTATSVALUETYPE:
+- if (!
+- (COLUMN_APPSTATSVALUETYPE_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsValueType) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appStatsValueType_get(rowreq_ctx, (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsMacAddress1(6)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPSTATSMACADDRESS1:
+- if (!
+- (COLUMN_APPSTATSMACADDRESS1_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsMacAddress1) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsMacAddress1_get(rowreq_ctx,
+- (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appStatsMacAddress2(7)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPSTATSMACADDRESS2:
+- if (!
+- (COLUMN_APPSTATSMACADDRESS2_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsMacAddress2) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsMacAddress2_get(rowreq_ctx,
+- (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appStatsTruthValue(8)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPSTATSTRUTHVALUE:
+- if (!
+- (COLUMN_APPSTATSTRUTHVALUE_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsTruthValue) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appStatsTruthValue_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsInteger32(9)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+- */
+- case COLUMN_APPSTATSINTEGER32:
+- if (!
+- (COLUMN_APPSTATSINTEGER32_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsInteger32) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(long);
+- var->type = ASN_INTEGER;
+- rc = appStatsInteger32_get(rowreq_ctx, (long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsUnsigned32(10)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+- */
+- case COLUMN_APPSTATSUNSIGNED32:
+- if (!
+- (COLUMN_APPSTATSUNSIGNED32_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsUnsigned32) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_UNSIGNED;
+- rc = appStatsUnsigned32_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsCounter64(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_APPSTATSCOUNTER64:
+- if (!
+- (COLUMN_APPSTATSCOUNTER64_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsCounter64) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = appStatsCounter64_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * appStatsOctetString(12)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+- */
+- case COLUMN_APPSTATSOCTETSTRING:
+- if (!
+- (COLUMN_APPSTATSOCTETSTRING_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsOctetString) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsOctetString_get(rowreq_ctx,
+- (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- default:
+- if (DESSERTAPPSTATSTABLE_MIN_COL <= column
+- && column <= DESSERTAPPSTATSTABLE_MAX_COL) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "assume column %d is reserved\n", column));
+- rc = MFD_SKIP;
+- } else {
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppStatsTable_get_column\n",
+- column);
+- }
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppStatsTable_get_column */
+-
+-int
+-_mfd_dessertAppStatsTable_get_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- u_char *old_string;
+- void (*dataFreeHook) (void *);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- DEBUGMSGTL(("9:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_values", "exists %p\n", rowreq_ctx->column_exists_flags));
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * save old pointer, so we can free it if replaced
+- */
+- old_string = requests->requestvb->val.string;
+- dataFreeHook = requests->requestvb->dataFreeHook;
+- if (NULL == requests->requestvb->val.string) {
+- requests->requestvb->val.string = requests->requestvb->buf;
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- } else if (requests->requestvb->buf ==
+- requests->requestvb->val.string) {
+- if (requests->requestvb->val_len !=
+- sizeof(requests->requestvb->buf))
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- }
+-
+- /*
+- * get column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppStatsTable_get_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- if (MFD_SKIP == rc) {
+- requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+- rc = SNMP_ERR_NOERROR;
+- }
+- } else if (NULL == requests->requestvb->val.string) {
+- snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+- rc = SNMP_ERR_GENERR;
+- }
+- if (rc)
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+-
+- /*
+- * if the buffer wasn't used previously for the old data (i.e. it
+- * was allcoated memory) and the get routine replaced the pointer,
+- * we need to free the previous pointer.
+- */
+- if (old_string && (old_string != requests->requestvb->buf) &&
+- (requests->requestvb->val.string != old_string)) {
+- if (dataFreeHook)
+- (*dataFreeHook) (old_string);
+- else
+- free(old_string);
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppStatsTable_get_values */
+-
+-
+-/***********************************************************************
+- *
+- * SET processing
+- *
+- ***********************************************************************/
+-
+-/*
+- * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+- */
+-/***********************************************************************
+- *
+- * DATA ACCESS
+- *
+- ***********************************************************************/
+-static void _container_free(netsnmp_container * container);
+-
+-/**
+- * @internal
+- */
+-static int
+-_cache_load(netsnmp_cache * cache, void *vmagic)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_cache_load", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache for dessertAppStatsTable_cache_load\n");
+- return -1;
+- }
+-
+- /** should only be called for an invalid or expired cache */
+- netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+-
+- /*
+- * call user code
+- */
+- return dessertAppStatsTable_container_load((netsnmp_container *)
+- cache->magic);
+-} /* _cache_load */
+-
+-/**
+- * @internal
+- */
+-static void
+-_cache_free(netsnmp_cache * cache, void *magic)
+-{
+- netsnmp_container *container;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_cache_free", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache in dessertAppStatsTable_cache_free\n");
+- return;
+- }
+-
+- container = (netsnmp_container *) cache->magic;
+-
+- _container_free(container);
+-} /* _cache_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_item_free(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- void *context)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_container_item_free",
+- "called\n"));
+-
+- if (NULL == rowreq_ctx)
+- return;
+-
+- dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
+-} /* _container_item_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_container_free",
+- "called\n"));
+-
+- if (NULL == container) {
+- snmp_log(LOG_ERR,
+- "invalid container in dessertAppStatsTable_container_free\n");
+- return;
+- }
+-
+- /*
+- * call user code
+- */
+- dessertAppStatsTable_container_free(container);
+-
+- /*
+- * free all items. inefficient, but easy.
+- */
+- CONTAINER_CLEAR(container,
+- (netsnmp_container_obj_func *) _container_item_free,
+- NULL);
+-} /* _container_free */
+-
+-/**
+- * @internal
+- * initialize the container with functions or wrappers
+- */
+-void
+-_dessertAppStatsTable_container_init(dessertAppStatsTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_container_init", "called\n"));
+-
+- /*
+- * cache init
+- */
+- if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+- _cache_load, _cache_free,
+- dessertAppStatsTable_oid,
+- dessertAppStatsTable_oid_size);
+-
+- if (NULL == if_ctx->cache) {
+- snmp_log(LOG_ERR,
+- "error creating cache for dessertAppStatsTable\n");
+- return;
+- }
+-
+- if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+-
+- dessertAppStatsTable_container_init(&if_ctx->container, if_ctx->cache);
+- if (NULL == if_ctx->container)
+- if_ctx->container =
+- netsnmp_container_find("dessertAppStatsTable:table_container");
+- if (NULL == if_ctx->container) {
+- snmp_log(LOG_ERR, "error creating container in "
+- "dessertAppStatsTable_container_init\n");
+- return;
+- }
+-
+- if (NULL != if_ctx->cache)
+- if_ctx->cache->magic = (void *) if_ctx->container;
+-} /* _dessertAppStatsTable_container_init */
+-
+-/**
+- * @internal
+- * shutdown the container with functions or wrappers
+- */
+-void
+-_dessertAppStatsTable_container_shutdown(dessertAppStatsTable_interface_ctx
+- * if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_container_shutdown", "called\n"));
+-
+- dessertAppStatsTable_container_shutdown(if_ctx->container);
+-
+- _container_free(if_ctx->container);
+-
+-} /* _dessertAppStatsTable_container_shutdown */
+-
+-
+-dessertAppStatsTable_rowreq_ctx *
+-dessertAppStatsTable_row_find_by_mib_index(dessertAppStatsTable_mib_index *
+- mib_idx)
+-{
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
+- oid oid_tmp[MAX_OID_LEN];
+- netsnmp_index oid_idx;
+- int rc;
+-
+- /*
+- * set up storage for OID
+- */
+- oid_idx.oids = oid_tmp;
+- oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+-
+- /*
+- * convert
+- */
+- rc = dessertAppStatsTable_index_to_oid(&oid_idx, mib_idx);
+- if (MFD_SUCCESS != rc)
+- return NULL;
+-
+- rowreq_ctx =
+- CONTAINER_FIND(dessertAppStatsTable_if_ctx.container, &oid_idx);
+-
+- return rowreq_ctx;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_interface.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_interface.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,98 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/** @ingroup interface: Routines to interface to Net-SNMP
+- *
+- * \warning This code should not be modified, called directly,
+- * or used to interpret functionality. It is subject to
+- * change at any time.
+- *
+- * @{
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-#ifndef DESSERTAPPSTATSTABLE_INTERFACE_H
+-#define DESSERTAPPSTATSTABLE_INTERFACE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-#include "dessertAppStatsTable.h"
+-
+-
+- /*
+- ********************************************************************
+- * Table declarations
+- */
+-
+- /*
+- * PUBLIC interface initialization routine
+- */
+- void
+- _dessertAppStatsTable_initialize_interface
+- (dessertAppStatsTable_registration * user_ctx, u_long flags);
+- void
+- _dessertAppStatsTable_shutdown_interface
+- (dessertAppStatsTable_registration * user_ctx);
+-
+- dessertAppStatsTable_registration
+- *dessertAppStatsTable_registration_get(void);
+-
+- dessertAppStatsTable_registration
+- *dessertAppStatsTable_registration_set
+- (dessertAppStatsTable_registration * newreg);
+-
+- netsnmp_container *dessertAppStatsTable_container_get(void);
+- int dessertAppStatsTable_container_size(void);
+-
+- dessertAppStatsTable_rowreq_ctx
+- *dessertAppStatsTable_allocate_rowreq_ctx(void);
+- void
+- dessertAppStatsTable_release_rowreq_ctx
+- (dessertAppStatsTable_rowreq_ctx * rowreq_ctx);
+-
+- int dessertAppStatsTable_index_to_oid(netsnmp_index *
+- oid_idx,
+- dessertAppStatsTable_mib_index
+- * mib_idx);
+- int dessertAppStatsTable_index_from_oid(netsnmp_index *
+- oid_idx,
+- dessertAppStatsTable_mib_index
+- * mib_idx);
+-
+- /*
+- * access to certain internals. use with caution!
+- */
+- void
+- dessertAppStatsTable_valid_columns_set(netsnmp_column_info *vc);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_INTERFACE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_oids.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_oids.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,64 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_OIDS_H
+-#define DESSERTAPPSTATSTABLE_OIDS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- * column number definitions for table dessertAppStatsTable
+- */
+-#define DESSERTAPPSTATSTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,8
+-
+-#define COLUMN_APPSTATSINDEX 1
+-
+-#define COLUMN_APPSTATSNAME 2
+-#define COLUMN_APPSTATSNAME_FLAG (0x1 << 1)
+-
+-#define COLUMN_APPSTATSDESC 3
+-#define COLUMN_APPSTATSDESC_FLAG (0x1 << 2)
+-
+-#define COLUMN_APPSTATSNODEORLINK 4
+-#define COLUMN_APPSTATSNODEORLINK_FLAG (0x1 << 3)
+-
+-#define COLUMN_APPSTATSVALUETYPE 5
+-#define COLUMN_APPSTATSVALUETYPE_FLAG (0x1 << 4)
+-
+-#define COLUMN_APPSTATSMACADDRESS1 6
+-#define COLUMN_APPSTATSMACADDRESS1_FLAG (0x1 << 5)
+-
+-#define COLUMN_APPSTATSMACADDRESS2 7
+-#define COLUMN_APPSTATSMACADDRESS2_FLAG (0x1 << 6)
+-
+-#define COLUMN_APPSTATSTRUTHVALUE 8
+-#define COLUMN_APPSTATSTRUTHVALUE_FLAG (0x1 << 7)
+-
+-#define COLUMN_APPSTATSINTEGER32 9
+-#define COLUMN_APPSTATSINTEGER32_FLAG (0x1 << 8)
+-
+-#define COLUMN_APPSTATSUNSIGNED32 10
+-#define COLUMN_APPSTATSUNSIGNED32_FLAG (0x1 << 9)
+-
+-#define COLUMN_APPSTATSCOUNTER64 11
+-#define COLUMN_APPSTATSCOUNTER64_FLAG (0x1 << 10)
+-
+-#define COLUMN_APPSTATSOCTETSTRING 12
+-#define COLUMN_APPSTATSOCTETSTRING_FLAG (0x1 << 11)
+-
+-
+-#define DESSERTAPPSTATSTABLE_MIN_COL COLUMN_APPSTATSNAME
+-#define DESSERTAPPSTATSTABLE_MAX_COL COLUMN_APPSTATSOCTETSTRING
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,214 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/** \page MFD helper for dessertMeshifTable
+- *
+- * \section intro Introduction
+- * Introductory text.
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertMeshifTable.h"
+-
+-#include <net-snmp/agent/mib_modules.h>
+-
+-#include "dessertMeshifTable_interface.h"
+-
+-oid dessertMeshifTable_oid[] = { DESSERTMESHIFTABLE_OID };
+-
+-int dessertMeshifTable_oid_size =
+-OID_LENGTH(dessertMeshifTable_oid);
+-
+-dessertMeshifTable_registration dessertMeshifTable_user_context;
+-
+-void initialize_table_dessertMeshifTable(void);
+-void shutdown_table_dessertMeshifTable(void);
+-
+-
+-/**
+- * Initializes the dessertMeshifTable module
+- */
+-void
+-init_dessertMeshifTable(void)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:init_dessertMeshifTable",
+- "called\n"));
+-
+- /*
+- * TODO:300:o: Perform dessertMeshifTable one-time module initialization.
+- */
+-
+- /*
+- * here we initialize all the tables we're planning on supporting
+- */
+- if (should_init("dessertMeshifTable"))
+- initialize_table_dessertMeshifTable();
+-
+-} /* init_dessertMeshifTable */
+-
+-/**
+- * Shut-down the dessertMeshifTable module (agent is exiting)
+- */
+-void
+-shutdown_dessertMeshifTable(void)
+-{
+- if (should_init("dessertMeshifTable"))
+- shutdown_table_dessertMeshifTable();
+-
+-}
+-
+-/**
+- * Initialize the table dessertMeshifTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-initialize_table_dessertMeshifTable(void)
+-{
+- dessertMeshifTable_registration *user_context;
+- u_long flags;
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:initialize_table_dessertMeshifTable", "called\n"));
+-
+- /*
+- * TODO:301:o: Perform dessertMeshifTable one-time table initialization.
+- */
+-
+- /*
+- * TODO:302:o: |->Initialize dessertMeshifTable user context
+- * if you'd like to pass in a pointer to some data for this
+- * table, allocate or set it up here.
+- */
+- /*
+- * a netsnmp_data_list is a simple way to store void pointers. A simple
+- * string token is used to add, find or remove pointers.
+- */
+- user_context =
+- netsnmp_create_data_list("dessertMeshifTable", NULL, NULL);
+-
+- /*
+- * No support for any flags yet, but in the future you would
+- * set any flags here.
+- */
+- flags = 0;
+-
+- /*
+- * call interface initialization code
+- */
+- _dessertMeshifTable_initialize_interface(user_context, flags);
+-} /* initialize_table_dessertMeshifTable */
+-
+-/**
+- * Shutdown the table dessertMeshifTable
+- */
+-void
+-shutdown_table_dessertMeshifTable(void)
+-{
+- /*
+- * call interface shutdown code
+- */
+- _dessertMeshifTable_shutdown_interface
+- (&dessertMeshifTable_user_context);
+-}
+-
+-/**
+- * extra context initialization (eg default values)
+- *
+- * @param rowreq_ctx : row request context
+- * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+- *
+- * @retval MFD_SUCCESS : no errors
+- * @retval MFD_ERROR : error (context allocate will fail)
+- */
+-int
+-dessertMeshifTable_rowreq_ctx_init(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx, void *user_init_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_rowreq_ctx_init", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:210:o: |-> Perform extra dessertMeshifTable rowreq initialization. (eg DEFVALS)
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_rowreq_ctx_init */
+-
+-/**
+- * extra context cleanup
+- *
+- */
+-void
+-dessertMeshifTable_rowreq_ctx_cleanup(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_rowreq_ctx_cleanup", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:211:o: |-> Perform extra dessertMeshifTable rowreq cleanup.
+- */
+-} /* dessertMeshifTable_rowreq_ctx_cleanup */
+-
+-/**
+- * pre-request callback
+- *
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error
+- */
+-int
+-dessertMeshifTable_pre_request(dessertMeshifTable_registration *
+- user_context)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_pre_request", "called\n"));
+-
+- /*
+- * TODO:510:o: Perform dessertMeshifTable pre-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_pre_request */
+-
+-/**
+- * post-request callback
+- *
+- * Note:
+- * New rows have been inserted into the container, and
+- * deleted rows have been removed from the container and
+- * released.
+- *
+- * @param user_context
+- * @param rc : MFD_SUCCESS if all requests succeeded
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error (ignored)
+- */
+-int
+-dessertMeshifTable_post_request(dessertMeshifTable_registration *
+- user_context, int rc)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_post_request", "called\n"));
+-
+- /*
+- * TODO:511:o: Perform dessertMeshifTable post-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_post_request */
+-
+-
+-/** @{ */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,222 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_H
+-#define DESSERTMESHIFTABLE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-/** @addtogroup misc misc: Miscellaneous routines
+- *
+- * @{
+- */
+-#include <net-snmp/library/asn1.h>
+-
+-/*
+- * other required module components
+- */
+-/* *INDENT-OFF* */
+-config_add_mib(DESSERT-MIB)
+-config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_interface)
+-config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_access)
+-config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_get)
+-config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_set)
+-/* *INDENT-ON* */
+-
+-/*
+- * OID and column number definitions for dessertMeshifTable
+- */
+-#include "dessertMeshifTable_oids.h"
+-
+-/*
+- * enum definions
+- */
+-#include "dessertMeshifTable_enums.h"
+-
+-/*
+- *********************************************************************
+- * function declarations
+- */
+-void init_dessertMeshifTable(void);
+-void shutdown_dessertMeshifTable(void);
+-
+-/*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-/*
+- *********************************************************************
+- * When you register your mib, you get to provide a generic
+- * pointer that will be passed back to you for most of the
+- * functions calls.
+- *
+- * TODO:100:r: Review all context structures
+- */
+-/*
+- * TODO:101:o: |-> Review dessertMeshifTable registration context.
+- */
+-typedef netsnmp_data_list dessertMeshifTable_registration;
+-
+-/**********************************************************************/
+-/*
+- * TODO:110:r: |-> Review dessertMeshifTable data context structure.
+- * This structure is used to represent the data for dessertMeshifTable.
+- */
+-/*
+- * This structure contains storage for all the columns defined in the
+- * dessertMeshifTable.
+- */
+-typedef struct dessertMeshifTable_data_s {
+-
+- /*
+- * meshifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char meshifName[255];
+- size_t meshifName_len; /* # of char elements, not bytes */
+-
+- /*
+- * meshifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char meshifMacAddress[6];
+- size_t meshifMacAddress_len; /* # of char elements, not bytes */
+-
+- /*
+- * meshifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 meshifInPkts;
+-
+- /*
+- * meshifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 meshifOutPkts;
+-
+- /*
+- * meshifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 meshifInOctets;
+-
+- /*
+- * meshifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 meshifOutOctets;
+-
+-} dessertMeshifTable_data;
+-
+-/*
+- * TODO:120:r: |-> Review dessertMeshifTable mib index.
+- * This structure is used to represent the index for dessertMeshifTable.
+- */
+-typedef struct dessertMeshifTable_mib_index_s {
+-
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long meshifIndex;
+-
+-} dessertMeshifTable_mib_index;
+-
+-/*
+- * TODO:121:r: | |-> Review dessertMeshifTable max index length.
+- * If you KNOW that your indexes will never exceed a certain
+- * length, update this macro to that length.
+- */
+-#define MAX_dessertMeshifTable_IDX_LEN 1
+-
+-/*
+- *********************************************************************
+- * TODO:130:o: |-> Review dessertMeshifTable Row request (rowreq) context.
+- * When your functions are called, you will be passed a
+- * dessertMeshifTable_rowreq_ctx pointer.
+- */
+-typedef struct dessertMeshifTable_rowreq_ctx_s {
+-
+- /** this must be first for container compare to work */
+- netsnmp_index oid_idx;
+- oid oid_tmp[MAX_dessertMeshifTable_IDX_LEN];
+-
+- dessertMeshifTable_mib_index tbl_idx;
+-
+- dessertMeshifTable_data data;
+-
+- /*
+- * flags per row. Currently, the first (lower) 8 bits are reserved
+- * for the user. See mfd.h for other flags.
+- */
+- u_int rowreq_flags;
+-
+- /*
+- * TODO:131:o: | |-> Add useful data to dessertMeshifTable rowreq context.
+- */
+-
+- /*
+- * storage for future expansion
+- */
+- netsnmp_data_list *dessertMeshifTable_data_list;
+-
+-} dessertMeshifTable_rowreq_ctx;
+-
+-typedef struct dessertMeshifTable_ref_rowreq_ctx_s {
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx;
+-} dessertMeshifTable_ref_rowreq_ctx;
+-
+-/*
+- *********************************************************************
+- * function prototypes
+- */
+-int
+-dessertMeshifTable_pre_request(dessertMeshifTable_registration * user_context);
+-int
+-dessertMeshifTable_post_request(dessertMeshifTable_registration * user_context,
+- int rc);
+-
+-int
+-dessertMeshifTable_rowreq_ctx_init(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- void *user_init_ctx);
+-void
+-dessertMeshifTable_rowreq_ctx_cleanup(
+- dessertMeshifTable_rowreq_ctx * rowreq_ctx);
+-
+-dessertMeshifTable_rowreq_ctx
+-*dessertMeshifTable_row_find_by_mib_index(
+- dessertMeshifTable_mib_index * mib_idx);
+-
+-extern oid dessertMeshifTable_oid[];
+-extern int dessertMeshifTable_oid_size;
+-
+-#include "dessertMeshifTable_interface.h"
+-#include "dessertMeshifTable_data_access.h"
+-#include "dessertMeshifTable_data_get.h"
+-#include "dessertMeshifTable_data_set.h"
+-
+-/*
+- * DUMMY markers, ignore
+- *
+- * TODO:099:x: *************************************************************
+- * TODO:199:x: *************************************************************
+- * TODO:299:x: *************************************************************
+- * TODO:399:x: *************************************************************
+- * TODO:499:x: *************************************************************
+- */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_access.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_access.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,377 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "../dessert_internal.h"
+-
+-
+-#include "dessertMeshifTable_data_access.h"
+-
+-/** @ingroup interface
+- * @addtogroup data_access data_access: Routines to access data
+- *
+- * These routines are used to locate the data used to satisfy
+- * requests.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-
+-/**
+- * initialization for dessertMeshifTable data access
+- *
+- * This function is called during startup to allow you to
+- * allocate any resources you need for the data table.
+- *
+- * @param dessertMeshifTable_reg
+- * Pointer to dessertMeshifTable_registration
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : unrecoverable error.
+- */
+-int
+-dessertMeshifTable_init_data(dessertMeshifTable_registration *
+- dessertMeshifTable_reg)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_init_data",
+- "called\n"));
+- dessert_debug("dessertMeshifTable_container_load called");
+- /*
+- * TODO:303:o: Initialize dessertMeshifTable data.
+- */
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- * if you are the sole writer for the file, you could
+- * open it here. However, as stated earlier, we are assuming
+- * the worst case, which in this case means that the file is
+- * written to by someone else, and might not even exist when
+- * we start up. So we can't do anything here.
+- */
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_init_data */
+-
+-/**
+- * container overview
+- *
+- */
+-
+-/**
+- * container initialization
+- *
+- * @param container_ptr_ptr A pointer to a container pointer. If you
+- * create a custom container, use this parameter to return it
+- * to the MFD helper. If set to NULL, the MFD helper will
+- * allocate a container for you.
+- * @param cache A pointer to a cache structure. You can set the timeout
+- * and other cache flags using this pointer.
+- *
+- * This function is called at startup to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases. If no custom
+- * container is allocated, the MFD code will create one for your.
+- *
+- * This is also the place to set up cache behavior. The default, to
+- * simply set the cache timeout, will work well with the default
+- * container. If you are using a custom container, you may want to
+- * look at the cache helper documentation to see if there are any
+- * flags you want to set.
+- *
+- * @remark
+- * This would also be a good place to do any initialization needed
+- * for you data source. For example, opening a connection to another
+- * process that will supply the data, opening a database, etc.
+- */
+-void
+-dessertMeshifTable_container_init(netsnmp_container ** container_ptr_ptr,
+- netsnmp_cache * cache)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_init", "called\n"));
+-
+- if (NULL == container_ptr_ptr) {
+- snmp_log(LOG_ERR,
+- "bad container param to dessertMeshifTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * For advanced users, you can use a custom container. If you
+- * do not create one, one will be created for you.
+- */
+- *container_ptr_ptr = NULL;
+-
+- if (NULL == cache) {
+- snmp_log(LOG_ERR,
+- "bad cache param to dessertMeshifTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * TODO:345:A: Set up dessertMeshifTable cache properties.
+- *
+- * Also for advanced users, you can set parameters for the
+- * cache. Do not change the magic pointer, as it is used
+- * by the MFD helper. To completely disable caching, set
+- * cache->enabled to 0.
+- */
+- cache->timeout = DESSERTMESHIFTABLE_CACHE_TIMEOUT; /* seconds */
+-} /* dessertMeshifTable_container_init */
+-
+-/**
+- * container shutdown
+- *
+- * @param container_ptr A pointer to the container.
+- *
+- * This function is called at shutdown to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases.
+- *
+- * This function is called before dessertMeshifTable_container_free().
+- *
+- * @remark
+- * This would also be a good place to do any cleanup needed
+- * for you data source. For example, closing a connection to another
+- * process that supplied the data, closing a database, etc.
+- */
+-void
+-dessertMeshifTable_container_shutdown(netsnmp_container * container_ptr)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_shutdown", "called\n"));
+-
+- if (NULL == container_ptr) {
+- snmp_log(LOG_ERR,
+- "bad params to dessertMeshifTable_container_shutdown\n");
+- return;
+- }
+-
+-} /* dessertMeshifTable_container_shutdown */
+-
+-/**
+- * load initial data
+- *
+- * TODO:350:M: Implement dessertMeshifTable data load
+- * This function will also be called by the cache helper to load
+- * the container again (after the container free function has been
+- * called to free the previous contents).
+- *
+- * @param container container to which items should be inserted
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+- * @retval MFD_ERROR : other error.
+- *
+- * This function is called to load the index(es) (and data, optionally)
+- * for the every row in the data set.
+- *
+- * @remark
+- * While loading the data, the only important thing is the indexes.
+- * If access to your data is cheap/fast (e.g. you have a pointer to a
+- * structure in memory), it would make sense to update the data here.
+- * If, however, the accessing the data invovles more work (e.g. parsing
+- * some other existing data, or peforming calculations to derive the data),
+- * then you can limit yourself to setting the indexes and saving any
+- * information you will need later. Then use the saved information in
+- * dessertMeshifTable_row_prep() for populating data.
+- *
+- * @note
+- * If you need consistency between rows (like you want statistics
+- * for each row to be from the same time frame), you should set all
+- * data here.
+- *
+- */
+-int
+-dessertMeshifTable_container_load(netsnmp_container * container)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx;
+- dessert_meshif_t *meshif;
+- size_t count = 0;
+-
+- char inPkts[I64CHARSZ+1];
+- char outPkts[I64CHARSZ+1];
+- char inOctets[I64CHARSZ+1];
+- char outOctets[I64CHARSZ+1];
+-
+- /*
+- * temporary storage for index values
+- */
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long meshifIndex = -1;
+-
+- dessert_debug("dessertMeshifTable_container_load called");
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_load", "called\n"));
+-
+-
+-
+- /*
+- * TODO:351:M: |-> Load/update data in the dessertMeshifTable container.
+- * loop over your dessertMeshifTable data, allocate a rowreq context,
+- * set the index(es) [and data, optionally] and insert into
+- * the container.
+- */
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(dessert_meshiflist_get(), meshif){
+-
+- meshifIndex = ++count;
+-
+- /*
+- * TODO:352:M: | |-> set indexes in new dessertMeshifTable rowreq context.
+- * data context will be set from the param (unless NULL,
+- * in which case a new data context will be allocated)
+- */
+- rowreq_ctx = dessertMeshifTable_allocate_rowreq_ctx(NULL);
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "memory allocation failed\n");
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+-
+- if (MFD_SUCCESS != dessertMeshifTable_indexes_set(rowreq_ctx,
+- meshifIndex)) {
+- snmp_log(LOG_ERR, "error setting index while loading "
+- "dessertMeshifTable data.\n");
+- dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
+- continue;
+- }
+-
+- /*
+- * TODO:352:r: | |-> populate dessertMeshifTable data context.
+- * Populate data context here. (optionally, delay until row prep)
+- */
+-
+- rowreq_ctx->data.meshifName_len = strlen(meshif->if_name);
+- strcpy(rowreq_ctx->data.meshifName, meshif->if_name);
+-
+- rowreq_ctx->data.meshifMacAddress_len = 6;
+- memcpy(rowreq_ctx->data.meshifMacAddress, meshif->hwaddr, 6);
+-
+- pthread_mutex_lock(&(meshif->cnt_mutex));
+-
+- rowreq_ctx->data.meshifInPkts.low = meshif->ipkts & 0xffffffff;
+- rowreq_ctx->data.meshifInPkts.high = meshif->ipkts >> 32;
+-
+- rowreq_ctx->data.meshifOutPkts.low = meshif->opkts & 0xffffffff;
+- rowreq_ctx->data.meshifOutPkts.high = meshif->opkts >> 32;
+-
+- rowreq_ctx->data.meshifInOctets.low = meshif->ibytes & 0xffffffff;
+- rowreq_ctx->data.meshifInOctets.high = meshif->ibytes >> 32;
+-
+- rowreq_ctx->data.meshifOutOctets.low = meshif->obytes & 0xffffffff;
+- rowreq_ctx->data.meshifOutOctets.high = meshif->obytes >> 32;
+-
+-
+- printU64(inPkts, &rowreq_ctx->data.meshifInPkts);
+- printU64(outPkts, &rowreq_ctx->data.meshifOutPkts);
+- printU64(inOctets, &rowreq_ctx->data.meshifInOctets);
+- printU64(outOctets, &rowreq_ctx->data.meshifOutOctets);
+-
+-
+- dessert_debug("inPkts [%s] [%u]", inPkts, meshif->ipkts);
+- dessert_debug("outPkts [%s] [%u]", outPkts, meshif->opkts);
+- dessert_debug("inOctets [%s] [%u]", inOctets, meshif->ibytes);
+- dessert_debug("outOctets [%s] [%u]", outOctets,meshif->obytes);
+-
+-
+- pthread_mutex_unlock(&(meshif->cnt_mutex));
+-
+- /*
+- * insert into table container
+- */
+- CONTAINER_INSERT(container, rowreq_ctx);
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+-
+-
+- DEBUGMSGT(("verbose:dessertMeshifTable:dessertMeshifTable_container_load", "inserted %d records\n", count));
+-
+- if (meshifIndex == -1) return MFD_RESOURCE_UNAVAILABLE;
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_container_load */
+-
+-/**
+- * container clean up
+- *
+- * @param container container with all current items
+- *
+- * This optional callback is called prior to all
+- * item's being removed from the container. If you
+- * need to do any processing before that, do it here.
+- *
+- * @note
+- * The MFD helper will take care of releasing all the row contexts.
+- *
+- */
+-void
+-dessertMeshifTable_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_free", "called\n"));
+-
+- /*
+- * TODO:380:M: Free dessertMeshifTable container data.
+- */
+-} /* dessertMeshifTable_container_free */
+-
+-/**
+- * prepare row for processing.
+- *
+- * When the agent has located the row for a request, this function is
+- * called to prepare the row for processing. If you fully populated
+- * the data context during the index setup phase, you may not need to
+- * do anything.
+- *
+- * @param rowreq_ctx pointer to a context.
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- */
+-int
+-dessertMeshifTable_row_prep(dessertMeshifTable_rowreq_ctx * rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_row_prep",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:390:o: Prepare row for request.
+- * If populating row data was delayed, this is the place to
+- * fill in the row for this request.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_row_prep */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_access.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_access.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,77 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_DATA_ACCESS_H
+-#define DESSERTMESHIFTABLE_DATA_ACCESS_H
+-
+-#include "../dessert_internal.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-
+-
+- int
+- dessertMeshifTable_init_data(dessertMeshifTable_registration *
+- dessertMeshifTable_reg);
+-
+-
+- /*
+- * TODO:180:o: Review dessertMeshifTable cache timeout.
+- * The number of seconds before the cache times out
+- */
+-#define DESSERTMESHIFTABLE_CACHE_TIMEOUT DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT
+-
+- void dessertMeshifTable_container_init(netsnmp_container **
+- container_ptr_ptr,
+- netsnmp_cache *
+- cache);
+- void dessertMeshifTable_container_shutdown(netsnmp_container
+- * container_ptr);
+-
+- int dessertMeshifTable_container_load(netsnmp_container *
+- container);
+- void dessertMeshifTable_container_free(netsnmp_container *
+- container);
+-
+- int dessertMeshifTable_cache_load(netsnmp_container *
+- container);
+- void dessertMeshifTable_cache_free(netsnmp_container *
+- container);
+-
+- int
+- dessertMeshifTable_row_prep(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_get.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_get.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,522 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertMeshifTable.h"
+-
+-
+-/** @defgroup data_get data_get: Routines to get data
+- *
+- * TODO:230:M: Implement dessertMeshifTable get routines.
+- * TODO:240:M: Implement dessertMeshifTable mapping routines (if any).
+- *
+- * These routine are used to get the value for individual objects. The
+- * row context is passed, along with a pointer to the memory where the
+- * value should be copied.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-
+-/*
+- * ---------------------------------------------------------------------
+- * * TODO:200:r: Implement dessertMeshifTable data context functions.
+- */
+-
+-
+-/**
+- * set mib index(es)
+- *
+- * @param tbl_idx mib index structure
+- * @param meshifIndex_val
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This convenience function is useful for setting all the MIB index
+- * components with a single function call. It is assume that the C values
+- * have already been mapped from their native/rawformat to the MIB format.
+- */
+-int
+-dessertMeshifTable_indexes_set_tbl_idx(dessertMeshifTable_mib_index *
+- tbl_idx, long meshifIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_indexes_set_tbl_idx", "called\n"));
+-
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- tbl_idx->meshifIndex = meshifIndex_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_indexes_set_tbl_idx */
+-
+-/**
+- * @internal
+- * set row context indexes
+- *
+- * @param reqreq_ctx the row context that needs updated indexes
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This function sets the mib indexs, then updates the oid indexs
+- * from the mib index.
+- */
+-int
+-dessertMeshifTable_indexes_set(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- long meshifIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_indexes_set", "called\n"));
+-
+- if (MFD_SUCCESS !=
+- dessertMeshifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+- meshifIndex_val))
+- return MFD_ERROR;
+-
+- /*
+- * convert mib index to oid index
+- */
+- rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+- if (0 != dessertMeshifTable_index_to_oid(&rowreq_ctx->oid_idx,
+- &rowreq_ctx->tbl_idx)) {
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_indexes_set */
+-
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifName
+- * meshifName is subid 2 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.2
+- * Description:
+-name of interface
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the meshifName data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifName_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param meshifName_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by meshifName.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*meshifName_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update meshifName_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-meshifName_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- char **meshifName_val_ptr_ptr,
+- size_t *meshifName_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != meshifName_val_ptr_ptr)
+- && (NULL != *meshifName_val_ptr_ptr));
+- netsnmp_assert(NULL != meshifName_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:meshifName_get", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the meshifName data.
+- * copy (* meshifName_val_ptr_ptr ) data and (* meshifName_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for meshifName data
+- */
+- if ((NULL == (*meshifName_val_ptr_ptr)) ||
+- ((*meshifName_val_ptr_len_ptr) <
+- (rowreq_ctx->data.meshifName_len *
+- sizeof(rowreq_ctx->data.meshifName[0])))) {
+- /*
+- * allocate space for meshifName data
+- */
+- (*meshifName_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.meshifName_len *
+- sizeof(rowreq_ctx->data.meshifName[0]));
+- if (NULL == (*meshifName_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*meshifName_val_ptr_len_ptr) =
+- rowreq_ctx->data.meshifName_len *
+- sizeof(rowreq_ctx->data.meshifName[0]);
+- memcpy((*meshifName_val_ptr_ptr), rowreq_ctx->data.meshifName,
+- rowreq_ctx->data.meshifName_len *
+- sizeof(rowreq_ctx->data.meshifName[0]));
+-
+- return MFD_SUCCESS;
+-} /* meshifName_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifMacAddress
+- * meshifMacAddress is subid 3 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.3
+- * Description:
+-hardware address of interface
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 1x:
+- *
+- * Ranges: 6;
+- *
+- * Its syntax is MacAddress (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 6)
+- */
+-/**
+- * Extract the current value of the meshifMacAddress data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifMacAddress_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param meshifMacAddress_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by meshifMacAddress.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*meshifMacAddress_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update meshifMacAddress_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-meshifMacAddress_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- char **meshifMacAddress_val_ptr_ptr,
+- size_t *meshifMacAddress_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != meshifMacAddress_val_ptr_ptr)
+- && (NULL != *meshifMacAddress_val_ptr_ptr));
+- netsnmp_assert(NULL != meshifMacAddress_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:meshifMacAddress_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the meshifMacAddress data.
+- * copy (* meshifMacAddress_val_ptr_ptr ) data and (* meshifMacAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for meshifMacAddress data
+- */
+- if ((NULL == (*meshifMacAddress_val_ptr_ptr)) ||
+- ((*meshifMacAddress_val_ptr_len_ptr) <
+- (rowreq_ctx->data.meshifMacAddress_len *
+- sizeof(rowreq_ctx->data.meshifMacAddress[0])))) {
+- /*
+- * allocate space for meshifMacAddress data
+- */
+- (*meshifMacAddress_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.meshifMacAddress_len *
+- sizeof(rowreq_ctx->data.meshifMacAddress[0]));
+- if (NULL == (*meshifMacAddress_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*meshifMacAddress_val_ptr_len_ptr) =
+- rowreq_ctx->data.meshifMacAddress_len *
+- sizeof(rowreq_ctx->data.meshifMacAddress[0]);
+- memcpy((*meshifMacAddress_val_ptr_ptr),
+- rowreq_ctx->data.meshifMacAddress,
+- rowreq_ctx->data.meshifMacAddress_len *
+- sizeof(rowreq_ctx->data.meshifMacAddress[0]));
+-
+- return MFD_SUCCESS;
+-} /* meshifMacAddress_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifInPkts
+- * meshifInPkts is subid 4 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.4
+- * Description:
+-packet counter in
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the meshifInPkts data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifInPkts_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-meshifInPkts_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- U64 * meshifInPkts_val_ptr)
+-{
+- char inPkts[I64CHARSZ+1];
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != meshifInPkts_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy meshifInPkts data.
+- * get (* meshifInPkts_val_ptr ).low and (* meshifInPkts_val_ptr ).high from rowreq_ctx->data
+- */
+- (*meshifInPkts_val_ptr).high = rowreq_ctx->data.meshifInPkts.high;
+- (*meshifInPkts_val_ptr).low = rowreq_ctx->data.meshifInPkts.low;
+-
+- printU64(inPkts, meshifInPkts_val_ptr);
+-
+- return MFD_SUCCESS;
+-} /* meshifInPkts_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifOutPkts
+- * meshifOutPkts is subid 5 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.5
+- * Description:
+-packet counter out
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the meshifOutPkts data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifOutPkts_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-meshifOutPkts_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- U64 * meshifOutPkts_val_ptr)
+-{
+- char outPkts[I64CHARSZ+1];
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != meshifOutPkts_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy meshifOutPkts data.
+- * get (* meshifOutPkts_val_ptr ).low and (* meshifOutPkts_val_ptr ).high from rowreq_ctx->data
+- */
+- (*meshifOutPkts_val_ptr).high = rowreq_ctx->data.meshifOutPkts.high;
+- (*meshifOutPkts_val_ptr).low = rowreq_ctx->data.meshifOutPkts.low;
+-
+- printU64(outPkts, meshifOutPkts_val_ptr);
+-
+-
+-
+-
+- return MFD_SUCCESS;
+-} /* meshifOutPkts_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifInOctets
+- * meshifInOctets is subid 6 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.6
+- * Description:
+-octet counter in
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the meshifInOctets data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifInOctets_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-meshifInOctets_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- U64 * meshifInOctets_val_ptr)
+-{
+- char inOctets[I64CHARSZ+1];
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != meshifInOctets_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy meshifInOctets data.
+- * get (* meshifInOctets_val_ptr ).low and (* meshifInOctets_val_ptr ).high from rowreq_ctx->data
+- */
+- (*meshifInOctets_val_ptr).high = rowreq_ctx->data.meshifInOctets.high;
+- (*meshifInOctets_val_ptr).low = rowreq_ctx->data.meshifInOctets.low;
+-
+- printU64(inOctets, meshifInOctets_val_ptr);
+-
+-
+- return MFD_SUCCESS;
+-} /* meshifInOctets_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifOutOctets
+- * meshifOutOctets is subid 7 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.7
+- * Description:
+-octet counter out
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the meshifOutOctets data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifOutOctets_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-meshifOutOctets_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- U64 * meshifOutOctets_val_ptr)
+-{
+- char outOctets[I64CHARSZ+1];
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != meshifOutOctets_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy meshifOutOctets data.
+- * get (* meshifOutOctets_val_ptr ).low and (* meshifOutOctets_val_ptr ).high from rowreq_ctx->data
+- */
+- (*meshifOutOctets_val_ptr).high =
+- rowreq_ctx->data.meshifOutOctets.high;
+- (*meshifOutOctets_val_ptr).low = rowreq_ctx->data.meshifOutOctets.low;
+-
+- printU64(outOctets, meshifOutOctets_val_ptr);
+-
+-
+- return MFD_SUCCESS;
+-} /* meshifOutOctets_get */
+-
+-
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_get.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_get.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,109 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- *
+- * @file dessertMeshifTable_data_get.h
+- *
+- * @addtogroup get
+- *
+- * Prototypes for get functions
+- *
+- * @{
+- */
+-#ifndef DESSERTMESHIFTABLE_DATA_GET_H
+-#define DESSERTMESHIFTABLE_DATA_GET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * GET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * GET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+- /*
+- * indexes
+- */
+- int meshifIndex_map(uint *mib_meshifIndex_val_ptr, uint
+- raw_meshifIndex_val);
+-
+- int meshifName_map(char **mib_meshifName_val_ptr_ptr,
+- size_t *mib_meshifName_val_ptr_len_ptr,
+- char *raw_meshifName_val_ptr,
+- size_t raw_meshifName_val_ptr_len,
+- int allow_realloc);
+- int meshifName_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- char **meshifName_val_ptr_ptr,
+- size_t *meshifName_val_ptr_len_ptr);
+- int meshifMacAddress_map(char
+- **mib_meshifMacAddress_val_ptr_ptr,
+- size_t
+- *mib_meshifMacAddress_val_ptr_len_ptr,
+- char
+- *raw_meshifMacAddress_val_ptr,
+- size_t
+- raw_meshifMacAddress_val_ptr_len,
+- int allow_realloc);
+- int meshifMacAddress_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- char
+- **meshifMacAddress_val_ptr_ptr,
+- size_t
+- *meshifMacAddress_val_ptr_len_ptr);
+- int meshifInPkts_map(U64 * mib_meshifInPkts_val_ptr,
+- U64 raw_meshifInPkts_val);
+- int meshifInPkts_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * meshifInPkts_val_ptr);
+- int meshifOutPkts_map(U64 * mib_meshifOutPkts_val_ptr,
+- U64 raw_meshifOutPkts_val);
+- int meshifOutPkts_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * meshifOutPkts_val_ptr);
+- int meshifInOctets_map(U64 * mib_meshifInOctets_val_ptr,
+- U64 raw_meshifInOctets_val);
+- int meshifInOctets_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * meshifInOctets_val_ptr);
+- int meshifOutOctets_map(U64 * mib_meshifOutOctets_val_ptr,
+- U64 raw_meshifOutOctets_val);
+- int meshifOutOctets_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * meshifOutOctets_val_ptr);
+-
+-
+- int
+- dessertMeshifTable_indexes_set_tbl_idx(dessertMeshifTable_mib_index
+- * tbl_idx, long meshifIndex_val);
+- int
+- dessertMeshifTable_indexes_set(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx, long meshifIndex_val);
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_DATA_GET_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_set.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_set.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertMeshifTable.h"
+-
+-
+-/** @defgroup data_set data_set: Routines to set data
+- *
+- * These routines are used to set the value for individual objects. The
+- * row context is passed, along with the new value.
+- *
+- * @{
+- */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_set.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_set.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_DATA_SET_H
+-#define DESSERTMESHIFTABLE_DATA_SET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * SET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * SET Table declarations
+- */
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_enums.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_enums.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,39 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_ENUMS_H
+-#define DESSERTMESHIFTABLE_ENUMS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- * NOTES on enums
+- * ==============
+- *
+- * Value Mapping
+- * -------------
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them
+- * below. For example, a boolean flag (1/0) is usually represented
+- * as a TruthValue in a MIB, which maps to the values (1/2).
+- *
+- */
+-/*************************************************************************
+- *************************************************************************
+- *
+- * enum definitions for table dessertMeshifTable
+- *
+- *************************************************************************
+- *************************************************************************/
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_interface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_interface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,944 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertMeshifTable.h"
+-
+-
+-#include <net-snmp/agent/table_container.h>
+-#include <net-snmp/library/container.h>
+-
+-#include "dessertMeshifTable_interface.h"
+-
+-#include <ctype.h>
+-
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-typedef struct dessertMeshifTable_interface_ctx_s {
+-
+- netsnmp_container *container;
+- netsnmp_cache *cache;
+-
+- dessertMeshifTable_registration *user_ctx;
+-
+- netsnmp_table_registration_info tbl_info;
+-
+- netsnmp_baby_steps_access_methods access_multiplexer;
+-
+-} dessertMeshifTable_interface_ctx;
+-
+-static dessertMeshifTable_interface_ctx dessertMeshifTable_if_ctx;
+-
+-static void
+-_dessertMeshifTable_container_init(dessertMeshifTable_interface_ctx *
+- if_ctx);
+-static void
+-_dessertMeshifTable_container_shutdown(dessertMeshifTable_interface_ctx *
+- if_ctx);
+-
+-
+-netsnmp_container *
+-dessertMeshifTable_container_get(void)
+-{
+- return dessertMeshifTable_if_ctx.container;
+-}
+-
+-dessertMeshifTable_registration *
+-dessertMeshifTable_registration_get(void)
+-{
+- return dessertMeshifTable_if_ctx.user_ctx;
+-}
+-
+-dessertMeshifTable_registration *
+-dessertMeshifTable_registration_set(dessertMeshifTable_registration *
+- newreg)
+-{
+- dessertMeshifTable_registration *old =
+- dessertMeshifTable_if_ctx.user_ctx;
+- dessertMeshifTable_if_ctx.user_ctx = newreg;
+- return old;
+-}
+-
+-int
+-dessertMeshifTable_container_size(void)
+-{
+- return CONTAINER_SIZE(dessertMeshifTable_if_ctx.container);
+-}
+-
+-/*
+- * mfd multiplexer modes
+- */
+-static Netsnmp_Node_Handler _mfd_dessertMeshifTable_pre_request;
+-static Netsnmp_Node_Handler _mfd_dessertMeshifTable_post_request;
+-static Netsnmp_Node_Handler _mfd_dessertMeshifTable_object_lookup;
+-static Netsnmp_Node_Handler _mfd_dessertMeshifTable_get_values;
+-/**
+- * @internal
+- * Initialize the table dessertMeshifTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-_dessertMeshifTable_initialize_interface(dessertMeshifTable_registration *
+- reg_ptr, u_long flags)
+-{
+- netsnmp_baby_steps_access_methods *access_multiplexer =
+- &dessertMeshifTable_if_ctx.access_multiplexer;
+- netsnmp_table_registration_info *tbl_info =
+- &dessertMeshifTable_if_ctx.tbl_info;
+- netsnmp_handler_registration *reginfo;
+- netsnmp_mib_handler *handler;
+- int mfd_modes = 0;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_initialize_interface", "called\n"));
+-
+-
+- /*************************************************
+- *
+- * save interface context for dessertMeshifTable
+- */
+- /*
+- * Setting up the table's definition
+- */
+- netsnmp_table_helper_add_indexes(tbl_info,ASN_INTEGER,
+- /** index: meshifIndex */
+- 0);
+-
+- /*
+- * Define the minimum and maximum accessible columns. This
+- * optimizes retrival.
+- */
+- tbl_info->min_column = DESSERTMESHIFTABLE_MIN_COL;
+- tbl_info->max_column = DESSERTMESHIFTABLE_MAX_COL;
+-
+- /*
+- * save users context
+- */
+- dessertMeshifTable_if_ctx.user_ctx = reg_ptr;
+-
+- /*
+- * call data access initialization code
+- */
+- dessertMeshifTable_init_data(reg_ptr);
+-
+- /*
+- * set up the container
+- */
+- _dessertMeshifTable_container_init(&dessertMeshifTable_if_ctx);
+- if (NULL == dessertMeshifTable_if_ctx.container) {
+- snmp_log(LOG_ERR,
+- "could not initialize container for dessertMeshifTable\n");
+- return;
+- }
+-
+- /*
+- * access_multiplexer: REQUIRED wrapper for get request handling
+- */
+- access_multiplexer->object_lookup =
+- _mfd_dessertMeshifTable_object_lookup;
+- access_multiplexer->get_values = _mfd_dessertMeshifTable_get_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->pre_request = _mfd_dessertMeshifTable_pre_request;
+- access_multiplexer->post_request =
+- _mfd_dessertMeshifTable_post_request;
+-
+-
+- /*************************************************
+- *
+- * Create a registration, save our reg data, register table.
+- */
+- DEBUGMSGTL(("dessertMeshifTable:init_dessertMeshifTable",
+- "Registering dessertMeshifTable as a mibs-for-dummies table.\n"));
+- handler =
+- netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+- reginfo =
+- netsnmp_handler_registration_create("dessertMeshifTable", handler,
+- dessertMeshifTable_oid,
+- dessertMeshifTable_oid_size,
+- HANDLER_CAN_BABY_STEP |
+- HANDLER_CAN_RONLY);
+- if (NULL == reginfo) {
+- snmp_log(LOG_ERR, "error registering table dessertMeshifTable\n");
+- return;
+- }
+- reginfo->my_reg_void = &dessertMeshifTable_if_ctx;
+-
+- /*************************************************
+- *
+- * set up baby steps handler, create it and inject it
+- */
+- if (access_multiplexer->object_lookup)
+- mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+- if (access_multiplexer->set_values)
+- mfd_modes |= BABY_STEP_SET_VALUES;
+- if (access_multiplexer->irreversible_commit)
+- mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+- if (access_multiplexer->object_syntax_checks)
+- mfd_modes |= BABY_STEP_CHECK_OBJECT;
+-
+- if (access_multiplexer->pre_request)
+- mfd_modes |= BABY_STEP_PRE_REQUEST;
+- if (access_multiplexer->post_request)
+- mfd_modes |= BABY_STEP_POST_REQUEST;
+-
+- if (access_multiplexer->undo_setup)
+- mfd_modes |= BABY_STEP_UNDO_SETUP;
+- if (access_multiplexer->undo_cleanup)
+- mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+- if (access_multiplexer->undo_sets)
+- mfd_modes |= BABY_STEP_UNDO_SETS;
+-
+- if (access_multiplexer->row_creation)
+- mfd_modes |= BABY_STEP_ROW_CREATE;
+- if (access_multiplexer->consistency_checks)
+- mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+- if (access_multiplexer->commit)
+- mfd_modes |= BABY_STEP_COMMIT;
+- if (access_multiplexer->undo_commit)
+- mfd_modes |= BABY_STEP_UNDO_COMMIT;
+-
+- handler = netsnmp_baby_steps_handler_get(mfd_modes);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+- */
+- handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject container_table helper
+- */
+- handler =
+- netsnmp_container_table_handler_get(tbl_info,
+- dessertMeshifTable_if_ctx.
+- container,
+- TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject cache helper
+- */
+- if (NULL != dessertMeshifTable_if_ctx.cache) {
+- handler =
+- netsnmp_cache_handler_get(dessertMeshifTable_if_ctx.cache);
+- netsnmp_inject_handler(reginfo, handler);
+- }
+-
+- /*
+- * register table
+- */
+- netsnmp_register_table(reginfo, tbl_info);
+-
+-} /* _dessertMeshifTable_initialize_interface */
+-
+-/**
+- * @internal
+- * Shutdown the table dessertMeshifTable
+- */
+-void
+-_dessertMeshifTable_shutdown_interface(dessertMeshifTable_registration *
+- reg_ptr)
+-{
+- /*
+- * shutdown the container
+- */
+- _dessertMeshifTable_container_shutdown(&dessertMeshifTable_if_ctx);
+-}
+-
+-void
+-dessertMeshifTable_valid_columns_set(netsnmp_column_info *vc)
+-{
+- dessertMeshifTable_if_ctx.tbl_info.valid_columns = vc;
+-} /* dessertMeshifTable_valid_columns_set */
+-
+-/**
+- * @internal
+- * convert the index component stored in the context to an oid
+- */
+-int
+-dessertMeshifTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertMeshifTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_meshifIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_meshifIndex, 0x00, sizeof(var_meshifIndex));
+- var_meshifIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_meshifIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_index_to_oid", "called\n"));
+-
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- snmp_set_var_value(&var_meshifIndex, (u_char *) & mib_idx->meshifIndex,
+- sizeof(mib_idx->meshifIndex));
+-
+-
+- err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+- NULL, 0, &var_meshifIndex);
+- if (err)
+- snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_meshifIndex);
+-
+- return err;
+-} /* dessertMeshifTable_index_to_oid */
+-
+-/**
+- * extract dessertMeshifTable indexes from a netsnmp_index
+- *
+- * @retval SNMP_ERR_NOERROR : no error
+- * @retval SNMP_ERR_GENERR : error
+- */
+-int
+-dessertMeshifTable_index_from_oid(netsnmp_index * oid_idx,
+- dessertMeshifTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_meshifIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_meshifIndex, 0x00, sizeof(var_meshifIndex));
+- var_meshifIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_meshifIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_index_from_oid", "called\n"));
+-
+- /*
+- * parse the oid into the individual index components
+- */
+- err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_meshifIndex);
+- if (err == SNMP_ERR_NOERROR) {
+- /*
+- * copy out values
+- */
+- mib_idx->meshifIndex = *((long *)var_meshifIndex.val.string);
+-
+-
+- }
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_meshifIndex);
+-
+- return err;
+-} /* dessertMeshifTable_index_from_oid */
+-
+-
+-/*
+- *********************************************************************
+- * @internal
+- * allocate resources for a dessertMeshifTable_rowreq_ctx
+- */
+-dessertMeshifTable_rowreq_ctx *
+-dessertMeshifTable_allocate_rowreq_ctx(void *user_init_ctx)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx =
+- SNMP_MALLOC_TYPEDEF(dessertMeshifTable_rowreq_ctx);
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:dessertMeshifTable_allocate_rowreq_ctx", "called\n"));
+-
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+- "dessertMeshifTable_rowreq_ctx.\n");
+- return NULL;
+- }
+-
+- rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+-
+- rowreq_ctx->dessertMeshifTable_data_list = NULL;
+-
+- /*
+- * if we allocated data, call init routine
+- */
+- if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+- if (SNMPERR_SUCCESS !=
+- dessertMeshifTable_rowreq_ctx_init(rowreq_ctx,
+- user_init_ctx)) {
+- dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
+- rowreq_ctx = NULL;
+- }
+- }
+-
+- return rowreq_ctx;
+-} /* dessertMeshifTable_allocate_rowreq_ctx */
+-
+-/*
+- * @internal
+- * release resources for a dessertMeshifTable_rowreq_ctx
+- */
+-void
+-dessertMeshifTable_release_rowreq_ctx(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:dessertMeshifTable_release_rowreq_ctx", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- dessertMeshifTable_rowreq_ctx_cleanup(rowreq_ctx);
+-
+- /*
+- * free index oid pointer
+- */
+- if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+- free(rowreq_ctx->oid_idx.oids);
+-
+- SNMP_FREE(rowreq_ctx);
+-} /* dessertMeshifTable_release_rowreq_ctx */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertMeshifTable_pre_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_pre_request", "called\n"));
+-
+- if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertMeshifTable",
+- "skipping additional pre_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- rc = dessertMeshifTable_pre_request(dessertMeshifTable_if_ctx.
+- user_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertMeshifTable", "error %d from "
+- "dessertMeshifTable_pre_request\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertMeshifTable_pre_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertMeshifTable_post_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc, packet_rc;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_post_request", "called\n"));
+-
+- /*
+- * release row context, if deleted
+- */
+- if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+- dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
+-
+- /*
+- * wait for last call before calling user
+- */
+- if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertMeshifTable",
+- "waiting for last post_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+- rc = dessertMeshifTable_post_request(dessertMeshifTable_if_ctx.
+- user_ctx, packet_rc);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertMeshifTable", "error %d from "
+- "dessertMeshifTable_post_request\n", rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertMeshifTable_post_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertMeshifTable_object_lookup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc = SNMP_ERR_NOERROR;
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_object_lookup", "called\n"));
+-
+- /*
+- * get our context from mfd
+- * dessertMeshifTable_interface_ctx *if_ctx =
+- * (dessertMeshifTable_interface_ctx *)reginfo->my_reg_void;
+- */
+-
+- if (NULL == rowreq_ctx) {
+- rc = SNMP_ERR_NOCREATION;
+- }
+-
+- if (MFD_SUCCESS != rc)
+- netsnmp_request_set_error_all(requests, rc);
+- else
+- dessertMeshifTable_row_prep(rowreq_ctx);
+-
+- return SNMP_VALIDATE_ERR(rc);
+-} /* _mfd_dessertMeshifTable_object_lookup */
+-
+-/***********************************************************************
+- *
+- * GET processing
+- *
+- ***********************************************************************/
+-/*
+- * @internal
+- * Retrieve the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertMeshifTable_get_column(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- netsnmp_variable_list * var, int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_column", "called for %d\n", column));
+-
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * meshifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_MESHIFNAME:
+- var->type = ASN_OCTET_STR;
+- rc = meshifName_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * meshifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_MESHIFMACADDRESS:
+- var->type = ASN_OCTET_STR;
+- rc = meshifMacAddress_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * meshifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_MESHIFINPKTS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = meshifInPkts_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * meshifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_MESHIFOUTPKTS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = meshifOutPkts_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * meshifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_MESHIFINOCTETS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = meshifInOctets_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * meshifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_MESHIFOUTOCTETS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = meshifOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- default:
+- if (DESSERTMESHIFTABLE_MIN_COL <= column
+- && column <= DESSERTMESHIFTABLE_MAX_COL) {
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_column", "assume column %d is reserved\n", column));
+- rc = MFD_SKIP;
+- } else {
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertMeshifTable_get_column\n",
+- column);
+- }
+- break;
+- }
+-
+- return rc;
+-} /* _dessertMeshifTable_get_column */
+-
+-int
+-_mfd_dessertMeshifTable_get_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- u_char *old_string;
+- void (*dataFreeHook) (void *);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * save old pointer, so we can free it if replaced
+- */
+- old_string = requests->requestvb->val.string;
+- dataFreeHook = requests->requestvb->dataFreeHook;
+- if (NULL == requests->requestvb->val.string) {
+- requests->requestvb->val.string = requests->requestvb->buf;
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- } else if (requests->requestvb->buf ==
+- requests->requestvb->val.string) {
+- if (requests->requestvb->val_len !=
+- sizeof(requests->requestvb->buf))
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- }
+-
+- /*
+- * get column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertMeshifTable_get_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- if (MFD_SKIP == rc) {
+- requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+- rc = SNMP_ERR_NOERROR;
+- }
+- } else if (NULL == requests->requestvb->val.string) {
+- snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+- rc = SNMP_ERR_GENERR;
+- }
+- if (rc)
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+-
+- /*
+- * if the buffer wasn't used previously for the old data (i.e. it
+- * was allcoated memory) and the get routine replaced the pointer,
+- * we need to free the previous pointer.
+- */
+- if (old_string && (old_string != requests->requestvb->buf) &&
+- (requests->requestvb->val.string != old_string)) {
+- if (dataFreeHook)
+- (*dataFreeHook) (old_string);
+- else
+- free(old_string);
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertMeshifTable_get_values */
+-
+-
+-/***********************************************************************
+- *
+- * SET processing
+- *
+- ***********************************************************************/
+-
+-/*
+- * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+- */
+-/***********************************************************************
+- *
+- * DATA ACCESS
+- *
+- ***********************************************************************/
+-static void _container_free(netsnmp_container * container);
+-
+-/**
+- * @internal
+- */
+-static int
+-_cache_load(netsnmp_cache * cache, void *vmagic)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_cache_load", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache for dessertMeshifTable_cache_load\n");
+- return -1;
+- }
+-
+- /** should only be called for an invalid or expired cache */
+- netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+-
+- /*
+- * call user code
+- */
+- return dessertMeshifTable_container_load((netsnmp_container *) cache->
+- magic);
+-} /* _cache_load */
+-
+-/**
+- * @internal
+- */
+-static void
+-_cache_free(netsnmp_cache * cache, void *magic)
+-{
+- netsnmp_container *container;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_cache_free", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache in dessertMeshifTable_cache_free\n");
+- return;
+- }
+-
+- container = (netsnmp_container *) cache->magic;
+-
+- _container_free(container);
+-} /* _cache_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_item_free(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- void *context)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_container_item_free",
+- "called\n"));
+-
+- if (NULL == rowreq_ctx)
+- return;
+-
+- dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
+-} /* _container_item_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_container_free",
+- "called\n"));
+-
+- if (NULL == container) {
+- snmp_log(LOG_ERR,
+- "invalid container in dessertMeshifTable_container_free\n");
+- return;
+- }
+-
+- /*
+- * call user code
+- */
+- dessertMeshifTable_container_free(container);
+-
+- /*
+- * free all items. inefficient, but easy.
+- */
+- CONTAINER_CLEAR(container,
+- (netsnmp_container_obj_func *) _container_item_free,
+- NULL);
+-} /* _container_free */
+-
+-/**
+- * @internal
+- * initialize the container with functions or wrappers
+- */
+-void
+-_dessertMeshifTable_container_init(dessertMeshifTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_container_init", "called\n"));
+-
+- /*
+- * cache init
+- */
+- if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+- _cache_load, _cache_free,
+- dessertMeshifTable_oid,
+- dessertMeshifTable_oid_size);
+-
+- if (NULL == if_ctx->cache) {
+- snmp_log(LOG_ERR, "error creating cache for dessertMeshifTable\n");
+- return;
+- }
+-
+- if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+-
+- dessertMeshifTable_container_init(&if_ctx->container, if_ctx->cache);
+- if (NULL == if_ctx->container)
+- if_ctx->container =
+- netsnmp_container_find("dessertMeshifTable:table_container");
+- if (NULL == if_ctx->container) {
+- snmp_log(LOG_ERR, "error creating container in "
+- "dessertMeshifTable_container_init\n");
+- return;
+- }
+-
+- if (NULL != if_ctx->cache)
+- if_ctx->cache->magic = (void *) if_ctx->container;
+-} /* _dessertMeshifTable_container_init */
+-
+-/**
+- * @internal
+- * shutdown the container with functions or wrappers
+- */
+-void
+-_dessertMeshifTable_container_shutdown(dessertMeshifTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_container_shutdown", "called\n"));
+-
+- dessertMeshifTable_container_shutdown(if_ctx->container);
+-
+- _container_free(if_ctx->container);
+-
+-} /* _dessertMeshifTable_container_shutdown */
+-
+-
+-dessertMeshifTable_rowreq_ctx *
+-dessertMeshifTable_row_find_by_mib_index(dessertMeshifTable_mib_index *
+- mib_idx)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx;
+- oid oid_tmp[MAX_OID_LEN];
+- netsnmp_index oid_idx;
+- int rc;
+-
+- /*
+- * set up storage for OID
+- */
+- oid_idx.oids = oid_tmp;
+- oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+-
+- /*
+- * convert
+- */
+- rc = dessertMeshifTable_index_to_oid(&oid_idx, mib_idx);
+- if (MFD_SUCCESS != rc)
+- return NULL;
+-
+- rowreq_ctx =
+- CONTAINER_FIND(dessertMeshifTable_if_ctx.container, &oid_idx);
+-
+- return rowreq_ctx;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_interface.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_interface.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,98 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/** @ingroup interface: Routines to interface to Net-SNMP
+- *
+- * \warning This code should not be modified, called directly,
+- * or used to interpret functionality. It is subject to
+- * change at any time.
+- *
+- * @{
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-#ifndef DESSERTMESHIFTABLE_INTERFACE_H
+-#define DESSERTMESHIFTABLE_INTERFACE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-#include "dessertMeshifTable.h"
+-
+-
+- /*
+- ********************************************************************
+- * Table declarations
+- */
+-
+- /*
+- * PUBLIC interface initialization routine
+- */
+- void
+- _dessertMeshifTable_initialize_interface
+- (dessertMeshifTable_registration * user_ctx, u_long flags);
+- void
+- _dessertMeshifTable_shutdown_interface
+- (dessertMeshifTable_registration * user_ctx);
+-
+- dessertMeshifTable_registration
+- *dessertMeshifTable_registration_get(void);
+-
+- dessertMeshifTable_registration
+- *dessertMeshifTable_registration_set
+- (dessertMeshifTable_registration * newreg);
+-
+- netsnmp_container *dessertMeshifTable_container_get(void);
+- int dessertMeshifTable_container_size(void);
+-
+- dessertMeshifTable_rowreq_ctx
+- *dessertMeshifTable_allocate_rowreq_ctx(void *);
+- void
+- dessertMeshifTable_release_rowreq_ctx(dessertMeshifTable_rowreq_ctx
+- * rowreq_ctx);
+-
+- int dessertMeshifTable_index_to_oid(netsnmp_index *
+- oid_idx,
+- dessertMeshifTable_mib_index
+- * mib_idx);
+- int dessertMeshifTable_index_from_oid(netsnmp_index *
+- oid_idx,
+- dessertMeshifTable_mib_index
+- * mib_idx);
+-
+- /*
+- * access to certain internals. use with caution!
+- */
+- void
+- dessertMeshifTable_valid_columns_set(netsnmp_column_info *vc);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_INTERFACE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_oids.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_oids.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,43 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_OIDS_H
+-#define DESSERTMESHIFTABLE_OIDS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- * column number definitions for table dessertMeshifTable
+- */
+-#define DESSERTMESHIFTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,5
+-
+-#define COLUMN_MESHIFINDEX 1
+-
+-#define COLUMN_MESHIFNAME 2
+-
+-#define COLUMN_MESHIFMACADDRESS 3
+-
+-#define COLUMN_MESHIFINPKTS 4
+-
+-#define COLUMN_MESHIFOUTPKTS 5
+-
+-#define COLUMN_MESHIFINOCTETS 6
+-
+-#define COLUMN_MESHIFOUTOCTETS 7
+-
+-
+-#define DESSERTMESHIFTABLE_MIN_COL COLUMN_MESHIFNAME
+-#define DESSERTMESHIFTABLE_MAX_COL COLUMN_MESHIFOUTOCTETS
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertObjects.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertObjects.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,164 +0,0 @@
+-/**
+- * Note: this file originally auto-generated by mib2c using
+- * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+- */
+-
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-#include "../dessert_internal.h"
+-
+-/** Initializes the dessertObjects module */
+-void
+-init_dessertObjects(void)
+-{
+- static oid dessertMeshifNumber_oid[] =
+- { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 4 };
+- static oid applicationVersion_oid[] =
+- { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 3, 2 };
+- static oid protocollShortName_oid[] =
+- { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 3, 3 };
+-
+- DEBUGMSGTL((AGENT, "Initializing\n"));
+-
+- netsnmp_register_scalar(netsnmp_create_handler_registration
+- ("dessertMeshifNumber",
+- handle_dessertMeshifNumber,
+- dessertMeshifNumber_oid,
+- OID_LENGTH(dessertMeshifNumber_oid),
+- HANDLER_CAN_RONLY));
+- netsnmp_register_scalar(netsnmp_create_handler_registration
+- ("applicationVersion",
+- handle_applicationVersion,
+- applicationVersion_oid,
+- OID_LENGTH(applicationVersion_oid),
+- HANDLER_CAN_RONLY));
+- netsnmp_register_scalar(netsnmp_create_handler_registration
+- ("protocollShortName",
+- handle_protocollShortName,
+- protocollShortName_oid,
+- OID_LENGTH(protocollShortName_oid),
+- HANDLER_CAN_RONLY));
+-}
+-
+-int
+-handle_dessertMeshifNumber(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *reqinfo,
+- netsnmp_request_info *requests)
+-{
+- u_char meshif_count;
+-
+- dessert_meshif_t *meshif;
+-
+- DL_FOREACH(dessert_meshiflist_get(), meshif){
+- meshif_count++;
+- }
+-
+- /*
+- * We are never called for a GETNEXT if it's registered as a
+- * "instance", as it's "magically" handled for us.
+- */
+-
+- /*
+- * a instance handler also only hands us one request at a time, so
+- * we don't need to loop over a list of requests; we'll only get one.
+- */
+-
+- switch (reqinfo->mode) {
+-
+- case MODE_GET:
+- DEBUGMSGTL((AGENT, "handle_dessertMeshifNumber:MODE_GET\n"));
+- snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+- (u_char *) &meshif_count, sizeof(u_char));
+- break;
+-
+-
+- default:
+- /*
+- * we should never get here, so this is a really bad error
+- */
+- snmp_log(LOG_ERR,
+- "unknown mode (%d) in handle_dessertMeshifNumber\n",
+- reqinfo->mode);
+- return SNMP_ERR_GENERR;
+- }
+-
+- return SNMP_ERR_NOERROR;
+-}
+-
+-int
+-handle_applicationVersion(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *reqinfo,
+- netsnmp_request_info *requests)
+-{
+- /*
+- * We are never called for a GETNEXT if it's registered as a
+- * "instance", as it's "magically" handled for us.
+- */
+-
+- /*
+- * a instance handler also only hands us one request at a time, so
+- * we don't need to loop over a list of requests; we'll only get one.
+- */
+-
+- switch (reqinfo->mode) {
+-
+- case MODE_GET:
+- DEBUGMSGTL((AGENT, "handle_applicationVersion:MODE_GET\n"));
+- snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+- (u_char *) &dessert_ver, sizeof(dessert_ver));
+- break;
+-
+-
+- default:
+- /*
+- * we should never get here, so this is a really bad error
+- */
+- snmp_log(LOG_ERR,
+- "unknown mode (%d) in handle_applicationVersion\n",
+- reqinfo->mode);
+- return SNMP_ERR_GENERR;
+- }
+-
+- return SNMP_ERR_NOERROR;
+-}
+-
+-int
+-handle_protocollShortName(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *reqinfo,
+- netsnmp_request_info *requests)
+-{
+- /*
+- * We are never called for a GETNEXT if it's registered as a
+- * "instance", as it's "magically" handled for us.
+- */
+-
+- /*
+- * a instance handler also only hands us one request at a time, so
+- * we don't need to loop over a list of requests; we'll only get one.
+- */
+-
+- switch (reqinfo->mode) {
+-
+- case MODE_GET:
+- DEBUGMSGTL((AGENT, "handle_protocollShortName:MODE_GET\n"));
+- snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
+- (u_char *) dessert_proto, DESSERT_PROTO_STRLEN+1);
+- break;
+-
+-
+- default:
+- /*
+- * we should never get here, so this is a really bad error
+- */
+- snmp_log(LOG_ERR,
+- "unknown mode (%d) in handle_protocollShortName\n",
+- reqinfo->mode);
+- return SNMP_ERR_GENERR;
+- }
+-
+- return SNMP_ERR_NOERROR;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertObjects.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertObjects.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,17 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+- */
+-#ifndef DESSERTOBJECTS_H
+-#define DESSERTOBJECTS_H
+-
+-
+-/*
+- * function declarations
+- */
+-void init_dessertObjects(void);
+-Netsnmp_Node_Handler handle_dessertMeshifNumber;
+-Netsnmp_Node_Handler handle_applicationVersion;
+-Netsnmp_Node_Handler handle_protocollShortName;
+-
+-#endif /* DESSERTOBJECTS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,215 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/** \page MFD helper for dessertSysifTable
+- *
+- * \section intro Introduction
+- * Introductory text.
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-#include <net-snmp/agent/mib_modules.h>
+-
+-#include "dessertSysifTable_interface.h"
+-
+-oid dessertSysifTable_oid[] = { DESSERTSYSIFTABLE_OID };
+-
+-int dessertSysifTable_oid_size =
+-OID_LENGTH(dessertSysifTable_oid);
+-
+-dessertSysifTable_registration dessertSysifTable_user_context;
+-
+-void initialize_table_dessertSysifTable(void);
+-void shutdown_table_dessertSysifTable(void);
+-
+-
+-/**
+- * Initializes the dessertSysifTable module
+- */
+-void
+-init_dessertSysifTable(void)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:init_dessertSysifTable",
+- "called\n"));
+-
+- /*
+- * TODO:300:o: Perform dessertSysifTable one-time module initialization.
+- */
+-
+- /*
+- * here we initialize all the tables we're planning on supporting
+- */
+- if (should_init("dessertSysifTable"))
+- initialize_table_dessertSysifTable();
+-
+-} /* init_dessertSysifTable */
+-
+-/**
+- * Shut-down the dessertSysifTable module (agent is exiting)
+- */
+-void
+-shutdown_dessertSysifTable(void)
+-{
+- if (should_init("dessertSysifTable"))
+- shutdown_table_dessertSysifTable();
+-
+-}
+-
+-/**
+- * Initialize the table dessertSysifTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-initialize_table_dessertSysifTable(void)
+-{
+- dessertSysifTable_registration *user_context;
+- u_long flags;
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:initialize_table_dessertSysifTable", "called\n"));
+-
+- /*
+- * TODO:301:o: Perform dessertSysifTable one-time table initialization.
+- */
+-
+- /*
+- * TODO:302:o: |->Initialize dessertSysifTable user context
+- * if you'd like to pass in a pointer to some data for this
+- * table, allocate or set it up here.
+- */
+- /*
+- * a netsnmp_data_list is a simple way to store void pointers. A simple
+- * string token is used to add, find or remove pointers.
+- */
+- user_context =
+- netsnmp_create_data_list("dessertSysifTable", NULL, NULL);
+-
+- /*
+- * No support for any flags yet, but in the future you would
+- * set any flags here.
+- */
+- flags = 0;
+-
+- /*
+- * call interface initialization code
+- */
+- _dessertSysifTable_initialize_interface(user_context, flags);
+-} /* initialize_table_dessertSysifTable */
+-
+-/**
+- * Shutdown the table dessertSysifTable
+- */
+-void
+-shutdown_table_dessertSysifTable(void)
+-{
+- /*
+- * call interface shutdown code
+- */
+- _dessertSysifTable_shutdown_interface(&dessertSysifTable_user_context);
+-}
+-
+-/**
+- * extra context initialization (eg default values)
+- *
+- * @param rowreq_ctx : row request context
+- * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+- *
+- * @retval MFD_SUCCESS : no errors
+- * @retval MFD_ERROR : error (context allocate will fail)
+- */
+-int
+-dessertSysifTable_rowreq_ctx_init(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, void *user_init_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_rowreq_ctx_init", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:210:o: |-> Perform extra dessertSysifTable rowreq initialization. (eg DEFVALS)
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_rowreq_ctx_init */
+-
+-/**
+- * extra context cleanup
+- *
+- */
+-void
+-dessertSysifTable_rowreq_ctx_cleanup(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_rowreq_ctx_cleanup", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:211:o: |-> Perform extra dessertSysifTable rowreq cleanup.
+- */
+-} /* dessertSysifTable_rowreq_ctx_cleanup */
+-
+-/**
+- * pre-request callback
+- *
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error
+- */
+-int
+-dessertSysifTable_pre_request(dessertSysifTable_registration *
+- user_context)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_pre_request",
+- "called\n"));
+-
+- /*
+- * TODO:510:o: Perform dessertSysifTable pre-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_pre_request */
+-
+-/**
+- * post-request callback
+- *
+- * Note:
+- * New rows have been inserted into the container, and
+- * deleted rows have been removed from the container and
+- * released.
+- *
+- * @param user_context
+- * @param rc : MFD_SUCCESS if all requests succeeded
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error (ignored)
+- */
+-int
+-dessertSysifTable_post_request(dessertSysifTable_registration *
+- user_context, int rc)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_post_request",
+- "called\n"));
+-
+- /*
+- * TODO:511:o: Perform dessertSysifTable post-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_post_request */
+-
+-
+-/** @{ */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,230 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_H
+-#define DESSERTSYSIFTABLE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-/** @addtogroup misc misc: Miscellaneous routines
+- *
+- * @{
+- */
+-#include <net-snmp/library/asn1.h>
+-
+- /*
+- * other required module components
+- */
+- /* *INDENT-OFF* */
+-config_add_mib(DESSERT2-MIB)
+-config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_interface)
+-config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_access)
+-config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_get)
+-config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_set)
+- /* *INDENT-ON* */
+-
+- /*
+- * OID and column number definitions for dessertSysifTable
+- */
+-#include "dessertSysifTable_oids.h"
+-
+- /*
+- * enum definions
+- */
+-#include "dessertSysifTable_enums.h"
+-
+-
+-
+-/*
+- *********************************************************************
+- * function declarations
+- */
+- void init_dessertSysifTable(void);
+- void shutdown_dessertSysifTable(void);
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+- /*
+- *********************************************************************
+- * When you register your mib, you get to provide a generic
+- * pointer that will be passed back to you for most of the
+- * functions calls.
+- *
+- * TODO:100:r: Review all context structures
+- */
+- /*
+- * TODO:101:o: |-> Review dessertSysifTable registration context.
+- */
+- typedef netsnmp_data_list dessertSysifTable_registration;
+-
+-/**********************************************************************/
+- /*
+- * TODO:110:r: |-> Review dessertSysifTable data context structure.
+- * This structure is used to represent the data for dessertSysifTable.
+- */
+- /*
+- * This structure contains storage for all the columns defined in the
+- * dessertSysifTable.
+- */
+- typedef struct dessertSysifTable_data_s {
+-
+- /*
+- * sysifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char sysifName[255];
+- size_t sysifName_len; /* # of char elements, not bytes */
+-
+- /*
+- * sysifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char sysifMacAddress[6];
+- size_t sysifMacAddress_len; /* # of char elements, not bytes */
+-
+- /*
+- * sysifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 sysifInPkts;
+-
+- /*
+- * sysifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 sysifOutPkts;
+-
+- /*
+- * sysifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 sysifInOctets;
+-
+- /*
+- * sysifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 sysifOutOctets;
+-
+- } dessertSysifTable_data;
+-
+-
+- /*
+- * TODO:120:r: |-> Review dessertSysifTable mib index.
+- * This structure is used to represent the index for dessertSysifTable.
+- */
+- typedef struct dessertSysifTable_mib_index_s {
+-
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long sysifIndex;
+-
+-
+- } dessertSysifTable_mib_index;
+-
+- /*
+- * TODO:121:r: | |-> Review dessertSysifTable max index length.
+- * If you KNOW that your indexes will never exceed a certain
+- * length, update this macro to that length.
+- */
+-#define MAX_dessertSysifTable_IDX_LEN 1
+-
+-
+- /*
+- *********************************************************************
+- * TODO:130:o: |-> Review dessertSysifTable Row request (rowreq) context.
+- * When your functions are called, you will be passed a
+- * dessertSysifTable_rowreq_ctx pointer.
+- */
+- typedef struct dessertSysifTable_rowreq_ctx_s {
+-
+- /** this must be first for container compare to work */
+- netsnmp_index oid_idx;
+- oid oid_tmp[MAX_dessertSysifTable_IDX_LEN];
+-
+- dessertSysifTable_mib_index tbl_idx;
+-
+- dessertSysifTable_data data;
+-
+- /*
+- * flags per row. Currently, the first (lower) 8 bits are reserved
+- * for the user. See mfd.h for other flags.
+- */
+- u_int rowreq_flags;
+-
+- /*
+- * TODO:131:o: | |-> Add useful data to dessertSysifTable rowreq context.
+- */
+-
+- /*
+- * storage for future expansion
+- */
+- netsnmp_data_list *dessertSysifTable_data_list;
+-
+- } dessertSysifTable_rowreq_ctx;
+-
+- typedef struct dessertSysifTable_ref_rowreq_ctx_s {
+- dessertSysifTable_rowreq_ctx *rowreq_ctx;
+- } dessertSysifTable_ref_rowreq_ctx;
+-
+- /*
+- *********************************************************************
+- * function prototypes
+- */
+- int
+- dessertSysifTable_pre_request(dessertSysifTable_registration *
+- user_context);
+- int
+- dessertSysifTable_post_request(dessertSysifTable_registration *
+- user_context, int rc);
+-
+- int
+- dessertSysifTable_rowreq_ctx_init(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, void *user_init_ctx);
+- void
+- dessertSysifTable_rowreq_ctx_cleanup(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+- dessertSysifTable_rowreq_ctx
+- *dessertSysifTable_row_find_by_mib_index
+- (dessertSysifTable_mib_index * mib_idx);
+-
+- extern oid dessertSysifTable_oid[];
+- extern int dessertSysifTable_oid_size;
+-
+-#include "dessertSysifTable_interface.h"
+-#include "dessertSysifTable_data_access.h"
+-#include "dessertSysifTable_data_get.h"
+-#include "dessertSysifTable_data_set.h"
+-
+- /*
+- * DUMMY markers, ignore
+- *
+- * TODO:099:x: *************************************************************
+- * TODO:199:x: *************************************************************
+- * TODO:299:x: *************************************************************
+- * TODO:399:x: *************************************************************
+- * TODO:499:x: *************************************************************
+- */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_access.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_access.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,342 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "../dessert_internal.h"
+-
+-
+-#include "dessertSysifTable_data_access.h"
+-
+-/** @ingroup interface
+- * @addtogroup data_access data_access: Routines to access data
+- *
+- * These routines are used to locate the data used to satisfy
+- * requests.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+-
+-/**
+- * initialization for dessertSysifTable data access
+- *
+- * This function is called during startup to allow you to
+- * allocate any resources you need for the data table.
+- *
+- * @param dessertSysifTable_reg
+- * Pointer to dessertSysifTable_registration
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : unrecoverable error.
+- */
+-int
+-dessertSysifTable_init_data(dessertSysifTable_registration *
+- dessertSysifTable_reg)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_init_data",
+- "called\n"));
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_init_data */
+-
+-/**
+- * container overview
+- *
+- */
+-
+-/**
+- * container initialization
+- *
+- * @param container_ptr_ptr A pointer to a container pointer. If you
+- * create a custom container, use this parameter to return it
+- * to the MFD helper. If set to NULL, the MFD helper will
+- * allocate a container for you.
+- * @param cache A pointer to a cache structure. You can set the timeout
+- * and other cache flags using this pointer.
+- *
+- * This function is called at startup to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases. If no custom
+- * container is allocated, the MFD code will create one for your.
+- *
+- * This is also the place to set up cache behavior. The default, to
+- * simply set the cache timeout, will work well with the default
+- * container. If you are using a custom container, you may want to
+- * look at the cache helper documentation to see if there are any
+- * flags you want to set.
+- *
+- * @remark
+- * This would also be a good place to do any initialization needed
+- * for you data source. For example, opening a connection to another
+- * process that will supply the data, opening a database, etc.
+- */
+-void
+-dessertSysifTable_container_init(netsnmp_container ** container_ptr_ptr,
+- netsnmp_cache * cache)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_init", "called\n"));
+- dessert_debug("dessertSysifTable_container_load called");
+- if (NULL == container_ptr_ptr) {
+- snmp_log(LOG_ERR,
+- "bad container param to dessertSysifTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * For advanced users, you can use a custom container. If you
+- * do not create one, one will be created for you.
+- */
+- *container_ptr_ptr = NULL;
+-
+- if (NULL == cache) {
+- snmp_log(LOG_ERR,
+- "bad cache param to dessertSysifTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * TODO:345:A: Set up dessertSysifTable cache properties.
+- *
+- * Also for advanced users, you can set parameters for the
+- * cache. Do not change the magic pointer, as it is used
+- * by the MFD helper. To completely disable caching, set
+- * cache->enabled to 0.
+- */
+- cache->timeout = DESSERTSYSIFTABLE_CACHE_TIMEOUT; /* seconds */
+-} /* dessertSysifTable_container_init */
+-
+-/**
+- * container shutdown
+- *
+- * @param container_ptr A pointer to the container.
+- *
+- * This function is called at shutdown to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases.
+- *
+- * This function is called before dessertSysifTable_container_free().
+- *
+- * @remark
+- * This would also be a good place to do any cleanup needed
+- * for you data source. For example, closing a connection to another
+- * process that supplied the data, closing a database, etc.
+- */
+-void
+-dessertSysifTable_container_shutdown(netsnmp_container * container_ptr)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_shutdown", "called\n"));
+-
+- if (NULL == container_ptr) {
+- snmp_log(LOG_ERR,
+- "bad params to dessertSysifTable_container_shutdown\n");
+- return;
+- }
+-
+-} /* dessertSysifTable_container_shutdown */
+-
+-/**
+- * load initial data
+- *
+- * TODO:350:M: Implement dessertSysifTable data load
+- * This function will also be called by the cache helper to load
+- * the container again (after the container free function has been
+- * called to free the previous contents).
+- *
+- * @param container container to which items should be inserted
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+- * @retval MFD_ERROR : other error.
+- *
+- * This function is called to load the index(es) (and data, optionally)
+- * for the every row in the data set.
+- *
+- * @remark
+- * While loading the data, the only important thing is the indexes.
+- * If access to your data is cheap/fast (e.g. you have a pointer to a
+- * structure in memory), it would make sense to update the data here.
+- * If, however, the accessing the data invovles more work (e.g. parsing
+- * some other existing data, or peforming calculations to derive the data),
+- * then you can limit yourself to setting the indexes and saving any
+- * information you will need later. Then use the saved information in
+- * dessertSysifTable_row_prep() for populating data.
+- *
+- * @note
+- * If you need consistency between rows (like you want statistics
+- * for each row to be from the same time frame), you should set all
+- * data here.
+- *
+- */
+-int dessertSysifTable_container_load(netsnmp_container * container) {
+-
+- dessertSysifTable_rowreq_ctx *rowreq_ctx;
+- dessert_sysif_t *sysif = _dessert_sysif; /* TODO: change if multiple tun/tap interfaces are supported*/
+-
+- char inPkts[I64CHARSZ + 1];
+- char outPkts[I64CHARSZ + 1];
+- char inOctets[I64CHARSZ + 1];
+- char outOctets[I64CHARSZ + 1];
+-
+- /*
+- * temporary storage for index values
+- */
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long sysifIndex = 0;
+-
+- dessert_debug("dessertSysifTable_container_load called");
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_load", "called\n"));
+-
+- /*
+- * TODO:351:M: |-> Load/update data in the dessertSysTable container.
+- * loop over your dessertSysifTable data, allocate a rowreq context,
+- * set the index(es) [and data, optionally] and insert into
+- * the container.
+- */
+-
+- /*
+- * TODO:352:M: | |-> set indexes in new dessertSysifTable rowreq context.
+- * data context will be set from the param (unless NULL,
+- * in which case a new data context will be allocated)
+- */
+- rowreq_ctx = dessertSysifTable_allocate_rowreq_ctx(NULL);
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "memory allocation failed\n");
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+-
+- if (MFD_SUCCESS != dessertSysifTable_indexes_set(rowreq_ctx, sysifIndex)) {
+- snmp_log(LOG_ERR, "error setting index while loading "
+- "dessertSysTable data.\n");
+- dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+-
+- /*
+- * TODO:352:r: | |-> populate dessertMeshifTable data context.
+- * Populate data context here. (optionally, delay until row prep)
+- */
+- /*
+- * non-TRANSIENT data: no need to copy. set pointer to data
+- */
+-
+- rowreq_ctx->data.sysifName_len = strlen(sysif->if_name);
+- strcpy(rowreq_ctx->data.sysifName, sysif->if_name);
+-
+- rowreq_ctx->data.sysifMacAddress_len = 6;
+- memcpy(rowreq_ctx->data.sysifMacAddress, sysif->hwaddr, 6);
+-
+- pthread_mutex_lock(&(sysif->cnt_mutex));
+-
+- rowreq_ctx->data.sysifInPkts.low = sysif->ipkts & 0xffffffff;
+- rowreq_ctx->data.sysifInPkts.high = sysif->ipkts >> 32;
+-
+- rowreq_ctx->data.sysifOutPkts.low = sysif->opkts & 0xffffffff;
+- rowreq_ctx->data.sysifOutPkts.high = sysif->opkts >> 32;
+-
+- rowreq_ctx->data.sysifInOctets.low = sysif->ibytes & 0xffffffff;
+- rowreq_ctx->data.sysifInOctets.high = sysif->ibytes >> 32;
+-
+- rowreq_ctx->data.sysifOutOctets.low = sysif->obytes & 0xffffffff;
+- rowreq_ctx->data.sysifOutOctets.high = sysif->obytes >> 32;
+-
+- printU64(inPkts, &rowreq_ctx->data.sysifInPkts);
+- printU64(outPkts, &rowreq_ctx->data.sysifOutPkts);
+- printU64(inOctets, &rowreq_ctx->data.sysifInOctets);
+- printU64(outOctets, &rowreq_ctx->data.sysifOutOctets);
+-
+- dessert_debug("inPkts [%s] [%u]", inPkts, sysif->ipkts);
+- dessert_debug("outPkts [%s] [%u]", outPkts, sysif->opkts);
+- dessert_debug("inOctets [%s] [%u]", inOctets, sysif->ibytes);
+- dessert_debug("outOctets [%s] [%u]", outOctets, sysif->obytes);
+-
+- pthread_mutex_unlock(&(sysif->cnt_mutex));
+-
+- /*
+- * insert into table container
+- */
+- CONTAINER_INSERT(container, rowreq_ctx);
+-
+- DEBUGMSGT(("verbose:dessertSysifTable:dessertSysifTable_container_load", "inserted 1 record(s)\n"));
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_container_load */
+-
+-/**
+- * container clean up
+- *
+- * @param container container with all current items
+- *
+- * This optional callback is called prior to all
+- * item's being removed from the container. If you
+- * need to do any processing before that, do it here.
+- *
+- * @note
+- * The MFD helper will take care of releasing all the row contexts.
+- *
+- */
+-void
+-dessertSysifTable_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_free", "called\n"));
+-
+- /*
+- * TODO:380:M: Free dessertSysifTable container data.
+- */
+-} /* dessertSysifTable_container_free */
+-
+-/**
+- * prepare row for processing.
+- *
+- * When the agent has located the row for a request, this function is
+- * called to prepare the row for processing. If you fully populated
+- * the data context during the index setup phase, you may not need to
+- * do anything.
+- *
+- * @param rowreq_ctx pointer to a context.
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- */
+-int
+-dessertSysifTable_row_prep(dessertSysifTable_rowreq_ctx * rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_row_prep",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:390:o: Prepare row for request.
+- * If populating row data was delayed, this is the place to
+- * fill in the row for this request.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_row_prep */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_access.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_access.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,90 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_DATA_ACCESS_H
+-#define DESSERTSYSIFTABLE_DATA_ACCESS_H
+-
+-#include "../dessert_internal.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+-
+-
+- int
+- dessertSysifTable_init_data(dessertSysifTable_registration *
+- dessertSysifTable_reg);
+-
+-
+- /*
+- * TODO:180:o: Review dessertSysifTable cache timeout.
+- * The number of seconds before the cache times out
+- */
+-#define DESSERTSYSIFTABLE_CACHE_TIMEOUT DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT
+-
+- void dessertSysifTable_container_init(netsnmp_container **
+- container_ptr_ptr,
+- netsnmp_cache *
+- cache);
+- void dessertSysifTable_container_shutdown(netsnmp_container
+- * container_ptr);
+-
+- int dessertSysifTable_container_load(netsnmp_container *
+- container);
+- void dessertSysifTable_container_free(netsnmp_container *
+- container);
+-
+- int dessertSysifTable_cache_load(netsnmp_container *
+- container);
+- void dessertSysifTable_cache_free(netsnmp_container *
+- container);
+-
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- *********************************************************************
+- * Since we have no idea how you really access your data, we'll go with
+- * a worst case example: a flat text file.
+- */
+-#define MAX_LINE_SIZE 256
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+- int dessertSysifTable_row_prep(dessertSysifTable_rowreq_ctx
+- * rowreq_ctx);
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_get.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_get.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,507 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-
+-/** @defgroup data_get data_get: Routines to get data
+- *
+- * TODO:230:M: Implement dessertSysifTable get routines.
+- * TODO:240:M: Implement dessertSysifTable mapping routines (if any).
+- *
+- * These routine are used to get the value for individual objects. The
+- * row context is passed, along with a pointer to the memory where the
+- * value should be copied.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+-
+-/*
+- * ---------------------------------------------------------------------
+- * * TODO:200:r: Implement dessertSysifTable data context functions.
+- */
+-
+-
+-/**
+- * set mib index(es)
+- *
+- * @param tbl_idx mib index structure
+- * @param sysifIndex_val
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This convenience function is useful for setting all the MIB index
+- * components with a single function call. It is assume that the C values
+- * have already been mapped from their native/rawformat to the MIB format.
+- */
+-int
+-dessertSysifTable_indexes_set_tbl_idx(dessertSysifTable_mib_index *
+- tbl_idx, long sysifIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_indexes_set_tbl_idx", "called\n"));
+-
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- tbl_idx->sysifIndex = sysifIndex_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_indexes_set_tbl_idx */
+-
+-/**
+- * @internal
+- * set row context indexes
+- *
+- * @param reqreq_ctx the row context that needs updated indexes
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This function sets the mib indexs, then updates the oid indexs
+- * from the mib index.
+- */
+-int
+-dessertSysifTable_indexes_set(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- long sysifIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_indexes_set",
+- "called\n"));
+-
+- if (MFD_SUCCESS !=
+- dessertSysifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+- sysifIndex_val))
+- return MFD_ERROR;
+-
+- /*
+- * convert mib index to oid index
+- */
+- rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+- if (0 != dessertSysifTable_index_to_oid(&rowreq_ctx->oid_idx,
+- &rowreq_ctx->tbl_idx)) {
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_indexes_set */
+-
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifName
+- * sysifName is subid 2 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.2
+- * Description:
+-name of interface
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the sysifName data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifName_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param sysifName_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by sysifName.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*sysifName_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update sysifName_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-sysifName_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- char **sysifName_val_ptr_ptr,
+- size_t *sysifName_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != sysifName_val_ptr_ptr)
+- && (NULL != *sysifName_val_ptr_ptr));
+- netsnmp_assert(NULL != sysifName_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:sysifName_get", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the sysifName data.
+- * copy (* sysifName_val_ptr_ptr ) data and (* sysifName_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for sysifName data
+- */
+- if ((NULL == (*sysifName_val_ptr_ptr)) ||
+- ((*sysifName_val_ptr_len_ptr) <
+- (rowreq_ctx->data.sysifName_len *
+- sizeof(rowreq_ctx->data.sysifName[0])))) {
+- /*
+- * allocate space for sysifName data
+- */
+- (*sysifName_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.sysifName_len *
+- sizeof(rowreq_ctx->data.sysifName[0]));
+- if (NULL == (*sysifName_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*sysifName_val_ptr_len_ptr) =
+- rowreq_ctx->data.sysifName_len *
+- sizeof(rowreq_ctx->data.sysifName[0]);
+- memcpy((*sysifName_val_ptr_ptr), rowreq_ctx->data.sysifName,
+- rowreq_ctx->data.sysifName_len *
+- sizeof(rowreq_ctx->data.sysifName[0]));
+-
+- return MFD_SUCCESS;
+-} /* sysifName_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifMacAddress
+- * sysifMacAddress is subid 3 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.3
+- * Description:
+-hardware address of interface
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 1x:
+- *
+- * Ranges: 6;
+- *
+- * Its syntax is MacAddress (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 6)
+- */
+-/**
+- * Extract the current value of the sysifMacAddress data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifMacAddress_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param sysifMacAddress_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by sysifMacAddress.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*sysifMacAddress_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update sysifMacAddress_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-sysifMacAddress_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- char **sysifMacAddress_val_ptr_ptr,
+- size_t *sysifMacAddress_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != sysifMacAddress_val_ptr_ptr)
+- && (NULL != *sysifMacAddress_val_ptr_ptr));
+- netsnmp_assert(NULL != sysifMacAddress_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:sysifMacAddress_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the sysifMacAddress data.
+- * copy (* sysifMacAddress_val_ptr_ptr ) data and (* sysifMacAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for sysifMacAddress data
+- */
+- if ((NULL == (*sysifMacAddress_val_ptr_ptr)) ||
+- ((*sysifMacAddress_val_ptr_len_ptr) <
+- (rowreq_ctx->data.sysifMacAddress_len *
+- sizeof(rowreq_ctx->data.sysifMacAddress[0])))) {
+- /*
+- * allocate space for sysifMacAddress data
+- */
+- (*sysifMacAddress_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.sysifMacAddress_len *
+- sizeof(rowreq_ctx->data.sysifMacAddress[0]));
+- if (NULL == (*sysifMacAddress_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*sysifMacAddress_val_ptr_len_ptr) =
+- rowreq_ctx->data.sysifMacAddress_len *
+- sizeof(rowreq_ctx->data.sysifMacAddress[0]);
+- memcpy((*sysifMacAddress_val_ptr_ptr),
+- rowreq_ctx->data.sysifMacAddress,
+- rowreq_ctx->data.sysifMacAddress_len *
+- sizeof(rowreq_ctx->data.sysifMacAddress[0]));
+-
+- return MFD_SUCCESS;
+-} /* sysifMacAddress_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifInPkts
+- * sysifInPkts is subid 4 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.4
+- * Description:
+-packet counter in
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the sysifInPkts data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifInPkts_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-sysifInPkts_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- U64 * sysifInPkts_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != sysifInPkts_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy sysifInPkts data.
+- * get (* sysifInPkts_val_ptr ).low and (* sysifInPkts_val_ptr ).high from rowreq_ctx->data
+- */
+- (*sysifInPkts_val_ptr).high = rowreq_ctx->data.sysifInPkts.high;
+- (*sysifInPkts_val_ptr).low = rowreq_ctx->data.sysifInPkts.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* sysifInPkts_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifOutPkts
+- * sysifOutPkts is subid 5 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.5
+- * Description:
+-packet counter out
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the sysifOutPkts data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifOutPkts_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-sysifOutPkts_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- U64 * sysifOutPkts_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != sysifOutPkts_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy sysifOutPkts data.
+- * get (* sysifOutPkts_val_ptr ).low and (* sysifOutPkts_val_ptr ).high from rowreq_ctx->data
+- */
+- (*sysifOutPkts_val_ptr).high = rowreq_ctx->data.sysifOutPkts.high;
+- (*sysifOutPkts_val_ptr).low = rowreq_ctx->data.sysifOutPkts.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* sysifOutPkts_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifInOctets
+- * sysifInOctets is subid 6 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.6
+- * Description:
+-octet counter in
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the sysifInOctets data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifInOctets_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-sysifInOctets_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- U64 * sysifInOctets_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != sysifInOctets_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy sysifInOctets data.
+- * get (* sysifInOctets_val_ptr ).low and (* sysifInOctets_val_ptr ).high from rowreq_ctx->data
+- */
+- (*sysifInOctets_val_ptr).high = rowreq_ctx->data.sysifInOctets.high;
+- (*sysifInOctets_val_ptr).low = rowreq_ctx->data.sysifInOctets.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* sysifInOctets_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifOutOctets
+- * sysifOutOctets is subid 7 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.7
+- * Description:
+-octet counter out
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the sysifOutOctets data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifOutOctets_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-sysifOutOctets_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- U64 * sysifOutOctets_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != sysifOutOctets_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy sysifOutOctets data.
+- * get (* sysifOutOctets_val_ptr ).low and (* sysifOutOctets_val_ptr ).high from rowreq_ctx->data
+- */
+- (*sysifOutOctets_val_ptr).high = rowreq_ctx->data.sysifOutOctets.high;
+- (*sysifOutOctets_val_ptr).low = rowreq_ctx->data.sysifOutOctets.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* sysifOutOctets_get */
+-
+-
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_get.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_get.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,105 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- *
+- * @file dessertSysifTable_data_get.h
+- *
+- * @addtogroup get
+- *
+- * Prototypes for get functions
+- *
+- * @{
+- */
+-#ifndef DESSERTSYSIFTABLE_DATA_GET_H
+-#define DESSERTSYSIFTABLE_DATA_GET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * GET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * GET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+- /*
+- * indexes
+- */
+- int sysifIndex_map(uint* *mib_sysifIndex_val_ptr,
+- uint raw_sysifIndex_val);
+-
+- int sysifName_map(char **mib_sysifName_val_ptr_ptr,
+- size_t *mib_sysifName_val_ptr_len_ptr,
+- char *raw_sysifName_val_ptr,
+- size_t raw_sysifName_val_ptr_len,
+- int allow_realloc);
+- int sysifName_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, char **sysifName_val_ptr_ptr,
+- size_t *sysifName_val_ptr_len_ptr);
+- int sysifMacAddress_map(char
+- **mib_sysifMacAddress_val_ptr_ptr,
+- size_t
+- *mib_sysifMacAddress_val_ptr_len_ptr,
+- char *raw_sysifMacAddress_val_ptr,
+- size_t
+- raw_sysifMacAddress_val_ptr_len,
+- int allow_realloc);
+- int sysifMacAddress_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx,
+- char **sysifMacAddress_val_ptr_ptr,
+- size_t
+- *sysifMacAddress_val_ptr_len_ptr);
+- int sysifInPkts_map(U64 * mib_sysifInPkts_val_ptr,
+- U64 raw_sysifInPkts_val);
+- int sysifInPkts_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, U64 * sysifInPkts_val_ptr);
+- int sysifOutPkts_map(U64 * mib_sysifOutPkts_val_ptr,
+- U64 raw_sysifOutPkts_val);
+- int sysifOutPkts_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * sysifOutPkts_val_ptr);
+- int sysifInOctets_map(U64 * mib_sysifInOctets_val_ptr,
+- U64 raw_sysifInOctets_val);
+- int sysifInOctets_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * sysifInOctets_val_ptr);
+- int sysifOutOctets_map(U64 * mib_sysifOutOctets_val_ptr,
+- U64 raw_sysifOutOctets_val);
+- int sysifOutOctets_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * sysifOutOctets_val_ptr);
+-
+-
+- int
+- dessertSysifTable_indexes_set_tbl_idx(dessertSysifTable_mib_index *
+- tbl_idx, long sysifIndex_val);
+- int
+- dessertSysifTable_indexes_set(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, long sysifIndex_val);
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_DATA_GET_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_set.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_set.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-
+-/** @defgroup data_set data_set: Routines to set data
+- *
+- * These routines are used to set the value for individual objects. The
+- * row context is passed, along with the new value.
+- *
+- * @{
+- */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_set.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_set.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_DATA_SET_H
+-#define DESSERTSYSIFTABLE_DATA_SET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * SET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * SET Table declarations
+- */
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_enums.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_enums.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,39 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_ENUMS_H
+-#define DESSERTSYSIFTABLE_ENUMS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- * NOTES on enums
+- * ==============
+- *
+- * Value Mapping
+- * -------------
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them
+- * below. For example, a boolean flag (1/0) is usually represented
+- * as a TruthValue in a MIB, which maps to the values (1/2).
+- *
+- */
+-/*************************************************************************
+- *************************************************************************
+- *
+- * enum definitions for table dessertSysifTable
+- *
+- *************************************************************************
+- *************************************************************************/
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_interface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_interface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,936 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-
+-#include <net-snmp/agent/table_container.h>
+-#include <net-snmp/library/container.h>
+-
+-#include "dessertSysifTable_interface.h"
+-
+-#include <ctype.h>
+-
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+-typedef struct dessertSysifTable_interface_ctx_s {
+-
+- netsnmp_container *container;
+- netsnmp_cache *cache;
+-
+- dessertSysifTable_registration *user_ctx;
+-
+- netsnmp_table_registration_info tbl_info;
+-
+- netsnmp_baby_steps_access_methods access_multiplexer;
+-
+-} dessertSysifTable_interface_ctx;
+-
+-static dessertSysifTable_interface_ctx dessertSysifTable_if_ctx;
+-
+-static void
+-_dessertSysifTable_container_init(dessertSysifTable_interface_ctx *
+- if_ctx);
+-static void
+-_dessertSysifTable_container_shutdown(dessertSysifTable_interface_ctx *
+- if_ctx);
+-
+-
+-netsnmp_container *
+-dessertSysifTable_container_get(void)
+-{
+- return dessertSysifTable_if_ctx.container;
+-}
+-
+-dessertSysifTable_registration *
+-dessertSysifTable_registration_get(void)
+-{
+- return dessertSysifTable_if_ctx.user_ctx;
+-}
+-
+-dessertSysifTable_registration *
+-dessertSysifTable_registration_set(dessertSysifTable_registration * newreg)
+-{
+- dessertSysifTable_registration *old =
+- dessertSysifTable_if_ctx.user_ctx;
+- dessertSysifTable_if_ctx.user_ctx = newreg;
+- return old;
+-}
+-
+-int
+-dessertSysifTable_container_size(void)
+-{
+- return CONTAINER_SIZE(dessertSysifTable_if_ctx.container);
+-}
+-
+-/*
+- * mfd multiplexer modes
+- */
+-static Netsnmp_Node_Handler _mfd_dessertSysifTable_pre_request;
+-static Netsnmp_Node_Handler _mfd_dessertSysifTable_post_request;
+-static Netsnmp_Node_Handler _mfd_dessertSysifTable_object_lookup;
+-static Netsnmp_Node_Handler _mfd_dessertSysifTable_get_values;
+-/**
+- * @internal
+- * Initialize the table dessertSysifTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-_dessertSysifTable_initialize_interface(dessertSysifTable_registration *
+- reg_ptr, u_long flags)
+-{
+- netsnmp_baby_steps_access_methods *access_multiplexer =
+- &dessertSysifTable_if_ctx.access_multiplexer;
+- netsnmp_table_registration_info *tbl_info =
+- &dessertSysifTable_if_ctx.tbl_info;
+- netsnmp_handler_registration *reginfo;
+- netsnmp_mib_handler *handler;
+- int mfd_modes = 0;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_initialize_interface", "called\n"));
+-
+-
+- /*************************************************
+- *
+- * save interface context for dessertSysifTable
+- */
+- /*
+- * Setting up the table's definition
+- */
+- netsnmp_table_helper_add_indexes(tbl_info,
+- /** index: sysifIndex */
+- 0);
+-
+- /*
+- * Define the minimum and maximum accessible columns. This
+- * optimizes retrival.
+- */
+- tbl_info->min_column = DESSERTSYSIFTABLE_MIN_COL;
+- tbl_info->max_column = DESSERTSYSIFTABLE_MAX_COL;
+-
+- /*
+- * save users context
+- */
+- dessertSysifTable_if_ctx.user_ctx = reg_ptr;
+-
+- /*
+- * call data access initialization code
+- */
+- dessertSysifTable_init_data(reg_ptr);
+-
+- /*
+- * set up the container
+- */
+- _dessertSysifTable_container_init(&dessertSysifTable_if_ctx);
+- if (NULL == dessertSysifTable_if_ctx.container) {
+- snmp_log(LOG_ERR,
+- "could not initialize container for dessertSysifTable\n");
+- return;
+- }
+-
+- /*
+- * access_multiplexer: REQUIRED wrapper for get request handling
+- */
+- access_multiplexer->object_lookup =
+- _mfd_dessertSysifTable_object_lookup;
+- access_multiplexer->get_values = _mfd_dessertSysifTable_get_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->pre_request = _mfd_dessertSysifTable_pre_request;
+- access_multiplexer->post_request = _mfd_dessertSysifTable_post_request;
+-
+-
+- /*************************************************
+- *
+- * Create a registration, save our reg data, register table.
+- */
+- DEBUGMSGTL(("dessertSysifTable:init_dessertSysifTable",
+- "Registering dessertSysifTable as a mibs-for-dummies table.\n"));
+- handler =
+- netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+- reginfo =
+- netsnmp_handler_registration_create("dessertSysifTable", handler,
+- dessertSysifTable_oid,
+- dessertSysifTable_oid_size,
+- HANDLER_CAN_BABY_STEP |
+- HANDLER_CAN_RONLY);
+- if (NULL == reginfo) {
+- snmp_log(LOG_ERR, "error registering table dessertSysifTable\n");
+- return;
+- }
+- reginfo->my_reg_void = &dessertSysifTable_if_ctx;
+-
+- /*************************************************
+- *
+- * set up baby steps handler, create it and inject it
+- */
+- if (access_multiplexer->object_lookup)
+- mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+- if (access_multiplexer->set_values)
+- mfd_modes |= BABY_STEP_SET_VALUES;
+- if (access_multiplexer->irreversible_commit)
+- mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+- if (access_multiplexer->object_syntax_checks)
+- mfd_modes |= BABY_STEP_CHECK_OBJECT;
+-
+- if (access_multiplexer->pre_request)
+- mfd_modes |= BABY_STEP_PRE_REQUEST;
+- if (access_multiplexer->post_request)
+- mfd_modes |= BABY_STEP_POST_REQUEST;
+-
+- if (access_multiplexer->undo_setup)
+- mfd_modes |= BABY_STEP_UNDO_SETUP;
+- if (access_multiplexer->undo_cleanup)
+- mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+- if (access_multiplexer->undo_sets)
+- mfd_modes |= BABY_STEP_UNDO_SETS;
+-
+- if (access_multiplexer->row_creation)
+- mfd_modes |= BABY_STEP_ROW_CREATE;
+- if (access_multiplexer->consistency_checks)
+- mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+- if (access_multiplexer->commit)
+- mfd_modes |= BABY_STEP_COMMIT;
+- if (access_multiplexer->undo_commit)
+- mfd_modes |= BABY_STEP_UNDO_COMMIT;
+-
+- handler = netsnmp_baby_steps_handler_get(mfd_modes);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+- */
+- handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject container_table helper
+- */
+- handler =
+- netsnmp_container_table_handler_get(tbl_info,
+- dessertSysifTable_if_ctx.
+- container,
+- TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject cache helper
+- */
+- if (NULL != dessertSysifTable_if_ctx.cache) {
+- handler =
+- netsnmp_cache_handler_get(dessertSysifTable_if_ctx.cache);
+- netsnmp_inject_handler(reginfo, handler);
+- }
+-
+- /*
+- * register table
+- */
+- netsnmp_register_table(reginfo, tbl_info);
+-
+-} /* _dessertSysifTable_initialize_interface */
+-
+-/**
+- * @internal
+- * Shutdown the table dessertSysifTable
+- */
+-void
+-_dessertSysifTable_shutdown_interface(dessertSysifTable_registration *
+- reg_ptr)
+-{
+- /*
+- * shutdown the container
+- */
+- _dessertSysifTable_container_shutdown(&dessertSysifTable_if_ctx);
+-}
+-
+-void
+-dessertSysifTable_valid_columns_set(netsnmp_column_info *vc)
+-{
+- dessertSysifTable_if_ctx.tbl_info.valid_columns = vc;
+-} /* dessertSysifTable_valid_columns_set */
+-
+-/**
+- * @internal
+- * convert the index component stored in the context to an oid
+- */
+-int
+-dessertSysifTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertSysifTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_sysifIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_sysifIndex, 0x00, sizeof(var_sysifIndex));
+- var_sysifIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_sysifIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_index_to_oid",
+- "called\n"));
+-
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- snmp_set_var_value(&var_sysifIndex, (u_char *) & mib_idx->sysifIndex,
+- sizeof(mib_idx->sysifIndex));
+-
+-
+- err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+- NULL, 0, &var_sysifIndex);
+- if (err)
+- snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_sysifIndex);
+-
+- return err;
+-} /* dessertSysifTable_index_to_oid */
+-
+-/**
+- * extract dessertSysifTable indexes from a netsnmp_index
+- *
+- * @retval SNMP_ERR_NOERROR : no error
+- * @retval SNMP_ERR_GENERR : error
+- */
+-int
+-dessertSysifTable_index_from_oid(netsnmp_index * oid_idx,
+- dessertSysifTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_sysifIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_sysifIndex, 0x00, sizeof(var_sysifIndex));
+- var_sysifIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_sysifIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_index_from_oid", "called\n"));
+-
+- /*
+- * parse the oid into the individual index components
+- */
+- err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_sysifIndex);
+- if (err == SNMP_ERR_NOERROR) {
+- /*
+- * copy out values
+- */
+- mib_idx->sysifIndex = *((long *)var_sysifIndex.val.string);
+-
+-
+- }
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_sysifIndex);
+-
+- return err;
+-} /* dessertSysifTable_index_from_oid */
+-
+-
+-/*
+- *********************************************************************
+- * @internal
+- * allocate resources for a dessertSysifTable_rowreq_ctx
+- */
+-dessertSysifTable_rowreq_ctx *
+-dessertSysifTable_allocate_rowreq_ctx(void *user_init_ctx)
+-{
+- dessertSysifTable_rowreq_ctx *rowreq_ctx =
+- SNMP_MALLOC_TYPEDEF(dessertSysifTable_rowreq_ctx);
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:dessertSysifTable_allocate_rowreq_ctx", "called\n"));
+-
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+- "dessertSysifTable_rowreq_ctx.\n");
+- return NULL;
+- }
+-
+- rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+-
+- rowreq_ctx->dessertSysifTable_data_list = NULL;
+-
+- /*
+- * if we allocated data, call init routine
+- */
+- if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+- if (SNMPERR_SUCCESS !=
+- dessertSysifTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+- dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
+- rowreq_ctx = NULL;
+- }
+- }
+-
+- return rowreq_ctx;
+-} /* dessertSysifTable_allocate_rowreq_ctx */
+-
+-/*
+- * @internal
+- * release resources for a dessertSysifTable_rowreq_ctx
+- */
+-void
+-dessertSysifTable_release_rowreq_ctx(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:dessertSysifTable_release_rowreq_ctx", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- dessertSysifTable_rowreq_ctx_cleanup(rowreq_ctx);
+-
+- /*
+- * free index oid pointer
+- */
+- if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+- free(rowreq_ctx->oid_idx.oids);
+-
+- SNMP_FREE(rowreq_ctx);
+-} /* dessertSysifTable_release_rowreq_ctx */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertSysifTable_pre_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_pre_request", "called\n"));
+-
+- if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertSysifTable",
+- "skipping additional pre_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- rc = dessertSysifTable_pre_request(dessertSysifTable_if_ctx.user_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertSysifTable", "error %d from "
+- "dessertSysifTable_pre_request\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertSysifTable_pre_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertSysifTable_post_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertSysifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc, packet_rc;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_post_request", "called\n"));
+-
+- /*
+- * release row context, if deleted
+- */
+- if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+- dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
+-
+- /*
+- * wait for last call before calling user
+- */
+- if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertSysifTable",
+- "waiting for last post_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+- rc = dessertSysifTable_post_request(dessertSysifTable_if_ctx.user_ctx,
+- packet_rc);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertSysifTable", "error %d from "
+- "dessertSysifTable_post_request\n", rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertSysifTable_post_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertSysifTable_object_lookup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc = SNMP_ERR_NOERROR;
+- dessertSysifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_object_lookup", "called\n"));
+-
+- /*
+- * get our context from mfd
+- * dessertSysifTable_interface_ctx *if_ctx =
+- * (dessertSysifTable_interface_ctx *)reginfo->my_reg_void;
+- */
+-
+- if (NULL == rowreq_ctx) {
+- rc = SNMP_ERR_NOCREATION;
+- }
+-
+- if (MFD_SUCCESS != rc)
+- netsnmp_request_set_error_all(requests, rc);
+- else
+- dessertSysifTable_row_prep(rowreq_ctx);
+-
+- return SNMP_VALIDATE_ERR(rc);
+-} /* _mfd_dessertSysifTable_object_lookup */
+-
+-/***********************************************************************
+- *
+- * GET processing
+- *
+- ***********************************************************************/
+-/*
+- * @internal
+- * Retrieve the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertSysifTable_get_column(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- netsnmp_variable_list * var, int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_column", "called for %d\n", column));
+-
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * sysifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_SYSIFNAME:
+- var->type = ASN_OCTET_STR;
+- rc = sysifName_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * sysifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_SYSIFMACADDRESS:
+- var->type = ASN_OCTET_STR;
+- rc = sysifMacAddress_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * sysifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_SYSIFINPKTS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = sysifInPkts_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * sysifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_SYSIFOUTPKTS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = sysifOutPkts_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * sysifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_SYSIFINOCTETS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = sysifInOctets_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * sysifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_SYSIFOUTOCTETS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = sysifOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- default:
+- if (DESSERTSYSIFTABLE_MIN_COL <= column
+- && column <= DESSERTSYSIFTABLE_MAX_COL) {
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_column", "assume column %d is reserved\n", column));
+- rc = MFD_SKIP;
+- } else {
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertSysifTable_get_column\n",
+- column);
+- }
+- break;
+- }
+-
+- return rc;
+-} /* _dessertSysifTable_get_column */
+-
+-int
+-_mfd_dessertSysifTable_get_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertSysifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- u_char *old_string;
+- void (*dataFreeHook) (void *);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * save old pointer, so we can free it if replaced
+- */
+- old_string = requests->requestvb->val.string;
+- dataFreeHook = requests->requestvb->dataFreeHook;
+- if (NULL == requests->requestvb->val.string) {
+- requests->requestvb->val.string = requests->requestvb->buf;
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- } else if (requests->requestvb->buf ==
+- requests->requestvb->val.string) {
+- if (requests->requestvb->val_len !=
+- sizeof(requests->requestvb->buf))
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- }
+-
+- /*
+- * get column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertSysifTable_get_column(rowreq_ctx, requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- if (MFD_SKIP == rc) {
+- requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+- rc = SNMP_ERR_NOERROR;
+- }
+- } else if (NULL == requests->requestvb->val.string) {
+- snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+- rc = SNMP_ERR_GENERR;
+- }
+- if (rc)
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+-
+- /*
+- * if the buffer wasn't used previously for the old data (i.e. it
+- * was allcoated memory) and the get routine replaced the pointer,
+- * we need to free the previous pointer.
+- */
+- if (old_string && (old_string != requests->requestvb->buf) &&
+- (requests->requestvb->val.string != old_string)) {
+- if (dataFreeHook)
+- (*dataFreeHook) (old_string);
+- else
+- free(old_string);
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertSysifTable_get_values */
+-
+-
+-/***********************************************************************
+- *
+- * SET processing
+- *
+- ***********************************************************************/
+-
+-/*
+- * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+- */
+-/***********************************************************************
+- *
+- * DATA ACCESS
+- *
+- ***********************************************************************/
+-static void _container_free(netsnmp_container * container);
+-
+-/**
+- * @internal
+- */
+-static int
+-_cache_load(netsnmp_cache * cache, void *vmagic)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_cache_load", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache for dessertSysifTable_cache_load\n");
+- return -1;
+- }
+-
+- /** should only be called for an invalid or expired cache */
+- netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+-
+- /*
+- * call user code
+- */
+- return dessertSysifTable_container_load((netsnmp_container *) cache->
+- magic);
+-} /* _cache_load */
+-
+-/**
+- * @internal
+- */
+-static void
+-_cache_free(netsnmp_cache * cache, void *magic)
+-{
+- netsnmp_container *container;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_cache_free", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache in dessertSysifTable_cache_free\n");
+- return;
+- }
+-
+- container = (netsnmp_container *) cache->magic;
+-
+- _container_free(container);
+-} /* _cache_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_item_free(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- void *context)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_container_item_free",
+- "called\n"));
+-
+- if (NULL == rowreq_ctx)
+- return;
+-
+- dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
+-} /* _container_item_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_container_free", "called\n"));
+-
+- if (NULL == container) {
+- snmp_log(LOG_ERR,
+- "invalid container in dessertSysifTable_container_free\n");
+- return;
+- }
+-
+- /*
+- * call user code
+- */
+- dessertSysifTable_container_free(container);
+-
+- /*
+- * free all items. inefficient, but easy.
+- */
+- CONTAINER_CLEAR(container,
+- (netsnmp_container_obj_func *) _container_item_free,
+- NULL);
+-} /* _container_free */
+-
+-/**
+- * @internal
+- * initialize the container with functions or wrappers
+- */
+-void
+-_dessertSysifTable_container_init(dessertSysifTable_interface_ctx * if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_container_init", "called\n"));
+-
+- /*
+- * cache init
+- */
+- if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+- _cache_load, _cache_free,
+- dessertSysifTable_oid,
+- dessertSysifTable_oid_size);
+-
+- if (NULL == if_ctx->cache) {
+- snmp_log(LOG_ERR, "error creating cache for dessertSysifTable\n");
+- return;
+- }
+-
+- if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+-
+- dessertSysifTable_container_init(&if_ctx->container, if_ctx->cache);
+- if (NULL == if_ctx->container)
+- if_ctx->container =
+- netsnmp_container_find("dessertSysifTable:table_container");
+- if (NULL == if_ctx->container) {
+- snmp_log(LOG_ERR, "error creating container in "
+- "dessertSysifTable_container_init\n");
+- return;
+- }
+-
+- if (NULL != if_ctx->cache)
+- if_ctx->cache->magic = (void *) if_ctx->container;
+-} /* _dessertSysifTable_container_init */
+-
+-/**
+- * @internal
+- * shutdown the container with functions or wrappers
+- */
+-void
+-_dessertSysifTable_container_shutdown(dessertSysifTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_container_shutdown", "called\n"));
+-
+- dessertSysifTable_container_shutdown(if_ctx->container);
+-
+- _container_free(if_ctx->container);
+-
+-} /* _dessertSysifTable_container_shutdown */
+-
+-
+-dessertSysifTable_rowreq_ctx *
+-dessertSysifTable_row_find_by_mib_index(dessertSysifTable_mib_index *
+- mib_idx)
+-{
+- dessertSysifTable_rowreq_ctx *rowreq_ctx;
+- oid oid_tmp[MAX_OID_LEN];
+- netsnmp_index oid_idx;
+- int rc;
+-
+- /*
+- * set up storage for OID
+- */
+- oid_idx.oids = oid_tmp;
+- oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+-
+- /*
+- * convert
+- */
+- rc = dessertSysifTable_index_to_oid(&oid_idx, mib_idx);
+- if (MFD_SUCCESS != rc)
+- return NULL;
+-
+- rowreq_ctx =
+- CONTAINER_FIND(dessertSysifTable_if_ctx.container, &oid_idx);
+-
+- return rowreq_ctx;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_interface.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_interface.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,97 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/** @ingroup interface: Routines to interface to Net-SNMP
+- *
+- * \warning This code should not be modified, called directly,
+- * or used to interpret functionality. It is subject to
+- * change at any time.
+- *
+- * @{
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-#ifndef DESSERTSYSIFTABLE_INTERFACE_H
+-#define DESSERTSYSIFTABLE_INTERFACE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-#include "dessertSysifTable.h"
+-
+-
+- /*
+- ********************************************************************
+- * Table declarations
+- */
+-
+- /*
+- * PUBLIC interface initialization routine
+- */
+- void
+- _dessertSysifTable_initialize_interface
+- (dessertSysifTable_registration * user_ctx, u_long flags);
+- void
+- _dessertSysifTable_shutdown_interface
+- (dessertSysifTable_registration * user_ctx);
+-
+- dessertSysifTable_registration
+- *dessertSysifTable_registration_get(void);
+-
+- dessertSysifTable_registration
+- *dessertSysifTable_registration_set(dessertSysifTable_registration
+- * newreg);
+-
+- netsnmp_container *dessertSysifTable_container_get(void);
+- int dessertSysifTable_container_size(void);
+-
+- dessertSysifTable_rowreq_ctx
+- *dessertSysifTable_allocate_rowreq_ctx(void *);
+- void
+- dessertSysifTable_release_rowreq_ctx(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int dessertSysifTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertSysifTable_mib_index
+- * mib_idx);
+- int dessertSysifTable_index_from_oid(netsnmp_index *
+- oid_idx,
+- dessertSysifTable_mib_index
+- * mib_idx);
+-
+- /*
+- * access to certain internals. use with caution!
+- */
+- void dessertSysifTable_valid_columns_set(netsnmp_column_info
+- *vc);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_INTERFACE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_oids.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_oids.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,43 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_OIDS_H
+-#define DESSERTSYSIFTABLE_OIDS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- * column number definitions for table dessertSysifTable
+- */
+-#define DESSERTSYSIFTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,7
+-
+-#define COLUMN_SYSIFINDEX 1
+-
+-#define COLUMN_SYSIFNAME 2
+-
+-#define COLUMN_SYSIFMACADDRESS 3
+-
+-#define COLUMN_SYSIFINPKTS 4
+-
+-#define COLUMN_SYSIFOUTPKTS 5
+-
+-#define COLUMN_SYSIFINOCTETS 6
+-
+-#define COLUMN_SYSIFOUTOCTETS 7
+-
+-
+-#define DESSERTSYSIFTABLE_MIN_COL COLUMN_SYSIFNAME
+-#define DESSERTSYSIFTABLE_MAX_COL COLUMN_SYSIFOUTOCTETS
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_subagent.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_subagent.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,202 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15795 $ of $
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-#include <signal.h>
+-
+-static int keep_running;
+-
+-static RETSIGTYPE
+-stop_server(int a)
+-{
+- keep_running = 0;
+-}
+-
+-static void
+-usage(void)
+-{
+- printf
+- ("usage: dessertSysifTable [-D<tokens>] [-f] [-L] [-M] [-H] [LISTENING ADDRESSES]\n"
+- "\t-f Do not fork() from the calling shell.\n"
+- "\t-DTOKEN[,TOKEN,...]\n"
+- "\t\tTurn on debugging output for the given TOKEN(s).\n"
+- "\t\tWithout any tokens specified, it defaults to printing\n"
+- "\t\tall the tokens (which is equivalent to the keyword 'ALL').\n"
+- "\t\tYou might want to try ALL for extremely verbose output.\n"
+- "\t\tNote: You can't put a space between the -D and the TOKENs.\n"
+- "\t-H\tDisplay a list of configuration file directives\n"
+- "\t\tunderstood by the agent and then exit.\n"
+- "\t-M\tRun as a normal SNMP Agent instead of an AgentX sub-agent.\n"
+- "\t-x ADDRESS\tconnect to master agent at ADDRESS (default /var/agentx/master).\n"
+- "\t-L\tDo not open a log file; print all messages to stderr.\n");
+- exit(0);
+-}
+-
+-int
+-main(int argc, char **argv)
+-{
+- int agentx_subagent = 1; /* change this if you want to be a SNMP master agent */
+- /*
+- * Defs for arg-handling code: handles setting of policy-related variables
+- */
+- int ch;
+- extern char *optarg;
+- int dont_fork = 0, use_syslog = 0;
+- char *agentx_socket = NULL;
+-
+- while ((ch = getopt(argc, argv, "D:fHLMx:")) != EOF)
+- switch (ch) {
+- case 'D':
+- debug_register_tokens(optarg);
+- snmp_set_do_debugging(1);
+- break;
+- case 'f':
+- dont_fork = 1;
+- break;
+- case 'H':
+- netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1);
+- init_agent("dessertSysifTable"); /* register our .conf handlers */
+- init_dessertSysifTable();
+- init_snmp("dessertSysifTable");
+- fprintf(stderr, "Configuration directives understood:\n");
+- read_config_print_usage(" ");
+- exit(0);
+- case 'M':
+- agentx_subagent = 0;
+- break;
+- case 'L':
+- use_syslog = 0; /* use stderr */
+- break;
+- case 'x':
+- agentx_socket = optarg;
+- break;
+- default:
+- fprintf(stderr, "unknown option %c\n", ch);
+- usage();
+- }
+-
+- if (optind < argc) {
+- int i;
+- /*
+- * There are optional transport addresses on the command line.
+- */
+- DEBUGMSGTL(("snmpd/main", "optind %d, argc %d\n", optind, argc));
+- for (i = optind; i < argc; i++) {
+- char *c, *astring;
+- if ((c = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_PORTS))) {
+- astring = malloc(strlen(c) + 2 + strlen(argv[i]));
+- if (astring == NULL) {
+- fprintf(stderr, "malloc failure processing argv[%d]\n",
+- i);
+- exit(1);
+- }
+- sprintf(astring, "%s,%s", c, argv[i]);
+- netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_PORTS, astring);
+- SNMP_FREE(astring);
+- } else {
+- netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_PORTS, argv[i]);
+- }
+- }
+- DEBUGMSGTL(("snmpd/main", "port spec: %s\n",
+- netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_PORTS)));
+- }
+-
+- /*
+- * we're an agentx subagent?
+- */
+- if (agentx_subagent) {
+- /*
+- * make us a agentx client.
+- */
+- netsnmp_enable_subagent();
+- if (NULL != agentx_socket)
+- netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_X_SOCKET,
+- agentx_socket);
+- }
+-
+- snmp_disable_log();
+- if (use_syslog)
+- snmp_enable_calllog();
+- else
+- snmp_enable_stderrlog();
+-
+- /*
+- * daemonize
+- */
+- if (!dont_fork) {
+- int rc = netsnmp_daemonize(1, !use_syslog);
+- if (rc)
+- exit(-1);
+- }
+-
+- /*
+- * initialize tcp/ip if necessary
+- */
+- SOCK_STARTUP;
+-
+- /*
+- * initialize the agent library
+- */
+- init_agent("dessertSysifTable");
+-
+- /*
+- * init dessertSysifTable mib code
+- */
+- init_dessertSysifTable();
+-
+- /*
+- * read dessertSysifTable.conf files.
+- */
+- init_snmp("dessertSysifTable");
+-
+- /*
+- * If we're going to be a snmp master agent, initial the ports
+- */
+- if (!agentx_subagent)
+- init_master_agent(); /* open the port to listen on (defaults to udp:161) */
+-
+- /*
+- * In case we recevie a request to stop (kill -TERM or kill -INT)
+- */
+- keep_running = 1;
+- signal(SIGTERM, stop_server);
+- signal(SIGINT, stop_server);
+-
+- /*
+- * you're main loop here...
+- */
+- while (keep_running) {
+- /*
+- * if you use select(), see snmp_select_info() in snmp_api(3)
+- */
+- /*
+- * --- OR ---
+- */
+- agent_check_and_process(1); /* 0 == don't block */
+- }
+-
+- /*
+- * at shutdown time
+- */
+- snmp_shutdown("dessertSysifTable");
+- SOCK_CLEANUP;
+- exit(0);
+-}
+Index: libdessert0.86-0.86.14/src/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/Makefile.am 2009-12-09 16:38:27.281423443 +0100
+@@ -0,0 +1,3 @@
++
++SUBDIRS = snmp libdessert
++
+Index: libdessert0.86-0.86.14/src/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/Makefile.in 2009-12-09 16:38:51.091836080 +0100
+@@ -0,0 +1,591 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
++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@
++subdir = src
++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++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
++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 = $(SUBDIRS)
++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@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++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@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++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@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++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@
++ax_pthread_config = @ax_pthread_config@
++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@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++SUBDIRS = snmp libdessert
++all: all-recursive
++
++.SUFFIXES:
++$(srcdir)/Makefile.in: $(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: $(am__configure_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): $(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
++
++# 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):
++ @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//`; \
++ list='$(SUBDIRS)'; 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"
++
++$(RECURSIVE_CLEAN_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ case "$@" in \
++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
++ *) list='$(SUBDIRS)' ;; \
++ esac; \
++ rev=''; for subdir in $$list; do \
++ if test "$$subdir" = "."; then :; else \
++ rev="$$subdir $$rev"; \
++ fi; \
++ done; \
++ rev="$$rev ."; \
++ target=`echo $@ | sed s/-recursive//`; \
++ for subdir in $$rev; do \
++ echo "Making $$target in $$subdir"; \
++ if test "$$subdir" = "."; then \
++ local_target="$$target-am"; \
++ else \
++ local_target="$$target"; \
++ fi; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done && 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
++
++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"
++
++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 \
++ test -d "$(distdir)/$$subdir" \
++ || $(MKDIR_P) "$(distdir)/$$subdir" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ 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
++installdirs: installdirs-recursive
++installdirs-am:
++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:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++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-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:
++
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) 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 \
++ 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-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
++
++
++# 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:
+Index: libdessert0.86-0.86.14/src/libdessert/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/Makefile.am 2009-12-09 16:38:27.291429614 +0100
+@@ -0,0 +1,26 @@
++
++AM_CPPFLAGS = -I$(top_srcdir)/include \
++ -I../snmp \
++ @PCAP_CFLAGS@ \
++ @SNMP_CFLAGS@ \
++ @PTHREAD_CFLAGS@
++
++lib_LTLIBRARIES = libdessert.la
++
++libdessert_la_SOURCES = dessert_agentx.c \
++ dessert_core.c \
++ dessert_meshiface.c \
++ dessert_periodic.c \
++ dessert_cli.c \
++ dessert_log.c \
++ dessert_msg.c \
++ dessert_sysiface.c \
++ dessert_internal.h
++
++libdessert_la_LIBADD = ../snmp/libdessertsnmp.la \
++ @SNMP_LIBS@ \
++ @PCAP_LIBS@ \
++ @CLI_LIBS@ \
++ @PTHREAD_LIBS@
++
++libdessert_la_LDFLAGS = -version-number @LIBDESSERT_LIBRARY_VERSION@
+Index: libdessert0.86-0.86.14/src/libdessert/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/Makefile.in 2009-12-09 16:38:51.145169485 +0100
+@@ -0,0 +1,586 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
++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@
++subdir = src/libdessert
++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++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__installdirs = "$(DESTDIR)$(libdir)"
++LTLIBRARIES = $(lib_LTLIBRARIES)
++libdessert_la_DEPENDENCIES = ../snmp/libdessertsnmp.la
++am_libdessert_la_OBJECTS = dessert_agentx.lo dessert_core.lo \
++ dessert_meshiface.lo dessert_periodic.lo dessert_cli.lo \
++ dessert_log.lo dessert_msg.lo dessert_sysiface.lo
++libdessert_la_OBJECTS = $(am_libdessert_la_OBJECTS)
++libdessert_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++ $(libdessert_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 = $(libdessert_la_SOURCES)
++DIST_SOURCES = $(libdessert_la_SOURCES)
++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@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++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@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++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@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++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@
++ax_pthread_config = @ax_pthread_config@
++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@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++AM_CPPFLAGS = -I$(top_srcdir)/include \
++ -I../snmp \
++ @PCAP_CFLAGS@ \
++ @SNMP_CFLAGS@ \
++ @PTHREAD_CFLAGS@
++
++lib_LTLIBRARIES = libdessert.la
++libdessert_la_SOURCES = dessert_agentx.c \
++ dessert_core.c \
++ dessert_meshiface.c \
++ dessert_periodic.c \
++ dessert_cli.c \
++ dessert_log.c \
++ dessert_msg.c \
++ dessert_sysiface.c \
++ dessert_internal.h
++
++libdessert_la_LIBADD = ../snmp/libdessertsnmp.la \
++ @SNMP_LIBS@ \
++ @PCAP_LIBS@ \
++ @CLI_LIBS@ \
++ @PTHREAD_LIBS@
++
++libdessert_la_LDFLAGS = -version-number @LIBDESSERT_LIBRARY_VERSION@
++all: all-am
++
++.SUFFIXES:
++.SUFFIXES: .c .lo .o .obj
++$(srcdir)/Makefile.in: $(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/libdessert/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu src/libdessert/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: $(am__configure_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
++install-libLTLIBRARIES: $(lib_LTLIBRARIES)
++ @$(NORMAL_INSTALL)
++ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
++ @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 " $(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)'; for p in $$list; do \
++ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
++ test "$$dir" != "$$p" || dir=.; \
++ echo "rm -f \"$${dir}/so_locations\""; \
++ rm -f "$${dir}/so_locations"; \
++ done
++libdessert.la: $(libdessert_la_OBJECTS) $(libdessert_la_DEPENDENCIES)
++ $(libdessert_la_LINK) -rpath $(libdir) $(libdessert_la_OBJECTS) $(libdessert_la_LIBADD) $(LIBS)
++
++mostlyclean-compile:
++ -rm -f *.$(OBJEXT)
++
++distclean-compile:
++ -rm -f *.tab.c
++
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_agentx.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_cli.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_core.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_log.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_meshiface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_msg.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_periodic.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_sysiface.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
++
++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"
++
++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)
++installdirs:
++ for dir in "$(DESTDIR)$(libdir)"; 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:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++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-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-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
++
++.MAKE: install-am install-strip
++
++.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
++ clean-libLTLIBRARIES clean-libtool 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-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
++
++
++# 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:
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_agentx.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_agentx.c 2009-12-09 16:38:27.294762951 +0100
+@@ -0,0 +1,563 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by David Gutzmann
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++/* global data storage // P U B L I C */
++
++/* global data storage // P R I V A T E */
++pthread_rwlock_t _dessert_appstats_cblist_lock = PTHREAD_RWLOCK_INITIALIZER;
++dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist = NULL;
++
++pthread_rwlock_t _dessert_appparams_cblist_lock = PTHREAD_RWLOCK_INITIALIZER;
++dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist = NULL;
++
++/* local data storage*/
++int keep_snmp_running = 1;
++
++pthread_mutex_t _dessert_agentx_appparams_nextindex_mutex =
++ PTHREAD_MUTEX_INITIALIZER;
++uint8_t _dessert_agentx_appparams_nextindex = 0;
++
++/* internal functions forward declarations*/
++static void *_dessert_agentx_worker(void *arg);
++static dessert_agentx_appstats_cb_entry_t *_dessert_agentx_appstats_add(
++ dessert_agentx_appstatscb_get_t *c, uint8_t bulknobulk_flag);
++static uint8_t _dessert_agentx_appparams_new_index(void);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * NET - S N M P // A G E N T _ X
++ *
++ ******************************************************************************/
++
++/******************************************************************************
++ * appStats
++ ******************************************************************************/
++
++/** Creates and initializes a new dessert_agentx_appstats_t.
++ *
++ * @return the new dessert_agentx_appstats_t
++ *
++ * @warning A dessert_agentx_appstats_t allocated with this function must be
++ * freed with dessert_agentx_appstats_destroy().
++ *
++ * @see dessert_agentx_appstats_destroy()
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appstats_t *dessert_agentx_appstats_new() {
++ dessert_agentx_appstats_t *appstat;
++
++ appstat = malloc(sizeof(dessert_agentx_appstats_t));
++
++ appstat->prev = appstat;
++ appstat->next = NULL;
++
++ memset(appstat->name,0, sizeof(appstat->name));
++ memset(appstat->desc,0, sizeof(appstat->desc));
++
++ appstat->value_type = DESSERT_APPSTATS_VALUETYPE_BOOL;
++ appstat->node_or_link = DESSERT_APPSTATS_NODEORLINK_NONE;
++ memset(appstat->macaddress1, 0, ETHER_ADDR_LEN);
++ memset(appstat->macaddress2, 0, ETHER_ADDR_LEN);
++
++ appstat->bool = DESSERT_APPSTATS_BOOL_FALSE;
++
++ return appstat;
++}
++
++/** Frees a dessert_agentx_appstats_t.
++ *
++ * @param appstat the dessert_agentx_appstats_t to be freed
++ *
++ * @warning Only use this method to free a dessert_agentx_appstats_t which was allocated with dessert_agentx_appstats_new().
++ *
++ * @see dessert_agentx_appstats_new()
++ *
++ * @par Description:\n
++ */
++void dessert_agentx_appstats_destroy(dessert_agentx_appstats_t *appstat) {
++ free(appstat);
++}
++
++/** Adds an application statistics callback.
++ *
++ * @param[in] *c the callback to add
++ *
++ * @retval pointer to the corresponding callback entry on success
++ * @retval NULL otherwise
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add(
++ dessert_agentx_appstatscb_get_t *c) {
++
++ return (_dessert_agentx_appstats_add(c, DESSERT_APPSTATS_CB_NOBULK));
++}
++
++/** Adds an application statistics bulk callback.
++ *
++ * @param[in] *c the callback to add
++ *
++ * @retval pointer to the corresponding callback entry on success
++ * @retval NULL otherwise
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add_bulk(
++ dessert_agentx_appstatscb_get_t *c) {
++
++ return (_dessert_agentx_appstats_add(c, DESSERT_APPSTATS_CB_BULK));
++}
++
++/** Deletes an application statistics callback.
++ *
++ * @param *e pointer to a callback entry
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR otherwise
++ *
++ * @see dessert_agentx_appstats_add()
++ * @see dessert_agentx_appstats_add_bulk()
++ *
++ * @par Description:\n
++ */
++int dessert_agentx_appstats_del(dessert_agentx_appstats_cb_entry_t *e) {
++
++ if (e == NULL) {
++ return DESSERT_ERR;
++ }
++
++ pthread_rwlock_wrlock(&_dessert_appstats_cblist_lock);
++ DL_DELETE(_dessert_appstats_cblist, e);
++ pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
++
++ free(e);
++
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ * appParams
++ ******************************************************************************/
++
++/** Creates and initializes a new dessert_agentx_appparams_t.
++ *
++ * @return the new dessert_agentx_appparams_t
++ *
++ * @warning A dessert_agentx_appparams_t allocated with this function must be
++ * freed with dessert_agentx_appparams_destroy().
++ *
++ * @see dessert_agentx_appparams_destroy()
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appparams_t *dessert_agentx_appparam_new() {
++ dessert_agentx_appparams_t *appparam;
++
++ appparam = malloc(sizeof(dessert_agentx_appparams_t));
++
++ memset(appparam->name,0, sizeof(appparam->name));
++ memset(appparam->desc,0, sizeof(appparam->desc));
++
++ appparam->value_type = DESSERT_APPPARAMS_VALUETYPE_BOOL;
++
++ appparam->bool = DESSERT_APPSTATS_BOOL_FALSE;
++
++ return appparam;
++}
++
++/** Frees a dessert_agentx_appparams_t.
++ *
++ * @param appparam the dessert_agentx_appparams_t to be freed
++ *
++ * @warning Only use this method to free a dessert_agentx_appparams_t which was
++ * allocated with dessert_agentx_appparams_new().
++ *
++ * @see dessert_agentx_appparams_new()
++ *
++ * @par Description:\n
++ */
++void dessert_agentx_appparam_destroy(dessert_agentx_appparams_t *appparam) {
++ free(appparam);
++}
++
++/** Adds an application parameter callback.
++ *
++ * @param[in] *c the callback to add
++ *
++ * @retval pointer to the corresponding callback entry on success
++ * @retval NULL otherwise
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appparams_cb_entry_t *dessert_agentx_appparams_add(
++ dessert_agentx_appparamscb_get_t *get,
++ dessert_agentx_appparamscb_set_t *set) {
++
++ dessert_agentx_appparams_cb_entry_t *e;
++
++ e = malloc(sizeof(dessert_agentx_appparams_cb_entry_t));
++
++ if (e == NULL) {
++ dessert_err("failed to allocate buffer for new dessert_agentx_appparams_entry_t");
++ return (NULL);
++ }
++
++ e->index = _dessert_agentx_appparams_new_index();
++ e->get = get;
++ e->set = set;
++
++ pthread_rwlock_wrlock(&_dessert_appparams_cblist_lock);
++ DL_APPEND(_dessert_appparams_cblist, e);
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++
++ return (e);
++}
++
++/** Deletes an application parameter callback.
++ *
++ * @param *e pointer to a callback entry
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR otherwise
++ *
++ * @see dessert_agentx_appparams_add()
++ *
++ * @par Description:\n
++ */
++int dessert_agentx_appparams_del(dessert_agentx_appparams_cb_entry_t *e) {
++
++ if (e == NULL) {
++ return DESSERT_ERR;
++ }
++
++ pthread_rwlock_wrlock(&_dessert_appparams_cblist_lock);
++ DL_DELETE(_dessert_appparams_cblist, e);
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++
++ /* TODO: invalidate row*/
++
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * NET - S N M P // A G E N T _ X
++ *
++ ******************************************************************************/
++
++/******************************************************************************
++ * appStats
++ ******************************************************************************/
++
++void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat){
++ if (appstat->value_type == DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
++ && appstat->octetstring != NULL) {
++ free(appstat->octetstring);
++ }
++ dessert_agentx_appstats_destroy(appstat);
++}
++
++void _dessert_agentx_appstats_free_list(
++ dessert_agentx_appstats_t **appstats_list) {
++ dessert_agentx_appstats_t *appstat;
++ dessert_agentx_appstats_t *tbf;
++
++ for (appstat = (*appstats_list); appstat;) {
++ tbf = appstat;
++ appstat = appstat->next;
++ _dessert_agentx_appstats_free(tbf);
++ }
++}
++
++int _dessert_agentx_appstats_harvest_callbacks(
++ dessert_agentx_appstats_t **appstats_list) {
++ dessert_agentx_appstats_cb_entry_t *cbe;
++ dessert_agentx_appstats_t *new_appstat;
++ dessert_agentx_appstats_t *appstat;
++ int res = 0;
++
++ pthread_rwlock_rdlock(&_dessert_appstats_cblist_lock);
++ DL_FOREACH(_dessert_appstats_cblist, cbe) {
++
++ new_appstat = dessert_agentx_appstats_new();
++ if (new_appstat == NULL) {
++ dessert_err("failed to allocate buffer for new dessert_agentx_appstats_entry_t");
++
++ dessert_err("freeing appstats harvested so far...");
++ _dessert_agentx_appstats_free_list(appstats_list);
++
++ return DESSERT_ERR;
++ }
++
++ res = cbe->c(new_appstat);
++
++ if (res == DESSERT_OK) {
++ if (cbe->isbulk_flag & DESSERT_APPSTATS_CB_NOBULK) {
++
++ DL_APPEND(*appstats_list, new_appstat);
++ } else { // DESSERT_APPSTATS_BULK
++ dessert_agentx_appstats_t temp;
++ DL_FOREACH(new_appstat, appstat ) {
++ temp.next = appstat->next;
++ temp.prev = appstat->prev;
++ DL_APPEND(*appstats_list, appstat);
++ appstat = &temp;
++ }
++ }
++ } else {
++ dessert_err("freeing list of appstats received from callback...");
++ _dessert_agentx_appstats_free_list(&new_appstat);
++ pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
++ dessert_agentx_appstats_del(cbe);
++ pthread_rwlock_rdlock(&_dessert_appstats_cblist_lock);
++ }
++
++ }
++ pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
++
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ * appParams
++ ******************************************************************************/
++
++void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam) {
++ if (appparam->value_type == DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
++ && appparam->octetstring != NULL) {
++ free(appparam->octetstring);
++ }
++ dessert_agentx_appparam_destroy(appparam);
++}
++
++void _dessert_agentx_appparams_free_list(
++ dessert_agentx_appparams_t **appparams_list) {
++ dessert_agentx_appparams_t *appparam;
++ dessert_agentx_appparams_t *tbf;
++
++ for (appparam = (*appparams_list); appparam;) {
++ tbf = appparam;
++ appparam = appparam->next;
++ _dessert_agentx_appparams_free(tbf);
++ }
++}
++
++int _dessert_agentx_appparams_harvest_callbacks(
++ dessert_agentx_appparams_t **appparams_list) {
++ dessert_agentx_appparams_cb_entry_t *cbe;
++ dessert_agentx_appparams_t *new_appparam;
++ int res = 0;
++
++ pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
++ DL_FOREACH(_dessert_appparams_cblist, cbe) {
++ new_appparam = dessert_agentx_appparam_new();
++
++ if (new_appparam == NULL) {
++ dessert_err("failed to allocate buffer for new dessert_agentx_appparams_entry_t");
++
++ dessert_err("freeing appstats harvested so far...");
++ _dessert_agentx_appparams_free_list(appparams_list);
++
++ return DESSERT_ERR;
++ }
++
++ res = cbe->get(new_appparam);
++ new_appparam->index = cbe->index;
++
++ if (res == DESSERT_OK) {
++ DL_APPEND(*appparams_list, new_appparam);
++ } else {
++ _dessert_agentx_appparams_free(new_appparam);
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++ dessert_agentx_appparams_del(cbe);
++ pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
++ }
++
++ } // DL_FOREACH
++
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++
++ return DESSERT_OK;
++}
++
++dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(
++ int index) {
++ dessert_agentx_appparams_cb_entry_t *cbe;
++
++ pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
++ DL_FOREACH(_dessert_appparams_cblist, cbe)
++ if (cbe->index == index)
++ break;
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++
++ if (cbe->index == index)
++
++ return cbe->set;
++ else {
++
++ return NULL;
++ }
++}
++
++/******************************************************************************
++ * other
++ ******************************************************************************/
++
++/** setup and initialize net-snmp subagent (via agent x)*/
++void _dessert_agentx_init_subagent() {
++ /**************************************************************************
++ * setup snmp handling....
++ *************************************************************************/
++
++ pthread_t snmp_worker;
++
++ snmp_enable_calllog();
++ //debug_register_tokens("trace");
++ //debug_register_tokens("tdomain");
++ debug_register_tokens(AGENT);
++ //debug_register_tokens("snmp_agent");
++ //debug_register_tokens("helper:table:req");
++
++ debug_register_tokens("dessertAppParamsTable");
++ debug_register_tokens("verbose:dessertAppParamsTable");
++ debug_register_tokens("internal:dessertAppParamsTable");
++
++ debug_register_tokens("dessertAppParamsTable");
++ debug_register_tokens("verbose:dessertAppStatsTable");
++ debug_register_tokens("internal:dessertAppStatsTable");
++
++ snmp_set_do_debugging(1);
++
++ netsnmp_log_handler *logh;
++
++ logh = netsnmp_register_loghandler(NETSNMP_LOGHANDLER_FILE, LOG_DEBUG);
++ if (logh) {
++ logh->pri_max = LOG_EMERG;
++ logh->token = strdup("/tmp/dessertAGENTX.log");
++ }
++
++ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
++
++ //SOCK_STARTUP;
++ init_agent(AGENT);
++
++ /*
++ * initialize the scalars
++ */
++ init_dessertObjects();
++
++ /*
++ * init dessert{Mesh, Sys}ifTable mib code
++ */
++ init_dessertMeshifTable();
++ init_dessertSysifTable();
++
++ /*
++ * init dessertApp{Stats, Param}Table mib code
++ */
++ init_dessertAppParamsTable();
++ init_dessertAppStatsTable();
++
++ init_snmp(AGENT);
++ DEBUGMSGTL((AGENT, "Initialized agent and snmp.\n"));
++
++ pthread_create(&snmp_worker, NULL, _dessert_agentx_worker, NULL);
++}
++
++void dessert_agentx_stop_subagent() {
++ keep_snmp_running = 0;
++}
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * NET - S N M P // A G E N T _ X
++ *
++ ******************************************************************************/
++
++static dessert_agentx_appstats_cb_entry_t *_dessert_agentx_appstats_add(
++ dessert_agentx_appstatscb_get_t *c, uint8_t bulknobulk_flag) {
++
++ dessert_agentx_appstats_cb_entry_t *e;
++
++ e = malloc(sizeof(dessert_agentx_appstats_cb_entry_t));
++
++ if (e == NULL) {
++ dessert_err("failed to allocate buffer for new dessert_agentx_appstats_entry_t");
++ return (NULL);
++ }
++
++ e->isbulk_flag |= bulknobulk_flag;
++ e->c = c;
++
++ pthread_rwlock_wrlock(&_dessert_appstats_cblist_lock);
++ DL_APPEND(_dessert_appstats_cblist, e);
++ pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
++
++ return (e);
++}
++
++static uint8_t _dessert_agentx_appparams_new_index(void) {
++ uint8_t index;
++
++ pthread_mutex_lock(&_dessert_agentx_appparams_nextindex_mutex);
++ index = _dessert_agentx_appparams_nextindex++;
++ pthread_mutex_unlock(&_dessert_agentx_appparams_nextindex_mutex);
++
++ return index;
++}
++
++static void *_dessert_agentx_worker(void *arg) {
++ DEBUGMSGTL((AGENT, "snmp_worker running...\n"));
++ dessert_info("snmp_worker running...");
++
++ while (keep_snmp_running) {
++ /*
++ * if you use select(), see snmp_select_info() in snmp_api(3)
++ */
++ /*
++ * --- OR ---
++ */
++ agent_check_and_process(1); /* 0 == don't block */
++ }
++
++ dessert_info("snmp_worker exiting...");
++
++ return (NULL);
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_cli.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_cli.c 2009-12-09 16:38:27.294762951 +0100
+@@ -0,0 +1,257 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "config.h"
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++#ifndef HOST_NAME_MAX
++#define HOST_NAME_MAX 32
++#endif
++
++/* global data storage // P U B L I C */
++struct cli_def *dessert_cli;
++struct cli_command *dessert_cli_show;
++struct cli_command *dessert_cli_cfg_iface;
++struct cli_command *dessert_cli_cfg_no;
++struct cli_command *dessert_cli_cfg_no_iface;
++struct cli_command *dessert_cli_cfg_logging;
++struct cli_command *dessert_cli_cfg_no_logging;
++
++/* global data storage // P R I V A T E */
++/* nothing here - yet */
++
++/* local data storage*/
++int _dessert_cli_sock;
++struct sockaddr_in6 _dessert_cli_addr;
++char _dessert_cli_hostname[HOST_NAME_MAX + DESSERT_PROTO_STRLEN + 1];
++pthread_t _dessert_cli_worker;
++
++/* internal functions forward declarations*/
++static void *_dessert_cli_accept_thread(void* arg);
++static int _dessert_cli_cmd_dessertinfo(struct cli_def *cli, char *command,
++ char *argv[], int argc);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * C L I - C O M M A N D L I N E I N T E R F A C E
++ *
++ ******************************************************************************/
++
++/** Start up the command line interface.
++ *
++ * @param[in] port port to listen on
++ *
++ * @retval DESSERT_OK on success
++ * @retval -errno otherwise
++ *
++ * %DESCRIPTION:
++ *
++ */
++int dessert_cli_run(int port) {
++ int on = 1;
++
++ /* listen for connections */
++ _dessert_cli_sock = socket(AF_INET6, SOCK_STREAM, 0);
++ setsockopt(_dessert_cli_sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
++ memset(&_dessert_cli_addr, 0, sizeof(_dessert_cli_addr));
++ _dessert_cli_addr.sin6_family = AF_INET6;
++ _dessert_cli_addr.sin6_addr = in6addr_any;
++ _dessert_cli_addr.sin6_port = htons(port);
++ if (bind(_dessert_cli_sock, (struct sockaddr *) &_dessert_cli_addr,
++ sizeof(_dessert_cli_addr))) {
++ dessert_err("cli socket bind to port %d failed - %s", port, strerror(errno));
++ return -errno;
++ }
++ listen(_dessert_cli_sock, 8);
++ dessert_debug("starting worker thread for cli");
++ pthread_create(&_dessert_cli_worker, NULL, _dessert_cli_accept_thread,
++ &_dessert_cli_sock);
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * C L I - C O M M A N D L I N E I N T E R F A C E
++ *
++ ******************************************************************************/
++
++/** internal function to initialize libcli */
++int _dessert_cli_init() {
++
++ dessert_cli = cli_init();
++
++ /* set host name */
++ memset(_dessert_cli_hostname, 0x0, HOST_NAME_MAX + DESSERT_PROTO_STRLEN + 1);
++ gethostname(_dessert_cli_hostname, HOST_NAME_MAX);
++ strncpy(_dessert_cli_hostname + strlen(_dessert_cli_hostname), ":", 1);
++ strncpy(_dessert_cli_hostname + strlen(_dessert_cli_hostname),
++ dessert_proto, DESSERT_PROTO_STRLEN);
++ cli_set_hostname(dessert_cli, _dessert_cli_hostname);
++
++ /* initialize show commands */
++ dessert_cli_show = cli_register_command(dessert_cli, NULL, "show", NULL,
++ PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "display information");
++ cli_register_command(dessert_cli, dessert_cli_show, "dessert-info",
++ _dessert_cli_cmd_dessertinfo, PRIVILEGE_UNPRIVILEGED, MODE_EXEC,
++ "display information about this program");
++ cli_register_command(dessert_cli, dessert_cli_show, "logging",
++ _dessert_cli_cmd_logging, PRIVILEGE_UNPRIVILEGED, MODE_EXEC,
++ "show logging ringbuffer");
++
++ /* initialize config mode commands */
++ dessert_cli_cfg_iface = cli_register_command(dessert_cli, NULL,
++ "interface", NULL, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "create or configure interfaces");
++ dessert_cli_cfg_no = cli_register_command(dessert_cli, NULL, "no", NULL,
++ PRIVILEGE_PRIVILEGED, MODE_CONFIG, "negate command");
++ dessert_cli_cfg_no_iface = cli_register_command(dessert_cli,
++ dessert_cli_cfg_no, "interface", NULL, PRIVILEGE_PRIVILEGED,
++ MODE_CONFIG, "remove interface or negate interface config");
++ dessert_cli_cfg_logging = cli_register_command(dessert_cli, NULL,
++ "logging", NULL, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "change logging config");
++ dessert_cli_cfg_no_logging = cli_register_command(dessert_cli,
++ dessert_cli_cfg_no, "logging", NULL, PRIVILEGE_PRIVILEGED,
++ MODE_CONFIG, "disable logging for...");
++ cli_register_command(dessert_cli, dessert_cli_cfg_logging, "ringbuffer",
++ _dessert_cli_logging_ringbuffer, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "set logging ringbuffer size (in lines)");
++ cli_register_command(dessert_cli, dessert_cli_cfg_no_logging, "ringbuffer",
++ _dessert_cli_logging_ringbuffer, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "disable logging to ringbuffer");
++ cli_register_command(dessert_cli, dessert_cli_cfg_logging, "file",
++ _dessert_cli_logging_file, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "set logfile and enable file logging");
++ cli_register_command(dessert_cli, dessert_cli_cfg_no_logging, "file",
++ _dessert_cli_logging_file, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "set logfile disable file logging");
++
++ /* initialize other commands */
++ cli_register_command(dessert_cli, NULL, "shutdown",
++ _dessert_cli_cmd_shutdown, PRIVILEGE_PRIVILEGED, MODE_EXEC,
++ "shut daemon down");
++
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * C L I - C O M M A N D L I N E I N T E R F A C E
++ *
++ ******************************************************************************/
++
++/** command "show dessert-info" */
++static int _dessert_cli_cmd_dessertinfo(struct cli_def *cli, char *command,
++ char *argv[], int argc) {
++ cli_print(cli, "\nprotocol running: %s v %d", dessert_proto, dessert_ver);
++ cli_print(cli, "libdessert version: %s", VERSION);
++ cli_print(
++ cli,
++ " ------------------------------------------------------------------------------ ");
++ cli_print(
++ cli,
++ " Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB). ");
++ cli_print(
++ cli,
++ " All rights reserved. ");
++ cli_print(
++ cli,
++ " ");
++ cli_print(
++ cli,
++ " These sources were originally developed by Philipp Schmidt ");
++ cli_print(
++ cli,
++ " at Freie Universitaet Berlin (http://www.fu-berlin.de/), ");
++ cli_print(
++ cli,
++ " Computer Systems and Telematics / Distributed, Embedded Systems (DES) group ");
++ cli_print(
++ cli,
++ " (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/) ");
++ cli_print(
++ cli,
++ " ------------------------------------------------------------------------------ ");
++ cli_print(
++ cli,
++ " This program is free software: you can redistribute it and/or modify it under ");
++ cli_print(
++ cli,
++ " the terms of the GNU General Public License as published by the Free Software ");
++ cli_print(
++ cli,
++ " Foundation, either version 3 of the License, or (at your option) any later ");
++ cli_print(
++ cli,
++ " version. ");
++ cli_print(
++ cli,
++ " ");
++ cli_print(
++ cli,
++ " This program is distributed in the hope that it will be useful, but WITHOUT ");
++ cli_print(
++ cli,
++ " ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ");
++ cli_print(
++ cli,
++ " FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ");
++ cli_print(
++ cli,
++ " ");
++ cli_print(
++ cli,
++ " You should have received a copy of the GNU General Public License along with ");
++ cli_print(
++ cli,
++ " this program. If not, see http://www.gnu.org/licenses/ . ");
++ cli_print(
++ cli,
++ " ------------------------------------------------------------------------------ ");
++ return CLI_OK;
++}
++
++/** internal thread function running the cli */
++static void *_dessert_cli_accept_thread(void* arg) {
++ int *s = (int *) arg;
++ int c;
++
++ while ((c = accept(*s, NULL, 0))) {
++ cli_loop(dessert_cli, c); /* pass the connection off to libcli */
++ close(c);
++ }
++
++ cli_done(dessert_cli); /* free data structures */
++
++ return (NULL);
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_core.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_core.c 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,241 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++#include <sys/stat.h>
++
++/* global data storage // P U B L I C */
++char dessert_proto[DESSERT_PROTO_STRLEN + 1];
++u_int8_t dessert_ver;
++u_int8_t dessert_l25_defsrc[ETHER_ADDR_LEN];
++u_char ether_broadcast[ETHER_ADDR_LEN];
++u_char ether_null[ETHER_ADDR_LEN];
++pthread_rwlock_t dessert_cfglock = PTHREAD_RWLOCK_INITIALIZER;
++
++/* global data storage // P R I V A T E */
++int _dessert_status = 0x0;
++
++/* local data storage*/
++dessert_frameid_t _dessert_nextframeid = 0;
++pthread_mutex_t _dessert_nextframeid_mutex = PTHREAD_MUTEX_INITIALIZER;
++pthread_mutex_t _dessert_exit_mutex = PTHREAD_MUTEX_INITIALIZER;
++pthread_cond_t _dessert_exit_do = PTHREAD_COND_INITIALIZER;
++int _dessert_exit_code = 0;
++char *dessert_pidfile_name;
++
++/* internal functions forward declarations*/
++static void _dessert_cleanup(void);
++static void _dessert_daemonize(void);
++static int _dessert_pid(char* pidfile);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * C O R E
++ *
++ ******************************************************************************/
++
++/** Initializes dessert framework and sets up logging
++ * @arg *proto 4 char string for protocol name
++ * @arg version version number of protocol
++ * @arg opts @see DESSERT_OPT_*
++ * @returns DESSERT_OK on success, DESSERT_ERR otherwise
++ **/
++int dessert_init(const char* proto, int version, uint16_t opts, char* pidfile) {
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ /* save global config */
++ memset(dessert_proto, 0x0, DESSERT_PROTO_STRLEN + 1);
++ strncpy(dessert_proto, proto, DESSERT_PROTO_STRLEN);
++ dessert_ver = version;
++
++ /* initialize pseudo constants */
++ memset(ether_broadcast, 255, ETHER_ADDR_LEN);
++ memset(ether_null, 0, ETHER_ADDR_LEN);
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* daemonize if needed */
++ if ((opts & DESSERT_OPT_DAEMONIZE) && !(opts & DESSERT_OPT_NODAEMONIZE)) {
++ _dessert_daemonize();
++ }
++
++ /* write pid to file if needed */
++ if (pidfile != NULL) {
++ dessert_pidfile_name = pidfile;
++ _dessert_pid(pidfile);
++ }
++
++ /* initialize cli */
++ _dessert_cli_init();
++
++ /* start periodic thread */
++ _dessert_periodic_init();
++
++ /* initialize net-snmp subagent */
++ _dessert_agentx_init_subagent();
++
++ return DESSERT_OK;
++}
++
++/** main loop - wait until dessert_exit() is called or killed
++ * @return arg to dessert_exit
++ */
++int dessert_run() {
++ pthread_mutex_lock(&_dessert_exit_mutex);
++ pthread_cond_wait(&_dessert_exit_do, &_dessert_exit_mutex);
++ _dessert_cleanup();
++ pthread_mutex_unlock(&_dessert_exit_mutex);
++ return (_dessert_exit_code);
++}
++
++/**Causes dessert_run() to break out of the main loop.
++ */
++void dessert_exit() {
++ /* kill snmp_worker thread */
++ dessert_agentx_stop_subagent();
++ pthread_cond_signal(&_dessert_exit_do);
++}
++
++/** generates a new, runtime-unique frame id
++ * @returns runtime-unique frame id
++ **/
++dessert_frameid_t _dessert_newframeid() {
++ dessert_frameid_t x;
++ pthread_mutex_lock(&_dessert_nextframeid_mutex);
++ x = _dessert_nextframeid++;
++ pthread_mutex_unlock(&_dessert_nextframeid_mutex);
++ return (x);
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * C O R E
++ *
++ ******************************************************************************/
++
++/** command "shutdown" */
++int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[],
++ int argc) {
++ cli_print(cli, "daemon will shut down now!");
++ pthread_mutex_lock(&_dessert_exit_mutex);
++ pthread_cond_broadcast(&_dessert_exit_do);
++ pthread_mutex_unlock(&_dessert_exit_mutex);
++
++ return CLI_OK;
++}
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * C O R E
++ *
++ ******************************************************************************/
++
++/** internal function to clean up things */
++void _dessert_cleanup(void) {
++ /* remove pidfile */
++ if (dessert_pidfile_name != NULL) {
++ unlink(dessert_pidfile_name);
++ }
++}
++
++/** internal daemonize helper */
++void _dessert_daemonize(void) {
++ pid_t pid, sid;
++
++ /* Fork off the parent process */
++ pid = fork();
++ if (pid < 0) {
++ perror("could not create daemon process!");
++ exit(EXIT_FAILURE);
++ }
++ /* If we got a good PID, then
++ we can exit the parent process. */
++ if (pid > 0) {
++ exit(EXIT_SUCCESS);
++ }
++
++ /* Change the file mode mask */
++ umask(0);
++
++ /* Open any logs here */
++
++ /* Create a new SID for the child process */
++ sid = setsid();
++ if (sid < 0) {
++ perror("could not set sid!");
++ exit(EXIT_FAILURE);
++ }
++
++ /* Change the current working directory */
++ if ((chdir("/")) < 0) {
++ perror("could not chdir /!");
++ exit(EXIT_FAILURE);
++ }
++
++ /* Close out the standard file descriptors */
++ close(STDIN_FILENO);
++ close(STDOUT_FILENO);
++ close(STDERR_FILENO);
++
++ /* write config */
++ pthread_rwlock_wrlock(&dessert_cfglock);
++ _dessert_status |= _DESSERT_STATUS_DAEMON;
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* adopt logging */
++ dessert_logcfg(0x0);
++}
++
++/** internal pid-write helper */
++int _dessert_pid(char* pidfile) {
++ FILE *fd;
++
++ fd = fopen(pidfile, "w");
++ if (fd == 0) {
++ dessert_warn("could not open pid file");
++ return 1;
++ } else {
++ int r;
++ r = fprintf(fd, "%d\n", getpid());
++ if (r < 0) {
++ dessert_warn("could not write to pid file");
++ return DESSERT_ERR;
++ }
++
++ if (fclose(fd) != 0) {
++ dessert_warn("failed to close pid file");
++ }
++ }
++
++ return DESSERT_OK;
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_internal.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_internal.h 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,219 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++*******************************************************************************/
++
++#ifndef DESSERT_INTERNAL_H
++#define DESSERT_INTERNAL_H
++
++/* load needed libs - quite dirty */
++#include <stdlib.h>
++#include <stdio.h>
++#include <fcntl.h>
++#include <string.h>
++#include <stdarg.h>
++#include <unistd.h>
++#include <errno.h>
++#include <pthread.h>
++#include <syslog.h>
++#include <sys/socket.h>
++#include <sys/ioctl.h>
++#include <sys/sysctl.h>
++#include <net/route.h>
++#include <arpa/inet.h>
++#include <netinet/in.h>
++#include <libcli.h>
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++#include <dessert/utlist.h>
++
++/* internal snmp includes */
++#include "dessertObjects.h"
++#include "dessertMeshifTable.h"
++#include "dessertSysifTable.h"
++#include "dessertAppStatsTable.h"
++#include "dessertAppParamsTable.h"
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * C O R E
++ *
++ ******************************************************************************/
++
++/** flag for _dessert_status - program is daemon */
++#define _DESSERT_STATUS_DAEMON 0x1
++
++/** global status flag holder */
++extern int _dessert_status;
++
++dessert_frameid_t _dessert_newframeid(void);
++
++int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[], int argc);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * C L I - C O M M A N D L I N E I N T E R F A C E
++ *
++ ******************************************************************************/
++
++int _dessert_cli_init(void);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * L O G F A C I L I T Y
++ *
++ ******************************************************************************/
++
++/** maximum size of a log line */
++#define DESSERT_LOGLINE_MAX 1024
++
++/** logfile file pointer to use with DESSERT_OPT_LOGFILE */
++extern FILE *dessert_logfd;
++
++int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[], int argc);
++int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
++int _dessert_cli_no_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
++int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
++int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * M E S H - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** callback list entry for dessert mesh interface callbacks */
++typedef struct dessert_meshrxcbe {
++ /** pointer to callback to call */
++ dessert_meshrxcb_t *c;
++ /** priority - lowest first */
++ int prio;
++ /** next entry in list */
++ struct dessert_meshrxcbe *next;
++} dessert_meshrxcbe_t;
++
++int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif);
++int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len, dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif, dessert_frameid_t id);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * S Y S - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** callback list entry for tun/tap callbacks */
++typedef struct dessert_sysrxcbe {
++ /** pointer to callback to call */
++ dessert_sysrxcb_t *c;
++ /** priority - lowest first */
++ int prio;
++ /** next entry in list */
++ struct dessert_sysrxcbe *next;
++} dessert_sysrxcbe_t;
++
++extern struct dessert_sysif *_dessert_sysif;
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * M E S S A G E H A N D L I N G
++ *
++ ******************************************************************************/
++
++/** size of a dessert_msg struct */
++#define DESSERT_MSGLEN sizeof(struct dessert_msg)
++
++/** size of a dessert_msg_proc struct */
++#define DESSERT_MSGPROCLEN sizeof(struct dessert_msg_proc)
++
++/** maximum frame size to assemble as dessert_msg */
++#define DESSERT_MAXFRAMEBUFLEN DESSERT_MAXFRAMELEN
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * P E R I O D I C T A S K S
++ *
++ ******************************************************************************/
++
++void _dessert_periodic_init(void);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * NET - S N M P // A G E N T _ X
++ *
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++#define AGENT "dessertAGENTX"
++
++#define DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT 10
++#define DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT 10
++#define DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT 10
++#define DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT 1
++
++/******************************************************************************
++ * globals
++ ******************************************************************************/
++
++extern pthread_rwlock_t _dessert_appstats_cblist_lock;
++extern dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist;
++
++extern pthread_rwlock_t _dessert_appparams_cblist_lock;
++extern dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist;
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++int _dessert_agentx_appstats_harvest_callbacks(dessert_agentx_appstats_t **appstats_list);
++void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat);
++void _dessert_agentx_appstats_free_list(dessert_agentx_appstats_t **appstats_list);
++
++int _dessert_agentx_appparams_harvest_callbacks(dessert_agentx_appparams_t **appparams_list);
++void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam);
++void _dessert_agentx_appparams_free_list(dessert_agentx_appparams_t **appparams_list);
++dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(int index);
++
++void _dessert_agentx_init_subagent(void);
++void dessert_agentx_stop_subagent(void);
++
++
++#endif /* DESSERT_INTERNAL_H */
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_log.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_log.c 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,417 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++#include <sys/stat.h>
++
++/* data storage */
++FILE *dessert_logfd = NULL;
++char dessert_logprefix[12];
++
++#define _DESSERT_LOGFLAG_SYSLOG 0x1
++#define _DESSERT_LOGFLAG_LOGFILE 0x2
++#define _DESSERT_LOGFLAG_STDERR 0x4
++#define _DESSERT_LOGFLAG_RBUF 0x8
++int _dessert_logflags = _DESSERT_LOGFLAG_STDERR;
++int _dessert_loglevel = LOG_DEBUG;
++
++/* the logging ringbuffer */
++char *_dessert_logrbuf = NULL; /* pointer to begin */
++int _dessert_logrbuf_len = 0; /* length in lines (DESSERT_LOGLINE_MAX*_dessert_logrbuf_len*sizeof(char) would be in bytes) */
++int _dessert_logrbuf_cur = 0; /* current position */
++int _dessert_logrbuf_used = 0; /* used slots */
++pthread_rwlock_t _dessert_logrbuf_len_lock = PTHREAD_RWLOCK_INITIALIZER; /* for resizing */
++pthread_mutex_t _dessert_logrbuf_mutex = PTHREAD_MUTEX_INITIALIZER; /* for moving _dessert_logrbuf_cur */
++
++/* internal functions forward declarations TODO: cleanup */
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * L O G F A C I L I T Y
++ *
++ ******************************************************************************/
++
++/** Configure dessert logging framework and sets up logging.
++ *
++ * @arg opts OR'd flags - @see DESSERT_LOG_*
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_logcfg(uint16_t opts) {
++ snprintf(dessert_logprefix, 12, "dessert/%s", dessert_proto);
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ /* configure logging */
++ if ((opts & DESSERT_LOG_SYSLOG) && !(opts & DESSERT_LOG_NOSYSLOG)) {
++ if (!(_dessert_logflags & _DESSERT_LOGFLAG_SYSLOG)) {
++ /* initialize syslog channel */
++ openlog(dessert_logprefix, LOG_PID, LOG_DAEMON);
++ }
++ _dessert_logflags |= _DESSERT_LOGFLAG_SYSLOG;
++ } else if (!(opts & DESSERT_LOG_SYSLOG) && (opts & DESSERT_LOG_NOSYSLOG)) {
++ if (_dessert_logflags & _DESSERT_LOGFLAG_SYSLOG) {
++ /* close syslog channel */
++ closelog();
++ }
++ _dessert_logflags &= ~_DESSERT_LOGFLAG_SYSLOG;
++ }
++ if ((opts & DESSERT_LOG_STDERR) && !(opts & DESSERT_LOG_NOSTDERR)
++ && !(_dessert_status & _DESSERT_STATUS_DAEMON)) {
++ _dessert_logflags |= _DESSERT_LOGFLAG_STDERR;
++ } else if ((!(opts & DESSERT_LOG_STDERR) && (opts & DESSERT_LOG_NOSTDERR))
++ || (_dessert_status & _DESSERT_STATUS_DAEMON)) {
++ _dessert_logflags &= ~_DESSERT_LOGFLAG_STDERR;
++ }
++ if ((opts & DESSERT_LOG_FILE) && !(opts & DESSERT_LOG_NOFILE)
++ && dessert_logfd != NULL) {
++ _dessert_logflags |= _DESSERT_LOGFLAG_LOGFILE;
++ } else if ((!(opts & DESSERT_LOG_FILE) && (opts & DESSERT_LOG_NOFILE))
++ || dessert_logfd == NULL) {
++ _dessert_logflags &= ~_DESSERT_LOGFLAG_LOGFILE;
++ }
++ if ((opts & DESSERT_LOG_DEBUG) && !(opts & DESSERT_LOG_NODEBUG)) {
++ _dessert_loglevel = LOG_DEBUG;
++ } else if (!(opts & DESSERT_LOG_DEBUG) && (opts & DESSERT_LOG_NODEBUG)) {
++ _dessert_loglevel = LOG_INFO;
++ }
++ if ((opts & DESSERT_LOG_RBUF) && !(opts & DESSERT_LOG_NORBUF)) {
++ _dessert_logflags |= _DESSERT_LOGFLAG_RBUF;
++ } else if (!(opts & DESSERT_LOG_RBUF) && (opts & DESSERT_LOG_NORBUF)) {
++ _dessert_logflags &= ~_DESSERT_LOGFLAG_RBUF;
++ }
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return 0;
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * L O G F A C I L I T Y
++ *
++ ******************************************************************************/
++
++char* _dessert_log_rbuf_nextline(void) {
++ char* r = NULL;
++ pthread_mutex_lock(&_dessert_logrbuf_mutex);
++ if (_dessert_logrbuf_len > 0) {
++ if (_dessert_logrbuf_cur >= _dessert_logrbuf_len) {
++ _dessert_logrbuf_cur = 0;
++ }
++ r = _dessert_logrbuf + (DESSERT_LOGLINE_MAX * _dessert_logrbuf_cur);
++ _dessert_logrbuf_cur++;
++ if (_dessert_logrbuf_used < _dessert_logrbuf_len - 1) {
++ _dessert_logrbuf_used++;
++ }
++ }
++ pthread_mutex_unlock(&_dessert_logrbuf_mutex);
++
++ return (r);
++}
++
++/** internal log function
++ *
++ * @internal
++ *
++ * @param[in] level loglevel from <syslog.h>
++ * @param[in] *func function name called from
++ * @param[in] *file file name called from
++ * @param[in] *line line called from
++ * @param[in] *fmt printf format string
++ * @param[in] ... (var-arg) printf like variables
++ **/
++void _dessert_log(int level, const char* func, const char* file, int line,
++ const char *fmt, ...) {
++ va_list args;
++ char *rbuf_line = NULL;
++ char buf[DESSERT_LOGLINE_MAX];
++ char lf[80];
++ char *lt;
++ char lds[27];
++ struct tm ldd;
++ time_t ldi;
++ int lf_slen, buf_slen;
++
++ if (_dessert_loglevel < level)
++ return;
++
++ snprintf(lf, 80, " (%s@%s:%d)", func, file, line);
++ lf_slen = strlen(lf);
++
++ va_start(args, fmt);
++ vsnprintf(buf, DESSERT_LOGLINE_MAX, fmt, args);
++ va_end(args);
++ buf_slen = strlen(buf);
++
++ if (_dessert_logflags | _DESSERT_LOGFLAG_SYSLOG) {
++ syslog(level, "%s%s", buf, lf);
++ }
++
++ if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF) {
++ pthread_rwlock_rdlock(&_dessert_logrbuf_len_lock);
++ rbuf_line = _dessert_log_rbuf_nextline();
++ }
++
++ if (_dessert_logflags | (_DESSERT_LOGFLAG_LOGFILE | _DESSERT_LOGFLAG_STDERR
++ | _DESSERT_LOGFLAG_RBUF)) {
++
++ time(&ldi);
++ localtime_r(&ldi, &ldd);
++ snprintf(lds, 26, "%04d-%02d-%02d %02d:%02d:%02d%+05.1f ", ldd.tm_year
++ + 1900, ldd.tm_mon + 1, ldd.tm_mday, ldd.tm_hour, ldd.tm_min,
++ ldd.tm_sec, (double) ldd.tm_gmtoff / 3600);
++
++ switch (level) {
++ case LOG_EMERG:
++ lt = "EMERG: ";
++ break;
++ case LOG_ALERT:
++ lt = "ALERT: ";
++ break;
++ case LOG_CRIT:
++ lt = "CRIT: ";
++ break;
++ case LOG_ERR:
++ lt = "ERR: ";
++ break;
++ case LOG_WARNING:
++ lt = "WARN: ";
++ break;
++ case LOG_NOTICE:
++ lt = "NOTICE:";
++ break;
++ case LOG_INFO:
++ lt = "INFO: ";
++ break;
++ default:
++ lt = "DEBUG: ";
++ break;
++ }
++
++ if (32 + buf_slen + lf_slen > 80) {
++ if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
++ != NULL)
++ fprintf(dessert_logfd, "%s%s%s\n%80s\n", lds, lt, buf, lf);
++ if (_dessert_logflags & _DESSERT_LOGFLAG_STDERR)
++ fprintf(stderr, "%s%s%s\n%80s\n", lds, lt, buf, lf);
++ if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF && rbuf_line != NULL)
++ snprintf(rbuf_line, DESSERT_LOGLINE_MAX, "%s%s%s\n%80s", lds,
++ lt, buf, lf);
++ } else {
++ while (32 + buf_slen + lf_slen < 80) {
++ buf[buf_slen++] = ' ';
++ }
++ buf[buf_slen] = '\0';
++ if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
++ != NULL)
++ fprintf(dessert_logfd, "%s%s%s%s\n", lds, lt, buf, lf);
++ if (_dessert_logflags & _DESSERT_LOGFLAG_STDERR)
++ fprintf(stderr, "%s%s%s%s\n", lds, lt, buf, lf);
++ if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF && rbuf_line != NULL)
++ snprintf(rbuf_line, DESSERT_LOGLINE_MAX, "%s%s%s%s", lds, lt,
++ buf, lf);
++ }
++
++ if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
++ != NULL) {
++ fflush(dessert_logfd);
++ }
++ if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF) {
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++ }
++
++ }
++}
++
++/** command "logging file" */
++int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[],
++ int argc) {
++ FILE *newlogdf;
++
++ if (argc != 1) {
++ cli_print(cli, "usage %s filename\n", command);
++ return CLI_ERROR;
++ }
++
++ newlogdf = fopen(argv[0], "a");
++
++ if (newlogdf == NULL) {
++ dessert_err("failed o open %s as logfile\n", argv[0]);
++ cli_print(cli, "failed o open %s as logfile\n", argv[0]);
++ return CLI_ERROR;
++ }
++
++ /* clean up old logfile first */
++ if (dessert_logfd != NULL) {
++ dessert_logcfg(DESSERT_LOG_NOFILE);
++ fclose(dessert_logfd);
++ }
++
++ dessert_logfd = newlogdf;
++ dessert_logcfg(DESSERT_LOG_FILE);
++
++ return CLI_OK;
++}
++
++/** command "logging file" */
++int _dessert_cli_no_logging_file(struct cli_def *cli, char *command,
++ char *argv[], int argc) {
++ dessert_logcfg(DESSERT_LOG_NOFILE);
++ if (dessert_logfd != NULL) {
++ fclose(dessert_logfd);
++ }
++ dessert_logfd = NULL;
++ return CLI_OK;
++}
++
++/** command "logging ringbuffer" */
++int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command,
++ char *argv[], int argc) {
++ int newlen = -1;
++ if (argc != 1 || (newlen = (int) strtol(argv[0], NULL, 10)) < 0) {
++ cli_print(cli, "usage %s [buffer length]\n", command);
++ return CLI_ERROR;
++ }
++
++ if (newlen == _dessert_logrbuf_len)
++ return CLI_OK;
++
++ if (newlen == 0) {
++ cli_print(cli,
++ "will not set buffer length to 0 - use no logging ringbuffer instead\n");
++ return CLI_ERROR;
++ }
++
++ pthread_rwlock_wrlock(&_dessert_logrbuf_len_lock);
++
++ /* make logging buffer larger - easy if not ENOMEM*/
++ if (newlen > _dessert_logrbuf_len) {
++ _dessert_logrbuf = realloc(_dessert_logrbuf, newlen
++ * DESSERT_LOGLINE_MAX * sizeof(char));
++ if (_dessert_logrbuf == NULL) {
++ _dessert_logrbuf_len = 0;
++ _dessert_logrbuf_cur = 0;
++ } else {
++ _dessert_logrbuf_len = newlen;
++ }
++ dessert_logcfg(DESSERT_LOG_RBUF);
++ /* make logging buffer smaller - pain in the ass */
++ } else if (newlen < _dessert_logrbuf_len) {
++ /* move current log buffer if needed */
++ if (_dessert_logrbuf_cur > newlen) {
++ memmove(_dessert_logrbuf, _dessert_logrbuf + (DESSERT_LOGLINE_MAX
++ * (_dessert_logrbuf_cur - newlen)), newlen
++ * DESSERT_LOGLINE_MAX * sizeof(char));
++ _dessert_logrbuf_cur -= newlen;
++ }
++ _dessert_logrbuf = realloc(_dessert_logrbuf, newlen
++ * DESSERT_LOGLINE_MAX * sizeof(char));
++ if (_dessert_logrbuf == NULL) {
++ _dessert_logrbuf_len = 0;
++ _dessert_logrbuf_cur = 0;
++ } else {
++ _dessert_logrbuf_len = newlen;
++ }
++ } else {
++ dessert_err("this never happens");
++ }
++ if (_dessert_logrbuf_used > _dessert_logrbuf_len - 1)
++ _dessert_logrbuf_used = _dessert_logrbuf_len - 1;
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++ return CLI_OK;
++
++}
++
++/** command "no logging ringbuffer" */
++int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command,
++ char *argv[], int argc) {
++ if (_dessert_logrbuf == NULL) {
++ return CLI_OK;
++ } else {
++ pthread_rwlock_wrlock(&_dessert_logrbuf_len_lock);
++ dessert_logcfg(DESSERT_LOG_NORBUF);
++ free(_dessert_logrbuf);
++ _dessert_logrbuf = NULL;
++ _dessert_logrbuf_len = 0;
++ _dessert_logrbuf_cur = 0;
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++ return CLI_OK;
++ }
++
++}
++
++/** command "show logging" */
++int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[],
++ int argc) {
++ pthread_rwlock_rdlock(&_dessert_logrbuf_len_lock);
++ int i = 0;
++ int max = _dessert_logrbuf_len - 1;
++ char* line;
++
++ if (_dessert_logrbuf_len < 1) {
++ cli_print(
++ cli,
++ "logging to ringbuffer is disables - use \"logging ringbuffer [int]\" in config-mode first");
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++ return CLI_ERROR;
++ }
++
++ if (argc == 1) {
++ int max2 = (int) strtol(argv[0], NULL, 10);
++ if (max2 > 0) {
++ max = max2;
++ }
++ }
++
++ /* where to start and print? */
++ if (max > _dessert_logrbuf_used) {
++ max = _dessert_logrbuf_used;
++ }
++ i = _dessert_logrbuf_cur - max - 1;
++ if (i < 0) {
++ i += _dessert_logrbuf_len;
++ }
++
++ while (max > 0) {
++ i++;
++ max--;
++ if (i == _dessert_logrbuf_len) {
++ i = 0;
++ }
++ line = _dessert_logrbuf + (DESSERT_LOGLINE_MAX * i);
++ cli_print(cli, "%s", line);
++ }
++
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++
++ return CLI_OK;
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_meshiface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_meshiface.c 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,1221 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++#ifdef __FreeBSD__
++#include <ifaddrs.h>
++#include <net/if_dl.h>
++#endif
++
++/* global data storage // P U B L I C */
++/* nothing here - yet */
++
++/* global data storage // P R I V A T E */
++/* nothing here - yet */
++
++/* local data storage*/
++dessert_meshif_t *_dessert_meshiflist = NULL;
++
++pthread_mutex_t _dessert_meshiflist_mutex = PTHREAD_MUTEX_INITIALIZER;
++int _dessert_meshiflist_len = 0;
++int _dessert_meshiflist_perm_count = 0;
++int _dessert_meshiflist_current_perm = 0;
++dessert_meshif_t ***_dessert_meshiflist_perms = NULL;
++
++dessert_meshrxcbe_t *_dessert_meshrxcblist;
++int _dessert_meshrxcblistver = 0;
++
++/* internal functions forward declarations*/
++static void _dessert_packet_process(u_char *args,
++ const struct pcap_pkthdr *header, const u_char *packet);
++static void *_dessert_meshif_add_thread(void* arg);
++static inline int _dessert_meshsend_if2(dessert_msg_t* msg,
++ dessert_meshif_t *iface);
++static void _dessert_meshif_cleanup(dessert_meshif_t *meshif);
++static void _dessert_meshiflist_update_permutations(void);
++static inline int DL_LENGTH(dessert_meshif_t *l);
++static inline void list2array(dessert_meshif_t *l, dessert_meshif_t **a,
++ int len);
++static inline int fact(int i);
++static inline void permutation(int k, int len, dessert_meshif_t **a);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * M E S H - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/******************************************************************************
++ * sending messages
++ ******************************************************************************/
++
++/** Sends a \b dessert \b message via the specified interface or all interfaces.
++ *
++ * The original message buffer will not be altered, and the ethernet src address
++ * will be set correctly
++ *
++ * @param[in] *msgin message to send
++ * @param[in] *iface interface to send from - use NULL for all interfaces
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend(const dessert_msg_t* msgin, const dessert_meshif_t *iface) {
++ dessert_msg_t* msg;
++ int res;
++
++ /* check message - we only send valid messages! */
++ if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
++ dessert_warn("will not send invalid message - aborting");
++ return EINVAL;
++ }
++
++ /* clone message */
++ dessert_msg_clone(&msg, msgin, 1);
++ res = dessert_meshsend_fast(msg, iface);
++ dessert_msg_destroy(msg);
++
++ return res;
++
++}
++
++/** Sends a \b dessert \b message via all interfaces, except via the specified interface.
++ *
++ * The original message buffer will not be altered, and the ethernet src address will be set correctly.
++ *
++ * @param[in] *msgin message to send
++ * @param[in] *iface interface NOT to send from - use NULL for all interfaces
++
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_allbutone(const dessert_msg_t* msgin,
++ const dessert_meshif_t *iface) {
++ dessert_msg_t* msg;
++ int res;
++
++ /* check message - we only send valid messages! */
++ if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
++ dessert_warn("will not send invalid message - aborting");
++ return EINVAL;
++ }
++
++ /* clone message */
++ dessert_msg_clone(&msg, msgin, 1);
++ res = dessert_meshsend_fast_allbutone(msg, iface);
++ dessert_msg_destroy(msg);
++
++ return res;
++
++}
++
++/** Sends a \b dessert \b message via the interface which is identified by the given hardware address.
++ *
++ * The original message buffer will not be altered, and the ethernet src address
++ * will be set correctly.
++ *
++ * @param[in] *msgin message to send
++ * @param[in] *hwaddr hardware address of the interface to send from
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_hwaddr(const dessert_msg_t* msgin,
++ const uint8_t hwaddr[ETHER_ADDR_LEN]) {
++ dessert_msg_t* msg;
++ int res;
++
++ /* check message - we only send valid messages! */
++ if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
++ dessert_warn("will not send invalid message - aborting");
++ return EINVAL;
++ }
++
++ /* clone message */
++ dessert_msg_clone(&msg, msgin, 1);
++ res = dessert_meshsend_fast_hwaddr(msg, hwaddr);
++ dessert_msg_destroy(msg);
++
++ return res;
++}
++
++/** Sends a \b dessert \b message via all interfaces in a randomized fashion.
++ *
++ * The original message buffer will not be altered, and the ethernet src address
++ * will be set correctly.
++ *
++ * @param[in] *msgin message to send
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_randomized(const dessert_msg_t* msgin) {
++ dessert_msg_t* msg;
++ int res;
++
++ /* check message - we only send valid messages! */
++ if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
++ dessert_warn("will not send invalid message - aborting");
++ return EINVAL;
++ }
++
++ /* clone message */
++ dessert_msg_clone(&msg, msgin, 1);
++ res = dessert_meshsend_fast_randomized(msg);
++ dessert_msg_destroy(msg);
++
++ return res;
++}
++
++/** Sends a \b dessert \b message fast via the specified interface or all interfaces.
++ *
++ * This method is faster than dessert_meshsend(), but does not check the message
++ * and may alter the message buffer.
++ *
++ * @param[in] *msg message to send
++ * @param[in] *iface interface to send from
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_fast(dessert_msg_t* msg, const dessert_meshif_t *iface) {
++ int res = 0;
++
++ /* we have no iface - send on all! */
++ if (iface == NULL) {
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, iface) {
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, iface);
++ if (res) {
++ break;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ } else {
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, iface);
++ }
++
++ return (res);
++
++}
++
++/** Sends a \b dessert \b message fast via all interfaces, except the specified interface.
++ *
++ * This method is faster than dessert_meshsend_allbutone(), but does not check the message
++ * and may alter the message buffer.
++ *
++ * @param[in] *msg message to send
++ * @param[in] *iface interface to NOT send from - use NULL for all interfaces
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_fast_allbutone(dessert_msg_t* msg,
++ const dessert_meshif_t *iface) {
++ dessert_meshif_t *curr_iface;
++ int res = 0;
++
++ /* we have no iface - send on all! */
++ if (iface == NULL) {
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, curr_iface) {
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, iface);
++ if (res) {
++ break;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ } else {
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, curr_iface) {
++
++ /* skip if it is the 'allbutone' interface */
++ if (curr_iface == iface)
++ curr_iface = curr_iface->next;
++
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, iface);
++ if (res) {
++ break;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ }
++
++ return (res);
++
++}
++
++/** Sends a \b dessert \b message fast via the interface specified by the given
++ * hardware address.
++ *
++ * This method is faster than dessert_meshsend_hwaddr(), but does not check the message
++ * and may alter the message buffer.
++ *
++ * @param[in] *msg message to send
++ * @param[in] *hwaddr hardware address of the interface to send from
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg,
++ const uint8_t hwaddr[ETHER_ADDR_LEN]) {
++ int res;
++ dessert_meshif_t *meshif;
++
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, meshif) {
++ if (memcmp(meshif->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
++ break;
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ if (likely(meshif != NULL)) {
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, meshif->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, meshif);
++ } else {
++ dessert_err("No such interface - aborting");
++ return ENODEV;
++ }
++
++ return (res);
++}
++
++/** Sends a \b dessert \b message fast via all interfaces in a randomized fashion.
++ *
++ * This method is faster than dessert_meshsend_randomized(), but does not check
++ * the message and may alter the message buffer.
++ *
++ * @param[in] *msgin message to send
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_fast_randomized(dessert_msg_t* msgin) {
++ int i;
++ int res = 0;
++
++ pthread_mutex_lock(&_dessert_meshiflist_mutex);
++ for (i = 0; i < _dessert_meshiflist_len; i++) {
++ res = dessert_meshsend_fast(msgin, _dessert_meshiflist_perms[_dessert_meshiflist_current_perm][i]);
++ if (res) {
++ break;
++ }
++ }
++ _dessert_meshiflist_current_perm = (_dessert_meshiflist_current_perm+1) % _dessert_meshiflist_perm_count;
++ pthread_mutex_unlock(&_dessert_meshiflist_mutex);
++
++ return res;
++}
++
++/** Sends a @b dessert @b message @a msg via the specified interface @a iface or
++ * all interfaces.
++ *
++ * This method is faster than dessert_meshsend(), but does not check the message
++ * and may alter the message buffer. In contrast to dessert_meshsend_fast() it
++ * does not write the ether_shost address.
++ *
++ * @param[in] *msg message to send
++ * @param[in] *iface interface to send from
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_raw(dessert_msg_t* msg, const dessert_meshif_t *iface) {
++ int res = 0;
++
++ if (iface == NULL) {
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, iface) {
++ res = _dessert_meshsend_if2(msg, iface);
++ if (res) {
++ break;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ } else {
++ res = _dessert_meshsend_if2(msg, iface);
++ }
++
++ return (res);
++
++}
++
++/******************************************************************************
++ * meshrx-callback handling
++ ******************************************************************************/
++
++/** Removes all occurrences of the given callback function @a c from the meshrx
++ * pipeline.
++ *
++ * @param[in] c callback function pointer
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR otherwise
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshrxcb_del(dessert_meshrxcb_t* c) {
++ int count = 0;
++ dessert_meshrxcbe_t *i, *last;
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ if (_dessert_meshrxcblist == NULL) {
++ count++;
++ goto dessert_meshrxcb_del_out;
++ }
++
++ while (_dessert_meshrxcblist->c == c) {
++ count++;
++ i = _dessert_meshrxcblist;
++ _dessert_meshrxcblist = _dessert_meshrxcblist->next;
++ free(i);
++ if (_dessert_meshrxcblist == NULL) {
++ goto dessert_meshrxcb_del_out;
++ }
++ }
++
++ for (i = _dessert_meshrxcblist; i->next != NULL; i = i->next) {
++ if (i->c == c) {
++ count++;
++ last->next = i->next;
++ free(i);
++ i = last;
++ }
++ last = i;
++ }
++
++ dessert_meshrxcb_del_out: _dessert_meshrxcblistver++;
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return ((count > 0) ? DESSERT_OK : DESSERT_ERR);
++
++}
++
++/** Adds a callback function to the meshrx pipeline.
++ *
++ * The callback going to get called if a packet is received via a dessert interface.
++ *
++ * @param[in] c callback function
++ * @param[in] prio priority of the function - lower first!
++ *
++ * @retval DESSERT_OK on success
++ * @retval -errno on error
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio) {
++ dessert_meshrxcbe_t *cb, *i;
++
++ cb = (dessert_meshrxcbe_t *) malloc(sizeof(dessert_meshrxcbe_t));
++ if (cb == NULL)
++ return (-errno);
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ cb->c = c;
++ cb->prio = prio;
++ cb->next = NULL;
++
++ if (_dessert_meshrxcblist == NULL) {
++ _dessert_meshrxcblist = cb;
++ _dessert_meshrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++ }
++
++ if (_dessert_meshrxcblist->prio > cb->prio) {
++ cb->next = _dessert_meshrxcblist;
++ _dessert_meshrxcblist = cb;
++ _dessert_meshrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++ }
++
++ /* find right place for callback */
++ for (i = _dessert_meshrxcblist; i->next != NULL && i->next->prio
++ <= cb->prio; i = i->next)
++ ;
++
++ /* insert it */
++ cb->next = i->next;
++ i->next = cb;
++ _dessert_meshrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ * mesh interface handling
++ ******************************************************************************/
++
++/** Returns the head of the list of mesh interfaces (_desert_meshiflist).
++ *
++ * @retval pointer if list is not empty
++ * @retval NULL otherwise
++ *
++ * %DESCRIPTION:
++ *
++ */
++dessert_meshif_t* dessert_meshiflist_get() {
++ return _dessert_meshiflist;
++}
++
++/** Looks for mesh interface with name @a dev in the list of mesh interfaces and
++ * returns a pointer to it.
++ *
++ * @param[in] *dev interface name
++ *
++ * @retval pointer if the interface is found
++ * @retval NULL otherwise
++ *
++ * %DESCRIPTION:
++ *
++ **/
++dessert_meshif_t* dessert_meshif_get_name(const char* dev) {
++ dessert_meshif_t *meshif = NULL;
++
++ /* search dev name in iflist */
++ //meshif = _dessert_meshiflist;
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, meshif) {
++ if (strncmp(meshif->if_name, dev, IF_NAMESIZE) == 0)
++ break;
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return (meshif);
++}
++
++/** Looks for mesh interface with hardware address @a hwaddr in the list of mesh
++ * interfaces and returns a pointer to it.
++ *
++ * @param[in] *hwaddr interface hardware address
++ *
++ * @retval pointer if the interface is found
++ * @retval NULL otherwise
++ *
++ * %DESCRIPTION:
++ *
++ */
++dessert_meshif_t* dessert_meshif_get_hwaddr(const uint8_t hwaddr[ETHER_ADDR_LEN]) {
++ dessert_meshif_t *meshif = NULL;
++
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, meshif) {
++ if (memcmp(meshif->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
++ break;
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return meshif;
++}
++
++/** Removes the corresponding dessert_meshif struct from _dessert_meshiflist and does some cleanup.
++ *
++ * @param[in] dev interface name to remove from list
++ *
++ * @retval DESSERT_OK on success
++ * @retval -errno on error
++ *
++ * %DESCRIPTION:
++ *
++ */
++int dessert_meshif_del(const char* dev) {
++ dessert_meshif_t *meshif;
++ // dessert_meshif_t *meshif_prev; TODO MESHIF_HASH
++
++ /* lock the list */
++ pthread_rwlock_wrlock(&dessert_cfglock);
++ /* search dev name in iflist */
++ DL_FOREACH(_dessert_meshiflist, meshif) {
++ if (strncmp(meshif->if_name, dev, IF_NAMESIZE) == 0)
++ break;
++ }
++
++ if (meshif == NULL) {
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return (ENODEV);
++ }
++
++ /* remove it from list */
++ DL_DELETE(_dessert_meshiflist, meshif);
++ _dessert_meshiflist_update_permutations();
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* tell pcap not to further process packets */
++ pcap_breakloop(meshif->pcap);
++
++ /* the remaining cleanup is done in the interface thread *
++ * using _dessert_meshif_cleanup */
++
++ return DESSERT_OK;
++
++}
++
++/** Initializes given mesh interface, starts up the packet processor thread.
++
++ * @param[in] *dev interface name
++ * @param[in] flags @todo Document the flags parameter.
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR on error
++ *
++ *
++ *
++ * %DESCRIPTION:
++ *
++ */
++int dessert_meshif_add(const char* dev, uint8_t flags) {
++ dessert_meshif_t *meshif;
++
++ uint8_t promisc = (flags & DESSERT_IF_NOPROMISC) ? 0 : 1;
++ struct bpf_program fp; /* filter program for libpcap */
++ char fe[64]; /* filter expression for libpcap */
++
++ snprintf(fe, 64, "ether proto 0x%04x", DESSERT_ETHPROTO);
++
++ /* init new interface entry */
++ meshif = (dessert_meshif_t*) malloc(sizeof(dessert_meshif_t));
++ if (meshif == NULL)
++ return (-errno);
++ memset((void *) meshif, 0, sizeof(dessert_meshif_t));
++ strncpy(meshif->if_name, dev, IF_NAMESIZE);
++ meshif->if_name[IF_NAMESIZE - 1] = '\0';
++ meshif->if_index = if_nametoindex(dev);
++ pthread_mutex_init(&(meshif->cnt_mutex), NULL);
++
++ /* check if interface exists */
++ if (!meshif->if_index) {
++ dessert_err("interface %s - no such interface", meshif->if_name);
++ goto dessert_meshif_add_err;
++ }
++
++ /* initialize libpcap */
++ meshif->pcap = pcap_open_live(meshif->if_name, DESSERT_MAXFRAMELEN,
++ promisc, 10, meshif->pcap_err);
++ if (meshif->pcap == NULL) {
++ dessert_err("pcap_open_live failed for interface %s(%d):\n%s",
++ meshif->if_name, meshif->if_index, meshif->pcap_err);
++ goto dessert_meshif_add_err;
++ }
++ if (pcap_datalink(meshif->pcap) != DLT_EN10MB) {
++ dessert_err("interface %s(%d) is not an ethernet interface!",
++ meshif->if_name, meshif->if_index);
++ goto dessert_meshif_add_err;
++ }
++
++ /* pcap filter */
++ if (!(flags & DESSERT_IF_NOFILTER)) {
++ if (pcap_compile(meshif->pcap, &fp, fe, 0, 0) == -1) {
++ dessert_err("couldn't parse filter %s: %s\n", fe, pcap_geterr(meshif->pcap));
++ goto dessert_meshif_add_err;
++ }
++ if (pcap_setfilter(meshif->pcap, &fp) == -1) {
++ dessert_err("couldn't install filter %s: %s\n", fe, pcap_geterr(meshif->pcap));
++ goto dessert_meshif_add_err;
++ }
++ /* else { TODO: pcap_freecode() } */
++ }
++
++ /* get hardware address */
++ if (_dessert_meshif_gethwaddr(meshif) != 0) {
++ dessert_err("failed to get hwaddr of interface %s(%d)",
++ meshif->if_name, meshif->if_index);
++ goto dessert_meshif_add_err;
++ }
++
++ /* check whether we need to set defsrc (default source) */
++ if (memcmp(dessert_l25_defsrc, ether_null, ETHER_ADDR_LEN) == 0) {
++ memcpy(dessert_l25_defsrc, meshif->hwaddr, ETHER_ADDR_LEN);
++ dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
++ dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
++ }
++
++ dessert_info("starting worker thread for interface %s(%d) hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ meshif->if_name, meshif->if_index,
++ meshif->hwaddr[0], meshif->hwaddr[1], meshif->hwaddr[2],
++ meshif->hwaddr[3], meshif->hwaddr[4], meshif->hwaddr[5]);
++
++ /* start worker thread */
++ if (pthread_create(&(meshif->worker), NULL, _dessert_meshif_add_thread,
++ (void *) meshif)) {
++ dessert_err("creating worker thread failed for interface %s(%d)",
++ meshif->if_name, meshif->if_index);
++ goto dessert_meshif_add_err;
++ }
++
++ /* prepend to interface list */
++ pthread_rwlock_wrlock(&dessert_cfglock);
++ DL_PREPEND(_dessert_meshiflist, meshif);
++ _dessert_meshiflist_update_permutations();
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return (DESSERT_OK);
++
++ dessert_meshif_add_err:
++
++ if (meshif->pcap != NULL) {
++ pcap_close(meshif->pcap);
++ }
++ free(meshif);
++ return (DESSERT_ERR);
++}
++
++/*****************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * M E S H - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** Run all registered callbacks.
++ *
++ * @internal
++ *
++ * @return the return status of the last callback called
++ *
++ * @warning Use with care - never register as callback!
++ *
++ * %DESCRIPTION:
++ *
++ */
++int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len,
++ dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif,
++ dessert_frameid_t id) {
++ dessert_msg_t *msg = msg_in;
++ dessert_msg_proc_t *proc = proc_in;
++ dessert_meshrxcbe_t *cb;
++ int res = 0;
++ dessert_meshrxcb_t **cbl = NULL;
++ int cbllen = 0;
++ int cblcur = -1;
++
++ /* copy callbacks to internal list to release dessert_cfglock before invoking callbacks*/
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ cbllen = 0;
++ for (cb = _dessert_meshrxcblist; cb != NULL; cb = cb->next)
++ cbllen++;
++ cbl = malloc(cbllen * sizeof(dessert_meshrxcb_t *));
++ if (cbl == NULL) {
++ dessert_err("failed to allocate memory for internal callback list");
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_MSG_DROP;
++ }
++
++ cblcur = 0;
++ for (cb = _dessert_meshrxcblist; cb != NULL; cb = cb->next)
++ cbl[cblcur++] = cb->c;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* call the interested */
++ res = 0;
++ cblcur = 0;
++ while (res > DESSERT_MSG_DROP && cblcur < cbllen) {
++
++ _dessert_packet_process_cbagain: res = cbl[cblcur](msg, len, proc,
++ meshif, id);
++
++ if (res == DESSERT_MSG_NEEDNOSPARSE && msg == msg_in) {
++ dessert_msg_clone(&msg, msg_in, 0);
++ len = DESSERT_MAXFRAMEBUFLEN;
++ goto _dessert_packet_process_cbagain;
++ } else if (res == DESSERT_MSG_NEEDNOSPARSE && msg != msg_in) {
++ dessert_warn("bogus DESSERT_MSG_NEEDNOSPARSE returned from callback!");
++ }
++
++ if (res == DESSERT_MSG_NEEDMSGPROC && proc == NULL) {
++ proc = malloc(DESSERT_MSGPROCLEN);
++ memset(proc, 0, DESSERT_MSGPROCLEN);
++ goto _dessert_packet_process_cbagain;
++ } else if (res == DESSERT_MSG_NEEDMSGPROC && proc != NULL) {
++ dessert_warn("bogus DESSERT_MSG_NEEDMSGPROC returned from callback!");
++ }
++
++ cblcur++;
++ }
++
++ free(cbl);
++
++ if (msg != msg_in)
++ dessert_msg_destroy(msg);
++
++ if (proc != proc_in)
++ free(proc);
++
++ return (res);
++}
++
++/** Get the hardware address of the ethernet device behind meshif.
++ *
++ * @internal
++ *
++ * @param *meshif pointer to dessert_meshif_t to query
++ *
++ * @retval DESSERT_OK on success
++ *
++ * \warning This is a platform depended function!
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif)
++#ifdef __DARWIN__
++{
++ /* the Apple way... */
++
++ int mib[6];
++ size_t len;
++ uint8_t *buf, *next;
++ struct if_msghdr *ifm;
++ struct sockaddr_dl *sdl;
++ int ret = DESSERT_ERR;
++
++ mib[0] = CTL_NET;
++ mib[1] = AF_ROUTE;
++ mib[2] = 0;
++ mib[3] = AF_LINK;
++ mib[4] = NET_RT_IFLIST;
++ mib[5] = 0;
++
++ if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
++ dessert_err("Acquiring hwaddr failed: sysctl 1 error");
++ return(DESSERT_ERR);
++ }
++
++ if ((buf = malloc(len)) == NULL) {
++ dessert_err("acquiring hwaddr failed: malloc error");
++ return(DESSERT_ERR);
++ }
++
++ if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
++ dessert_err("acquiring hwaddr failed: sysctl 2 error");
++ return(DESSERT_ERR);
++ }
++
++ for (next = buf; next < buf+len; next += ifm->ifm_msglen) {
++ ifm = (struct if_msghdr *)next;
++ if (ifm->ifm_type == RTM_IFINFO) {
++ sdl = (struct sockaddr_dl *)(ifm + 1);
++ if (strncmp(&sdl->sdl_data[0], meshif->if_name, sdl->sdl_len) == 0) {
++ memcpy(meshif->hwaddr, LLADDR(sdl), ETHER_ADDR_LEN);
++ ret = DESSERT_OK;
++ break;
++ }
++ }
++ }
++
++ free(buf);
++ return ret;
++}
++#elif __FreeBSD__
++{
++ struct ifaddrs *ifaphead;
++ struct ifaddrs *ifap;
++ struct sockaddr_dl *sdl = NULL;
++
++ if (getifaddrs(&ifaphead) != 0)
++ {
++ dessert_err("getifaddrs() failed");
++ return(DESSERT_ERR);
++ }
++
++ for (ifap = ifaphead; ifap; ifap = ifap->ifa_next)
++ {
++ if ((ifap->ifa_addr->sa_family == AF_LINK))
++ {
++ if (strcmp(ifap->ifa_name,meshif->if_name) == 0)
++ {
++ sdl = (struct sockaddr_dl *)ifap->ifa_addr;
++ if (sdl)
++ {
++ memcpy(meshif->hwaddr, LLADDR(sdl), ETHER_ADDR_LEN);
++ return(DESSERT_OK);
++ }
++ }
++ }
++ }
++ return(DESSERT_ERR);
++}
++#elif __linux__
++{
++ /* the linux and solaris way */
++ int sockfd;
++ struct ifreq ifr;
++
++ /* we need some socket to do that */
++ sockfd = socket(AF_INET, SOCK_STREAM, 0);
++
++ /* set interface options and get hardware address */
++ strncpy(ifr.ifr_name, meshif->if_name, sizeof(ifr.ifr_name));
++
++#ifdef SIOCGIFHWADDR
++ if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) >= 0) {
++ memcpy(meshif->hwaddr, &ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN);
++ /* } */
++#elif defined SIOCGENADDR
++ if ( ioctl(sd, SIOCGENADDR, &ifr_work) >= 0 ) {
++ memcpy( meshif->hwaddr, &ifr.ifr_enaddr, ETHER_ADDR_LEN );
++ /* } */
++#else
++ if (false) {
++#endif
++ close(sockfd);
++ return (DESSERT_OK);
++ } else {
++ dessert_err("acquiring hwaddr failed");
++ close(sockfd);
++ return (DESSERT_ERR);
++ }
++}
++#else
++{
++ dessert_err("acquiring hwaddr failed - platform not supported");
++ return(DESSERT_ERR);
++}
++#endif
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * M E S H - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** Function to send packet via a single interface.
++ *
++ * @internal
++ *
++ * @param[in] *msg the message to send
++ * @param[in] *iface the interface the message should be send via
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if *iface is NULL
++ * @retval EIO if there was a problem sending the message
++ *
++ * %DESCRIPTION:
++ *
++ */
++static inline int _dessert_meshsend_if2(dessert_msg_t* msg,
++ dessert_meshif_t *iface) {
++ int res;
++ uint8_t oldflags;
++ size_t msglen = ntohs(msg->hlen) + ntohs(msg->plen);
++
++ /* check for null meshInterface */
++ if (iface == NULL) {
++ dessert_err("NULL-pointer given as interface - programming error!");
++ return EINVAL;
++ }
++
++ /* send packet - temporally setting DESSERT_FLAG_SPARSE */
++ oldflags = msg->flags;
++ msg->flags &= ~DESSERT_FLAG_SPARSE;
++ res = pcap_inject(iface->pcap, (u_char *) msg, msglen);
++ msg->flags = oldflags;
++
++ if (res != msglen) {
++ if (res == -1) {
++ dessert_warn("couldn't send message: %s\n", pcap_geterr(iface->pcap));
++ } else {
++ dessert_warn("couldn't send message: sent only %d of %d bytes\n",
++ res, msglen);
++ }
++ return (EIO);
++ }
++
++ pthread_mutex_lock(&(iface->cnt_mutex));
++ iface->opkts++;
++ iface->obytes += res;
++ pthread_mutex_unlock(&(iface->cnt_mutex));
++
++ return (DESSERT_OK);
++
++}
++
++/** Callback doing the main work for packets received through a dessert interface.
++ *
++ * @internal
++ *
++ * @param arg - meshif-pointer carried by libpcap in something else
++ * @param header - pointer to the header by libpcap
++ * @param packet - pointer to the packet by libpcap
++ *
++ * %DESCRIPTION:
++ *
++ */
++static void _dessert_packet_process(u_char *args,
++ const struct pcap_pkthdr *header, const u_char *packet) {
++ dessert_meshif_t *meshif = (dessert_meshif_t *) args;
++ dessert_msg_t *msg = (dessert_msg_t *) packet;
++ size_t len = header->caplen;
++ dessert_frameid_t id;
++ dessert_msg_proc_t proc;
++
++ /* is it something I understand? */
++ if (ntohs(msg->l2h.ether_type) != DESSERT_ETHPROTO) {
++ dessert_debug("got packet with ethertype %04x - discarding", ntohs(msg->l2h.ether_type));
++ return;
++ }
++
++ /* check message */
++ if (header->caplen < header->len) {
++ dessert_warn("packet too short - check pcap_open_live() parameters");
++ return;
++ }
++ if (header->caplen < DESSERT_MSGLEN) {
++ dessert_notice("packet too short - shorter than DESSERT_MSGLEN");
++ return;
++ }
++
++ /* generate frame id */
++ id = _dessert_newframeid();
++ memset(&proc, 0, DESSERT_MSGPROCLEN);
++
++ /* count packet */
++ pthread_mutex_lock(&(meshif->cnt_mutex));
++ meshif->ipkts++;
++ meshif->ibytes += header->caplen;
++ pthread_mutex_unlock(&(meshif->cnt_mutex));
++
++ _dessert_meshrxcb_runall(msg, len, &proc, meshif, id);
++
++}
++
++/** Internal routine called before interface thread finishes.
++ *
++ * @internal
++ *
++ * @param *meshif the interface to be cleaned up
++ *
++ * %DESCRIPTION:
++ *
++ */
++static void _dessert_meshif_cleanup(dessert_meshif_t *meshif) {
++ pcap_close(meshif->pcap);
++ free(meshif);
++}
++
++/** Internal thread function running the capture loop.
++ *
++ * @internal
++ *
++ * @param *arg a void pointer representing a dessert_meshif_t interface
++ *
++ * %DESCRIPTION:
++ */
++static void *_dessert_meshif_add_thread(void* arg) {
++
++ dessert_meshif_t *meshif = (dessert_meshif_t *) arg;
++
++ pcap_loop(meshif->pcap, -1, _dessert_packet_process, (u_char *) meshif);
++
++ _dessert_meshif_cleanup(meshif);
++
++ return (NULL);
++
++}
++
++/** Internal function to update the lookup table of permutations of the current _dessert_meshiflist.
++ *
++ * @internal
++ *
++ * %DESCRIPTION: \n
++ */
++static void _dessert_meshiflist_update_permutations() {
++ int i, r;
++
++ pthread_mutex_lock(&_dessert_meshiflist_mutex);
++ _dessert_meshiflist_len = DL_LENGTH(_dessert_meshiflist);
++
++ dessert_meshif_t **a = calloc(sizeof(a) * _dessert_meshiflist_len, 1);
++ list2array(_dessert_meshiflist, a, _dessert_meshiflist_len);
++
++ _dessert_meshiflist_perm_count = fact(_dessert_meshiflist_len);
++
++ if (_dessert_meshiflist_perms != NULL) {
++ free(_dessert_meshiflist_perms);
++ }
++ _dessert_meshiflist_perms = calloc(sizeof(dessert_meshif_t **) * _dessert_meshiflist_perm_count + sizeof(dessert_meshif_t *) * _dessert_meshiflist_perm_count * _dessert_meshiflist_len, 1);
++ for (i = 0; i < _dessert_meshiflist_perm_count; ++i) {
++ _dessert_meshiflist_perms[i]
++ = (dessert_meshif_t **) (((char *) _dessert_meshiflist_perms)
++ + sizeof(dessert_meshif_t **)
++ * _dessert_meshiflist_perm_count + i
++ * _dessert_meshiflist_len * sizeof(dessert_meshif_t *));
++ }
++
++ for (r = 0; r < _dessert_meshiflist_perm_count; r++) {
++ memcpy(_dessert_meshiflist_perms[r], a, sizeof(dessert_meshif_t *)
++ * _dessert_meshiflist_len);
++ }
++ free(a);
++
++ for(r = 0; r < _dessert_meshiflist_perm_count; r++){
++ permutation(r, _dessert_meshiflist_len, _dessert_meshiflist_perms[r]);
++ }
++
++ pthread_mutex_unlock(&_dessert_meshiflist_mutex);
++}
++
++/** Internal function to get the length of a double-linked utlist.
++ *
++ * @internal
++ *
++ * @param[in] *l a pointer to the list head
++ *
++ * @return the number of elements in the list
++ *
++ * %DESCRIPTION: \n
++ */
++static inline int DL_LENGTH(dessert_meshif_t *l) {
++ int len = 0;
++ dessert_meshif_t *temp;
++ DL_FOREACH(l, temp)
++ len++;
++ return len;
++}
++
++/** Internal function to copy the element pointers of the _dessert_meshiflist to an array.
++ *
++ * @internal
++ *
++ * @param[in] *l a pointer to the list head
++ * @param[out] **a a pointer to an array of dessert_meshif_t
++ *
++ * %DESCRIPTION: \n
++ */
++static inline void list2array(dessert_meshif_t *l, dessert_meshif_t **a,
++ int len) {
++ dessert_meshif_t *t;
++ int i = 0;
++ DL_FOREACH(l, t) {
++ a[i++] = t;
++ if (--len == 0)
++ break;
++ }
++}
++
++/** Internal function to compute the factorial of a given number.
++ *
++ * @internal
++ *
++ * @param[in] i the number
++ *
++ * @return the factorial
++ *
++ * %DESCRIPTION: \n
++ */
++static inline int fact(int i){
++ int fact = 1;
++ while (i > 0) fact *= i--;
++ return fact;
++}
++
++/** Internal function to produce a permutation of @a a.
++ *
++ * @internal
++ *
++ * @param[in] k the permutation to generate
++ * @param[in] len the number of elements in the array
++ * @param[out] the array to permute
++ *
++ * @note Algorithm adopted from the Wikipedia article on
++ * <a href="http://en.wikipedia.org/wiki/Permutation">Permutations</a>.
++ *
++ * %DESCRIPTION: \n
++ */
++static inline void permutation(int k, int len, dessert_meshif_t **a) {
++ dessert_meshif_t *temp;
++ int j;
++
++ for(j = 2 ; j <= len; j++ ) {
++ temp = a[(k%j)];
++ a[(k%j)] = a[j-1];
++ a[j-1] = temp;
++ k = k / j;
++ }
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_msg.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_msg.c 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,876 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++/* global data storage // P U B L I C */
++
++/* global data storage // P R I V A T E */
++
++/* local data storage*/
++
++/* internal functions forward declarations*/
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * M E S S A G E H A N D L I N G
++ *
++ ******************************************************************************/
++
++/** creates a new dessert_msg_t and initializes it.
++ * @arg **msgout (out) pointer to return message address
++ * @return 0 on success, -errno on error
++ **/
++int dessert_msg_new(dessert_msg_t **msgout) {
++ dessert_msg_t *msg;
++
++ msg = malloc(DESSERT_MAXFRAMEBUFLEN);
++
++ if (msg == NULL) {
++ dessert_err("failed to allocate buffer for new message!");
++ return (-ENOMEM);
++ }
++
++ memset(msg, 0, DESSERT_MAXFRAMEBUFLEN);
++ msg->l2h.ether_type = htons(DESSERT_ETHPROTO);
++ memset(msg->l2h.ether_dhost, 255, ETHER_ADDR_LEN);
++ memcpy(msg->proto, dessert_proto, DESSERT_PROTO_STRLEN);
++ msg->ver = dessert_ver;
++ msg->ttl = 0xff;
++ msg->u8 = 0x00;
++ msg->u16 = htons(0xbeef);
++ msg->hlen = htons(sizeof(dessert_msg_t));
++ msg->plen = htons(0);
++
++ *msgout = msg;
++ return (DESSERT_OK);
++
++}
++
++/** generates a copy of a dessert_msg
++ * @arg **msgnew (out) pointer to return message address
++ * @arg *msgold pointer to the message to clone
++ * @arg sparse whether to allocate DESSERT_MAXFRAMELEN or only hlen+plen
++ * @return DESSERT_OK on success, -errno otherwise
++ **/
++int dessert_msg_clone(dessert_msg_t **msgnew, const dessert_msg_t *msgold,
++ uint8_t sparse) {
++ dessert_msg_t *msg;
++ size_t msglen = ntohs(msgold->hlen) + ntohs(msgold->plen);
++
++ if (sparse) {
++ msg = malloc(msglen);
++ } else {
++ msg = malloc(DESSERT_MAXFRAMEBUFLEN);
++ }
++
++ if (msg == NULL) {
++ return (-errno);
++ }
++
++ memcpy(msg, msgold, msglen);
++
++ if (sparse) {
++ msg->flags |= DESSERT_FLAG_SPARSE;
++ } else {
++ msg->flags &= DESSERT_FLAG_SPARSE ^ DESSERT_FLAG_SPARSE;
++ }
++
++ *msgnew = msg;
++ return (DESSERT_OK);
++
++}
++
++/** checks whether a dessert_msg is consistent
++ * @arg msg the message to be checked
++ * @arg len the length of the buffer
++ * @return DESSERT_OK on success
++ * @return -1 of the message is too large for the buffer
++ * @return -2 if the message was not intended to this daemon
++ * @return -3 if some extension is not consistent
++ * %DESCRIPTION:
++ ***********************************************************************/
++int dessert_msg_check(const dessert_msg_t* msg, size_t len) {
++ dessert_ext_t *ext;
++
++ /* is the message large enough to at least carry the header */
++ if (len < DESSERT_MSGLEN) {
++ dessert_info("message too short - shorter than DESSERT_MSGLEN");
++ return (-1);
++ }
++ if (ntohs(msg->hlen) + ntohs(msg->plen) > len) {
++ dessert_info("message too short - shorter than header + payload");
++ return (-1);
++ }
++
++ /* right protocol and version */
++ if (msg->proto[0] != dessert_proto[0] || msg->proto[1] != dessert_proto[1]
++ || msg->proto[2] != dessert_proto[2] || msg->proto[3]
++ != dessert_proto[3]) {
++ dessert_info("wrong dessert protocol");
++ return (-2);
++ }
++ if (msg->ver != dessert_ver) {
++ dessert_info("wrong dessert protocol version");
++ return (-2);
++ }
++
++ /* now check extensions.... */
++ ext = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
++ while ((uint8_t *) ext < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
++ /* does current extension fit into the header? */
++ if (((uint8_t *) ext + (size_t) ext->len) > ((uint8_t *) msg
++ + (size_t) ntohs(msg->hlen))) {
++ dessert_info("extension %x too long", ext->type);
++ return (-3);
++ }
++ if (ext->len < 2) {
++ dessert_info("extension %x too short", ext->type);
++ return (-3);
++ }
++
++ ext = (dessert_ext_t *) ((uint8_t *) ext + (size_t) ext->len);
++ }
++
++ /* message is valid */
++ return DESSERT_OK;
++}
++
++/** dump a dessert_msg_t to a string
++ * @arg *msg the message to be dumped
++ * @arg len the length of the buffer
++ * @arg *buf text output buffer
++ * @arg blen text output buffer length
++ **/
++void dessert_msg_dump(const dessert_msg_t* msg, size_t len, char *buf,
++ size_t blen) {
++ dessert_msg_proc_dump(msg, len, NULL, buf, blen);
++}
++
++/** free a dessert_msg
++ * @arg *msg message to free
++ **/
++void dessert_msg_destroy(dessert_msg_t* msg) {
++ free(msg);
++}
++
++/** creates a new dessert_msg from an ethernet frame.
++ * @arg *eth ethernet frame to encapsulate
++ * @arg len length of the ethernet frame
++ * @arg **msgout (out) pointer to return message address
++ * @return DESSERT_OK on success, -errno otherwise
++ **/
++int dessert_msg_ethencap(const struct ether_header* eth, size_t eth_len,
++ dessert_msg_t** msgout) {
++ int res;
++ dessert_ext_t *ext;
++ void *payload;
++
++ /* check len */
++ if (eth_len > DESSERT_MAXFRAMELEN - DESSERT_MSGLEN + ETHER_HDR_LEN) {
++ dessert_debug("failed to encapsulate ethernet frame of %d bytes (max=%d)",
++ eth_len, DESSERT_MAXFRAMELEN - DESSERT_MSGLEN + ETHER_HDR_LEN);
++ return (-EMSGSIZE);
++ }
++
++ /* create message */
++ res = dessert_msg_new(msgout);
++ if (res) {
++ return res;
++ }
++
++ /* add ether header */
++ res = dessert_msg_addext(*msgout, &ext, DESSERT_EXT_ETH, ETHER_HDR_LEN);
++ if (res) {
++ return res;
++ }
++ memcpy(ext->data, eth, ETHER_HDR_LEN);
++
++ /* copy message */
++ dessert_msg_addpayload(*msgout, &payload, (eth_len - ETHER_HDR_LEN));
++ memcpy(payload, ((uint8_t *) eth) + ETHER_HDR_LEN,
++ (eth_len - ETHER_HDR_LEN));
++
++ return (DESSERT_OK);
++}
++
++/** extracts an ethernet frame from a dessert_msg
++ * @arg *msg pointer to dessert_msg message to decapsulate
++ * @arg **ethout (out) pointer to return ethernet message
++ * @return eth_len on success, -1 otherwise
++ **/
++int dessert_msg_ethdecap(const dessert_msg_t* msg, struct ether_header** ethout) {
++ dessert_ext_t *ext;
++ int res;
++
++ /* create message */
++ size_t eth_len = ntohs(msg->plen) + ETHER_HDR_LEN;
++ *ethout = malloc(eth_len);
++ if (*ethout == NULL) {
++ return (-1);
++ }
++
++ /* copy header */
++ res = dessert_msg_getext(msg, &ext, DESSERT_EXT_ETH, 0);
++ if (res != 1) {
++ free(ethout);
++ return (-1);
++ }
++ memcpy(*ethout, ext->data, ETHER_HDR_LEN);
++
++ /* copy message */
++ memcpy(((uint8_t *) (*ethout)) + ETHER_HDR_LEN, (((uint8_t *) msg)
++ +ntohs(msg->hlen)), ntohs(msg->plen));
++
++ return (eth_len);
++}
++
++/** get the ether_header sent as DESSERT_EXT_ETH in a dessert_msg
++ * @arg *msg the message
++ * @return pointer to ether_header data, NULL if DESSERT_EXT_ETH not present
++ **/
++struct ether_header* dessert_msg_getl25ether(const dessert_msg_t* msg) {
++ dessert_ext_t *ext;
++ struct ether_header *l25h;
++ int res;
++
++ res = dessert_msg_getext(msg, &ext, DESSERT_EXT_ETH, 0);
++ if (res != 1) {
++ l25h = NULL;
++ } else {
++ l25h = (struct ether_header *) ext->data;
++ }
++
++ return l25h;
++}
++
++/** generates a copy of a dessert_msg_proc
++ * @arg **procnew (out) pointer to return message address
++ * @arg *procold pointer to the message to clone
++ * @return DESSERT_OK on success, -errno otherwise
++ **/
++int dessert_msg_proc_clone(dessert_msg_proc_t **procnew,
++ const dessert_msg_proc_t *procold) {
++ if (procold == NULL) {
++ *procnew = procold;
++ return (DESSERT_OK);
++ }
++
++ dessert_msg_proc_t *proc;
++
++ proc = malloc(DESSERT_MSGPROCLEN);
++
++ if (proc == NULL) {
++ return (-errno);
++ }
++
++ memcpy(proc, procold, DESSERT_MSGPROCLEN);
++
++ *procnew = proc;
++ return (DESSERT_OK);
++
++}
++
++/** dump a dessert_msg_t to a string
++ * @arg *msg the message to be dumped
++ * @arg len the length of the buffer
++ * @arg *proc the processing buffer
++ * @arg *buf text output buffer
++ * @arg blen text output buffer length
++ **/
++void dessert_msg_proc_dump(const dessert_msg_t* msg, size_t len,
++ const dessert_msg_proc_t *proc, char *buf, size_t blen) {
++ dessert_ext_t *ext;
++ int extidx = 0;
++ int i;
++ struct ether_header *l25h;
++
++#define _dessert_msg_check_append(...) snprintf(buf+strlen(buf), blen-strlen(buf), __VA_ARGS__)
++ memset((void *) buf, 0, blen);
++
++ _dessert_msg_check_append("\tl2_dhost: %02x:%02x:%02x:%02x:%02x:%02x\n",
++ msg->l2h.ether_dhost[0], msg->l2h.ether_dhost[1], msg->l2h.ether_dhost[2],
++ msg->l2h.ether_dhost[3], msg->l2h.ether_dhost[4], msg->l2h.ether_dhost[5]);
++ _dessert_msg_check_append("\tl2_shost: %02x:%02x:%02x:%02x:%02x:%02x\n",
++ msg->l2h.ether_shost[0], msg->l2h.ether_shost[1], msg->l2h.ether_shost[2],
++ msg->l2h.ether_shost[3], msg->l2h.ether_shost[4], msg->l2h.ether_shost[5]);
++ _dessert_msg_check_append("\tl2_type: %x\n\n", ntohs(msg->l2h.ether_type));
++
++ _dessert_msg_check_append("\tproto: ");
++ strncpy(buf + strlen(buf), msg->proto, DESSERT_PROTO_STRLEN);
++ _dessert_msg_check_append("\n\tver: %d\n", msg->ver);
++
++ _dessert_msg_check_append("\tflags: ");
++ if (msg->flags & DESSERT_FLAG_SPARSE)
++ _dessert_msg_check_append(" SPARSE");
++
++ _dessert_msg_check_append("\n\tttl: %x\n", (msg->ttl));
++ _dessert_msg_check_append("\tu8: %x\n", (msg->u8));
++ _dessert_msg_check_append("\tu16: %x\n", ntohs(msg->u16));
++ _dessert_msg_check_append("\thlen: %d\n", ntohs(msg->hlen));
++ _dessert_msg_check_append("\tplen: %d\n\n", ntohs(msg->plen));
++
++ /* get l2.5 header if possible */
++ if ((l25h = dessert_msg_getl25ether(msg)) != NULL) {
++ _dessert_msg_check_append("\tl25 proto: ethernet\n");
++
++ _dessert_msg_check_append("\tl25_dhost: %02x:%02x:%02x:%02x:%02x:%02x\n",
++ l25h->ether_dhost[0], l25h->ether_dhost[1], l25h->ether_dhost[2],
++ l25h->ether_dhost[3], l25h->ether_dhost[4], l25h->ether_dhost[5]);
++ _dessert_msg_check_append("\tl25_shost: %02x:%02x:%02x:%02x:%02x:%02x\n",
++ l25h->ether_shost[0], l25h->ether_shost[1], l25h->ether_shost[2],
++ l25h->ether_shost[3], l25h->ether_shost[4], l25h->ether_shost[5]);
++ _dessert_msg_check_append("\tl25_type: %x\n\n", ntohs(l25h->ether_type));
++
++ }
++
++ /* we have a trace */
++ if (dessert_msg_trace_dump(msg, buf, blen - strlen(buf)) > 1)
++ _dessert_msg_check_append("\n");
++
++ /* now other extensions.... */
++ ext = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
++ while ((uint8_t *) ext < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
++ _dessert_msg_check_append("\textension %d:\n", extidx);
++
++ /* does current extension fit into the header? */
++ if ((((uint8_t *) ext + (size_t) ext->len) > ((uint8_t *) msg
++ + (size_t) ntohs(msg->hlen))) || (ext->len < 2)) {
++ _dessert_msg_check_append("\t\tbroken extension - giving up!\n");
++ break;
++ }
++
++ _dessert_msg_check_append("\t\ttype: 0x%02x\n", ext->type);
++ _dessert_msg_check_append("\t\tlen: %d\n", ext->len);
++
++ if (ext->type != DESSERT_EXT_ETH && ext->type != DESSERT_EXT_TRACE) {
++ _dessert_msg_check_append("\t\tdata: ");
++ for (i = 0; i < dessert_ext_getdatalen(ext); i++) {
++ _dessert_msg_check_append("0x%x ", ext->data[i]);
++ if (i % 12 == 1 && i != 1)
++ _dessert_msg_check_append("\t\t ");
++ }
++ }
++ _dessert_msg_check_append("\n");
++
++ ext = (dessert_ext_t *) ((uint8_t *) ext + (size_t) ext->len);
++ extidx++;
++ }
++
++ if (proc != NULL) {
++ _dessert_msg_check_append("\tlocal processing header:\n");
++ _dessert_msg_check_append("\tlflags: ");
++
++ if (proc->lflags & DESSERT_LFLAG_SRC_SELF)
++ _dessert_msg_check_append(" DESSERT_FLAG_SRC_SELF");
++ if (proc->lflags & DESSERT_LFLAG_DST_SELF)
++ _dessert_msg_check_append(" DESSERT_FLAG_DST_MULTICAST");
++ if (proc->lflags & DESSERT_LFLAG_DST_MULTICAST)
++ _dessert_msg_check_append(" DESSERT_FLAG_DST_SELF");
++ if (proc->lflags & DESSERT_LFLAG_DST_BROADCAST)
++ _dessert_msg_check_append(" DESSERT_FLAG_DST_BROADCAST");
++ if (proc->lflags & DESSERT_LFLAG_PREVHOP_SELF)
++ _dessert_msg_check_append(" DESSERT_FLAG_PREVHOP_SELF");
++ if (proc->lflags & DESSERT_LFLAG_NEXTHOP_SELF)
++ _dessert_msg_check_append(" NEXTHOP_SELF");
++ if (proc->lflags & DESSERT_LFLAG_NEXTHOP_BROADCAST)
++ _dessert_msg_check_append(" NEXTHOP_BROADCAST");
++ }
++
++}
++
++/** free a dessert_prc_msg
++ * @arg *proc processing buffer to free
++ **/
++void dessert_msg_proc_destroy(dessert_msg_proc_t* proc) {
++ free(proc);
++}
++
++/** add or replace payload to a dessert_msg
++ * @arg *msg the message the payload should be added to
++ * @arg **payload (out) the pointer to place the payload
++ * @arg len the length of the payload
++ * @return DESSERT_OK on success, DESSERT_ERR otherwise
++ **/
++int dessert_msg_addpayload(dessert_msg_t* msg, void** payload, int len) {
++ /* check payload */
++ if (len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen)) {
++ return DESSERT_ERR; /* too big */
++ }
++
++ /* export payload pointer */
++ *payload = ((uint8_t *) msg + ntohs(msg->hlen));
++ msg->plen = htons(len);
++
++ return DESSERT_OK;
++}
++
++/** Retrieves a pointer to the payload of a dessert message @a msg.
++ *
++ * @param[in] *msg the message the payload should be retrieved from
++ * @param[out] **payload the pointer to place the payload in
++ *
++ * @return the length of the payload in bytes if any, 0 otherwise
++ */
++int dessert_msg_getpayload(dessert_msg_t *msg, void** payload) {
++
++ /* test if payload is present in msg */
++ if (msg->plen == 0) {
++ *payload = NULL;
++ return 0;
++ }
++
++ *payload = (uint8_t *) msg + ntohs(msg->hlen);
++
++ return msg->plen;
++}
++
++
++/** add an extension record to a dessert_msg
++ * @arg *msg the message the extension should be added to
++ * @arg **ext (out) the extension pointer to the reserved extension space
++ * @arg type the type of the extension
++ * @arg len the length of the ext data (without 2 byte extension header)
++ * @return DESSERT_OK on success,
++ **/
++int dessert_msg_addext(dessert_msg_t *msg, dessert_ext_t **ext, uint8_t type,
++ size_t len) {
++
++ /* check if sparse message */
++ if ((msg->flags & DESSERT_FLAG_SPARSE) > 0) {
++ dessert_debug("tried to add extension to a sparse message - use dessert_msg_clone() first!");
++ return -1;
++ }
++
++ /* add DESSERT_EXTLEN to len for convenience*/
++ len += DESSERT_EXTLEN;
++
++ /* check ext */
++ if (len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen) - ntohs(msg->plen)) {
++ dessert_debug("message would be too large after adding extension!");
++ return -2; /* too big */
++ } else if (len < DESSERT_EXTLEN) {
++ dessert_debug("extension too small!");
++ return -3; /* too small */
++ } else if (len > 255) {
++ dessert_debug("extension too big!");
++ return -2; /* too big */
++ }
++
++ /* move payload if necessary */
++ if (ntohs(msg->plen) > 0) {
++ memmove(((uint8_t *) msg + ntohs(msg->hlen) + len), ((uint8_t *) msg
++ + ntohs(msg->hlen)), ntohs(msg->plen));
++ }
++
++ /* get ext addr */
++ *ext = (dessert_ext_t *) ((uint8_t *) msg + ntohs(msg->hlen));
++
++ /* update msg hlen */
++ msg->hlen = htons(ntohs(msg->hlen) + len);
++
++ /* copy in extension data */
++ (*ext)->len = len;
++ (*ext)->type = type;
++
++ return DESSERT_OK;
++}
++
++/** remove an extension record from a dessert_msg
++ * @arg *msg the message the extension should be added to
++ * @arg *ext (out) the extension pointer to the extension to be removed
++ * @return DESSERT_OK on success,
++ **/
++int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext) {
++
++ /* check ext */
++ if ((((uint8_t *) ext) < ((uint8_t *) msg)) || (((uint8_t *) ext)
++ > (((uint8_t *) msg) + ntohs(msg->hlen)))) {
++ dessert_debug("extension not within packet header - won't remove");
++ return DESSERT_ERR;
++ }
++
++ msg->hlen = htons(ntohs(msg->hlen) - ext->len);
++
++ memmove(ext, ((uint8_t *) ext) + ext->len, (ntohs(msg->hlen)
++ + ntohs(msg->plen)) - (((uint8_t *) ext) - ((uint8_t *) msg)));
++
++ return DESSERT_OK;
++}
++
++/** Resizes a given extension record @a ext within in a @b dessert @b message
++ * @a msg to the new length @a new_len.
++ *
++ * @param[in] *msg the message
++ * @param[in] *ext the extension record
++ * @param[in] new_len the new length of the extension record
++ *
++ * @retval DESSERT_OK on success
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_msg_resizeext(dessert_msg_t *msg, dessert_ext_t *ext, size_t new_len) {
++
++ int old_len = ext->len;
++
++ /* check ext */
++ if (new_len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen) - ntohs(msg->plen) - old_len) {
++ dessert_debug("message would be too large after adding extension!");
++ return -2; /* too big */
++ } else if (new_len < DESSERT_EXTLEN) {
++ dessert_debug("extension too small!");
++ return -3; /* too small */
++ } else if (new_len > 255) {
++ dessert_debug("extension too big!");
++ return -2; /* too big */
++ }
++
++ memmove(((uint8_t *)ext) + new_len,((uint8_t *)ext) + ext->len, ntohs(msg->hlen)
++ + ntohs(msg->plen) - (((uint8_t *) ext) - ((uint8_t *) msg)) - ext->len);
++
++ msg->hlen = htons(ntohs(msg->hlen) - (ext->len - new_len));
++ ext->len = new_len;
++
++ return DESSERT_OK;
++}
++
++/** get an specific or all extensions
++ *
++ * @arg *msg the message
++ * @arg **ext (out) pointer to extracted extension
++ * sets *ext=NULL if extension not found
++ * may be NULL in this case only count/existence matters
++ * @arg type type of the ext to retrieve - use DESSERT_EXT_ANY to get any ext
++ * @arg index the index of the extension of that type, starting with 0
++ * @return 0 if the message has no such extension,
++ * @return count of extensions of that type if count > index
++ * @return -count of extensions of that type if count <= index
++ **/
++int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext,
++ uint8_t type, int index) {
++ int i = 0;
++ dessert_ext_t *exti;
++
++ if (ext != NULL)
++ *ext = NULL;
++
++ exti = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
++ while ((uint8_t *) exti < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
++ /* does current extension fit into the header? */
++ if (type == exti->type || type == DESSERT_EXT_ANY) {
++ if (i == index && ext != NULL) {
++ *ext = exti;
++ }
++ i++;
++ }
++ exti = (dessert_ext_t *) (((uint8_t *) exti) + (size_t) exti->len);
++ }
++
++ if (i <= index) {
++ i = -i;
++ }
++ return (i);
++
++}
++
++/** get an specific or all extensions
++ *
++ * @arg *msg the message
++ * @arg type type of the ext to retrieve - use DESSERT_EXT_ANY to get any ext
++ * @return 0 if the message has no such extension,
++ * @return count of extensions of that type
++ **/
++int dessert_msg_get_ext_count(const dessert_msg_t* msg, uint8_t type) {
++ return dessert_msg_getext(msg, NULL, type, 0);
++}
++
++/** add initial trace header to dessert message
++ * @arg *msg dessert_msg_t message used for tracing
++ * @arg mode trace mode
++ * use DESSERT_MSG_TRACE_HOST to only record default mac of hosts on the way
++ * use DESSERT_MSG_TRACE_IFACE to also trace input interface and last hop
++ * ®return DESSERT_OK on success
++ **/
++int dessert_msg_trace_initiate(dessert_msg_t* msg, int mode) {
++
++ dessert_ext_t *ext;
++ struct ether_header *l25h;
++
++ if (mode != DESSERT_MSG_TRACE_HOST && mode != DESSERT_MSG_TRACE_IFACE)
++ return EINVAL;
++
++ if (msg->flags & DESSERT_FLAG_SPARSE)
++ return DESSERT_MSG_NEEDNOSPARSE;
++
++ dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE, mode);
++ memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
++ if (mode == DESSERT_MSG_TRACE_IFACE) {
++ memcpy((ext->data) + ETHER_ADDR_LEN, msg->l2h.ether_shost,
++ ETHER_ADDR_LEN);
++ l25h = dessert_msg_getl25ether(msg);
++ if (l25h == NULL) {
++ memcpy((ext->data) + ETHER_ADDR_LEN, ether_null, ETHER_ADDR_LEN);
++ } else {
++ memcpy((ext->data) + ETHER_ADDR_LEN * 2, l25h->ether_shost,
++ ETHER_ADDR_LEN);
++ }
++ }
++
++ return DESSERT_OK;
++
++}
++
++/** dump packet trace to string
++ * @arg *msg dessert_msg_t message used for tracing
++ * @arg *buf char buffer to place string
++ * use DESSERT_MSG_TRACE_HOST to only record default mac of hosts on the way
++ * use DESSERT_MSG_TRACE_IFACE to also trace input interface and last hop
++ * ®return length of the string - 0 if msg has no trace header
++ **/
++int dessert_msg_trace_dump(const dessert_msg_t* msg, char* buf, int blen) {
++
++ dessert_ext_t *ext;
++ int x, i = 0;
++
++#define _dessert_msg_trace_dump_append(...) snprintf(buf+strlen(buf), blen-strlen(buf), __VA_ARGS__)
++
++ x = dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, 0);
++ if (x < 1)
++ return 0;
++
++ _dessert_msg_trace_dump_append("\tpacket trace:\n");
++ _dessert_msg_trace_dump_append("\t\tfrom %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[0], ext->data[1], ext->data[2],
++ ext->data[3], ext->data[4], ext->data[5]);
++
++ if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
++ _dessert_msg_trace_dump_append("\t\t received on %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[6], ext->data[7], ext->data[8],
++ ext->data[9], ext->data[10], ext->data[11]);
++ _dessert_msg_trace_dump_append("\t\t l2.5 src %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[12], ext->data[13], ext->data[14],
++ ext->data[15], ext->data[16], ext->data[17]);
++ }
++
++ for (i = 1; i < x; i++) {
++ dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, i);
++ _dessert_msg_trace_dump_append("\t\t#%3d %02x:%02x:%02x:%02x:%02x:%02x\n", i,
++ ext->data[0], ext->data[1], ext->data[2],
++ ext->data[3], ext->data[4], ext->data[5]);
++
++ if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
++ _dessert_msg_trace_dump_append("\t\t received from %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[12], ext->data[13], ext->data[14],
++ ext->data[15], ext->data[16], ext->data[17]);
++ _dessert_msg_trace_dump_append("\t\t receiving iface %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[6], ext->data[7], ext->data[8],
++ ext->data[9], ext->data[10], ext->data[11]);
++ }
++ }
++
++ return strlen(buf);
++
++}
++
++/** callback that checks whether a dessert_msg is consistent
++ * @arg *msg dessert_msg_t frame received
++ * @arg len length of ethernet frame received
++ * @arg *iface interface received packet on
++ * @return DESSERT_MSG_KEEP if message is valid, DESSERT_MSG_DROP otherwise
++ **/
++int dessert_msg_check_cb(dessert_msg_t* msg, size_t len,
++ dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
++ dessert_frameid_t id) {
++ if (dessert_msg_check(msg, len)) {
++ dessert_debug("invalid package - discarding");
++ return DESSERT_MSG_DROP;
++ }
++ return DESSERT_MSG_KEEP;
++}
++
++/** dump a dessert_msg_t to debug log
++ * @arg *msg dessert_msg_t frame received
++ * @arg len length of ethernet frame received
++ * @arg *iface interface received packet on
++ * ®return DESSERT_MSG_KEEP always
++ **/
++int dessert_msg_dump_cb(dessert_msg_t* msg, size_t len,
++ dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
++ dessert_frameid_t id) {
++ char buf[1024];
++
++ dessert_msg_proc_dump(msg, len, proc, buf, 1024);
++ dessert_debug("received frame #%lu on interface %s - dump:\n%s", (unsigned long) id, iface->if_name, buf);
++
++ return DESSERT_MSG_KEEP;
++}
++
++/** check if the message carries a trace extension and add the current trace info
++ * if iface is NULL, the packet is ignored
++ * @arg *msg dessert_msg_t frame received
++ * @arg len length of ethernet frame received
++ * @arg *iface interface received packet on
++ * ®return DESSERT_MSG_KEEP always
++ **/
++int dessert_msg_trace_cb(dessert_msg_t* msg, size_t len,
++ dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
++ dessert_frameid_t id) {
++ dessert_ext_t *ext;
++
++ /* abort if message has no trace extension */
++ if (dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, 0) == 0)
++ return DESSERT_MSG_KEEP;
++
++ /* abort if iface is NULL */
++ if (iface == NULL)
++ return DESSERT_MSG_KEEP;
++
++ /* we cannot add header to sparse messages */
++ if (msg->flags & DESSERT_FLAG_SPARSE)
++ return DESSERT_MSG_NEEDNOSPARSE;
++
++ /* get the trace mode (hop vs interface) */
++ if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_HOST) {
++ dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE, DESSERT_MSG_TRACE_HOST);
++ memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
++ } else if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
++ dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE,
++ DESSERT_MSG_TRACE_IFACE);
++ memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
++ memcpy((ext->data) + ETHER_ADDR_LEN, iface->hwaddr, ETHER_ADDR_LEN);
++ memcpy((ext->data) + ETHER_ADDR_LEN * 2, msg->l2h.ether_shost,
++ ETHER_ADDR_LEN);
++ } else {
++ dessert_warn("got packet with %d bytes trace extension - ignoring");
++ }
++ return DESSERT_MSG_KEEP;
++}
++
++/** callback to set the local processing flags in dessert_msg_proc_t on an arriving dessert_msg_t
++ * @arg *msg dessert_msg_t frame received
++ * @arg len length of ethernet frame received
++ * @arg *iface interface received packet on
++ * ®return DESSERT_MSG_KEEP or DESSERT_MSG_NEEDMSGPROC
++ **/
++int dessert_msg_ifaceflags_cb(dessert_msg_t* msg, size_t len,
++ dessert_msg_proc_t *proc, const dessert_meshif_t *riface,
++ dessert_frameid_t id) {
++
++ dessert_meshif_t *iface;
++ struct ether_header *l25h;
++
++ /* check if we have an processing header */
++ if (proc == NULL)
++ return DESSERT_MSG_NEEDMSGPROC;
++
++ /* get l2.5 header if possible */
++ l25h = dessert_msg_getl25ether(msg);
++
++ /* clear flags */
++ proc->lflags &= ~(DESSERT_LFLAG_DST_SELF | DESSERT_LFLAG_SRC_SELF
++ | DESSERT_LFLAG_NEXTHOP_SELF | DESSERT_LFLAG_PREVHOP_SELF
++ | DESSERT_LFLAG_NEXTHOP_BROADCAST
++ | DESSERT_LFLAG_DST_SELF_OVERHEARD
++ | DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD);
++
++ /* checks against defaults */
++ if (l25h != NULL && memcmp(l25h->ether_dhost, ether_broadcast,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_DST_BROADCAST;
++ } else if (l25h != NULL && l25h->ether_dhost[0] & 0x01) { /* broadcast also has this bit set */
++ proc->lflags |= DESSERT_LFLAG_DST_MULTICAST;
++ }
++
++ if (l25h != NULL && memcmp(l25h->ether_dhost, dessert_l25_defsrc,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_DST_SELF;
++ }
++ if (l25h != NULL && memcmp(l25h->ether_shost, dessert_l25_defsrc,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_SRC_SELF;
++ }
++ if (memcmp(msg->l2h.ether_dhost, dessert_l25_defsrc, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF;
++ }
++ if (memcmp(msg->l2h.ether_shost, dessert_l25_defsrc, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_PREVHOP_SELF;
++ }
++ if (memcmp(msg->l2h.ether_dhost, ether_broadcast, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_NEXTHOP_BROADCAST;
++ }
++
++ /* checks against interfaces in list */
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(dessert_meshiflist_get(), iface) {
++ if (l25h != NULL && memcmp(l25h->ether_dhost, iface->hwaddr,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_DST_SELF;
++ if (memcmp(l25h->ether_dhost, riface->hwaddr, ETHER_ADDR_LEN) != 0) {
++ proc->lflags |= DESSERT_LFLAG_DST_SELF_OVERHEARD;
++ }
++ }
++ if (l25h != NULL && memcmp(l25h->ether_shost, iface->hwaddr,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_SRC_SELF;
++ }
++ if (memcmp(msg->l2h.ether_dhost, iface->hwaddr, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF;
++ if (memcmp(msg->l2h.ether_dhost, riface->hwaddr, ETHER_ADDR_LEN)
++ != 0) {
++ proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD;
++ }
++ }
++ if (memcmp(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_PREVHOP_SELF;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return DESSERT_MSG_KEEP;
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * M E S S A G E H A N D L I N G
++ *
++ ******************************************************************************/
++
++/* nothing here - yet */
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * M E S S A G E H A N D L I N G
++ *
++ ******************************************************************************/
++
++/* nothing here - yet */
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_periodic.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_periodic.c 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,326 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++/* global data storage // P U B L I C */
++
++/* global data storage // P R I V A T E */
++dessert_periodic_t *_tasklist = NULL;
++pthread_mutex_t _dessert_periodic_mutex = PTHREAD_MUTEX_INITIALIZER;
++pthread_cond_t _dessert_periodic_changed = PTHREAD_COND_INITIALIZER;
++pthread_t _dessert_periodic_worker;
++int _dessert_periodic_worker_running = 0;
++
++/* local data storage*/
++
++/* local functions forward declarations*/
++static int _dessert_periodic_add_periodic_t(dessert_periodic_t *task);
++static void *_dessert_periodic_thread(void* arg);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * P E R I O D I C T A S K S
++ *
++ ******************************************************************************/
++
++/** Adds a delayed/periodic task to the task list
++ *
++ * @param[in] c callback to call when task is scheduled
++ * @param[in] data data to give to the callback
++ * @param[in] scheduled when should the callback be called the first time
++ * @param[in] interval how often should it be called (set to NULL if only once)
++ *
++ * @retval pointer if the callback was added successfully
++ * @retval NULL otherwise
++ *
++ * @note The <a href="http://www.gnu.org/s/libc/manual/html_node/Elapsed-Time.html#Elapsed-Time">GNU C Library Documentation</a>
++ * states about the @c tv_usec member of the @c struct @c timeval: <em>This is the
++ * rest of the elapsed time (a fraction of a second), represented as the number
++ * of microseconds. It is always less than one @a million.</em> So, to make sure
++ * this invariant is always met, consider using the provided TIMEVAL_ADD() macro.
++ *
++ * @par Description:
++ *
++ * @par Examples:
++ * @li Register a callback function to be executed every 1.5 seconds - and
++ * delay the first call to it for another 1.5 seconds:
++ * @code
++ * struct timeval interval;
++ * interval.tv_sec = 1;
++ * interval.tv_usec = 500000;
++ *
++ * struct timeval schedule;
++ * gettimeofday(&schedule, NULL);
++ * TIMEVAL_ADD(&schedule, 1, 500000);
++ *
++ * dessert_periodic_add(callback, NULL, &schedule, &interval);
++ * @endcode
++ *
++ *
++ */
++dessert_periodic_t *dessert_periodic_add(dessert_periodiccallback_t* c,
++ void *data, const struct timeval *scheduled,
++ const struct timeval *interval) {
++ struct timeval now;
++ dessert_periodic_t *task;
++
++ if (scheduled == NULL) {
++ gettimeofday(&now, NULL);
++ scheduled = &now;
++ }
++ assert(scheduled != NULL);
++
++ /* sanity checks */
++ if (c == NULL) {
++ return (NULL);
++ }
++
++ /* get task memory */
++ task = malloc(sizeof(dessert_periodic_t));
++ if (task == NULL) {
++ return NULL;
++ }
++
++ /* copy data */
++ task->c = c;
++ task->data = data;
++ memcpy(&(task->scheduled), scheduled, sizeof(struct timeval));
++ if (interval == NULL) {
++ task->interval.tv_sec = 0;
++ task->interval.tv_usec = 0;
++ } else {
++ memcpy(&(task->interval), interval, sizeof(struct timeval));
++ }
++ task->next = NULL;
++
++ pthread_mutex_lock(&_dessert_periodic_mutex);
++ _dessert_periodic_add_periodic_t(task);
++ pthread_mutex_unlock(&_dessert_periodic_mutex);
++
++ return (task);
++}
++
++/** Adds a delayed task to the task list
++ *
++ * This is an easier version of dessert_periodic_add() taking a single delay as parameter.
++ *
++ * @param[in] c callback to call when task is scheduled
++ * @param[in] data data to give to the callback
++ * @param[in] delay the delay in seconds
++ *
++ * %DESCRIPTION: \n
++ */
++dessert_periodic_t *dessert_periodic_add_delayed(dessert_periodiccallback_t* c,
++ void *data, int delay) {
++ struct timeval at;
++ gettimeofday(&at, NULL);
++
++ at.tv_sec += delay;
++
++ return (dessert_periodic_add(c, data, &at, NULL));
++}
++
++/** Removes a delayed/periodic task from the task list.
++ *
++ * @param[in] p pointer to task description
++ *
++ * @return -1 on failure, 0 if the task was removed
++ *
++ * %DESCRIPTION: \n
++ */
++int dessert_periodic_del(dessert_periodic_t *p) {
++ dessert_periodic_t *i;
++ int x = -1;
++
++ assert(p != NULL);
++
++ pthread_mutex_lock(&_dessert_periodic_mutex);
++
++ if (p == _tasklist) {
++ _tasklist = _tasklist->next;
++ x++;
++ }
++
++ i = _tasklist;
++ while (i != NULL) {
++ if (i->next == p) {
++ i->next = p->next;
++ x++;
++ }
++ i = i->next;
++ }
++
++ pthread_mutex_unlock(&_dessert_periodic_mutex);
++
++ assert(x < 2);
++
++ free(p);
++ return (x);
++
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * P E R I O D I C T A S K S
++ *
++ ******************************************************************************/
++
++/** internal function to start periodic worker */
++void _dessert_periodic_init() {
++ if (_dessert_periodic_worker_running == 0) {
++ _dessert_periodic_worker_running = 1;
++ pthread_create(&_dessert_periodic_worker, NULL,
++ _dessert_periodic_thread, NULL);
++ }
++}
++
++/******************************************************************************
++ *
++ * LOCAL / PRIVATE
++ *
++ * P E R I O D I C T A S K S
++ *
++ ******************************************************************************/
++
++/* internal task list modifier - only call while holding _dessert_periodic_mutex */
++static int _dessert_periodic_add_periodic_t(dessert_periodic_t *task) {
++
++ dessert_periodic_t *i;
++
++ /* first task? */
++ if (_tasklist == task) {
++ dessert_err("infinite loop in periodic tasklist requested - aborting!");
++ return (-1);
++ } else if (_tasklist == NULL) {
++ _tasklist = task;
++ pthread_cond_broadcast(&_dessert_periodic_changed);
++ }
++ /* is next task.... */
++ else if (task->scheduled.tv_sec < _tasklist->scheduled.tv_sec
++ || (task->scheduled.tv_sec == _tasklist->scheduled.tv_sec
++ && task->scheduled.tv_usec < _tasklist->scheduled.tv_usec)) {
++ task->next = _tasklist;
++ _tasklist = task;
++ pthread_cond_broadcast(&_dessert_periodic_changed);
++ }
++ /* search right place */
++ else {
++ i = _tasklist;
++ while (i->next != NULL && (i->next->scheduled.tv_sec
++ < task->scheduled.tv_sec || (i->next->scheduled.tv_sec
++ == task->scheduled.tv_sec && i->next->scheduled.tv_usec
++ <= task->scheduled.tv_usec))) {
++ i = i->next;
++ if (i->next == task) {
++ dessert_err("infinite loop in periodic tasklist requested - aborting!");
++ return (-1);
++ }
++ }
++ /* last or right place */
++ task->next = i->next;
++ i->next = task;
++ /* no need to tell periodic thread to check
++ again - next task has not changed */
++ }
++
++ return (0);
++
++}
++
++/* internal worker for the task list */
++static void *_dessert_periodic_thread(void* arg) {
++ dessert_periodic_t *next_task;
++ dessert_periodic_t task;
++ struct timeval now;
++ struct timespec ts;
++
++ pthread_mutex_lock(&_dessert_periodic_mutex);
++
++ while (1) {
++
++ gettimeofday(&now, NULL);
++
++ if (_tasklist == NULL) {
++ if (pthread_cond_wait(&_dessert_periodic_changed,
++ &_dessert_periodic_mutex) == EINVAL) {
++ dessert_err("sleeping failed in periodic scheduler - scheduler died");
++ break;
++ }
++ continue;
++ } else if (now.tv_sec < _tasklist->scheduled.tv_sec || (now.tv_sec
++ == _tasklist->scheduled.tv_sec && now.tv_usec
++ < _tasklist->scheduled.tv_usec)) {
++ ts.tv_sec = _tasklist->scheduled.tv_sec;
++ ts.tv_nsec = _tasklist->scheduled.tv_usec * 1000;
++ if (pthread_cond_timedwait(&_dessert_periodic_changed,
++ &_dessert_periodic_mutex, &ts) == EINVAL) {
++ dessert_err("sleeping failed in periodic scheduler - scheduler died");
++ break;
++ }
++ continue;
++ }
++
++ /* run next task */
++ next_task = _tasklist;
++ _tasklist = next_task->next;
++
++ /* safe task to local variable */
++ memcpy(&task, next_task, sizeof(dessert_periodic_t));
++
++ /* periodic task - re-add */
++ if (next_task->interval.tv_sec != 0 || next_task->interval.tv_usec != 0) {
++ next_task->scheduled.tv_sec += next_task->interval.tv_sec;
++ next_task->scheduled.tv_usec += next_task->interval.tv_usec;
++ if (next_task->scheduled.tv_usec >= 1000000) {
++ next_task->scheduled.tv_sec += 1;
++ next_task->scheduled.tv_usec -= 1000000;
++ }
++ _dessert_periodic_add_periodic_t(next_task);
++ }
++ /* otherwise free memory */
++ else {
++ free(next_task);
++ }
++
++ /* run the callback */
++ pthread_mutex_unlock(&_dessert_periodic_mutex);
++ /* call the callback - remove it from list if exits with nonzero code */
++ if (task.c(task.data, &(task.scheduled), &(task.interval))) {
++ dessert_periodic_del(next_task);
++ }
++ pthread_mutex_lock(&_dessert_periodic_mutex);
++ }
++
++ pthread_mutex_unlock(&_dessert_periodic_mutex);
++ _dessert_periodic_worker_running = 0;
++
++ return (NULL);
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_sysiface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_sysiface.c 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,487 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ 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 3 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 http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++#ifdef __DARWIN__
++#define TUNSIFHEAD _IOW('t', 96, int)
++#define TUNGIFHEAD _IOR('t', 97, int)
++#endif
++
++#ifdef __FreeBSD__
++#include <net/if_tun.h>
++#endif
++
++#ifdef __linux__
++#include <linux/if_tun.h>
++#endif
++
++uint8_t dessert_sysif_hwaddr[ETHER_ADDR_LEN]; // TODO unused! to be removed ??!?
++
++/* global data storage // P U B L I C */
++/* nothing here - yet */
++
++/* global data storage // P R I V A T E */
++dessert_sysif_t *_dessert_sysif = NULL;
++
++/* local data storage*/
++dessert_sysrxcbe_t *_dessert_sysrxcblist = NULL;
++int _dessert_sysrxcblistver = 0;
++
++/* internal functions forward declarations*/
++static void *_dessert_sysif_init_thread(void* arg);
++static int _dessert_sysif_init_getmachack(dessert_msg_t *msg, size_t len,
++ dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * S Y S - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** Initializes the tun/tap Interface dev for des-sert.
++ * @arg *device interface name
++ * @arg flags @see DESSERT_TUN @see DESSERT_TAP @see DESSERT_MAKE_DEFSRC
++ * @return 0 -- on success
++ * @return EINVAL -- if message is broken
++ * @return EFAULT -- if interface not specified and not guessed
++ **/
++int dessert_sysif_init(char* device, uint8_t flags) {
++
++ char *buf;
++
++#ifdef __linux__
++ struct ifreq ifr;
++#endif
++
++ /* initialize _dessert_sysif */
++ _dessert_sysif = malloc(sizeof(dessert_sysif_t));
++ if (_dessert_sysif == NULL)
++ return (-errno);
++ memset((void *) _dessert_sysif, 0, sizeof(dessert_sysif_t));
++ _dessert_sysif->flags = flags;
++ strncpy(_dessert_sysif->if_name, device, IF_NAMESIZE);
++ _dessert_sysif->if_name[IF_NAMESIZE - 1] = '\0';
++ pthread_mutex_init(&(_dessert_sysif->cnt_mutex), NULL);
++
++#ifdef __FreeBSD__
++
++ /* open device */
++ buf = malloc(IF_NAMESIZE+6);
++ snprintf(buf, IF_NAMESIZE+6, "/dev/%s", device);
++ _dessert_sysif->fd = open(buf, O_RDWR);
++ if(_dessert_sysif->fd < 0) {
++ dessert_err("could not open interface %s using %s: %s", device, buf, strerror(errno));
++ free(buf);
++ return (-errno);
++ }
++ free(buf);
++
++ /* set header mode on for mode tun */
++ if(flags & DESSERT_TUN) {
++ const int one = 1;
++ if(ioctl(_dessert_sysif->fd, TUNSIFHEAD, &one, sizeof one) == -1) {
++ dessert_err("setting TUNSIFHEAD failed: %s",strerror(errno));
++ goto dessert_sysif_init_err;
++ return (-errno);
++ }
++ }
++
++#elif __linux__
++
++ /* open device */
++ buf = "/dev/net/tun";
++ _dessert_sysif->fd = open(buf, O_RDWR);
++ memset(&ifr, 0, sizeof(ifr));
++ if (flags & DESSERT_TUN) {
++ ifr.ifr_flags = IFF_TUN; /* we want the service flag - no IFF_NO_PI */
++ } else {
++ ifr.ifr_flags = IFF_TAP | IFF_NO_PI; /* we want the service flag and IFF_NO_PI */
++ }
++ strcpy(ifr.ifr_name, _dessert_sysif->if_name);
++ if (ioctl(_dessert_sysif->fd, TUNSETIFF, (void *) &ifr) < 0) {
++ dessert_err("ioctl(TUNSETIFF) failed: %s", strerror(errno));
++ goto dessert_sysif_init_err;
++ return (-errno);
++ }
++ strcpy(_dessert_sysif->if_name, ifr.ifr_name);
++
++#else
++
++ goto not_implemented;
++
++#endif
++
++ /* check interface - abusing dessert_meshif methods */
++ _dessert_sysif->if_index = if_nametoindex(device);
++ if (!_dessert_sysif->if_index) {
++ dessert_err("interface %s - no such interface", _dessert_sysif->if_name);
++ goto dessert_sysif_init_err;
++ }
++
++ /* do ifconfig to set the interface up - strange things happen otherwise */
++ buf = malloc(IF_NAMESIZE + 16);
++ snprintf(buf, IF_NAMESIZE + 15, "ifconfig %s up", _dessert_sysif->if_name);
++ system(buf);
++ free(buf);
++
++ /* get hardware address in tap mode if possible */
++ if (flags & DESSERT_TAP) {
++ if (_dessert_meshif_gethwaddr((dessert_meshif_t *) _dessert_sysif) != 0) {
++ dessert_err("failed to get hwaddr of interface %s(%d) - hope src of first packet received from is it",
++ _dessert_sysif->if_name, _dessert_sysif->if_index, _dessert_sysif);
++ _dessert_sysif->flags |= _DESSERT_TAP_NOMAC;
++ dessert_sysrxcb_add(_dessert_sysif_init_getmachack, 0);
++ } else {
++ /* check whether we need to set defsrc */
++ if ((flags & DESSERT_MAKE_DEFSRC) || memcmp(dessert_l25_defsrc,
++ ether_null, ETHER_ADDR_LEN) == 0) {
++ memcpy(dessert_l25_defsrc, _dessert_sysif->hwaddr,
++ ETHER_ADDR_LEN);
++ dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
++ dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
++ }
++ }
++ }
++
++ /* info message */
++ if (flags & DESSERT_TAP) {
++ dessert_info("starting worker thread for tap interface %s(%d) hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ _dessert_sysif->if_name, _dessert_sysif->if_index,
++ _dessert_sysif->hwaddr[0], _dessert_sysif->hwaddr[1], _dessert_sysif->hwaddr[2],
++ _dessert_sysif->hwaddr[3], _dessert_sysif->hwaddr[4], _dessert_sysif->hwaddr[5]);
++ } else {
++ dessert_info("starting worker thread for tap interface %s(%d) fd %d",
++ _dessert_sysif->if_name, _dessert_sysif->if_index, _dessert_sysif->fd);
++ }
++
++ /* start worker thread */
++ if (pthread_create(&(_dessert_sysif->worker), NULL,
++ _dessert_sysif_init_thread, (void *) _dessert_sysif)) {
++ dessert_err("creating worker thread failed for interface %s(%d)",
++ _dessert_sysif->if_name, _dessert_sysif->if_index);
++ goto dessert_sysif_init_err;
++ }
++
++ /* done */
++ return (DESSERT_OK);
++
++ dessert_sysif_init_err: close(_dessert_sysif->fd);
++
++ return (-errno);
++}
++
++/** adds a callback function to call if a packet should be injected into dessert via a tun/tap interface
++ * @arg *c callback function
++ * @arg prio priority of the function - lower first!
++ * @return DESSERT_OK on success
++ * @return -errno on error
++ **/
++int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio) {
++ dessert_sysrxcbe_t *cb, *i;
++
++ cb = (struct dessert_sysrxcbe*) malloc(sizeof(struct dessert_sysrxcbe));
++ if (cb == NULL) {
++ dessert_err("failed to allocate memory for registering sys callback: %s", strerror(errno));
++ return (-errno);
++ }
++
++ if (c == NULL) {
++ dessert_err("tried to add a null pointer as dessert_sysrxcb");
++ return (-EINVAL);
++ }
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ cb->c = c;
++ cb->prio = prio;
++ cb->next = NULL;
++
++ if (_dessert_sysrxcblist == NULL) {
++ _dessert_sysrxcblist = cb;
++ _dessert_sysrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++ }
++
++ if (_dessert_sysrxcblist->prio > cb->prio) {
++ cb->next = _dessert_sysrxcblist;
++ _dessert_sysrxcblist = cb;
++ _dessert_sysrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++ }
++
++ /* find right place for callback */
++ for (i = _dessert_sysrxcblist; i->next != NULL && i->next->prio <= cb->prio; i
++ = i->next)
++ ;
++
++ /* insert it */
++ cb->next = i->next;
++ i->next = cb;
++ _dessert_sysrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++}
++
++/** removes all occurrences of the callback function from the list of callbacks.
++ * @arg c callback function
++ * @return DESSERT_OK on success, DESSERT_ERR on error
++ **/
++int dessert_sysrxcb_del(dessert_sysrxcb_t* c) {
++ int count = 0;
++ dessert_sysrxcbe_t *i, *last;
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ if (_dessert_sysrxcblist == NULL) {
++ goto dessert_sysrxcb_del_out;
++ }
++
++ while (_dessert_sysrxcblist->c == c) {
++ count++;
++ i = _dessert_sysrxcblist;
++ _dessert_sysrxcblist = _dessert_sysrxcblist->next;
++ free(i);
++ if (_dessert_sysrxcblist == NULL) {
++ goto dessert_sysrxcb_del_out;
++ }
++ }
++
++ for (i = _dessert_sysrxcblist; i->next != NULL; i = i->next) {
++ if (i->c == c) {
++ count++;
++ last->next = i->next;
++ free(i);
++ i = last;
++ }
++ last = i;
++ }
++
++ dessert_sysrxcb_del_out: _dessert_sysrxcblistver++;
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return ((count > 0) ? DESSERT_OK : DESSERT_ERR);
++
++}
++
++/** sends a packet via tun/tap interface to the kernel
++ * @arg *msg message to send
++ * @return DESSERT_OK on success
++ * @return -EIO if message failed to be sent
++ **/
++int dessert_syssend_msg(dessert_msg_t *msg) {
++ struct ether_header *eth;
++ size_t eth_len;
++
++ eth_len = dessert_msg_ethdecap(msg, &eth);
++ if (eth_len == -1) {
++ return (-EIO);
++ }
++ dessert_syssend(eth, eth_len);
++ free(eth);
++
++ return DESSERT_OK;
++}
++
++/** sends a packet via tun/tap interface to the kernel
++ * @arg *eth message to send
++ * @arg len length of message to send
++ * @return DESSERT_OK on success
++ * @return -EIO if message failed to be sent
++ **/
++int dessert_syssend(const struct ether_header *eth, size_t len) {
++ ssize_t res = 0;
++
++ if (_dessert_sysif == NULL)
++ return (-EIO);
++
++ if (_dessert_sysif->flags & DESSERT_TUN) {
++ eth
++ = (struct ether_header *) (((uint8_t *) eth) + (ETHER_ADDR_LEN
++ * 2));
++ len -= (ETHER_ADDR_LEN * 2);
++ }
++
++ res = write(_dessert_sysif->fd, (const void *) eth, len);
++
++ if (res == len) {
++ pthread_mutex_lock(&(_dessert_sysif->cnt_mutex));
++ _dessert_sysif->opkts++;
++ _dessert_sysif->obytes += res;
++ pthread_mutex_unlock(&(_dessert_sysif->cnt_mutex));
++ return (DESSERT_OK);
++ } else {
++
++ return (-EIO);
++ }
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * S Y S - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/* nothing here - yet */
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * S Y S - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** internal callback which gets registered if we can't find out mac address of tap interface */
++static int _dessert_sysif_init_getmachack(dessert_msg_t *msg, size_t len,
++ dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id) {
++
++ struct ether_header *eth;
++ dessert_msg_ethdecap(msg, &eth);
++
++ /* hack to get the hardware address */
++ if (sysif->flags & _DESSERT_TAP_NOMAC) {
++ /* copy from first packet received */
++ memcpy(sysif->hwaddr, eth->ether_shost, ETHER_ADDR_LEN);
++ dessert_info("guessed hwaddr for %s: %02x:%02x:%02x:%02x:%02x:%02x", sysif->if_name,
++ sysif->hwaddr[0], sysif->hwaddr[1], sysif->hwaddr[2],
++ sysif->hwaddr[3], sysif->hwaddr[4], sysif->hwaddr[5]);
++ /* check whether we need to set defsrc */
++ if ((sysif->flags & DESSERT_MAKE_DEFSRC) || memcmp(dessert_l25_defsrc,
++ ether_null, ETHER_ADDR_LEN) == 0) {
++ memcpy(dessert_l25_defsrc, sysif->hwaddr, ETHER_ADDR_LEN);
++ dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
++ dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
++ }
++ sysif->flags &= ~_DESSERT_TAP_NOMAC;
++ }
++
++ /* unregister me */
++ dessert_sysrxcb_del(_dessert_sysif_init_getmachack);
++
++ return DESSERT_MSG_KEEP;
++}
++
++/** internal packet processing thread body */
++static void *_dessert_sysif_init_thread(void* arg) {
++
++ dessert_sysif_t *sysif = (dessert_sysif_t *) arg;
++ size_t len;
++ size_t buflen = ETHER_MAX_LEN;
++ char buf[buflen];
++ dessert_msg_proc_t proc;
++ dessert_frameid_t id;
++ dessert_sysrxcbe_t *cb;
++ int res;
++ int ex = 0;
++ dessert_sysrxcb_t **cbl = NULL;
++ int cbllen = 0;
++ int cblcur = -1;
++ int cblver = -1;
++
++ while (!ex) {
++
++ memset(buf, 0, buflen);
++
++ if (sysif->flags & DESSERT_TUN) {
++ len = read((sysif->fd), buf + (ETHER_ADDR_LEN * 2), buflen
++ - (ETHER_ADDR_LEN * 2));
++ } else {
++ len = read((sysif->fd), buf, buflen);
++ }
++
++ if (len == -1) {
++ dessert_debug("got %s while reading on %s (fd %d) - is the sys (tun/tap) interface up?", strerror(errno), sysif->if_name, sysif->fd);
++ sleep(1);
++ continue;
++ }
++ if (sysif->flags & DESSERT_TUN) {
++ len += (ETHER_ADDR_LEN * 2);
++ }
++
++ /* copy callbacks to internal list to release dessert_cfglock before invoking callbacks*/
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ if (cblver < _dessert_sysrxcblistver) {
++ /* callback list changed - rebuild it */
++ cbllen = 0;
++ for (cb = _dessert_sysrxcblist; cb != NULL; cb = cb->next)
++ cbllen++;
++ cbl = realloc(cbl, cbllen * sizeof(dessert_sysrxcb_t *));
++ if (cbl == NULL) {
++ dessert_err("failed to allocate memory for internal callback list");
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return (NULL);
++ }
++
++ cblcur = 0;
++ for (cb = _dessert_sysrxcblist; cb != NULL; cb = cb->next)
++ cbl[cblcur++] = cb->c;
++
++ cblver = _dessert_sysrxcblistver;
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* generate frame id */
++ id = _dessert_newframeid();
++
++ /* count packet */
++ pthread_mutex_lock(&(sysif->cnt_mutex));
++ sysif->ipkts++;
++ sysif->ibytes += len;
++ pthread_mutex_unlock(&(sysif->cnt_mutex));
++
++ /* call the interested */
++ res = 0;
++ cblcur = 0;
++ memset(&proc, 0, DESSERT_MSGPROCLEN);
++ dessert_msg_t *msg;
++ while (res > DESSERT_MSG_DROP && cblcur < cbllen) {
++ if (dessert_msg_ethencap((struct ether_header *) buf, len, &msg)
++ < 0) {
++ dessert_err("failed to encapsulate ethernet frame on host-to-network-pipeline: %s", errno);
++ };
++ res = cbl[cblcur++](msg, len, &proc, sysif, id);
++ }
++ dessert_msg_destroy(msg);
++
++ }
++ dessert_info("stopped reading on %s (fd %d): %s", sysif->if_name, sysif->fd, strerror(errno));
++
++ free(cbl);
++ close(sysif->fd);
++
++ return (NULL);
++}
+Index: libdessert0.86-0.86.14/src/snmp/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/Makefile.am 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,60 @@
++
++AM_CPPFLAGS = -I$(top_srcdir)/include \
++ -I../libdessert \
++ @SNMP_CFLAGS@
++
++noinst_LTLIBRARIES = libdessertsnmp.la
++
++libdessertsnmp_la_SOURCES = \
++ dessertAppParamsTable.c \
++ dessertAppParamsTable.h \
++ dessertAppParamsTable_oids.h \
++ dessertAppParamsTable_data_access.c \
++ dessertAppParamsTable_data_access.h \
++ dessertAppParamsTable_data_get.c \
++ dessertAppParamsTable_data_get.h \
++ dessertAppParamsTable_data_set.c \
++ dessertAppParamsTable_data_set.h \
++ dessertAppParamsTable_interface.c \
++ dessertAppParamsTable_interface.h \
++ dessertAppStatsTable.c \
++ dessertAppStatsTable.h \
++ dessertAppStatsTable_enums.h \
++ dessertAppStatsTable_oids.h \
++ dessertAppStatsTable_data_access.c \
++ dessertAppStatsTable_data_access.h \
++ dessertAppStatsTable_data_get.c \
++ dessertAppStatsTable_data_get.h \
++ dessertAppStatsTable_data_set.c \
++ dessertAppStatsTable_data_set.h \
++ dessertAppStatsTable_interface.c \
++ dessertAppStatsTable_interface.h \
++ dessertMeshifTable.c \
++ dessertMeshifTable.h \
++ dessertMeshifTable_enums.h \
++ dessertMeshifTable_oids.h \
++ dessertMeshifTable_data_access.c \
++ dessertMeshifTable_data_access.h \
++ dessertMeshifTable_data_get.c \
++ dessertMeshifTable_data_get.h \
++ dessertMeshifTable_data_set.c \
++ dessertMeshifTable_data_set.h \
++ dessertMeshifTable_interface.c \
++ dessertMeshifTable_interface.h \
++ dessertObjects.c \
++ dessertObjects.h \
++ dessertSysifTable.c \
++ dessertSysifTable.h \
++ dessertSysifTable_enums.h \
++ dessertSysifTable_oids.h \
++ dessertSysifTable_interface.h \
++ dessertSysifTable_data_access.c \
++ dessertSysifTable_data_access.h \
++ dessertSysifTable_data_get.c \
++ dessertSysifTable_data_get.h \
++ dessertSysifTable_data_set.c \
++ dessertSysifTable_data_set.h \
++ dessertSysifTable_interface.c \
++ dessertSysifTable_subagent.c
++
++libdessertsnmp_la_LDFLAGS = -avoid-version
+Index: libdessert0.86-0.86.14/src/snmp/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/Makefile.in 2009-12-09 16:38:51.198503063 +0100
+@@ -0,0 +1,598 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
++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@
++subdir = src/snmp
++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = $(top_builddir)/config.h
++CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
++LTLIBRARIES = $(noinst_LTLIBRARIES)
++libdessertsnmp_la_LIBADD =
++am_libdessertsnmp_la_OBJECTS = dessertAppParamsTable.lo \
++ dessertAppParamsTable_data_access.lo \
++ dessertAppParamsTable_data_get.lo \
++ dessertAppParamsTable_data_set.lo \
++ dessertAppParamsTable_interface.lo dessertAppStatsTable.lo \
++ dessertAppStatsTable_data_access.lo \
++ dessertAppStatsTable_data_get.lo \
++ dessertAppStatsTable_data_set.lo \
++ dessertAppStatsTable_interface.lo dessertMeshifTable.lo \
++ dessertMeshifTable_data_access.lo \
++ dessertMeshifTable_data_get.lo dessertMeshifTable_data_set.lo \
++ dessertMeshifTable_interface.lo dessertObjects.lo \
++ dessertSysifTable.lo dessertSysifTable_data_access.lo \
++ dessertSysifTable_data_get.lo dessertSysifTable_data_set.lo \
++ dessertSysifTable_interface.lo dessertSysifTable_subagent.lo
++libdessertsnmp_la_OBJECTS = $(am_libdessertsnmp_la_OBJECTS)
++libdessertsnmp_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++ $(libdessertsnmp_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 = $(libdessertsnmp_la_SOURCES)
++DIST_SOURCES = $(libdessertsnmp_la_SOURCES)
++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@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++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@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++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@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++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@
++ax_pthread_config = @ax_pthread_config@
++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@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++AM_CPPFLAGS = -I$(top_srcdir)/include \
++ -I../libdessert \
++ @SNMP_CFLAGS@
++
++noinst_LTLIBRARIES = libdessertsnmp.la
++libdessertsnmp_la_SOURCES = \
++ dessertAppParamsTable.c \
++ dessertAppParamsTable.h \
++ dessertAppParamsTable_oids.h \
++ dessertAppParamsTable_data_access.c \
++ dessertAppParamsTable_data_access.h \
++ dessertAppParamsTable_data_get.c \
++ dessertAppParamsTable_data_get.h \
++ dessertAppParamsTable_data_set.c \
++ dessertAppParamsTable_data_set.h \
++ dessertAppParamsTable_interface.c \
++ dessertAppParamsTable_interface.h \
++ dessertAppStatsTable.c \
++ dessertAppStatsTable.h \
++ dessertAppStatsTable_enums.h \
++ dessertAppStatsTable_oids.h \
++ dessertAppStatsTable_data_access.c \
++ dessertAppStatsTable_data_access.h \
++ dessertAppStatsTable_data_get.c \
++ dessertAppStatsTable_data_get.h \
++ dessertAppStatsTable_data_set.c \
++ dessertAppStatsTable_data_set.h \
++ dessertAppStatsTable_interface.c \
++ dessertAppStatsTable_interface.h \
++ dessertMeshifTable.c \
++ dessertMeshifTable.h \
++ dessertMeshifTable_enums.h \
++ dessertMeshifTable_oids.h \
++ dessertMeshifTable_data_access.c \
++ dessertMeshifTable_data_access.h \
++ dessertMeshifTable_data_get.c \
++ dessertMeshifTable_data_get.h \
++ dessertMeshifTable_data_set.c \
++ dessertMeshifTable_data_set.h \
++ dessertMeshifTable_interface.c \
++ dessertMeshifTable_interface.h \
++ dessertObjects.c \
++ dessertObjects.h \
++ dessertSysifTable.c \
++ dessertSysifTable.h \
++ dessertSysifTable_enums.h \
++ dessertSysifTable_oids.h \
++ dessertSysifTable_interface.h \
++ dessertSysifTable_data_access.c \
++ dessertSysifTable_data_access.h \
++ dessertSysifTable_data_get.c \
++ dessertSysifTable_data_get.h \
++ dessertSysifTable_data_set.c \
++ dessertSysifTable_data_set.h \
++ dessertSysifTable_interface.c \
++ dessertSysifTable_subagent.c
++
++libdessertsnmp_la_LDFLAGS = -avoid-version
++all: all-am
++
++.SUFFIXES:
++.SUFFIXES: .c .lo .o .obj
++$(srcdir)/Makefile.in: $(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/snmp/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu src/snmp/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: $(am__configure_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
++
++clean-noinstLTLIBRARIES:
++ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
++ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
++ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
++ test "$$dir" != "$$p" || dir=.; \
++ echo "rm -f \"$${dir}/so_locations\""; \
++ rm -f "$${dir}/so_locations"; \
++ done
++libdessertsnmp.la: $(libdessertsnmp_la_OBJECTS) $(libdessertsnmp_la_DEPENDENCIES)
++ $(libdessertsnmp_la_LINK) $(libdessertsnmp_la_OBJECTS) $(libdessertsnmp_la_LIBADD) $(LIBS)
++
++mostlyclean-compile:
++ -rm -f *.$(OBJEXT)
++
++distclean-compile:
++ -rm -f *.tab.c
++
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable_data_access.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable_data_get.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable_data_set.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable_interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable_data_access.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable_data_get.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable_data_set.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable_interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable_data_access.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable_data_get.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable_data_set.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable_interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertObjects.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_data_access.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_data_get.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_data_set.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_subagent.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
++
++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"
++
++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)
++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:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++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-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-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-noinstLTLIBRARIES 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
++
++
++# 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:
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable.c 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,231 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/** \page MFD helper for dessertAppParamsTable
++ *
++ * \section intro Introduction
++ * Introductory text.
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++
++#include <net-snmp/agent/mib_modules.h>
++
++#include "dessertAppParamsTable_interface.h"
++
++oid dessertAppParamsTable_oid[] =
++ { DESSERTAPPPARAMSTABLE_OID };
++int dessertAppParamsTable_oid_size =
++OID_LENGTH(dessertAppParamsTable_oid);
++
++dessertAppParamsTable_registration dessertAppParamsTable_user_context;
++
++void initialize_table_dessertAppParamsTable(void);
++void shutdown_table_dessertAppParamsTable(void);
++
++
++/**
++ * Initializes the dessertAppParamsTable module
++ */
++void
++init_dessertAppParamsTable(void)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:init_dessertAppParamsTable",
++ "called\n"));
++
++ /*
++ * TODO:300:o: Perform dessertAppParamsTable one-time module initialization.
++ */
++
++ /*
++ * here we initialize all the tables we're planning on supporting
++ */
++ if (should_init("dessertAppParamsTable"))
++ initialize_table_dessertAppParamsTable();
++
++} /* init_dessertAppParamsTable */
++
++/**
++ * Shut-down the dessertAppParamsTable module (agent is exiting)
++ */
++void
++shutdown_dessertAppParamsTable(void)
++{
++ if (should_init("dessertAppParamsTable"))
++ shutdown_table_dessertAppParamsTable();
++
++}
++
++/**
++ * Initialize the table dessertAppParamsTable
++ * (Define its contents and how it's structured)
++ */
++void
++initialize_table_dessertAppParamsTable(void)
++{
++ dessertAppParamsTable_registration *user_context;
++ u_long flags;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:initialize_table_dessertAppParamsTable", "called\n"));
++
++ /*
++ * TODO:301:o: Perform dessertAppParamsTable one-time table initialization.
++ */
++
++ /*
++ * TODO:302:o: |->Initialize dessertAppParamsTable user context
++ * if you'd like to pass in a pointer to some data for this
++ * table, allocate or set it up here.
++ */
++ /*
++ * a netsnmp_data_list is a simple way to store void pointers. A simple
++ * string token is used to add, find or remove pointers.
++ */
++ user_context =
++ netsnmp_create_data_list("dessertAppParamsTable", NULL, NULL);
++
++ /*
++ * No support for any flags yet, but in the future you would
++ * set any flags here.
++ */
++ flags = 0;
++
++ /*
++ * call interface initialization code
++ */
++ _dessertAppParamsTable_initialize_interface(user_context, flags);
++} /* initialize_table_dessertAppParamsTable */
++
++/**
++ * Shutdown the table dessertAppParamsTable
++ */
++void
++shutdown_table_dessertAppParamsTable(void)
++{
++ /*
++ * call interface shutdown code
++ */
++ _dessertAppParamsTable_shutdown_interface
++ (&dessertAppParamsTable_user_context);
++}
++
++/**
++ * extra context initialization (eg default values)
++ *
++ * @param rowreq_ctx : row request context
++ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
++ *
++ * @retval MFD_SUCCESS : no errors
++ * @retval MFD_ERROR : error (context allocate will fail)
++ */
++int
++dessertAppParamsTable_rowreq_ctx_init(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, void *user_init_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_rowreq_ctx_init", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:210:o: |-> Perform extra dessertAppParamsTable rowreq initialization. (eg DEFVALS)
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_rowreq_ctx_init */
++
++/**
++ * extra context cleanup
++ *
++ */
++void
++dessertAppParamsTable_rowreq_ctx_cleanup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_rowreq_ctx_cleanup", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:211:o: |-> Perform extra dessertAppParamsTable rowreq cleanup.
++ */
++} /* dessertAppParamsTable_rowreq_ctx_cleanup */
++
++/**
++ * pre-request callback
++ *
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error
++ */
++int
++dessertAppParamsTable_pre_request(dessertAppParamsTable_registration *
++ user_context)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_pre_request", "called\n"));
++
++ /*
++ * TODO:510:o: Perform dessertAppParamsTable pre-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_pre_request */
++
++/**
++ * post-request callback
++ *
++ * Note:
++ * New rows have been inserted into the container, and
++ * deleted rows have been removed from the container and
++ * released.
++ *
++ * @param user_context
++ * @param rc : MFD_SUCCESS if all requests succeeded
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error (ignored)
++ */
++int
++dessertAppParamsTable_post_request(dessertAppParamsTable_registration *
++ user_context, int rc)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_post_request", "called\n"));
++
++ /*
++ * TODO:511:o: Perform dessertAppParamsTable post-request actions.
++ */
++
++ /*
++ * check to set if any rows were changed.
++ */
++ if (dessertAppParamsTable_dirty_get()) {
++ /*
++ * check if request was successful. If so, this would be
++ * a good place to save data to its persistent store.
++ */
++ if (MFD_SUCCESS == rc) {
++ /*
++ * save changed rows, if you haven't already
++ */
++ }
++
++ dessertAppParamsTable_dirty_set(0); /* clear table dirty flag */
++ }
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_post_request */
++
++
++/** @{ */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable.h 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,252 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_H
++#define DESSERTAPPPARAMSTABLE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/** @addtogroup misc misc: Miscellaneous routines
++ *
++ * @{
++ */
++#include <net-snmp/library/asn1.h>
++
++ /*
++ * other required module components
++ */
++ /* *INDENT-OFF* */
++config_add_mib(DESSERT-MIB)
++config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_interface)
++config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_access)
++config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_get)
++config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_set)
++ /* *INDENT-ON* */
++
++ /*
++ * OID and column number definitions for dessertAppParamsTable
++ */
++#include "dessertAppParamsTable_oids.h"
++
++ /*
++ * enum definions
++ */
++#include "dessertAppParamsTable_enums.h"
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++ void init_dessertAppParamsTable(void);
++ void shutdown_dessertAppParamsTable(void);
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++ /*
++ *********************************************************************
++ * When you register your mib, you get to provide a generic
++ * pointer that will be passed back to you for most of the
++ * functions calls.
++ *
++ * TODO:100:r: Review all context structures
++ */
++ /*
++ * TODO:101:o: |-> Review dessertAppParamsTable registration context.
++ */
++ typedef netsnmp_data_list dessertAppParamsTable_registration;
++
++/**********************************************************************/
++ /*
++ * TODO:110:r: |-> Review dessertAppParamsTable data context structure.
++ * This structure is used to represent the data for dessertAppParamsTable.
++ */
++ /*
++ * This structure contains storage for all the columns defined in the
++ * dessertAppParamsTable.
++ */
++ typedef struct dessertAppParamsTable_data_s {
++
++ /*
++ * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appParamsName[255];
++ size_t appParamsName_len; /* # of char elements, not bytes */
++
++ /*
++ * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appParamsDesc[255];
++ size_t appParamsDesc_len; /* # of char elements, not bytes */
++
++ /*
++ * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ u_long appParamsValueType;
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ u_long appParamsTruthValue;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ long appParamsInteger32;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ u_long appParamsUnsigned32;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ char appParamsOctetString[1024];
++ size_t appParamsOctetString_len; /* # of char elements, not bytes */
++
++ } dessertAppParamsTable_data;
++
++
++ /*
++ *********************************************************************
++ * TODO:115:o: |-> Review dessertAppParamsTable undo context.
++ * We're just going to use the same data structure for our
++ * undo_context. If you want to do something more efficent,
++ * define your typedef here.
++ */
++ typedef dessertAppParamsTable_data dessertAppParamsTable_undo_data;
++
++ /*
++ * TODO:120:r: |-> Review dessertAppParamsTable mib index.
++ * This structure is used to represent the index for dessertAppParamsTable.
++ */
++ typedef struct dessertAppParamsTable_mib_index_s {
++
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ long appParamsIndex;
++
++
++ } dessertAppParamsTable_mib_index;
++
++ /*
++ * TODO:121:r: | |-> Review dessertAppParamsTable max index length.
++ * If you KNOW that your indexes will never exceed a certain
++ * length, update this macro to that length.
++ */
++#define MAX_dessertAppParamsTable_IDX_LEN 1
++
++
++ /*
++ *********************************************************************
++ * TODO:130:o: |-> Review dessertAppParamsTable Row request (rowreq) context.
++ * When your functions are called, you will be passed a
++ * dessertAppParamsTable_rowreq_ctx pointer.
++ */
++ typedef struct dessertAppParamsTable_rowreq_ctx_s {
++
++ /** this must be first for container compare to work */
++ netsnmp_index oid_idx;
++ oid oid_tmp[MAX_dessertAppParamsTable_IDX_LEN];
++
++ dessertAppParamsTable_mib_index tbl_idx;
++
++ dessertAppParamsTable_data data;
++ unsigned int column_exists_flags; /* flags for existence */
++ dessertAppParamsTable_undo_data *undo;
++ unsigned int column_set_flags; /* flags for set columns */
++
++
++ /*
++ * flags per row. Currently, the first (lower) 8 bits are reserved
++ * for the user. See mfd.h for other flags.
++ */
++ u_int rowreq_flags;
++
++ /*
++ * TODO:131:o: | |-> Add useful data to dessertAppParamsTable rowreq context.
++ */
++
++ /*
++ * storage for future expansion
++ */
++ netsnmp_data_list *dessertAppParamsTable_data_list;
++
++ } dessertAppParamsTable_rowreq_ctx;
++
++ typedef struct dessertAppParamsTable_ref_rowreq_ctx_s {
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
++ } dessertAppParamsTable_ref_rowreq_ctx;
++
++ /*
++ *********************************************************************
++ * function prototypes
++ */
++ int
++ dessertAppParamsTable_pre_request
++ (dessertAppParamsTable_registration * user_context);
++ int
++ dessertAppParamsTable_post_request
++ (dessertAppParamsTable_registration * user_context, int rc);
++
++ int
++ dessertAppParamsTable_rowreq_ctx_init
++ (dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ void *user_init_ctx);
++ void
++ dessertAppParamsTable_rowreq_ctx_cleanup
++ (dessertAppParamsTable_rowreq_ctx * rowreq_ctx);
++
++ int
++ dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ dessertAppParamsTable_rowreq_ctx
++ *dessertAppParamsTable_row_find_by_mib_index
++ (dessertAppParamsTable_mib_index * mib_idx);
++
++ extern oid dessertAppParamsTable_oid[];
++ extern int dessertAppParamsTable_oid_size;
++
++
++#include "dessertAppParamsTable_interface.h"
++#include "dessertAppParamsTable_data_access.h"
++#include "dessertAppParamsTable_data_get.h"
++#include "dessertAppParamsTable_data_set.h"
++
++ /*
++ * DUMMY markers, ignore
++ *
++ * TODO:099:x: *************************************************************
++ * TODO:199:x: *************************************************************
++ * TODO:299:x: *************************************************************
++ * TODO:399:x: *************************************************************
++ * TODO:499:x: *************************************************************
++ */
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_access.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_access.c 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,352 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++#include "dessertAppParamsTable_data_access.h"
++#include <dessert/dessert.h>
++#include "dessert_internal.h"
++
++
++/** @ingroup interface
++ * @addtogroup data_access data_access: Routines to access data
++ *
++ * These routines are used to locate the data used to satisfy
++ * requests.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++
++/**
++ * initialization for dessertAppParamsTable data access
++ *
++ * This function is called during startup to allow you to
++ * allocate any resources you need for the data table.
++ *
++ * @param dessertAppParamsTable_reg
++ * Pointer to dessertAppParamsTable_registration
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : unrecoverable error.
++ */
++int
++dessertAppParamsTable_init_data(dessertAppParamsTable_registration *
++ dessertAppParamsTable_reg)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_init_data", "called\n"));
++
++ /*
++ * TODO:303:o: Initialize dessertAppParamsTable data.
++ */
++
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_init_data */
++
++/**
++ * container overview
++ *
++ */
++
++/**
++ * container initialization
++ *
++ * @param container_ptr_ptr A pointer to a container pointer. If you
++ * create a custom container, use this parameter to return it
++ * to the MFD helper. If set to NULL, the MFD helper will
++ * allocate a container for you.
++ *
++ * This function is called at startup to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases. If no custom
++ * container is allocated, the MFD code will create one for your.
++ *
++ * @remark
++ * This would also be a good place to do any initialization needed
++ * for you data source. For example, opening a connection to another
++ * process that will supply the data, opening a database, etc.
++ */
++void
++dessertAppParamsTable_container_init(netsnmp_container **
++ container_ptr_ptr, netsnmp_cache * cache)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_init", "called\n"));
++
++ if (NULL == container_ptr_ptr) {
++ snmp_log(LOG_ERR,
++ "bad container param to dessertAppParamsTable_container_init\n");
++ return;
++ }
++
++ /*
++ * For advanced users, you can use a custom container. If you
++ * do not create one, one will be created for you.
++ */
++ *container_ptr_ptr = NULL;
++ if (NULL == cache) {
++ snmp_log(LOG_ERR,
++ "bad cache param to dessertAppParamsTable_container_init\n");
++ return;
++ }
++
++ /*
++ * TODO:345:A: Set up dessertAppStatsTable cache properties.
++ *
++ * Also for advanced users, you can set parameters for the
++ * cache. Do not change the magic pointer, as it is used
++ * by the MFD helper. To completely disable caching, set
++ * cache->enabled to 0.
++ */
++ cache->timeout = DESSERTAPPPARAMSTABLE_CACHE_TIMEOUT; /* seconds */
++} /* dessertAppParamsTable_container_init */
++
++/**
++ * container shutdown
++ *
++ * @param container_ptr A pointer to the container.
++ *
++ * This function is called at shutdown to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases.
++ *
++ * This function is called before dessertAppParamsTable_container_free().
++ *
++ * @remark
++ * This would also be a good place to do any cleanup needed
++ * for you data source. For example, closing a connection to another
++ * process that supplied the data, closing a database, etc.
++ */
++void
++dessertAppParamsTable_container_shutdown(netsnmp_container * container_ptr)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_shutdown", "called\n"));
++
++ if (NULL == container_ptr) {
++ snmp_log(LOG_ERR,
++ "bad params to dessertAppParamsTable_container_shutdown\n");
++ return;
++ }
++
++} /* dessertAppParamsTable_container_shutdown */
++
++/**
++ * load initial data
++ *
++ * TODO:350:M: Implement dessertAppParamsTable data load
++ *
++ * @param container container to which items should be inserted
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
++ * @retval MFD_ERROR : other error.
++ *
++ * This function is called to load the index(es) (and data, optionally)
++ * for the every row in the data set.
++ *
++ * @remark
++ * While loading the data, the only important thing is the indexes.
++ * If access to your data is cheap/fast (e.g. you have a pointer to a
++ * structure in memory), it would make sense to update the data here.
++ * If, however, the accessing the data invovles more work (e.g. parsing
++ * some other existing data, or peforming calculations to derive the data),
++ * then you can limit yourself to setting the indexes and saving any
++ * information you will need later. Then use the saved information in
++ * dessertAppParamsTable_row_prep() for populating data.
++ *
++ * @note
++ * If you need consistency between rows (like you want statistics
++ * for each row to be from the same time frame), you should set all
++ * data here.
++ *
++ */
++int
++dessertAppParamsTable_container_load(netsnmp_container * container)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
++ size_t count = 0;
++
++ dessert_agentx_appparams_t *appparams_list = NULL;
++ dessert_agentx_appparams_t *appparam;
++
++ /*
++ * temporary storage for index values
++ */
++ long appParamsIndex;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_load", "called\n"));
++ dessert_debug("dessertAppParamsTable_container_load called");
++
++ /* harvest the appparams from the getter callbacks registered via *dessert_agentx_appparams_add* */
++ if (_dessert_agentx_appparams_harvest_callbacks(&appparams_list)
++ == DESSERT_ERR) {
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++
++ /*
++ * TODO:351:M: |-> Load/update data in the dessertAppParamsTable container.
++ * loop over your dessertAppParamsTable data, allocate a rowreq context,
++ * set the index(es) [and data, optionally] and insert into
++ * the container.
++ */
++ DL_FOREACH(appparams_list, appparam) {
++
++ appParamsIndex = appparam->index;
++
++ /*
++ * TODO:352:M: | |-> set indexes in new dessertAppParamsTable rowreq context.
++ * data context will be set from the param (unless NULL,
++ * in which case a new data context will be allocated)
++ */
++ rowreq_ctx = dessertAppParamsTable_allocate_rowreq_ctx();
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "memory allocation failed\n");
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++ if (MFD_SUCCESS !=
++ dessertAppParamsTable_indexes_set(rowreq_ctx,
++ appParamsIndex)) {
++ snmp_log(LOG_ERR,
++ "error setting index while loading "
++ "dessertAppParamsTable data.\n");
++ dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
++ continue;
++ }
++
++ /* clear all column flags */
++ rowreq_ctx->column_exists_flags = 0;
++
++ /* these columns are always present*/
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSNAME_FLAG
++ | COLUMN_APPPARAMSDESC_FLAG | COLUMN_APPPARAMSVALUETYPE_FLAG;
++
++ rowreq_ctx->data.appParamsName_len = strlen(appparam->name);
++ strcpy(rowreq_ctx->data.appParamsName, appparam->name);
++
++ rowreq_ctx->data.appParamsDesc_len = strlen(appparam->desc);
++ strcpy(rowreq_ctx->data.appParamsDesc, appparam->desc);
++
++ appParamsValueType_map(&(rowreq_ctx->data.appParamsValueType), appparam->value_type);
++
++ /* which of the 'value'-columns is actually present? */
++ switch (appparam->value_type) {
++
++ case DESSERT_APPPARAMS_VALUETYPE_BOOL:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ appParamsTruthValue_map(&(rowreq_ctx->data.appParamsTruthValue) , appparam->bool);
++
++ break;
++
++ case DESSERT_APPPARAMS_VALUETYPE_INT32:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
++ rowreq_ctx->data.appParamsInteger32 = appparam->int32;
++
++ break;
++
++ case DESSERT_APPPARAMS_VALUETYPE_UINT32:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ rowreq_ctx->data.appParamsUnsigned32 = appparam->uint32;
++
++ break;
++
++ case DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ rowreq_ctx->data.appParamsOctetString_len = appparam->octetstring_len;
++ memcpy(&(rowreq_ctx->data.appParamsOctetString), appparam->octetstring, appparam->octetstring_len);
++
++ break;
++
++ default:
++ dessert_err("appparam->value_type not valid!");
++ }
++
++ /*
++ * insert into table container
++ */
++ CONTAINER_INSERT(container, rowreq_ctx);
++ }
++
++ _dessert_agentx_appparams_free_list(&appparams_list);
++
++ DEBUGMSGT(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_load", "inserted %d records\n", count));
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_container_load */
++
++/**
++ * container clean up
++ *
++ * @param container container with all current items
++ *
++ * This optional callback is called prior to all
++ * item's being removed from the container. If you
++ * need to do any processing before that, do it here.
++ *
++ * @note
++ * The MFD helper will take care of releasing all the row contexts.
++ *
++ */
++void
++dessertAppParamsTable_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_free", "called\n"));
++
++ /*
++ * TODO:380:M: Free dessertAppParamsTable container data.
++ */
++} /* dessertAppParamsTable_container_free */
++
++/**
++ * prepare row for processing.
++ *
++ * When the agent has located the row for a request, this function is
++ * called to prepare the row for processing. If you fully populated
++ * the data context during the index setup phase, you may not need to
++ * do anything.
++ *
++ * @param rowreq_ctx pointer to a context.
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ */
++int
++dessertAppParamsTable_row_prep(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_row_prep", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:390:o: Prepare row for request.
++ * If populating row data was delayed, this is the place to
++ * fill in the row for this request.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_row_prep */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_access.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_access.h 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,93 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_DATA_ACCESS_H
++#define DESSERTAPPPARAMSTABLE_DATA_ACCESS_H
++
++#include "dessert_internal.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++
++
++ int
++ dessertAppParamsTable_init_data(dessertAppParamsTable_registration
++ * dessertAppParamsTable_reg);
++
++
++ /*
++ * TODO:180:o: Review dessertAppParamsTable cache timeout.
++ * The number of seconds before the cache times out
++ */
++#define DESSERTAPPPARAMSTABLE_CACHE_TIMEOUT DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT
++
++ void dessertAppParamsTable_container_init(netsnmp_container
++ **
++ container_ptr_ptr,
++ netsnmp_cache *
++ cache);
++ void
++ dessertAppParamsTable_container_shutdown(netsnmp_container *
++ container_ptr);
++
++ int dessertAppParamsTable_container_load(netsnmp_container
++ * container);
++ void dessertAppParamsTable_container_free(netsnmp_container
++ * container);
++
++ int dessertAppParamsTable_cache_load(netsnmp_container *
++ container);
++ void dessertAppParamsTable_cache_free(netsnmp_container *
++ container);
++
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ *********************************************************************
++ * Since we have no idea how you really access your data, we'll go with
++ * a worst case example: a flat text file.
++ */
++#define MAX_LINE_SIZE 256
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++ int
++ dessertAppParamsTable_row_prep(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_get.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_get.c 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,731 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++
++
++/** @defgroup data_get data_get: Routines to get data
++ *
++ * TODO:230:M: Implement dessertAppParamsTable get routines.
++ * TODO:240:M: Implement dessertAppParamsTable mapping routines (if any).
++ *
++ * These routine are used to get the value for individual objects. The
++ * row context is passed, along with a pointer to the memory where the
++ * value should be copied.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++
++/*
++ * ---------------------------------------------------------------------
++ * * TODO:200:r: Implement dessertAppParamsTable data context functions.
++ */
++
++
++/**
++ * set mib index(es)
++ *
++ * @param tbl_idx mib index structure
++ * @param appParamsIndex_val
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This convenience function is useful for setting all the MIB index
++ * components with a single function call. It is assume that the C values
++ * have already been mapped from their native/rawformat to the MIB format.
++ */
++int
++dessertAppParamsTable_indexes_set_tbl_idx(dessertAppParamsTable_mib_index *
++ tbl_idx, long appParamsIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_indexes_set_tbl_idx", "called\n"));
++
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ tbl_idx->appParamsIndex = appParamsIndex_val;
++
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_indexes_set_tbl_idx */
++
++/**
++ * @internal
++ * set row context indexes
++ *
++ * @param reqreq_ctx the row context that needs updated indexes
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This function sets the mib indexs, then updates the oid indexs
++ * from the mib index.
++ */
++int
++dessertAppParamsTable_indexes_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, long appParamsIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_indexes_set", "called\n"));
++
++ if (MFD_SUCCESS !=
++ dessertAppParamsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
++ appParamsIndex_val))
++ return MFD_ERROR;
++
++ /*
++ * convert mib index to oid index
++ */
++ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
++ if (0 != dessertAppParamsTable_index_to_oid(&rowreq_ctx->oid_idx,
++ &rowreq_ctx->tbl_idx)) {
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_indexes_set */
++
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsName
++ * appParamsName is subid 2 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.2
++ * Description:
++The name of the parameter.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the appParamsName data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsName_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appParamsName_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appParamsName.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appParamsName_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appParamsName_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appParamsName_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ char **appParamsName_val_ptr_ptr,
++ size_t *appParamsName_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appParamsName_val_ptr_ptr)
++ && (NULL != *appParamsName_val_ptr_ptr));
++ netsnmp_assert(NULL != appParamsName_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsName_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsName data.
++ * copy (* appParamsName_val_ptr_ptr ) data and (* appParamsName_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appParamsName data
++ */
++ if ((NULL == (*appParamsName_val_ptr_ptr)) ||
++ ((*appParamsName_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appParamsName_len *
++ sizeof(rowreq_ctx->data.appParamsName[0])))) {
++ /*
++ * allocate space for appParamsName data
++ */
++ (*appParamsName_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appParamsName_len *
++ sizeof(rowreq_ctx->data.appParamsName[0]));
++ if (NULL == (*appParamsName_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appParamsName_val_ptr_len_ptr) =
++ rowreq_ctx->data.appParamsName_len *
++ sizeof(rowreq_ctx->data.appParamsName[0]);
++ memcpy((*appParamsName_val_ptr_ptr), rowreq_ctx->data.appParamsName,
++ rowreq_ctx->data.appParamsName_len *
++ sizeof(rowreq_ctx->data.appParamsName[0]));
++
++ return MFD_SUCCESS;
++} /* appParamsName_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsDesc
++ * appParamsDesc is subid 3 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.3
++ * Description:
++A short description of the parameter
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the appParamsDesc data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsDesc_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appParamsDesc_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appParamsDesc.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appParamsDesc_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appParamsDesc_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appParamsDesc_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ char **appParamsDesc_val_ptr_ptr,
++ size_t *appParamsDesc_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appParamsDesc_val_ptr_ptr)
++ && (NULL != *appParamsDesc_val_ptr_ptr));
++ netsnmp_assert(NULL != appParamsDesc_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsDesc_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsDesc data.
++ * copy (* appParamsDesc_val_ptr_ptr ) data and (* appParamsDesc_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appParamsDesc data
++ */
++ if ((NULL == (*appParamsDesc_val_ptr_ptr)) ||
++ ((*appParamsDesc_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appParamsDesc_len *
++ sizeof(rowreq_ctx->data.appParamsDesc[0])))) {
++ /*
++ * allocate space for appParamsDesc data
++ */
++ (*appParamsDesc_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appParamsDesc_len *
++ sizeof(rowreq_ctx->data.appParamsDesc[0]));
++ if (NULL == (*appParamsDesc_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appParamsDesc_val_ptr_len_ptr) =
++ rowreq_ctx->data.appParamsDesc_len *
++ sizeof(rowreq_ctx->data.appParamsDesc[0]);
++ memcpy((*appParamsDesc_val_ptr_ptr), rowreq_ctx->data.appParamsDesc,
++ rowreq_ctx->data.appParamsDesc_len *
++ sizeof(rowreq_ctx->data.appParamsDesc[0]));
++
++ return MFD_SUCCESS;
++} /* appParamsDesc_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsValueType
++ * appParamsValueType is subid 4 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.4
++ * Description:
++Indicates which of the columns (appParamsTruthValue,
++ appParamsInterger32, appParamsUInteger32, appParamsOctetString) in the
++ dessertAppParamsTable is actually valid.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ * Enum range: 3/8. Values: bool(0), int32(1), uint32(2), counter64(3), octetstring(4)
++ *
++ * Its syntax is DessertAppValueType (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appParamsValueType.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appParamsValueType_map(u_long * mib_appParamsValueType_val_ptr,
++ u_long raw_appParamsValueType_val)
++{
++ netsnmp_assert(NULL != mib_appParamsValueType_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsValueType_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appParamsValueType enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appParamsValueType_val) {
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_BOOL:
++ *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_BOOL;
++ break;
++
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_INT32:
++ *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_INT32;
++ break;
++
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_UINT32:
++ *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_UINT32;
++ break;
++
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_OCTETSTRING:
++ *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_OCTETSTRING;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't map value %ld for appParamsValueType\n",
++ raw_appParamsValueType_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appParamsValueType_map */
++
++/**
++ * Extract the current value of the appParamsValueType data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsValueType_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appParamsValueType_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appParamsValueType_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appParamsValueType_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsValueType_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsValueType data.
++ * copy (* appParamsValueType_val_ptr ) from rowreq_ctx->data
++ */
++ (*appParamsValueType_val_ptr) = rowreq_ctx->data.appParamsValueType;
++
++ return MFD_SUCCESS;
++} /* appParamsValueType_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsTruthValue
++ * appParamsTruthValue is subid 5 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.5
++ * Description:
++A parameter with TruthValue semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ * Enum range: 2/8. Values: true(1), false(2)
++ *
++ * Its syntax is TruthValue (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appParamsTruthValue.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appParamsTruthValue_map(u_long * mib_appParamsTruthValue_val_ptr,
++ u_long raw_appParamsTruthValue_val)
++{
++ netsnmp_assert(NULL != mib_appParamsTruthValue_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appParamsTruthValue enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appParamsTruthValue_val) {
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE:
++ *mib_appParamsTruthValue_val_ptr = TRUTHVALUE_TRUE;
++ break;
++
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE:
++ *mib_appParamsTruthValue_val_ptr = TRUTHVALUE_FALSE;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't map value %ld for appParamsTruthValue\n",
++ raw_appParamsTruthValue_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_map */
++
++/**
++ * Extract the current value of the appParamsTruthValue data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsTruthValue_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appParamsTruthValue_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appParamsTruthValue_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appParamsTruthValue_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsTruthValue data.
++ * copy (* appParamsTruthValue_val_ptr ) from rowreq_ctx->data
++ */
++ (*appParamsTruthValue_val_ptr) = rowreq_ctx->data.appParamsTruthValue;
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsInteger32
++ * appParamsInteger32 is subid 6 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.6
++ * Description:
++A parameter with Integer32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ *
++ * Its syntax is INTEGER32 (based on perltype INTEGER32)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
++ */
++/**
++ * Extract the current value of the appParamsInteger32 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsInteger32_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appParamsInteger32_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ long *appParamsInteger32_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appParamsInteger32_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsInteger32 data.
++ * copy (* appParamsInteger32_val_ptr ) from rowreq_ctx->data
++ */
++ (*appParamsInteger32_val_ptr) = rowreq_ctx->data.appParamsInteger32;
++
++ return MFD_SUCCESS;
++} /* appParamsInteger32_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsUnsigned32
++ * appParamsUnsigned32 is subid 7 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.7
++ * Description:
++A parameter with Unsigned32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ *
++ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
++ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
++ */
++/**
++ * Extract the current value of the appParamsUnsigned32 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsUnsigned32_val_ptr
++ * Pointer to storage for a u_long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appParamsUnsigned32_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appParamsUnsigned32_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appParamsUnsigned32_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsUnsigned32 data.
++ * copy (* appParamsUnsigned32_val_ptr ) from rowreq_ctx->data
++ */
++ (*appParamsUnsigned32_val_ptr) = rowreq_ctx->data.appParamsUnsigned32;
++
++ return MFD_SUCCESS;
++} /* appParamsUnsigned32_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsOctetString
++ * appParamsOctetString is subid 9 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.9
++ * Description:
++A parameter containing of up to 1024 octets.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 1
++ * hint: 1024a
++ *
++ * Ranges: 0 - 1024;
++ *
++ * Its syntax is DessertApplicationOctetString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 1024)
++ */
++/**
++ * Extract the current value of the appParamsOctetString data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsOctetString_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appParamsOctetString_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appParamsOctetString.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appParamsOctetString_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appParamsOctetString_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appParamsOctetString_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ char **appParamsOctetString_val_ptr_ptr,
++ size_t *appParamsOctetString_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appParamsOctetString_val_ptr_ptr)
++ && (NULL != *appParamsOctetString_val_ptr_ptr));
++ netsnmp_assert(NULL != appParamsOctetString_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsOctetString data.
++ * copy (* appParamsOctetString_val_ptr_ptr ) data and (* appParamsOctetString_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appParamsOctetString data
++ */
++ if ((NULL == (*appParamsOctetString_val_ptr_ptr)) ||
++ ((*appParamsOctetString_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0])))) {
++ /*
++ * allocate space for appParamsOctetString data
++ */
++ (*appParamsOctetString_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0]));
++ if (NULL == (*appParamsOctetString_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appParamsOctetString_val_ptr_len_ptr) =
++ rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0]);
++ memcpy((*appParamsOctetString_val_ptr_ptr),
++ rowreq_ctx->data.appParamsOctetString,
++ rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0]));
++
++ return MFD_SUCCESS;
++} /* appParamsOctetString_get */
++
++
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_get.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_get.h 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,136 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ *
++ * @file dessertAppParamsTable_data_get.h
++ *
++ * @addtogroup get
++ *
++ * Prototypes for get functions
++ *
++ * @{
++ */
++#ifndef DESSERTAPPPARAMSTABLE_DATA_GET_H
++#define DESSERTAPPPARAMSTABLE_DATA_GET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * GET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * GET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++ /*
++ * indexes
++ */
++ int appParamsIndex_map(long *mib_appParamsIndex_val_ptr,
++ long raw_appParamsIndex_val);
++
++ int appParamsName_map(char **mib_appParamsName_val_ptr_ptr,
++ size_t
++ *mib_appParamsName_val_ptr_len_ptr,
++ char *raw_appParamsName_val_ptr,
++ size_t raw_appParamsName_val_ptr_len,
++ int allow_realloc);
++ int appParamsName_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appParamsName_val_ptr_ptr,
++ size_t
++ *appParamsName_val_ptr_len_ptr);
++ int appParamsDesc_map(char **mib_appParamsDesc_val_ptr_ptr,
++ size_t
++ *mib_appParamsDesc_val_ptr_len_ptr,
++ char *raw_appParamsDesc_val_ptr,
++ size_t raw_appParamsDesc_val_ptr_len,
++ int allow_realloc);
++ int appParamsDesc_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appParamsDesc_val_ptr_ptr,
++ size_t
++ *appParamsDesc_val_ptr_len_ptr);
++ int appParamsValueType_map(u_long *
++ mib_appParamsValueType_val_ptr,
++ u_long
++ raw_appParamsValueType_val);
++ int appParamsValueType_get(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long *
++ appParamsValueType_val_ptr);
++ int appParamsTruthValue_map(u_long *
++ mib_appParamsTruthValue_val_ptr,
++ u_long
++ raw_appParamsTruthValue_val);
++ int
++ appParamsTruthValue_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long * appParamsTruthValue_val_ptr);
++ int appParamsInteger32_map(long
++ *mib_appParamsInteger32_val_ptr,
++ long
++ raw_appParamsInteger32_val);
++ int appParamsInteger32_get(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ long
++ *appParamsInteger32_val_ptr);
++ int appParamsUnsigned32_map(u_long *
++ mib_appParamsUnsigned32_val_ptr,
++ u_long
++ raw_appParamsUnsigned32_val);
++ int
++ appParamsUnsigned32_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long * appParamsUnsigned32_val_ptr);
++ int appParamsOctetString_map(char
++ **mib_appParamsOctetString_val_ptr_ptr,
++ size_t
++ *mib_appParamsOctetString_val_ptr_len_ptr,
++ char
++ *raw_appParamsOctetString_val_ptr,
++ size_t
++ raw_appParamsOctetString_val_ptr_len,
++ int allow_realloc);
++ int
++ appParamsOctetString_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appParamsOctetString_val_ptr_ptr,
++ size_t
++ *appParamsOctetString_val_ptr_len_ptr);
++
++
++ int
++ dessertAppParamsTable_indexes_set_tbl_idx
++ (dessertAppParamsTable_mib_index * tbl_idx,
++ long appParamsIndex_val);
++ int
++ dessertAppParamsTable_indexes_set(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ long appParamsIndex_val);
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_DATA_GET_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_set.c 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,1241 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++#include "dessertAppParamsTable_enums.h"
++#include "dessert_internal.h"
++
++
++/** @defgroup data_set data_set: Routines to set data
++ *
++ * These routines are used to set the value for individual objects. The
++ * row context is passed, along with the new value.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++ /*
++ * NOTE: if you update this chart, please update the versions in
++ * local/mib2c-conf.d/parent-set.m2i
++ * agent/mibgroup/helpers/baby_steps.c
++ * while you're at it.
++ */
++ /*
++ ***********************************************************************
++ * Baby Steps Flow Chart (2004.06.05) *
++ * *
++ * +--------------+ +================+ U = unconditional path *
++ * |optional state| ||required state|| S = path for success *
++ * +--------------+ +================+ E = path for error *
++ ***********************************************************************
++ *
++ * +--------------+
++ * | pre |
++ * | request |
++ * +--------------+
++ * | U
++ * +==============+
++ * +----------------|| object ||
++ * | E || lookup ||
++ * | +==============+
++ * | | S
++ * | +==============+
++ * | E || check ||
++ * |<---------------|| values ||
++ * | +==============+
++ * | | S
++ * | +==============+
++ * | +<-------|| undo ||
++ * | | E || setup ||
++ * | | +==============+
++ * | | | S
++ * | | +==============+
++ * | | || set ||-------------------------->+
++ * | | || value || E |
++ * | | +==============+ |
++ * | | | S |
++ * | | +--------------+ |
++ * | | | check |-------------------------->|
++ * | | | consistency | E |
++ * | | +--------------+ |
++ * | | | S |
++ * | | +==============+ +==============+ |
++ * | | || commit ||-------->|| undo || |
++ * | | || || E || commit || |
++ * | | +==============+ +==============+ |
++ * | | | S U |<--------+
++ * | | +--------------+ +==============+
++ * | | | irreversible | || undo ||
++ * | | | commit | || set ||
++ * | | +--------------+ +==============+
++ * | | | U U |
++ * | +-------------->|<------------------------+
++ * | +==============+
++ * | || undo ||
++ * | || cleanup ||
++ * | +==============+
++ * +---------------------->| U
++ * +--------------+
++ * | post |
++ * | request |
++ * +--------------+
++ *
++ */
++
++/**
++ * Setup up context with information needed to undo a set request.
++ *
++ * This function will be called before the individual node undo setup
++ * functions are called. If you need to do any undo setup that is not
++ * related to a specific column, you can do it here.
++ *
++ * Note that the undo context has been allocated with
++ * dessertAppParamsTable_allocate_data(), but may need extra
++ * initialization similar to what you may have done in
++ * dessertAppParamsTable_rowreq_ctx_init().
++ * Note that an individual node's undo_setup function will only be called
++ * if that node is being set to a new value.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in the node's undo_setup
++ * function, so it won't be done unless it is necessary.
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ */
++int
++dessertAppParamsTable_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_setup", "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:451:M: |-> Setup dessertAppParamsTable undo.
++ * set up dessertAppParamsTable undo information, in preparation for a set.
++ * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
++ */
++
++ return rc;
++} /* dessertAppParamsTable_undo_setup */
++
++/**
++ * Undo a set request.
++ *
++ * This function will be called before the individual node undo
++ * functions are called. If you need to do any undo that is not
++ * related to a specific column, you can do it here.
++ *
++ * Note that an individual node's undo function will only be called
++ * if that node is being set to a new value.
++ *
++ * If there is anything specific to a particular column (e.g. releasing
++ * memory for a string), you should do that setup in the node's undo
++ * function, so it won't be done unless it is necessary.
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ */
++int
++dessertAppParamsTable_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo",
++ "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:451:M: |-> dessertAppParamsTable undo.
++ * dessertAppParamsTable undo information, in response to a failed set.
++ * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
++ */
++
++ return rc;
++} /* dessertAppParamsTable_undo_setup */
++
++/**
++ * Cleanup up context undo information.
++ *
++ * This function will be called after set/commit processing. If you
++ * allocated any resources in undo_setup, this is the place to release
++ * those resources.
++ *
++ * This function is called regardless of the success or failure of the set
++ * request. If you need to perform different steps for cleanup depending
++ * on success or failure, you can add a flag to the rowreq_ctx.
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error
++ */
++int
++dessertAppParamsTable_undo_cleanup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_cleanup", "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:452:M: |-> Cleanup dessertAppParamsTable undo.
++ * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
++ */
++
++ return rc;
++} /* dessertAppParamsTable_undo_cleanup */
++
++/**
++ * commit new values.
++ *
++ * At this point, you should have done everything you can to ensure that
++ * this commit will not fail.
++ *
++ * Should you need different behavior depending on which columns were
++ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
++ * set. The definitions for the COLUMN_*_FLAG bits can be found in
++ * dessertAppParamsTable_oids.h.
++ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
++ *
++ * @param dessertAppParamsTable_rowreq_ctx
++ * Pointer to the users context.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error
++ */
++int
++dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++ int save_flags;
++ dessert_agentx_appparams_t *appparam;
++ dessert_agentx_appparamscb_set_t *set;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_commit", "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ set = _dessert_agentx_appparams_getsettercbforindex(rowreq_ctx->tbl_idx.appParamsIndex);
++
++ if (set == NULL) {
++ snmp_log(
++ LOG_ERR,
++ "dessertAppParamsTable commit failed, no setter for index %ld!\n",
++ rowreq_ctx->tbl_idx.appParamsIndex);
++ return MFD_ERROR;
++ }
++
++ /*
++ * save flags, then clear until we actually do something
++ */
++ save_flags = rowreq_ctx->column_set_flags;
++ rowreq_ctx->column_set_flags = 0;
++
++ appparam = malloc(sizeof(dessert_agentx_appparams_t));
++
++ appparam->index = rowreq_ctx->tbl_idx.appParamsIndex;
++ appparam->value_type = rowreq_ctx->data.appParamsValueType;
++
++ dessert_debug("commit\n"
++ "\n\t\trowreq_ctx->tbl_idx \t[%u]"
++ "\n\t\trowreq_ctx->data.appParamsValueType \t[%u]"
++ "\n\t\trowreq_ctx->data.appParamsTruthValue \t[%u]"
++ "\n\t\trowreq_ctx->data.appParamsInteger32 \t[%d]"
++ "\n\t\trowreq_ctx->data.appParamsUnsigned32 \t[%u]"
++ "\n\t\trowreq_ctx->data.appParamsOctetString_len \t[%u]"
++
++ "\n",rowreq_ctx->tbl_idx,
++ rowreq_ctx->data.appParamsValueType,
++ rowreq_ctx->data.appParamsTruthValue,
++ rowreq_ctx->data.appParamsInteger32,
++ rowreq_ctx->data.appParamsUnsigned32,
++ rowreq_ctx->data.appParamsOctetString_len
++ );
++
++ /*
++ * commit dessertAppParamsTable data
++ * 1) check the column's flag in save_flags to see if it was set.
++ * 2) clear the flag when you handle that column
++ * 3) set the column's flag in column_set_flags if it needs undo
++ * processing in case of a failure.
++ */
++ if (save_flags & COLUMN_APPPARAMSTRUTHVALUE_FLAG) {
++ /* clear appParamsTruthValue */
++ save_flags &= ~COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ /*
++ * commit column appParamsTruthValue.
++ */
++
++ appparam->bool = rowreq_ctx->data.appParamsTruthValue;
++
++ rc = set(appparam);
++ if (DESSERT_ERR == rc) {
++ snmp_log(LOG_ERR,
++ "dessertAppParamsTable column appParamsTruthValue commit failed\n");
++ } else {
++ /*
++ * set flag, in case we need to undo appParamsTruthValue
++ */
++ rowreq_ctx->column_set_flags |=
++ COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ }
++ }
++
++ if (save_flags & COLUMN_APPPARAMSINTEGER32_FLAG) {
++ /* clear appParamsInteger32 */
++ save_flags &= ~COLUMN_APPPARAMSINTEGER32_FLAG;
++ /*
++ * commit column appParamsInteger32.
++ */
++
++ appparam->int32 = rowreq_ctx->data.appParamsInteger32;
++
++ rc = set(appparam);
++ if (DESSERT_ERR == rc) {
++ snmp_log(LOG_ERR,
++ "dessertAppParamsTable column appParamsInteger32 commit failed\n");
++ } else {
++ /*
++ * set flag, in case we need to undo appParamsInteger32
++ */
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
++ }
++ }
++
++ if (save_flags & COLUMN_APPPARAMSUNSIGNED32_FLAG) {
++ /* clear appParamsUnsigned32 */
++ save_flags &= ~COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ /*
++ * commit column appParamsUnsigned32.
++ */
++
++ appparam->uint32 = rowreq_ctx->data.appParamsUnsigned32;
++
++ rc = set(appparam);
++ if (DESSERT_ERR == rc) {
++ snmp_log(LOG_ERR,
++ "dessertAppParamsTable column appParamsUnsigned32 commit failed\n");
++ } else {
++ /*
++ * set flag, in case we need to undo appParamsUnsigned32
++ */
++ rowreq_ctx->column_set_flags |=
++ COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ }
++ }
++
++ if (save_flags & COLUMN_APPPARAMSOCTETSTRING_FLAG) {
++ /* clear appParamsOctetString */
++ save_flags &= ~COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ /*
++ * TODO:482:o: |-> commit column appParamsOctetString.
++ */
++
++ appparam->octetstring_len = rowreq_ctx->data.appParamsOctetString_len;
++ appparam->octetstring = malloc(sizeof(char) * appparam->octetstring_len);
++ memcpy(appparam->octetstring, rowreq_ctx->data.appParamsOctetString, rowreq_ctx->data.appParamsOctetString_len * sizeof(rowreq_ctx->data.appParamsOctetString[0]));
++
++ rc = set(appparam);
++ if (DESSERT_ERR == rc) {
++ snmp_log(LOG_ERR,
++ "dessertAppParamsTable column appParamsOctetString commit failed\n");
++ } else {
++ /*
++ * set flag, in case we need to undo appParamsOctetString
++ */
++ dessert_debug("dessertAppParamsTable column appParamsOctetString commited");
++ rowreq_ctx->column_set_flags |=
++ COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ }
++ }
++
++ if (rc == DESSERT_ERR) rc = -1; else {rc = MFD_SUCCESS;}
++
++ /*
++ * if we successfully committed this row, set the dirty flag.
++ */
++ if (MFD_SUCCESS == rc) {
++ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
++ }
++
++ if (save_flags) {
++ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
++ save_flags);
++ return MFD_ERROR;
++ }
++
++ _dessert_agentx_appparams_free(appparam);
++
++ return rc;
++} /* dessertAppParamsTable_commit */
++
++/**
++ * undo commit new values.
++ *
++ * Should you need different behavior depending on which columns were
++ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
++ * set. The definitions for the COLUMN_*_FLAG bits can be found in
++ * dessertAppParamsTable_oids.h.
++ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
++ *
++ * @param dessertAppParamsTable_rowreq_ctx
++ * Pointer to the users context.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error
++ */
++int
++dessertAppParamsTable_undo_commit(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_commit", "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:485:M: |-> Undo dessertAppParamsTable commit.
++ * check the column's flag in rowreq_ctx->column_set_flags to see
++ * if it was set during commit, then undo it.
++ *
++ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
++ */
++
++
++ /*
++ * if we successfully un-commited this row, clear the dirty flag.
++ */
++ if (MFD_SUCCESS == rc) {
++ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
++ }
++
++ return rc;
++} /* dessertAppParamsTable_undo_commit */
++
++/*
++ * TODO:440:M: Implement dessertAppParamsTable node value checks.
++ * TODO:450:M: Implement dessertAppParamsTable undo functions.
++ * TODO:460:M: Implement dessertAppParamsTable set functions.
++ * TODO:480:M: Implement dessertAppParamsTable commit functions.
++ */
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsTruthValue
++ * appParamsTruthValue is subid 5 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.5
++ * Description:
++A parameter with TruthValue semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ * Enum range: 2/8. Values: true(1), false(2)
++ *
++ * Its syntax is TruthValue (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * Check that the proposed new value is potentially valid.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsTruthValue_val
++ * A long containing the new value.
++ *
++ * @retval MFD_SUCCESS : incoming value is legal
++ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
++ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
++ *
++ * This is the place to check for requirements that are not
++ * expressed in the mib syntax (for example, a requirement that
++ * is detailed in the description for an object).
++ *
++ * You should check that the requested change between the undo value and the
++ * new value is legal (ie, the transistion from one value to another
++ * is legal).
++ *
++ *@note
++ * This check is only to determine if the new value
++ * is \b potentially valid. This is the first check of many, and
++ * is one of the simplest ones.
++ *
++ *@note
++ * this is not the place to do any checks for values
++ * which depend on some other value in the mib. Those
++ * types of checks should be done in the
++ * dessertAppParamsTable_check_dependencies() function.
++ *
++ * The following checks have already been done for you:
++ * The syntax is ASN_INTEGER
++ * The value is one of true(1), false(2)
++ *
++ * If there a no other checks you need to do, simply return MFD_SUCCESS.
++ *
++ */
++int
++appParamsTruthValue_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, u_long appParamsTruthValue_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_check_value", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * Check for valid appParamsTruthValue value.
++ */
++
++ if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_BOOL) {
++
++ return MFD_NOT_VALID_EVER;
++ } else {
++
++ return MFD_SUCCESS; /* appParamsTruthValue value not illegal */
++ }
++} /* appParamsTruthValue_check_value */
++
++/**
++ * Save old value information
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ *
++ * This function will be called after the table level undo setup function
++ * dessertAppParamsTable_undo_setup has been called.
++ *
++ *@note
++ * this function will only be called if a new value is set for this column.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in this function, so it
++ * won't be done unless it is necessary.
++ */
++int
++appParamsTruthValue_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_undo_setup", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:455:o: |-> Setup appParamsTruthValue undo.
++ */
++ /*
++ * copy appParamsTruthValue data
++ * set rowreq_ctx->undo->appParamsTruthValue from rowreq_ctx->data.appParamsTruthValue
++ */
++ rowreq_ctx->undo->appParamsTruthValue =
++ rowreq_ctx->data.appParamsTruthValue;
++
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_undo_setup */
++
++/**
++ * Set the new value.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context. You should know how to
++ * manipulate the value from this object.
++ * @param appParamsTruthValue_val
++ * A long containing the new value.
++ */
++int
++appParamsTruthValue_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long appParamsTruthValue_val)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_set",
++ "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:245:o: |-> Implement appParamsTruthValue reverse mapping.
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ */
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ switch (appParamsTruthValue_val) {
++ case TRUTHVALUE_TRUE:
++ rowreq_ctx->data.appParamsTruthValue =
++ INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE;
++ break;
++
++ case TRUTHVALUE_FALSE:
++ rowreq_ctx->data.appParamsTruthValue =
++ INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't reverse map value %ld for appParamsTruthValue\n",
++ appParamsTruthValue_val);
++ return SNMP_ERR_GENERR;
++ }
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_set */
++
++/**
++ * undo the previous set.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context.
++ */
++int
++appParamsTruthValue_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_undo",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:456:o: |-> Clean up appParamsTruthValue undo.
++ */
++ /*
++ * copy appParamsTruthValue data
++ * set rowreq_ctx->data.appParamsTruthValue from rowreq_ctx->undo->appParamsTruthValue
++ */
++ rowreq_ctx->data.appParamsTruthValue =
++ rowreq_ctx->undo->appParamsTruthValue;
++
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_undo */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsInteger32
++ * appParamsInteger32 is subid 6 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.6
++ * Description:
++A parameter with Integer32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ *
++ * Its syntax is INTEGER32 (based on perltype INTEGER32)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
++ */
++/**
++ * Check that the proposed new value is potentially valid.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsInteger32_val
++ * A long containing the new value.
++ *
++ * @retval MFD_SUCCESS : incoming value is legal
++ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
++ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
++ *
++ * This is the place to check for requirements that are not
++ * expressed in the mib syntax (for example, a requirement that
++ * is detailed in the description for an object).
++ *
++ * You should check that the requested change between the undo value and the
++ * new value is legal (ie, the transistion from one value to another
++ * is legal).
++ *
++ *@note
++ * This check is only to determine if the new value
++ * is \b potentially valid. This is the first check of many, and
++ * is one of the simplest ones.
++ *
++ *@note
++ * this is not the place to do any checks for values
++ * which depend on some other value in the mib. Those
++ * types of checks should be done in the
++ * dessertAppParamsTable_check_dependencies() function.
++ *
++ * The following checks have already been done for you:
++ * The syntax is ASN_INTEGER
++ *
++ * If there a no other checks you need to do, simply return MFD_SUCCESS.
++ *
++ */
++int
++appParamsInteger32_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, long appParamsInteger32_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_check_value", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * Check for valid appParamsInteger32 value.
++ */
++
++ dessert_debug("check_value\n\t\trowreq_ctx->data.appParamsValueType [%d]",rowreq_ctx->data.appParamsValueType);
++ if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_INT32) {
++
++ return MFD_NOT_VALID_EVER;
++ } else {
++
++ return MFD_SUCCESS; /* appParamsInteger32 value not illegal */
++ }
++} /* appParamsInteger32_check_value */
++
++/**
++ * Save old value information
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ *
++ * This function will be called after the table level undo setup function
++ * dessertAppParamsTable_undo_setup has been called.
++ *
++ *@note
++ * this function will only be called if a new value is set for this column.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in this function, so it
++ * won't be done unless it is necessary.
++ */
++int
++appParamsInteger32_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_undo_setup", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:455:o: |-> Setup appParamsInteger32 undo.
++ */
++ /*
++ * copy appParamsInteger32 data
++ * set rowreq_ctx->undo->appParamsInteger32 from rowreq_ctx->data.appParamsInteger32
++ */
++ rowreq_ctx->undo->appParamsInteger32 =
++ rowreq_ctx->data.appParamsInteger32;
++
++
++ return MFD_SUCCESS;
++} /* appParamsInteger32_undo_setup */
++
++/**
++ * Set the new value.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context. You should know how to
++ * manipulate the value from this object.
++ * @param appParamsInteger32_val
++ * A long containing the new value.
++ */
++int
++appParamsInteger32_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ long appParamsInteger32_val)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_set",
++ "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:245:o: |-> Implement appParamsInteger32 reverse mapping.
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ */
++ /*
++ * TODO:461:M: |-> Set appParamsInteger32 value.
++ * set appParamsInteger32 value in rowreq_ctx->data
++ */
++ rowreq_ctx->data.appParamsInteger32 = appParamsInteger32_val;
++
++
++ return MFD_SUCCESS;
++} /* appParamsInteger32_set */
++
++/**
++ * undo the previous set.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context.
++ */
++int
++appParamsInteger32_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_undo",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:456:o: |-> Clean up appParamsInteger32 undo.
++ */
++ /*
++ * copy appParamsInteger32 data
++ * set rowreq_ctx->data.appParamsInteger32 from rowreq_ctx->undo->appParamsInteger32
++ */
++ rowreq_ctx->data.appParamsInteger32 =
++ rowreq_ctx->undo->appParamsInteger32;
++
++
++ return MFD_SUCCESS;
++} /* appParamsInteger32_undo */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsUnsigned32
++ * appParamsUnsigned32 is subid 7 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.7
++ * Description:
++A parameter with Unsigned32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ *
++ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
++ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
++ */
++/**
++ * Check that the proposed new value is potentially valid.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsUnsigned32_val
++ * A u_long containing the new value.
++ *
++ * @retval MFD_SUCCESS : incoming value is legal
++ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
++ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
++ *
++ * This is the place to check for requirements that are not
++ * expressed in the mib syntax (for example, a requirement that
++ * is detailed in the description for an object).
++ *
++ * You should check that the requested change between the undo value and the
++ * new value is legal (ie, the transistion from one value to another
++ * is legal).
++ *
++ *@note
++ * This check is only to determine if the new value
++ * is \b potentially valid. This is the first check of many, and
++ * is one of the simplest ones.
++ *
++ *@note
++ * this is not the place to do any checks for values
++ * which depend on some other value in the mib. Those
++ * types of checks should be done in the
++ * dessertAppParamsTable_check_dependencies() function.
++ *
++ * The following checks have already been done for you:
++ * The syntax is ASN_UNSIGNED
++ *
++ * If there a no other checks you need to do, simply return MFD_SUCCESS.
++ *
++ */
++int
++appParamsUnsigned32_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, u_long appParamsUnsigned32_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_check_value", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:441:o: |-> Check for valid appParamsUnsigned32 value.
++ */
++ if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_UINT32) {
++
++ return MFD_NOT_VALID_EVER;
++ } else {
++
++ return MFD_SUCCESS; /* appParamsUnsigned32 value not illegal */
++ }
++} /* appParamsUnsigned32_check_value */
++
++/**
++ * Save old value information
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ *
++ * This function will be called after the table level undo setup function
++ * dessertAppParamsTable_undo_setup has been called.
++ *
++ *@note
++ * this function will only be called if a new value is set for this column.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in this function, so it
++ * won't be done unless it is necessary.
++ */
++int
++appParamsUnsigned32_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_undo_setup", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:455:o: |-> Setup appParamsUnsigned32 undo.
++ */
++ /*
++ * copy appParamsUnsigned32 data
++ * set rowreq_ctx->undo->appParamsUnsigned32 from rowreq_ctx->data.appParamsUnsigned32
++ */
++ rowreq_ctx->undo->appParamsUnsigned32 =
++ rowreq_ctx->data.appParamsUnsigned32;
++
++
++ return MFD_SUCCESS;
++} /* appParamsUnsigned32_undo_setup */
++
++/**
++ * Set the new value.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context. You should know how to
++ * manipulate the value from this object.
++ * @param appParamsUnsigned32_val
++ * A u_long containing the new value.
++ */
++int
++appParamsUnsigned32_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long appParamsUnsigned32_val)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_set",
++ "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:245:o: |-> Implement appParamsUnsigned32 reverse mapping.
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ */
++ /*
++ * TODO:461:M: |-> Set appParamsUnsigned32 value.
++ * set appParamsUnsigned32 value in rowreq_ctx->data
++ */
++ rowreq_ctx->data.appParamsUnsigned32 = appParamsUnsigned32_val;
++
++
++ return MFD_SUCCESS;
++} /* appParamsUnsigned32_set */
++
++/**
++ * undo the previous set.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context.
++ */
++int
++appParamsUnsigned32_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_undo",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:456:o: |-> Clean up appParamsUnsigned32 undo.
++ */
++ /*
++ * copy appParamsUnsigned32 data
++ * set rowreq_ctx->data.appParamsUnsigned32 from rowreq_ctx->undo->appParamsUnsigned32
++ */
++ rowreq_ctx->data.appParamsUnsigned32 =
++ rowreq_ctx->undo->appParamsUnsigned32;
++
++
++ return MFD_SUCCESS;
++} /* appParamsUnsigned32_undo */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsOctetString
++ * appParamsOctetString is subid 9 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.9
++ * Description:
++A parameter containing of up to 1024 octets.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 1
++ * hint: 1024a
++ *
++ * Ranges: 0 - 1024;
++ *
++ * Its syntax is DessertApplicationOctetString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 1024)
++ */
++/**
++ * Check that the proposed new value is potentially valid.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsOctetString_val_ptr
++ * A char containing the new value.
++ * @param appParamsOctetString_val_ptr_len
++ * The size (in bytes) of the data pointed to by appParamsOctetString_val_ptr
++ *
++ * @retval MFD_SUCCESS : incoming value is legal
++ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
++ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
++ *
++ * This is the place to check for requirements that are not
++ * expressed in the mib syntax (for example, a requirement that
++ * is detailed in the description for an object).
++ *
++ * You should check that the requested change between the undo value and the
++ * new value is legal (ie, the transistion from one value to another
++ * is legal).
++ *
++ *@note
++ * This check is only to determine if the new value
++ * is \b potentially valid. This is the first check of many, and
++ * is one of the simplest ones.
++ *
++ *@note
++ * this is not the place to do any checks for values
++ * which depend on some other value in the mib. Those
++ * types of checks should be done in the
++ * dessertAppParamsTable_check_dependencies() function.
++ *
++ * The following checks have already been done for you:
++ * The syntax is ASN_OCTET_STR
++ * The length is < sizeof(rowreq_ctx->data.appParamsOctetString).
++ * The length is in (one of) the range set(s): 0 - 1024
++ *
++ * If there a no other checks you need to do, simply return MFD_SUCCESS.
++ *
++ */
++int
++appParamsOctetString_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char *appParamsOctetString_val_ptr,
++ size_t appParamsOctetString_val_ptr_len)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_check_value", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++ netsnmp_assert(NULL != appParamsOctetString_val_ptr);
++
++ /*
++ * TODO:441:o: |-> Check for valid appParamsOctetString value.
++ */
++ if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING) {
++
++ return MFD_NOT_VALID_EVER;
++ } else {
++
++ return MFD_SUCCESS; /* appParamsOctetString value not illegal */
++ }
++} /* appParamsOctetString_check_value */
++
++/**
++ * Save old value information
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ *
++ * This function will be called after the table level undo setup function
++ * dessertAppParamsTable_undo_setup has been called.
++ *
++ *@note
++ * this function will only be called if a new value is set for this column.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in this function, so it
++ * won't be done unless it is necessary.
++ */
++int
++appParamsOctetString_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_undo_setup", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:455:o: |-> Setup appParamsOctetString undo.
++ */
++ /*
++ * copy appParamsOctetString and appParamsOctetString_len data
++ * set rowreq_ctx->undo->appParamsOctetString from rowreq_ctx->data.appParamsOctetString
++ */
++ memcpy(rowreq_ctx->undo->appParamsOctetString,
++ rowreq_ctx->data.appParamsOctetString,
++ (rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->undo->appParamsOctetString[0])));
++ rowreq_ctx->undo->appParamsOctetString_len =
++ rowreq_ctx->data.appParamsOctetString_len;
++
++
++ return MFD_SUCCESS;
++} /* appParamsOctetString_undo_setup */
++
++/**
++ * Set the new value.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context. You should know how to
++ * manipulate the value from this object.
++ * @param appParamsOctetString_val_ptr
++ * A char containing the new value.
++ * @param appParamsOctetString_val_ptr_len
++ * The size (in bytes) of the data pointed to by appParamsOctetString_val_ptr
++ */
++int
++appParamsOctetString_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ char *appParamsOctetString_val_ptr,
++ size_t appParamsOctetString_val_ptr_len)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_set",
++ "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++ netsnmp_assert(NULL != appParamsOctetString_val_ptr);
++
++ /*
++ * TODO:245:o: |-> Implement appParamsOctetString reverse mapping.
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ */
++ /*
++ * TODO:461:M: |-> Set appParamsOctetString value.
++ * set appParamsOctetString value in rowreq_ctx->data
++ */
++ memcpy(rowreq_ctx->data.appParamsOctetString,
++ appParamsOctetString_val_ptr, appParamsOctetString_val_ptr_len);
++ /** convert bytes to number of char */
++ rowreq_ctx->data.appParamsOctetString_len =
++ appParamsOctetString_val_ptr_len /
++ sizeof(appParamsOctetString_val_ptr[0]);
++
++
++ return MFD_SUCCESS;
++} /* appParamsOctetString_set */
++
++/**
++ * undo the previous set.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context.
++ */
++int
++appParamsOctetString_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_undo",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:456:o: |-> Clean up appParamsOctetString undo.
++ */
++ /*
++ * copy appParamsOctetString and appParamsOctetString_len data
++ * set rowreq_ctx->data.appParamsOctetString from rowreq_ctx->undo->appParamsOctetString
++ */
++ memcpy(rowreq_ctx->data.appParamsOctetString,
++ rowreq_ctx->undo->appParamsOctetString,
++ (rowreq_ctx->undo->appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0])));
++ rowreq_ctx->data.appParamsOctetString_len =
++ rowreq_ctx->undo->appParamsOctetString_len;
++
++
++ return MFD_SUCCESS;
++} /* appParamsOctetString_undo */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_set.h 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,168 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_DATA_SET_H
++#define DESSERTAPPPARAMSTABLE_DATA_SET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * SET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * SET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++
++
++ int
++ dessertAppParamsTable_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ dessertAppParamsTable_undo_cleanup(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx);
++ int
++ dessertAppParamsTable_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ dessertAppParamsTable_undo_commit(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx);
++
++
++ int
++ appParamsName_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, char *appParamsName_val_ptr,
++ size_t appParamsName_val_ptr_len);
++ int
++ appParamsName_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int appParamsName_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char *appParamsName_val_ptr,
++ size_t appParamsName_val_ptr_len);
++ int appParamsName_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsDesc_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, char *appParamsDesc_val_ptr,
++ size_t appParamsDesc_val_ptr_len);
++ int
++ appParamsDesc_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int appParamsDesc_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char *appParamsDesc_val_ptr,
++ size_t appParamsDesc_val_ptr_len);
++ int appParamsDesc_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsValueType_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsValueType_val);
++ int
++ appParamsValueType_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int appParamsValueType_set(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long appParamsValueType_val);
++ int
++ appParamsValueType_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsTruthValue_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsTruthValue_val);
++ int
++ appParamsTruthValue_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ appParamsTruthValue_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsTruthValue_val);
++ int
++ appParamsTruthValue_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsInteger32_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ long appParamsInteger32_val);
++ int
++ appParamsInteger32_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int appParamsInteger32_set(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ long appParamsInteger32_val);
++ int
++ appParamsInteger32_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsUnsigned32_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsUnsigned32_val);
++ int
++ appParamsUnsigned32_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ appParamsUnsigned32_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsUnsigned32_val);
++ int
++ appParamsUnsigned32_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsOctetString_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char
++ *appParamsOctetString_val_ptr,
++ size_t
++ appParamsOctetString_val_ptr_len);
++ int
++ appParamsOctetString_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ appParamsOctetString_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char *appParamsOctetString_val_ptr,
++ size_t appParamsOctetString_val_ptr_len);
++ int
++ appParamsOctetString_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++ int
++ dessertAppParamsTable_check_dependencies
++ (dessertAppParamsTable_rowreq_ctx * ctx);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_enums.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_enums.h 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,93 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_ENUMS_H
++#define DESSERTAPPPARAMSTABLE_ENUMS_H
++
++#include <dessert/dessert.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ * NOTES on enums
++ * ==============
++ *
++ * Value Mapping
++ * -------------
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them
++ * below. For example, a boolean flag (1/0) is usually represented
++ * as a TruthValue in a MIB, which maps to the values (1/2).
++ *
++ */
++/*************************************************************************
++ *************************************************************************
++ *
++ * enum definitions for table dessertAppParamsTable
++ *
++ *************************************************************************
++ *************************************************************************/
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appParamsValueType (DessertAppValueType / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef DESSERTAPPVALUETYPE_ENUMS
++#define DESSERTAPPVALUETYPE_ENUMS
++
++#define DESSERTAPPVALUETYPE_BOOL 0
++#define DESSERTAPPVALUETYPE_INT32 1
++#define DESSERTAPPVALUETYPE_UINT32 2
++#define DESSERTAPPVALUETYPE_COUNTER64 3
++#define DESSERTAPPVALUETYPE_OCTETSTRING 4
++
++#endif /* DESSERTAPPVALUETYPE_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appParamsValueType enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_BOOL DESSERT_APPPARAMS_VALUETYPE_BOOL
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_INT32 DESSERT_APPPARAMS_VALUETYPE_INT32
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_UINT32 DESSERT_APPPARAMS_VALUETYPE_UINT32
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_COUNTER64 DESSERT_APPPARAMS_VALUETYPE_COUNTER64
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_OCTETSTRING DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
++
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appParamsTruthValue (TruthValue / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef TRUTHVALUE_ENUMS
++#define TRUTHVALUE_ENUMS
++
++#define TRUTHVALUE_TRUE 1
++#define TRUTHVALUE_FALSE 2
++
++#endif /* TRUTHVALUE_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appParamsTruthValue enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE DESSERT_APPPARAMS_BOOL_TRUE
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE DESSERT_APPPARAMS_BOOL_FALSE
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_interface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_interface.c 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,1843 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++
++
++#include <net-snmp/agent/table_container.h>
++#include <net-snmp/library/container.h>
++
++#include "dessertAppParamsTable_interface.h"
++
++#include <ctype.h>
++
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++typedef struct dessertAppParamsTable_interface_ctx_s {
++
++ netsnmp_container *container;
++ netsnmp_cache *cache;
++
++ dessertAppParamsTable_registration *user_ctx;
++
++ netsnmp_table_registration_info tbl_info;
++
++ netsnmp_baby_steps_access_methods access_multiplexer;
++
++ u_int table_dirty;
++
++} dessertAppParamsTable_interface_ctx;
++
++static dessertAppParamsTable_interface_ctx dessertAppParamsTable_if_ctx;
++
++static void
++_dessertAppParamsTable_container_init(dessertAppParamsTable_interface_ctx *
++ if_ctx);
++static void
++_dessertAppParamsTable_container_shutdown
++(dessertAppParamsTable_interface_ctx * if_ctx);
++
++
++netsnmp_container *
++dessertAppParamsTable_container_get(void)
++{
++ return dessertAppParamsTable_if_ctx.container;
++}
++
++dessertAppParamsTable_registration *
++dessertAppParamsTable_registration_get(void)
++{
++ return dessertAppParamsTable_if_ctx.user_ctx;
++}
++
++dessertAppParamsTable_registration *
++dessertAppParamsTable_registration_set(dessertAppParamsTable_registration *
++ newreg)
++{
++ dessertAppParamsTable_registration *old =
++ dessertAppParamsTable_if_ctx.user_ctx;
++ dessertAppParamsTable_if_ctx.user_ctx = newreg;
++ return old;
++}
++
++int
++dessertAppParamsTable_container_size(void)
++{
++ return CONTAINER_SIZE(dessertAppParamsTable_if_ctx.container);
++}
++
++u_int
++dessertAppParamsTable_dirty_get(void)
++{
++ return dessertAppParamsTable_if_ctx.table_dirty;
++}
++
++void
++dessertAppParamsTable_dirty_set(u_int status)
++{
++ DEBUGMSGTL(("dessertAppParamsTable:dessertAppParamsTable_dirty_set",
++ "called. was %d, now %d\n",
++ dessertAppParamsTable_if_ctx.table_dirty, status));
++ dessertAppParamsTable_if_ctx.table_dirty = status;
++}
++
++/*
++ * mfd multiplexer modes
++ */
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_pre_request;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_post_request;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_object_lookup;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_get_values;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_check_objects;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_setup;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_set_values;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_cleanup;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_values;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_commit;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_commit;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_irreversible_commit;
++
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_undo_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column);
++
++dessertAppParamsTable_data *dessertAppParamsTable_allocate_data(void);
++
++/**
++ * @internal
++ * Initialize the table dessertAppParamsTable
++ * (Define its contents and how it's structured)
++ */
++void
++_dessertAppParamsTable_initialize_interface
++ (dessertAppParamsTable_registration * reg_ptr, u_long flags)
++{
++ netsnmp_baby_steps_access_methods *access_multiplexer =
++ &dessertAppParamsTable_if_ctx.access_multiplexer;
++ netsnmp_table_registration_info *tbl_info =
++ &dessertAppParamsTable_if_ctx.tbl_info;
++ netsnmp_handler_registration *reginfo;
++ netsnmp_mib_handler *handler;
++ int mfd_modes = 0;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_initialize_interface", "called\n"));
++
++
++ /*************************************************
++ *
++ * save interface context for dessertAppParamsTable
++ */
++ /*
++ * Setting up the table's definition
++ */
++ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
++ /** index: appParamsIndex */
++ 0);
++
++ /*
++ * Define the minimum and maximum accessible columns. This
++ * optimizes retrival.
++ */
++ tbl_info->min_column = DESSERTAPPPARAMSTABLE_MIN_COL;
++ tbl_info->max_column = DESSERTAPPPARAMSTABLE_MAX_COL;
++
++ /*
++ * save users context
++ */
++ dessertAppParamsTable_if_ctx.user_ctx = reg_ptr;
++
++ /*
++ * call data access initialization code
++ */
++ dessertAppParamsTable_init_data(reg_ptr);
++
++ /*
++ * set up the container
++ */
++ _dessertAppParamsTable_container_init(&dessertAppParamsTable_if_ctx);
++ if (NULL == dessertAppParamsTable_if_ctx.container) {
++ snmp_log(LOG_ERR,
++ "could not initialize container for dessertAppParamsTable\n");
++ return;
++ }
++
++ /*
++ * access_multiplexer: REQUIRED wrapper for get request handling
++ */
++ access_multiplexer->object_lookup =
++ _mfd_dessertAppParamsTable_object_lookup;
++ access_multiplexer->get_values = _mfd_dessertAppParamsTable_get_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->pre_request =
++ _mfd_dessertAppParamsTable_pre_request;
++ access_multiplexer->post_request =
++ _mfd_dessertAppParamsTable_post_request;
++
++
++ /*
++ * REQUIRED wrappers for set request handling
++ */
++ access_multiplexer->object_syntax_checks =
++ _mfd_dessertAppParamsTable_check_objects;
++ access_multiplexer->undo_setup = _mfd_dessertAppParamsTable_undo_setup;
++ access_multiplexer->undo_cleanup =
++ _mfd_dessertAppParamsTable_undo_cleanup;
++ access_multiplexer->set_values = _mfd_dessertAppParamsTable_set_values;
++ access_multiplexer->undo_sets = _mfd_dessertAppParamsTable_undo_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->commit = _mfd_dessertAppParamsTable_commit;
++ access_multiplexer->undo_commit =
++ _mfd_dessertAppParamsTable_undo_commit;
++ access_multiplexer->irreversible_commit =
++ _mfd_dessertAppParamsTable_irreversible_commit;
++
++ /*************************************************
++ *
++ * Create a registration, save our reg data, register table.
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:init_dessertAppParamsTable",
++ "Registering dessertAppParamsTable as a mibs-for-dummies table.\n"));
++ handler =
++ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
++ reginfo =
++ netsnmp_handler_registration_create("dessertAppParamsTable",
++ handler,
++ dessertAppParamsTable_oid,
++ dessertAppParamsTable_oid_size,
++ HANDLER_CAN_BABY_STEP |
++ HANDLER_CAN_RWRITE);
++ if (NULL == reginfo) {
++ snmp_log(LOG_ERR,
++ "error registering table dessertAppParamsTable\n");
++ return;
++ }
++ reginfo->my_reg_void = &dessertAppParamsTable_if_ctx;
++
++ /*************************************************
++ *
++ * set up baby steps handler, create it and inject it
++ */
++ if (access_multiplexer->object_lookup)
++ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
++ if (access_multiplexer->set_values)
++ mfd_modes |= BABY_STEP_SET_VALUES;
++ if (access_multiplexer->irreversible_commit)
++ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
++ if (access_multiplexer->object_syntax_checks)
++ mfd_modes |= BABY_STEP_CHECK_OBJECT;
++
++ if (access_multiplexer->pre_request)
++ mfd_modes |= BABY_STEP_PRE_REQUEST;
++ if (access_multiplexer->post_request)
++ mfd_modes |= BABY_STEP_POST_REQUEST;
++
++ if (access_multiplexer->undo_setup)
++ mfd_modes |= BABY_STEP_UNDO_SETUP;
++ if (access_multiplexer->undo_cleanup)
++ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
++ if (access_multiplexer->undo_sets)
++ mfd_modes |= BABY_STEP_UNDO_SETS;
++
++ if (access_multiplexer->row_creation)
++ mfd_modes |= BABY_STEP_ROW_CREATE;
++ if (access_multiplexer->consistency_checks)
++ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
++ if (access_multiplexer->commit)
++ mfd_modes |= BABY_STEP_COMMIT;
++ if (access_multiplexer->undo_commit)
++ mfd_modes |= BABY_STEP_UNDO_COMMIT;
++
++ handler = netsnmp_baby_steps_handler_get(mfd_modes);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
++ */
++ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject container_table helper
++ */
++ handler =
++ netsnmp_container_table_handler_get(tbl_info,
++ dessertAppParamsTable_if_ctx.
++ container,
++ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject cache helper
++ */
++ if (NULL != dessertAppParamsTable_if_ctx.cache) {
++ handler =
++ netsnmp_cache_handler_get(dessertAppParamsTable_if_ctx.cache);
++ netsnmp_inject_handler(reginfo, handler);
++ }
++
++ /*
++ * register table
++ */
++ netsnmp_register_table(reginfo, tbl_info);
++
++} /* _dessertAppParamsTable_initialize_interface */
++
++/**
++ * @internal
++ * Shutdown the table dessertAppParamsTable
++ */
++void
++_dessertAppParamsTable_shutdown_interface
++ (dessertAppParamsTable_registration * reg_ptr)
++{
++ /*
++ * shutdown the container
++ */
++ _dessertAppParamsTable_container_shutdown
++ (&dessertAppParamsTable_if_ctx);
++}
++
++void
++dessertAppParamsTable_valid_columns_set(netsnmp_column_info *vc)
++{
++ dessertAppParamsTable_if_ctx.tbl_info.valid_columns = vc;
++} /* dessertAppParamsTable_valid_columns_set */
++
++/**
++ * @internal
++ * convert the index component stored in the context to an oid
++ */
++int
++dessertAppParamsTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertAppParamsTable_mib_index *
++ mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ netsnmp_variable_list var_appParamsIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_appParamsIndex, 0x00, sizeof(var_appParamsIndex));
++ var_appParamsIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_appParamsIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_index_to_oid", "called\n"));
++
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ snmp_set_var_value(&var_appParamsIndex,
++ (u_char *) & mib_idx->appParamsIndex,
++ sizeof(mib_idx->appParamsIndex));
++
++
++ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
++ NULL, 0, &var_appParamsIndex);
++ if (err)
++ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_appParamsIndex);
++
++ return err;
++} /* dessertAppParamsTable_index_to_oid */
++
++/**
++ * extract dessertAppParamsTable indexes from a netsnmp_index
++ *
++ * @retval SNMP_ERR_NOERROR : no error
++ * @retval SNMP_ERR_GENERR : error
++ */
++int
++dessertAppParamsTable_index_from_oid(netsnmp_index * oid_idx,
++ dessertAppParamsTable_mib_index *
++ mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ netsnmp_variable_list var_appParamsIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_appParamsIndex, 0x00, sizeof(var_appParamsIndex));
++ var_appParamsIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_appParamsIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_index_from_oid", "called\n"));
++
++ /*
++ * parse the oid into the individual index components
++ */
++ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
++ &var_appParamsIndex);
++ if (err == SNMP_ERR_NOERROR) {
++ /*
++ * copy out values
++ */
++ mib_idx->appParamsIndex =
++ *((long *) var_appParamsIndex.val.string);
++
++
++ }
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_appParamsIndex);
++
++ return err;
++} /* dessertAppParamsTable_index_from_oid */
++
++
++/*
++ * dessertAppParamsTable_allocate_data
++ *
++ * Purpose: create new dessertAppParamsTable_data.
++ */
++dessertAppParamsTable_data *
++dessertAppParamsTable_allocate_data(void)
++{
++ dessertAppParamsTable_data *rtn =
++ SNMP_MALLOC_TYPEDEF(dessertAppParamsTable_data);
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_allocate_data", "called\n"));
++
++ if (NULL == rtn) {
++ snmp_log(LOG_ERR, "unable to malloc memory for new "
++ "dessertAppParamsTable_data.\n");
++ }
++
++ return rtn;
++} /* dessertAppParamsTable_allocate_data */
++
++/*
++ * dessertAppParamsTable_release_data
++ *
++ * Purpose: release dessertAppParamsTable data.
++ */
++void
++dessertAppParamsTable_release_data(dessertAppParamsTable_data * data)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_release_data", "called\n"));
++
++ free(data);
++} /* dessertAppParamsTable_release_data */
++
++/*
++ *********************************************************************
++ * @internal
++ * allocate resources for a dessertAppParamsTable_rowreq_ctx
++ */
++dessertAppParamsTable_rowreq_ctx *
++dessertAppParamsTable_allocate_rowreq_ctx(void)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ SNMP_MALLOC_TYPEDEF(dessertAppParamsTable_rowreq_ctx);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:dessertAppParamsTable_allocate_rowreq_ctx", "called\n"));
++
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
++ "dessertAppParamsTable_rowreq_ctx.\n");
++ return NULL;
++ }
++
++ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
++
++ rowreq_ctx->dessertAppParamsTable_data_list = NULL;
++
++
++ return rowreq_ctx;
++} /* dessertAppParamsTable_allocate_rowreq_ctx */
++
++/*
++ * @internal
++ * release resources for a dessertAppParamsTable_rowreq_ctx
++ */
++void
++dessertAppParamsTable_release_rowreq_ctx(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:dessertAppParamsTable_release_rowreq_ctx", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++
++ if (rowreq_ctx->undo)
++ dessertAppParamsTable_release_data(rowreq_ctx->undo);
++
++ /*
++ * free index oid pointer
++ */
++ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
++ free(rowreq_ctx->oid_idx.oids);
++
++ SNMP_FREE(rowreq_ctx);
++} /* dessertAppParamsTable_release_rowreq_ctx */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppParamsTable_pre_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_pre_request", "called\n"));
++
++ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable",
++ "skipping additional pre_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ rc = dessertAppParamsTable_pre_request(dessertAppParamsTable_if_ctx.
++ user_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable", "error %d from "
++ "dessertAppParamsTable_pre_request\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_pre_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppParamsTable_post_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc, packet_rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_post_request", "called\n"));
++
++ /*
++ * release row context, if deleted
++ */
++ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
++ dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
++
++ /*
++ * wait for last call before calling user
++ */
++ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable",
++ "waiting for last post_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
++ if ((MFD_SUCCESS != packet_rc) && dessertAppParamsTable_dirty_get()) {
++ /*
++ * we shouldn't get here. the undo steps should also clear
++ * the dirty flags.
++ */
++ snmp_log(LOG_WARNING,
++ "dessertAppParamsTable dirty flag set in post_request "
++ "but status != SUCCESS.\n");
++ }
++
++ rc = dessertAppParamsTable_post_request(dessertAppParamsTable_if_ctx.
++ user_ctx, packet_rc);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable", "error %d from "
++ "dessertAppParamsTable_post_request\n", rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_post_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppParamsTable_object_lookup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc = SNMP_ERR_NOERROR;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_object_lookup", "called\n"));
++
++ /*
++ * get our context from mfd
++ * dessertAppParamsTable_interface_ctx *if_ctx =
++ * (dessertAppParamsTable_interface_ctx *)reginfo->my_reg_void;
++ */
++
++ if (NULL == rowreq_ctx) {
++ rc = SNMP_ERR_NOCREATION;
++ }
++
++ if (MFD_SUCCESS != rc)
++ netsnmp_request_set_error_all(requests, rc);
++ else
++ dessertAppParamsTable_row_prep(rowreq_ctx);
++
++ return SNMP_VALIDATE_ERR(rc);
++} /* _mfd_dessertAppParamsTable_object_lookup */
++
++/***********************************************************************
++ *
++ * GET processing
++ *
++ ***********************************************************************/
++/*
++ * @internal
++ * Retrieve the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_get_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "called for %d\n", column));
++
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSNAME:
++ if (!(COLUMN_APPPARAMSNAME_FLAG & rowreq_ctx->column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsName) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appParamsName_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSDESC:
++ if (!(COLUMN_APPPARAMSDESC_FLAG & rowreq_ctx->column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsDesc) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appParamsDesc_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPPARAMSVALUETYPE:
++ if (!
++ (COLUMN_APPPARAMSVALUETYPE_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsValueType) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appParamsValueType_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ if (!
++ (COLUMN_APPPARAMSTRUTHVALUE_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsTruthValue) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appParamsTruthValue_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ if (!
++ (COLUMN_APPPARAMSINTEGER32_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsInteger32) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(long);
++ var->type = ASN_INTEGER;
++ rc = appParamsInteger32_get(rowreq_ctx, (long *) var->val.string);
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ if (!
++ (COLUMN_APPPARAMSUNSIGNED32_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsUnsigned32) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_UNSIGNED;
++ rc = appParamsUnsigned32_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ if (!
++ (COLUMN_APPPARAMSOCTETSTRING_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsOctetString) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appParamsOctetString_get(rowreq_ctx,
++ (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ default:
++ if (DESSERTAPPPARAMSTABLE_MIN_COL <= column
++ && column <= DESSERTAPPPARAMSTABLE_MAX_COL) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "assume column %d is reserved\n", column));
++ rc = MFD_SKIP;
++ } else {
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_get_column\n",
++ column);
++ }
++ break;
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_get_column */
++
++int
++_mfd_dessertAppParamsTable_get_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ u_char *old_string;
++ void (*dataFreeHook) (void *);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ DEBUGMSGTL(("9:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_values", "exists %p\n", rowreq_ctx->column_exists_flags));
++
++ for (; requests; requests = requests->next) {
++ /*
++ * save old pointer, so we can free it if replaced
++ */
++ old_string = requests->requestvb->val.string;
++ dataFreeHook = requests->requestvb->dataFreeHook;
++ if (NULL == requests->requestvb->val.string) {
++ requests->requestvb->val.string = requests->requestvb->buf;
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ } else if (requests->requestvb->buf ==
++ requests->requestvb->val.string) {
++ if (requests->requestvb->val_len !=
++ sizeof(requests->requestvb->buf))
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ }
++
++ /*
++ * get column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_get_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ if (MFD_SKIP == rc) {
++ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
++ rc = SNMP_ERR_NOERROR;
++ }
++ } else if (NULL == requests->requestvb->val.string) {
++ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
++ rc = SNMP_ERR_GENERR;
++ }
++ if (rc)
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++
++ /*
++ * if the buffer wasn't used previously for the old data (i.e. it
++ * was allcoated memory) and the get routine replaced the pointer,
++ * we need to free the previous pointer.
++ */
++ if (old_string && (old_string != requests->requestvb->buf) &&
++ (requests->requestvb->val.string != old_string)) {
++ if (dataFreeHook)
++ (*dataFreeHook) (old_string);
++ else
++ free(old_string);
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_get_values */
++
++
++/***********************************************************************
++ *
++ * SET processing
++ *
++ ***********************************************************************/
++
++/*----------------------------------------------------------------------
++ *
++ * SET: Syntax checks
++ *
++ *---------------------------------------------------------------------*/
++/*
++ * @internal
++ * Check the syntax for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_check_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_check_column", "called for %d\n", column));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++ /*
++ * (INDEX) appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSINDEX:
++ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
++ break;
++
++ /*
++ * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSNAME:
++ rc = SNMP_ERR_NOTWRITABLE;
++ break;
++
++ /*
++ * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSDESC:
++ rc = SNMP_ERR_NOTWRITABLE;
++ break;
++
++ /*
++ * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPPARAMSVALUETYPE:
++ rc = SNMP_ERR_NOTWRITABLE;
++ break;
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
++ sizeof(rowreq_ctx->data.
++ appParamsTruthValue));
++ /*
++ * check that the value is one of defined enums
++ */
++ if ((SNMPERR_SUCCESS == rc)
++ && (*var->val.integer != TRUTHVALUE_TRUE)
++ && (*var->val.integer != TRUTHVALUE_FALSE)
++ ) {
++ rc = SNMP_ERR_WRONGVALUE;
++ }
++ if (SNMPERR_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsTruthValue", "varbind validation failed (eg bad type or size)\n"));
++ } else {
++ rc = appParamsTruthValue_check_value(rowreq_ctx,
++ *((u_long *) var->val.
++ string));
++ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
++ && (MFD_NOT_VALID_NOW != rc)) {
++ snmp_log(LOG_ERR,
++ "bad rc %d from appParamsTruthValue_check_value\n",
++ rc);
++ rc = SNMP_ERR_GENERR;
++ }
++ }
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
++ sizeof(rowreq_ctx->data.
++ appParamsInteger32));
++ if (SNMPERR_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsInteger32", "varbind validation failed (eg bad type or size)\n"));
++ } else {
++ rc = appParamsInteger32_check_value(rowreq_ctx,
++ *((long *) var->val.
++ string));
++ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
++ && (MFD_NOT_VALID_NOW != rc)) {
++ snmp_log(LOG_ERR,
++ "bad rc %d from appParamsInteger32_check_value\n",
++ rc);
++ rc = SNMP_ERR_GENERR;
++ }
++ }
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ rc = netsnmp_check_vb_type_and_size(var, ASN_UNSIGNED,
++ sizeof(rowreq_ctx->data.
++ appParamsUnsigned32));
++ if (SNMPERR_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsUnsigned32", "varbind validation failed (eg bad type or size)\n"));
++ } else {
++ rc = appParamsUnsigned32_check_value(rowreq_ctx,
++ *((u_long *) var->val.
++ string));
++ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
++ && (MFD_NOT_VALID_NOW != rc)) {
++ snmp_log(LOG_ERR,
++ "bad rc %d from appParamsUnsigned32_check_value\n",
++ rc);
++ rc = SNMP_ERR_GENERR;
++ }
++ }
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ rc = netsnmp_check_vb_type_and_max_size(var, ASN_OCTET_STR,
++ sizeof(rowreq_ctx->data.
++ appParamsOctetString));
++ /*
++ * check defined range(s).
++ */
++ if ((SNMPERR_SUCCESS == rc)
++ && ((var->val_len < 0) || (var->val_len > 1024))
++ ) {
++ rc = SNMP_ERR_WRONGLENGTH;
++ }
++ if (SNMPERR_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsOctetString", "varbind validation failed (eg bad type or size)\n"));
++ } else {
++ rc = appParamsOctetString_check_value(rowreq_ctx,
++ (char *) var->val.string,
++ var->val_len);
++ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
++ && (MFD_NOT_VALID_NOW != rc)) {
++ snmp_log(LOG_ERR,
++ "bad rc %d from appParamsOctetString_check_value\n",
++ rc);
++ rc = SNMP_ERR_GENERR;
++ }
++ }
++ break;
++
++ default: /** We shouldn't get here */
++ rc = SNMP_ERR_GENERR;
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_check_column\n",
++ column);
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_check_column */
++
++int
++_mfd_dessertAppParamsTable_check_objects(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_check_objects", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ for (; requests; requests = requests->next) {
++
++ /*
++ * get column number from table request info, and check that column
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_check_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++ break;
++ }
++
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_check_objects */
++
++
++/*----------------------------------------------------------------------
++ *
++ * SET: Undo setup
++ *
++ *---------------------------------------------------------------------*/
++/*
++ * @internal
++ * Set the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_undo_setup_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_undo_setup_column", "called for %d\n", column));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ rc = appParamsTruthValue_undo_setup(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
++ rc = appParamsInteger32_undo_setup(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ rc = appParamsUnsigned32_undo_setup(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ rc = appParamsOctetString_undo_setup(rowreq_ctx);
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_undo_setup_column\n",
++ column);
++ break;
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_undo_setup_column */
++
++
++/**
++ * @internal
++ * undo setup
++ */
++int
++_mfd_dessertAppParamsTable_undo_setup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_setup", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * allocate undo context
++ */
++ rowreq_ctx->undo = dessertAppParamsTable_allocate_data();
++ if (NULL == rowreq_ctx->undo) {
++ /** msg already logged */
++ netsnmp_request_set_error_all(requests,
++ SNMP_ERR_RESOURCEUNAVAILABLE);
++ return SNMP_ERR_NOERROR;
++ }
++
++ /*
++ * row undo setup
++ */
++ rowreq_ctx->column_set_flags = 0;
++ rc = dessertAppParamsTable_undo_setup(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_setup\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ } else {
++ /*
++ * column undo setup
++ */
++ netsnmp_table_request_info *tri;
++ for (; requests; requests = requests->next) {
++ /*
++ * set column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_undo_setup_column(rowreq_ctx,
++ tri->colnum);
++ if (MFD_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_setup_column\n",
++ rc));
++ netsnmp_set_request_error(agtreq_info, requests,
++ SNMP_VALIDATE_ERR(rc));
++ }
++ } /* for results */
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_undo_setup */
++
++/**
++ * @internal
++ * undo setup
++ */
++int
++_mfd_dessertAppParamsTable_undo_cleanup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_cleanup", "called\n"));
++
++ /*
++ * failed row create in early stages has no rowreq_ctx
++ */
++ if (NULL == rowreq_ctx)
++ return MFD_SUCCESS;
++
++ /*
++ * call user cleanup
++ */
++ rc = dessertAppParamsTable_undo_cleanup(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_cleanup\n", rc));
++ }
++
++ /*
++ * release undo context, if needed
++ */
++ if (rowreq_ctx->undo) {
++ dessertAppParamsTable_release_data(rowreq_ctx->undo);
++ rowreq_ctx->undo = NULL;
++ }
++
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_undo_cleanup */
++
++/*----------------------------------------------------------------------
++ *
++ * SET: Set values
++ *
++ *---------------------------------------------------------------------*/
++/*
++ * @internal
++ * Set the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_set_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_set_column", "called for %d\n", column));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ rc = appParamsTruthValue_set(rowreq_ctx,
++ *((u_long *) var->val.string));
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
++ rc = appParamsInteger32_set(rowreq_ctx,
++ *((long *) var->val.string));
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ rc = appParamsUnsigned32_set(rowreq_ctx,
++ *((u_long *) var->val.string));
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ rc = appParamsOctetString_set(rowreq_ctx, (char *) var->val.string,
++ var->val_len);
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_set_column\n",
++ column);
++ rc = SNMP_ERR_GENERR;
++ break;
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_set_column */
++
++int
++_mfd_dessertAppParamsTable_set_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ int rc = SNMP_ERR_NOERROR;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_set_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ rowreq_ctx->column_set_flags = 0;
++ for (; requests; requests = requests->next) {
++ /*
++ * set column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_set_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (MFD_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_set_column\n", rc));
++ netsnmp_set_request_error(agtreq_info, requests,
++ SNMP_VALIDATE_ERR(rc));
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_set_values */
++
++/*----------------------------------------------------------------------
++ *
++ * SET: commit
++ *
++ *---------------------------------------------------------------------*/
++/**
++ * @internal
++ * commit the values
++ */
++int
++_mfd_dessertAppParamsTable_commit(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_commit", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ rc = dessertAppParamsTable_commit(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_commit\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
++ /*
++ * if we successfully commited this row, set the dirty flag. Use the
++ * current value + 1 (i.e. dirty = # rows changed).
++ * this is checked in post_request...
++ */
++ dessertAppParamsTable_dirty_set(dessertAppParamsTable_dirty_get() + 1); /* set table dirty flag */
++ }
++
++ return SNMP_ERR_NOERROR;
++}
++
++int
++_mfd_dessertAppParamsTable_undo_commit(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_commit", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
++ u_int d = dessertAppParamsTable_dirty_get();
++
++ netsnmp_assert(d != 0);
++ if (d)
++ dessertAppParamsTable_dirty_set(d - 1);
++ }
++
++ rc = dessertAppParamsTable_undo_commit(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_commit\n", rc));
++ }
++
++ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
++ snmp_log(LOG_WARNING,
++ "dessertAppParamsTable row dirty flag still set after undo_commit\n");
++ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_commit */
++
++/*----------------------------------------------------------------------
++ *
++ * SET: Undo
++ *
++ *---------------------------------------------------------------------*/
++/**
++ * @internal
++ * undo the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_undo_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_undo_column", "called for %d\n", column));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ rc = appParamsTruthValue_undo(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ rc = appParamsInteger32_undo(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ rc = appParamsUnsigned32_undo(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ rc = appParamsOctetString_undo(rowreq_ctx);
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_undo_column\n",
++ column);
++ break;
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_undo_column */
++
++int
++_mfd_dessertAppParamsTable_undo_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ rc = dessertAppParamsTable_undo(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo\n", rc));
++ }
++
++ for (; requests; requests = requests->next) {
++ /*
++ * set column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_undo_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_column\n", rc));
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_undo_values */
++
++/*----------------------------------------------------------------------
++ *
++ * SET: irreversible commit
++ *
++ *---------------------------------------------------------------------*/
++/**
++ * @internal
++ * commit irreversible actions
++ */
++int
++_mfd_dessertAppParamsTable_irreversible_commit(netsnmp_mib_handler
++ *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info
++ *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_irreversible:commit", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * check for and handle row creation/deletion
++ * and update column exist flags...
++ */
++ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
++ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
++ CONTAINER_REMOVE(dessertAppParamsTable_if_ctx.container,
++ rowreq_ctx);
++ } else {
++ if (rowreq_ctx->column_set_flags) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_irreversible_commit", "updating exists (%p) w/set (%p) = %p\n", rowreq_ctx->column_exists_flags, rowreq_ctx->column_set_flags, (rowreq_ctx->column_exists_flags | rowreq_ctx->column_set_flags)));
++ rowreq_ctx->column_exists_flags |=
++ rowreq_ctx->column_set_flags;
++ rowreq_ctx->column_set_flags = 0;
++ }
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_irreversible_commit */
++
++/***********************************************************************
++ *
++ * DATA ACCESS
++ *
++ ***********************************************************************/
++static void _container_free(netsnmp_container * container);
++
++/**
++ * @internal
++ */
++static int
++_cache_load(netsnmp_cache * cache, void *vmagic)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_cache_load", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache for dessertAppParamsTable_cache_load\n");
++ return -1;
++ }
++
++ /** should only be called for an invalid or expired cache */
++ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
++
++ /*
++ * call user code
++ */
++ return dessertAppParamsTable_container_load((netsnmp_container *)
++ cache->magic);
++} /* _cache_load */
++
++/**
++ * @internal
++ */
++static void
++_cache_free(netsnmp_cache * cache, void *magic)
++{
++ netsnmp_container *container;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_cache_free", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache in dessertAppParamsTable_cache_free\n");
++ return;
++ }
++
++ container = (netsnmp_container *) cache->magic;
++
++ _container_free(container);
++} /* _cache_free */
++
++/**
++ * @internal
++ */
++static void
++_container_item_free(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ void *context)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_container_item_free",
++ "called\n"));
++
++ if (NULL == rowreq_ctx)
++ return;
++
++ dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
++} /* _container_item_free */
++
++/**
++ * @internal
++ */
++static void
++_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_container_free",
++ "called\n"));
++
++ if (NULL == container) {
++ snmp_log(LOG_ERR,
++ "invalid container in dessertAppParamsTable_container_free\n");
++ return;
++ }
++
++ /*
++ * call user code
++ */
++ dessertAppParamsTable_container_free(container);
++
++ /*
++ * free all items. inefficient, but easy.
++ */
++ CONTAINER_CLEAR(container,
++ (netsnmp_container_obj_func *) _container_item_free,
++ NULL);
++} /* _container_free */
++
++/**
++ * @internal
++ * initialize the container with functions or wrappers
++ */
++void
++_dessertAppParamsTable_container_init(dessertAppParamsTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_container_init", "called\n"));
++
++ /*
++ * cache init
++ */
++ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
++ _cache_load, _cache_free,
++ dessertAppParamsTable_oid,
++ dessertAppParamsTable_oid_size);
++
++ if (NULL == if_ctx->cache) {
++ snmp_log(LOG_ERR,
++ "error creating cache for dessertAppParamsTable\n");
++ return;
++ }
++
++ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
++
++ dessertAppParamsTable_container_init(&if_ctx->container,
++ if_ctx->cache);
++ if (NULL == if_ctx->container)
++ if_ctx->container =
++ netsnmp_container_find
++ ("dessertAppParamsTable:table_container");
++ if (NULL == if_ctx->container) {
++ snmp_log(LOG_ERR, "error creating container in "
++ "dessertAppParamsTable_container_init\n");
++ return;
++ }
++
++ if (NULL != if_ctx->cache)
++ if_ctx->cache->magic = (void *) if_ctx->container;
++} /* _dessertAppParamsTable_container_init */
++
++/**
++ * @internal
++ * shutdown the container with functions or wrappers
++ */
++void
++_dessertAppParamsTable_container_shutdown
++ (dessertAppParamsTable_interface_ctx * if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_container_shutdown", "called\n"));
++
++ dessertAppParamsTable_container_shutdown(if_ctx->container);
++
++ _container_free(if_ctx->container);
++
++} /* _dessertAppParamsTable_container_shutdown */
++
++
++dessertAppParamsTable_rowreq_ctx *
++dessertAppParamsTable_row_find_by_mib_index(dessertAppParamsTable_mib_index
++ * mib_idx)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
++ oid oid_tmp[MAX_OID_LEN];
++ netsnmp_index oid_idx;
++ int rc;
++
++ /*
++ * set up storage for OID
++ */
++ oid_idx.oids = oid_tmp;
++ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
++
++ /*
++ * convert
++ */
++ rc = dessertAppParamsTable_index_to_oid(&oid_idx, mib_idx);
++ if (MFD_SUCCESS != rc)
++ return NULL;
++
++ rowreq_ctx =
++ CONTAINER_FIND(dessertAppParamsTable_if_ctx.container, &oid_idx);
++
++ return rowreq_ctx;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_interface.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_interface.h 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,101 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/** @ingroup interface: Routines to interface to Net-SNMP
++ *
++ * \warning This code should not be modified, called directly,
++ * or used to interpret functionality. It is subject to
++ * change at any time.
++ *
++ * @{
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++#ifndef DESSERTAPPPARAMSTABLE_INTERFACE_H
++#define DESSERTAPPPARAMSTABLE_INTERFACE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#include "dessertAppParamsTable.h"
++
++
++ /*
++ ********************************************************************
++ * Table declarations
++ */
++
++ /*
++ * PUBLIC interface initialization routine
++ */
++ void
++ _dessertAppParamsTable_initialize_interface
++ (dessertAppParamsTable_registration * user_ctx, u_long flags);
++ void
++ _dessertAppParamsTable_shutdown_interface
++ (dessertAppParamsTable_registration * user_ctx);
++
++ dessertAppParamsTable_registration
++ *dessertAppParamsTable_registration_get(void);
++
++ dessertAppParamsTable_registration
++ *dessertAppParamsTable_registration_set
++ (dessertAppParamsTable_registration * newreg);
++
++ netsnmp_container *dessertAppParamsTable_container_get(void);
++ int dessertAppParamsTable_container_size(void);
++
++ u_int dessertAppParamsTable_dirty_get(void);
++ void dessertAppParamsTable_dirty_set(u_int status);
++
++ dessertAppParamsTable_rowreq_ctx
++ *dessertAppParamsTable_allocate_rowreq_ctx(void);
++ void
++ dessertAppParamsTable_release_rowreq_ctx
++ (dessertAppParamsTable_rowreq_ctx * rowreq_ctx);
++
++ int dessertAppParamsTable_index_to_oid(netsnmp_index *
++ oid_idx,
++ dessertAppParamsTable_mib_index
++ * mib_idx);
++ int dessertAppParamsTable_index_from_oid(netsnmp_index *
++ oid_idx,
++ dessertAppParamsTable_mib_index
++ * mib_idx);
++
++ /*
++ * access to certain internals. use with caution!
++ */
++ void
++ dessertAppParamsTable_valid_columns_set(netsnmp_column_info *vc);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_INTERFACE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_oids.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_oids.h 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,56 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_OIDS_H
++#define DESSERTAPPPARAMSTABLE_OIDS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ * column number definitions for table dessertAppParamsTable
++ */
++#define DESSERTAPPPARAMSTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,9
++
++#define COLUMN_APPPARAMSINDEX 1
++
++#define COLUMN_APPPARAMSNAME 2
++#define COLUMN_APPPARAMSNAME_FLAG (0x1 << 1)
++
++#define COLUMN_APPPARAMSDESC 3
++#define COLUMN_APPPARAMSDESC_FLAG (0x1 << 2)
++
++#define COLUMN_APPPARAMSVALUETYPE 4
++#define COLUMN_APPPARAMSVALUETYPE_FLAG (0x1 << 3)
++
++#define COLUMN_APPPARAMSTRUTHVALUE 5
++#define COLUMN_APPPARAMSTRUTHVALUE_FLAG (0x1 << 4)
++
++#define COLUMN_APPPARAMSINTEGER32 6
++#define COLUMN_APPPARAMSINTEGER32_FLAG (0x1 << 5)
++
++#define COLUMN_APPPARAMSUNSIGNED32 7
++#define COLUMN_APPPARAMSUNSIGNED32_FLAG (0x1 << 6)
++
++#define COLUMN_APPPARAMSOCTETSTRING 9
++#define COLUMN_APPPARAMSOCTETSTRING_FLAG (0x1 << 8)
++
++
++#define DESSERTAPPPARAMSTABLE_MIN_COL COLUMN_APPPARAMSNAME
++#define DESSERTAPPPARAMSTABLE_MAX_COL COLUMN_APPPARAMSOCTETSTRING
++
++
++ /*
++ * OR together all the writable cols.
++ */
++#define DESSERTAPPPARAMSTABLE_SETTABLE_COLS (COLUMN_APPPARAMSTRUTHVALUE_FLAG | COLUMN_APPPARAMSINTEGER32_FLAG | COLUMN_APPPARAMSUNSIGNED32_FLAG | COLUMN_APPPARAMSOCTETSTRING_FLAG)
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable.c 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,173 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/** \page MFD helper for dessertAppStatsTable
++ *
++ * \section intro Introduction
++ * Introductory text.
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++
++#include <net-snmp/agent/mib_modules.h>
++
++#include "dessertAppStatsTable_interface.h"
++
++oid dessertAppStatsTable_oid[] = { DESSERTAPPSTATSTABLE_OID };
++
++int dessertAppStatsTable_oid_size =
++OID_LENGTH(dessertAppStatsTable_oid);
++
++dessertAppStatsTable_registration dessertAppStatsTable_user_context;
++
++void initialize_table_dessertAppStatsTable(void);
++void shutdown_table_dessertAppStatsTable(void);
++
++
++/**
++ * Initializes the dessertAppStatsTable module
++ */
++void
++init_dessertAppStatsTable(void)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:init_dessertAppStatsTable",
++ "called\n"));
++
++ /*
++ * TODO:300:o: Perform dessertAppStatsTable one-time module initialization.
++ */
++
++ /*
++ * here we initialize all the tables we're planning on supporting
++ */
++ if (should_init("dessertAppStatsTable"))
++ initialize_table_dessertAppStatsTable();
++
++} /* init_dessertAppStatsTable */
++
++/**
++ * Shut-down the dessertAppStatsTable module (agent is exiting)
++ */
++void
++shutdown_dessertAppStatsTable(void)
++{
++ if (should_init("dessertAppStatsTable"))
++ shutdown_table_dessertAppStatsTable();
++
++}
++
++/**
++ * Initialize the table dessertAppStatsTable
++ * (Define its contents and how it's structured)
++ */
++void
++initialize_table_dessertAppStatsTable(void)
++{
++ dessertAppStatsTable_registration *user_context;
++ u_long flags;
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:initialize_table_dessertAppStatsTable", "called\n"));
++
++ /*
++ * TODO:301:o: Perform dessertAppStatsTable one-time table initialization.
++ */
++
++ /*
++ * TODO:302:o: |->Initialize dessertAppStatsTable user context
++ * if you'd like to pass in a pointer to some data for this
++ * table, allocate or set it up here.
++ */
++ /*
++ * a netsnmp_data_list is a simple way to store void pointers. A simple
++ * string token is used to add, find or remove pointers.
++ */
++ user_context =
++ netsnmp_create_data_list("dessertAppStatsTable", NULL, NULL);
++
++ /*
++ * No support for any flags yet, but in the future you would
++ * set any flags here.
++ */
++ flags = 0;
++
++ /*
++ * call interface initialization code
++ */
++ _dessertAppStatsTable_initialize_interface(user_context, flags);
++} /* initialize_table_dessertAppStatsTable */
++
++/**
++ * Shutdown the table dessertAppStatsTable
++ */
++void
++shutdown_table_dessertAppStatsTable(void)
++{
++ /*
++ * call interface shutdown code
++ */
++ _dessertAppStatsTable_shutdown_interface
++ (&dessertAppStatsTable_user_context);
++}
++
++/**
++ * pre-request callback
++ *
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error
++ */
++int
++dessertAppStatsTable_pre_request(dessertAppStatsTable_registration *
++ user_context)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_pre_request", "called\n"));
++
++ /*
++ * TODO:510:o: Perform dessertAppStatsTable pre-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_pre_request */
++
++/**
++ * post-request callback
++ *
++ * Note:
++ * New rows have been inserted into the container, and
++ * deleted rows have been removed from the container and
++ * released.
++ *
++ * @param user_context
++ * @param rc : MFD_SUCCESS if all requests succeeded
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error (ignored)
++ */
++int
++dessertAppStatsTable_post_request(dessertAppStatsTable_registration *
++ user_context, int rc)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_post_request", "called\n"));
++
++ /*
++ * TODO:511:o: Perform dessertAppStatsTable post-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_post_request */
++
++
++/** @{ */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable.h 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,251 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_H
++#define DESSERTAPPSTATSTABLE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/** @addtogroup misc misc: Miscellaneous routines
++ *
++ * @{
++ */
++#include <net-snmp/library/asn1.h>
++
++ /*
++ * other required module components
++ */
++ /* *INDENT-OFF* */
++config_add_mib(DESSERT-MIB)
++config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_interface)
++config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_access)
++config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_get)
++config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_set)
++ /* *INDENT-ON* */
++
++ /*
++ * OID and column number definitions for dessertAppStatsTable
++ */
++#include "dessertAppStatsTable_oids.h"
++
++ /*
++ * enum definions
++ */
++#include "dessertAppStatsTable_enums.h"
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++ void init_dessertAppStatsTable(void);
++ void shutdown_dessertAppStatsTable(void);
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++ /*
++ *********************************************************************
++ * When you register your mib, you get to provide a generic
++ * pointer that will be passed back to you for most of the
++ * functions calls.
++ *
++ * TODO:100:r: Review all context structures
++ */
++ /*
++ * TODO:101:o: |-> Review dessertAppStatsTable registration context.
++ */
++ typedef netsnmp_data_list dessertAppStatsTable_registration;
++
++/**********************************************************************/
++ /*
++ * TODO:110:r: |-> Review dessertAppStatsTable data context structure.
++ * This structure is used to represent the data for dessertAppStatsTable.
++ */
++ /*
++ * This structure contains storage for all the columns defined in the
++ * dessertAppStatsTable.
++ */
++ typedef struct dessertAppStatsTable_data_s {
++
++ /*
++ * appStatsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appStatsName[255];
++ size_t appStatsName_len; /* # of char elements, not bytes */
++
++ /*
++ * appStatsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appStatsDesc[255];
++ size_t appStatsDesc_len; /* # of char elements, not bytes */
++
++ /*
++ * appStatsNodeOrLink(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ u_long appStatsNodeOrLink;
++
++ /*
++ * appStatsValueType(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ u_long appStatsValueType;
++
++ /*
++ * appStatsMacAddress1(6)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appStatsMacAddress1[6];
++ size_t appStatsMacAddress1_len; /* # of char elements, not bytes */
++
++ /*
++ * appStatsMacAddress2(7)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appStatsMacAddress2[6];
++ size_t appStatsMacAddress2_len; /* # of char elements, not bytes */
++
++ /*
++ * appStatsTruthValue(8)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ u_long appStatsTruthValue;
++
++ /*
++ * appStatsInteger32(9)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
++ */
++ long appStatsInteger32;
++
++ /*
++ * appStatsUnsigned32(10)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
++ */
++ u_long appStatsUnsigned32;
++
++ /*
++ * appStatsCounter64(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 appStatsCounter64;
++
++ /*
++ * appStatsOctetString(12)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
++ */
++ char appStatsOctetString[1024];
++ size_t appStatsOctetString_len; /* # of char elements, not bytes */
++
++ } dessertAppStatsTable_data;
++
++
++ /*
++ * TODO:120:r: |-> Review dessertAppStatsTable mib index.
++ * This structure is used to represent the index for dessertAppStatsTable.
++ */
++ typedef struct dessertAppStatsTable_mib_index_s {
++
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long appStatsIndex;
++
++
++ } dessertAppStatsTable_mib_index;
++
++ /*
++ * TODO:121:r: | |-> Review dessertAppStatsTable max index length.
++ * If you KNOW that your indexes will never exceed a certain
++ * length, update this macro to that length.
++ */
++#define MAX_dessertAppStatsTable_IDX_LEN 1
++
++
++ /*
++ *********************************************************************
++ * TODO:130:o: |-> Review dessertAppStatsTable Row request (rowreq) context.
++ * When your functions are called, you will be passed a
++ * dessertAppStatsTable_rowreq_ctx pointer.
++ */
++ typedef struct dessertAppStatsTable_rowreq_ctx_s {
++
++ /** this must be first for container compare to work */
++ netsnmp_index oid_idx;
++ oid oid_tmp[MAX_dessertAppStatsTable_IDX_LEN];
++
++ dessertAppStatsTable_mib_index tbl_idx;
++
++ dessertAppStatsTable_data data;
++ unsigned int column_exists_flags; /* flags for existence */
++
++ /*
++ * flags per row. Currently, the first (lower) 8 bits are reserved
++ * for the user. See mfd.h for other flags.
++ */
++ u_int rowreq_flags;
++
++ /*
++ * TODO:131:o: | |-> Add useful data to dessertAppStatsTable rowreq context.
++ */
++
++ /*
++ * storage for future expansion
++ */
++ netsnmp_data_list *dessertAppStatsTable_data_list;
++
++ } dessertAppStatsTable_rowreq_ctx;
++
++ typedef struct dessertAppStatsTable_ref_rowreq_ctx_s {
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
++ } dessertAppStatsTable_ref_rowreq_ctx;
++
++ /*
++ *********************************************************************
++ * function prototypes
++ */
++ int
++ dessertAppStatsTable_pre_request(dessertAppStatsTable_registration
++ * user_context);
++ int
++ dessertAppStatsTable_post_request(dessertAppStatsTable_registration
++ * user_context, int rc);
++
++
++ dessertAppStatsTable_rowreq_ctx
++ *dessertAppStatsTable_row_find_by_mib_index
++ (dessertAppStatsTable_mib_index * mib_idx);
++
++ extern oid dessertAppStatsTable_oid[];
++ extern int dessertAppStatsTable_oid_size;
++
++
++#include "dessertAppStatsTable_interface.h"
++#include "dessertAppStatsTable_data_access.h"
++#include "dessertAppStatsTable_data_get.h"
++#include "dessertAppStatsTable_data_set.h"
++
++ /*
++ * DUMMY markers, ignore
++ *
++ * TODO:099:x: *************************************************************
++ * TODO:199:x: *************************************************************
++ * TODO:299:x: *************************************************************
++ * TODO:399:x: *************************************************************
++ * TODO:499:x: *************************************************************
++ */
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_access.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_access.c 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,407 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++#include "dessertAppStatsTable_data_access.h"
++#include <dessert/dessert.h>
++#include "dessert_internal.h"
++
++/** @ingroup interface
++ * @addtogroup data_access data_access: Routines to access data
++ *
++ * These routines are used to locate the data used to satisfy
++ * requests.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++
++/**
++ * initialization for dessertAppStatsTable data access
++ *
++ * This function is called during startup to allow you to
++ * allocate any resources you need for the data table.
++ *
++ * @param dessertAppStatsTable_reg
++ * Pointer to dessertAppStatsTable_registration
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : unrecoverable error.
++ */
++int
++dessertAppStatsTable_init_data(dessertAppStatsTable_registration *
++ dessertAppStatsTable_reg)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_init_data", "called\n"));
++
++ /*
++ * TODO:303:o: Initialize dessertAppStatsTable data.
++ */
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ * if you are the sole writer for the file, you could
++ * open it here. However, as stated earlier, we are assuming
++ * the worst case, which in this case means that the file is
++ * written to by someone else, and might not even exist when
++ * we start up. So we can't do anything here.
++ */
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_init_data */
++
++/**
++ * container overview
++ *
++ */
++
++/**
++ * container initialization
++ *
++ * @param container_ptr_ptr A pointer to a container pointer. If you
++ * create a custom container, use this parameter to return it
++ * to the MFD helper. If set to NULL, the MFD helper will
++ * allocate a container for you.
++ * @param cache A pointer to a cache structure. You can set the timeout
++ * and other cache flags using this pointer.
++ *
++ * This function is called at startup to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases. If no custom
++ * container is allocated, the MFD code will create one for your.
++ *
++ * This is also the place to set up cache behavior. The default, to
++ * simply set the cache timeout, will work well with the default
++ * container. If you are using a custom container, you may want to
++ * look at the cache helper documentation to see if there are any
++ * flags you want to set.
++ *
++ * @remark
++ * This would also be a good place to do any initialization needed
++ * for you data source. For example, opening a connection to another
++ * process that will supply the data, opening a database, etc.
++ */
++void
++dessertAppStatsTable_container_init(netsnmp_container ** container_ptr_ptr,
++ netsnmp_cache * cache)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_init", "called\n"));
++
++ if (NULL == container_ptr_ptr) {
++ snmp_log(LOG_ERR,
++ "bad container param to dessertAppStatsTable_container_init\n");
++ return;
++ }
++
++ /*
++ * For advanced users, you can use a custom container. If you
++ * do not create one, one will be created for you.
++ */
++ *container_ptr_ptr = NULL;
++
++ if (NULL == cache) {
++ snmp_log(LOG_ERR,
++ "bad cache param to dessertAppStatsTable_container_init\n");
++ return;
++ }
++
++ /*
++ * TODO:345:A: Set up dessertAppStatsTable cache properties.
++ *
++ * Also for advanced users, you can set parameters for the
++ * cache. Do not change the magic pointer, as it is used
++ * by the MFD helper. To completely disable caching, set
++ * cache->enabled to 0.
++ */
++ cache->timeout = DESSERTAPPSTATSTABLE_CACHE_TIMEOUT; /* seconds */
++} /* dessertAppStatsTable_container_init */
++
++/**
++ * container shutdown
++ *
++ * @param container_ptr A pointer to the container.
++ *
++ * This function is called at shutdown to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases.
++ *
++ * This function is called before dessertAppStatsTable_container_free().
++ *
++ * @remark
++ * This would also be a good place to do any cleanup needed
++ * for you data source. For example, closing a connection to another
++ * process that supplied the data, closing a database, etc.
++ */
++void
++dessertAppStatsTable_container_shutdown(netsnmp_container * container_ptr)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_shutdown", "called\n"));
++
++ if (NULL == container_ptr) {
++ snmp_log(LOG_ERR,
++ "bad params to dessertAppStatsTable_container_shutdown\n");
++ return;
++ }
++
++} /* dessertAppStatsTable_container_shutdown */
++
++/**
++ * load initial data
++ *
++ * This function will also be called by the cache helper to load
++ * the container again (after the container free function has been
++ * called to free the previous contents).
++ *
++ * @param container container to which items should be inserted
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
++ * @retval MFD_ERROR : other error.
++ *
++ * This function is called to load the index(es) (and data, optionally)
++ * for the every row in the data set.
++ *
++ * @remark
++ * While loading the data, the only important thing is the indexes.
++ * If access to your data is cheap/fast (e.g. you have a pointer to a
++ * structure in memory), it would make sense to update the data here.
++ * If, however, the accessing the data invovles more work (e.g. parsing
++ * some other existing data, or peforming calculations to derive the data),
++ * then you can limit yourself to setting the indexes and saving any
++ * information you will need later. Then use the saved information in
++ * dessertAppStatsTable_row_prep() for populating data.
++ *
++ * @note
++ * If you need consistency between rows (like you want statistics
++ * for each row to be from the same time frame), you should set all
++ * data here.
++ *
++ */
++int dessertAppStatsTable_container_load(netsnmp_container * container) {
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
++ size_t count = 0;
++
++ dessert_agentx_appstats_t *appstats_list = NULL;
++ dessert_agentx_appstats_t *appstat;
++
++ /*
++ * temporary storage for index values
++ */
++ long appStatsIndex;
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_load", "called\n"));
++ dessert_debug("dessertAppStatsTable_container_load called");
++
++ /* harvest the appstats from the callbacks registered via *dessert_agentx_appstats_add* */
++ if (_dessert_agentx_appstats_harvest_callbacks(&appstats_list)
++ == DESSERT_ERR)
++ return MFD_RESOURCE_UNAVAILABLE;
++
++ /*
++ * Load/update data in the dessertAppStatsTable container.
++ * loop over your dessertAppStatsTable data, allocate a rowreq context,
++ * set the index(es) [and data, optionally] and insert into
++ * the container.
++ */
++ DL_FOREACH(appstats_list, appstat) {
++
++ appStatsIndex = count++;
++
++ /*
++ * set indexes in new dessertAppStatsTable rowreq context.
++ */
++ rowreq_ctx = dessertAppStatsTable_allocate_rowreq_ctx();
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "memory allocation failed\n");
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++ if (MFD_SUCCESS != dessertAppStatsTable_indexes_set(rowreq_ctx,
++ appStatsIndex)) {
++ snmp_log(LOG_ERR, "error setting index while loading "
++ "dessertAppStatsTable data.\n");
++ dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
++ continue;
++ }
++
++ /* clear all column flags */
++ rowreq_ctx->column_exists_flags = 0;
++
++ /* these columns are always present*/
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSNAME_FLAG
++ | COLUMN_APPSTATSDESC_FLAG | COLUMN_APPSTATSNODEORLINK_FLAG
++ | COLUMN_APPSTATSVALUETYPE_FLAG;
++
++ rowreq_ctx->data.appStatsName_len = strlen(appstat->name);
++ strcpy(rowreq_ctx->data.appStatsName, appstat->name);
++
++ rowreq_ctx->data.appStatsDesc_len = strlen(appstat->desc);
++ strcpy(rowreq_ctx->data.appStatsDesc, appstat->desc);
++
++ appStatsNodeOrLink_map(&(rowreq_ctx->data.appStatsNodeOrLink),appstat->node_or_link);
++ appStatsValueType_map(&(rowreq_ctx->data.appStatsValueType),appstat->value_type);
++
++ /* are the macaddress? columns present?*/
++ switch (appstat->node_or_link) {
++
++ case DESSERT_APPSTATS_NODEORLINK_NONE:
++ break;
++ case DESSERT_APPSTATS_NODEORLINK_NODE:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSMACADDRESS1_FLAG;
++
++ rowreq_ctx->data.appStatsMacAddress1_len = ETHER_ADDR_LEN;
++ memcpy(rowreq_ctx->data.appStatsMacAddress1, appstat->macaddress1,
++ ETHER_ADDR_LEN);
++
++ break;
++ case DESSERT_APPSTATS_NODEORLINK_LINK:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSMACADDRESS1_FLAG
++ | COLUMN_APPSTATSMACADDRESS2_FLAG;
++
++ rowreq_ctx->data.appStatsMacAddress1_len = ETHER_ADDR_LEN;
++ memcpy(rowreq_ctx->data.appStatsMacAddress1, appstat->macaddress1,
++ ETHER_ADDR_LEN);
++
++ rowreq_ctx->data.appStatsMacAddress2_len = ETHER_ADDR_LEN;
++ memcpy(rowreq_ctx->data.appStatsMacAddress2, appstat->macaddress2,
++ ETHER_ADDR_LEN);
++
++ break;
++ default:
++ dessert_err("appstats->node_or_link not valid!");
++ }
++
++ /* which of the 'value'-columns is actually present? */
++ switch (appstat->value_type) {
++
++ case DESSERT_APPSTATS_VALUETYPE_BOOL:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSTRUTHVALUE_FLAG;
++ appStatsTruthValue_map(&(rowreq_ctx->data.appStatsTruthValue),appstat->bool);
++ break;
++
++ case DESSERT_APPSTATS_VALUETYPE_INT32:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSINTEGER32_FLAG;
++ rowreq_ctx->data.appStatsInteger32 = appstat->int32;
++
++ break;
++
++ case DESSERT_APPSTATS_VALUETYPE_UINT32:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSUNSIGNED32_FLAG;
++ rowreq_ctx->data.appStatsUnsigned32 = appstat->uint32;
++
++ break;
++
++ case DESSERT_APPSTATS_VALUETYPE_COUNTER64:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSCOUNTER64_FLAG;
++ rowreq_ctx->data.appStatsCounter64.low = appstat->counter64
++ & 0xffffffff;
++ rowreq_ctx->data.appStatsCounter64.high = appstat->counter64 >> 32;
++
++ break;
++
++ case DESSERT_APPSTATS_VALUETYPE_OCTETSTRING:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSOCTETSTRING_FLAG;
++ rowreq_ctx->data.appStatsOctetString_len = appstat->octetstring_len;
++ memcpy(&(rowreq_ctx->data.appStatsOctetString), appstat->octetstring, appstat->octetstring_len);
++
++ break;
++
++ default:
++ dessert_err("appstats->value_type not valid! [%s]", appstat->name);
++ }
++
++ /*
++ * insert into table container
++ */
++ CONTAINER_INSERT(container, rowreq_ctx);
++ }
++
++ _dessert_agentx_appstats_free_list(&appstats_list);
++
++ DEBUGMSGT(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_load", "inserted %d records\n", count));
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_container_load */
++
++/**
++ * container clean up
++ *
++ * @param container container with all current items
++ *
++ * This optional callback is called prior to all
++ * item's being removed from the container. If you
++ * need to do any processing before that, do it here.
++ *
++ * @note
++ * The MFD helper will take care of releasing all the row contexts.
++ *
++ */
++void
++dessertAppStatsTable_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_free", "called\n"));
++
++ /*
++ * TODO:380:M: Free dessertAppStatsTable container data.
++ */
++} /* dessertAppStatsTable_container_free */
++
++/**
++ * prepare row for processing.
++ *
++ * When the agent has located the row for a request, this function is
++ * called to prepare the row for processing. If you fully populated
++ * the data context during the index setup phase, you may not need to
++ * do anything.
++ *
++ * @param rowreq_ctx pointer to a context.
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ */
++int
++dessertAppStatsTable_row_prep(dessertAppStatsTable_rowreq_ctx * rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_row_prep", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:390:o: Prepare row for request.
++ * If populating row data was delayed, this is the place to
++ * fill in the row for this request.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_row_prep */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_access.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_access.h 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,93 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_DATA_ACCESS_H
++#define DESSERTAPPSTATSTABLE_DATA_ACCESS_H
++
++#include "dessert_internal.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++
++
++ int
++ dessertAppStatsTable_init_data(dessertAppStatsTable_registration *
++ dessertAppStatsTable_reg);
++
++
++ /*
++ * TODO:180:o: Review dessertAppStatsTable cache timeout.
++ * The number of seconds before the cache times out
++ */
++#define DESSERTAPPSTATSTABLE_CACHE_TIMEOUT DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT
++
++ void dessertAppStatsTable_container_init(netsnmp_container
++ **
++ container_ptr_ptr,
++ netsnmp_cache *
++ cache);
++ void
++ dessertAppStatsTable_container_shutdown(netsnmp_container *
++ container_ptr);
++
++ int dessertAppStatsTable_container_load(netsnmp_container *
++ container);
++ void dessertAppStatsTable_container_free(netsnmp_container *
++ container);
++
++ int dessertAppStatsTable_cache_load(netsnmp_container *
++ container);
++ void dessertAppStatsTable_cache_free(netsnmp_container *
++ container);
++
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ *********************************************************************
++ * Since we have no idea how you really access your data, we'll go with
++ * a worst case example: a flat text file.
++ */
++#define MAX_LINE_SIZE 256
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++ int
++ dessertAppStatsTable_row_prep(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_get.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_get.c 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,1088 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++
++
++/** @defgroup data_get data_get: Routines to get data
++ *
++ * TODO:230:M: Implement dessertAppStatsTable get routines.
++ * TODO:240:M: Implement dessertAppStatsTable mapping routines (if any).
++ *
++ * These routine are used to get the value for individual objects. The
++ * row context is passed, along with a pointer to the memory where the
++ * value should be copied.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++
++/*
++ * ---------------------------------------------------------------------
++ * * TODO:200:r: Implement dessertAppStatsTable data context functions.
++ */
++
++
++/**
++ * set mib index(es)
++ *
++ * @param tbl_idx mib index structure
++ * @param appStatsIndex_val
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This convenience function is useful for setting all the MIB index
++ * components with a single function call. It is assume that the C values
++ * have already been mapped from their native/rawformat to the MIB format.
++ */
++int
++dessertAppStatsTable_indexes_set_tbl_idx(dessertAppStatsTable_mib_index *
++ tbl_idx, long appStatsIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_indexes_set_tbl_idx", "called\n"));
++
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ tbl_idx->appStatsIndex = appStatsIndex_val;
++
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_indexes_set_tbl_idx */
++
++/**
++ * @internal
++ * set row context indexes
++ *
++ * @param reqreq_ctx the row context that needs updated indexes
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This function sets the mib indexs, then updates the oid indexs
++ * from the mib index.
++ */
++int
++dessertAppStatsTable_indexes_set(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx, long appStatsIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_indexes_set", "called\n"));
++
++ if (MFD_SUCCESS !=
++ dessertAppStatsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
++ appStatsIndex_val))
++ return MFD_ERROR;
++
++ /*
++ * convert mib index to oid index
++ */
++ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
++ if (0 != dessertAppStatsTable_index_to_oid(&rowreq_ctx->oid_idx,
++ &rowreq_ctx->tbl_idx)) {
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_indexes_set */
++
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsName
++ * appStatsName is subid 2 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.2
++ * Description:
++The name of the statistical datum
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the appStatsName data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsName_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsName_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsName.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsName_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsName_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsName_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsName_val_ptr_ptr,
++ size_t *appStatsName_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsName_val_ptr_ptr)
++ && (NULL != *appStatsName_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsName_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsName_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsName data.
++ * copy (* appStatsName_val_ptr_ptr ) data and (* appStatsName_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsName data
++ */
++ if ((NULL == (*appStatsName_val_ptr_ptr)) ||
++ ((*appStatsName_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsName_len *
++ sizeof(rowreq_ctx->data.appStatsName[0])))) {
++ /*
++ * allocate space for appStatsName data
++ */
++ (*appStatsName_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsName_len *
++ sizeof(rowreq_ctx->data.appStatsName[0]));
++ if (NULL == (*appStatsName_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsName_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsName_len *
++ sizeof(rowreq_ctx->data.appStatsName[0]);
++ memcpy((*appStatsName_val_ptr_ptr), rowreq_ctx->data.appStatsName,
++ rowreq_ctx->data.appStatsName_len *
++ sizeof(rowreq_ctx->data.appStatsName[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsName_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsDesc
++ * appStatsDesc is subid 3 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.3
++ * Description:
++A short description of the statistical datum
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the appStatsDesc data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsDesc_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsDesc_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsDesc.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsDesc_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsDesc_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsDesc_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsDesc_val_ptr_ptr,
++ size_t *appStatsDesc_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsDesc_val_ptr_ptr)
++ && (NULL != *appStatsDesc_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsDesc_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsDesc_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsDesc data.
++ * copy (* appStatsDesc_val_ptr_ptr ) data and (* appStatsDesc_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsDesc data
++ */
++ if ((NULL == (*appStatsDesc_val_ptr_ptr)) ||
++ ((*appStatsDesc_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsDesc_len *
++ sizeof(rowreq_ctx->data.appStatsDesc[0])))) {
++ /*
++ * allocate space for appStatsDesc data
++ */
++ (*appStatsDesc_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsDesc_len *
++ sizeof(rowreq_ctx->data.appStatsDesc[0]));
++ if (NULL == (*appStatsDesc_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsDesc_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsDesc_len *
++ sizeof(rowreq_ctx->data.appStatsDesc[0]);
++ memcpy((*appStatsDesc_val_ptr_ptr), rowreq_ctx->data.appStatsDesc,
++ rowreq_ctx->data.appStatsDesc_len *
++ sizeof(rowreq_ctx->data.appStatsDesc[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsDesc_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsNodeOrLink
++ * appStatsNodeOrLink is subid 4 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.4
++ * Description:
++Determines which of the appStatsMacAddress{1,2} coloumns
++ is valid and therefore indicates whether the information provided
++ by this row relates to a node or a link.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ * Enum range: 3/8. Values: none(0), node(1), link(2)
++ *
++ * Its syntax is INTEGER (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appStatsNodeOrLink.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appStatsNodeOrLink_map(u_long * mib_appStatsNodeOrLink_val_ptr,
++ u_long raw_appStatsNodeOrLink_val)
++{
++ netsnmp_assert(NULL != mib_appStatsNodeOrLink_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsNodeOrLink_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appStatsNodeOrLink enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appStatsNodeOrLink_val) {
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NONE:
++ *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_NONE;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NODE:
++ *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_NODE;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_LINK:
++ *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_LINK;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't map value %ld for appStatsNodeOrLink\n",
++ raw_appStatsNodeOrLink_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appStatsNodeOrLink_map */
++
++/**
++ * Extract the current value of the appStatsNodeOrLink data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsNodeOrLink_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsNodeOrLink_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appStatsNodeOrLink_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsNodeOrLink_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsNodeOrLink_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsNodeOrLink data.
++ * copy (* appStatsNodeOrLink_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsNodeOrLink_val_ptr) = rowreq_ctx->data.appStatsNodeOrLink;
++
++ return MFD_SUCCESS;
++} /* appStatsNodeOrLink_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsValueType
++ * appStatsValueType is subid 5 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.5
++ * Description:
++Indicates which of the coloumns (appStatsTruthValue,
++ appStatsInterger32, appStatsUInteger32, appStatsCounter64,
++ appStatsOctetString) in the dessertAppStatsTable is actually valid.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ * Enum range: 3/8. Values: bool(0), int32(1), uint32(2), counter64(3), octetstring(4)
++ *
++ * Its syntax is INTEGER (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appStatsValueType.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appStatsValueType_map(u_long * mib_appStatsValueType_val_ptr,
++ u_long raw_appStatsValueType_val)
++{
++ netsnmp_assert(NULL != mib_appStatsValueType_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsValueType_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appStatsValueType enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appStatsValueType_val) {
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_BOOL:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_BOOL;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_INT32:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_INT32;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_UINT32:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_UINT32;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_COUNTER64:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_COUNTER64;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_OCTETSTRING:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_OCTETSTRING;
++ break;
++
++ default:
++ snmp_log(LOG_ERR, "couldn't map value %ld for appStatsValueType\n",
++ raw_appStatsValueType_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appStatsValueType_map */
++
++/**
++ * Extract the current value of the appStatsValueType data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsValueType_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsValueType_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appStatsValueType_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsValueType_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsValueType_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsValueType data.
++ * copy (* appStatsValueType_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsValueType_val_ptr) = rowreq_ctx->data.appStatsValueType;
++
++ return MFD_SUCCESS;
++} /* appStatsValueType_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsMacAddress1
++ * appStatsMacAddress1 is subid 6 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.6
++ * Description:
++The hardware address of a node.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 1x:
++ *
++ * Ranges: 6;
++ *
++ * Its syntax is MacAddress (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 6)
++ */
++/**
++ * Extract the current value of the appStatsMacAddress1 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsMacAddress1_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsMacAddress1_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsMacAddress1.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsMacAddress1_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsMacAddress1_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsMacAddress1_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsMacAddress1_val_ptr_ptr,
++ size_t *appStatsMacAddress1_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsMacAddress1_val_ptr_ptr)
++ && (NULL != *appStatsMacAddress1_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsMacAddress1_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsMacAddress1_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsMacAddress1 data.
++ * copy (* appStatsMacAddress1_val_ptr_ptr ) data and (* appStatsMacAddress1_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsMacAddress1 data
++ */
++ if ((NULL == (*appStatsMacAddress1_val_ptr_ptr)) ||
++ ((*appStatsMacAddress1_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsMacAddress1_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress1[0])))) {
++ /*
++ * allocate space for appStatsMacAddress1 data
++ */
++ (*appStatsMacAddress1_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsMacAddress1_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress1[0]));
++ if (NULL == (*appStatsMacAddress1_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsMacAddress1_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsMacAddress1_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress1[0]);
++ memcpy((*appStatsMacAddress1_val_ptr_ptr),
++ rowreq_ctx->data.appStatsMacAddress1,
++ rowreq_ctx->data.appStatsMacAddress1_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress1[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsMacAddress1_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsMacAddress2
++ * appStatsMacAddress2 is subid 7 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.7
++ * Description:
++The hardware address of a second node.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 1x:
++ *
++ * Ranges: 6;
++ *
++ * Its syntax is MacAddress (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 6)
++ */
++/**
++ * Extract the current value of the appStatsMacAddress2 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsMacAddress2_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsMacAddress2_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsMacAddress2.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsMacAddress2_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsMacAddress2_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsMacAddress2_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsMacAddress2_val_ptr_ptr,
++ size_t *appStatsMacAddress2_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsMacAddress2_val_ptr_ptr)
++ && (NULL != *appStatsMacAddress2_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsMacAddress2_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsMacAddress2_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsMacAddress2 data.
++ * copy (* appStatsMacAddress2_val_ptr_ptr ) data and (* appStatsMacAddress2_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsMacAddress2 data
++ */
++ if ((NULL == (*appStatsMacAddress2_val_ptr_ptr)) ||
++ ((*appStatsMacAddress2_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsMacAddress2_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress2[0])))) {
++ /*
++ * allocate space for appStatsMacAddress2 data
++ */
++ (*appStatsMacAddress2_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsMacAddress2_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress2[0]));
++ if (NULL == (*appStatsMacAddress2_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsMacAddress2_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsMacAddress2_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress2[0]);
++ memcpy((*appStatsMacAddress2_val_ptr_ptr),
++ rowreq_ctx->data.appStatsMacAddress2,
++ rowreq_ctx->data.appStatsMacAddress2_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress2[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsMacAddress2_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsTruthValue
++ * appStatsTruthValue is subid 8 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.8
++ * Description:
++A statistical datum with TruthValue semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ * Enum range: 2/8. Values: true(1), false(2)
++ *
++ * Its syntax is TruthValue (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appStatsTruthValue.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appStatsTruthValue_map(u_long * mib_appStatsTruthValue_val_ptr,
++ u_long raw_appStatsTruthValue_val)
++{
++ netsnmp_assert(NULL != mib_appStatsTruthValue_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsTruthValue_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appStatsTruthValue enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appStatsTruthValue_val) {
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_TRUE:
++ *mib_appStatsTruthValue_val_ptr = TRUTHVALUE_TRUE;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_FALSE:
++ *mib_appStatsTruthValue_val_ptr = TRUTHVALUE_FALSE;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't map value %ld for appStatsTruthValue\n",
++ raw_appStatsTruthValue_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appStatsTruthValue_map */
++
++/**
++ * Extract the current value of the appStatsTruthValue data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsTruthValue_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsTruthValue_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appStatsTruthValue_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsTruthValue_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsTruthValue_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsTruthValue data.
++ * copy (* appStatsTruthValue_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsTruthValue_val_ptr) = rowreq_ctx->data.appStatsTruthValue;
++
++ return MFD_SUCCESS;
++} /* appStatsTruthValue_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsInteger32
++ * appStatsInteger32 is subid 9 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.9
++ * Description:
++A statistical datum with Integer32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is INTEGER32 (based on perltype INTEGER32)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
++ */
++/**
++ * Extract the current value of the appStatsInteger32 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsInteger32_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsInteger32_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ long *appStatsInteger32_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsInteger32_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsInteger32_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsInteger32 data.
++ * copy (* appStatsInteger32_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsInteger32_val_ptr) = rowreq_ctx->data.appStatsInteger32;
++
++ return MFD_SUCCESS;
++} /* appStatsInteger32_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsUnsigned32
++ * appStatsUnsigned32 is subid 10 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.10
++ * Description:
++A statistical datum with Unsigned32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
++ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
++ */
++/**
++ * Extract the current value of the appStatsUnsigned32 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsUnsigned32_val_ptr
++ * Pointer to storage for a u_long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsUnsigned32_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appStatsUnsigned32_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsUnsigned32_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsUnsigned32_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsUnsigned32 data.
++ * copy (* appStatsUnsigned32_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsUnsigned32_val_ptr) = rowreq_ctx->data.appStatsUnsigned32;
++
++ return MFD_SUCCESS;
++} /* appStatsUnsigned32_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsCounter64
++ * appStatsCounter64 is subid 11 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.11
++ * Description:
++A statistical datum with Counter64 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the appStatsCounter64 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsCounter64_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsCounter64_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ U64 * appStatsCounter64_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsCounter64_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy appStatsCounter64 data.
++ * get (* appStatsCounter64_val_ptr ).low and (* appStatsCounter64_val_ptr ).high from rowreq_ctx->data
++ */
++ (*appStatsCounter64_val_ptr).high =
++ rowreq_ctx->data.appStatsCounter64.high;
++ (*appStatsCounter64_val_ptr).low =
++ rowreq_ctx->data.appStatsCounter64.low;
++
++
++ return MFD_SUCCESS;
++} /* appStatsCounter64_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsOctetString
++ * appStatsOctetString is subid 12 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.12
++ * Description:
++A statistical datum containing of up to 1024 octets.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 0
++ * settable 0
++ *
++ * Ranges: 0 - 1024;
++ *
++ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 1024)
++ */
++/**
++ * Extract the current value of the appStatsOctetString data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsOctetString_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsOctetString_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsOctetString.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsOctetString_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsOctetString_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsOctetString_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsOctetString_val_ptr_ptr,
++ size_t *appStatsOctetString_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsOctetString_val_ptr_ptr)
++ && (NULL != *appStatsOctetString_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsOctetString_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsOctetString_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsOctetString data.
++ * copy (* appStatsOctetString_val_ptr_ptr ) data and (* appStatsOctetString_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsOctetString data
++ */
++ if ((NULL == (*appStatsOctetString_val_ptr_ptr)) ||
++ ((*appStatsOctetString_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsOctetString_len *
++ sizeof(rowreq_ctx->data.appStatsOctetString[0])))) {
++ /*
++ * allocate space for appStatsOctetString data
++ */
++ (*appStatsOctetString_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsOctetString_len *
++ sizeof(rowreq_ctx->data.appStatsOctetString[0]));
++ if (NULL == (*appStatsOctetString_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsOctetString_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsOctetString_len *
++ sizeof(rowreq_ctx->data.appStatsOctetString[0]);
++ memcpy((*appStatsOctetString_val_ptr_ptr),
++ rowreq_ctx->data.appStatsOctetString,
++ rowreq_ctx->data.appStatsOctetString_len *
++ sizeof(rowreq_ctx->data.appStatsOctetString[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsOctetString_get */
++
++
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_get.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_get.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,174 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ *
++ * @file dessertAppStatsTable_data_get.h
++ *
++ * @addtogroup get
++ *
++ * Prototypes for get functions
++ *
++ * @{
++ */
++#ifndef DESSERTAPPSTATSTABLE_DATA_GET_H
++#define DESSERTAPPSTATSTABLE_DATA_GET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * GET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * GET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++ /*
++ * indexes
++ */
++ int appStatsIndex_map(uint *mib_appStatsIndex_val_ptr, uint
++ raw_appStatsIndex_val);
++
++ int appStatsName_map(char **mib_appStatsName_val_ptr_ptr,
++ size_t
++ *mib_appStatsName_val_ptr_len_ptr,
++ char *raw_appStatsName_val_ptr,
++ size_t raw_appStatsName_val_ptr_len,
++ int allow_realloc);
++ int appStatsName_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appStatsName_val_ptr_ptr,
++ size_t *appStatsName_val_ptr_len_ptr);
++ int appStatsDesc_map(char **mib_appStatsDesc_val_ptr_ptr,
++ size_t
++ *mib_appStatsDesc_val_ptr_len_ptr,
++ char *raw_appStatsDesc_val_ptr,
++ size_t raw_appStatsDesc_val_ptr_len,
++ int allow_realloc);
++ int appStatsDesc_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appStatsDesc_val_ptr_ptr,
++ size_t *appStatsDesc_val_ptr_len_ptr);
++ int appStatsNodeOrLink_map(u_long *
++ mib_appStatsNodeOrLink_val_ptr,
++ u_long
++ raw_appStatsNodeOrLink_val);
++ int appStatsNodeOrLink_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long *
++ appStatsNodeOrLink_val_ptr);
++ int appStatsValueType_map(u_long *
++ mib_appStatsValueType_val_ptr,
++ u_long
++ raw_appStatsValueType_val);
++ int appStatsValueType_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long *
++ appStatsValueType_val_ptr);
++ int appStatsMacAddress1_map(char
++ **mib_appStatsMacAddress1_val_ptr_ptr,
++ size_t
++ *mib_appStatsMacAddress1_val_ptr_len_ptr,
++ char
++ *raw_appStatsMacAddress1_val_ptr,
++ size_t
++ raw_appStatsMacAddress1_val_ptr_len,
++ int allow_realloc);
++ int appStatsMacAddress1_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ char
++ **appStatsMacAddress1_val_ptr_ptr,
++ size_t
++ *appStatsMacAddress1_val_ptr_len_ptr);
++ int appStatsMacAddress2_map(char
++ **mib_appStatsMacAddress2_val_ptr_ptr,
++ size_t
++ *mib_appStatsMacAddress2_val_ptr_len_ptr,
++ char
++ *raw_appStatsMacAddress2_val_ptr,
++ size_t
++ raw_appStatsMacAddress2_val_ptr_len,
++ int allow_realloc);
++ int appStatsMacAddress2_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ char
++ **appStatsMacAddress2_val_ptr_ptr,
++ size_t
++ *appStatsMacAddress2_val_ptr_len_ptr);
++ int appStatsTruthValue_map(u_long *
++ mib_appStatsTruthValue_val_ptr,
++ u_long
++ raw_appStatsTruthValue_val);
++ int appStatsTruthValue_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long *
++ appStatsTruthValue_val_ptr);
++ int appStatsInteger32_map(long
++ *mib_appStatsInteger32_val_ptr,
++ long raw_appStatsInteger32_val);
++ int appStatsInteger32_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ long *appStatsInteger32_val_ptr);
++ int appStatsUnsigned32_map(u_long *
++ mib_appStatsUnsigned32_val_ptr,
++ u_long
++ raw_appStatsUnsigned32_val);
++ int appStatsUnsigned32_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long *
++ appStatsUnsigned32_val_ptr);
++ int appStatsCounter64_map(U64 *
++ mib_appStatsCounter64_val_ptr,
++ U64 raw_appStatsCounter64_val);
++ int appStatsCounter64_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * appStatsCounter64_val_ptr);
++ int appStatsOctetString_map(char
++ **mib_appStatsOctetString_val_ptr_ptr,
++ size_t
++ *mib_appStatsOctetString_val_ptr_len_ptr,
++ char
++ *raw_appStatsOctetString_val_ptr,
++ size_t
++ raw_appStatsOctetString_val_ptr_len,
++ int allow_realloc);
++ int appStatsOctetString_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ char
++ **appStatsOctetString_val_ptr_ptr,
++ size_t
++ *appStatsOctetString_val_ptr_len_ptr);
++
++
++ int
++ dessertAppStatsTable_indexes_set_tbl_idx
++ (dessertAppStatsTable_mib_index * tbl_idx, long appStatsIndex_val);
++ int
++ dessertAppStatsTable_indexes_set(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx, long appStatsIndex_val);
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_DATA_GET_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_set.c 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++
++
++/** @defgroup data_set data_set: Routines to set data
++ *
++ * These routines are used to set the value for individual objects. The
++ * row context is passed, along with the new value.
++ *
++ * @{
++ */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_set.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_DATA_SET_H
++#define DESSERTAPPSTATSTABLE_DATA_SET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * SET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * SET Table declarations
++ */
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_enums.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_enums.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,118 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_ENUMS_H
++#define DESSERTAPPSTATSTABLE_ENUMS_H
++
++#include <dessert/dessert.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ * NOTES on enums
++ * ==============
++ *
++ * Value Mapping
++ * -------------
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them
++ * below. For example, a boolean flag (1/0) is usually represented
++ * as a TruthValue in a MIB, which maps to the values (1/2).
++ *
++ */
++/*************************************************************************
++ *************************************************************************
++ *
++ * enum definitions for table dessertAppStatsTable
++ *
++ *************************************************************************
++ *************************************************************************/
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appStatsNodeOrLink (INTEGER / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef APPSTATSNODEORLINK_ENUMS
++#define APPSTATSNODEORLINK_ENUMS
++
++#define APPSTATSNODEORLINK_NONE 0
++#define APPSTATSNODEORLINK_NODE 1
++#define APPSTATSNODEORLINK_LINK 2
++
++#endif /* APPSTATSNODEORLINK_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appStatsNodeOrLink enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NONE DESSERT_APPSTATS_NODEORLINK_NONE
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NODE DESSERT_APPSTATS_NODEORLINK_NODE
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_LINK DESSERT_APPSTATS_NODEORLINK_LINK
++
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appStatsValueType (INTEGER / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef APPSTATSVALUETYPE_ENUMS
++#define APPSTATSVALUETYPE_ENUMS
++
++#define APPSTATSVALUETYPE_BOOL 0
++#define APPSTATSVALUETYPE_INT32 1
++#define APPSTATSVALUETYPE_UINT32 2
++#define APPSTATSVALUETYPE_COUNTER64 3
++#define APPSTATSVALUETYPE_OCTETSTRING 4
++
++#endif /* APPSTATSVALUETYPE_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appStatsValueType enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_BOOL DESSERT_APPSTATS_VALUETYPE_BOOL
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_INT32 DESSERT_APPSTATS_VALUETYPE_INT32
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_UINT32 DESSERT_APPSTATS_VALUETYPE_UINT32
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_COUNTER64 DESSERT_APPSTATS_VALUETYPE_COUNTER64
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_OCTETSTRING DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
++
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appStatsTruthValue (TruthValue / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef TRUTHVALUE_ENUMS
++#define TRUTHVALUE_ENUMS
++
++#define TRUTHVALUE_TRUE 1
++#define TRUTHVALUE_FALSE 2
++
++#endif /* TRUTHVALUE_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appStatsTruthValue enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_TRUE DESSERT_APPSTATS_BOOL_TRUE
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_FALSE DESSERT_APPSTATS_BOOL_FALSE
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_interface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_interface.c 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,1069 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++
++
++#include <net-snmp/agent/table_container.h>
++#include <net-snmp/library/container.h>
++
++#include "dessertAppStatsTable_interface.h"
++
++#include <ctype.h>
++
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++typedef struct dessertAppStatsTable_interface_ctx_s {
++
++ netsnmp_container *container;
++ netsnmp_cache *cache;
++
++ dessertAppStatsTable_registration *user_ctx;
++
++ netsnmp_table_registration_info tbl_info;
++
++ netsnmp_baby_steps_access_methods access_multiplexer;
++
++} dessertAppStatsTable_interface_ctx;
++
++static dessertAppStatsTable_interface_ctx dessertAppStatsTable_if_ctx;
++
++static void
++_dessertAppStatsTable_container_init(dessertAppStatsTable_interface_ctx *
++ if_ctx);
++static void
++_dessertAppStatsTable_container_shutdown(dessertAppStatsTable_interface_ctx
++ * if_ctx);
++
++
++netsnmp_container *
++dessertAppStatsTable_container_get(void)
++{
++ return dessertAppStatsTable_if_ctx.container;
++}
++
++dessertAppStatsTable_registration *
++dessertAppStatsTable_registration_get(void)
++{
++ return dessertAppStatsTable_if_ctx.user_ctx;
++}
++
++dessertAppStatsTable_registration *
++dessertAppStatsTable_registration_set(dessertAppStatsTable_registration *
++ newreg)
++{
++ dessertAppStatsTable_registration *old =
++ dessertAppStatsTable_if_ctx.user_ctx;
++ dessertAppStatsTable_if_ctx.user_ctx = newreg;
++ return old;
++}
++
++int
++dessertAppStatsTable_container_size(void)
++{
++ return CONTAINER_SIZE(dessertAppStatsTable_if_ctx.container);
++}
++
++/*
++ * mfd multiplexer modes
++ */
++static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_pre_request;
++static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_post_request;
++static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_object_lookup;
++static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_get_values;
++/**
++ * @internal
++ * Initialize the table dessertAppStatsTable
++ * (Define its contents and how it's structured)
++ */
++void
++_dessertAppStatsTable_initialize_interface
++ (dessertAppStatsTable_registration * reg_ptr, u_long flags)
++{
++ netsnmp_baby_steps_access_methods *access_multiplexer =
++ &dessertAppStatsTable_if_ctx.access_multiplexer;
++ netsnmp_table_registration_info *tbl_info =
++ &dessertAppStatsTable_if_ctx.tbl_info;
++ netsnmp_handler_registration *reginfo;
++ netsnmp_mib_handler *handler;
++ int mfd_modes = 0;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_initialize_interface", "called\n"));
++
++
++ /*************************************************
++ *
++ * save interface context for dessertAppStatsTable
++ */
++ /*
++ * Setting up the table's definition
++ */
++ netsnmp_table_helper_add_indexes(tbl_info,ASN_INTEGER,
++ /** index: appStatsIndex */
++ 0);
++
++ /*
++ * Define the minimum and maximum accessible columns. This
++ * optimizes retrival.
++ */
++ tbl_info->min_column = DESSERTAPPSTATSTABLE_MIN_COL;
++ tbl_info->max_column = DESSERTAPPSTATSTABLE_MAX_COL;
++
++ /*
++ * save users context
++ */
++ dessertAppStatsTable_if_ctx.user_ctx = reg_ptr;
++
++ /*
++ * call data access initialization code
++ */
++ dessertAppStatsTable_init_data(reg_ptr);
++
++ /*
++ * set up the container
++ */
++ _dessertAppStatsTable_container_init(&dessertAppStatsTable_if_ctx);
++ if (NULL == dessertAppStatsTable_if_ctx.container) {
++ snmp_log(LOG_ERR,
++ "could not initialize container for dessertAppStatsTable\n");
++ return;
++ }
++
++ /*
++ * access_multiplexer: REQUIRED wrapper for get request handling
++ */
++ access_multiplexer->object_lookup =
++ _mfd_dessertAppStatsTable_object_lookup;
++ access_multiplexer->get_values = _mfd_dessertAppStatsTable_get_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->pre_request =
++ _mfd_dessertAppStatsTable_pre_request;
++ access_multiplexer->post_request =
++ _mfd_dessertAppStatsTable_post_request;
++
++
++ /*************************************************
++ *
++ * Create a registration, save our reg data, register table.
++ */
++ DEBUGMSGTL(("dessertAppStatsTable:init_dessertAppStatsTable",
++ "Registering dessertAppStatsTable as a mibs-for-dummies table.\n"));
++ handler =
++ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
++ reginfo =
++ netsnmp_handler_registration_create("dessertAppStatsTable",
++ handler,
++ dessertAppStatsTable_oid,
++ dessertAppStatsTable_oid_size,
++ HANDLER_CAN_BABY_STEP |
++ HANDLER_CAN_RONLY);
++ if (NULL == reginfo) {
++ snmp_log(LOG_ERR,
++ "error registering table dessertAppStatsTable\n");
++ return;
++ }
++ reginfo->my_reg_void = &dessertAppStatsTable_if_ctx;
++
++ /*************************************************
++ *
++ * set up baby steps handler, create it and inject it
++ */
++ if (access_multiplexer->object_lookup)
++ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
++ if (access_multiplexer->set_values)
++ mfd_modes |= BABY_STEP_SET_VALUES;
++ if (access_multiplexer->irreversible_commit)
++ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
++ if (access_multiplexer->object_syntax_checks)
++ mfd_modes |= BABY_STEP_CHECK_OBJECT;
++
++ if (access_multiplexer->pre_request)
++ mfd_modes |= BABY_STEP_PRE_REQUEST;
++ if (access_multiplexer->post_request)
++ mfd_modes |= BABY_STEP_POST_REQUEST;
++
++ if (access_multiplexer->undo_setup)
++ mfd_modes |= BABY_STEP_UNDO_SETUP;
++ if (access_multiplexer->undo_cleanup)
++ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
++ if (access_multiplexer->undo_sets)
++ mfd_modes |= BABY_STEP_UNDO_SETS;
++
++ if (access_multiplexer->row_creation)
++ mfd_modes |= BABY_STEP_ROW_CREATE;
++ if (access_multiplexer->consistency_checks)
++ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
++ if (access_multiplexer->commit)
++ mfd_modes |= BABY_STEP_COMMIT;
++ if (access_multiplexer->undo_commit)
++ mfd_modes |= BABY_STEP_UNDO_COMMIT;
++
++ handler = netsnmp_baby_steps_handler_get(mfd_modes);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
++ */
++ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject container_table helper
++ */
++ handler =
++ netsnmp_container_table_handler_get(tbl_info,
++ dessertAppStatsTable_if_ctx.
++ container,
++ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject cache helper
++ */
++ if (NULL != dessertAppStatsTable_if_ctx.cache) {
++ handler =
++ netsnmp_cache_handler_get(dessertAppStatsTable_if_ctx.cache);
++ netsnmp_inject_handler(reginfo, handler);
++ }
++
++ /*
++ * register table
++ */
++ netsnmp_register_table(reginfo, tbl_info);
++
++} /* _dessertAppStatsTable_initialize_interface */
++
++/**
++ * @internal
++ * Shutdown the table dessertAppStatsTable
++ */
++void
++_dessertAppStatsTable_shutdown_interface(dessertAppStatsTable_registration
++ * reg_ptr)
++{
++ /*
++ * shutdown the container
++ */
++ _dessertAppStatsTable_container_shutdown(&dessertAppStatsTable_if_ctx);
++}
++
++void
++dessertAppStatsTable_valid_columns_set(netsnmp_column_info *vc)
++{
++ dessertAppStatsTable_if_ctx.tbl_info.valid_columns = vc;
++} /* dessertAppStatsTable_valid_columns_set */
++
++/**
++ * @internal
++ * convert the index component stored in the context to an oid
++ */
++int
++dessertAppStatsTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertAppStatsTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_appStatsIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_appStatsIndex, 0x00, sizeof(var_appStatsIndex));
++ var_appStatsIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_appStatsIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_index_to_oid", "called\n"));
++
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ snmp_set_var_value(&var_appStatsIndex,
++ (u_char *) & mib_idx->appStatsIndex,
++ sizeof(mib_idx->appStatsIndex));
++
++
++ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
++ NULL, 0, &var_appStatsIndex);
++ if (err)
++ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_appStatsIndex);
++
++ return err;
++} /* dessertAppStatsTable_index_to_oid */
++
++/**
++ * extract dessertAppStatsTable indexes from a netsnmp_index
++ *
++ * @retval SNMP_ERR_NOERROR : no error
++ * @retval SNMP_ERR_GENERR : error
++ */
++int
++dessertAppStatsTable_index_from_oid(netsnmp_index * oid_idx,
++ dessertAppStatsTable_mib_index *
++ mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_appStatsIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_appStatsIndex, 0x00, sizeof(var_appStatsIndex));
++ var_appStatsIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_appStatsIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_index_from_oid", "called\n"));
++
++ /*
++ * parse the oid into the individual index components
++ */
++ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
++ &var_appStatsIndex);
++ if (err == SNMP_ERR_NOERROR) {
++ /*
++ * copy out values
++ */
++ mib_idx->appStatsIndex = *((long *)var_appStatsIndex.val.string);
++
++
++ }
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_appStatsIndex);
++
++ return err;
++} /* dessertAppStatsTable_index_from_oid */
++
++
++/*
++ *********************************************************************
++ * @internal
++ * allocate resources for a dessertAppStatsTable_rowreq_ctx
++ */
++dessertAppStatsTable_rowreq_ctx *
++dessertAppStatsTable_allocate_rowreq_ctx(void)
++{
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
++ SNMP_MALLOC_TYPEDEF(dessertAppStatsTable_rowreq_ctx);
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:dessertAppStatsTable_allocate_rowreq_ctx", "called\n"));
++
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
++ "dessertAppStatsTable_rowreq_ctx.\n");
++ return NULL;
++ }
++
++ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
++
++ rowreq_ctx->dessertAppStatsTable_data_list = NULL;
++
++
++ return rowreq_ctx;
++} /* dessertAppStatsTable_allocate_rowreq_ctx */
++
++/*
++ * @internal
++ * release resources for a dessertAppStatsTable_rowreq_ctx
++ */
++void
++dessertAppStatsTable_release_rowreq_ctx(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:dessertAppStatsTable_release_rowreq_ctx", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++
++ /*
++ * free index oid pointer
++ */
++ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
++ free(rowreq_ctx->oid_idx.oids);
++
++ SNMP_FREE(rowreq_ctx);
++} /* dessertAppStatsTable_release_rowreq_ctx */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppStatsTable_pre_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_pre_request", "called\n"));
++
++ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable",
++ "skipping additional pre_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ rc = dessertAppStatsTable_pre_request(dessertAppStatsTable_if_ctx.
++ user_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppStatsTable", "error %d from "
++ "dessertAppStatsTable_pre_request\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppStatsTable_pre_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppStatsTable_post_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc, packet_rc;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_post_request", "called\n"));
++
++ /*
++ * release row context, if deleted
++ */
++ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
++ dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
++
++ /*
++ * wait for last call before calling user
++ */
++ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable",
++ "waiting for last post_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
++ rc = dessertAppStatsTable_post_request(dessertAppStatsTable_if_ctx.
++ user_ctx, packet_rc);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppStatsTable", "error %d from "
++ "dessertAppStatsTable_post_request\n", rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppStatsTable_post_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppStatsTable_object_lookup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc = SNMP_ERR_NOERROR;
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_object_lookup", "called\n"));
++
++ /*
++ * get our context from mfd
++ * dessertAppStatsTable_interface_ctx *if_ctx =
++ * (dessertAppStatsTable_interface_ctx *)reginfo->my_reg_void;
++ */
++
++ if (NULL == rowreq_ctx) {
++ rc = SNMP_ERR_NOCREATION;
++ }
++
++ if (MFD_SUCCESS != rc)
++ netsnmp_request_set_error_all(requests, rc);
++ else
++ dessertAppStatsTable_row_prep(rowreq_ctx);
++
++ return SNMP_VALIDATE_ERR(rc);
++} /* _mfd_dessertAppStatsTable_object_lookup */
++
++/***********************************************************************
++ *
++ * GET processing
++ *
++ ***********************************************************************/
++/*
++ * @internal
++ * Retrieve the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppStatsTable_get_column(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "called for %d\n", column));
++
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appStatsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPSTATSNAME:
++ if (!(COLUMN_APPSTATSNAME_FLAG & rowreq_ctx->column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsName) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsName_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appStatsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPSTATSDESC:
++ if (!(COLUMN_APPSTATSDESC_FLAG & rowreq_ctx->column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsDesc) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsDesc_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appStatsNodeOrLink(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPSTATSNODEORLINK:
++ if (!
++ (COLUMN_APPSTATSNODEORLINK_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsNodeOrLink) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appStatsNodeOrLink_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appStatsValueType(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPSTATSVALUETYPE:
++ if (!
++ (COLUMN_APPSTATSVALUETYPE_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsValueType) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appStatsValueType_get(rowreq_ctx, (u_long *) var->val.string);
++ break;
++
++ /*
++ * appStatsMacAddress1(6)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPSTATSMACADDRESS1:
++ if (!
++ (COLUMN_APPSTATSMACADDRESS1_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsMacAddress1) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsMacAddress1_get(rowreq_ctx,
++ (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appStatsMacAddress2(7)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPSTATSMACADDRESS2:
++ if (!
++ (COLUMN_APPSTATSMACADDRESS2_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsMacAddress2) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsMacAddress2_get(rowreq_ctx,
++ (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appStatsTruthValue(8)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPSTATSTRUTHVALUE:
++ if (!
++ (COLUMN_APPSTATSTRUTHVALUE_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsTruthValue) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appStatsTruthValue_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appStatsInteger32(9)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
++ */
++ case COLUMN_APPSTATSINTEGER32:
++ if (!
++ (COLUMN_APPSTATSINTEGER32_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsInteger32) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(long);
++ var->type = ASN_INTEGER;
++ rc = appStatsInteger32_get(rowreq_ctx, (long *) var->val.string);
++ break;
++
++ /*
++ * appStatsUnsigned32(10)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
++ */
++ case COLUMN_APPSTATSUNSIGNED32:
++ if (!
++ (COLUMN_APPSTATSUNSIGNED32_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsUnsigned32) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_UNSIGNED;
++ rc = appStatsUnsigned32_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appStatsCounter64(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_APPSTATSCOUNTER64:
++ if (!
++ (COLUMN_APPSTATSCOUNTER64_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsCounter64) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = appStatsCounter64_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * appStatsOctetString(12)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
++ */
++ case COLUMN_APPSTATSOCTETSTRING:
++ if (!
++ (COLUMN_APPSTATSOCTETSTRING_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsOctetString) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsOctetString_get(rowreq_ctx,
++ (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ default:
++ if (DESSERTAPPSTATSTABLE_MIN_COL <= column
++ && column <= DESSERTAPPSTATSTABLE_MAX_COL) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "assume column %d is reserved\n", column));
++ rc = MFD_SKIP;
++ } else {
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppStatsTable_get_column\n",
++ column);
++ }
++ break;
++ }
++
++ return rc;
++} /* _dessertAppStatsTable_get_column */
++
++int
++_mfd_dessertAppStatsTable_get_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ u_char *old_string;
++ void (*dataFreeHook) (void *);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ DEBUGMSGTL(("9:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_values", "exists %p\n", rowreq_ctx->column_exists_flags));
++
++ for (; requests; requests = requests->next) {
++ /*
++ * save old pointer, so we can free it if replaced
++ */
++ old_string = requests->requestvb->val.string;
++ dataFreeHook = requests->requestvb->dataFreeHook;
++ if (NULL == requests->requestvb->val.string) {
++ requests->requestvb->val.string = requests->requestvb->buf;
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ } else if (requests->requestvb->buf ==
++ requests->requestvb->val.string) {
++ if (requests->requestvb->val_len !=
++ sizeof(requests->requestvb->buf))
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ }
++
++ /*
++ * get column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppStatsTable_get_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ if (MFD_SKIP == rc) {
++ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
++ rc = SNMP_ERR_NOERROR;
++ }
++ } else if (NULL == requests->requestvb->val.string) {
++ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
++ rc = SNMP_ERR_GENERR;
++ }
++ if (rc)
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++
++ /*
++ * if the buffer wasn't used previously for the old data (i.e. it
++ * was allcoated memory) and the get routine replaced the pointer,
++ * we need to free the previous pointer.
++ */
++ if (old_string && (old_string != requests->requestvb->buf) &&
++ (requests->requestvb->val.string != old_string)) {
++ if (dataFreeHook)
++ (*dataFreeHook) (old_string);
++ else
++ free(old_string);
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppStatsTable_get_values */
++
++
++/***********************************************************************
++ *
++ * SET processing
++ *
++ ***********************************************************************/
++
++/*
++ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
++ */
++/***********************************************************************
++ *
++ * DATA ACCESS
++ *
++ ***********************************************************************/
++static void _container_free(netsnmp_container * container);
++
++/**
++ * @internal
++ */
++static int
++_cache_load(netsnmp_cache * cache, void *vmagic)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_cache_load", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache for dessertAppStatsTable_cache_load\n");
++ return -1;
++ }
++
++ /** should only be called for an invalid or expired cache */
++ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
++
++ /*
++ * call user code
++ */
++ return dessertAppStatsTable_container_load((netsnmp_container *)
++ cache->magic);
++} /* _cache_load */
++
++/**
++ * @internal
++ */
++static void
++_cache_free(netsnmp_cache * cache, void *magic)
++{
++ netsnmp_container *container;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_cache_free", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache in dessertAppStatsTable_cache_free\n");
++ return;
++ }
++
++ container = (netsnmp_container *) cache->magic;
++
++ _container_free(container);
++} /* _cache_free */
++
++/**
++ * @internal
++ */
++static void
++_container_item_free(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ void *context)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_container_item_free",
++ "called\n"));
++
++ if (NULL == rowreq_ctx)
++ return;
++
++ dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
++} /* _container_item_free */
++
++/**
++ * @internal
++ */
++static void
++_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_container_free",
++ "called\n"));
++
++ if (NULL == container) {
++ snmp_log(LOG_ERR,
++ "invalid container in dessertAppStatsTable_container_free\n");
++ return;
++ }
++
++ /*
++ * call user code
++ */
++ dessertAppStatsTable_container_free(container);
++
++ /*
++ * free all items. inefficient, but easy.
++ */
++ CONTAINER_CLEAR(container,
++ (netsnmp_container_obj_func *) _container_item_free,
++ NULL);
++} /* _container_free */
++
++/**
++ * @internal
++ * initialize the container with functions or wrappers
++ */
++void
++_dessertAppStatsTable_container_init(dessertAppStatsTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_container_init", "called\n"));
++
++ /*
++ * cache init
++ */
++ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
++ _cache_load, _cache_free,
++ dessertAppStatsTable_oid,
++ dessertAppStatsTable_oid_size);
++
++ if (NULL == if_ctx->cache) {
++ snmp_log(LOG_ERR,
++ "error creating cache for dessertAppStatsTable\n");
++ return;
++ }
++
++ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
++
++ dessertAppStatsTable_container_init(&if_ctx->container, if_ctx->cache);
++ if (NULL == if_ctx->container)
++ if_ctx->container =
++ netsnmp_container_find("dessertAppStatsTable:table_container");
++ if (NULL == if_ctx->container) {
++ snmp_log(LOG_ERR, "error creating container in "
++ "dessertAppStatsTable_container_init\n");
++ return;
++ }
++
++ if (NULL != if_ctx->cache)
++ if_ctx->cache->magic = (void *) if_ctx->container;
++} /* _dessertAppStatsTable_container_init */
++
++/**
++ * @internal
++ * shutdown the container with functions or wrappers
++ */
++void
++_dessertAppStatsTable_container_shutdown(dessertAppStatsTable_interface_ctx
++ * if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_container_shutdown", "called\n"));
++
++ dessertAppStatsTable_container_shutdown(if_ctx->container);
++
++ _container_free(if_ctx->container);
++
++} /* _dessertAppStatsTable_container_shutdown */
++
++
++dessertAppStatsTable_rowreq_ctx *
++dessertAppStatsTable_row_find_by_mib_index(dessertAppStatsTable_mib_index *
++ mib_idx)
++{
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
++ oid oid_tmp[MAX_OID_LEN];
++ netsnmp_index oid_idx;
++ int rc;
++
++ /*
++ * set up storage for OID
++ */
++ oid_idx.oids = oid_tmp;
++ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
++
++ /*
++ * convert
++ */
++ rc = dessertAppStatsTable_index_to_oid(&oid_idx, mib_idx);
++ if (MFD_SUCCESS != rc)
++ return NULL;
++
++ rowreq_ctx =
++ CONTAINER_FIND(dessertAppStatsTable_if_ctx.container, &oid_idx);
++
++ return rowreq_ctx;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_interface.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_interface.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,98 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/** @ingroup interface: Routines to interface to Net-SNMP
++ *
++ * \warning This code should not be modified, called directly,
++ * or used to interpret functionality. It is subject to
++ * change at any time.
++ *
++ * @{
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++#ifndef DESSERTAPPSTATSTABLE_INTERFACE_H
++#define DESSERTAPPSTATSTABLE_INTERFACE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#include "dessertAppStatsTable.h"
++
++
++ /*
++ ********************************************************************
++ * Table declarations
++ */
++
++ /*
++ * PUBLIC interface initialization routine
++ */
++ void
++ _dessertAppStatsTable_initialize_interface
++ (dessertAppStatsTable_registration * user_ctx, u_long flags);
++ void
++ _dessertAppStatsTable_shutdown_interface
++ (dessertAppStatsTable_registration * user_ctx);
++
++ dessertAppStatsTable_registration
++ *dessertAppStatsTable_registration_get(void);
++
++ dessertAppStatsTable_registration
++ *dessertAppStatsTable_registration_set
++ (dessertAppStatsTable_registration * newreg);
++
++ netsnmp_container *dessertAppStatsTable_container_get(void);
++ int dessertAppStatsTable_container_size(void);
++
++ dessertAppStatsTable_rowreq_ctx
++ *dessertAppStatsTable_allocate_rowreq_ctx(void);
++ void
++ dessertAppStatsTable_release_rowreq_ctx
++ (dessertAppStatsTable_rowreq_ctx * rowreq_ctx);
++
++ int dessertAppStatsTable_index_to_oid(netsnmp_index *
++ oid_idx,
++ dessertAppStatsTable_mib_index
++ * mib_idx);
++ int dessertAppStatsTable_index_from_oid(netsnmp_index *
++ oid_idx,
++ dessertAppStatsTable_mib_index
++ * mib_idx);
++
++ /*
++ * access to certain internals. use with caution!
++ */
++ void
++ dessertAppStatsTable_valid_columns_set(netsnmp_column_info *vc);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_INTERFACE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_oids.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_oids.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,64 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_OIDS_H
++#define DESSERTAPPSTATSTABLE_OIDS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ * column number definitions for table dessertAppStatsTable
++ */
++#define DESSERTAPPSTATSTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,8
++
++#define COLUMN_APPSTATSINDEX 1
++
++#define COLUMN_APPSTATSNAME 2
++#define COLUMN_APPSTATSNAME_FLAG (0x1 << 1)
++
++#define COLUMN_APPSTATSDESC 3
++#define COLUMN_APPSTATSDESC_FLAG (0x1 << 2)
++
++#define COLUMN_APPSTATSNODEORLINK 4
++#define COLUMN_APPSTATSNODEORLINK_FLAG (0x1 << 3)
++
++#define COLUMN_APPSTATSVALUETYPE 5
++#define COLUMN_APPSTATSVALUETYPE_FLAG (0x1 << 4)
++
++#define COLUMN_APPSTATSMACADDRESS1 6
++#define COLUMN_APPSTATSMACADDRESS1_FLAG (0x1 << 5)
++
++#define COLUMN_APPSTATSMACADDRESS2 7
++#define COLUMN_APPSTATSMACADDRESS2_FLAG (0x1 << 6)
++
++#define COLUMN_APPSTATSTRUTHVALUE 8
++#define COLUMN_APPSTATSTRUTHVALUE_FLAG (0x1 << 7)
++
++#define COLUMN_APPSTATSINTEGER32 9
++#define COLUMN_APPSTATSINTEGER32_FLAG (0x1 << 8)
++
++#define COLUMN_APPSTATSUNSIGNED32 10
++#define COLUMN_APPSTATSUNSIGNED32_FLAG (0x1 << 9)
++
++#define COLUMN_APPSTATSCOUNTER64 11
++#define COLUMN_APPSTATSCOUNTER64_FLAG (0x1 << 10)
++
++#define COLUMN_APPSTATSOCTETSTRING 12
++#define COLUMN_APPSTATSOCTETSTRING_FLAG (0x1 << 11)
++
++
++#define DESSERTAPPSTATSTABLE_MIN_COL COLUMN_APPSTATSNAME
++#define DESSERTAPPSTATSTABLE_MAX_COL COLUMN_APPSTATSOCTETSTRING
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable.c 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,214 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/** \page MFD helper for dessertMeshifTable
++ *
++ * \section intro Introduction
++ * Introductory text.
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertMeshifTable.h"
++
++#include <net-snmp/agent/mib_modules.h>
++
++#include "dessertMeshifTable_interface.h"
++
++oid dessertMeshifTable_oid[] = { DESSERTMESHIFTABLE_OID };
++
++int dessertMeshifTable_oid_size =
++OID_LENGTH(dessertMeshifTable_oid);
++
++dessertMeshifTable_registration dessertMeshifTable_user_context;
++
++void initialize_table_dessertMeshifTable(void);
++void shutdown_table_dessertMeshifTable(void);
++
++
++/**
++ * Initializes the dessertMeshifTable module
++ */
++void
++init_dessertMeshifTable(void)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:init_dessertMeshifTable",
++ "called\n"));
++
++ /*
++ * TODO:300:o: Perform dessertMeshifTable one-time module initialization.
++ */
++
++ /*
++ * here we initialize all the tables we're planning on supporting
++ */
++ if (should_init("dessertMeshifTable"))
++ initialize_table_dessertMeshifTable();
++
++} /* init_dessertMeshifTable */
++
++/**
++ * Shut-down the dessertMeshifTable module (agent is exiting)
++ */
++void
++shutdown_dessertMeshifTable(void)
++{
++ if (should_init("dessertMeshifTable"))
++ shutdown_table_dessertMeshifTable();
++
++}
++
++/**
++ * Initialize the table dessertMeshifTable
++ * (Define its contents and how it's structured)
++ */
++void
++initialize_table_dessertMeshifTable(void)
++{
++ dessertMeshifTable_registration *user_context;
++ u_long flags;
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:initialize_table_dessertMeshifTable", "called\n"));
++
++ /*
++ * TODO:301:o: Perform dessertMeshifTable one-time table initialization.
++ */
++
++ /*
++ * TODO:302:o: |->Initialize dessertMeshifTable user context
++ * if you'd like to pass in a pointer to some data for this
++ * table, allocate or set it up here.
++ */
++ /*
++ * a netsnmp_data_list is a simple way to store void pointers. A simple
++ * string token is used to add, find or remove pointers.
++ */
++ user_context =
++ netsnmp_create_data_list("dessertMeshifTable", NULL, NULL);
++
++ /*
++ * No support for any flags yet, but in the future you would
++ * set any flags here.
++ */
++ flags = 0;
++
++ /*
++ * call interface initialization code
++ */
++ _dessertMeshifTable_initialize_interface(user_context, flags);
++} /* initialize_table_dessertMeshifTable */
++
++/**
++ * Shutdown the table dessertMeshifTable
++ */
++void
++shutdown_table_dessertMeshifTable(void)
++{
++ /*
++ * call interface shutdown code
++ */
++ _dessertMeshifTable_shutdown_interface
++ (&dessertMeshifTable_user_context);
++}
++
++/**
++ * extra context initialization (eg default values)
++ *
++ * @param rowreq_ctx : row request context
++ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
++ *
++ * @retval MFD_SUCCESS : no errors
++ * @retval MFD_ERROR : error (context allocate will fail)
++ */
++int
++dessertMeshifTable_rowreq_ctx_init(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx, void *user_init_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_rowreq_ctx_init", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:210:o: |-> Perform extra dessertMeshifTable rowreq initialization. (eg DEFVALS)
++ */
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_rowreq_ctx_init */
++
++/**
++ * extra context cleanup
++ *
++ */
++void
++dessertMeshifTable_rowreq_ctx_cleanup(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_rowreq_ctx_cleanup", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:211:o: |-> Perform extra dessertMeshifTable rowreq cleanup.
++ */
++} /* dessertMeshifTable_rowreq_ctx_cleanup */
++
++/**
++ * pre-request callback
++ *
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error
++ */
++int
++dessertMeshifTable_pre_request(dessertMeshifTable_registration *
++ user_context)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_pre_request", "called\n"));
++
++ /*
++ * TODO:510:o: Perform dessertMeshifTable pre-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_pre_request */
++
++/**
++ * post-request callback
++ *
++ * Note:
++ * New rows have been inserted into the container, and
++ * deleted rows have been removed from the container and
++ * released.
++ *
++ * @param user_context
++ * @param rc : MFD_SUCCESS if all requests succeeded
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error (ignored)
++ */
++int
++dessertMeshifTable_post_request(dessertMeshifTable_registration *
++ user_context, int rc)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_post_request", "called\n"));
++
++ /*
++ * TODO:511:o: Perform dessertMeshifTable post-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_post_request */
++
++
++/** @{ */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,222 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_H
++#define DESSERTMESHIFTABLE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/** @addtogroup misc misc: Miscellaneous routines
++ *
++ * @{
++ */
++#include <net-snmp/library/asn1.h>
++
++/*
++ * other required module components
++ */
++/* *INDENT-OFF* */
++config_add_mib(DESSERT-MIB)
++config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_interface)
++config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_access)
++config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_get)
++config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_set)
++/* *INDENT-ON* */
++
++/*
++ * OID and column number definitions for dessertMeshifTable
++ */
++#include "dessertMeshifTable_oids.h"
++
++/*
++ * enum definions
++ */
++#include "dessertMeshifTable_enums.h"
++
++/*
++ *********************************************************************
++ * function declarations
++ */
++void init_dessertMeshifTable(void);
++void shutdown_dessertMeshifTable(void);
++
++/*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++/*
++ *********************************************************************
++ * When you register your mib, you get to provide a generic
++ * pointer that will be passed back to you for most of the
++ * functions calls.
++ *
++ * TODO:100:r: Review all context structures
++ */
++/*
++ * TODO:101:o: |-> Review dessertMeshifTable registration context.
++ */
++typedef netsnmp_data_list dessertMeshifTable_registration;
++
++/**********************************************************************/
++/*
++ * TODO:110:r: |-> Review dessertMeshifTable data context structure.
++ * This structure is used to represent the data for dessertMeshifTable.
++ */
++/*
++ * This structure contains storage for all the columns defined in the
++ * dessertMeshifTable.
++ */
++typedef struct dessertMeshifTable_data_s {
++
++ /*
++ * meshifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char meshifName[255];
++ size_t meshifName_len; /* # of char elements, not bytes */
++
++ /*
++ * meshifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char meshifMacAddress[6];
++ size_t meshifMacAddress_len; /* # of char elements, not bytes */
++
++ /*
++ * meshifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 meshifInPkts;
++
++ /*
++ * meshifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 meshifOutPkts;
++
++ /*
++ * meshifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 meshifInOctets;
++
++ /*
++ * meshifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 meshifOutOctets;
++
++} dessertMeshifTable_data;
++
++/*
++ * TODO:120:r: |-> Review dessertMeshifTable mib index.
++ * This structure is used to represent the index for dessertMeshifTable.
++ */
++typedef struct dessertMeshifTable_mib_index_s {
++
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long meshifIndex;
++
++} dessertMeshifTable_mib_index;
++
++/*
++ * TODO:121:r: | |-> Review dessertMeshifTable max index length.
++ * If you KNOW that your indexes will never exceed a certain
++ * length, update this macro to that length.
++ */
++#define MAX_dessertMeshifTable_IDX_LEN 1
++
++/*
++ *********************************************************************
++ * TODO:130:o: |-> Review dessertMeshifTable Row request (rowreq) context.
++ * When your functions are called, you will be passed a
++ * dessertMeshifTable_rowreq_ctx pointer.
++ */
++typedef struct dessertMeshifTable_rowreq_ctx_s {
++
++ /** this must be first for container compare to work */
++ netsnmp_index oid_idx;
++ oid oid_tmp[MAX_dessertMeshifTable_IDX_LEN];
++
++ dessertMeshifTable_mib_index tbl_idx;
++
++ dessertMeshifTable_data data;
++
++ /*
++ * flags per row. Currently, the first (lower) 8 bits are reserved
++ * for the user. See mfd.h for other flags.
++ */
++ u_int rowreq_flags;
++
++ /*
++ * TODO:131:o: | |-> Add useful data to dessertMeshifTable rowreq context.
++ */
++
++ /*
++ * storage for future expansion
++ */
++ netsnmp_data_list *dessertMeshifTable_data_list;
++
++} dessertMeshifTable_rowreq_ctx;
++
++typedef struct dessertMeshifTable_ref_rowreq_ctx_s {
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx;
++} dessertMeshifTable_ref_rowreq_ctx;
++
++/*
++ *********************************************************************
++ * function prototypes
++ */
++int
++dessertMeshifTable_pre_request(dessertMeshifTable_registration * user_context);
++int
++dessertMeshifTable_post_request(dessertMeshifTable_registration * user_context,
++ int rc);
++
++int
++dessertMeshifTable_rowreq_ctx_init(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ void *user_init_ctx);
++void
++dessertMeshifTable_rowreq_ctx_cleanup(
++ dessertMeshifTable_rowreq_ctx * rowreq_ctx);
++
++dessertMeshifTable_rowreq_ctx
++*dessertMeshifTable_row_find_by_mib_index(
++ dessertMeshifTable_mib_index * mib_idx);
++
++extern oid dessertMeshifTable_oid[];
++extern int dessertMeshifTable_oid_size;
++
++#include "dessertMeshifTable_interface.h"
++#include "dessertMeshifTable_data_access.h"
++#include "dessertMeshifTable_data_get.h"
++#include "dessertMeshifTable_data_set.h"
++
++/*
++ * DUMMY markers, ignore
++ *
++ * TODO:099:x: *************************************************************
++ * TODO:199:x: *************************************************************
++ * TODO:299:x: *************************************************************
++ * TODO:399:x: *************************************************************
++ * TODO:499:x: *************************************************************
++ */
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_access.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_access.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,371 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++#include "dessertMeshifTable_data_access.h"
++
++/** @ingroup interface
++ * @addtogroup data_access data_access: Routines to access data
++ *
++ * These routines are used to locate the data used to satisfy
++ * requests.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++
++/**
++ * initialization for dessertMeshifTable data access
++ *
++ * This function is called during startup to allow you to
++ * allocate any resources you need for the data table.
++ *
++ * @param dessertMeshifTable_reg
++ * Pointer to dessertMeshifTable_registration
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : unrecoverable error.
++ */
++int
++dessertMeshifTable_init_data(dessertMeshifTable_registration *
++ dessertMeshifTable_reg)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_init_data",
++ "called\n"));
++ dessert_debug("dessertMeshifTable_container_load called");
++ /*
++ * TODO:303:o: Initialize dessertMeshifTable data.
++ */
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ * if you are the sole writer for the file, you could
++ * open it here. However, as stated earlier, we are assuming
++ * the worst case, which in this case means that the file is
++ * written to by someone else, and might not even exist when
++ * we start up. So we can't do anything here.
++ */
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_init_data */
++
++/**
++ * container overview
++ *
++ */
++
++/**
++ * container initialization
++ *
++ * @param container_ptr_ptr A pointer to a container pointer. If you
++ * create a custom container, use this parameter to return it
++ * to the MFD helper. If set to NULL, the MFD helper will
++ * allocate a container for you.
++ * @param cache A pointer to a cache structure. You can set the timeout
++ * and other cache flags using this pointer.
++ *
++ * This function is called at startup to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases. If no custom
++ * container is allocated, the MFD code will create one for your.
++ *
++ * This is also the place to set up cache behavior. The default, to
++ * simply set the cache timeout, will work well with the default
++ * container. If you are using a custom container, you may want to
++ * look at the cache helper documentation to see if there are any
++ * flags you want to set.
++ *
++ * @remark
++ * This would also be a good place to do any initialization needed
++ * for you data source. For example, opening a connection to another
++ * process that will supply the data, opening a database, etc.
++ */
++void
++dessertMeshifTable_container_init(netsnmp_container ** container_ptr_ptr,
++ netsnmp_cache * cache)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_init", "called\n"));
++
++ if (NULL == container_ptr_ptr) {
++ snmp_log(LOG_ERR,
++ "bad container param to dessertMeshifTable_container_init\n");
++ return;
++ }
++
++ /*
++ * For advanced users, you can use a custom container. If you
++ * do not create one, one will be created for you.
++ */
++ *container_ptr_ptr = NULL;
++
++ if (NULL == cache) {
++ snmp_log(LOG_ERR,
++ "bad cache param to dessertMeshifTable_container_init\n");
++ return;
++ }
++
++ /*
++ * TODO:345:A: Set up dessertMeshifTable cache properties.
++ *
++ * Also for advanced users, you can set parameters for the
++ * cache. Do not change the magic pointer, as it is used
++ * by the MFD helper. To completely disable caching, set
++ * cache->enabled to 0.
++ */
++ cache->timeout = DESSERTMESHIFTABLE_CACHE_TIMEOUT; /* seconds */
++} /* dessertMeshifTable_container_init */
++
++/**
++ * container shutdown
++ *
++ * @param container_ptr A pointer to the container.
++ *
++ * This function is called at shutdown to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases.
++ *
++ * This function is called before dessertMeshifTable_container_free().
++ *
++ * @remark
++ * This would also be a good place to do any cleanup needed
++ * for you data source. For example, closing a connection to another
++ * process that supplied the data, closing a database, etc.
++ */
++void
++dessertMeshifTable_container_shutdown(netsnmp_container * container_ptr)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_shutdown", "called\n"));
++
++ if (NULL == container_ptr) {
++ snmp_log(LOG_ERR,
++ "bad params to dessertMeshifTable_container_shutdown\n");
++ return;
++ }
++
++} /* dessertMeshifTable_container_shutdown */
++
++/**
++ * load initial data
++ *
++ * TODO:350:M: Implement dessertMeshifTable data load
++ * This function will also be called by the cache helper to load
++ * the container again (after the container free function has been
++ * called to free the previous contents).
++ *
++ * @param container container to which items should be inserted
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
++ * @retval MFD_ERROR : other error.
++ *
++ * This function is called to load the index(es) (and data, optionally)
++ * for the every row in the data set.
++ *
++ * @remark
++ * While loading the data, the only important thing is the indexes.
++ * If access to your data is cheap/fast (e.g. you have a pointer to a
++ * structure in memory), it would make sense to update the data here.
++ * If, however, the accessing the data invovles more work (e.g. parsing
++ * some other existing data, or peforming calculations to derive the data),
++ * then you can limit yourself to setting the indexes and saving any
++ * information you will need later. Then use the saved information in
++ * dessertMeshifTable_row_prep() for populating data.
++ *
++ * @note
++ * If you need consistency between rows (like you want statistics
++ * for each row to be from the same time frame), you should set all
++ * data here.
++ *
++ */
++int
++dessertMeshifTable_container_load(netsnmp_container * container)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx;
++ dessert_meshif_t *meshif;
++ size_t count = 0;
++
++ char inPkts[I64CHARSZ+1];
++ char outPkts[I64CHARSZ+1];
++ char inOctets[I64CHARSZ+1];
++ char outOctets[I64CHARSZ+1];
++
++ /*
++ * temporary storage for index values
++ */
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long meshifIndex = -1;
++
++ dessert_debug("dessertMeshifTable_container_load called");
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_load", "called\n"));
++
++
++
++ /*
++ * TODO:351:M: |-> Load/update data in the dessertMeshifTable container.
++ * loop over your dessertMeshifTable data, allocate a rowreq context,
++ * set the index(es) [and data, optionally] and insert into
++ * the container.
++ */
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(dessert_meshiflist_get(), meshif){
++
++ meshifIndex = ++count;
++
++ /*
++ * TODO:352:M: | |-> set indexes in new dessertMeshifTable rowreq context.
++ * data context will be set from the param (unless NULL,
++ * in which case a new data context will be allocated)
++ */
++ rowreq_ctx = dessertMeshifTable_allocate_rowreq_ctx(NULL);
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "memory allocation failed\n");
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++
++ if (MFD_SUCCESS != dessertMeshifTable_indexes_set(rowreq_ctx,
++ meshifIndex)) {
++ snmp_log(LOG_ERR, "error setting index while loading "
++ "dessertMeshifTable data.\n");
++ dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
++ continue;
++ }
++
++ /*
++ * TODO:352:r: | |-> populate dessertMeshifTable data context.
++ * Populate data context here. (optionally, delay until row prep)
++ */
++
++ rowreq_ctx->data.meshifName_len = strlen(meshif->if_name);
++ strcpy(rowreq_ctx->data.meshifName, meshif->if_name);
++
++ rowreq_ctx->data.meshifMacAddress_len = 6;
++ memcpy(rowreq_ctx->data.meshifMacAddress, meshif->hwaddr, 6);
++
++ pthread_mutex_lock(&(meshif->cnt_mutex));
++
++ rowreq_ctx->data.meshifInPkts.low = meshif->ipkts & 0xffffffff;
++ rowreq_ctx->data.meshifInPkts.high = meshif->ipkts >> 32;
++
++ rowreq_ctx->data.meshifOutPkts.low = meshif->opkts & 0xffffffff;
++ rowreq_ctx->data.meshifOutPkts.high = meshif->opkts >> 32;
++
++ rowreq_ctx->data.meshifInOctets.low = meshif->ibytes & 0xffffffff;
++ rowreq_ctx->data.meshifInOctets.high = meshif->ibytes >> 32;
++
++ rowreq_ctx->data.meshifOutOctets.low = meshif->obytes & 0xffffffff;
++ rowreq_ctx->data.meshifOutOctets.high = meshif->obytes >> 32;
++
++
++ printU64(inPkts, &rowreq_ctx->data.meshifInPkts);
++ printU64(outPkts, &rowreq_ctx->data.meshifOutPkts);
++ printU64(inOctets, &rowreq_ctx->data.meshifInOctets);
++ printU64(outOctets, &rowreq_ctx->data.meshifOutOctets);
++
++
++ dessert_debug("inPkts [%s] [%u]", inPkts, meshif->ipkts);
++ dessert_debug("outPkts [%s] [%u]", outPkts, meshif->opkts);
++ dessert_debug("inOctets [%s] [%u]", inOctets, meshif->ibytes);
++ dessert_debug("outOctets [%s] [%u]", outOctets,meshif->obytes);
++
++
++ pthread_mutex_unlock(&(meshif->cnt_mutex));
++
++ /*
++ * insert into table container
++ */
++ CONTAINER_INSERT(container, rowreq_ctx);
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++
++
++ DEBUGMSGT(("verbose:dessertMeshifTable:dessertMeshifTable_container_load", "inserted %d records\n", count));
++
++ if (meshifIndex == -1) return MFD_RESOURCE_UNAVAILABLE;
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_container_load */
++
++/**
++ * container clean up
++ *
++ * @param container container with all current items
++ *
++ * This optional callback is called prior to all
++ * item's being removed from the container. If you
++ * need to do any processing before that, do it here.
++ *
++ * @note
++ * The MFD helper will take care of releasing all the row contexts.
++ *
++ */
++void
++dessertMeshifTable_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_free", "called\n"));
++
++ /*
++ * TODO:380:M: Free dessertMeshifTable container data.
++ */
++} /* dessertMeshifTable_container_free */
++
++/**
++ * prepare row for processing.
++ *
++ * When the agent has located the row for a request, this function is
++ * called to prepare the row for processing. If you fully populated
++ * the data context during the index setup phase, you may not need to
++ * do anything.
++ *
++ * @param rowreq_ctx pointer to a context.
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ */
++int
++dessertMeshifTable_row_prep(dessertMeshifTable_rowreq_ctx * rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_row_prep",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:390:o: Prepare row for request.
++ * If populating row data was delayed, this is the place to
++ * fill in the row for this request.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_row_prep */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_access.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_access.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,77 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_DATA_ACCESS_H
++#define DESSERTMESHIFTABLE_DATA_ACCESS_H
++
++#include "dessert_internal.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++
++
++ int
++ dessertMeshifTable_init_data(dessertMeshifTable_registration *
++ dessertMeshifTable_reg);
++
++
++ /*
++ * TODO:180:o: Review dessertMeshifTable cache timeout.
++ * The number of seconds before the cache times out
++ */
++#define DESSERTMESHIFTABLE_CACHE_TIMEOUT DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT
++
++ void dessertMeshifTable_container_init(netsnmp_container **
++ container_ptr_ptr,
++ netsnmp_cache *
++ cache);
++ void dessertMeshifTable_container_shutdown(netsnmp_container
++ * container_ptr);
++
++ int dessertMeshifTable_container_load(netsnmp_container *
++ container);
++ void dessertMeshifTable_container_free(netsnmp_container *
++ container);
++
++ int dessertMeshifTable_cache_load(netsnmp_container *
++ container);
++ void dessertMeshifTable_cache_free(netsnmp_container *
++ container);
++
++ int
++ dessertMeshifTable_row_prep(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_get.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_get.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,522 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertMeshifTable.h"
++
++
++/** @defgroup data_get data_get: Routines to get data
++ *
++ * TODO:230:M: Implement dessertMeshifTable get routines.
++ * TODO:240:M: Implement dessertMeshifTable mapping routines (if any).
++ *
++ * These routine are used to get the value for individual objects. The
++ * row context is passed, along with a pointer to the memory where the
++ * value should be copied.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++
++/*
++ * ---------------------------------------------------------------------
++ * * TODO:200:r: Implement dessertMeshifTable data context functions.
++ */
++
++
++/**
++ * set mib index(es)
++ *
++ * @param tbl_idx mib index structure
++ * @param meshifIndex_val
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This convenience function is useful for setting all the MIB index
++ * components with a single function call. It is assume that the C values
++ * have already been mapped from their native/rawformat to the MIB format.
++ */
++int
++dessertMeshifTable_indexes_set_tbl_idx(dessertMeshifTable_mib_index *
++ tbl_idx, long meshifIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_indexes_set_tbl_idx", "called\n"));
++
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ tbl_idx->meshifIndex = meshifIndex_val;
++
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_indexes_set_tbl_idx */
++
++/**
++ * @internal
++ * set row context indexes
++ *
++ * @param reqreq_ctx the row context that needs updated indexes
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This function sets the mib indexs, then updates the oid indexs
++ * from the mib index.
++ */
++int
++dessertMeshifTable_indexes_set(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ long meshifIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_indexes_set", "called\n"));
++
++ if (MFD_SUCCESS !=
++ dessertMeshifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
++ meshifIndex_val))
++ return MFD_ERROR;
++
++ /*
++ * convert mib index to oid index
++ */
++ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
++ if (0 != dessertMeshifTable_index_to_oid(&rowreq_ctx->oid_idx,
++ &rowreq_ctx->tbl_idx)) {
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_indexes_set */
++
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifName
++ * meshifName is subid 2 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.2
++ * Description:
++name of interface
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the meshifName data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifName_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param meshifName_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by meshifName.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*meshifName_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update meshifName_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++meshifName_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ char **meshifName_val_ptr_ptr,
++ size_t *meshifName_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != meshifName_val_ptr_ptr)
++ && (NULL != *meshifName_val_ptr_ptr));
++ netsnmp_assert(NULL != meshifName_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:meshifName_get", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the meshifName data.
++ * copy (* meshifName_val_ptr_ptr ) data and (* meshifName_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for meshifName data
++ */
++ if ((NULL == (*meshifName_val_ptr_ptr)) ||
++ ((*meshifName_val_ptr_len_ptr) <
++ (rowreq_ctx->data.meshifName_len *
++ sizeof(rowreq_ctx->data.meshifName[0])))) {
++ /*
++ * allocate space for meshifName data
++ */
++ (*meshifName_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.meshifName_len *
++ sizeof(rowreq_ctx->data.meshifName[0]));
++ if (NULL == (*meshifName_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*meshifName_val_ptr_len_ptr) =
++ rowreq_ctx->data.meshifName_len *
++ sizeof(rowreq_ctx->data.meshifName[0]);
++ memcpy((*meshifName_val_ptr_ptr), rowreq_ctx->data.meshifName,
++ rowreq_ctx->data.meshifName_len *
++ sizeof(rowreq_ctx->data.meshifName[0]));
++
++ return MFD_SUCCESS;
++} /* meshifName_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifMacAddress
++ * meshifMacAddress is subid 3 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.3
++ * Description:
++hardware address of interface
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 1x:
++ *
++ * Ranges: 6;
++ *
++ * Its syntax is MacAddress (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 6)
++ */
++/**
++ * Extract the current value of the meshifMacAddress data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifMacAddress_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param meshifMacAddress_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by meshifMacAddress.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*meshifMacAddress_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update meshifMacAddress_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++meshifMacAddress_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ char **meshifMacAddress_val_ptr_ptr,
++ size_t *meshifMacAddress_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != meshifMacAddress_val_ptr_ptr)
++ && (NULL != *meshifMacAddress_val_ptr_ptr));
++ netsnmp_assert(NULL != meshifMacAddress_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:meshifMacAddress_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the meshifMacAddress data.
++ * copy (* meshifMacAddress_val_ptr_ptr ) data and (* meshifMacAddress_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for meshifMacAddress data
++ */
++ if ((NULL == (*meshifMacAddress_val_ptr_ptr)) ||
++ ((*meshifMacAddress_val_ptr_len_ptr) <
++ (rowreq_ctx->data.meshifMacAddress_len *
++ sizeof(rowreq_ctx->data.meshifMacAddress[0])))) {
++ /*
++ * allocate space for meshifMacAddress data
++ */
++ (*meshifMacAddress_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.meshifMacAddress_len *
++ sizeof(rowreq_ctx->data.meshifMacAddress[0]));
++ if (NULL == (*meshifMacAddress_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*meshifMacAddress_val_ptr_len_ptr) =
++ rowreq_ctx->data.meshifMacAddress_len *
++ sizeof(rowreq_ctx->data.meshifMacAddress[0]);
++ memcpy((*meshifMacAddress_val_ptr_ptr),
++ rowreq_ctx->data.meshifMacAddress,
++ rowreq_ctx->data.meshifMacAddress_len *
++ sizeof(rowreq_ctx->data.meshifMacAddress[0]));
++
++ return MFD_SUCCESS;
++} /* meshifMacAddress_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifInPkts
++ * meshifInPkts is subid 4 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.4
++ * Description:
++packet counter in
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the meshifInPkts data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifInPkts_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++meshifInPkts_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ U64 * meshifInPkts_val_ptr)
++{
++ char inPkts[I64CHARSZ+1];
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != meshifInPkts_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy meshifInPkts data.
++ * get (* meshifInPkts_val_ptr ).low and (* meshifInPkts_val_ptr ).high from rowreq_ctx->data
++ */
++ (*meshifInPkts_val_ptr).high = rowreq_ctx->data.meshifInPkts.high;
++ (*meshifInPkts_val_ptr).low = rowreq_ctx->data.meshifInPkts.low;
++
++ printU64(inPkts, meshifInPkts_val_ptr);
++
++ return MFD_SUCCESS;
++} /* meshifInPkts_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifOutPkts
++ * meshifOutPkts is subid 5 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.5
++ * Description:
++packet counter out
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the meshifOutPkts data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifOutPkts_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++meshifOutPkts_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ U64 * meshifOutPkts_val_ptr)
++{
++ char outPkts[I64CHARSZ+1];
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != meshifOutPkts_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy meshifOutPkts data.
++ * get (* meshifOutPkts_val_ptr ).low and (* meshifOutPkts_val_ptr ).high from rowreq_ctx->data
++ */
++ (*meshifOutPkts_val_ptr).high = rowreq_ctx->data.meshifOutPkts.high;
++ (*meshifOutPkts_val_ptr).low = rowreq_ctx->data.meshifOutPkts.low;
++
++ printU64(outPkts, meshifOutPkts_val_ptr);
++
++
++
++
++ return MFD_SUCCESS;
++} /* meshifOutPkts_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifInOctets
++ * meshifInOctets is subid 6 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.6
++ * Description:
++octet counter in
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the meshifInOctets data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifInOctets_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++meshifInOctets_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ U64 * meshifInOctets_val_ptr)
++{
++ char inOctets[I64CHARSZ+1];
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != meshifInOctets_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy meshifInOctets data.
++ * get (* meshifInOctets_val_ptr ).low and (* meshifInOctets_val_ptr ).high from rowreq_ctx->data
++ */
++ (*meshifInOctets_val_ptr).high = rowreq_ctx->data.meshifInOctets.high;
++ (*meshifInOctets_val_ptr).low = rowreq_ctx->data.meshifInOctets.low;
++
++ printU64(inOctets, meshifInOctets_val_ptr);
++
++
++ return MFD_SUCCESS;
++} /* meshifInOctets_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifOutOctets
++ * meshifOutOctets is subid 7 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.7
++ * Description:
++octet counter out
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the meshifOutOctets data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifOutOctets_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++meshifOutOctets_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ U64 * meshifOutOctets_val_ptr)
++{
++ char outOctets[I64CHARSZ+1];
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != meshifOutOctets_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy meshifOutOctets data.
++ * get (* meshifOutOctets_val_ptr ).low and (* meshifOutOctets_val_ptr ).high from rowreq_ctx->data
++ */
++ (*meshifOutOctets_val_ptr).high =
++ rowreq_ctx->data.meshifOutOctets.high;
++ (*meshifOutOctets_val_ptr).low = rowreq_ctx->data.meshifOutOctets.low;
++
++ printU64(outOctets, meshifOutOctets_val_ptr);
++
++
++ return MFD_SUCCESS;
++} /* meshifOutOctets_get */
++
++
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_get.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_get.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,109 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ *
++ * @file dessertMeshifTable_data_get.h
++ *
++ * @addtogroup get
++ *
++ * Prototypes for get functions
++ *
++ * @{
++ */
++#ifndef DESSERTMESHIFTABLE_DATA_GET_H
++#define DESSERTMESHIFTABLE_DATA_GET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * GET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * GET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++ /*
++ * indexes
++ */
++ int meshifIndex_map(uint *mib_meshifIndex_val_ptr, uint
++ raw_meshifIndex_val);
++
++ int meshifName_map(char **mib_meshifName_val_ptr_ptr,
++ size_t *mib_meshifName_val_ptr_len_ptr,
++ char *raw_meshifName_val_ptr,
++ size_t raw_meshifName_val_ptr_len,
++ int allow_realloc);
++ int meshifName_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ char **meshifName_val_ptr_ptr,
++ size_t *meshifName_val_ptr_len_ptr);
++ int meshifMacAddress_map(char
++ **mib_meshifMacAddress_val_ptr_ptr,
++ size_t
++ *mib_meshifMacAddress_val_ptr_len_ptr,
++ char
++ *raw_meshifMacAddress_val_ptr,
++ size_t
++ raw_meshifMacAddress_val_ptr_len,
++ int allow_realloc);
++ int meshifMacAddress_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ char
++ **meshifMacAddress_val_ptr_ptr,
++ size_t
++ *meshifMacAddress_val_ptr_len_ptr);
++ int meshifInPkts_map(U64 * mib_meshifInPkts_val_ptr,
++ U64 raw_meshifInPkts_val);
++ int meshifInPkts_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * meshifInPkts_val_ptr);
++ int meshifOutPkts_map(U64 * mib_meshifOutPkts_val_ptr,
++ U64 raw_meshifOutPkts_val);
++ int meshifOutPkts_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * meshifOutPkts_val_ptr);
++ int meshifInOctets_map(U64 * mib_meshifInOctets_val_ptr,
++ U64 raw_meshifInOctets_val);
++ int meshifInOctets_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * meshifInOctets_val_ptr);
++ int meshifOutOctets_map(U64 * mib_meshifOutOctets_val_ptr,
++ U64 raw_meshifOutOctets_val);
++ int meshifOutOctets_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * meshifOutOctets_val_ptr);
++
++
++ int
++ dessertMeshifTable_indexes_set_tbl_idx(dessertMeshifTable_mib_index
++ * tbl_idx, long meshifIndex_val);
++ int
++ dessertMeshifTable_indexes_set(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx, long meshifIndex_val);
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_DATA_GET_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_set.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertMeshifTable.h"
++
++
++/** @defgroup data_set data_set: Routines to set data
++ *
++ * These routines are used to set the value for individual objects. The
++ * row context is passed, along with the new value.
++ *
++ * @{
++ */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_set.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_DATA_SET_H
++#define DESSERTMESHIFTABLE_DATA_SET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * SET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * SET Table declarations
++ */
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_enums.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_enums.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,39 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_ENUMS_H
++#define DESSERTMESHIFTABLE_ENUMS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ * NOTES on enums
++ * ==============
++ *
++ * Value Mapping
++ * -------------
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them
++ * below. For example, a boolean flag (1/0) is usually represented
++ * as a TruthValue in a MIB, which maps to the values (1/2).
++ *
++ */
++/*************************************************************************
++ *************************************************************************
++ *
++ * enum definitions for table dessertMeshifTable
++ *
++ *************************************************************************
++ *************************************************************************/
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_interface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_interface.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,944 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertMeshifTable.h"
++
++
++#include <net-snmp/agent/table_container.h>
++#include <net-snmp/library/container.h>
++
++#include "dessertMeshifTable_interface.h"
++
++#include <ctype.h>
++
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++typedef struct dessertMeshifTable_interface_ctx_s {
++
++ netsnmp_container *container;
++ netsnmp_cache *cache;
++
++ dessertMeshifTable_registration *user_ctx;
++
++ netsnmp_table_registration_info tbl_info;
++
++ netsnmp_baby_steps_access_methods access_multiplexer;
++
++} dessertMeshifTable_interface_ctx;
++
++static dessertMeshifTable_interface_ctx dessertMeshifTable_if_ctx;
++
++static void
++_dessertMeshifTable_container_init(dessertMeshifTable_interface_ctx *
++ if_ctx);
++static void
++_dessertMeshifTable_container_shutdown(dessertMeshifTable_interface_ctx *
++ if_ctx);
++
++
++netsnmp_container *
++dessertMeshifTable_container_get(void)
++{
++ return dessertMeshifTable_if_ctx.container;
++}
++
++dessertMeshifTable_registration *
++dessertMeshifTable_registration_get(void)
++{
++ return dessertMeshifTable_if_ctx.user_ctx;
++}
++
++dessertMeshifTable_registration *
++dessertMeshifTable_registration_set(dessertMeshifTable_registration *
++ newreg)
++{
++ dessertMeshifTable_registration *old =
++ dessertMeshifTable_if_ctx.user_ctx;
++ dessertMeshifTable_if_ctx.user_ctx = newreg;
++ return old;
++}
++
++int
++dessertMeshifTable_container_size(void)
++{
++ return CONTAINER_SIZE(dessertMeshifTable_if_ctx.container);
++}
++
++/*
++ * mfd multiplexer modes
++ */
++static Netsnmp_Node_Handler _mfd_dessertMeshifTable_pre_request;
++static Netsnmp_Node_Handler _mfd_dessertMeshifTable_post_request;
++static Netsnmp_Node_Handler _mfd_dessertMeshifTable_object_lookup;
++static Netsnmp_Node_Handler _mfd_dessertMeshifTable_get_values;
++/**
++ * @internal
++ * Initialize the table dessertMeshifTable
++ * (Define its contents and how it's structured)
++ */
++void
++_dessertMeshifTable_initialize_interface(dessertMeshifTable_registration *
++ reg_ptr, u_long flags)
++{
++ netsnmp_baby_steps_access_methods *access_multiplexer =
++ &dessertMeshifTable_if_ctx.access_multiplexer;
++ netsnmp_table_registration_info *tbl_info =
++ &dessertMeshifTable_if_ctx.tbl_info;
++ netsnmp_handler_registration *reginfo;
++ netsnmp_mib_handler *handler;
++ int mfd_modes = 0;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_initialize_interface", "called\n"));
++
++
++ /*************************************************
++ *
++ * save interface context for dessertMeshifTable
++ */
++ /*
++ * Setting up the table's definition
++ */
++ netsnmp_table_helper_add_indexes(tbl_info,ASN_INTEGER,
++ /** index: meshifIndex */
++ 0);
++
++ /*
++ * Define the minimum and maximum accessible columns. This
++ * optimizes retrival.
++ */
++ tbl_info->min_column = DESSERTMESHIFTABLE_MIN_COL;
++ tbl_info->max_column = DESSERTMESHIFTABLE_MAX_COL;
++
++ /*
++ * save users context
++ */
++ dessertMeshifTable_if_ctx.user_ctx = reg_ptr;
++
++ /*
++ * call data access initialization code
++ */
++ dessertMeshifTable_init_data(reg_ptr);
++
++ /*
++ * set up the container
++ */
++ _dessertMeshifTable_container_init(&dessertMeshifTable_if_ctx);
++ if (NULL == dessertMeshifTable_if_ctx.container) {
++ snmp_log(LOG_ERR,
++ "could not initialize container for dessertMeshifTable\n");
++ return;
++ }
++
++ /*
++ * access_multiplexer: REQUIRED wrapper for get request handling
++ */
++ access_multiplexer->object_lookup =
++ _mfd_dessertMeshifTable_object_lookup;
++ access_multiplexer->get_values = _mfd_dessertMeshifTable_get_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->pre_request = _mfd_dessertMeshifTable_pre_request;
++ access_multiplexer->post_request =
++ _mfd_dessertMeshifTable_post_request;
++
++
++ /*************************************************
++ *
++ * Create a registration, save our reg data, register table.
++ */
++ DEBUGMSGTL(("dessertMeshifTable:init_dessertMeshifTable",
++ "Registering dessertMeshifTable as a mibs-for-dummies table.\n"));
++ handler =
++ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
++ reginfo =
++ netsnmp_handler_registration_create("dessertMeshifTable", handler,
++ dessertMeshifTable_oid,
++ dessertMeshifTable_oid_size,
++ HANDLER_CAN_BABY_STEP |
++ HANDLER_CAN_RONLY);
++ if (NULL == reginfo) {
++ snmp_log(LOG_ERR, "error registering table dessertMeshifTable\n");
++ return;
++ }
++ reginfo->my_reg_void = &dessertMeshifTable_if_ctx;
++
++ /*************************************************
++ *
++ * set up baby steps handler, create it and inject it
++ */
++ if (access_multiplexer->object_lookup)
++ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
++ if (access_multiplexer->set_values)
++ mfd_modes |= BABY_STEP_SET_VALUES;
++ if (access_multiplexer->irreversible_commit)
++ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
++ if (access_multiplexer->object_syntax_checks)
++ mfd_modes |= BABY_STEP_CHECK_OBJECT;
++
++ if (access_multiplexer->pre_request)
++ mfd_modes |= BABY_STEP_PRE_REQUEST;
++ if (access_multiplexer->post_request)
++ mfd_modes |= BABY_STEP_POST_REQUEST;
++
++ if (access_multiplexer->undo_setup)
++ mfd_modes |= BABY_STEP_UNDO_SETUP;
++ if (access_multiplexer->undo_cleanup)
++ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
++ if (access_multiplexer->undo_sets)
++ mfd_modes |= BABY_STEP_UNDO_SETS;
++
++ if (access_multiplexer->row_creation)
++ mfd_modes |= BABY_STEP_ROW_CREATE;
++ if (access_multiplexer->consistency_checks)
++ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
++ if (access_multiplexer->commit)
++ mfd_modes |= BABY_STEP_COMMIT;
++ if (access_multiplexer->undo_commit)
++ mfd_modes |= BABY_STEP_UNDO_COMMIT;
++
++ handler = netsnmp_baby_steps_handler_get(mfd_modes);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
++ */
++ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject container_table helper
++ */
++ handler =
++ netsnmp_container_table_handler_get(tbl_info,
++ dessertMeshifTable_if_ctx.
++ container,
++ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject cache helper
++ */
++ if (NULL != dessertMeshifTable_if_ctx.cache) {
++ handler =
++ netsnmp_cache_handler_get(dessertMeshifTable_if_ctx.cache);
++ netsnmp_inject_handler(reginfo, handler);
++ }
++
++ /*
++ * register table
++ */
++ netsnmp_register_table(reginfo, tbl_info);
++
++} /* _dessertMeshifTable_initialize_interface */
++
++/**
++ * @internal
++ * Shutdown the table dessertMeshifTable
++ */
++void
++_dessertMeshifTable_shutdown_interface(dessertMeshifTable_registration *
++ reg_ptr)
++{
++ /*
++ * shutdown the container
++ */
++ _dessertMeshifTable_container_shutdown(&dessertMeshifTable_if_ctx);
++}
++
++void
++dessertMeshifTable_valid_columns_set(netsnmp_column_info *vc)
++{
++ dessertMeshifTable_if_ctx.tbl_info.valid_columns = vc;
++} /* dessertMeshifTable_valid_columns_set */
++
++/**
++ * @internal
++ * convert the index component stored in the context to an oid
++ */
++int
++dessertMeshifTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertMeshifTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_meshifIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_meshifIndex, 0x00, sizeof(var_meshifIndex));
++ var_meshifIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_meshifIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_index_to_oid", "called\n"));
++
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ snmp_set_var_value(&var_meshifIndex, (u_char *) & mib_idx->meshifIndex,
++ sizeof(mib_idx->meshifIndex));
++
++
++ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
++ NULL, 0, &var_meshifIndex);
++ if (err)
++ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_meshifIndex);
++
++ return err;
++} /* dessertMeshifTable_index_to_oid */
++
++/**
++ * extract dessertMeshifTable indexes from a netsnmp_index
++ *
++ * @retval SNMP_ERR_NOERROR : no error
++ * @retval SNMP_ERR_GENERR : error
++ */
++int
++dessertMeshifTable_index_from_oid(netsnmp_index * oid_idx,
++ dessertMeshifTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_meshifIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_meshifIndex, 0x00, sizeof(var_meshifIndex));
++ var_meshifIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_meshifIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_index_from_oid", "called\n"));
++
++ /*
++ * parse the oid into the individual index components
++ */
++ err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_meshifIndex);
++ if (err == SNMP_ERR_NOERROR) {
++ /*
++ * copy out values
++ */
++ mib_idx->meshifIndex = *((long *)var_meshifIndex.val.string);
++
++
++ }
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_meshifIndex);
++
++ return err;
++} /* dessertMeshifTable_index_from_oid */
++
++
++/*
++ *********************************************************************
++ * @internal
++ * allocate resources for a dessertMeshifTable_rowreq_ctx
++ */
++dessertMeshifTable_rowreq_ctx *
++dessertMeshifTable_allocate_rowreq_ctx(void *user_init_ctx)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx =
++ SNMP_MALLOC_TYPEDEF(dessertMeshifTable_rowreq_ctx);
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:dessertMeshifTable_allocate_rowreq_ctx", "called\n"));
++
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
++ "dessertMeshifTable_rowreq_ctx.\n");
++ return NULL;
++ }
++
++ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
++
++ rowreq_ctx->dessertMeshifTable_data_list = NULL;
++
++ /*
++ * if we allocated data, call init routine
++ */
++ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
++ if (SNMPERR_SUCCESS !=
++ dessertMeshifTable_rowreq_ctx_init(rowreq_ctx,
++ user_init_ctx)) {
++ dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
++ rowreq_ctx = NULL;
++ }
++ }
++
++ return rowreq_ctx;
++} /* dessertMeshifTable_allocate_rowreq_ctx */
++
++/*
++ * @internal
++ * release resources for a dessertMeshifTable_rowreq_ctx
++ */
++void
++dessertMeshifTable_release_rowreq_ctx(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:dessertMeshifTable_release_rowreq_ctx", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ dessertMeshifTable_rowreq_ctx_cleanup(rowreq_ctx);
++
++ /*
++ * free index oid pointer
++ */
++ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
++ free(rowreq_ctx->oid_idx.oids);
++
++ SNMP_FREE(rowreq_ctx);
++} /* dessertMeshifTable_release_rowreq_ctx */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertMeshifTable_pre_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_pre_request", "called\n"));
++
++ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertMeshifTable",
++ "skipping additional pre_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ rc = dessertMeshifTable_pre_request(dessertMeshifTable_if_ctx.
++ user_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertMeshifTable", "error %d from "
++ "dessertMeshifTable_pre_request\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertMeshifTable_pre_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertMeshifTable_post_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc, packet_rc;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_post_request", "called\n"));
++
++ /*
++ * release row context, if deleted
++ */
++ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
++ dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
++
++ /*
++ * wait for last call before calling user
++ */
++ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertMeshifTable",
++ "waiting for last post_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
++ rc = dessertMeshifTable_post_request(dessertMeshifTable_if_ctx.
++ user_ctx, packet_rc);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertMeshifTable", "error %d from "
++ "dessertMeshifTable_post_request\n", rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertMeshifTable_post_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertMeshifTable_object_lookup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc = SNMP_ERR_NOERROR;
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_object_lookup", "called\n"));
++
++ /*
++ * get our context from mfd
++ * dessertMeshifTable_interface_ctx *if_ctx =
++ * (dessertMeshifTable_interface_ctx *)reginfo->my_reg_void;
++ */
++
++ if (NULL == rowreq_ctx) {
++ rc = SNMP_ERR_NOCREATION;
++ }
++
++ if (MFD_SUCCESS != rc)
++ netsnmp_request_set_error_all(requests, rc);
++ else
++ dessertMeshifTable_row_prep(rowreq_ctx);
++
++ return SNMP_VALIDATE_ERR(rc);
++} /* _mfd_dessertMeshifTable_object_lookup */
++
++/***********************************************************************
++ *
++ * GET processing
++ *
++ ***********************************************************************/
++/*
++ * @internal
++ * Retrieve the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertMeshifTable_get_column(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ netsnmp_variable_list * var, int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_column", "called for %d\n", column));
++
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * meshifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_MESHIFNAME:
++ var->type = ASN_OCTET_STR;
++ rc = meshifName_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * meshifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_MESHIFMACADDRESS:
++ var->type = ASN_OCTET_STR;
++ rc = meshifMacAddress_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * meshifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_MESHIFINPKTS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = meshifInPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * meshifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_MESHIFOUTPKTS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = meshifOutPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * meshifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_MESHIFINOCTETS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = meshifInOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * meshifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_MESHIFOUTOCTETS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = meshifOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ default:
++ if (DESSERTMESHIFTABLE_MIN_COL <= column
++ && column <= DESSERTMESHIFTABLE_MAX_COL) {
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_column", "assume column %d is reserved\n", column));
++ rc = MFD_SKIP;
++ } else {
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertMeshifTable_get_column\n",
++ column);
++ }
++ break;
++ }
++
++ return rc;
++} /* _dessertMeshifTable_get_column */
++
++int
++_mfd_dessertMeshifTable_get_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ u_char *old_string;
++ void (*dataFreeHook) (void *);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ for (; requests; requests = requests->next) {
++ /*
++ * save old pointer, so we can free it if replaced
++ */
++ old_string = requests->requestvb->val.string;
++ dataFreeHook = requests->requestvb->dataFreeHook;
++ if (NULL == requests->requestvb->val.string) {
++ requests->requestvb->val.string = requests->requestvb->buf;
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ } else if (requests->requestvb->buf ==
++ requests->requestvb->val.string) {
++ if (requests->requestvb->val_len !=
++ sizeof(requests->requestvb->buf))
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ }
++
++ /*
++ * get column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertMeshifTable_get_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ if (MFD_SKIP == rc) {
++ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
++ rc = SNMP_ERR_NOERROR;
++ }
++ } else if (NULL == requests->requestvb->val.string) {
++ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
++ rc = SNMP_ERR_GENERR;
++ }
++ if (rc)
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++
++ /*
++ * if the buffer wasn't used previously for the old data (i.e. it
++ * was allcoated memory) and the get routine replaced the pointer,
++ * we need to free the previous pointer.
++ */
++ if (old_string && (old_string != requests->requestvb->buf) &&
++ (requests->requestvb->val.string != old_string)) {
++ if (dataFreeHook)
++ (*dataFreeHook) (old_string);
++ else
++ free(old_string);
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertMeshifTable_get_values */
++
++
++/***********************************************************************
++ *
++ * SET processing
++ *
++ ***********************************************************************/
++
++/*
++ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
++ */
++/***********************************************************************
++ *
++ * DATA ACCESS
++ *
++ ***********************************************************************/
++static void _container_free(netsnmp_container * container);
++
++/**
++ * @internal
++ */
++static int
++_cache_load(netsnmp_cache * cache, void *vmagic)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_cache_load", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache for dessertMeshifTable_cache_load\n");
++ return -1;
++ }
++
++ /** should only be called for an invalid or expired cache */
++ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
++
++ /*
++ * call user code
++ */
++ return dessertMeshifTable_container_load((netsnmp_container *) cache->
++ magic);
++} /* _cache_load */
++
++/**
++ * @internal
++ */
++static void
++_cache_free(netsnmp_cache * cache, void *magic)
++{
++ netsnmp_container *container;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_cache_free", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache in dessertMeshifTable_cache_free\n");
++ return;
++ }
++
++ container = (netsnmp_container *) cache->magic;
++
++ _container_free(container);
++} /* _cache_free */
++
++/**
++ * @internal
++ */
++static void
++_container_item_free(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ void *context)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_container_item_free",
++ "called\n"));
++
++ if (NULL == rowreq_ctx)
++ return;
++
++ dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
++} /* _container_item_free */
++
++/**
++ * @internal
++ */
++static void
++_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_container_free",
++ "called\n"));
++
++ if (NULL == container) {
++ snmp_log(LOG_ERR,
++ "invalid container in dessertMeshifTable_container_free\n");
++ return;
++ }
++
++ /*
++ * call user code
++ */
++ dessertMeshifTable_container_free(container);
++
++ /*
++ * free all items. inefficient, but easy.
++ */
++ CONTAINER_CLEAR(container,
++ (netsnmp_container_obj_func *) _container_item_free,
++ NULL);
++} /* _container_free */
++
++/**
++ * @internal
++ * initialize the container with functions or wrappers
++ */
++void
++_dessertMeshifTable_container_init(dessertMeshifTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_container_init", "called\n"));
++
++ /*
++ * cache init
++ */
++ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
++ _cache_load, _cache_free,
++ dessertMeshifTable_oid,
++ dessertMeshifTable_oid_size);
++
++ if (NULL == if_ctx->cache) {
++ snmp_log(LOG_ERR, "error creating cache for dessertMeshifTable\n");
++ return;
++ }
++
++ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
++
++ dessertMeshifTable_container_init(&if_ctx->container, if_ctx->cache);
++ if (NULL == if_ctx->container)
++ if_ctx->container =
++ netsnmp_container_find("dessertMeshifTable:table_container");
++ if (NULL == if_ctx->container) {
++ snmp_log(LOG_ERR, "error creating container in "
++ "dessertMeshifTable_container_init\n");
++ return;
++ }
++
++ if (NULL != if_ctx->cache)
++ if_ctx->cache->magic = (void *) if_ctx->container;
++} /* _dessertMeshifTable_container_init */
++
++/**
++ * @internal
++ * shutdown the container with functions or wrappers
++ */
++void
++_dessertMeshifTable_container_shutdown(dessertMeshifTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_container_shutdown", "called\n"));
++
++ dessertMeshifTable_container_shutdown(if_ctx->container);
++
++ _container_free(if_ctx->container);
++
++} /* _dessertMeshifTable_container_shutdown */
++
++
++dessertMeshifTable_rowreq_ctx *
++dessertMeshifTable_row_find_by_mib_index(dessertMeshifTable_mib_index *
++ mib_idx)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx;
++ oid oid_tmp[MAX_OID_LEN];
++ netsnmp_index oid_idx;
++ int rc;
++
++ /*
++ * set up storage for OID
++ */
++ oid_idx.oids = oid_tmp;
++ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
++
++ /*
++ * convert
++ */
++ rc = dessertMeshifTable_index_to_oid(&oid_idx, mib_idx);
++ if (MFD_SUCCESS != rc)
++ return NULL;
++
++ rowreq_ctx =
++ CONTAINER_FIND(dessertMeshifTable_if_ctx.container, &oid_idx);
++
++ return rowreq_ctx;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_interface.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_interface.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,98 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/** @ingroup interface: Routines to interface to Net-SNMP
++ *
++ * \warning This code should not be modified, called directly,
++ * or used to interpret functionality. It is subject to
++ * change at any time.
++ *
++ * @{
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++#ifndef DESSERTMESHIFTABLE_INTERFACE_H
++#define DESSERTMESHIFTABLE_INTERFACE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#include "dessertMeshifTable.h"
++
++
++ /*
++ ********************************************************************
++ * Table declarations
++ */
++
++ /*
++ * PUBLIC interface initialization routine
++ */
++ void
++ _dessertMeshifTable_initialize_interface
++ (dessertMeshifTable_registration * user_ctx, u_long flags);
++ void
++ _dessertMeshifTable_shutdown_interface
++ (dessertMeshifTable_registration * user_ctx);
++
++ dessertMeshifTable_registration
++ *dessertMeshifTable_registration_get(void);
++
++ dessertMeshifTable_registration
++ *dessertMeshifTable_registration_set
++ (dessertMeshifTable_registration * newreg);
++
++ netsnmp_container *dessertMeshifTable_container_get(void);
++ int dessertMeshifTable_container_size(void);
++
++ dessertMeshifTable_rowreq_ctx
++ *dessertMeshifTable_allocate_rowreq_ctx(void *);
++ void
++ dessertMeshifTable_release_rowreq_ctx(dessertMeshifTable_rowreq_ctx
++ * rowreq_ctx);
++
++ int dessertMeshifTable_index_to_oid(netsnmp_index *
++ oid_idx,
++ dessertMeshifTable_mib_index
++ * mib_idx);
++ int dessertMeshifTable_index_from_oid(netsnmp_index *
++ oid_idx,
++ dessertMeshifTable_mib_index
++ * mib_idx);
++
++ /*
++ * access to certain internals. use with caution!
++ */
++ void
++ dessertMeshifTable_valid_columns_set(netsnmp_column_info *vc);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_INTERFACE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_oids.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_oids.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,43 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_OIDS_H
++#define DESSERTMESHIFTABLE_OIDS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ * column number definitions for table dessertMeshifTable
++ */
++#define DESSERTMESHIFTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,5
++
++#define COLUMN_MESHIFINDEX 1
++
++#define COLUMN_MESHIFNAME 2
++
++#define COLUMN_MESHIFMACADDRESS 3
++
++#define COLUMN_MESHIFINPKTS 4
++
++#define COLUMN_MESHIFOUTPKTS 5
++
++#define COLUMN_MESHIFINOCTETS 6
++
++#define COLUMN_MESHIFOUTOCTETS 7
++
++
++#define DESSERTMESHIFTABLE_MIN_COL COLUMN_MESHIFNAME
++#define DESSERTMESHIFTABLE_MAX_COL COLUMN_MESHIFOUTOCTETS
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertObjects.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertObjects.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,165 @@
++/**
++ * Note: this file originally auto-generated by mib2c using
++ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
++ */
++
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++#include "dessert_internal.h"
++
++/** Initializes the dessertObjects module */
++void
++init_dessertObjects(void)
++{
++ static oid dessertMeshifNumber_oid[] =
++ { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 4 };
++ static oid applicationVersion_oid[] =
++ { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 3, 2 };
++ static oid protocollShortName_oid[] =
++ { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 3, 3 };
++
++ DEBUGMSGTL((AGENT, "Initializing\n"));
++
++ netsnmp_register_scalar(netsnmp_create_handler_registration
++ ("dessertMeshifNumber",
++ handle_dessertMeshifNumber,
++ dessertMeshifNumber_oid,
++ OID_LENGTH(dessertMeshifNumber_oid),
++ HANDLER_CAN_RONLY));
++ netsnmp_register_scalar(netsnmp_create_handler_registration
++ ("applicationVersion",
++ handle_applicationVersion,
++ applicationVersion_oid,
++ OID_LENGTH(applicationVersion_oid),
++ HANDLER_CAN_RONLY));
++ netsnmp_register_scalar(netsnmp_create_handler_registration
++ ("protocollShortName",
++ handle_protocollShortName,
++ protocollShortName_oid,
++ OID_LENGTH(protocollShortName_oid),
++ HANDLER_CAN_RONLY));
++}
++
++int
++handle_dessertMeshifNumber(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *reqinfo,
++ netsnmp_request_info *requests)
++{
++ u_char meshif_count;
++
++ dessert_meshif_t *meshif;
++
++ DL_FOREACH(dessert_meshiflist_get(), meshif){
++ meshif_count++;
++ }
++
++ /*
++ * We are never called for a GETNEXT if it's registered as a
++ * "instance", as it's "magically" handled for us.
++ */
++
++ /*
++ * a instance handler also only hands us one request at a time, so
++ * we don't need to loop over a list of requests; we'll only get one.
++ */
++
++ switch (reqinfo->mode) {
++
++ case MODE_GET:
++ DEBUGMSGTL((AGENT, "handle_dessertMeshifNumber:MODE_GET\n"));
++ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
++ (u_char *) &meshif_count, sizeof(u_char));
++ break;
++
++
++ default:
++ /*
++ * we should never get here, so this is a really bad error
++ */
++ snmp_log(LOG_ERR,
++ "unknown mode (%d) in handle_dessertMeshifNumber\n",
++ reqinfo->mode);
++ return SNMP_ERR_GENERR;
++ }
++
++ return SNMP_ERR_NOERROR;
++}
++
++int
++handle_applicationVersion(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *reqinfo,
++ netsnmp_request_info *requests)
++{
++ /*
++ * We are never called for a GETNEXT if it's registered as a
++ * "instance", as it's "magically" handled for us.
++ */
++
++ /*
++ * a instance handler also only hands us one request at a time, so
++ * we don't need to loop over a list of requests; we'll only get one.
++ */
++
++ switch (reqinfo->mode) {
++
++ case MODE_GET:
++ DEBUGMSGTL((AGENT, "handle_applicationVersion:MODE_GET\n"));
++ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
++ (u_char *) &dessert_ver, sizeof(dessert_ver));
++ break;
++
++
++ default:
++ /*
++ * we should never get here, so this is a really bad error
++ */
++ snmp_log(LOG_ERR,
++ "unknown mode (%d) in handle_applicationVersion\n",
++ reqinfo->mode);
++ return SNMP_ERR_GENERR;
++ }
++
++ return SNMP_ERR_NOERROR;
++}
++
++int
++handle_protocollShortName(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *reqinfo,
++ netsnmp_request_info *requests)
++{
++ /*
++ * We are never called for a GETNEXT if it's registered as a
++ * "instance", as it's "magically" handled for us.
++ */
++
++ /*
++ * a instance handler also only hands us one request at a time, so
++ * we don't need to loop over a list of requests; we'll only get one.
++ */
++
++ switch (reqinfo->mode) {
++
++ case MODE_GET:
++ DEBUGMSGTL((AGENT, "handle_protocollShortName:MODE_GET\n"));
++ snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
++ (u_char *) dessert_proto, DESSERT_PROTO_STRLEN+1);
++ break;
++
++
++ default:
++ /*
++ * we should never get here, so this is a really bad error
++ */
++ snmp_log(LOG_ERR,
++ "unknown mode (%d) in handle_protocollShortName\n",
++ reqinfo->mode);
++ return SNMP_ERR_GENERR;
++ }
++
++ return SNMP_ERR_NOERROR;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertObjects.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertObjects.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,17 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
++ */
++#ifndef DESSERTOBJECTS_H
++#define DESSERTOBJECTS_H
++
++
++/*
++ * function declarations
++ */
++void init_dessertObjects(void);
++Netsnmp_Node_Handler handle_dessertMeshifNumber;
++Netsnmp_Node_Handler handle_applicationVersion;
++Netsnmp_Node_Handler handle_protocollShortName;
++
++#endif /* DESSERTOBJECTS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,215 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/** \page MFD helper for dessertSysifTable
++ *
++ * \section intro Introduction
++ * Introductory text.
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++#include <net-snmp/agent/mib_modules.h>
++
++#include "dessertSysifTable_interface.h"
++
++oid dessertSysifTable_oid[] = { DESSERTSYSIFTABLE_OID };
++
++int dessertSysifTable_oid_size =
++OID_LENGTH(dessertSysifTable_oid);
++
++dessertSysifTable_registration dessertSysifTable_user_context;
++
++void initialize_table_dessertSysifTable(void);
++void shutdown_table_dessertSysifTable(void);
++
++
++/**
++ * Initializes the dessertSysifTable module
++ */
++void
++init_dessertSysifTable(void)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:init_dessertSysifTable",
++ "called\n"));
++
++ /*
++ * TODO:300:o: Perform dessertSysifTable one-time module initialization.
++ */
++
++ /*
++ * here we initialize all the tables we're planning on supporting
++ */
++ if (should_init("dessertSysifTable"))
++ initialize_table_dessertSysifTable();
++
++} /* init_dessertSysifTable */
++
++/**
++ * Shut-down the dessertSysifTable module (agent is exiting)
++ */
++void
++shutdown_dessertSysifTable(void)
++{
++ if (should_init("dessertSysifTable"))
++ shutdown_table_dessertSysifTable();
++
++}
++
++/**
++ * Initialize the table dessertSysifTable
++ * (Define its contents and how it's structured)
++ */
++void
++initialize_table_dessertSysifTable(void)
++{
++ dessertSysifTable_registration *user_context;
++ u_long flags;
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:initialize_table_dessertSysifTable", "called\n"));
++
++ /*
++ * TODO:301:o: Perform dessertSysifTable one-time table initialization.
++ */
++
++ /*
++ * TODO:302:o: |->Initialize dessertSysifTable user context
++ * if you'd like to pass in a pointer to some data for this
++ * table, allocate or set it up here.
++ */
++ /*
++ * a netsnmp_data_list is a simple way to store void pointers. A simple
++ * string token is used to add, find or remove pointers.
++ */
++ user_context =
++ netsnmp_create_data_list("dessertSysifTable", NULL, NULL);
++
++ /*
++ * No support for any flags yet, but in the future you would
++ * set any flags here.
++ */
++ flags = 0;
++
++ /*
++ * call interface initialization code
++ */
++ _dessertSysifTable_initialize_interface(user_context, flags);
++} /* initialize_table_dessertSysifTable */
++
++/**
++ * Shutdown the table dessertSysifTable
++ */
++void
++shutdown_table_dessertSysifTable(void)
++{
++ /*
++ * call interface shutdown code
++ */
++ _dessertSysifTable_shutdown_interface(&dessertSysifTable_user_context);
++}
++
++/**
++ * extra context initialization (eg default values)
++ *
++ * @param rowreq_ctx : row request context
++ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
++ *
++ * @retval MFD_SUCCESS : no errors
++ * @retval MFD_ERROR : error (context allocate will fail)
++ */
++int
++dessertSysifTable_rowreq_ctx_init(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, void *user_init_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_rowreq_ctx_init", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:210:o: |-> Perform extra dessertSysifTable rowreq initialization. (eg DEFVALS)
++ */
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_rowreq_ctx_init */
++
++/**
++ * extra context cleanup
++ *
++ */
++void
++dessertSysifTable_rowreq_ctx_cleanup(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_rowreq_ctx_cleanup", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:211:o: |-> Perform extra dessertSysifTable rowreq cleanup.
++ */
++} /* dessertSysifTable_rowreq_ctx_cleanup */
++
++/**
++ * pre-request callback
++ *
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error
++ */
++int
++dessertSysifTable_pre_request(dessertSysifTable_registration *
++ user_context)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_pre_request",
++ "called\n"));
++
++ /*
++ * TODO:510:o: Perform dessertSysifTable pre-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_pre_request */
++
++/**
++ * post-request callback
++ *
++ * Note:
++ * New rows have been inserted into the container, and
++ * deleted rows have been removed from the container and
++ * released.
++ *
++ * @param user_context
++ * @param rc : MFD_SUCCESS if all requests succeeded
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error (ignored)
++ */
++int
++dessertSysifTable_post_request(dessertSysifTable_registration *
++ user_context, int rc)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_post_request",
++ "called\n"));
++
++ /*
++ * TODO:511:o: Perform dessertSysifTable post-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_post_request */
++
++
++/** @{ */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,230 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_H
++#define DESSERTSYSIFTABLE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/** @addtogroup misc misc: Miscellaneous routines
++ *
++ * @{
++ */
++#include <net-snmp/library/asn1.h>
++
++ /*
++ * other required module components
++ */
++ /* *INDENT-OFF* */
++config_add_mib(DESSERT2-MIB)
++config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_interface)
++config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_access)
++config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_get)
++config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_set)
++ /* *INDENT-ON* */
++
++ /*
++ * OID and column number definitions for dessertSysifTable
++ */
++#include "dessertSysifTable_oids.h"
++
++ /*
++ * enum definions
++ */
++#include "dessertSysifTable_enums.h"
++
++
++
++/*
++ *********************************************************************
++ * function declarations
++ */
++ void init_dessertSysifTable(void);
++ void shutdown_dessertSysifTable(void);
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++ /*
++ *********************************************************************
++ * When you register your mib, you get to provide a generic
++ * pointer that will be passed back to you for most of the
++ * functions calls.
++ *
++ * TODO:100:r: Review all context structures
++ */
++ /*
++ * TODO:101:o: |-> Review dessertSysifTable registration context.
++ */
++ typedef netsnmp_data_list dessertSysifTable_registration;
++
++/**********************************************************************/
++ /*
++ * TODO:110:r: |-> Review dessertSysifTable data context structure.
++ * This structure is used to represent the data for dessertSysifTable.
++ */
++ /*
++ * This structure contains storage for all the columns defined in the
++ * dessertSysifTable.
++ */
++ typedef struct dessertSysifTable_data_s {
++
++ /*
++ * sysifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char sysifName[255];
++ size_t sysifName_len; /* # of char elements, not bytes */
++
++ /*
++ * sysifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char sysifMacAddress[6];
++ size_t sysifMacAddress_len; /* # of char elements, not bytes */
++
++ /*
++ * sysifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 sysifInPkts;
++
++ /*
++ * sysifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 sysifOutPkts;
++
++ /*
++ * sysifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 sysifInOctets;
++
++ /*
++ * sysifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 sysifOutOctets;
++
++ } dessertSysifTable_data;
++
++
++ /*
++ * TODO:120:r: |-> Review dessertSysifTable mib index.
++ * This structure is used to represent the index for dessertSysifTable.
++ */
++ typedef struct dessertSysifTable_mib_index_s {
++
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long sysifIndex;
++
++
++ } dessertSysifTable_mib_index;
++
++ /*
++ * TODO:121:r: | |-> Review dessertSysifTable max index length.
++ * If you KNOW that your indexes will never exceed a certain
++ * length, update this macro to that length.
++ */
++#define MAX_dessertSysifTable_IDX_LEN 1
++
++
++ /*
++ *********************************************************************
++ * TODO:130:o: |-> Review dessertSysifTable Row request (rowreq) context.
++ * When your functions are called, you will be passed a
++ * dessertSysifTable_rowreq_ctx pointer.
++ */
++ typedef struct dessertSysifTable_rowreq_ctx_s {
++
++ /** this must be first for container compare to work */
++ netsnmp_index oid_idx;
++ oid oid_tmp[MAX_dessertSysifTable_IDX_LEN];
++
++ dessertSysifTable_mib_index tbl_idx;
++
++ dessertSysifTable_data data;
++
++ /*
++ * flags per row. Currently, the first (lower) 8 bits are reserved
++ * for the user. See mfd.h for other flags.
++ */
++ u_int rowreq_flags;
++
++ /*
++ * TODO:131:o: | |-> Add useful data to dessertSysifTable rowreq context.
++ */
++
++ /*
++ * storage for future expansion
++ */
++ netsnmp_data_list *dessertSysifTable_data_list;
++
++ } dessertSysifTable_rowreq_ctx;
++
++ typedef struct dessertSysifTable_ref_rowreq_ctx_s {
++ dessertSysifTable_rowreq_ctx *rowreq_ctx;
++ } dessertSysifTable_ref_rowreq_ctx;
++
++ /*
++ *********************************************************************
++ * function prototypes
++ */
++ int
++ dessertSysifTable_pre_request(dessertSysifTable_registration *
++ user_context);
++ int
++ dessertSysifTable_post_request(dessertSysifTable_registration *
++ user_context, int rc);
++
++ int
++ dessertSysifTable_rowreq_ctx_init(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, void *user_init_ctx);
++ void
++ dessertSysifTable_rowreq_ctx_cleanup(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++ dessertSysifTable_rowreq_ctx
++ *dessertSysifTable_row_find_by_mib_index
++ (dessertSysifTable_mib_index * mib_idx);
++
++ extern oid dessertSysifTable_oid[];
++ extern int dessertSysifTable_oid_size;
++
++#include "dessertSysifTable_interface.h"
++#include "dessertSysifTable_data_access.h"
++#include "dessertSysifTable_data_get.h"
++#include "dessertSysifTable_data_set.h"
++
++ /*
++ * DUMMY markers, ignore
++ *
++ * TODO:099:x: *************************************************************
++ * TODO:199:x: *************************************************************
++ * TODO:299:x: *************************************************************
++ * TODO:399:x: *************************************************************
++ * TODO:499:x: *************************************************************
++ */
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_access.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_access.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,336 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++#include "dessertSysifTable_data_access.h"
++
++/** @ingroup interface
++ * @addtogroup data_access data_access: Routines to access data
++ *
++ * These routines are used to locate the data used to satisfy
++ * requests.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++
++/**
++ * initialization for dessertSysifTable data access
++ *
++ * This function is called during startup to allow you to
++ * allocate any resources you need for the data table.
++ *
++ * @param dessertSysifTable_reg
++ * Pointer to dessertSysifTable_registration
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : unrecoverable error.
++ */
++int
++dessertSysifTable_init_data(dessertSysifTable_registration *
++ dessertSysifTable_reg)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_init_data",
++ "called\n"));
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_init_data */
++
++/**
++ * container overview
++ *
++ */
++
++/**
++ * container initialization
++ *
++ * @param container_ptr_ptr A pointer to a container pointer. If you
++ * create a custom container, use this parameter to return it
++ * to the MFD helper. If set to NULL, the MFD helper will
++ * allocate a container for you.
++ * @param cache A pointer to a cache structure. You can set the timeout
++ * and other cache flags using this pointer.
++ *
++ * This function is called at startup to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases. If no custom
++ * container is allocated, the MFD code will create one for your.
++ *
++ * This is also the place to set up cache behavior. The default, to
++ * simply set the cache timeout, will work well with the default
++ * container. If you are using a custom container, you may want to
++ * look at the cache helper documentation to see if there are any
++ * flags you want to set.
++ *
++ * @remark
++ * This would also be a good place to do any initialization needed
++ * for you data source. For example, opening a connection to another
++ * process that will supply the data, opening a database, etc.
++ */
++void
++dessertSysifTable_container_init(netsnmp_container ** container_ptr_ptr,
++ netsnmp_cache * cache)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_init", "called\n"));
++ dessert_debug("dessertSysifTable_container_load called");
++ if (NULL == container_ptr_ptr) {
++ snmp_log(LOG_ERR,
++ "bad container param to dessertSysifTable_container_init\n");
++ return;
++ }
++
++ /*
++ * For advanced users, you can use a custom container. If you
++ * do not create one, one will be created for you.
++ */
++ *container_ptr_ptr = NULL;
++
++ if (NULL == cache) {
++ snmp_log(LOG_ERR,
++ "bad cache param to dessertSysifTable_container_init\n");
++ return;
++ }
++
++ /*
++ * TODO:345:A: Set up dessertSysifTable cache properties.
++ *
++ * Also for advanced users, you can set parameters for the
++ * cache. Do not change the magic pointer, as it is used
++ * by the MFD helper. To completely disable caching, set
++ * cache->enabled to 0.
++ */
++ cache->timeout = DESSERTSYSIFTABLE_CACHE_TIMEOUT; /* seconds */
++} /* dessertSysifTable_container_init */
++
++/**
++ * container shutdown
++ *
++ * @param container_ptr A pointer to the container.
++ *
++ * This function is called at shutdown to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases.
++ *
++ * This function is called before dessertSysifTable_container_free().
++ *
++ * @remark
++ * This would also be a good place to do any cleanup needed
++ * for you data source. For example, closing a connection to another
++ * process that supplied the data, closing a database, etc.
++ */
++void
++dessertSysifTable_container_shutdown(netsnmp_container * container_ptr)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_shutdown", "called\n"));
++
++ if (NULL == container_ptr) {
++ snmp_log(LOG_ERR,
++ "bad params to dessertSysifTable_container_shutdown\n");
++ return;
++ }
++
++} /* dessertSysifTable_container_shutdown */
++
++/**
++ * load initial data
++ *
++ * TODO:350:M: Implement dessertSysifTable data load
++ * This function will also be called by the cache helper to load
++ * the container again (after the container free function has been
++ * called to free the previous contents).
++ *
++ * @param container container to which items should be inserted
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
++ * @retval MFD_ERROR : other error.
++ *
++ * This function is called to load the index(es) (and data, optionally)
++ * for the every row in the data set.
++ *
++ * @remark
++ * While loading the data, the only important thing is the indexes.
++ * If access to your data is cheap/fast (e.g. you have a pointer to a
++ * structure in memory), it would make sense to update the data here.
++ * If, however, the accessing the data invovles more work (e.g. parsing
++ * some other existing data, or peforming calculations to derive the data),
++ * then you can limit yourself to setting the indexes and saving any
++ * information you will need later. Then use the saved information in
++ * dessertSysifTable_row_prep() for populating data.
++ *
++ * @note
++ * If you need consistency between rows (like you want statistics
++ * for each row to be from the same time frame), you should set all
++ * data here.
++ *
++ */
++int dessertSysifTable_container_load(netsnmp_container * container) {
++
++ dessertSysifTable_rowreq_ctx *rowreq_ctx;
++ dessert_sysif_t *sysif = _dessert_sysif; /* TODO: change if multiple tun/tap interfaces are supported*/
++
++ char inPkts[I64CHARSZ + 1];
++ char outPkts[I64CHARSZ + 1];
++ char inOctets[I64CHARSZ + 1];
++ char outOctets[I64CHARSZ + 1];
++
++ /*
++ * temporary storage for index values
++ */
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long sysifIndex = 0;
++
++ dessert_debug("dessertSysifTable_container_load called");
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_load", "called\n"));
++
++ /*
++ * TODO:351:M: |-> Load/update data in the dessertSysTable container.
++ * loop over your dessertSysifTable data, allocate a rowreq context,
++ * set the index(es) [and data, optionally] and insert into
++ * the container.
++ */
++
++ /*
++ * TODO:352:M: | |-> set indexes in new dessertSysifTable rowreq context.
++ * data context will be set from the param (unless NULL,
++ * in which case a new data context will be allocated)
++ */
++ rowreq_ctx = dessertSysifTable_allocate_rowreq_ctx(NULL);
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "memory allocation failed\n");
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++
++ if (MFD_SUCCESS != dessertSysifTable_indexes_set(rowreq_ctx, sysifIndex)) {
++ snmp_log(LOG_ERR, "error setting index while loading "
++ "dessertSysTable data.\n");
++ dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++
++ /*
++ * TODO:352:r: | |-> populate dessertMeshifTable data context.
++ * Populate data context here. (optionally, delay until row prep)
++ */
++ /*
++ * non-TRANSIENT data: no need to copy. set pointer to data
++ */
++
++ rowreq_ctx->data.sysifName_len = strlen(sysif->if_name);
++ strcpy(rowreq_ctx->data.sysifName, sysif->if_name);
++
++ rowreq_ctx->data.sysifMacAddress_len = 6;
++ memcpy(rowreq_ctx->data.sysifMacAddress, sysif->hwaddr, 6);
++
++ pthread_mutex_lock(&(sysif->cnt_mutex));
++
++ rowreq_ctx->data.sysifInPkts.low = sysif->ipkts & 0xffffffff;
++ rowreq_ctx->data.sysifInPkts.high = sysif->ipkts >> 32;
++
++ rowreq_ctx->data.sysifOutPkts.low = sysif->opkts & 0xffffffff;
++ rowreq_ctx->data.sysifOutPkts.high = sysif->opkts >> 32;
++
++ rowreq_ctx->data.sysifInOctets.low = sysif->ibytes & 0xffffffff;
++ rowreq_ctx->data.sysifInOctets.high = sysif->ibytes >> 32;
++
++ rowreq_ctx->data.sysifOutOctets.low = sysif->obytes & 0xffffffff;
++ rowreq_ctx->data.sysifOutOctets.high = sysif->obytes >> 32;
++
++ printU64(inPkts, &rowreq_ctx->data.sysifInPkts);
++ printU64(outPkts, &rowreq_ctx->data.sysifOutPkts);
++ printU64(inOctets, &rowreq_ctx->data.sysifInOctets);
++ printU64(outOctets, &rowreq_ctx->data.sysifOutOctets);
++
++ dessert_debug("inPkts [%s] [%u]", inPkts, sysif->ipkts);
++ dessert_debug("outPkts [%s] [%u]", outPkts, sysif->opkts);
++ dessert_debug("inOctets [%s] [%u]", inOctets, sysif->ibytes);
++ dessert_debug("outOctets [%s] [%u]", outOctets, sysif->obytes);
++
++ pthread_mutex_unlock(&(sysif->cnt_mutex));
++
++ /*
++ * insert into table container
++ */
++ CONTAINER_INSERT(container, rowreq_ctx);
++
++ DEBUGMSGT(("verbose:dessertSysifTable:dessertSysifTable_container_load", "inserted 1 record(s)\n"));
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_container_load */
++
++/**
++ * container clean up
++ *
++ * @param container container with all current items
++ *
++ * This optional callback is called prior to all
++ * item's being removed from the container. If you
++ * need to do any processing before that, do it here.
++ *
++ * @note
++ * The MFD helper will take care of releasing all the row contexts.
++ *
++ */
++void
++dessertSysifTable_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_free", "called\n"));
++
++ /*
++ * TODO:380:M: Free dessertSysifTable container data.
++ */
++} /* dessertSysifTable_container_free */
++
++/**
++ * prepare row for processing.
++ *
++ * When the agent has located the row for a request, this function is
++ * called to prepare the row for processing. If you fully populated
++ * the data context during the index setup phase, you may not need to
++ * do anything.
++ *
++ * @param rowreq_ctx pointer to a context.
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ */
++int
++dessertSysifTable_row_prep(dessertSysifTable_rowreq_ctx * rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_row_prep",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:390:o: Prepare row for request.
++ * If populating row data was delayed, this is the place to
++ * fill in the row for this request.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_row_prep */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_access.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_access.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,90 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_DATA_ACCESS_H
++#define DESSERTSYSIFTABLE_DATA_ACCESS_H
++
++#include "dessert_internal.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++
++
++ int
++ dessertSysifTable_init_data(dessertSysifTable_registration *
++ dessertSysifTable_reg);
++
++
++ /*
++ * TODO:180:o: Review dessertSysifTable cache timeout.
++ * The number of seconds before the cache times out
++ */
++#define DESSERTSYSIFTABLE_CACHE_TIMEOUT DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT
++
++ void dessertSysifTable_container_init(netsnmp_container **
++ container_ptr_ptr,
++ netsnmp_cache *
++ cache);
++ void dessertSysifTable_container_shutdown(netsnmp_container
++ * container_ptr);
++
++ int dessertSysifTable_container_load(netsnmp_container *
++ container);
++ void dessertSysifTable_container_free(netsnmp_container *
++ container);
++
++ int dessertSysifTable_cache_load(netsnmp_container *
++ container);
++ void dessertSysifTable_cache_free(netsnmp_container *
++ container);
++
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ *********************************************************************
++ * Since we have no idea how you really access your data, we'll go with
++ * a worst case example: a flat text file.
++ */
++#define MAX_LINE_SIZE 256
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++ int dessertSysifTable_row_prep(dessertSysifTable_rowreq_ctx
++ * rowreq_ctx);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_get.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_get.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,507 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++
++/** @defgroup data_get data_get: Routines to get data
++ *
++ * TODO:230:M: Implement dessertSysifTable get routines.
++ * TODO:240:M: Implement dessertSysifTable mapping routines (if any).
++ *
++ * These routine are used to get the value for individual objects. The
++ * row context is passed, along with a pointer to the memory where the
++ * value should be copied.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++
++/*
++ * ---------------------------------------------------------------------
++ * * TODO:200:r: Implement dessertSysifTable data context functions.
++ */
++
++
++/**
++ * set mib index(es)
++ *
++ * @param tbl_idx mib index structure
++ * @param sysifIndex_val
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This convenience function is useful for setting all the MIB index
++ * components with a single function call. It is assume that the C values
++ * have already been mapped from their native/rawformat to the MIB format.
++ */
++int
++dessertSysifTable_indexes_set_tbl_idx(dessertSysifTable_mib_index *
++ tbl_idx, long sysifIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_indexes_set_tbl_idx", "called\n"));
++
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ tbl_idx->sysifIndex = sysifIndex_val;
++
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_indexes_set_tbl_idx */
++
++/**
++ * @internal
++ * set row context indexes
++ *
++ * @param reqreq_ctx the row context that needs updated indexes
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This function sets the mib indexs, then updates the oid indexs
++ * from the mib index.
++ */
++int
++dessertSysifTable_indexes_set(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ long sysifIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_indexes_set",
++ "called\n"));
++
++ if (MFD_SUCCESS !=
++ dessertSysifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
++ sysifIndex_val))
++ return MFD_ERROR;
++
++ /*
++ * convert mib index to oid index
++ */
++ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
++ if (0 != dessertSysifTable_index_to_oid(&rowreq_ctx->oid_idx,
++ &rowreq_ctx->tbl_idx)) {
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_indexes_set */
++
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifName
++ * sysifName is subid 2 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.2
++ * Description:
++name of interface
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the sysifName data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifName_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param sysifName_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by sysifName.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*sysifName_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update sysifName_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++sysifName_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ char **sysifName_val_ptr_ptr,
++ size_t *sysifName_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != sysifName_val_ptr_ptr)
++ && (NULL != *sysifName_val_ptr_ptr));
++ netsnmp_assert(NULL != sysifName_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:sysifName_get", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the sysifName data.
++ * copy (* sysifName_val_ptr_ptr ) data and (* sysifName_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for sysifName data
++ */
++ if ((NULL == (*sysifName_val_ptr_ptr)) ||
++ ((*sysifName_val_ptr_len_ptr) <
++ (rowreq_ctx->data.sysifName_len *
++ sizeof(rowreq_ctx->data.sysifName[0])))) {
++ /*
++ * allocate space for sysifName data
++ */
++ (*sysifName_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.sysifName_len *
++ sizeof(rowreq_ctx->data.sysifName[0]));
++ if (NULL == (*sysifName_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*sysifName_val_ptr_len_ptr) =
++ rowreq_ctx->data.sysifName_len *
++ sizeof(rowreq_ctx->data.sysifName[0]);
++ memcpy((*sysifName_val_ptr_ptr), rowreq_ctx->data.sysifName,
++ rowreq_ctx->data.sysifName_len *
++ sizeof(rowreq_ctx->data.sysifName[0]));
++
++ return MFD_SUCCESS;
++} /* sysifName_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifMacAddress
++ * sysifMacAddress is subid 3 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.3
++ * Description:
++hardware address of interface
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 1x:
++ *
++ * Ranges: 6;
++ *
++ * Its syntax is MacAddress (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 6)
++ */
++/**
++ * Extract the current value of the sysifMacAddress data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifMacAddress_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param sysifMacAddress_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by sysifMacAddress.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*sysifMacAddress_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update sysifMacAddress_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++sysifMacAddress_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ char **sysifMacAddress_val_ptr_ptr,
++ size_t *sysifMacAddress_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != sysifMacAddress_val_ptr_ptr)
++ && (NULL != *sysifMacAddress_val_ptr_ptr));
++ netsnmp_assert(NULL != sysifMacAddress_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:sysifMacAddress_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the sysifMacAddress data.
++ * copy (* sysifMacAddress_val_ptr_ptr ) data and (* sysifMacAddress_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for sysifMacAddress data
++ */
++ if ((NULL == (*sysifMacAddress_val_ptr_ptr)) ||
++ ((*sysifMacAddress_val_ptr_len_ptr) <
++ (rowreq_ctx->data.sysifMacAddress_len *
++ sizeof(rowreq_ctx->data.sysifMacAddress[0])))) {
++ /*
++ * allocate space for sysifMacAddress data
++ */
++ (*sysifMacAddress_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.sysifMacAddress_len *
++ sizeof(rowreq_ctx->data.sysifMacAddress[0]));
++ if (NULL == (*sysifMacAddress_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*sysifMacAddress_val_ptr_len_ptr) =
++ rowreq_ctx->data.sysifMacAddress_len *
++ sizeof(rowreq_ctx->data.sysifMacAddress[0]);
++ memcpy((*sysifMacAddress_val_ptr_ptr),
++ rowreq_ctx->data.sysifMacAddress,
++ rowreq_ctx->data.sysifMacAddress_len *
++ sizeof(rowreq_ctx->data.sysifMacAddress[0]));
++
++ return MFD_SUCCESS;
++} /* sysifMacAddress_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifInPkts
++ * sysifInPkts is subid 4 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.4
++ * Description:
++packet counter in
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the sysifInPkts data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifInPkts_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++sysifInPkts_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ U64 * sysifInPkts_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != sysifInPkts_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy sysifInPkts data.
++ * get (* sysifInPkts_val_ptr ).low and (* sysifInPkts_val_ptr ).high from rowreq_ctx->data
++ */
++ (*sysifInPkts_val_ptr).high = rowreq_ctx->data.sysifInPkts.high;
++ (*sysifInPkts_val_ptr).low = rowreq_ctx->data.sysifInPkts.low;
++
++
++ return MFD_SUCCESS;
++} /* sysifInPkts_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifOutPkts
++ * sysifOutPkts is subid 5 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.5
++ * Description:
++packet counter out
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the sysifOutPkts data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifOutPkts_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++sysifOutPkts_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ U64 * sysifOutPkts_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != sysifOutPkts_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy sysifOutPkts data.
++ * get (* sysifOutPkts_val_ptr ).low and (* sysifOutPkts_val_ptr ).high from rowreq_ctx->data
++ */
++ (*sysifOutPkts_val_ptr).high = rowreq_ctx->data.sysifOutPkts.high;
++ (*sysifOutPkts_val_ptr).low = rowreq_ctx->data.sysifOutPkts.low;
++
++
++ return MFD_SUCCESS;
++} /* sysifOutPkts_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifInOctets
++ * sysifInOctets is subid 6 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.6
++ * Description:
++octet counter in
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the sysifInOctets data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifInOctets_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++sysifInOctets_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ U64 * sysifInOctets_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != sysifInOctets_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy sysifInOctets data.
++ * get (* sysifInOctets_val_ptr ).low and (* sysifInOctets_val_ptr ).high from rowreq_ctx->data
++ */
++ (*sysifInOctets_val_ptr).high = rowreq_ctx->data.sysifInOctets.high;
++ (*sysifInOctets_val_ptr).low = rowreq_ctx->data.sysifInOctets.low;
++
++
++ return MFD_SUCCESS;
++} /* sysifInOctets_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifOutOctets
++ * sysifOutOctets is subid 7 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.7
++ * Description:
++octet counter out
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the sysifOutOctets data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifOutOctets_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++sysifOutOctets_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ U64 * sysifOutOctets_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != sysifOutOctets_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy sysifOutOctets data.
++ * get (* sysifOutOctets_val_ptr ).low and (* sysifOutOctets_val_ptr ).high from rowreq_ctx->data
++ */
++ (*sysifOutOctets_val_ptr).high = rowreq_ctx->data.sysifOutOctets.high;
++ (*sysifOutOctets_val_ptr).low = rowreq_ctx->data.sysifOutOctets.low;
++
++
++ return MFD_SUCCESS;
++} /* sysifOutOctets_get */
++
++
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_get.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_get.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,105 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ *
++ * @file dessertSysifTable_data_get.h
++ *
++ * @addtogroup get
++ *
++ * Prototypes for get functions
++ *
++ * @{
++ */
++#ifndef DESSERTSYSIFTABLE_DATA_GET_H
++#define DESSERTSYSIFTABLE_DATA_GET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * GET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * GET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++ /*
++ * indexes
++ */
++ int sysifIndex_map(uint* *mib_sysifIndex_val_ptr,
++ uint raw_sysifIndex_val);
++
++ int sysifName_map(char **mib_sysifName_val_ptr_ptr,
++ size_t *mib_sysifName_val_ptr_len_ptr,
++ char *raw_sysifName_val_ptr,
++ size_t raw_sysifName_val_ptr_len,
++ int allow_realloc);
++ int sysifName_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, char **sysifName_val_ptr_ptr,
++ size_t *sysifName_val_ptr_len_ptr);
++ int sysifMacAddress_map(char
++ **mib_sysifMacAddress_val_ptr_ptr,
++ size_t
++ *mib_sysifMacAddress_val_ptr_len_ptr,
++ char *raw_sysifMacAddress_val_ptr,
++ size_t
++ raw_sysifMacAddress_val_ptr_len,
++ int allow_realloc);
++ int sysifMacAddress_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx,
++ char **sysifMacAddress_val_ptr_ptr,
++ size_t
++ *sysifMacAddress_val_ptr_len_ptr);
++ int sysifInPkts_map(U64 * mib_sysifInPkts_val_ptr,
++ U64 raw_sysifInPkts_val);
++ int sysifInPkts_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, U64 * sysifInPkts_val_ptr);
++ int sysifOutPkts_map(U64 * mib_sysifOutPkts_val_ptr,
++ U64 raw_sysifOutPkts_val);
++ int sysifOutPkts_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * sysifOutPkts_val_ptr);
++ int sysifInOctets_map(U64 * mib_sysifInOctets_val_ptr,
++ U64 raw_sysifInOctets_val);
++ int sysifInOctets_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * sysifInOctets_val_ptr);
++ int sysifOutOctets_map(U64 * mib_sysifOutOctets_val_ptr,
++ U64 raw_sysifOutOctets_val);
++ int sysifOutOctets_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * sysifOutOctets_val_ptr);
++
++
++ int
++ dessertSysifTable_indexes_set_tbl_idx(dessertSysifTable_mib_index *
++ tbl_idx, long sysifIndex_val);
++ int
++ dessertSysifTable_indexes_set(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, long sysifIndex_val);
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_DATA_GET_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_set.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++
++/** @defgroup data_set data_set: Routines to set data
++ *
++ * These routines are used to set the value for individual objects. The
++ * row context is passed, along with the new value.
++ *
++ * @{
++ */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_set.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_DATA_SET_H
++#define DESSERTSYSIFTABLE_DATA_SET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * SET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * SET Table declarations
++ */
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_enums.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_enums.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,39 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_ENUMS_H
++#define DESSERTSYSIFTABLE_ENUMS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ * NOTES on enums
++ * ==============
++ *
++ * Value Mapping
++ * -------------
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them
++ * below. For example, a boolean flag (1/0) is usually represented
++ * as a TruthValue in a MIB, which maps to the values (1/2).
++ *
++ */
++/*************************************************************************
++ *************************************************************************
++ *
++ * enum definitions for table dessertSysifTable
++ *
++ *************************************************************************
++ *************************************************************************/
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_interface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_interface.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,936 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++
++#include <net-snmp/agent/table_container.h>
++#include <net-snmp/library/container.h>
++
++#include "dessertSysifTable_interface.h"
++
++#include <ctype.h>
++
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++typedef struct dessertSysifTable_interface_ctx_s {
++
++ netsnmp_container *container;
++ netsnmp_cache *cache;
++
++ dessertSysifTable_registration *user_ctx;
++
++ netsnmp_table_registration_info tbl_info;
++
++ netsnmp_baby_steps_access_methods access_multiplexer;
++
++} dessertSysifTable_interface_ctx;
++
++static dessertSysifTable_interface_ctx dessertSysifTable_if_ctx;
++
++static void
++_dessertSysifTable_container_init(dessertSysifTable_interface_ctx *
++ if_ctx);
++static void
++_dessertSysifTable_container_shutdown(dessertSysifTable_interface_ctx *
++ if_ctx);
++
++
++netsnmp_container *
++dessertSysifTable_container_get(void)
++{
++ return dessertSysifTable_if_ctx.container;
++}
++
++dessertSysifTable_registration *
++dessertSysifTable_registration_get(void)
++{
++ return dessertSysifTable_if_ctx.user_ctx;
++}
++
++dessertSysifTable_registration *
++dessertSysifTable_registration_set(dessertSysifTable_registration * newreg)
++{
++ dessertSysifTable_registration *old =
++ dessertSysifTable_if_ctx.user_ctx;
++ dessertSysifTable_if_ctx.user_ctx = newreg;
++ return old;
++}
++
++int
++dessertSysifTable_container_size(void)
++{
++ return CONTAINER_SIZE(dessertSysifTable_if_ctx.container);
++}
++
++/*
++ * mfd multiplexer modes
++ */
++static Netsnmp_Node_Handler _mfd_dessertSysifTable_pre_request;
++static Netsnmp_Node_Handler _mfd_dessertSysifTable_post_request;
++static Netsnmp_Node_Handler _mfd_dessertSysifTable_object_lookup;
++static Netsnmp_Node_Handler _mfd_dessertSysifTable_get_values;
++/**
++ * @internal
++ * Initialize the table dessertSysifTable
++ * (Define its contents and how it's structured)
++ */
++void
++_dessertSysifTable_initialize_interface(dessertSysifTable_registration *
++ reg_ptr, u_long flags)
++{
++ netsnmp_baby_steps_access_methods *access_multiplexer =
++ &dessertSysifTable_if_ctx.access_multiplexer;
++ netsnmp_table_registration_info *tbl_info =
++ &dessertSysifTable_if_ctx.tbl_info;
++ netsnmp_handler_registration *reginfo;
++ netsnmp_mib_handler *handler;
++ int mfd_modes = 0;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_initialize_interface", "called\n"));
++
++
++ /*************************************************
++ *
++ * save interface context for dessertSysifTable
++ */
++ /*
++ * Setting up the table's definition
++ */
++ netsnmp_table_helper_add_indexes(tbl_info,
++ /** index: sysifIndex */
++ 0);
++
++ /*
++ * Define the minimum and maximum accessible columns. This
++ * optimizes retrival.
++ */
++ tbl_info->min_column = DESSERTSYSIFTABLE_MIN_COL;
++ tbl_info->max_column = DESSERTSYSIFTABLE_MAX_COL;
++
++ /*
++ * save users context
++ */
++ dessertSysifTable_if_ctx.user_ctx = reg_ptr;
++
++ /*
++ * call data access initialization code
++ */
++ dessertSysifTable_init_data(reg_ptr);
++
++ /*
++ * set up the container
++ */
++ _dessertSysifTable_container_init(&dessertSysifTable_if_ctx);
++ if (NULL == dessertSysifTable_if_ctx.container) {
++ snmp_log(LOG_ERR,
++ "could not initialize container for dessertSysifTable\n");
++ return;
++ }
++
++ /*
++ * access_multiplexer: REQUIRED wrapper for get request handling
++ */
++ access_multiplexer->object_lookup =
++ _mfd_dessertSysifTable_object_lookup;
++ access_multiplexer->get_values = _mfd_dessertSysifTable_get_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->pre_request = _mfd_dessertSysifTable_pre_request;
++ access_multiplexer->post_request = _mfd_dessertSysifTable_post_request;
++
++
++ /*************************************************
++ *
++ * Create a registration, save our reg data, register table.
++ */
++ DEBUGMSGTL(("dessertSysifTable:init_dessertSysifTable",
++ "Registering dessertSysifTable as a mibs-for-dummies table.\n"));
++ handler =
++ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
++ reginfo =
++ netsnmp_handler_registration_create("dessertSysifTable", handler,
++ dessertSysifTable_oid,
++ dessertSysifTable_oid_size,
++ HANDLER_CAN_BABY_STEP |
++ HANDLER_CAN_RONLY);
++ if (NULL == reginfo) {
++ snmp_log(LOG_ERR, "error registering table dessertSysifTable\n");
++ return;
++ }
++ reginfo->my_reg_void = &dessertSysifTable_if_ctx;
++
++ /*************************************************
++ *
++ * set up baby steps handler, create it and inject it
++ */
++ if (access_multiplexer->object_lookup)
++ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
++ if (access_multiplexer->set_values)
++ mfd_modes |= BABY_STEP_SET_VALUES;
++ if (access_multiplexer->irreversible_commit)
++ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
++ if (access_multiplexer->object_syntax_checks)
++ mfd_modes |= BABY_STEP_CHECK_OBJECT;
++
++ if (access_multiplexer->pre_request)
++ mfd_modes |= BABY_STEP_PRE_REQUEST;
++ if (access_multiplexer->post_request)
++ mfd_modes |= BABY_STEP_POST_REQUEST;
++
++ if (access_multiplexer->undo_setup)
++ mfd_modes |= BABY_STEP_UNDO_SETUP;
++ if (access_multiplexer->undo_cleanup)
++ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
++ if (access_multiplexer->undo_sets)
++ mfd_modes |= BABY_STEP_UNDO_SETS;
++
++ if (access_multiplexer->row_creation)
++ mfd_modes |= BABY_STEP_ROW_CREATE;
++ if (access_multiplexer->consistency_checks)
++ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
++ if (access_multiplexer->commit)
++ mfd_modes |= BABY_STEP_COMMIT;
++ if (access_multiplexer->undo_commit)
++ mfd_modes |= BABY_STEP_UNDO_COMMIT;
++
++ handler = netsnmp_baby_steps_handler_get(mfd_modes);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
++ */
++ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject container_table helper
++ */
++ handler =
++ netsnmp_container_table_handler_get(tbl_info,
++ dessertSysifTable_if_ctx.
++ container,
++ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject cache helper
++ */
++ if (NULL != dessertSysifTable_if_ctx.cache) {
++ handler =
++ netsnmp_cache_handler_get(dessertSysifTable_if_ctx.cache);
++ netsnmp_inject_handler(reginfo, handler);
++ }
++
++ /*
++ * register table
++ */
++ netsnmp_register_table(reginfo, tbl_info);
++
++} /* _dessertSysifTable_initialize_interface */
++
++/**
++ * @internal
++ * Shutdown the table dessertSysifTable
++ */
++void
++_dessertSysifTable_shutdown_interface(dessertSysifTable_registration *
++ reg_ptr)
++{
++ /*
++ * shutdown the container
++ */
++ _dessertSysifTable_container_shutdown(&dessertSysifTable_if_ctx);
++}
++
++void
++dessertSysifTable_valid_columns_set(netsnmp_column_info *vc)
++{
++ dessertSysifTable_if_ctx.tbl_info.valid_columns = vc;
++} /* dessertSysifTable_valid_columns_set */
++
++/**
++ * @internal
++ * convert the index component stored in the context to an oid
++ */
++int
++dessertSysifTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertSysifTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_sysifIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_sysifIndex, 0x00, sizeof(var_sysifIndex));
++ var_sysifIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_sysifIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_index_to_oid",
++ "called\n"));
++
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ snmp_set_var_value(&var_sysifIndex, (u_char *) & mib_idx->sysifIndex,
++ sizeof(mib_idx->sysifIndex));
++
++
++ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
++ NULL, 0, &var_sysifIndex);
++ if (err)
++ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_sysifIndex);
++
++ return err;
++} /* dessertSysifTable_index_to_oid */
++
++/**
++ * extract dessertSysifTable indexes from a netsnmp_index
++ *
++ * @retval SNMP_ERR_NOERROR : no error
++ * @retval SNMP_ERR_GENERR : error
++ */
++int
++dessertSysifTable_index_from_oid(netsnmp_index * oid_idx,
++ dessertSysifTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_sysifIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_sysifIndex, 0x00, sizeof(var_sysifIndex));
++ var_sysifIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_sysifIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_index_from_oid", "called\n"));
++
++ /*
++ * parse the oid into the individual index components
++ */
++ err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_sysifIndex);
++ if (err == SNMP_ERR_NOERROR) {
++ /*
++ * copy out values
++ */
++ mib_idx->sysifIndex = *((long *)var_sysifIndex.val.string);
++
++
++ }
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_sysifIndex);
++
++ return err;
++} /* dessertSysifTable_index_from_oid */
++
++
++/*
++ *********************************************************************
++ * @internal
++ * allocate resources for a dessertSysifTable_rowreq_ctx
++ */
++dessertSysifTable_rowreq_ctx *
++dessertSysifTable_allocate_rowreq_ctx(void *user_init_ctx)
++{
++ dessertSysifTable_rowreq_ctx *rowreq_ctx =
++ SNMP_MALLOC_TYPEDEF(dessertSysifTable_rowreq_ctx);
++
++ DEBUGMSGTL(("internal:dessertSysifTable:dessertSysifTable_allocate_rowreq_ctx", "called\n"));
++
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
++ "dessertSysifTable_rowreq_ctx.\n");
++ return NULL;
++ }
++
++ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
++
++ rowreq_ctx->dessertSysifTable_data_list = NULL;
++
++ /*
++ * if we allocated data, call init routine
++ */
++ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
++ if (SNMPERR_SUCCESS !=
++ dessertSysifTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
++ dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
++ rowreq_ctx = NULL;
++ }
++ }
++
++ return rowreq_ctx;
++} /* dessertSysifTable_allocate_rowreq_ctx */
++
++/*
++ * @internal
++ * release resources for a dessertSysifTable_rowreq_ctx
++ */
++void
++dessertSysifTable_release_rowreq_ctx(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:dessertSysifTable_release_rowreq_ctx", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ dessertSysifTable_rowreq_ctx_cleanup(rowreq_ctx);
++
++ /*
++ * free index oid pointer
++ */
++ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
++ free(rowreq_ctx->oid_idx.oids);
++
++ SNMP_FREE(rowreq_ctx);
++} /* dessertSysifTable_release_rowreq_ctx */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertSysifTable_pre_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_pre_request", "called\n"));
++
++ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertSysifTable",
++ "skipping additional pre_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ rc = dessertSysifTable_pre_request(dessertSysifTable_if_ctx.user_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertSysifTable", "error %d from "
++ "dessertSysifTable_pre_request\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertSysifTable_pre_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertSysifTable_post_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertSysifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc, packet_rc;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_post_request", "called\n"));
++
++ /*
++ * release row context, if deleted
++ */
++ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
++ dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
++
++ /*
++ * wait for last call before calling user
++ */
++ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertSysifTable",
++ "waiting for last post_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
++ rc = dessertSysifTable_post_request(dessertSysifTable_if_ctx.user_ctx,
++ packet_rc);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertSysifTable", "error %d from "
++ "dessertSysifTable_post_request\n", rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertSysifTable_post_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertSysifTable_object_lookup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc = SNMP_ERR_NOERROR;
++ dessertSysifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_object_lookup", "called\n"));
++
++ /*
++ * get our context from mfd
++ * dessertSysifTable_interface_ctx *if_ctx =
++ * (dessertSysifTable_interface_ctx *)reginfo->my_reg_void;
++ */
++
++ if (NULL == rowreq_ctx) {
++ rc = SNMP_ERR_NOCREATION;
++ }
++
++ if (MFD_SUCCESS != rc)
++ netsnmp_request_set_error_all(requests, rc);
++ else
++ dessertSysifTable_row_prep(rowreq_ctx);
++
++ return SNMP_VALIDATE_ERR(rc);
++} /* _mfd_dessertSysifTable_object_lookup */
++
++/***********************************************************************
++ *
++ * GET processing
++ *
++ ***********************************************************************/
++/*
++ * @internal
++ * Retrieve the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertSysifTable_get_column(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ netsnmp_variable_list * var, int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_column", "called for %d\n", column));
++
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * sysifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_SYSIFNAME:
++ var->type = ASN_OCTET_STR;
++ rc = sysifName_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * sysifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_SYSIFMACADDRESS:
++ var->type = ASN_OCTET_STR;
++ rc = sysifMacAddress_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * sysifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_SYSIFINPKTS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = sysifInPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * sysifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_SYSIFOUTPKTS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = sysifOutPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * sysifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_SYSIFINOCTETS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = sysifInOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * sysifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_SYSIFOUTOCTETS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = sysifOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ default:
++ if (DESSERTSYSIFTABLE_MIN_COL <= column
++ && column <= DESSERTSYSIFTABLE_MAX_COL) {
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_column", "assume column %d is reserved\n", column));
++ rc = MFD_SKIP;
++ } else {
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertSysifTable_get_column\n",
++ column);
++ }
++ break;
++ }
++
++ return rc;
++} /* _dessertSysifTable_get_column */
++
++int
++_mfd_dessertSysifTable_get_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertSysifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ u_char *old_string;
++ void (*dataFreeHook) (void *);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ for (; requests; requests = requests->next) {
++ /*
++ * save old pointer, so we can free it if replaced
++ */
++ old_string = requests->requestvb->val.string;
++ dataFreeHook = requests->requestvb->dataFreeHook;
++ if (NULL == requests->requestvb->val.string) {
++ requests->requestvb->val.string = requests->requestvb->buf;
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ } else if (requests->requestvb->buf ==
++ requests->requestvb->val.string) {
++ if (requests->requestvb->val_len !=
++ sizeof(requests->requestvb->buf))
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ }
++
++ /*
++ * get column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertSysifTable_get_column(rowreq_ctx, requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ if (MFD_SKIP == rc) {
++ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
++ rc = SNMP_ERR_NOERROR;
++ }
++ } else if (NULL == requests->requestvb->val.string) {
++ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
++ rc = SNMP_ERR_GENERR;
++ }
++ if (rc)
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++
++ /*
++ * if the buffer wasn't used previously for the old data (i.e. it
++ * was allcoated memory) and the get routine replaced the pointer,
++ * we need to free the previous pointer.
++ */
++ if (old_string && (old_string != requests->requestvb->buf) &&
++ (requests->requestvb->val.string != old_string)) {
++ if (dataFreeHook)
++ (*dataFreeHook) (old_string);
++ else
++ free(old_string);
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertSysifTable_get_values */
++
++
++/***********************************************************************
++ *
++ * SET processing
++ *
++ ***********************************************************************/
++
++/*
++ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
++ */
++/***********************************************************************
++ *
++ * DATA ACCESS
++ *
++ ***********************************************************************/
++static void _container_free(netsnmp_container * container);
++
++/**
++ * @internal
++ */
++static int
++_cache_load(netsnmp_cache * cache, void *vmagic)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_cache_load", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache for dessertSysifTable_cache_load\n");
++ return -1;
++ }
++
++ /** should only be called for an invalid or expired cache */
++ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
++
++ /*
++ * call user code
++ */
++ return dessertSysifTable_container_load((netsnmp_container *) cache->
++ magic);
++} /* _cache_load */
++
++/**
++ * @internal
++ */
++static void
++_cache_free(netsnmp_cache * cache, void *magic)
++{
++ netsnmp_container *container;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_cache_free", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache in dessertSysifTable_cache_free\n");
++ return;
++ }
++
++ container = (netsnmp_container *) cache->magic;
++
++ _container_free(container);
++} /* _cache_free */
++
++/**
++ * @internal
++ */
++static void
++_container_item_free(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ void *context)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_container_item_free",
++ "called\n"));
++
++ if (NULL == rowreq_ctx)
++ return;
++
++ dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
++} /* _container_item_free */
++
++/**
++ * @internal
++ */
++static void
++_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_container_free", "called\n"));
++
++ if (NULL == container) {
++ snmp_log(LOG_ERR,
++ "invalid container in dessertSysifTable_container_free\n");
++ return;
++ }
++
++ /*
++ * call user code
++ */
++ dessertSysifTable_container_free(container);
++
++ /*
++ * free all items. inefficient, but easy.
++ */
++ CONTAINER_CLEAR(container,
++ (netsnmp_container_obj_func *) _container_item_free,
++ NULL);
++} /* _container_free */
++
++/**
++ * @internal
++ * initialize the container with functions or wrappers
++ */
++void
++_dessertSysifTable_container_init(dessertSysifTable_interface_ctx * if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_container_init", "called\n"));
++
++ /*
++ * cache init
++ */
++ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
++ _cache_load, _cache_free,
++ dessertSysifTable_oid,
++ dessertSysifTable_oid_size);
++
++ if (NULL == if_ctx->cache) {
++ snmp_log(LOG_ERR, "error creating cache for dessertSysifTable\n");
++ return;
++ }
++
++ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
++
++ dessertSysifTable_container_init(&if_ctx->container, if_ctx->cache);
++ if (NULL == if_ctx->container)
++ if_ctx->container =
++ netsnmp_container_find("dessertSysifTable:table_container");
++ if (NULL == if_ctx->container) {
++ snmp_log(LOG_ERR, "error creating container in "
++ "dessertSysifTable_container_init\n");
++ return;
++ }
++
++ if (NULL != if_ctx->cache)
++ if_ctx->cache->magic = (void *) if_ctx->container;
++} /* _dessertSysifTable_container_init */
++
++/**
++ * @internal
++ * shutdown the container with functions or wrappers
++ */
++void
++_dessertSysifTable_container_shutdown(dessertSysifTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_container_shutdown", "called\n"));
++
++ dessertSysifTable_container_shutdown(if_ctx->container);
++
++ _container_free(if_ctx->container);
++
++} /* _dessertSysifTable_container_shutdown */
++
++
++dessertSysifTable_rowreq_ctx *
++dessertSysifTable_row_find_by_mib_index(dessertSysifTable_mib_index *
++ mib_idx)
++{
++ dessertSysifTable_rowreq_ctx *rowreq_ctx;
++ oid oid_tmp[MAX_OID_LEN];
++ netsnmp_index oid_idx;
++ int rc;
++
++ /*
++ * set up storage for OID
++ */
++ oid_idx.oids = oid_tmp;
++ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
++
++ /*
++ * convert
++ */
++ rc = dessertSysifTable_index_to_oid(&oid_idx, mib_idx);
++ if (MFD_SUCCESS != rc)
++ return NULL;
++
++ rowreq_ctx =
++ CONTAINER_FIND(dessertSysifTable_if_ctx.container, &oid_idx);
++
++ return rowreq_ctx;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_interface.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_interface.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,97 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/** @ingroup interface: Routines to interface to Net-SNMP
++ *
++ * \warning This code should not be modified, called directly,
++ * or used to interpret functionality. It is subject to
++ * change at any time.
++ *
++ * @{
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++#ifndef DESSERTSYSIFTABLE_INTERFACE_H
++#define DESSERTSYSIFTABLE_INTERFACE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#include "dessertSysifTable.h"
++
++
++ /*
++ ********************************************************************
++ * Table declarations
++ */
++
++ /*
++ * PUBLIC interface initialization routine
++ */
++ void
++ _dessertSysifTable_initialize_interface
++ (dessertSysifTable_registration * user_ctx, u_long flags);
++ void
++ _dessertSysifTable_shutdown_interface
++ (dessertSysifTable_registration * user_ctx);
++
++ dessertSysifTable_registration
++ *dessertSysifTable_registration_get(void);
++
++ dessertSysifTable_registration
++ *dessertSysifTable_registration_set(dessertSysifTable_registration
++ * newreg);
++
++ netsnmp_container *dessertSysifTable_container_get(void);
++ int dessertSysifTable_container_size(void);
++
++ dessertSysifTable_rowreq_ctx
++ *dessertSysifTable_allocate_rowreq_ctx(void *);
++ void
++ dessertSysifTable_release_rowreq_ctx(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int dessertSysifTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertSysifTable_mib_index
++ * mib_idx);
++ int dessertSysifTable_index_from_oid(netsnmp_index *
++ oid_idx,
++ dessertSysifTable_mib_index
++ * mib_idx);
++
++ /*
++ * access to certain internals. use with caution!
++ */
++ void dessertSysifTable_valid_columns_set(netsnmp_column_info
++ *vc);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_INTERFACE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_oids.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_oids.h 2009-12-09 16:38:27.332672538 +0100
+@@ -0,0 +1,43 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_OIDS_H
++#define DESSERTSYSIFTABLE_OIDS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ * column number definitions for table dessertSysifTable
++ */
++#define DESSERTSYSIFTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,7
++
++#define COLUMN_SYSIFINDEX 1
++
++#define COLUMN_SYSIFNAME 2
++
++#define COLUMN_SYSIFMACADDRESS 3
++
++#define COLUMN_SYSIFINPKTS 4
++
++#define COLUMN_SYSIFOUTPKTS 5
++
++#define COLUMN_SYSIFINOCTETS 6
++
++#define COLUMN_SYSIFOUTOCTETS 7
++
++
++#define DESSERTSYSIFTABLE_MIN_COL COLUMN_SYSIFNAME
++#define DESSERTSYSIFTABLE_MAX_COL COLUMN_SYSIFOUTOCTETS
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_subagent.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_subagent.c 2009-12-09 16:38:27.332672538 +0100
+@@ -0,0 +1,202 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15795 $ of $
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++#include <signal.h>
++
++static int keep_running;
++
++static RETSIGTYPE
++stop_server(int a)
++{
++ keep_running = 0;
++}
++
++static void
++usage(void)
++{
++ printf
++ ("usage: dessertSysifTable [-D<tokens>] [-f] [-L] [-M] [-H] [LISTENING ADDRESSES]\n"
++ "\t-f Do not fork() from the calling shell.\n"
++ "\t-DTOKEN[,TOKEN,...]\n"
++ "\t\tTurn on debugging output for the given TOKEN(s).\n"
++ "\t\tWithout any tokens specified, it defaults to printing\n"
++ "\t\tall the tokens (which is equivalent to the keyword 'ALL').\n"
++ "\t\tYou might want to try ALL for extremely verbose output.\n"
++ "\t\tNote: You can't put a space between the -D and the TOKENs.\n"
++ "\t-H\tDisplay a list of configuration file directives\n"
++ "\t\tunderstood by the agent and then exit.\n"
++ "\t-M\tRun as a normal SNMP Agent instead of an AgentX sub-agent.\n"
++ "\t-x ADDRESS\tconnect to master agent at ADDRESS (default /var/agentx/master).\n"
++ "\t-L\tDo not open a log file; print all messages to stderr.\n");
++ exit(0);
++}
++
++int
++main(int argc, char **argv)
++{
++ int agentx_subagent = 1; /* change this if you want to be a SNMP master agent */
++ /*
++ * Defs for arg-handling code: handles setting of policy-related variables
++ */
++ int ch;
++ extern char *optarg;
++ int dont_fork = 0, use_syslog = 0;
++ char *agentx_socket = NULL;
++
++ while ((ch = getopt(argc, argv, "D:fHLMx:")) != EOF)
++ switch (ch) {
++ case 'D':
++ debug_register_tokens(optarg);
++ snmp_set_do_debugging(1);
++ break;
++ case 'f':
++ dont_fork = 1;
++ break;
++ case 'H':
++ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1);
++ init_agent("dessertSysifTable"); /* register our .conf handlers */
++ init_dessertSysifTable();
++ init_snmp("dessertSysifTable");
++ fprintf(stderr, "Configuration directives understood:\n");
++ read_config_print_usage(" ");
++ exit(0);
++ case 'M':
++ agentx_subagent = 0;
++ break;
++ case 'L':
++ use_syslog = 0; /* use stderr */
++ break;
++ case 'x':
++ agentx_socket = optarg;
++ break;
++ default:
++ fprintf(stderr, "unknown option %c\n", ch);
++ usage();
++ }
++
++ if (optind < argc) {
++ int i;
++ /*
++ * There are optional transport addresses on the command line.
++ */
++ DEBUGMSGTL(("snmpd/main", "optind %d, argc %d\n", optind, argc));
++ for (i = optind; i < argc; i++) {
++ char *c, *astring;
++ if ((c = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_PORTS))) {
++ astring = malloc(strlen(c) + 2 + strlen(argv[i]));
++ if (astring == NULL) {
++ fprintf(stderr, "malloc failure processing argv[%d]\n",
++ i);
++ exit(1);
++ }
++ sprintf(astring, "%s,%s", c, argv[i]);
++ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_PORTS, astring);
++ SNMP_FREE(astring);
++ } else {
++ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_PORTS, argv[i]);
++ }
++ }
++ DEBUGMSGTL(("snmpd/main", "port spec: %s\n",
++ netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_PORTS)));
++ }
++
++ /*
++ * we're an agentx subagent?
++ */
++ if (agentx_subagent) {
++ /*
++ * make us a agentx client.
++ */
++ netsnmp_enable_subagent();
++ if (NULL != agentx_socket)
++ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_X_SOCKET,
++ agentx_socket);
++ }
++
++ snmp_disable_log();
++ if (use_syslog)
++ snmp_enable_calllog();
++ else
++ snmp_enable_stderrlog();
++
++ /*
++ * daemonize
++ */
++ if (!dont_fork) {
++ int rc = netsnmp_daemonize(1, !use_syslog);
++ if (rc)
++ exit(-1);
++ }
++
++ /*
++ * initialize tcp/ip if necessary
++ */
++ SOCK_STARTUP;
++
++ /*
++ * initialize the agent library
++ */
++ init_agent("dessertSysifTable");
++
++ /*
++ * init dessertSysifTable mib code
++ */
++ init_dessertSysifTable();
++
++ /*
++ * read dessertSysifTable.conf files.
++ */
++ init_snmp("dessertSysifTable");
++
++ /*
++ * If we're going to be a snmp master agent, initial the ports
++ */
++ if (!agentx_subagent)
++ init_master_agent(); /* open the port to listen on (defaults to udp:161) */
++
++ /*
++ * In case we recevie a request to stop (kill -TERM or kill -INT)
++ */
++ keep_running = 1;
++ signal(SIGTERM, stop_server);
++ signal(SIGINT, stop_server);
++
++ /*
++ * you're main loop here...
++ */
++ while (keep_running) {
++ /*
++ * if you use select(), see snmp_select_info() in snmp_api(3)
++ */
++ /*
++ * --- OR ---
++ */
++ agent_check_and_process(1); /* 0 == don't block */
++ }
++
++ /*
++ * at shutdown time
++ */
++ snmp_shutdown("dessertSysifTable");
++ SOCK_CLEANUP;
++ exit(0);
++}
+Index: libdessert0.86-0.86.14/utlist.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/utlist.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,349 +0,0 @@
+-/*
+-Copyright (c) 2007-2009, Troy D. Hanson
+-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.
+-
+-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 COPYRIGHT OWNER
+-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.
+-*/
+-
+-#ifndef UTLIST_H
+-#define UTLIST_H
+-
+-#define UTLIST_VERSION 1.8
+-
+-/*
+- * This file contains macros to manipulate singly and doubly-linked lists.
+- *
+- * 1. LL_ macros: singly-linked lists.
+- * 2. DL_ macros: doubly-linked lists.
+- * 3. CDL_ macros: circular doubly-linked lists.
+- *
+- * To use singly-linked lists, your structure must have a "next" pointer.
+- * To use doubly-linked lists, your structure must "prev" and "next" pointers.
+- * Either way, the pointer to the head of the list must be initialized to NULL.
+- *
+- * ----------------.EXAMPLE -------------------------
+- * struct item {
+- * int id;
+- * struct item *prev, *next;
+- * }
+- *
+- * struct item *list = NULL:
+- *
+- * int main() {
+- * struct item *item;
+- * ... allocate and populate item ...
+- * DL_APPEND(list, item);
+- * }
+- * --------------------------------------------------
+- *
+- * For doubly-linked lists, the append and delete macros are O(1)
+- * For singly-linked lists, append and delete are O(n) but prepend is O(1)
+- * The sort macro is O(n log(n)) for all types of single/double/circular lists.
+- */
+-
+-/******************************************************************************
+- * The sort macro is an adaptation of Simon Tatham's O(n log(n)) mergesort *
+- * Unwieldy variable names used here to avoid shadowing passed-in variables. *
+- *****************************************************************************/
+-#define LL_SORT(list, cmp) \
+-do { \
+- __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
+- int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+- if (list) { \
+- _ls_insize = 1; \
+- _ls_looping = 1; \
+- while (_ls_looping) { \
+- _ls_p = list; \
+- _ls_oldhead = list; \
+- list = NULL; \
+- _ls_tail = NULL; \
+- _ls_nmerges = 0; \
+- while (_ls_p) { \
+- _ls_nmerges++; \
+- _ls_q = _ls_p; \
+- _ls_psize = 0; \
+- for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+- _ls_psize++; \
+- _ls_q = _ls_q->next; \
+- if (!_ls_q) break; \
+- } \
+- _ls_qsize = _ls_insize; \
+- while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+- if (_ls_psize == 0) { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- } else if (_ls_qsize == 0 || !_ls_q) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- } else if (cmp(_ls_p,_ls_q) <= 0) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- } else { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- } \
+- if (_ls_tail) { \
+- _ls_tail->next = _ls_e; \
+- } else { \
+- list = _ls_e; \
+- } \
+- _ls_tail = _ls_e; \
+- } \
+- _ls_p = _ls_q; \
+- } \
+- _ls_tail->next = NULL; \
+- if (_ls_nmerges <= 1) { \
+- _ls_looping=0; \
+- } \
+- _ls_insize *= 2; \
+- } \
+- } \
+-} while (0)
+-
+-#define DL_SORT(list, cmp) \
+-do { \
+- __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
+- int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+- if (list) { \
+- _ls_insize = 1; \
+- _ls_looping = 1; \
+- while (_ls_looping) { \
+- _ls_p = list; \
+- _ls_oldhead = list; \
+- list = NULL; \
+- _ls_tail = NULL; \
+- _ls_nmerges = 0; \
+- while (_ls_p) { \
+- _ls_nmerges++; \
+- _ls_q = _ls_p; \
+- _ls_psize = 0; \
+- for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+- _ls_psize++; \
+- _ls_q = _ls_q->next; \
+- if (!_ls_q) break; \
+- } \
+- _ls_qsize = _ls_insize; \
+- while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+- if (_ls_psize == 0) { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- } else if (_ls_qsize == 0 || !_ls_q) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- } else if (cmp(_ls_p,_ls_q) <= 0) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- } else { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- } \
+- if (_ls_tail) { \
+- _ls_tail->next = _ls_e; \
+- } else { \
+- list = _ls_e; \
+- } \
+- _ls_e->prev = _ls_tail; \
+- _ls_tail = _ls_e; \
+- } \
+- _ls_p = _ls_q; \
+- } \
+- list->prev = _ls_tail; \
+- _ls_tail->next = NULL; \
+- if (_ls_nmerges <= 1) { \
+- _ls_looping=0; \
+- } \
+- _ls_insize *= 2; \
+- } \
+- } \
+-} while (0)
+-
+-#define CDL_SORT(list, cmp) \
+-do { \
+- __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
+- int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+- if (list) { \
+- _ls_insize = 1; \
+- _ls_looping = 1; \
+- while (_ls_looping) { \
+- _ls_p = list; \
+- _ls_oldhead = list; \
+- list = NULL; \
+- _ls_tail = NULL; \
+- _ls_nmerges = 0; \
+- while (_ls_p) { \
+- _ls_nmerges++; \
+- _ls_q = _ls_p; \
+- _ls_psize = 0; \
+- for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+- _ls_psize++; \
+- _ls_q = ((_ls_q->next == _ls_oldhead) ? NULL : _ls_q->next); \
+- if (!_ls_q) break; \
+- } \
+- _ls_qsize = _ls_insize; \
+- while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+- if (_ls_psize == 0) { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
+- } else if (_ls_qsize == 0 || !_ls_q) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
+- } else if (cmp(_ls_p,_ls_q) <= 0) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
+- } else { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
+- } \
+- if (_ls_tail) { \
+- _ls_tail->next = _ls_e; \
+- } else { \
+- list = _ls_e; \
+- } \
+- _ls_e->prev = _ls_tail; \
+- _ls_tail = _ls_e; \
+- } \
+- _ls_p = _ls_q; \
+- } \
+- list->prev = _ls_tail; \
+- _ls_tail->next = list; \
+- if (_ls_nmerges <= 1) { \
+- _ls_looping=0; \
+- } \
+- _ls_insize *= 2; \
+- } \
+- } \
+-} while (0)
+-
+-/******************************************************************************
+- * singly linked list macros (non-circular) *
+- *****************************************************************************/
+-#define LL_PREPEND(head,add) \
+-do { \
+- (add)->next = head; \
+- head = add; \
+-} while (0)
+-
+-#define LL_APPEND(head,add) \
+-do { \
+- __typeof__(head) _tmp; \
+- (add)->next=NULL; \
+- if (head) { \
+- _tmp = head; \
+- while (_tmp->next) { _tmp = _tmp->next; } \
+- _tmp->next=(add); \
+- } else { \
+- (head)=(add); \
+- } \
+-} while (0)
+-
+-#define LL_DELETE(head,del) \
+-do { \
+- __typeof__(head) _tmp; \
+- if ((head) == (del)) { \
+- (head)=(head)->next; \
+- } else { \
+- _tmp = head; \
+- while (_tmp->next && (_tmp->next != (del))) { \
+- _tmp = _tmp->next; \
+- } \
+- if (_tmp->next) { \
+- _tmp->next = ((del)->next); \
+- } \
+- } \
+-} while (0)
+-
+-#define LL_FOREACH(head,el) \
+- for(el=head;el;el=el->next)
+-
+-/******************************************************************************
+- * doubly linked list macros (non-circular) *
+- *****************************************************************************/
+-#define DL_PREPEND(head,add) \
+-do { \
+- (add)->next = head; \
+- if (head) { \
+- (add)->prev = (head)->prev; \
+- (head)->prev = (add); \
+- } else { \
+- (add)->prev = (add); \
+- } \
+- (head) = (add); \
+-} while (0)
+-
+-#define DL_APPEND(head,add) \
+-do { \
+- if (head) { \
+- (add)->prev = (head)->prev; \
+- (head)->prev->next = (add); \
+- (head)->prev = (add); \
+- (add)->next = NULL; \
+- } else { \
+- (head)=(add); \
+- (head)->prev = (head); \
+- (head)->next = NULL; \
+- } \
+-} while (0);
+-
+-#define DL_DELETE(head,del) \
+-do { \
+- if ((del)->prev == (del)) { \
+- (head)=NULL; \
+- } else if ((del)==(head)) { \
+- (del)->next->prev = (del)->prev; \
+- (head) = (del)->next; \
+- } else { \
+- (del)->prev->next = (del)->next; \
+- if ((del)->next) { \
+- (del)->next->prev = (del)->prev; \
+- } else { \
+- (head)->prev = (del)->prev; \
+- } \
+- } \
+-} while (0);
+-
+-
+-#define DL_FOREACH(head,el) \
+- for(el=head;el;el=el->next)
+-
+-/******************************************************************************
+- * circular doubly linked list macros *
+- *****************************************************************************/
+-#define CDL_PREPEND(head,add) \
+-do { \
+- if (head) { \
+- (add)->prev = (head)->prev; \
+- (add)->next = (head); \
+- (head)->prev = (add); \
+- (add)->prev->next = (add); \
+- } else { \
+- (add)->prev = (add); \
+- (add)->next = (add); \
+- } \
+-(head)=(add); \
+-} while (0)
+-
+-#define CDL_DELETE(head,del) \
+-do { \
+- if ( ((head)==(del)) && ((head)->next == (head))) { \
+- (head) = 0L; \
+- } else { \
+- (del)->next->prev = (del)->prev; \
+- (del)->prev->next = (del)->next; \
+- if ((del) == (head)) (head)=(del)->next; \
+- } \
+-} while (0);
+-
+-#define CDL_FOREACH(head,el) \
+- for(el=head;el;el= (el->next==head ? 0L : el->next))
+-
+-
+-#endif /* UTLIST_H */
+-
diff --git a/recipes/libdessert/libdessert_0.86.14.bb b/recipes/libdessert/libdessert_0.86.14.bb
new file mode 100644
index 0000000000..97dfe96323
--- /dev/null
+++ b/recipes/libdessert/libdessert_0.86.14.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "DES-SERT (DES Simple and Extensible Routing-Framework for Testbeds)"
+HOMEPAGE = "http://www.des-testbed.net/DES-SERT"
+SECTION = "devel"
+LICENSE = "GPL"
+PR = "r2"
+
+DEPENDS = "net-snmp libpcap libcli"
+
+SRC_URI = "http://www.des-testbed.net/sites/default/files/${PN}${PV}.tar.gz \
+ file://0001-big-fat-autotools-patch.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/${PN}0.86-${PV}"
+
+inherit autotools
diff --git a/recipes/libpng/libpng-native_1.2.40.bb b/recipes/libpng/libpng-native_1.2.40.bb
new file mode 100644
index 0000000000..52c92e9954
--- /dev/null
+++ b/recipes/libpng/libpng-native_1.2.40.bb
@@ -0,0 +1,4 @@
+require libpng_${PV}.bb
+require libpng-native.inc
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libpng-${PV}"
diff --git a/recipes/libpng/libpng_1.2.40.bb b/recipes/libpng/libpng_1.2.40.bb
new file mode 100644
index 0000000000..3ed02a7f17
--- /dev/null
+++ b/recipes/libpng/libpng_1.2.40.bb
@@ -0,0 +1,14 @@
+require libpng.inc
+
+PR = "r0"
+
+SRC_URI += "file://makefile_fix.patch;patch=1"
+
+do_stage() {
+ cp libpng.pc libpng12.pc
+ install -m 644 png.h ${STAGING_INCDIR}/png.h
+ install -m 644 pngconf.h ${STAGING_INCDIR}/pngconf.h
+ oe_libinstall -so libpng ${STAGING_LIBDIR}/
+ oe_libinstall -so libpng12 ${STAGING_LIBDIR}/
+ ln -sf libpng12.so ${STAGING_LIBDIR}/libpng.so
+}
diff --git a/recipes/librsvg/librsvg-native_2.26.0.bb b/recipes/librsvg/librsvg-native_2.26.0.bb
new file mode 100644
index 0000000000..0a0a274469
--- /dev/null
+++ b/recipes/librsvg/librsvg-native_2.26.0.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Library for rendering SVG files"
+SECTION = "x11/utils"
+DEPENDS = "cairo-native pango-native gdk-pixbuf-csource-native"
+LICENSE = "LGPL"
+
+inherit native autotools_stage
+
+SRC_URI = "${GNOME_MIRROR}/librsvg/2.26/librsvg-${PV}.tar.bz2"
+
+EXTRA_OECONF = "--disable-mozilla-plugin"
diff --git a/recipes/libsdl/libsdl-mixer/fix-flac-madness.diff b/recipes/libsdl/libsdl-mixer/fix-flac-madness.diff
new file mode 100644
index 0000000000..48fe88ef4a
--- /dev/null
+++ b/recipes/libsdl/libsdl-mixer/fix-flac-madness.diff
@@ -0,0 +1,28 @@
+--- /tmp/configure.in 2009-12-02 16:18:33.000000000 +0100
++++ SDL_mixer-1.2.11/configure.in 2009-12-02 16:20:02.000000000 +0100
+@@ -413,24 +413,7 @@
+ [], [enable_music_flac_shared=yes])
+ if test x$enable_music_flac = xyes; then
+ AC_CHECK_HEADER([FLAC/export.h], [have_flac_export=yes])
+- if test x$have_flac_export = xyes; then
+- LIBS_SAVED="$LIBS"
+- LIBS="-lFLAC"
+- AC_MSG_CHECKING([for libflac so-name version >= $libflac_ver])
+- AC_TRY_RUN([
+-#include "FLAC/export.h"
+-#include "stdio.h"
+-int main( int argc, char *argv[] ) {
+-#if defined(FLAC_API_VERSION_CURRENT) && (FLAC_API_VERSION_CURRENT >= $libflac_ver)
+- return 0;
+-#else
+- return 1;
+-#endif
+-}
+-], have_flac_ver=yes, have_flac_ver=no)
+- LIBS="$LIBS_SAVED"
+- AC_MSG_RESULT($have_flac_ver)
+- fi
++ have_flac_ver=yes
+
+ if test x$have_flac_ver = xyes; then
+ AC_CHECK_HEADER([FLAC/stream_decoder.h], [have_flac_hdr=yes])
diff --git a/recipes/libsdl/libsdl-mixer_1.2.11.bb b/recipes/libsdl/libsdl-mixer_1.2.11.bb
index 5ecd2944a2..ee0ba454ba 100644
--- a/recipes/libsdl/libsdl-mixer_1.2.11.bb
+++ b/recipes/libsdl/libsdl-mixer_1.2.11.bb
@@ -1,10 +1,14 @@
DESCRIPTION = "Simple DirectMedia Layer mixer library."
SECTION = "libs"
PRIORITY = "optional"
-DEPENDS = "virtual/libsdl libmikmod libvorbis"
+DEPENDS = "virtual/libsdl flac libmikmod libvorbis"
LICENSE = "LGPL"
-SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-${PV}.tar.gz"
+PR = "r1"
+
+SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-${PV}.tar.gz \
+ file://fix-flac-madness.diff;patch=1"
+
S = "${WORKDIR}/SDL_mixer-${PV}"
export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
diff --git a/recipes/libsdl/libsdl-native_1.2.14.bb b/recipes/libsdl/libsdl-native_1.2.14.bb
new file mode 100644
index 0000000000..35a73a6d18
--- /dev/null
+++ b/recipes/libsdl/libsdl-native_1.2.14.bb
@@ -0,0 +1,37 @@
+DESCRIPTION = "Simple DirectMedia Layer - native Edition"
+HOMEPAGE = "http://www.libsdl.org"
+SECTION = "libs"
+LICENSE = "LGPL"
+PR = "r0"
+
+SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \
+"
+
+S = "${WORKDIR}/SDL-${PV}"
+
+inherit autotools binconfig pkgconfig native
+
+PARALLEL_MAKE = ""
+
+EXTRA_OECONF = "--disable-debug --disable-cdrom --enable-threads --enable-timers --enable-endian \
+ --enable-file --disable-oss --disable-alsa --disable-esd --disable-arts \
+ --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \
+ --disable-mintaudio --disable-nasm --disable-video-x11 --disable-video-dga \
+ --disable-video-fbcon --disable-video-directfb --disable-video-ps2gs \
+ --disable-video-xbios --disable-video-gem --disable-video-dummy \
+ --disable-video-opengl --enable-input-events --enable-pthreads \
+ --disable-video-picogui --disable-video-qtopia --enable-dlopen"
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+ cd ${S}
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage() {
+ autotools_stage_all
+ install -m 0644 build/libSDLmain.a ${STAGING_LIBDIR}
+}
diff --git a/recipes/libsdl/libsdl-x11_1.2.14.bb b/recipes/libsdl/libsdl-x11_1.2.14.bb
new file mode 100644
index 0000000000..621f7b47c1
--- /dev/null
+++ b/recipes/libsdl/libsdl-x11_1.2.14.bb
@@ -0,0 +1,51 @@
+# Do not use the include in 1.2.14 as it has a lot of unneeded munging that applies to old versions.
+#require libsdl.inc
+
+DESCRIPTION = "Simple DirectMedia Layer (X11 and Framebuffer support)"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "alsa-lib mesa virtual/libx11 libxext tslib"
+DEPENDS_avr32 = "alsa-lib virtual/libx11 libxext tslib"
+PROVIDES = "virtual/libsdl"
+PR = "r1"
+
+SRC_URI = " \
+ http://www.libsdl.org/release/SDL-${PV}.tar.gz \
+"
+
+S = "${WORKDIR}/SDL-${PV}"
+
+inherit autotools binconfig pkgconfig
+
+EXTRA_OECONF = " \
+ --disable-static --disable-debug --enable-cdrom --enable-threads --enable-timers --enable-endian \
+ --enable-file --enable-oss --enable-alsa --disable-esd --disable-arts \
+ --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \
+ --disable-mintaudio --disable-nasm --enable-video-x11 --disable-video-dga \
+ --enable-video-fbcon --disable-video-directfb --disable-video-ps2gs \
+ --disable-video-xbios --disable-video-gem --disable-video-dummy \
+ --enable-video-opengl --enable-input-events --enable-pthreads \
+ --disable-video-picogui --disable-video-qtopia --enable-dlopen \
+ --enable-input-tslib \
+"
+
+do_configure() {
+ oe_runconf
+}
+
+do_configure_append () {
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage() {
+ autotools_stage_all
+ rm ${STAGING_LIBDIR}/libSDL.la
+}
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}/*config"
diff --git a/recipes/linphone/files/b64_assert.patch b/recipes/linphone/files/b64_assert.patch
new file mode 100644
index 0000000000..1e89610b8a
--- /dev/null
+++ b/recipes/linphone/files/b64_assert.patch
@@ -0,0 +1,11 @@
+--- linphone-3.1.0/oRTP/src/b64.c.orig 2009-04-13 23:04:35.000000000 -0600
++++ linphone-3.1.0/oRTP/src/b64.c 2009-04-13 23:05:00.000000000 -0600
+@@ -205,7 +205,7 @@
+ /* characters[3] is the right-most 6 bits of src[2] */
+ characters[3] = (char)(src[2] & 0x3f);
+
+-#ifndef __WATCOMC__
++#ifdef XXXX
+ assert(characters[0] >= 0 && characters[0] < 64);
+ assert(characters[1] >= 0 && characters[1] < 64);
+ assert(characters[2] >= 0 && characters[2] < 64);
diff --git a/recipes/linux/linux-2.6.24/hipox/defconfig b/recipes/linux/linux-2.6.24/hipox/defconfig
index 94a50dcd78..8778456c56 100644
--- a/recipes/linux/linux-2.6.24/hipox/defconfig
+++ b/recipes/linux/linux-2.6.24/hipox/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24.4
-# Tue Dec 1 12:22:00 2009
+# Mon Dec 7 15:30:43 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -1173,9 +1173,9 @@ CONFIG_ZISOFS=y
#
# DOS/FAT/NT Filesystems
#
-CONFIG_FAT_FS=m
+CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
+CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=m
@@ -1273,10 +1273,10 @@ CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_850=y
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
@@ -1297,7 +1297,7 @@ CONFIG_NLS_CODEPAGE_850=m
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
@@ -1307,7 +1307,7 @@ CONFIG_NLS_ISO8859_1=m
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
-CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_ISO8859_15=y
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
diff --git a/recipes/linux/linux-2.6.32/ep93xx/edb9301-fix-machine-id.patch b/recipes/linux/linux-2.6.32/ep93xx/edb9301-fix-machine-id.patch
new file mode 100644
index 0000000000..7fc04bd321
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/edb9301-fix-machine-id.patch
@@ -0,0 +1,19 @@
+---
+ arch/arm/tools/mach-types | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.31.orig/arch/arm/tools/mach-types
++++ linux-2.6.31/arch/arm/tools/mach-types
+@@ -473,11 +473,11 @@ hawk MACH_HAWK HAWK 456
+ ccat91sbc001 MACH_CCAT91SBC001 CCAT91SBC001 457
+ expresso MACH_EXPRESSO EXPRESSO 458
+ h4000 MACH_H4000 H4000 459
+ dino MACH_DINO DINO 460
+ ml675k MACH_ML675K ML675K 461
+-edb9301 MACH_EDB9301 EDB9301 462
++edb9301 MACH_EDB9301 EDB9301 454
+ edb9315 MACH_EDB9315 EDB9315 463
+ reciva_tt MACH_RECIVA_TT RECIVA_TT 464
+ cstcb01 MACH_CSTCB01 CSTCB01 465
+ cstcb1 MACH_CSTCB1 CSTCB1 466
+ shadwell MACH_SHADWELL SHADWELL 467
diff --git a/recipes/linux/linux-2.6.32/ep93xx/ep93xx-cpuinfo.patch b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-cpuinfo.patch
new file mode 100644
index 0000000000..5409bf72db
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-cpuinfo.patch
@@ -0,0 +1,43 @@
+---
+ arch/arm/kernel/setup.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- linux-2.6.32.orig/arch/arm/kernel/setup.c
++++ linux-2.6.32/arch/arm/kernel/setup.c
+@@ -41,10 +41,15 @@
+ #include <asm/mach/irq.h>
+ #include <asm/mach/time.h>
+ #include <asm/traps.h>
+ #include <asm/unwind.h>
+
++#if defined(CONFIG_ARCH_EP93XX)
++#include <mach/io.h>
++#include <mach/ep93xx-regs.h>
++#endif
++
+ #include "compat.h"
+ #include "atags.h"
+ #include "tcm.h"
+
+ #ifndef MEM_SIZE
+@@ -858,13 +863,20 @@ static int c_show(struct seq_file *m, vo
+ seq_printf(m, "CPU revision\t: %d\n", read_cpuid_id() & 15);
+
+ seq_puts(m, "\n");
+
+ seq_printf(m, "Hardware\t: %s\n", machine_name);
++#if defined(CONFIG_ARCH_EP93XX)
++ seq_printf(m, "Revision\t: %04x\n",
++ *((unsigned int *)EP93XX_SYSCON_CHIP_ID) >> 28);
++ seq_printf(m, "Serial\t\t: %016x\n",
++ *((unsigned int *)EP93XX_SECURITY_UNIQID));
++#else
+ seq_printf(m, "Revision\t: %04x\n", system_rev);
+ seq_printf(m, "Serial\t\t: %08x%08x\n",
+ system_serial_high, system_serial_low);
++#endif
+
+ return 0;
+ }
+
+ static void *c_start(struct seq_file *m, loff_t *pos)
diff --git a/recipes/linux/linux-2.6.32/ep93xx/ep93xx-dma.patch b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-dma.patch
new file mode 100644
index 0000000000..c8e6c0f8a3
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-dma.patch
@@ -0,0 +1,3641 @@
+---
+ arch/arm/mach-ep93xx/Makefile | 2
+ arch/arm/mach-ep93xx/dma_ep93xx.c | 2940 ++++++++++++++++++++++++++++++++++++++
+ arch/arm/mach-ep93xx/dma_ep93xx.h | 676 ++++++++
+ 3 files changed, 3617 insertions(+), 1 deletion(-)
+
+--- linux-2.6.31.orig/arch/arm/mach-ep93xx/Makefile
++++ linux-2.6.31/arch/arm/mach-ep93xx/Makefile
+@@ -1,9 +1,9 @@
+ #
+ # Makefile for the linux kernel.
+ #
+-obj-y := core.o clock.o dma-m2p.o gpio.o
++obj-y := core.o clock.o dma-m2p.o gpio.o dma_ep93xx.o
+ obj-m :=
+ obj-n :=
+ obj- :=
+
+ obj-$(CONFIG_MACH_ADSSPHERE) += adssphere.o
+--- /dev/null
++++ linux-2.6.31/arch/arm/mach-ep93xx/dma_ep93xx.c
+@@ -0,0 +1,2940 @@
++/******************************************************************************
++ * arch/arm/mach-ep9312/dma_ep93xx.c
++ *
++ * Support functions for the ep93xx internal DMA channels.
++ * (see also Documentation/arm/ep93xx/dma.txt)
++ *
++ * Copyright (C) 2003 Cirrus Logic
++ *
++ * A large portion of this file is based on the dma api implemented by
++ * Nicolas Pitre, dma-sa1100.c, copyrighted 2000.
++ *
++ *
++ * 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 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, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ ****************************************************************************/
++#include <linux/autoconf.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/spinlock.h>
++#include <linux/slab.h>
++#include <linux/errno.h>
++#include <linux/delay.h>
++#include <linux/interrupt.h>
++
++#include <asm/system.h>
++#include <asm/irq.h>
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/dma.h>
++#include <asm/mach/dma.h>
++#include "dma_ep93xx.h"
++
++/*****************************************************************************
++ *
++ * Debugging macros
++ *
++ ****************************************************************************/
++#undef DEBUG
++//#define DEBUG 1
++#ifdef DEBUG
++#define DPRINTK( fmt, arg... ) printk( fmt, ##arg )
++#else
++#define DPRINTK( fmt, arg... )
++#endif
++
++/*****************************************************************************
++ *
++ * static global variables
++ *
++ ****************************************************************************/
++ep93xx_dma_t dma_chan[MAX_EP93XX_DMA_CHANNELS];
++
++/*
++ * lock used to protect the list of dma channels while searching for a free
++ * channel during dma_request.
++ */
++//static spinlock_t dma_list_lock;
++static spinlock_t dma_list_lock = SPIN_LOCK_UNLOCKED;
++
++/*****************************************************************************
++ *
++ * Internal DMA processing functions.
++ *
++ ****************************************************************************/
++/*****************************************************************************
++ *
++ * get_dma_channel_from_handle()
++ *
++ * If Handle is valid, returns the DMA channel # (0 to 9 for channels 1-10)
++ * If Handle is not valid, returns -1.
++ *
++ ****************************************************************************/
++static int
++dma_get_channel_from_handle(int handle)
++{
++ int channel;
++
++ /*
++ * Get the DMA channel # from the handle.
++ */
++ channel = ((int)handle & DMA_HANDLE_SPECIFIER_MASK) >> 28;
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (dma_chan[channel].last_valid_handle != (int)handle) {
++ DPRINTK("DMA ERROR - invalid handle 0x%x \n", handle);
++ return(-1);
++ }
++
++ /*
++ * See if this instance is still open
++ */
++ if (!dma_chan[channel].ref_count )
++ return(-1);
++
++ return(channel);
++}
++
++static void dma_m2m_transfer_done(ep93xx_dma_t *dma)
++{
++ unsigned int uiCONTROL;
++ unsigned int M2M_reg_base = dma->reg_base;
++ unsigned int read_back;
++
++ DPRINTK("1 ");
++
++ outl( 0, M2M_reg_base+M2M_OFFSET_INTERRUPT );
++
++ if (dma->total_buffers) {
++ /*
++ * The current_buffer has already been tranfered, so add the
++ * byte count to the total_bytes field.
++ */
++ dma->total_bytes = dma->total_bytes +
++ dma->buffer_queue[dma->current_buffer].size;
++
++ /*
++ * Mark the current_buffer as used.
++ */
++ dma->buffer_queue[dma->current_buffer].used = TRUE;
++
++ /*
++ * Increment the used buffer counter
++ */
++ dma->used_buffers++;
++
++ DPRINTK("#%d", dma->current_buffer);
++
++ /*
++ * Increment the current_buffer
++ */
++ dma->current_buffer = (dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS;
++
++ /*
++ * check if there's a new buffer to transfer.
++ */
++ if (dma->new_buffers && dma->xfer_enable) {
++ /*
++ * We have a new buffer to transfer so program in the
++ * buffer values. Since a STALL interrupt was
++ * triggered, we program the buffer descriptor 0
++ *
++ * Set the SAR_BASE/DAR_BASE/BCR registers with values
++ * from the next buffer in the queue.
++ */
++ outl( dma->buffer_queue[dma->current_buffer].source,
++ M2M_reg_base + M2M_OFFSET_SAR_BASE0 );
++
++ outl( dma->buffer_queue[dma->current_buffer].dest,
++ M2M_reg_base + M2M_OFFSET_DAR_BASE0 );
++
++ outl( dma->buffer_queue[dma->current_buffer].size,
++ M2M_reg_base + M2M_OFFSET_BCR0 );
++
++ DPRINTK("SAR_BASE0 - 0x%x\n", dma->buffer_queue[dma->current_buffer].source);
++ DPRINTK("DAR_BASE0 - 0x%x\n", dma->buffer_queue[dma->current_buffer].dest);
++ DPRINTK("BCR0 - 0x%x\n", dma->buffer_queue[dma->current_buffer].size);
++
++ /*
++ * Decrement the new buffer counter
++ */
++ dma->new_buffers--;
++
++ /*
++ * If there's a second new buffer, we program the
++ * second buffer descriptor.
++ */
++ if (dma->new_buffers) {
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].source,
++ M2M_reg_base+M2M_OFFSET_SAR_BASE1 );
++
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].dest,
++ M2M_reg_base+M2M_OFFSET_DAR_BASE1 );
++
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].size,
++ M2M_reg_base+M2M_OFFSET_BCR1 );
++
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2M_NFBINTEN;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ dma->new_buffers--;
++ }
++ } else {
++ DPRINTK("2 \n");
++ /*
++ * There's a chance we setup both buffer descriptors,
++ * but didn't service the NFB quickly enough, causing
++ * the channel to transfer both buffers, then enter the
++ * stall state. So, we need to be able to process the
++ * second buffer.
++ */
++ if ((dma->used_buffers + dma->new_buffers) < dma->total_buffers)
++ {
++ DPRINTK("3 ");
++
++ /*
++ * The current_buffer has already been
++ * tranferred, so add the byte count to the
++ * total_bytes field.
++ */
++ dma->total_bytes = dma->total_bytes +
++ dma->buffer_queue[dma->current_buffer].size;
++
++ /*
++ * Mark the current_buffer as used.
++ */
++ dma->buffer_queue[dma->current_buffer].used = TRUE;
++
++ /*
++ * Increment the used buffer counter
++ */
++ dma->used_buffers++;
++
++ DPRINTK("#%d", dma->current_buffer);
++
++ /*
++ * Increment the current buffer pointer.
++ */
++ dma->current_buffer = (dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS;
++
++ }
++
++ /*
++ * No new buffers to transfer, so disable the channel.
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_ENABLE;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * Indicate that this channel is in the pause by
++ * starvation state by setting the pause bit to true.
++ */
++ dma->pause = TRUE;
++ }
++ } else {
++ /*
++ * No buffers to transfer, or old buffers to mark as used,
++ * so disable the channel
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_ENABLE;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * Must read the control register back after a write.
++ */
++ read_back = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++
++ /*
++ * Indicate that this channel is in the pause by
++ * starvation state by setting the pause bit to true.
++ */
++ dma->pause = TRUE;
++ }
++}
++
++static void dma_m2m_next_frame_buffer(ep93xx_dma_t *dma)
++{
++ int loop;
++ unsigned int uiCONTROL;
++ unsigned int M2M_reg_base = dma->reg_base;
++
++ DPRINTK("5 ");
++
++ if (dma->total_buffers) {
++ DPRINTK("6 ");
++ /*
++ * The iCurrentBuffer has already been transfered. so add the
++ * byte count from the current buffer to the total byte count.
++ */
++ dma->total_bytes = dma->total_bytes +
++ dma->buffer_queue[dma->current_buffer].size;
++
++ /*
++ * Mark the Current Buffer as used.
++ */
++ dma->buffer_queue[dma->current_buffer].used = TRUE;
++
++ /*
++ * Increment the used buffer counter
++ */
++ dma->used_buffers++;
++
++ DPRINTK("#%d", dma->current_buffer);
++
++ if ((dma->buffer_queue[
++ (dma->current_buffer + 1) % MAX_EP93XX_DMA_BUFFERS].last) ||
++ (dma->new_buffers == 0) || (dma->xfer_enable == FALSE)) {
++ DPRINTK("7 ");
++
++ /*
++ * This is the last Buffer in this transaction, so
++ * disable the NFB interrupt. We shouldn't get an NFB
++ * int when the FSM moves to the ON state where it
++ * would typically get the NFB int indicating a new
++ * buffer can be programmed. Instead, once in the ON
++ * state, the DMA will just proceed to complete the
++ * transfer of the current buffer, move the FSB
++ * directly to the STALL state where a STALL interrupt
++ * will be generated.
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_NFBINTEN ;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * The current buffer has been transferred, so
++ * increment the current buffer counter to reflect
++ * this.
++ */
++ dma->current_buffer = (dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS;
++
++ DPRINTK("End of NFB handling. \n");
++ DPRINTK("CONTROL - 0x%x \n",
++ inl(M2M_reg_base+M2M_OFFSET_CONTROL) );
++ DPRINTK("STATUS - 0x%x \n",
++ inl(M2M_reg_base+M2M_OFFSET_STATUS) );
++ DPRINTK("SAR_BASE0 - 0x%x \n",
++ inl(M2M_reg_base+M2M_OFFSET_SAR_BASE0) );
++ DPRINTK("SAR_CUR0 - 0x%x \n",
++ inl(M2M_reg_base+M2M_OFFSET_SAR_CURRENT0) );
++ DPRINTK("DAR_BASE0 - 0x%x \n",
++ inl(M2M_reg_base+M2M_OFFSET_DAR_BASE0) );
++ DPRINTK("DAR_CUR0 - 0x%x \n",
++ inl(M2M_reg_base+M2M_OFFSET_DAR_CURRENT0) );
++
++ DPRINTK("Buffer buf_id source size last used \n");
++ for (loop = 0; loop < 32; loop ++)
++ DPRINTK("%d 0x%x 0x%x 0x%x %d %d \n",
++ loop, dma->buffer_queue[loop].buf_id,
++ dma->buffer_queue[loop].source,
++ dma->buffer_queue[loop].size,
++ dma->buffer_queue[loop].last,
++ dma->buffer_queue[loop].used);
++ DPRINTK("pause 0x%x 0x%x 0x%x %d %d \n",
++ dma->pause_buf.buf_id, dma->pause_buf.source,
++ dma->pause_buf.size, dma->pause_buf.last,
++ dma->pause_buf.used);
++
++ DPRINTK("Pause - %d \n", dma->pause);
++ DPRINTK("xfer_enable - %d \n", dma->xfer_enable);
++ DPRINTK("total bytes - 0x%x \n", dma->total_bytes);
++ DPRINTK("total buffer - %d \n", dma->total_buffers);
++ DPRINTK("new buffers - %d \n", dma->new_buffers);
++ DPRINTK("current buffer - %d \n", dma->current_buffer);
++ DPRINTK("last buffer - %d \n", dma->last_buffer);
++ DPRINTK("used buffers - %d \n", dma->used_buffers);
++ DPRINTK("callback addr - 0x%p \n", dma->callback);
++
++ } else if (dma->new_buffers) {
++ DPRINTK("8 ");
++ /*
++ * We have a new buffer, so increment the current
++ * buffer to point to the next buffer, which is already
++ * programmed into the DMA. Next time around, it'll be
++ * pointing to the current buffer.
++ */
++ dma->current_buffer = (dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS;
++
++ /*
++ * We know we have a new buffer to program as the next
++ * buffer, so check which set of SAR_BASE/DAR_BASE/BCR
++ * registers to program.
++ */
++ if ( inl(M2M_reg_base+M2M_OFFSET_STATUS) & STATUS_M2M_NB ) {
++ /*
++ * Set the SAR_BASE1/DAR_BASE1/BCR1 registers
++ * with values from the next buffer in the
++ * queue.
++ */
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].source,
++ M2M_reg_base+M2M_OFFSET_SAR_BASE1 );
++
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].dest,
++ M2M_reg_base+M2M_OFFSET_DAR_BASE1 );
++
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].size,
++ M2M_reg_base+M2M_OFFSET_BCR1 );
++ } else {
++ /*
++ * Set the SAR_BASE0/DAR_BASE0/BCR0 registers
++ * with values from the next buffer in the
++ * queue.
++ */
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].source,
++ M2M_reg_base+M2M_OFFSET_SAR_BASE0 );
++
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].dest,
++ M2M_reg_base+M2M_OFFSET_DAR_BASE0 );
++
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].size,
++ M2M_reg_base+M2M_OFFSET_BCR0 );
++ }
++
++ /*
++ * Decrement the new buffers counter
++ */
++ dma->new_buffers--;
++ }
++ } else {
++ /*
++ * Total number of buffers is 0 - really we should never get
++ * here, but just in case.
++ */
++ DPRINTK("9 \n");
++
++ /*
++ * No new buffers to transfer, so Disable the channel
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_ENABLE;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * Indicate that the channel is paused by starvation.
++ */
++ dma->pause = 1;
++ }
++}
++
++/*****************************************************************************
++ *
++ * dma_m2m_irq_handler
++ *
++ ****************************************************************************/
++static irqreturn_t
++dma_m2m_irq_handler(int irq, void *dev_id)
++{
++ ep93xx_dma_t *dma = (ep93xx_dma_t *)dev_id;
++ unsigned int M2M_reg_base = dma->reg_base;
++ ep93xx_dma_dev_t dma_int = UNDEF_INT;
++ int status;
++
++// printk("+m2m irq=%d\n", irq);
++
++ /*
++ * Determine what kind of dma interrupt this is.
++ */
++ status = inl(M2M_reg_base + M2M_OFFSET_INTERRUPT);
++ if ( status & INTERRUPT_M2M_DONEINT )
++ dma_int = DONE; // we're done with a requested dma
++ else if ( status & INTERRUPT_M2M_NFBINT )
++ dma_int = NFB; // we're done with one dma buffer
++
++ DPRINTK("IRQ: b=%#x st=%#x\n", (int)dma->current_buffer, dma_int);
++
++ switch (dma_int) {
++ /*
++ * Next Frame Buffer Interrupt. If there's a new buffer program it
++ * Check if this is the last buffer in the transfer,
++ * and if it is, disable the NFB int to prevent being
++ * interrupted for another buffer when we know there won't be
++ * another.
++ */
++ case NFB:
++ dma_m2m_next_frame_buffer(dma);
++ break;
++ /*
++ * Done interrupt generated, indicating that the transfer is complete.
++ */
++ case DONE:
++ dma_m2m_transfer_done(dma);
++ break;
++
++ default:
++ break;
++ }
++
++ if ((dma_int != UNDEF_INT) && dma->callback)
++ dma->callback(dma_int, dma->device, dma->user_data);
++
++ return IRQ_HANDLED;
++}
++
++/*****************************************************************************
++ *
++ * dma_m2p_irq_handler
++ *
++ *
++ *
++ ****************************************************************************/
++static irqreturn_t
++dma_m2p_irq_handler(int irq, void *dev_id)
++{
++ ep93xx_dma_t *dma = (ep93xx_dma_t *) dev_id;
++ unsigned int M2P_reg_base = dma->reg_base;
++ unsigned int read_back;
++ ep93xx_dma_dev_t dma_int = UNDEF_INT;
++ unsigned int loop, uiCONTROL, uiINTERRUPT;
++
++ /*
++ * Determine what kind of dma interrupt this is.
++ */
++ if ( inl(M2P_reg_base+M2P_OFFSET_INTERRUPT) & INTERRUPT_M2P_STALLINT )
++ dma_int = STALL;
++ else if ( inl(M2P_reg_base+M2P_OFFSET_INTERRUPT) & INTERRUPT_M2P_NFBINT )
++ dma_int = NFB;
++ else if ( inl(M2P_reg_base+M2P_OFFSET_INTERRUPT) & INTERRUPT_M2P_CHERRORINT )
++ dma_int = CHERROR;
++
++ /*
++ * Stall Interrupt: The Channel is stalled, meaning nothing is
++ * programmed to transfer right now. So, we're back to the
++ * beginnning. If there's a buffer to transfer, program it into
++ * max and base 0 registers.
++ */
++ if (dma_int == STALL) {
++ DPRINTK("1 ");
++
++ if (dma->total_buffers) {
++ /*
++ * The current_buffer has already been tranfered, so
++ * add the byte count to the total_bytes field.
++ */
++ dma->total_bytes = dma->total_bytes +
++ dma->buffer_queue[dma->current_buffer].size;
++
++ /*
++ * Mark the current_buffer as used.
++ */
++ dma->buffer_queue[dma->current_buffer].used = TRUE;
++
++ /*
++ * Increment the used buffer counter
++ */
++ dma->used_buffers++;
++
++ DPRINTK("#%d", dma->current_buffer);
++
++ /*
++ * Increment the current_buffer
++ */
++ dma->current_buffer = (dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS;
++
++ /*
++ * check if there's a new buffer to transfer.
++ */
++ if (dma->new_buffers && dma->xfer_enable) {
++ /*
++ * We have a new buffer to transfer so program
++ * in the buffer values. Since a STALL
++ * interrupt was triggered, we program the
++ * base0 and maxcnt0
++ *
++ * Set the MAXCNT0 register with the buffer
++ * size
++ */
++ outl( dma->buffer_queue[dma->current_buffer].size,
++ M2P_reg_base+M2P_OFFSET_MAXCNT0 );
++
++ /*
++ * Set the BASE0 register with the buffer base
++ * address
++ */
++ outl( dma->buffer_queue[dma->current_buffer].source,
++ M2P_reg_base+M2P_OFFSET_BASE0 );
++
++ /*
++ * Decrement the new buffer counter
++ */
++ dma->new_buffers--;
++
++ if (dma->new_buffers) {
++ DPRINTK("A ");
++ /*
++ * Set the MAXCNT1 register with the
++ * buffer size
++ */
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].size,
++ M2P_reg_base+M2P_OFFSET_MAXCNT1 );
++
++ /*
++ * Set the BASE1 register with the
++ * buffer base address
++ */
++ outl( dma->buffer_queue[dma->current_buffer + 1 %
++ MAX_EP93XX_DMA_BUFFERS].source,
++ M2P_reg_base+M2P_OFFSET_BASE1 );
++
++ /*
++ * Decrement the new buffer counter
++ */
++ dma->new_buffers--;
++
++ /*
++ * Enable the NFB Interrupt.
++ */
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2P_NFBINTEN;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++ }
++ } else {
++ /*
++ * No new buffers.
++ */
++ DPRINTK("2 \n");
++
++ /*
++ * There's a chance we setup both buffer descriptors, but
++ * didn't service the NFB quickly enough, causing the channel
++ * to transfer both buffers, then enter the stall state.
++ * So, we need to be able to process the second buffer.
++ */
++ if ((dma->used_buffers + dma->new_buffers) < dma->total_buffers) {
++ DPRINTK("3 ");
++
++ /*
++ * The current_buffer has already been tranfered, so add the
++ * byte count to the total_bytes field.
++ */
++ dma->total_bytes = dma->total_bytes +
++ dma->buffer_queue[dma->current_buffer].size;
++
++ /*
++ * Mark the current_buffer as used.
++ */
++ dma->buffer_queue[dma->current_buffer].used = TRUE;
++
++ /*
++ * Increment the used buffer counter
++ */
++ dma->used_buffers++;
++
++ DPRINTK("#%d", dma->current_buffer);
++
++ /*
++ * Increment the current buffer pointer.
++ */
++ dma->current_buffer = (dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS;
++
++ }
++
++ /*
++ * No new buffers to transfer, so disable the channel.
++ */
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2P_ENABLE;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++
++ /*
++ * Indicate that this channel is in the pause by starvation
++ * state by setting the pause bit to true.
++ */
++ dma->pause = TRUE;
++
++ DPRINTK("STATUS - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_STATUS) );
++ DPRINTK("CONTROL - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CONTROL) );
++ DPRINTK("REMAIN - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_REMAIN) );
++ DPRINTK("PPALLOC - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_PPALLOC) );
++ DPRINTK("BASE0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_BASE0) );
++ DPRINTK("MAXCNT0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_MAXCNT0) );
++ DPRINTK("CURRENT0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT0) );
++ DPRINTK("BASE1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_BASE1) );
++ DPRINTK("MAXCNT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_MAXCNT1) );
++ DPRINTK("CURRENT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT1) );
++
++ DPRINTK("Buffer buf_id source size last used \n");
++ for (loop = 0; loop < 32; loop ++)
++ DPRINTK("%d 0x%x 0x%x 0x%x %d %d \n",
++ loop, dma->buffer_queue[loop].buf_id, dma->buffer_queue[loop].source,
++ dma->buffer_queue[loop].size,
++ dma->buffer_queue[loop].last, dma->buffer_queue[loop].used);
++ DPRINTK("pause 0x%x 0x%x 0x%x %d %d \n",
++ dma->pause_buf.buf_id, dma->pause_buf.source, dma->pause_buf.size,
++ dma->pause_buf.last, dma->pause_buf.used);
++
++ DPRINTK("Pause - %d \n", dma->pause);
++ DPRINTK("xfer_enable - %d \n", dma->xfer_enable);
++ DPRINTK("total bytes - 0x%x \n", dma->total_bytes);
++ DPRINTK("total buffer - %d \n", dma->total_buffers);
++ DPRINTK("new buffers - %d \n", dma->new_buffers);
++ DPRINTK("current buffer - %d \n", dma->current_buffer);
++ DPRINTK("last buffer - %d \n", dma->last_buffer);
++ DPRINTK("used buffers - %d \n", dma->used_buffers);
++ DPRINTK("callback addr - 0x%p \n", dma->callback);
++ }
++ } else {
++ /*
++ * No buffers to transfer, or old buffers to mark as used,
++ * so Disable the channel
++ */
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2P_ENABLE;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++
++ /*
++ * Must read the control register back after a write.
++ */
++ read_back = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++
++ /*
++ * Indicate that this channel is in the pause by
++ * starvation state by setting the pause bit to true.
++ */
++ dma->pause = TRUE;
++ }
++ }
++
++ /*
++ * Next Frame Buffer Interrupt. If there's a new buffer program it
++ * Check if this is the last buffer in the transfer,
++ * and if it is, disable the NFB int to prevent being
++ * interrupted for another buffer when we know there won't be
++ * another.
++ */
++ if (dma_int == NFB) {
++ DPRINTK("5 ");
++
++ if (dma->total_buffers) {
++ DPRINTK("6 ");
++ /*
++ * The iCurrentBuffer has already been transfered. so add the
++ * byte count from the current buffer to the total byte count.
++ */
++ dma->total_bytes = dma->total_bytes +
++ dma->buffer_queue[dma->current_buffer].size;
++
++ /*
++ * Mark the Current Buffer as used.
++ */
++ dma->buffer_queue[dma->current_buffer].used = TRUE;
++
++ /*
++ * Increment the used buffer counter
++ */
++ dma->used_buffers++;
++
++ DPRINTK("#%d", dma->current_buffer);
++
++ if ((dma->buffer_queue[
++ (dma->current_buffer + 1) % MAX_EP93XX_DMA_BUFFERS].last) ||
++ (dma->new_buffers == 0) || (dma->xfer_enable == FALSE)) {
++ DPRINTK("7 ");
++
++ /*
++ * This is the last Buffer in this transaction, so disable
++ * the NFB interrupt. We shouldn't get an NFB int when the
++ * FSM moves to the ON state where it would typically get the
++ * NFB int indicating a new buffer can be programmed.
++ * Instead, once in the ON state, the DMA will just proceed
++ * to complet the transfer of the current buffer, move the
++ * FSB directly to the STALL state where a STALL interrupt
++ * will be generated.
++ */
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2P_NFBINTEN;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++
++ /*
++ * The current buffer has been transferred, so increment
++ * the current buffer counter to reflect this.
++ */
++ dma->current_buffer = (dma->current_buffer + 1) % MAX_EP93XX_DMA_BUFFERS;
++
++ DPRINTK("End of NFB handling. \n");
++ DPRINTK("STATUS - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_STATUS) );
++ DPRINTK("CONTROL - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CONTROL) );
++ DPRINTK("REMAIN - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_REMAIN) );
++ DPRINTK("PPALLOC - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_PPALLOC) );
++ DPRINTK("BASE0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_BASE0) );
++ DPRINTK("MAXCNT0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_MAXCNT0) );
++ DPRINTK("CURRENT0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT0) );
++ DPRINTK("BASE1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_BASE1) );
++ DPRINTK("MAXCNT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_MAXCNT1) );
++ DPRINTK("CURRENT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT1) );
++
++ DPRINTK("Buffer buf_id source size last used \n");
++ for (loop = 0; loop < 32; loop ++)
++ DPRINTK("%d 0x%x 0x%x 0x%x %d %d \n",
++ loop, dma->buffer_queue[loop].buf_id, dma->buffer_queue[loop].source,
++ dma->buffer_queue[loop].size,
++ dma->buffer_queue[loop].last, dma->buffer_queue[loop].used);
++ DPRINTK("pause 0x%x 0x%x 0x%x %d %d \n",
++ dma->pause_buf.buf_id, dma->pause_buf.source, dma->pause_buf.size,
++ dma->pause_buf.last, dma->pause_buf.used);
++
++ DPRINTK("Pause - %d \n", dma->pause);
++ DPRINTK("xfer_enable - %d \n", dma->xfer_enable);
++ DPRINTK("total bytes - 0x%x \n", dma->total_bytes);
++ DPRINTK("total buffer - %d \n", dma->total_buffers);
++ DPRINTK("new buffers - %d \n", dma->new_buffers);
++ DPRINTK("current buffer - %d \n", dma->current_buffer);
++ DPRINTK("last buffer - %d \n", dma->last_buffer);
++ DPRINTK("used buffers - %d \n", dma->used_buffers);
++ DPRINTK("callback addr - 0x%p \n", dma->callback);
++
++ } else if (dma->new_buffers) {
++ DPRINTK("8 ");
++ /*
++ * we have a new buffer, so increment the current buffer to
++ * point to the next buffer, which is already programmed into
++ * the DMA. Next time around, it'll be pointing to the
++ * current buffer.
++ */
++ dma->current_buffer = (dma->current_buffer + 1) % MAX_EP93XX_DMA_BUFFERS;
++
++ /*
++ * we know we have a new buffer to program as the next
++ * buffer, so check which set of MAXCNT and BASE registers
++ * to program.
++ */
++ if ( inl(M2P_reg_base+M2P_OFFSET_STATUS) & STATUS_M2P_NEXTBUFFER ) {
++ /*
++ * Set the MAXCNT1 register with the buffer size
++ */
++ outl( dma->buffer_queue[
++ (dma->current_buffer + 1) % MAX_EP93XX_DMA_BUFFERS].size,
++ M2P_reg_base+M2P_OFFSET_MAXCNT1 );
++
++ /*
++ * Set the BASE1 register with the buffer base address
++ */
++ outl( dma->buffer_queue[
++ (dma->current_buffer + 1) % MAX_EP93XX_DMA_BUFFERS].source,
++ M2P_reg_base+M2P_OFFSET_BASE1 );
++ } else {
++ /*
++ * Set the MAXCNT0 register with the buffer size
++ */
++ outl( dma->buffer_queue[
++ (dma->current_buffer + 1) % MAX_EP93XX_DMA_BUFFERS].size,
++ M2P_reg_base+M2P_OFFSET_MAXCNT0 );
++
++ /*
++ * Set the BASE0 register with the buffer base address
++ */
++ outl( dma->buffer_queue[
++ (dma->current_buffer + 1) % MAX_EP93XX_DMA_BUFFERS].source,
++ M2P_reg_base+M2P_OFFSET_BASE0 );
++ }
++
++ /*
++ * Decrement the new buffers counter
++ */
++ dma->new_buffers--;
++ }
++ } else {
++ /*
++ * Total number of buffers is 0 - really we should never get here,
++ * but just in case.
++ */
++ DPRINTK("9 \n");
++
++ /*
++ * No new buffers to transfer, so Disable the channel
++ */
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2P_ENABLE;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++ }
++ }
++
++ /*
++ * Channel Error Interrupt, or perhipheral interrupt, specific to the
++ * memory to/from peripheral channels.
++ */
++ if (dma_int == CHERROR) {
++ /*
++ * just clear the interrupt, it's really up to the peripheral
++ * driver to determine if any further action is necessary.
++ */
++ uiINTERRUPT = inl(M2P_reg_base+M2P_OFFSET_INTERRUPT);
++ uiINTERRUPT &= ~INTERRUPT_M2P_CHERRORINT;
++ outl( uiINTERRUPT, M2P_reg_base+M2P_OFFSET_INTERRUPT );
++ }
++
++ /*
++ * Make sure the interrupt was valid, and if it was, then check
++ * if a callback function was installed for this DMA channel. If a
++ * callback was installed call it.
++ */
++ if ((dma_int != UNDEF_INT) && dma->callback)
++ dma->callback(dma_int, dma->device, dma->user_data);
++
++ return IRQ_HANDLED;
++}
++
++/*****************************************************************************
++ *
++ * ep9312_dma_open_m2p(int device)
++ *
++ * Description: This function will attempt to open a M2P/P2M DMA channel.
++ * If the open is successful, the channel number is returned,
++ * otherwise a negative number is returned.
++ *
++ * Parameters:
++ * device: device for which the dma channel is requested.
++ *
++ ****************************************************************************/
++static int
++dma_open_m2p(int device)
++{
++ int channel = -1;
++ unsigned int loop;
++ unsigned int M2P_reg_base;
++ unsigned int uiPWRCNT;
++ /*unsigned long flags;*/
++
++ DPRINTK("DMA Open M2P with hw dev %d\n", device);
++
++ /*
++ * Lock the dma channel list.
++ */
++ //spin_lock_irqsave(&dma_list_lock, flags);
++ spin_lock(&dma_list_lock);
++
++ /*
++ * Verify that the device requesting DMA isn't already using a DMA channel
++ */
++ if (device >= 10)
++ loop = 1; // Rx transfer requested
++ else
++ loop = 0; // Tx transfer requested
++
++ for (; loop < 10; loop = loop + 2)
++ /*
++ * Before checking for a matching device, check that the
++ * channel is in use, otherwise the device field is
++ * invalid.
++ */
++ if (dma_chan[loop].ref_count)
++ if (device == dma_chan[loop].device) {
++ DPRINTK("DMA Open M2P - Error\n");
++ return(-1);
++ }
++
++ /*
++ * Get a DMA channel instance for the given hardware device.
++ * If this is a TX look for even numbered channels, else look for
++ * odd numbered channels
++ */
++ if (device >= 10)
++ loop = 1; /* Rx transfer requested */
++ else
++ loop = 0; /* Tx transfer requested */
++
++ for (; loop < 10; loop = loop + 2)
++ if (!dma_chan[loop].ref_count) {
++ /*
++ * Capture the channel and increment the reference count.
++ */
++ channel = loop;
++ dma_chan[channel].ref_count++;
++ break;
++ }
++
++ /*
++ * Unlock the dma channel list.
++ */
++ //spin_unlock_irqrestore(&dma_list_lock, flags);
++ spin_unlock(&dma_list_lock);
++ /*
++ * See if we got a valid channel.
++ */
++ if (channel < 0)
++ return(-1);
++
++ /*
++ * Point regs to the correct dma channel register base.
++ */
++ M2P_reg_base = dma_chan[channel].reg_base;
++
++ /*
++ * Turn on the clock for the specified DMA channel
++ * TODO: need to use the correct register name for the
++ * power control register.
++ */
++ uiPWRCNT = inl(/*SYSCON_PWRCNT*/EP93XX_SYSCON_CLOCK_CONTROL);
++ switch (channel) {
++ case 0:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH0;
++ break;
++
++ case 1:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH1;
++ break;
++
++ case 2:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH2;
++ break;
++
++ case 3:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH3;
++ break;
++
++ case 4:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH4;
++ break;
++
++ case 5:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH5;
++ break;
++
++ case 6:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH6;
++ break;
++
++ case 7:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH7;
++ break;
++
++ case 8:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH8;
++ break;
++
++ case 9:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2PCH9;
++ break;
++
++ default:
++ return(-1);
++ }
++ outl( uiPWRCNT, /*SYSCON_PWRCNT*/EP93XX_SYSCON_CLOCK_CONTROL );
++
++ /*
++ * Clear out the control register before any further setup.
++ */
++ outl( 0, M2P_reg_base+M2P_OFFSET_CONTROL );
++
++ /*
++ * Setup the peripheral port value in the DMA channel registers.
++ */
++ if (device < 10)
++ outl( (unsigned int)device, M2P_reg_base+M2P_OFFSET_PPALLOC );
++ else
++ outl( (unsigned int)(device - 10), M2P_reg_base+M2P_OFFSET_PPALLOC );
++
++ /*
++ * Let's hold on to the value of the Hw device for comparison later.
++ */
++ dma_chan[channel].device = device;
++
++ /*
++ * Success.
++ */
++ return(channel);
++}
++
++/*****************************************************************************
++ *
++ * dma_open_m2m(int device)
++ *
++ * Description: This function will attempt to open a M2M DMA channel.
++ * If the open is successful, the channel number is returned,
++ * otherwise a negative number is returned.
++ *
++ * Parameters:
++ * device: device for which the dma channel is requested.
++ *
++ ****************************************************************************/
++static int
++dma_open_m2m(int device)
++{
++ int channel = -1;
++ unsigned int loop;
++ unsigned int M2M_reg_base;
++ unsigned int uiPWRCNT, uiCONTROL;
++ /*unsigned long flags;*/
++
++ DPRINTK("DMA Open M2M with hw dev %d\n", device);
++
++ /*
++ * Lock the dma channel list.
++ */
++ //spin_lock_irqsave(&dma_list_lock, flags);
++ spin_lock(&dma_list_lock);
++
++
++ /*
++ * Check if this device is already allocated a channel.
++ * TODO: can one M2M device be allocated multiple channels?
++ */
++ for (loop = 10; loop < 12; loop++)
++ /*
++ * Before checking for a matching device, check that the
++ * channel is in use, otherwise the device field is
++ * invalid.
++ */
++ if (dma_chan[loop].ref_count)
++ if (device == dma_chan[loop].device) {
++ DPRINTK("Error - dma_open_m2m - already allocated channel\n");
++
++ /*
++ * Unlock the dma channel list.
++ */
++ //spin_unlock_irqrestore(&dma_list_lock, flags);
++ spin_unlock(&dma_list_lock);
++ /*
++ * Fail.
++ */
++ return(-1);
++ }
++
++ /*
++ * Get a DMA channel instance for the given hardware device.
++ */
++ for (loop = 10; loop < 12; loop++)
++ if (!dma_chan[loop].ref_count) {
++ /*
++ * Capture the channel and increment the reference count.
++ */
++ channel = loop;
++ dma_chan[channel].ref_count++;
++ break;
++ }
++
++ /*
++ * Unlock the dma channel list.
++ */
++ //spin_unlock(dma_list_lock);
++ spin_unlock(&dma_list_lock);
++ //spin_unlock_irqrestore(&dma_list_lock, flags);
++
++ /*
++ * See if we got a valid channel.
++ */
++ if (channel < 0)
++ return(-1);
++
++ /*
++ * Point regs to the correct dma channel register base.
++ */
++ M2M_reg_base = dma_chan[channel].reg_base;
++
++ /*
++ * Turn on the clock for the specified DMA channel
++ * TODO: need to use the correct register name for the
++ * power control register.
++ */
++ uiPWRCNT = inl(/*SYSCON_PWRCNT*/EP93XX_SYSCON_CLOCK_CONTROL);
++ switch (channel) {
++ case 10:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2MCH0;
++ break;
++
++ case 11:
++ uiPWRCNT |= SYSCON_PWRCNT_DMA_M2MCH1;
++ break;
++
++ default:
++ return(-1);
++ }
++ outl( uiPWRCNT, /*SYSCON_PWRCNT*/EP93XX_SYSCON_CLOCK_CONTROL);
++
++ DPRINTK("DMA Open - power control: 0x%x \n", inl(SYSCON_PWRCNT) );
++
++ /*
++ * Clear out the control register before any further setup.
++ */
++ outl( 0, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * Setup the transfer mode and the request source selection within
++ * the DMA M2M channel registers.
++ */
++ switch (device) {
++ case DMA_MEMORY:
++ /*
++ * Clear TM field, set RSS field to 0
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~(CONTROL_M2M_TM_MASK | CONTROL_M2M_RSS_MASK);
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ break;
++
++ case DMA_IDE:
++ /*
++ * Set RSS field to 3, Set NO_HDSK, Set PW field to 1
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~(CONTROL_M2M_RSS_MASK|CONTROL_M2M_PW_MASK);
++ uiCONTROL |= (3<<CONTROL_M2M_RSS_SHIFT) |
++ CONTROL_M2M_NO_HDSK |
++ (2<<CONTROL_M2M_PW_SHIFT);
++
++ uiCONTROL &= ~(CONTROL_M2M_ETDP_MASK);
++ uiCONTROL &= ~(CONTROL_M2M_DACKP);
++ uiCONTROL &= ~(CONTROL_M2M_DREQP_MASK);
++
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ break;
++
++ case DMARx_SSP:
++ /*
++ * Set RSS field to 1, Set NO_HDSK, Set TM field to 2
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~(CONTROL_M2M_RSS_MASK|CONTROL_M2M_TM_MASK);
++ uiCONTROL |= (1<<CONTROL_M2M_RSS_SHIFT) |
++ CONTROL_M2M_NO_HDSK |
++ (2<<CONTROL_M2M_TM_SHIFT);
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ break;
++
++ case DMATx_SSP:
++ /*
++ * Set RSS field to 2, Set NO_HDSK, Set TM field to 1
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~(CONTROL_M2M_RSS_MASK|CONTROL_M2M_TM_MASK);
++ uiCONTROL |= (2<<CONTROL_M2M_RSS_SHIFT) |
++ CONTROL_M2M_NO_HDSK |
++ (1<<CONTROL_M2M_TM_SHIFT);
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ break;
++
++ case DMATx_EXT_DREQ:
++ /*
++ * Set TM field to 2, set RSS field to 0
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~(CONTROL_M2M_RSS_MASK|CONTROL_M2M_TM_MASK);
++ uiCONTROL |= 1<<CONTROL_M2M_TM_SHIFT;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ break;
++
++ case DMARx_EXT_DREQ:
++ /*
++ * Set TM field to 2, set RSS field to 0
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~(CONTROL_M2M_RSS_MASK|CONTROL_M2M_TM_MASK);
++ uiCONTROL |= 2<<CONTROL_M2M_TM_SHIFT;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ break;
++
++ default:
++ return -1;
++ }
++
++ /*
++ * Let's hold on to the value of the Hw device for comparison later.
++ */
++ dma_chan[channel].device = device;
++
++ /*
++ * Success.
++ */
++ return(channel);
++}
++
++/*****************************************************************************
++ *
++ * int dma_config_m2m(ep93xx_dma_t * dma, unsigned int flags_m2m,
++ * dma_callback callback, unsigned int user_data)
++ *
++ * Description: Configure the DMA channel and install a callback function.
++ * This function will have to be called for every transfer
++ *
++ * dma: Pointer to the dma instance data for the M2M channel to
++ * configure.
++ * flags_m2m Flags used to configure an M2M dma channel and determine
++ * if a callback function and user_data information are included
++ * in this call.
++ * callback function pointer which is called near the end of the
++ * dma channel's irq handler.
++ * user_data defined by the calling driver.
++ *
++ ****************************************************************************/
++static int
++dma_config_m2m(ep93xx_dma_t * dma, unsigned int flags_m2m,
++ dma_callback callback, unsigned int user_data)
++{
++ unsigned long flags;
++ unsigned int M2M_reg_base, uiCONTROL;
++
++ /*
++ * Make sure the channel is disabled before configuring the channel.
++ *
++ * TODO: Is this correct?? Making a big change here...
++ */
++ /* if (!dma->pause || (!dma->pause && dma->xfer_enable)) */
++ if (dma->xfer_enable) {
++ /*
++ * DMA channel is not paused, so we can't configure it.
++ */
++ DPRINTK("DMA channel not paused, so can't configure! \n");
++ return(-1);
++ }
++
++ /*
++ * Mask interrupts.
++ */
++ local_irq_save(flags);
++
++ /*
++ * Setup a pointer into the dma channel's register set.
++ */
++ M2M_reg_base = dma->reg_base;
++
++ uiCONTROL = inl(M2M_reg_base + M2M_OFFSET_CONTROL);
++ outl(0, M2M_reg_base + M2M_OFFSET_CONTROL);
++ inl(M2M_reg_base + M2M_OFFSET_CONTROL);
++ outl(uiCONTROL, M2M_reg_base + M2M_OFFSET_CONTROL);
++
++ /*
++ * By default we disable the stall interrupt.
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_STALLINTEN;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * By default we disable the done interrupt.
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_DONEINTEN;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * Set up the transfer control fields based on values passed in
++ * the flags_m2m field.
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++
++ if ( flags_m2m & DESTINATION_HOLD )
++ uiCONTROL |= CONTROL_M2M_DAH;
++ else
++ uiCONTROL &= ~CONTROL_M2M_DAH;
++
++ if ( flags_m2m & SOURCE_HOLD )
++ uiCONTROL |= CONTROL_M2M_SAH;
++ else
++ uiCONTROL &= ~CONTROL_M2M_SAH;
++
++ uiCONTROL &= ~CONTROL_M2M_TM_MASK;
++ uiCONTROL |= (((flags_m2m & TRANSFER_MODE_MASK) >> TRANSFER_MODE_SHIFT) <<
++ CONTROL_M2M_TM_SHIFT) & CONTROL_M2M_TM_MASK;
++
++ uiCONTROL &= ~CONTROL_M2M_PWSC_MASK;
++ uiCONTROL |= (((flags_m2m & WAIT_STATES_MASK) >> WAIT_STATES_SHIFT) <<
++ CONTROL_M2M_PWSC_SHIFT) & CONTROL_M2M_PWSC_MASK;
++
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ inl(M2M_reg_base + M2M_OFFSET_CONTROL);
++
++ /*
++ * Save the callback function in the dma instance for this channel.
++ */
++ dma->callback = callback;
++
++ /*
++ * Save the user data in the the dma instance for this channel.
++ */
++ dma->user_data = user_data;
++
++ /*
++ * Put the dma instance into the pause state by setting the
++ * pause bit to true.
++ */
++ dma->pause = TRUE;
++
++ local_irq_restore(flags);
++
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * int dma_start(int handle, unsigned int channels, unsigned int * handles)
++ *
++ * Description: Initiate a transfer on up to 3 channels.
++ *
++ * handle: handle for the channel to initiate transfer on.
++ * channels: number of channels to initiate transfers on.
++ * handles: pointer to an array of handles, one for each channel which
++ * is to be started.
++ *
++ ****************************************************************************/
++static int
++dma_start_m2m(int channel, ep93xx_dma_t * dma)
++{
++ unsigned long flags;
++ unsigned int M2M_reg_base = dma->reg_base;
++ unsigned int uiCONTROL;
++
++ /*
++ * Mask interrupts while we get this started.
++ */
++ local_irq_save(flags);
++
++ /*
++ * Make sure the channel has at least one buffer in the queue.
++ */
++ if (dma->new_buffers < 1) {
++ /*
++ * Unmask irqs
++ */
++ local_irq_restore(flags);
++
++ DPRINTK("DMA Start: Channel starved.\n");
++
++ /*
++ * This channel does not have enough buffers queued up,
++ * so enter the pause by starvation state.
++ */
++ dma->xfer_enable = TRUE;
++ dma->pause = TRUE;
++
++ /*
++ * Success.
++ */
++ return(0);
++ }
++
++ /*
++ * Clear any pending interrupts.
++ */
++ outl(0x0, M2M_reg_base+M2M_OFFSET_INTERRUPT);
++
++ /*
++ * Set up one or both buffer descriptors with values from the next one or
++ * two buffers in the queue. By default disable the next frame buffer
++ * interrupt on the channel.
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_NFBINTEN;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * enable the done interrupt.
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2M_DONEINTEN;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ /*
++ * Update the dma channel instance transfer state.
++ */
++ dma->xfer_enable = TRUE;
++ dma->pause = FALSE;
++
++ /*
++ * Program up the first buffer descriptor with a source and destination
++ * and a byte count.
++ */
++ outl( dma->buffer_queue[dma->current_buffer].source,
++ M2M_reg_base+M2M_OFFSET_SAR_BASE0 );
++
++ outl( dma->buffer_queue[dma->current_buffer].dest,
++ M2M_reg_base+M2M_OFFSET_DAR_BASE0 );
++
++ outl( dma->buffer_queue[dma->current_buffer].size,
++ M2M_reg_base+M2M_OFFSET_BCR0 );
++
++ /*
++ * Decrement the new buffers counter.
++ */
++ dma->new_buffers--;
++
++ /*
++ * Set up the second buffer descriptor with a second buffer if we have
++ * a second buffer.
++ */
++ if (dma->new_buffers) {
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].source,
++ M2M_reg_base+M2M_OFFSET_SAR_BASE1 );
++
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].dest,
++ M2M_reg_base+M2M_OFFSET_DAR_BASE1 );
++
++ outl( dma->buffer_queue[(dma->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].size,
++ M2M_reg_base+M2M_OFFSET_BCR1 );
++
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2M_NFBINTEN;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++
++ dma->new_buffers--;
++ }
++
++ /*
++ * Now we enable the channel. This initiates the transfer.
++ */
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2M_ENABLE;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ inl(M2M_reg_base + M2M_OFFSET_CONTROL);
++
++ /*
++ * If this is a memory to memory transfer, we need to s/w trigger the
++ * transfer by setting the start bit within the control register.
++ */
++ if (dma->device == DMA_MEMORY) {
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2M_START;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ }
++
++ DPRINTK("DMA - It's been started!!");
++ DPRINTK("CONTROL - 0x%x \n", inl(M2M_reg_base+M2M_OFFSET_CONTROL) );
++ DPRINTK("STATUS - 0x%x \n", inl(M2M_reg_base+M2M_OFFSET_STATUS) );
++ DPRINTK("BCR0 - 0x%x \n", dma->buffer_queue[dma->current_buffer].size);
++ DPRINTK("SAR_BASE0 - 0x%x \n", inl(M2M_reg_base+M2M_OFFSET_SAR_BASE0) );
++ DPRINTK("SAR_CUR0 - 0x%x \n", inl(M2M_reg_base+M2M_OFFSET_SAR_CURRENT0) );
++ DPRINTK("DAR_BASE0 - 0x%x \n", inl(M2M_reg_base+M2M_OFFSET_DAR_BASE0) );
++ DPRINTK("DAR_CUR0 - 0x%x \n", inl(M2M_reg_base+M2M_OFFSET_DAR_CURRENT0) );
++
++ /*
++ * Unmask irqs
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * DMA interface functions
++ *
++ ****************************************************************************/
++
++/*****************************************************************************
++ *
++ * int dma_init(int handle, unsigned int flags_m2p, unsigned int flags_m2m,
++ * dma_callback callback, unsigned int user_data)
++ *
++ * Description: Configure the DMA channel and install a callback function.
++ *
++ * handle: Handle unique the each instance of the dma interface, used
++ * to verify this call.
++ * flags_m2p Flags used to configure an M2P/P2M dma channel and determine
++ * if a callback function and user_data information are included
++ * in this call. This field should be NULL if handle represents
++ * an M2M channel.
++ * flags_m2m Flags used to configure an M2M dma channel and determine
++ * if a callback function and user_data information are included
++ * in this call. This field should be NULL if handle represents
++ * an M2P/P2M channel.
++ * callback function pointer which is called near the end of the
++ * dma channel's irq handler.
++ * user_data defined by the calling driver.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_config(int handle, unsigned int flags_m2p, unsigned int flags_m2m,
++ dma_callback callback, unsigned int user_data)
++{
++ int channel;
++ ep93xx_dma_t * dma;
++ unsigned long flags;
++ unsigned int M2P_reg_base, uiCONTROL;
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR
++ "DMA Config: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ DPRINTK("DMA Config \n");
++
++ dma = &dma_chan[channel];
++
++ local_irq_save(flags);
++
++ /*
++ * Check if the channel is currently transferring.
++ */
++ if (dma->xfer_enable) {
++ local_irq_restore(flags);
++ return(-EINVAL);
++ }
++
++ /*
++ * Check if this is an m2m function.
++ */
++ if (channel >= 10) {
++ local_irq_restore(flags);
++
++ /*
++ * Call another function to handle m2m config.
++ */
++ return(dma_config_m2m(dma, flags_m2m, callback, user_data));
++ }
++
++ /*
++ * Setup a pointer into the dma channel's register set.
++ */
++ M2P_reg_base = dma->reg_base;
++
++ /*
++ * By default we enable the stall interrupt.
++ */
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2P_STALLINTEN;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++
++ /*
++ * Configure the channel for an error from the peripheral.
++ */
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ if ( flags_m2p && CHANNEL_ERROR_INT_ENABLE )
++ uiCONTROL |= CONTROL_M2P_CHERRORINTEN;
++ else
++ uiCONTROL &= ~CONTROL_M2P_CHERRORINTEN;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ if ( flags_m2p && CHANNEL_ABORT )
++ uiCONTROL |= CONTROL_M2P_ABRT;
++ else
++ uiCONTROL &= ~CONTROL_M2P_ABRT;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ if ( flags_m2p && IGNORE_CHANNEL_ERROR )
++ uiCONTROL |= CONTROL_M2P_ICE;
++ else
++ uiCONTROL &= ~CONTROL_M2P_ICE;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++
++ /*
++ * Save the callback function in the dma instance for this channel.
++ */
++ dma->callback = callback;
++
++ /*
++ * Save the user data in the the dma instance for this channel.
++ */
++ dma->user_data = user_data;
++
++ /*
++ * Put the dma instance into the pause state by setting the
++ * pause bit to true.
++ */
++ dma->pause = TRUE;
++
++ local_irq_restore(flags);
++
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * int dma_start(int handle, unsigned int channels, unsigned int * handles)
++ *
++ * Description: Initiate a transfer on up to 3 channels.
++ *
++ * handle: handle for the channel to initiate transfer on.
++ * channels: number of channels to initiate transfers on.
++ * handles: pointer to an array of handles, one for each channel which
++ * is to be started.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_start(int handle, unsigned int channels, unsigned int * handles)
++{
++ ep93xx_dma_t * dma_pointers[3];
++ unsigned int M2P_reg_bases[3];
++ unsigned int loop, uiCONTROL;
++ unsigned long flags;
++ int channel;
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR "DMA Start: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ if (channels < 1) {
++ printk(KERN_ERR "DMA Start: Invalid parameter.\n");
++ return(-EINVAL);
++ }
++
++ DPRINTK("DMA Start \n");
++
++ /*
++ * Mask off registers.
++ */
++ local_irq_save(flags);
++
++ /*
++ * Check if this is a start multiple.
++ */
++ if (channels > 1) {
++ DPRINTK("DMA ERROR: Start, multiple start not supported yet \n");
++ return(-1);
++ } else {
++ /*
++ * Check if this channel is already transferring.
++ */
++ if (dma_chan[channel].xfer_enable && !dma_chan[channel].pause) {
++ printk(KERN_ERR
++ "DMA Start: Invalid command for channel %d.\n", channel);
++
++ /*
++ * Unmask irqs
++ */
++ local_irq_restore(flags);
++
++ /*
++ * This channel is already transferring, so return an error.
++ */
++ return(-EINVAL);
++ }
++
++ /*
++ * If this is an M2M channel, call a different function.
++ */
++ if (channel >= 10) {
++ /*
++ * Unmask irqs
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Call the m2m start function. Only start one channel.
++ */
++ return(dma_start_m2m(channel, &dma_chan[channel]));
++ }
++
++ /*
++ * Make sure the channel has at least one buffer in the queue.
++ */
++ if (dma_chan[channel].new_buffers < 1) {
++ DPRINTK("DMA Start: Channel starved.\n");
++
++ /*
++ * This channel does not have enough buffers queued up,
++ * so enter the pause by starvation state.
++ */
++ dma_chan[channel].xfer_enable = TRUE;
++ dma_chan[channel].pause = TRUE;
++
++ /*
++ * Unmask irqs
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Success.
++ */
++ return(0);
++ }
++
++ /*
++ * Set up a dma instance pointer for this dma channel.
++ */
++ dma_pointers[0] = &dma_chan[channel];
++
++ /*
++ * Set up a pointer to the register set for this channel.
++ */
++ M2P_reg_bases[0] = dma_pointers[0]->reg_base;
++ }
++
++ /*
++ * Setup both MAXCNT registers with values from the next two buffers
++ * in the queue, and enable the next frame buffer interrupt on the channel.
++ */
++ for (loop = 0; loop < channels; loop++) {
++ /*
++ * Check if we need to restore a paused transfer.
++ */
++ if (dma_pointers[loop]->pause_buf.buf_id != -1)
++ outl( dma_pointers[loop]->pause_buf.size,
++ M2P_reg_bases[loop]+M2P_OFFSET_MAXCNT0 );
++ else
++ outl( dma_pointers[loop]->buffer_queue[dma_pointers[loop]->current_buffer].size,
++ M2P_reg_bases[loop]+M2P_OFFSET_MAXCNT0 );
++ }
++
++ for (loop = 0; loop < channels; loop++) {
++ /*
++ * Enable the specified dma channels.
++ */
++ uiCONTROL = inl(M2P_reg_bases[loop]+M2P_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2P_ENABLE;
++ outl( uiCONTROL, M2P_reg_bases[loop]+M2P_OFFSET_CONTROL );
++
++ /*
++ * Update the dma channel instance transfer state.
++ */
++ dma_pointers[loop]->xfer_enable = TRUE;
++ dma_pointers[loop]->pause = FALSE;
++ }
++
++ /*
++ * Program up the BASE0 registers for all specified channels, this
++ * will initiate transfers on all specified channels.
++ */
++ for (loop = 0; loop < channels; loop++)
++ /*
++ * Check if we need to restore a paused transfer.
++ */
++ if (dma_pointers[loop]->pause_buf.buf_id != -1) {
++ outl( dma_pointers[loop]->pause_buf.source,
++ M2P_reg_bases[loop]+M2P_OFFSET_BASE0 );
++
++ /*
++ * Set the pause buffer to NULL
++ */
++ dma_pointers[loop]->pause_buf.buf_id = -1;
++ dma_pointers[loop]->pause_buf.size = 0;
++ } else if(dma_pointers[loop]->new_buffers){
++ outl( dma_pointers[loop]->buffer_queue[
++ dma_pointers[loop]->current_buffer].source,
++ M2P_reg_bases[loop]+M2P_OFFSET_BASE0 );
++ dma_pointers[loop]->new_buffers--;
++
++ }
++
++ /*
++ * Before restoring irqs setup the second MAXCNT/BASE
++ * register with a second buffer.
++ */
++ for (loop = 0; loop < channels; loop++)
++ if (dma_pointers[loop]->new_buffers) {
++ /*
++ * By default we enable the next frame buffer interrupt.
++ */
++ uiCONTROL = inl(M2P_reg_bases[loop]+M2P_OFFSET_CONTROL);
++ uiCONTROL |= CONTROL_M2P_NFBINTEN;
++ outl( uiCONTROL, M2P_reg_bases[loop]+M2P_OFFSET_CONTROL );
++
++ outl( dma_pointers[loop]->buffer_queue[
++ (dma_pointers[loop]->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].size,
++ M2P_reg_bases[loop]+M2P_OFFSET_MAXCNT1 );
++
++ outl( dma_pointers[loop]->buffer_queue[
++ (dma_pointers[loop]->current_buffer + 1) %
++ MAX_EP93XX_DMA_BUFFERS].source,
++ M2P_reg_bases[loop]+M2P_OFFSET_BASE1 );
++ dma_pointers[loop]->new_buffers--;
++ }
++
++ /*
++ DPRINTK("DMA - It's been started!!");
++ DPRINTK("STATUS - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_STATUS) );
++ DPRINTK("CONTROL - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CONTROL) );
++ DPRINTK("REMAIN - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_REMAIN) );
++ DPRINTK("PPALLOC - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_PPALLOC) );
++ DPRINTK("BASE0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_BASE0) );
++ DPRINTK("MAXCNT0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_MAXCNT0) );
++ DPRINTK("CURRENT0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT0) );
++ DPRINTK("BASE1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_BASE1) );
++ DPRINTK("MAXCNT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_MAXCNT1) );
++ DPRINTK("CURRENT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT1) );
++
++ DPRINTK("Pause - %d \n", dma_pointers[0]->pause);
++ DPRINTK("xfer_enable - %d \n", dma_pointers[0]->xfer_enable);
++ DPRINTK("total bytes - 0x%x \n", dma_pointers[0]->total_bytes);
++ DPRINTK("total buffer - %d \n", dma_pointers[0]->total_buffers);
++ DPRINTK("new buffers - %d \n", dma_pointers[0]->new_buffers);
++ DPRINTK("current buffer - %d \n", dma_pointers[0]->current_buffer);
++ DPRINTK("last buffer - %d \n", dma_pointers[0]->last_buffer);
++ DPRINTK("used buffers - %d \n", dma_pointers[0]->used_buffers);
++ */
++ /*
++ * Unmask irqs
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * int ep93xx_dma_add_buffer(int handle, unsigned int * address,
++ * unsigned int size, unsigned int last)
++ *
++ * Description: Add a buffer entry to the DMA buffer queue.
++ *
++ * handle: handle for the channel to add this buffer to.
++ * address: Pointer to an integer which is the start address of the
++ * buffer which is to be added to the queue.
++ * size: size of the buffer in bytes.
++ * last: 1 if this is the last buffer in this stream, 0 otherwise.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_add_buffer(int handle, unsigned int source, unsigned int dest,
++ unsigned int size, unsigned int last,
++ unsigned int buf_id)
++{
++ unsigned long flags;
++ ep93xx_dma_t * dma;
++ int channel;
++#if 0
++ static int peak_total_buffers=0;
++#endif
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR
++ "DMA Add Buffer: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ /*
++ * Get a pointer to the dma instance.
++ */
++ dma = &dma_chan[channel];
++
++#if 0
++ if( dma->total_buffers > peak_total_buffers )
++ {
++ peak_total_buffers=dma->total_buffers;
++ printk("peak_total_buffers=%d\n", peak_total_buffers );
++ }
++#endif
++ /*
++ * Mask interrupts and hold on to the original state.
++ */
++ local_irq_save(flags);
++
++ /*
++ * If the buffer queue is full, last_buffer is the same as current_buffer and
++ * we're not tranfering, or last_buffer is pointing to a used buffer, then exit.
++ * TODO: do I need to do any more checks?
++ */
++ if (dma->total_buffers >= MAX_EP93XX_DMA_BUFFERS)
++ {
++ DPRINTK("too many dma buffers: MAX_EP93XX_DMA_BUFFERS set to low ?\n");
++ /*
++ * Restore the state of the irqs
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Fail.
++ */
++ return(-1);
++ }
++
++ /*
++ * Add this buffer to the queue
++ */
++ dma->buffer_queue[dma->last_buffer].source = source;
++ dma->buffer_queue[dma->last_buffer].dest = dest;
++ dma->buffer_queue[dma->last_buffer].size = size;
++ dma->buffer_queue[dma->last_buffer].last = last;
++ dma->buffer_queue[dma->last_buffer].buf_id = buf_id;
++
++ /*
++ * Reset the used field of the buffer structure.
++ */
++ dma->buffer_queue[dma->last_buffer].used = FALSE;
++
++ /*
++ * Increment the End Item Pointer.
++ */
++ dma->last_buffer = (dma->last_buffer + 1) % MAX_EP93XX_DMA_BUFFERS;
++
++ /*
++ * Increment the new buffers counter and the total buffers counter
++ */
++ dma->new_buffers++;
++ dma->total_buffers++;
++
++ /*
++ * restore the interrupt state.
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Check if the channel was starved into a stopped state.
++ */
++ if (dma->pause && dma->xfer_enable) {
++ if (dma->new_buffers >= 1) {
++ DPRINTK("DMA - calling start from add after starve. \n");
++
++ /*
++ * The channel was starved into a stopped state, and we've got
++ * 2 new buffers, so start tranferring again.
++ */
++ ep93xx_dma_start(handle, 1, 0);
++ }
++ }
++
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * int ep93xx_dma_remove_buffer(int handle, unsigned int * address,
++ * unsigned int * size)
++ *
++ * Description: Remove a buffer entry from the DMA buffer queue. If
++ * buffer was removed successfully, return 0, otherwise
++ * return -1.
++ *
++ * handle: handle for the channel to remove a buffer from.
++ * address: Pointer to an integer which is filled in with the start
++ * address of the removed buffer.
++ * size: Pointer to an integer which is filled in with the size in
++ * bytes of the removed buffer.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_remove_buffer(int handle, unsigned int * buf_id)
++{
++ unsigned int test;
++ unsigned int loop;
++ int return_val = -1;
++ unsigned long flags;
++ ep93xx_dma_t *dma;
++ int channel;
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR
++ "DMA Remove Buffer: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ dma = &dma_chan[channel];
++
++ /*
++ * Mask interrupts and hold on to the original state.
++ */
++ local_irq_save(flags);
++
++ /*
++ * Make sure there are used buffers to be returned.
++ */
++ if (dma->used_buffers) {
++ test = dma->last_buffer;
++
++ for (loop = 0; loop < MAX_EP93XX_DMA_BUFFERS; loop++) {
++ if (dma->buffer_queue[test].used && (dma->buffer_queue[test].buf_id != -1)) {
++ /*DPRINTK("buffer %d used \n", test); */
++
++ /*
++ * This is a used buffer, fill in the buf_id pointer
++ * with the buf_id for this buffer.
++ */
++ *buf_id = dma->buffer_queue[test].buf_id;
++
++ /*
++ * Reset this buffer structure
++ */
++ dma->buffer_queue[test].buf_id = -1;
++
++ /*
++ * Decrement the used buffer counter, and the total buffer counter.
++ */
++ dma->used_buffers--;
++ dma->total_buffers--;
++
++ /*
++ * Successful removal of a buffer, so set the return
++ * value to 0, then exit this loop.
++ */
++ return_val = 0;
++ break;
++ }
++
++ /*
++ * This buffer isn't used, let's see if the next one is.
++ */
++ test = (test + 1) % MAX_EP93XX_DMA_BUFFERS;
++ }
++ }
++
++ /*
++ * Restore interrupts.
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Success.
++ */
++ return(return_val);
++}
++
++/*****************************************************************************
++ *
++ * int ep93xx_dma_pause(int handle, unsigned int channels,
++ * unsigned int * handles)
++ *
++ * Description: Disable any ongoing transfer for the given channel, retaining
++ * the state of the current buffer transaction so that upon
++ * resume, the dma will continue where it left off.
++ *
++ * handle: Handle for the channel to be paused. If this is a pause for
++ * for multiple channels, handle is a valid handle for one of
++ * the channels to be paused.
++ * channels: number of channel to pause transfers on.
++ * handles: Pointer to an array of handles, one for each channel which
++ * to be paused. If this pause is intended only for one
++ * channel, this field should be set to NULL.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_pause(int handle, unsigned int channels, unsigned int * handles)
++{
++ unsigned long flags;
++ ep93xx_dma_t * dma;
++ int channel;
++
++ DPRINTK("ep93xx_dma_pause \n");
++
++ /*
++ * Mask interrupts and hold on to the original state.
++ */
++ local_irq_save(flags);
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ /*
++ * restore interrupts.
++ */
++ local_irq_restore(flags);
++
++ printk(KERN_ERR
++ "DMA Pause: Invalid dma handle.\n");
++
++ /*
++ * Fail.
++ */
++ return(-EINVAL);
++ }
++
++ DPRINTK("DMA %d: pause \n", channel);
++
++ /*
++ * Set up a pointer to the dma instance data.
++ */
++ dma = &dma_chan[channel];
++
++ /*
++ * Check if we're already paused.
++ */
++ if (dma->pause) {
++ /*
++ * We're paused, but are we stopped?
++ */
++ if (dma->xfer_enable)
++ /*
++ * Put the channel in the stopped state.
++ */
++ dma->xfer_enable = FALSE;
++
++ DPRINTK("DMA Pause - already paused.");
++ } else {
++ /*
++ * Put the channel into the stopped state.
++ */
++ dma->xfer_enable = FALSE;
++ dma->pause = TRUE;
++ }
++
++ /*
++ * restore interrupts.
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Already paused, so exit.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * void ep93xx_dma_flush(int handle)
++ *
++ * Description: Flushes all queued buffers and transfers in progress
++ * for the given channel. Return the buffer entries
++ * to the calling function.
++ *
++ * handle: handle for the channel for which the flush is intended.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_flush(int handle)
++{
++ unsigned int loop;
++ unsigned long flags;
++ ep93xx_dma_t * dma;
++ int channel;
++ unsigned int M2P_reg_base,uiCONTROL;
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR "DMA Flush: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ DPRINTK("DMA %d: flush \n", channel);
++
++ /*
++ * Set up a pointer to the dma instance data for this channel
++ */
++ dma = &dma_chan[channel];
++
++ /*
++ * Mask interrupts and hold on to the original state.
++ */
++ local_irq_save(flags);
++
++ /*
++ * Disable the dma channel
++ */
++ if (channel < 10) {
++ /*
++ * M2P channel
++ */
++ uiCONTROL = inl(dma->reg_base+M2P_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2P_ENABLE;
++ outl( uiCONTROL, dma->reg_base+M2P_OFFSET_CONTROL );
++ } else {
++ /*
++ * M2M channel
++ */
++ uiCONTROL = inl(dma->reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_ENABLE;
++ outl( uiCONTROL, dma->reg_base+M2M_OFFSET_CONTROL );
++ }
++
++ for (loop = 0; loop < MAX_EP93XX_DMA_BUFFERS; loop++)
++ {
++ dma->buffer_queue[loop].buf_id = -1;
++ dma->buffer_queue[loop].last = 0;
++ }
++
++ /*
++ * Set the Current and Last item to zero.
++ */
++ dma->current_buffer = 0;
++ dma->last_buffer = 0;
++
++ /*
++ * Reset the Buffer counters
++ */
++ dma->used_buffers = 0;
++ dma->new_buffers = 0;
++ dma->total_buffers = 0;
++
++ /*
++ * reset the Total bytes counter.
++ */
++ dma->total_bytes = 0;
++
++ /*
++ * Reset the paused buffer.
++ */
++ dma->pause_buf.last = 0;
++ dma->pause_buf.buf_id = -1;
++
++ M2P_reg_base = dma_chan[channel].reg_base;
++
++ /*
++ * restore interrupts.
++ */
++ local_irq_restore(flags);
++
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * int ep93xx_dma_queue_full(int handle)
++ *
++ * Description: Query to determine if the DMA queue of buffers for
++ * a given channel is full.
++ * 0 = queue is full
++ * 1 = queue is not full
++ *
++ * handle: handle for the channel to query.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_queue_full(int handle)
++{
++ int list_full = 0;
++ unsigned long flags;
++ int channel;
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR "DMA Queue Full: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ DPRINTK("DMA %d: queue full \n", channel);
++
++ /*
++ * Mask interrupts and hold on to the original state.
++ */
++ local_irq_save(flags);
++
++ /*
++ * If the last item is equal to the used item then
++ * the queue is full.
++ */
++ if (dma_chan[channel].total_buffers < MAX_EP93XX_DMA_BUFFERS)
++ list_full = FALSE;
++ else
++ list_full = TRUE;
++
++ /*
++ * restore interrupts.
++ */
++ local_irq_restore(flags);
++
++ return(list_full);
++}
++
++/*****************************************************************************
++ *
++ * int ep93xx_dma_get_position()
++ *
++ * Description: Takes two integer pointers and fills them with the start
++ * and current address of the buffer currently transferring
++ * on the specified DMA channel.
++ *
++ * handle handle for the channel to query.
++ * *buf_id buffer id for the current buffer transferring on the
++ * dma channel.
++ * *total total bytes transferred on the channel. Only counts
++ * whole buffers transferred.
++ * *current_frac number of bytes transferred so far in the current buffer.
++ ****************************************************************************/
++int
++ep93xx_dma_get_position(int handle, unsigned int * buf_id,
++ unsigned int * total, unsigned int * current_frac )
++{
++ int channel;
++ ep93xx_dma_t * dma;
++ unsigned int buf_id1, total1, current_frac1, buf_id2, total2;
++ unsigned int Status, NextBuffer, StateIsBufNext, M2P_reg_base=0;
++ unsigned int pause1, pause2;
++
++ /*
++ * Get the DMA hw channel # from the handle. See if this is a
++ * valid handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++ if (channel < 0) {
++ printk(KERN_ERR "DMA Get Position: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ dma = &dma_chan[channel];
++
++ /*
++ * If DMA moves to a new buffer in the middle of us grabbing the
++ * buffer info, then do it over again.
++ */
++ do{
++ buf_id1 = dma->buffer_queue[dma->current_buffer].buf_id;
++ total1 = dma->total_bytes;
++ pause1 = dma->pause;
++
++ if (channel < 10) {
++ // M2P
++ M2P_reg_base = dma->reg_base;
++
++ Status = inl(M2P_reg_base+M2P_OFFSET_STATUS);
++
++ NextBuffer = ((Status & STATUS_M2P_NEXTBUFFER) != 0);
++
++ StateIsBufNext = ((Status & STATUS_M2P_CURRENT_MASK) ==
++ STATUS_M2P_DMA_BUF_NEXT);
++
++ if( NextBuffer ^ StateIsBufNext )
++ current_frac1 = inl(M2P_reg_base+M2P_OFFSET_CURRENT1) -
++ inl(M2P_reg_base+M2P_OFFSET_BASE1);
++ else
++ current_frac1 = inl(M2P_reg_base+M2P_OFFSET_CURRENT0) -
++ inl(M2P_reg_base+M2P_OFFSET_BASE0);
++
++ } else {
++ // M2M - TODO implement this for M2M
++ current_frac1 = 0;
++ }
++
++ buf_id2 = dma->buffer_queue[dma->current_buffer].buf_id;
++ total2 = dma->total_bytes;
++ pause2 = dma->pause;
++
++ } while ( (buf_id1 != buf_id2) || (total1 != total2) || (pause1 != pause2) );
++
++ if (pause1)
++ current_frac1 = 0;
++
++ if (buf_id)
++ *buf_id = buf_id1;
++
++ if (total)
++ *total = total1;
++
++ if (current_frac)
++ *current_frac = current_frac1;
++
++// DPRINTK("DMA buf_id %d, total %d, frac %d\n", buf_id1, total1, current_frac1);
++
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * int ep93xx_dma_get_total(int handle)
++ *
++ * Description: Returns the total number of bytes transferred on the
++ * specified channel since the channel was requested.
++ *
++ * handle: handle for the channel to query.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_get_total(int handle)
++{
++ int channel;
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR "DMA Get Total: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ DPRINTK("DMA %d: total: %d \n", channel, dma_chan[channel].total_bytes);
++
++ /*
++ * Return the total number of bytes transferred on this channel since
++ * it was requested.
++ */
++ return(dma_chan[channel].total_bytes);
++}
++
++/*****************************************************************************
++ *
++ * int ep93xx_dma_is_done(int handle)
++ *
++ * Description: Determines if the specified channel is done
++ * transferring the requested data.
++ *
++ * handle: handle for the channel to query.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_is_done(int handle)
++{
++ ep93xx_dma_t *dma;
++ int channel;
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR "ep93xx_dma_is_done: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ /*
++ * Get a pointer to the DMA channel state structure.
++ */
++ dma = &dma_chan[channel];
++
++ /*
++ * See if there are any buffers remaining to be provided to the HW.
++ */
++ if (dma->new_buffers)
++ return 0;
++
++ /*
++ * See if this is a M2P or M2M channel.
++ */
++ if (channel < 10) {
++ /*
++ * If the bytes remaining register of the HW is not zero, then
++ * there is more work to be done.
++ */
++ if (inl(dma->reg_base + M2P_OFFSET_REMAIN) != 0)
++ return 0;
++ } else {
++ /*
++ * If either byte count register in the HW is not zero, then there
++ * is more work to be done.
++ */
++ if ((inl(dma->reg_base + M2M_OFFSET_BCR0) != 0) ||
++ (inl(dma->reg_base + M2M_OFFSET_BCR1) != 0))
++ return 0;
++ }
++
++ /*
++ * The DMA is complete.
++ */
++ return 1;
++}
++
++/*****************************************************************************
++ * ep93xx_dma_request
++ *
++ * Description: This function will allocate a DMA channel for a particular
++ * hardware peripheral. Before initiating a transfer on the allocated
++ * channel, the channel must be set up and buffers have to queued up.
++ *
++ * handle: pointer to an integer which is filled in with a unique
++ * handle for this instance of the dma interface.
++ * device_id string with the device name, primarily used by /proc.
++ * device hardware device ID for which the requested dma channel will
++ * transfer data.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_request(int * handle, const char *device_id,
++ ep93xx_dma_dev_t device)
++{
++ ep93xx_dma_t *dma = NULL;
++ int channel;
++ unsigned int error = 0;
++ unsigned int loop;
++ unsigned int M2P_reg_base;
++
++ /*
++ * Check if the device requesting a DMA channel is a valid device.
++ */
++ if ((device >= UNDEF_DMA) || (device < 0))
++ return(-ENODEV);
++
++ /*
++ * We've got a valid hardware device requesting a DMA channel.
++ * Now check if the device should open an M2P or M2M channel
++ */
++ if (device < 20)
++ channel = dma_open_m2p(device);
++ else
++ channel = dma_open_m2m(device);
++
++ /*
++ * Check if we successfully opened a DMA channel
++ */
++ if (channel < 0) {
++ printk(KERN_ERR "%s: Could not open dma channel for this device.\n",
++ device_id);
++ return(-EBUSY);
++ }
++
++ dma = &dma_chan[channel];
++
++ if(dma->terminated==1) {
++ free_irq(dma->irq, (void *) dma);
++ dma->terminated=0;
++ }
++
++ /*
++ * Request the appropriate IRQ for the specified channel
++ */
++ if (channel < 10)
++ error = request_irq(dma->irq, dma_m2p_irq_handler,
++ IRQF_DISABLED, device_id, (void *) dma);
++ else
++ error = request_irq(dma->irq, &dma_m2m_irq_handler,
++ IRQF_DISABLED, device_id, (void *) dma);
++
++ /*
++ * Check for any errors during the irq request
++ */
++ if (error) {
++ printk(KERN_ERR "%s: unable to request IRQ %d for DMA channel\n",
++ device_id, dma->irq);
++ return(error);
++ }
++
++ /*
++ * Generate a valid handle and exit.
++ *
++ * Increment the last valid handle.
++ * Check for wraparound (unlikely, but we like to be complete).
++ */
++ dma->last_valid_handle++;
++
++ if ( (dma->last_valid_handle & DMA_HANDLE_SPECIFIER_MASK) !=
++ (channel << 28) )
++ dma->last_valid_handle = (channel << 28) + 1;
++
++ /*
++ * Fill in the handle pointer with a valid handle for
++ * this dma channel instance.
++ */
++ *handle = dma->last_valid_handle;
++
++ DPRINTK("Handle for channel %d: 0x%x\n", channel, *handle);
++
++ /*
++ * Save the device ID and device name.
++ */
++ dma->device = device;
++ dma->device_id = device_id;
++
++ /*
++ * Init all fields within the dma instance.
++ */
++ for (loop = 0; loop < MAX_EP93XX_DMA_BUFFERS; loop++)
++ dma->buffer_queue[loop].buf_id = -1;
++
++ /*
++ * Initialize all buffer queue variables.
++ */
++ dma->current_buffer = 0;
++ dma->last_buffer = 0;
++
++ dma->new_buffers = 0;
++ dma->used_buffers = 0;
++ dma->total_buffers = 0;
++
++ /*
++ * Initialize the total bytes variable
++ */
++ dma->total_bytes = 0;
++
++ /*
++ * Initialize the transfer and pause state variables to 0.
++ */
++ dma->xfer_enable = 0;
++
++ dma->pause = 0;
++
++ /*
++ * Initialize the pause buffer structure.
++ */
++ dma->pause_buf.buf_id = -1;
++
++ /*
++ * Initialize the callback function and user data fields.
++ */
++ dma->callback = NULL;
++
++ /*
++ * User data used as a parameter for the Callback function. The user
++ * sets up the data and sends it with the callback function.
++ */
++ dma->user_data = 0;
++
++ M2P_reg_base = dma_chan[channel].reg_base;
++
++ /*
++ * Debugging message.
++ */
++ DPRINTK("Successfully requested dma channel %d\n", channel);
++ DPRINTK("STATUS - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_STATUS) );
++ DPRINTK("CONTROL - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CONTROL) );
++ DPRINTK("REMAIN - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_REMAIN) );
++ DPRINTK("PPALLOC - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_PPALLOC) );
++ DPRINTK("BASE0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_BASE0) );
++ DPRINTK("MAXCNT0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_MAXCNT0) );
++ DPRINTK("CURRENT0 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT0) );
++ DPRINTK("BASE1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_BASE1) );
++ DPRINTK("MAXCNT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_MAXCNT1) );
++ DPRINTK("CURRENT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT1) );
++
++ DPRINTK("Buffer source size last used \n");
++ for (loop = 0; loop < 5; loop ++)
++ DPRINTK("%d 0x%x 0x%x %d %d \n",
++ loop, dma->buffer_queue[loop].source, dma->buffer_queue[loop].size,
++ dma->buffer_queue[loop].last, dma->buffer_queue[loop].used);
++ DPRINTK("pause 0x%x 0x%x %d %d \n",
++ dma->pause_buf.source, dma->pause_buf.size,
++ dma->pause_buf.last, dma->pause_buf.used);
++
++ DPRINTK("Pause - %d \n", dma->pause);
++ DPRINTK("xfer_enable - %d \n", dma->xfer_enable);
++ DPRINTK("total bytes - 0x%x \n", dma->total_bytes);
++ DPRINTK("total buffer - %d \n", dma->total_buffers);
++ DPRINTK("new buffers - %d \n", dma->new_buffers);
++ DPRINTK("current buffer - %d \n", dma->current_buffer);
++ DPRINTK("last buffer - %d \n", dma->last_buffer);
++ DPRINTK("used buffers - %d \n", dma->used_buffers);
++
++ DPRINTK("CURRENT1 - 0x%x \n", inl(M2P_reg_base+M2P_OFFSET_CURRENT1) );
++ DPRINTK("VIC0IRQSTATUS - 0x%x, VIC0INTENABLE - 0x%x \n",
++ *(unsigned int *)(VIC0IRQSTATUS),
++ *(unsigned int *)(VIC0INTENABLE));
++
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * ep93xx_dma_free
++ *
++ * Description: This function will free the dma channel for future requests.
++ *
++ * handle: handle for the channel to be freed.
++ *
++ ****************************************************************************/
++int
++ep93xx_dma_free(int handle)
++{
++ ep93xx_dma_t *dma;
++ unsigned int M2M_reg_base, M2P_reg_base, uiCONTROL;
++ int channel;
++
++ /*
++ * Get the DMA hw channel # from the handle.
++ */
++ channel = dma_get_channel_from_handle(handle);
++
++ /*
++ * See if this is a valid handle.
++ */
++ if (channel < 0) {
++ printk(KERN_ERR "DMA Free: Invalid dma handle.\n");
++ return(-EINVAL);
++ }
++
++ /*
++ * Get a pointer to the dma instance.
++ */
++ dma = &dma_chan[channel];
++
++ /*
++ * Disable the dma channel
++ */
++ if (channel < 10) {
++ /*
++ * M2P channel
++ */
++ M2P_reg_base = dma->reg_base;
++
++ uiCONTROL = inl(M2P_reg_base+M2P_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2P_ENABLE;
++ outl( uiCONTROL, M2P_reg_base+M2P_OFFSET_CONTROL );
++ } else {
++ /*
++ * M2M channel
++ */
++ M2M_reg_base = dma->reg_base;
++
++ uiCONTROL = inl(M2M_reg_base+M2M_OFFSET_CONTROL);
++ uiCONTROL &= ~CONTROL_M2M_ENABLE;
++ outl( uiCONTROL, M2M_reg_base+M2M_OFFSET_CONTROL );
++ }
++
++ /*
++ * Free the interrupt servicing this dma channel
++ */
++ //free_irq(dma->irq, (void *) dma);
++ dma->terminated=1;
++
++ /*
++ * Decrement the reference count for this instance of the dma interface
++ */
++ dma->ref_count--;
++
++ /*
++ * Set the transfer and pause state variables to 0
++ * (unititialized state).
++ */
++ dma->xfer_enable = 0;
++ dma->pause = 0;
++
++ /*
++ * Debugging message.
++ */
++ DPRINTK("Successfully freed dma channel %d\n", channel);
++ /*
++ * Success.
++ */
++ return(0);
++}
++
++/*****************************************************************************
++ *
++ * ep93xx_dma_init(void)
++ *
++ * Description: This function is called during system initialization to
++ * setup the interrupt number and register set base address for each DMA
++ * channel.
++ *
++ ****************************************************************************/
++static int __init
++ep93xx_dma_init(void)
++{
++ int channel;
++
++ /*
++ * Init some values in each dma instance.
++ */
++ for (channel = 0; channel < MAX_EP93XX_DMA_CHANNELS; channel++) {
++ /*
++ * IRQ for the specified dma channel.
++ */
++ dma_chan[channel].irq = IRQ_EP93XX_DMAM2P0 + channel;
++
++ dma_chan[channel].terminated = 0;
++
++ /*
++ * Initial value of the dma channel handle.
++ */
++ dma_chan[channel].last_valid_handle = channel << 28;
++
++ /*
++ * Give the instance a pointer to the dma channel register
++ * base.
++ */
++ if (channel < 10)
++ dma_chan[channel].reg_base = DMAM2PChannelBase[channel];
++ else
++ dma_chan[channel].reg_base = DMAM2MChannelBase[channel - 10];
++
++ /*
++ * Initialize the reference count for this channel.
++ */
++ dma_chan[channel].ref_count = 0;
++ }
++
++ DPRINTK("DMA Interface intitialization complete\n");
++
++ /*
++ * Success
++ */
++ return 0;
++}
++
++arch_initcall(ep93xx_dma_init);
++
++EXPORT_SYMBOL(ep93xx_dma_free);
++EXPORT_SYMBOL(ep93xx_dma_request);
++EXPORT_SYMBOL(ep93xx_dma_flush);
++EXPORT_SYMBOL(ep93xx_dma_pause);
++EXPORT_SYMBOL(ep93xx_dma_remove_buffer);
++EXPORT_SYMBOL(ep93xx_dma_add_buffer);
++EXPORT_SYMBOL(ep93xx_dma_start);
++EXPORT_SYMBOL(ep93xx_dma_config);
+--- /dev/null
++++ linux-2.6.31/arch/arm/mach-ep93xx/dma_ep93xx.h
+@@ -0,0 +1,676 @@
++/*****************************************************************************
++ *
++ * arch/arm/mach-ep93xx/dma_ep93xx.h
++ *
++ * DESCRIPTION: 93XX DMA controller API private defintions.
++ *
++ * Copyright Cirrus Logic Corporation, 2003. All rights reserved
++ *
++ * 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 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, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ ****************************************************************************/
++#ifndef _EP93XX_DMA_H_
++#define _EP93XX_DMA_H_
++
++// as it turns out the ide dma is the biggest dma buffer hog so far
++// in case the HDD is "thinking" (seek/buffer flush)
++// the continueing r/w DMAs to the HDD will be queued up to up to PRD_ENTRIES entries...
++#include <linux/ide.h>
++#define MAX_EP93XX_DMA_BUFFERS PRD_ENTRIES
++
++#ifndef TRUE
++#define TRUE 1
++#endif
++
++#ifndef FALSE
++#define FALSE 0
++#endif
++
++#ifndef NULL
++#define NULL 0
++#endif
++
++#define EP93XX_DMA_BASE (EP93XX_AHB_VIRT_BASE + 0x00000000)
++
++/*****************************************************************************
++ * 0x8000.0000 -> 0x8000.003C M2P Channel 0 Registers (Tx)
++ * 0x8000.0040 -> 0x8000.007C M2P Channel 1 Registers (Rx)
++ * 0x8000.0080 -> 0x8000.00BC M2P Channel 2 Registers (Tx)
++ * 0x8000.00C0 -> 0x8000.00FC M2P Channel 3 Registers (Rx)
++ * 0x8000.0100 -> 0x8000.013C M2M Channel 0 Registers
++ * 0x8000.0140 -> 0x8000.017C M2M Channel 1 Registers
++ * 0x8000.0180 -> 0x8000.01BC Not Used
++ * 0x8000.01C0 -> 0x8000.01FC Not Used
++ * 0x8000.0200 -> 0x8000.023C M2P Channel 5 Registers (Rx)
++ * 0x8000.0240 -> 0x8000.027C M2P Channel 4 Registers (Tx)
++ * 0x8000.0280 -> 0x8000.02BC M2P Channel 7 Registers (Rx)
++ * 0x8000.02C0 -> 0x8000.02FC M2P Channel 6 Registers (Tx)
++ * 0x8000.0300 -> 0x8000.033C M2P Channel 9 Registers (Rx)
++ * 0x8000.0340 -> 0x8000.037C M2P Channel 8 Registers (Tx)
++ * 0x8000.0380 DMA Channel Arbitration register
++ * 0x8000.03C0 DMA Global Interrupt register
++ * 0x8000.03C4 -> 0x8000.03FC Not Used
++ *
++ *
++ * Internal M2P/P2M Channel Register Map
++ *
++ * Offset Name Access Bits Reset Value
++ * 0x00 CONTROL R/W 6 0
++ * 0x04 INTERRUPT R/W TC* 3 0
++ * 0x08 PPALLOC R/W 4 channel dependant
++ * (see reg description)
++ * 0x0C STATUS RO 8 0
++ * 0x10 reserved
++ * 0x14 REMAIN RO 16 0
++ * 0X18 Reserved
++ * 0X1C Reserved
++ * 0x20 MAXCNT0 R/W 16 0
++ * 0x24 BASE0 R/W 32 0
++ * 0x28 CURRENT0 RO 32 0
++ * 0x2C Reserved
++ * 0x30 MAXCNT1 R/W 16 0
++ * 0x34 BASE1 R/W 32 0
++ * 0X38 CURRENT1 RO 32 0
++ * 0X3C Reserved
++ *
++ * M2M Channel Register Map
++ * Offset Name Access Bits Reset Value
++ *
++ * 0x00 CONTROL R/W 22 0
++ * 0x04 INTERRUPT R/W TC* 3 0
++ * 0x08 Reserved
++ * 0x0C STATUS R/W TC* 14 0
++ * 0x10 BCR0 R/W 16 0
++ * 0x14 BCR1 R/W 16 0
++ * 0x18 SAR_BASE0 R/W 32 0
++ * 0x1C SAR_BASE1 R/W 32 0
++ * 0x20 Reserved
++ * 0x24 SAR_CURRENT0 RO 32 0
++ * 0x28 SAR_CURRENT1 RO 32 0
++ * 0x2C DAR_BASE0 R/W 32 0
++ * 0x30 DAR_BASE1 R/W 32 0
++ * 0x34 DAR_CURRENT0 RO 32 0
++ * 0X38 Reserved
++ * 0X3C DAR_CURRENT1 RO 32 0
++ * * Write this location once to clear the bit (see
++ * Interrupt/Status register description for which bits
++ * this rule applies to).
++ *
++ ****************************************************************************/
++
++
++/*----------------------------------------------------------------------------------*/
++/* M2P Registers */
++/*----------------------------------------------------------------------------------*/
++/*
++ * M2P CONTROL register bit defines
++ */
++#define CONTROL_M2P_STALLINTEN 0x00000001 /* Enables the STALL interrupt */
++#define CONTROL_M2P_NFBINTEN 0x00000002 /* Enables the NFB interrupt */
++#define CONTROL_M2P_CHERRORINTEN 0x00000008 /* Enables the ChError interrupt*/
++#define CONTROL_M2P_ENABLE 0x00000010 /* Enables the channel */
++#define CONTROL_M2P_ABRT 0x00000020 /* Determines how DMA behaves in*/
++ /* NEXT state with peripheral */
++ /* error */
++ /* 0: NEXT -> ON, ignore error */
++ /* 1: NEXT -> STALL, disable ch.*/
++#define CONTROL_M2P_ICE 0x00000040 /* Ignore Channel Error */
++
++/*
++ * M2P INTERRUPT register bit defines
++ */
++#define INTERRUPT_M2P_STALLINT 0x00000001 /* Indicates channel stalled. */
++#define INTERRUPT_M2P_NFBINT 0x00000002 /* Indicates channel is hungry. */
++#define INTERRUPT_M2P_CHERRORINT 0x00000008 /* Peripheral detects error */
++
++
++/*
++ * STATUS register bit defines
++ */
++#define STATUS_M2P_STALL 0x00000001 /* A '1' indicates channel is */
++ /* stalled */
++#define STATUS_M2P_NFB 0x00000002 /* A '1' indicates channel has moved*/
++ /* from NEXT state to ON state, but */
++ /* waiting for next buffer to be */
++ /* programmed. */
++#define STATUS_M2P_CHERROR 0x00000008 /* Enables the ChError interrupt */
++#define STATUS_M2P_CURRENT_MASK 0x00000030 /* Current state of the FSM */
++#define STATUS_M2P_CURRENT_SHIFT 4
++#define STATUS_M2P_NEXTBUFFER 0x00000040 /* Informs the int handler after an */
++ /* NFB int which pair of maxcnt and */
++ /* base regs to update. */
++#define STATUS_M2P_BYTES_MASK 0x0000f800 /* number of valid DMA data */
++#define STATUS_M2P_BYTES_SHIFT 7 /* currently in */
++ /* packer/unpacker */
++
++#define STATUS_M2P_DMA_NO_BUF 0x00000000
++#define STATUS_M2P_DMA_BUF_ON 0x00000010
++#define STATUS_M2P_DMA_BUF_NEXT 0x00000020
++
++/*
++ * Register masks to mask off reserved bits after reading register.
++ */
++#define M2P_MASK_PPALLOC 0x0000000f
++#define M2P_MASK_REMAIN 0x0000ffff
++#define M2P_MASK_MAXCNT0 0x0000ffff
++#define M2P_MASK_BASE0 0xffffffff
++#define M2P_MASK_CURRENT0 0xffffffff
++#define M2P_MASK_MAXCNT1 0x0000ffff
++#define M2P_MASK_BASE1 0xffffffff
++#define M2P_MASK_CURRENT1 0xffffffff
++
++
++/*----------------------------------------------------------------------------------*/
++/* M2M Registers */
++/*----------------------------------------------------------------------------------*/
++
++#define CONTROL_M2M_STALLINTEN 0x00000001 /* Enables the STALL interrupt */
++#define CONTROL_M2M_SCT 0x00000002 /* Source Copy Transfer. Setup a */
++ /* block transfer from 1 memory source */
++ /* location. */
++#define CONTROL_M2M_DONEINTEN 0x00000004 /* Enables the DONE interrupt which */
++ /* indicates if the xfer completed */
++ /* successfully */
++#define CONTROL_M2M_ENABLE 0x00000008 /* Enables the channel */
++#define CONTROL_M2M_START 0x00000010 /* Initiates the xfer. 'software trigger' */
++#define CONTROL_M2M_BWC_MASK 0x000001e0 /* Bandwidth control. Indicate number of */
++#define CONTROL_M2M_BWC_SHIFT 5 /* bytes in a transfer. */
++#define CONTROL_M2M_PW_MASK 0x00000600 /* Peripheral width. Used for xfers */
++#define CONTROL_M2M_PW_SHIFT 9 /* between memory and external peripheral. */
++ /* 00: byte, 01: halfword, 10: word. */
++#define CONTROL_M2M_DAH 0x00000800 /* Destination Address Hold */
++#define CONTROL_M2M_SAH 0x00001000 /* Source Address Hold */
++#define CONTROL_M2M_TM_MASK 0x00006000 /* Transfer Mode. 00: sw triggered, */
++#define CONTROL_M2M_TM_SHIFT 13 /* 01: hw initiated M2P, 01: hw initiated P2M */
++#define CONTROL_M2M_ETDP_MASK 0x00018000 /* End-of-Transfer/Terminal Count pin */
++#define CONTROL_M2M_ETDP_SHIFT 15 /* direction and polarity. */
++#define CONTROL_M2M_DACKP 0x00020000 /* DMA acknowledge pin polarity */
++
++#define CONTROL_M2M_DREQP_MASK 0x00180000 /* DMA request pin polarity. must be set */
++#define CONTROL_M2M_DREQP_SHIFT 19 /* before enable bit. */
++#define CONTROL_M2M_NFBINTEN 0x00200000 /* Enables generation of the NFB interrupt. */
++#define CONTROL_M2M_RSS_MASK 0x00c00000 /* Request source selection: */
++#define CONTROL_M2M_RSS_SHIFT 22 /* 000 - External DReq[0] */
++ /* 001 - External DReq[1] */
++ /* 01X - Internal SSPRx */
++ /* 10X - Internal SSPTx */
++ /* 11X - Internal IDE */
++#define CONTROL_M2M_NO_HDSK 0x01000000 /* No handshake. When set the peripheral doesn't */
++ /* require the regular handshake protocal. Must */
++ /* be set for SSP and IDE operations, optional */
++ /* for external peripherals. */
++#define CONTROL_M2M_PWSC_MASK 0xfe000000 /* Peripheral wait states count. Gives the latency */
++#define CONTROL_M2M_PWSC_SHIFT 25 /* (in PCLK cycles) needed by the peripheral to */
++ /* deassert its' request once the M2M xfer w/ DMA */
++ /* is complete. */
++
++/*
++ * M2M INTERRUPT register bit defines
++ */
++#define INTERRUPT_M2M_STALLINT 0x00000001 /* Stall interrupt indicates channel stalled. */
++#define INTERRUPT_M2M_DONEINT 0x00000002 /* Transaction done. */
++#define INTERRUPT_M2M_NFBINT 0x00000004 /* Next frame buffer interrupt indicates */
++ /* channel requires a new buffer */
++
++
++
++/*
++ * M2M STATUS register bit defines
++ */
++#define STATUS_M2M_STALL 0x00000001 /* A '1' indicates channel is stalled */
++#define STATUS_M2M_CURRENTSTATE_MASK 0x0000003e /* Indicates state of M2M Channel control */
++#define STATUS_M2M_CURRENTSTATE_SHIFT 1 /* FSM (0-2): */
++ /* 000 - IDLE, 001 - STALL, 010 - MEM_RD, */
++ /* 011 - MEM_WR, 100 - BWC_WAIT */
++ /* and M2M buffer FSM (3-2): */
++ /* 00 - NO_BUF, 01 - BUF_ON, 10 - BUF_NEXT */
++#define STATUS_M2M_DONE 0x00000040 /* Transfer completed successfully if 1. */
++#define STATUS_M2M_TCS_MASK 0x00000180 /* Terminal Count status. Indicates whether or */
++#define STATUS_M2M_TCS_SHIFT 7 /* or not the actual byte count reached */
++ /* programmed limit for buffer descriptor */
++#define STATUS_M2M_EOTS_MASK 0x00000600 /* End-of-Transfer status for buffer */
++#define STATUS_M2M_EOTS_SHIFT 9
++#define STATUS_M2M_NFB 0x00000800 /* A '1' indicates channel has moved */
++ /* from NEXT state to ON state, but the next */
++ /* byte count reg for next buffer has not been */
++ /* programmed yet. */
++#define STATUS_M2M_NB 0x00001000 /* NextBuffer status. Informs NFB service */
++ /* routine, after NFB int, which pair of buffer */
++ /* descriptor registers is free to update. */
++#define STATUS_M2M_DREQS 0x00002000 /* DREQ status. Reflects the status of the */
++ /* synchronized external peripherals DMA */
++ /* request signal. */
++
++/*
++ * Register masks to mask off reserved bits after reading register.
++ */
++#define M2M_MASK_BCR0 0x0000ffff
++#define M2M_MASK_BCR1 0x0000ffff
++#define M2M_MASK_SAR_BASE0 0xffffffff
++#define M2M_MASK_SAR_BASE1 0xffffffff
++#define M2M_MASK_SAR_CURRENT0 0xffffffff
++#define M2M_MASK_SAR_CURRENT1 0xffffffff
++#define M2M_MASK_DAR_BASE0 0xffffffff
++#define M2M_MASK_DAR_BASE1 0xffffffff
++#define M2M_MASK_DAR_CURRENT0 0xffffffff
++#define M2M_MASK_DAR_CURRENT1 0xffffffff
++
++
++//
++/* 8000_0000 - 8000_ffff: DMA */
++#define DMA_OFFSET 0x000000
++#define DMA_BASE (EP93XX_DMA_BASE)
++#define DMAMP_TX_0_CONTROL (DMA_BASE+0x0000)
++#define DMAMP_TX_0_INTERRUPT (DMA_BASE+0x0004)
++#define DMAMP_TX_0_PPALLOC (DMA_BASE+0x0008)
++#define DMAMP_TX_0_STATUS (DMA_BASE+0x000C)
++#define DMAMP_TX_0_REMAIN (DMA_BASE+0x0014)
++#define DMAMP_TX_0_MAXCNT0 (DMA_BASE+0x0020)
++#define DMAMP_TX_0_BASE0 (DMA_BASE+0x0024)
++#define DMAMP_TX_0_CURRENT0 (DMA_BASE+0x0028)
++#define DMAMP_TX_0_MAXCNT1 (DMA_BASE+0x0030)
++#define DMAMP_TX_0_BASE1 (DMA_BASE+0x0034)
++#define DMAMP_TX_0_CURRENT1 (DMA_BASE+0x0038)
++
++#define DMAMP_RX_1_CONTROL (DMA_BASE+0x0040)
++#define DMAMP_RX_1_INTERRUPT (DMA_BASE+0x0044)
++#define DMAMP_RX_1_PPALLOC (DMA_BASE+0x0048)
++#define DMAMP_RX_1_STATUS (DMA_BASE+0x004C)
++#define DMAMP_RX_1_REMAIN (DMA_BASE+0x0054)
++#define DMAMP_RX_1_MAXCNT0 (DMA_BASE+0x0060)
++#define DMAMP_RX_1_BASE0 (DMA_BASE+0x0064)
++#define DMAMP_RX_1_CURRENT0 (DMA_BASE+0x0068)
++#define DMAMP_RX_1_MAXCNT1 (DMA_BASE+0x0070)
++#define DMAMP_RX_1_BASE1 (DMA_BASE+0x0074)
++#define DMAMP_RX_1_CURRENT1 (DMA_BASE+0x0078)
++
++#define DMAMP_TX_2_CONTROL (DMA_BASE+0x0080)
++#define DMAMP_TX_2_INTERRUPT (DMA_BASE+0x0084)
++#define DMAMP_TX_2_PPALLOC (DMA_BASE+0x0088)
++#define DMAMP_TX_2_STATUS (DMA_BASE+0x008C)
++#define DMAMP_TX_2_REMAIN (DMA_BASE+0x0094)
++#define DMAMP_TX_2_MAXCNT0 (DMA_BASE+0x00A0)
++#define DMAMP_TX_2_BASE0 (DMA_BASE+0x00A4)
++#define DMAMP_TX_2_CURRENT0 (DMA_BASE+0x00A8)
++#define DMAMP_TX_2_MAXCNT1 (DMA_BASE+0x00B0)
++#define DMAMP_TX_2_BASE1 (DMA_BASE+0x00B4)
++#define DMAMP_TX_2_CURRENT1 (DMA_BASE+0x00B8)
++
++#define DMAMP_RX_3_CONTROL (DMA_BASE+0x00C0)
++#define DMAMP_RX_3_INTERRUPT (DMA_BASE+0x00C4)
++#define DMAMP_RX_3_PPALLOC (DMA_BASE+0x00C8)
++#define DMAMP_RX_3_STATUS (DMA_BASE+0x00CC)
++#define DMAMP_RX_3_REMAIN (DMA_BASE+0x00D4)
++#define DMAMP_RX_3_MAXCNT0 (DMA_BASE+0x00E0)
++#define DMAMP_RX_3_BASE0 (DMA_BASE+0x00E4)
++#define DMAMP_RX_3_CURRENT0 (DMA_BASE+0x00E8)
++#define DMAMP_RX_3_MAXCNT1 (DMA_BASE+0x00F0)
++#define DMAMP_RX_3_BASE1 (DMA_BASE+0x00F4)
++#define DMAMP_RX_3_CURRENT1 (DMA_BASE+0x00F8)
++
++#define DMAMM_0_CONTROL (DMA_BASE+0x0100)
++#define DMAMM_0_INTERRUPT (DMA_BASE+0x0104)
++#define DMAMM_0_STATUS (DMA_BASE+0x010C)
++#define DMAMM_0_BCR0 (DMA_BASE+0x0110)
++#define DMAMM_0_BCR1 (DMA_BASE+0x0114)
++#define DMAMM_0_SAR_BASE0 (DMA_BASE+0x0118)
++#define DMAMM_0_SAR_BASE1 (DMA_BASE+0x011C)
++#define DMAMM_0_SAR_CURRENT0 (DMA_BASE+0x0124)
++#define DMAMM_0_SAR_CURRENT1 (DMA_BASE+0x0128)
++#define DMAMM_0_DAR_BASE0 (DMA_BASE+0x012C)
++#define DMAMM_0_DAR_BASE1 (DMA_BASE+0x0130)
++#define DMAMM_0_DAR_CURRENT0 (DMA_BASE+0x0134)
++#define DMAMM_0_DAR_CURRENT1 (DMA_BASE+0x013C)
++
++#define DMAMM_1_CONTROL (DMA_BASE+0x0140)
++#define DMAMM_1_INTERRUPT (DMA_BASE+0x0144)
++#define DMAMM_1_STATUS (DMA_BASE+0x014C)
++#define DMAMM_1_BCR0 (DMA_BASE+0x0150)
++#define DMAMM_1_BCR1 (DMA_BASE+0x0154)
++#define DMAMM_1_SAR_BASE0 (DMA_BASE+0x0158)
++#define DMAMM_1_SAR_BASE1 (DMA_BASE+0x015C)
++#define DMAMM_1_SAR_CURRENT0 (DMA_BASE+0x0164)
++#define DMAMM_1_SAR_CURRENT1 (DMA_BASE+0x0168)
++#define DMAMM_1_DAR_BASE0 (DMA_BASE+0x016C)
++#define DMAMM_1_DAR_BASE1 (DMA_BASE+0x0170)
++#define DMAMM_1_DAR_CURRENT0 (DMA_BASE+0x0174)
++#define DMAMM_1_DAR_CURRENT1 (DMA_BASE+0x017C)
++
++#define DMAMP_RX_5_CONTROL (DMA_BASE+0x0200)
++#define DMAMP_RX_5_INTERRUPT (DMA_BASE+0x0204)
++#define DMAMP_RX_5_PPALLOC (DMA_BASE+0x0208)
++#define DMAMP_RX_5_STATUS (DMA_BASE+0x020C)
++#define DMAMP_RX_5_REMAIN (DMA_BASE+0x0214)
++#define DMAMP_RX_5_MAXCNT0 (DMA_BASE+0x0220)
++#define DMAMP_RX_5_BASE0 (DMA_BASE+0x0224)
++#define DMAMP_RX_5_CURRENT0 (DMA_BASE+0x0228)
++#define DMAMP_RX_5_MAXCNT1 (DMA_BASE+0x0230)
++#define DMAMP_RX_5_BASE1 (DMA_BASE+0x0234)
++#define DMAMP_RX_5_CURRENT1 (DMA_BASE+0x0238)
++
++#define DMAMP_TX_4_CONTROL (DMA_BASE+0x0240)
++#define DMAMP_TX_4_INTERRUPT (DMA_BASE+0x0244)
++#define DMAMP_TX_4_PPALLOC (DMA_BASE+0x0248)
++#define DMAMP_TX_4_STATUS (DMA_BASE+0x024C)
++#define DMAMP_TX_4_REMAIN (DMA_BASE+0x0254)
++#define DMAMP_TX_4_MAXCNT0 (DMA_BASE+0x0260)
++#define DMAMP_TX_4_BASE0 (DMA_BASE+0x0264)
++#define DMAMP_TX_4_CURRENT0 (DMA_BASE+0x0268)
++#define DMAMP_TX_4_MAXCNT1 (DMA_BASE+0x0270)
++#define DMAMP_TX_4_BASE1 (DMA_BASE+0x0274)
++#define DMAMP_TX_4_CURRENT1 (DMA_BASE+0x0278)
++
++#define DMAMP_RX_7_CONTROL (DMA_BASE+0x0280)
++#define DMAMP_RX_7_INTERRUPT (DMA_BASE+0x0284)
++#define DMAMP_RX_7_PPALLOC (DMA_BASE+0x0288)
++#define DMAMP_RX_7_STATUS (DMA_BASE+0x028C)
++#define DMAMP_RX_7_REMAIN (DMA_BASE+0x0294)
++#define DMAMP_RX_7_MAXCNT0 (DMA_BASE+0x02A0)
++#define DMAMP_RX_7_BASE0 (DMA_BASE+0x02A4)
++#define DMAMP_RX_7_CURRENT0 (DMA_BASE+0x02A8)
++#define DMAMP_RX_7_MAXCNT1 (DMA_BASE+0x02B0)
++#define DMAMP_RX_7_BASE1 (DMA_BASE+0x02B4)
++#define DMAMP_RX_7_CURRENT1 (DMA_BASE+0x02B8)
++
++#define DMAMP_TX_6_CONTROL (DMA_BASE+0x02C0)
++#define DMAMP_TX_6_INTERRUPT (DMA_BASE+0x02C4)
++#define DMAMP_TX_6_PPALLOC (DMA_BASE+0x02C8)
++#define DMAMP_TX_6_STATUS (DMA_BASE+0x02CC)
++#define DMAMP_TX_6_REMAIN (DMA_BASE+0x02D4)
++#define DMAMP_TX_6_MAXCNT0 (DMA_BASE+0x02E0)
++#define DMAMP_TX_6_BASE0 (DMA_BASE+0x02E4)
++#define DMAMP_TX_6_CURRENT0 (DMA_BASE+0x02E8)
++#define DMAMP_TX_6_MAXCNT1 (DMA_BASE+0x02F0)
++#define DMAMP_TX_6_BASE1 (DMA_BASE+0x02F4)
++#define DMAMP_TX_6_CURRENT1 (DMA_BASE+0x02F8)
++
++#define DMAMP_RX_9_CONTROL (DMA_BASE+0x0300)
++#define DMAMP_RX_9_INTERRUPT (DMA_BASE+0x0304)
++#define DMAMP_RX_9_PPALLOC (DMA_BASE+0x0308)
++#define DMAMP_RX_9_STATUS (DMA_BASE+0x030C)
++#define DMAMP_RX_9_REMAIN (DMA_BASE+0x0314)
++#define DMAMP_RX_9_MAXCNT0 (DMA_BASE+0x0320)
++#define DMAMP_RX_9_BASE0 (DMA_BASE+0x0324)
++#define DMAMP_RX_9_CURRENT0 (DMA_BASE+0x0328)
++#define DMAMP_RX_9_MAXCNT1 (DMA_BASE+0x0330)
++#define DMAMP_RX_9_BASE1 (DMA_BASE+0x0334)
++#define DMAMP_RX_9_CURRENT1 (DMA_BASE+0x0338)
++
++#define DMAMP_TX_8_CONTROL (DMA_BASE+0x0340)
++#define DMAMP_TX_8_INTERRUPT (DMA_BASE+0x0344)
++#define DMAMP_TX_8_PPALLOC (DMA_BASE+0x0348)
++#define DMAMP_TX_8_STATUS (DMA_BASE+0x034C)
++#define DMAMP_TX_8_REMAIN (DMA_BASE+0x0354)
++#define DMAMP_TX_8_MAXCNT0 (DMA_BASE+0x0360)
++#define DMAMP_TX_8_BASE0 (DMA_BASE+0x0364)
++#define DMAMP_TX_8_CURRENT0 (DMA_BASE+0x0368)
++#define DMAMP_TX_8_MAXCNT1 (DMA_BASE+0x0370)
++#define DMAMP_TX_8_BASE1 (DMA_BASE+0x0374)
++#define DMAMP_TX_8_CURRENT1 (DMA_BASE+0x0378)
++
++#define DMA_ARBITRATION (DMA_BASE+0x0380)
++#define DMA_INTERRUPT (DMA_BASE+0x03C0)
++
++
++/*
++ * DMA Register Base addresses and Offsets
++ */
++#define DMA_M2P_TX_0_BASE DMAMP_TX_0_CONTROL
++#define DMA_M2P_RX_1_BASE DMAMP_RX_1_CONTROL
++#define DMA_M2P_TX_2_BASE DMAMP_TX_2_CONTROL
++#define DMA_M2P_RX_3_BASE DMAMP_RX_3_CONTROL
++#define DMA_M2M_0_BASE DMAMM_0_CONTROL
++#define DMA_M2M_1_BASE DMAMM_1_CONTROL
++#define DMA_M2P_RX_5_BASE DMAMP_RX_5_CONTROL
++#define DMA_M2P_TX_4_BASE DMAMP_TX_4_CONTROL
++#define DMA_M2P_RX_7_BASE DMAMP_RX_7_CONTROL
++#define DMA_M2P_TX_6_BASE DMAMP_TX_6_CONTROL
++#define DMA_M2P_RX_9_BASE DMAMP_RX_9_CONTROL
++#define DMA_M2P_TX_8_BASE DMAMP_TX_8_CONTROL
++
++#define M2P_OFFSET_CONTROL 0x0000
++#define M2P_OFFSET_INTERRUPT 0x0004
++#define M2P_OFFSET_PPALLOC 0x0008
++#define M2P_OFFSET_STATUS 0x000C
++#define M2P_OFFSET_REMAIN 0x0014
++#define M2P_OFFSET_MAXCNT0 0x0020
++#define M2P_OFFSET_BASE0 0x0024
++#define M2P_OFFSET_CURRENT0 0x0028
++#define M2P_OFFSET_MAXCNT1 0x0030
++#define M2P_OFFSET_BASE1 0x0034
++#define M2P_OFFSET_CURRENT1 0x0038
++
++#define M2M_OFFSET_CONTROL 0x0000
++#define M2M_OFFSET_INTERRUPT 0x0004
++#define M2M_OFFSET_STATUS 0x000C
++#define M2M_OFFSET_BCR0 0x0010
++#define M2M_OFFSET_BCR1 0x0014
++#define M2M_OFFSET_SAR_BASE0 0x0018
++#define M2M_OFFSET_SAR_BASE1 0x001C
++#define M2M_OFFSET_SAR_CURRENT0 0x0024
++#define M2M_OFFSET_SAR_CURRENT1 0x0028
++#define M2M_OFFSET_DAR_BASE0 0x002C
++#define M2M_OFFSET_DAR_BASE1 0x0030
++#define M2M_OFFSET_DAR_CURRENT0 0x0034
++#define M2M_OFFSET_DAR_CURRENT1 0x003C
++
++
++
++//-----------------------------------------------------------------------------
++// PWRCNT Register Defines
++//-----------------------------------------------------------------------------
++#define SYSCON_PWRCNT_FIREN 0x80000000
++#define SYSCON_PWRCNT_UARTBAUD 0x20000000
++#define SYSCON_PWRCNT_USHEN 0x10000000
++#define SYSCON_PWRCNT_DMA_M2MCH1 0x08000000
++#define SYSCON_PWRCNT_DMA_M2MCH0 0x04000000
++#define SYSCON_PWRCNT_DMA_M2PCH8 0x02000000
++#define SYSCON_PWRCNT_DMA_M2PCH9 0x01000000
++#define SYSCON_PWRCNT_DMA_M2PCH6 0x00800000
++#define SYSCON_PWRCNT_DMA_M2PCH7 0x00400000
++#define SYSCON_PWRCNT_DMA_M2PCH4 0x00200000
++#define SYSCON_PWRCNT_DMA_M2PCH5 0x00100000
++#define SYSCON_PWRCNT_DMA_M2PCH2 0x00080000
++#define SYSCON_PWRCNT_DMA_M2PCH3 0x00040000
++#define SYSCON_PWRCNT_DMA_M2PCH0 0x00020000
++#define SYSCON_PWRCNT_DMA_M2PCH1 0x00010000
++
++#ifndef __ASSEMBLY__
++/*
++ * DMA Register Base addresses
++ */
++static unsigned int const DMAM2PChannelBase[10] =
++{
++ DMA_M2P_TX_0_BASE,
++ DMA_M2P_RX_1_BASE,
++ DMA_M2P_TX_2_BASE,
++ DMA_M2P_RX_3_BASE,
++ DMA_M2P_TX_4_BASE,
++ DMA_M2P_RX_5_BASE,
++ DMA_M2P_TX_6_BASE,
++ DMA_M2P_RX_7_BASE,
++ DMA_M2P_TX_8_BASE,
++ DMA_M2P_RX_9_BASE
++};
++
++static unsigned int const DMAM2MChannelBase[2] =
++{
++ DMA_M2M_0_BASE,
++ DMA_M2M_1_BASE
++};
++
++#endif /* __ASSEMBLY__ */
++
++/*****************************************************************************
++ *
++ * DMA buffer structure type.
++ *
++ ****************************************************************************/
++typedef struct ep93xx_dma_buffer_s
++{
++ unsigned int source; /* buffer physical source address. */
++ unsigned int dest; /* buffer physical destination address, */
++ /* only used with the 2 M2M channels. */
++ unsigned int size; /* buffer size in bytes */
++ unsigned int last; /* 1 if this is the last buffer */
++ /* in this transaction. If 1, */
++ /* disable the NFBint so we aren't */
++ /* interrupted for another buffer */
++ /* when we know there won't be another. */
++ unsigned int used; /* This field is set to 1 by the DMA */
++ /* interface after the buffer is transferred*/
++ int buf_id; /* unique identifyer specified by the */
++ /* the driver which requested the dma */
++} ep93xx_dma_buffer_t;
++
++typedef ep93xx_dma_buffer_t * ep93xx_dma_buffer_p;
++
++/*****************************************************************************
++ *
++ * Instance definition for the DMA interface.
++ *
++ ****************************************************************************/
++typedef struct ep9312_dma_s
++{
++ /*
++ * This 1 when the instance is in use, and 0 when it's not.
++ */
++ unsigned int ref_count;
++
++ /*
++ * This is the last valid handle for this instance. When giving out a
++ * new handle this will be incremented and given out.
++ */
++ int last_valid_handle;
++
++ /*
++ * device specifies one of the 20 DMA hardware ports this
++ * DMA channel will service.
++ */
++ ep93xx_dma_dev_t device;
++
++ /*
++ * DMABufferQueue is the queue of buffer structure pointers which the
++ * dma channel will use to setup transfers.
++ */
++ ep93xx_dma_buffer_t buffer_queue[MAX_EP93XX_DMA_BUFFERS];
++
++ /*
++ * currnt_buffer : This is the buffer currently being transfered on
++ * this channel.
++ * last_buffer : This is the last buffer for this transfer.
++ * Note: current_buffer + 1 is already programmed into the dma
++ * channel as the next buffer to transfer. Don't write
++ * over either entry.
++ */
++ int current_buffer;
++ int last_buffer;
++
++ /*
++ * The following 3 fields are buffer counters.
++ *
++ * iNewBuffers: Buffers in the queue which have not been transfered.
++ * iUsedBuffers: Buffers in the queue which have have been tranferred,
++ * and are waiting to be returned.
++ * iTotalBuffers: Total number of buffers in the queue.
++ */
++ int new_buffers;
++ int used_buffers;
++ int total_buffers;
++
++ /*
++ * uiTotalBytes has the total bytes transfered on the channel since the
++ * last flush. This value does not include the bytes tranfered in the
++ * current buffer. A byte count is only added after a complete buffer
++ * is tranfered.
++ */
++ unsigned int total_bytes;
++
++ /*
++ * Interrupt number for this channel
++ */
++ unsigned int irq;
++
++ /*
++ * Indicates whether or not the channel is currently enabled to transfer
++ * data.
++ */
++ unsigned int xfer_enable;
++
++ /*
++ * pause indicates if the dma channel was paused by calling the pause
++ * ioctl.
++ */
++ unsigned int pause;
++
++ /*
++ * buffer structure used during a pause to capture the current
++ * address and remaining bytes for the buffer actively being transferred
++ * on the channel. This buffer will be used to reprogram the dma
++ * channel upon a resume.
++ */
++ ep93xx_dma_buffer_t pause_buf;
++
++ /*
++ * DMACallback is a function pointer which the calling application can
++ * use install a function to. this fuction can be used to notify the
++ * calling application of an interrupt.
++ */
++ dma_callback callback;
++
++ /*
++ * User data used as a parameter for the Callback function. The user
++ * sets up the data and sends it with the callback function.
++ */
++ unsigned int user_data;
++
++ /*
++ * A string representation of the device attached to the channel.
++ */
++ const char * device_id;
++
++ /*
++ * The register base address for this dma channel.
++ */
++ unsigned int reg_base;
++
++ /*
++ * terminated indicates
++ */
++ unsigned int terminated;
++
++
++} ep93xx_dma_t;
++
++/*****************************************************************************
++ *
++ * DMA macros
++ *
++ ****************************************************************************/
++#define DMA_HANDLE_SPECIFIER_MASK 0xF0000000
++#define DMA_CH0_HANDLE_SPECIFIER 0x00000000
++#define DMA_CH1_HANDLE_SPECIFIER 0x10000000
++#define DMA_CH2_HANDLE_SPECIFIER 0x20000000
++#define DMA_CH3_HANDLE_SPECIFIER 0x30000000
++#define DMA_CH4_HANDLE_SPECIFIER 0x40000000
++#define DMA_CH5_HANDLE_SPECIFIER 0x50000000
++#define DMA_CH6_HANDLE_SPECIFIER 0x60000000
++#define DMA_CH7_HANDLE_SPECIFIER 0x70000000
++#define DMA_CH8_HANDLE_SPECIFIER 0x80000000
++#define DMA_CH9_HANDLE_SPECIFIER 0x90000000
++#define DMA_CH10_HANDLE_SPECIFIER 0xA0000000
++#define DMA_CH11_HANDLE_SPECIFIER 0xB0000000
++
++#endif // _DMADRV_H_
diff --git a/recipes/linux/linux-2.6.32/ep93xx/ep93xx-eth.patch b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-eth.patch
new file mode 100644
index 0000000000..776cafcbf5
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-eth.patch
@@ -0,0 +1,2718 @@
+Index: linux-2.6.24.7/drivers/net/arm/ep93xx_eth.c
+===================================================================
+--- linux-2.6.24.7.orig/drivers/net/arm/ep93xx_eth.c 2009-09-16 17:26:48.000000000 +0100
++++ linux-2.6.24.7/drivers/net/arm/ep93xx_eth.c 2009-09-16 17:38:23.000000000 +0100
+@@ -1,916 +1,1586 @@
+-/*
+- * EP93xx ethernet network device driver
+- * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org>
+- * Dedicated to Marija Kulikova.
+- *
+- * 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 of the License, or
+- * (at your option) any later version.
+- */
+-
+-#include <linux/dma-mapping.h>
++/*----------------------------------------------------------------------------
++ * ep93xx_eth.c
++ * Ethernet Device Driver for Cirrus Logic EP93xx.
++ *
++ * Copyright (C) 2003 by Cirrus Logic www.cirrus.com
++ * This software may be used and distributed according to the terms
++ * of the GNU Public License.
++ *
++ * This driver was written based on skeleton.c by Donald Becker and
++ * smc9194.c by Erik Stahlman.
++ *
++ * Theory of Operation
++ * Driver Configuration
++ * - Getting MAC address from system
++ * To setup identical MAC address for each target board, driver need
++ * to get a MAC address from system. Normally, system has a Serial
++ * EEPROM or other media to store individual MAC address when
++ * manufacturing.
++ * The macro GET_MAC_ADDR is prepared to get the MAC address from
++ * system and one should supply a routine for this purpose.
++ * Driver Initialization
++ * DMA Operation
++ * Cache Coherence
++ *
++ * History:
++ * 07/19/01 0.1 Sungwook Kim initial release
++ * 10/16/01 0.2 Sungwook Kim add workaround for ignorance of Tx request while sending frame
++ * add some error stuations handling
++ *
++ * 03/25/03 Melody Lee Modified for EP93xx
++ *--------------------------------------------------------------------------*/
+ #include <linux/module.h>
++#include <linux/version.h>
+ #include <linux/kernel.h>
+-#include <linux/netdevice.h>
+-#include <linux/mii.h>
+-#include <linux/etherdevice.h>
+-#include <linux/ethtool.h>
+-#include <linux/init.h>
+-#include <linux/moduleparam.h>
+-#include <linux/platform_device.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/in.h>
+ #include <linux/delay.h>
+-#include <asm/arch/ep93xx-regs.h>
+-#include <asm/arch/platform.h>
++#include <linux/slab.h>
++#include <linux/string.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
+ #include <asm/io.h>
++#include <asm/dma.h>
++#include <asm/irq.h>
++#include <linux/errno.h>
++#include <linux/init.h>
+
+-#define DRV_MODULE_NAME "ep93xx-eth"
+-#define DRV_MODULE_VERSION "0.1"
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
+
+-#define RX_QUEUE_ENTRIES 64
+-#define TX_QUEUE_ENTRIES 8
++#include <asm/arch/hardware.h>
+
+-#define MAX_PKT_SIZE 2044
+-#define PKT_BUF_SIZE 2048
++#include "ep93xx_eth.h"
+
+-#define REG_RXCTL 0x0000
+-#define REG_RXCTL_DEFAULT 0x00073800
+-#define REG_TXCTL 0x0004
+-#define REG_TXCTL_ENABLE 0x00000001
+-#define REG_MIICMD 0x0010
+-#define REG_MIICMD_READ 0x00008000
+-#define REG_MIICMD_WRITE 0x00004000
+-#define REG_MIIDATA 0x0014
+-#define REG_MIISTS 0x0018
+-#define REG_MIISTS_BUSY 0x00000001
+-#define REG_SELFCTL 0x0020
+-#define REG_SELFCTL_RESET 0x00000001
+-#define REG_INTEN 0x0024
+-#define REG_INTEN_TX 0x00000008
+-#define REG_INTEN_RX 0x00000007
+-#define REG_INTSTSP 0x0028
+-#define REG_INTSTS_TX 0x00000008
+-#define REG_INTSTS_RX 0x00000004
+-#define REG_INTSTSC 0x002c
+-#define REG_AFP 0x004c
+-#define REG_INDAD0 0x0050
+-#define REG_INDAD1 0x0051
+-#define REG_INDAD2 0x0052
+-#define REG_INDAD3 0x0053
+-#define REG_INDAD4 0x0054
+-#define REG_INDAD5 0x0055
+-#define REG_GIINTMSK 0x0064
+-#define REG_GIINTMSK_ENABLE 0x00008000
+-#define REG_BMCTL 0x0080
+-#define REG_BMCTL_ENABLE_TX 0x00000100
+-#define REG_BMCTL_ENABLE_RX 0x00000001
+-#define REG_BMSTS 0x0084
+-#define REG_BMSTS_RX_ACTIVE 0x00000008
+-#define REG_RXDQBADD 0x0090
+-#define REG_RXDQBLEN 0x0094
+-#define REG_RXDCURADD 0x0098
+-#define REG_RXDENQ 0x009c
+-#define REG_RXSTSQBADD 0x00a0
+-#define REG_RXSTSQBLEN 0x00a4
+-#define REG_RXSTSQCURADD 0x00a8
+-#define REG_RXSTSENQ 0x00ac
+-#define REG_TXDQBADD 0x00b0
+-#define REG_TXDQBLEN 0x00b4
+-#define REG_TXDQCURADD 0x00b8
+-#define REG_TXDENQ 0x00bc
+-#define REG_TXSTSQBADD 0x00c0
+-#define REG_TXSTSQBLEN 0x00c4
+-#define REG_TXSTSQCURADD 0x00c8
+-#define REG_MAXFRMLEN 0x00e8
++/*----------------------------------------------------------------------------
++ * The name of the card.
++ * It is used for messages and in the requests for io regions, irqs and ...
++ * This device is not in a card but I used same name in skeleton.c file.
++ *--------------------------------------------------------------------------*/
++#define cardname "ep93xx-eth"
++
++
++/**** default MAC address *************/
++static const U8 default_mac[6] = {0x00, 0xba, 0xd0, 0x0b, 0xad, 0x00};
++
++/*----------------------------------------------------------------------------
++ * Some definitions belong to the operation of this driver.
++ * You should understand how it affect to driver before any modification.
++ *--------------------------------------------------------------------------*/
++
++/**** Interrupt Sources in Use *******************************************/
++/*#define Default_IntSrc (IntEn_RxMIE|IntEn_RxSQIE|IntEn_TxLEIE|IntEn_TIE|IntEn_TxSQIE|IntEn_RxEOFIE|IntEn_RxEOBIE|IntEn_RxHDRIE)
++*/
++#define Default_IntSrc (IntEn_TxSQIE|IntEn_RxEOFIE|IntEn_RxEOBIE|IntEn_RxHDRIE)
++
++/**** Length of Device Queue in number of entries
++ (must be less than or equal to 255) ********************************/
++#define LEN_QueRxDesc 64 /*length of Rx Descriptor Queue (4 or bigger) Must be power of 2.*/
++#define LEN_QueRxSts LEN_QueRxDesc /*length of Rx Status Queue*/
++#define LEN_QueTxDesc 8 /*length of Tx Descriptor Queue (4 or bigger) Must be power of 2.*/
++#define LEN_QueTxSts LEN_QueTxDesc /*length of Tx Status Queue*/
++
++/**** Tx Queue fill-up level control *************************************/
++#define LVL_TxStop LEN_QueTxDesc - 2 /*level to ask the stack to stop Tx*/
++#define LVL_TxResume 2 /*level to ask the stack to resume Tx*/
++
++/**** Rx Buffer length in bytes ******************************************/
++#define LEN_RxBuf (1518+2+16) /*length of Rx buffer, must be 4-byte aligned*/
++#define LEN_TxBuf LEN_RxBuf
++
++/*----------------------------------------------------------------------------
++ * MACRO for ease
++ *--------------------------------------------------------------------------*/
++#define Align32(a) (((unsigned int)(a)+3)&~0x03) /*32bit address alignment*/
++#define IdxNext(idxCur,len) (((idxCur)+1)%(len)) /*calc next array index number*/
++
++/**** malloc/free routine for DMA buffer **********************************/
++ /*use non-cached DMA buffer*/
++#define MALLOC_DMA(size, pPhyAddr) dma_alloc_writecombine(NULL, (size), (dma_addr_t*)(pPhyAddr), GFP_KERNEL | GFP_DMA)
++//#define FREE_DMA(size, vaddr, paddr) dma_free_writecombine(NULL, (size), (vaddr), (paddr))
+
+-struct ep93xx_rdesc
+-{
+- u32 buf_addr;
+- u32 rdesc1;
+-};
++/*----------------------------------------------------------------------------
++ * DEBUGGING LEVELS
++ *
++ * 0 for normal operation
++ * 1 for slightly more details
++ * >2 for various levels of increasingly useless information
++ * 2 for interrupt tracking, status flags
++ * 3 for packet dumps, etc.
++ *--------------------------------------------------------------------------*/
++//#define _DBG_3
++//#define _DBG_2
++//#define _DBG_1
++//#define _DBG
++
++#ifdef _DBG_3
++#define PRINTK3( fmt, arg... ) printk( fmt, ##arg )
++#else
++#define PRINTK3( fmt, arg... )
++#endif
++
++#ifdef _DBG_2
++#define PRINTK2( fmt, arg... ) printk( fmt, ##arg )
++#else
++#define PRINTK2( fmt, arg... )
++#endif
++
++#ifdef _DBG_1
++#define PRINTK1( fmt, arg... ) printk( fmt, ##arg )
++#else
++#define PRINTK1( fmt, arg... )
++#endif
++
++#ifdef _DBG
++#define PRINTK(x) printk x
++#else
++#define PRINTK(x)
++#endif
++
++
++
++#define _PRTK_ENTRY PRINTK2 /*to trace function entries*/
++#define _PRTK_SWERR PRINTK /*logical S/W error*/
++#define _PRTK_SYSFAIL PRINTK /*system service failure*/
++#define _PRTK_HWFAIL PRINTK /*H/W operation failure message*/
++#define _PRTK_WARN PRINTK1 /*warning information*/
++#define _PRTK_INFO PRINTK2 /*general information*/
++#define _PRTK_ENTRY_ISR PRINTK3 /*to trace function entries belong to ISR*/
++#define _PRTK_WARN_ISR PRINTK1 /*warning informations from ISR*/
++#define _PRTK_INFO_ISR PRINTK3 /*general informations from ISR*/
++#define _PRTK_ PRINTK /*for temporary print out*/
++
++#if 0
++# define _PRTK_DUMP PRINTK1 /*to dump large amount of debug info*/
++#endif
++
++/*----------------------------------------------------------------------------
++ * Custom Data Structures
++ *--------------------------------------------------------------------------*/
++
++/**** the information about the buffer passed to device.
++ there are matching bufferDescriptor informations
++ for each Tx/Rx Descriptor Queue entry to trace
++ the buffer within those queues. ************************************/
++typedef struct bufferDescriptor {
++ void *vaddr; /*virtual address representing the buffer passed to device*/
++ int(*pFreeRtn)(void *pBuf); /*free routine*/
++} bufferDescriptor;
++
++/**** device privite informations
++ pointed by struct net_device::priv *********************************/
++typedef struct ep93xxEth_info {
++ /**** static device informations **********************************/
++ struct {
++ int id; /*device instance ID (0 for 1st and so on)
++ must be first element of this structure*/
++ receiveDescriptor *pQueRxDesc; /*pointer to Rx Descriptor Queue*/
++ receiveStatus *pQueRxSts; /*pointer to Rx Status Queue*/
++ transmitDescriptor *pQueTxDesc; /*pointer to Tx Descriptor Queue*/
++ transmitStatus *pQueTxSts; /*pointer to Tx Status Queue*/
++ unsigned char *pRxBuf; /*base of Rx Buffer pool*/
++ unsigned char *pTxBuf; /*base of Tx Buffer pool*/
++ unsigned long phyQueueBase; /*physical address of device queues*/
++ unsigned long phyQueRxDesc, /*physical address of Rx Descriptor Queue*/
++ phyQueRxSts, /*physical address of Rx Status Queue*/
++ phyQueTxDesc, /*physical address of Tx Descriptor Queue*/
++ phyQueTxSts, /*physical address of Tx Status Queue*/
++ phyRxBuf, /*physical address of Rx Buffer pool*/
++ phyTxBuf; /*physical address of Tx Buffer pool*/
++ bufferDescriptor *pRxBufDesc, /*info of Rx Buffers*/
++ *pTxBufDesc; /*info of Tx Buffers*/
++ int miiIdPhy; /*MII Bus ID of Ethernet PHY*/
++ } s;
++ /**** dynamic information, subject to clear when device open ******/
++ struct {
++ struct net_device_stats stats; /*statistic data*/
++ int idxQueRxDesc, /*next processing index of device queues*/
++ idxQueRxSts,
++ idxQueTxDescHead,
++ idxQueTxDescTail,
++ idxQueTxSts;
++ int txStopped; /*flag for Tx condition*/
++ } d;
++} ep93xxEth_info;
++
++/*----------------------------------------------------------------------------
++ * Global Variables
++ *--------------------------------------------------------------------------*/
++static int numOfInstance = 0; /*total number of device instance, 0 means the 1st instance.*/
++
++//static struct sk_buff gTxSkb;
++//static char gTxBuff[LEN_TxBuf];
+
+-#define RDESC1_NSOF 0x80000000
+-#define RDESC1_BUFFER_INDEX 0x7fff0000
+-#define RDESC1_BUFFER_LENGTH 0x0000ffff
++//static char gTxDataBuff[LEN_QueTxDesc][LEN_TxBuf];
+
+-struct ep93xx_rstat
+-{
+- u32 rstat0;
+- u32 rstat1;
+-};
++// To know if PHY auto-negotiation has done?
++static int gPhyAutoNegoDone=0;
+
+-#define RSTAT0_RFP 0x80000000
+-#define RSTAT0_RWE 0x40000000
+-#define RSTAT0_EOF 0x20000000
+-#define RSTAT0_EOB 0x10000000
+-#define RSTAT0_AM 0x00c00000
+-#define RSTAT0_RX_ERR 0x00200000
+-#define RSTAT0_OE 0x00100000
+-#define RSTAT0_FE 0x00080000
+-#define RSTAT0_RUNT 0x00040000
+-#define RSTAT0_EDATA 0x00020000
+-#define RSTAT0_CRCE 0x00010000
+-#define RSTAT0_CRCI 0x00008000
+-#define RSTAT0_HTI 0x00003f00
+-#define RSTAT1_RFP 0x80000000
+-#define RSTAT1_BUFFER_INDEX 0x7fff0000
+-#define RSTAT1_FRAME_LENGTH 0x0000ffff
++/*============================================================================
++ *
++ * Internal Routines
++ *
++ *==========================================================================*/
+
+-struct ep93xx_tdesc
++/*****************************************************************************
++* free_skb()
++*****************************************************************************/
++static int
++free_skb(void *pSkb)
+ {
+- u32 buf_addr;
+- u32 tdesc1;
+-};
++ dev_kfree_skb_irq((struct sk_buff*)pSkb);
++ return 0;
++}
+
+-#define TDESC1_EOF 0x80000000
+-#define TDESC1_BUFFER_INDEX 0x7fff0000
+-#define TDESC1_BUFFER_ABORT 0x00008000
+-#define TDESC1_BUFFER_LENGTH 0x00000fff
++/*****************************************************************************
++* waitOnReg32()
++*****************************************************************************/
++static int
++waitOnReg32(struct net_device *pD, int reg, unsigned long mask,
++ unsigned long expect, int tout)
++{
++ int i;
++ int dt;
++
++ for (i = 0; i < 10000; ) {
++ dt = RegRd32(reg);
++ dt = (dt ^ expect) & mask;
++ if (dt == 0)
++ break;
++ if (tout)
++ i++;
++ }
+
+-struct ep93xx_tstat
+-{
+- u32 tstat0;
+-};
++ return dt;
++}
+
+-#define TSTAT0_TXFP 0x80000000
+-#define TSTAT0_TXWE 0x40000000
+-#define TSTAT0_FA 0x20000000
+-#define TSTAT0_LCRS 0x10000000
+-#define TSTAT0_OW 0x04000000
+-#define TSTAT0_TXU 0x02000000
+-#define TSTAT0_ECOLL 0x01000000
+-#define TSTAT0_NCOLL 0x001f0000
+-#define TSTAT0_BUFFER_INDEX 0x00007fff
+-
+-struct ep93xx_descs
+-{
+- struct ep93xx_rdesc rdesc[RX_QUEUE_ENTRIES];
+- struct ep93xx_tdesc tdesc[TX_QUEUE_ENTRIES];
+- struct ep93xx_rstat rstat[RX_QUEUE_ENTRIES];
+- struct ep93xx_tstat tstat[TX_QUEUE_ENTRIES];
+-};
++#define phy_wr(reg,dt) _phy_write(pD, ((ep93xxEth_info*)pD->priv)->s.miiIdPhy, (reg), (dt))
++#define phy_rd(reg) _phy_read(pD, ((ep93xxEth_info*)pD->priv)->s.miiIdPhy, (reg))
++#define phy_waitRdy() waitOnReg32(pD, REG_MIISts,MIISts_Busy, ~MIISts_Busy, 1)
+
+-struct ep93xx_priv
++/*****************************************************************************
++* _phy_write()
++*****************************************************************************/
++static void
++_phy_write(struct net_device *pD, int idPhy, int reg, U16 dt)
+ {
+- struct resource *res;
+- void *base_addr;
+- int irq;
++ phy_waitRdy();
++ RegWr32(REG_MIIData, dt);
++ RegWr32(REG_MIICmd, MIICmd_OP_WR | ((idPhy & 0x1f) << 5) |
++ ((reg & 0x1f) << 0));
++}
+
+- struct ep93xx_descs *descs;
+- dma_addr_t descs_dma_addr;
++/*****************************************************************************
++* _phy_read()
++*****************************************************************************/
++static U16
++_phy_read(struct net_device *pD,int idPhy,int reg)
++{
++ U16 dt;
+
+- void *rx_buf[RX_QUEUE_ENTRIES];
+- void *tx_buf[TX_QUEUE_ENTRIES];
++ phy_waitRdy();
++ RegWr32(REG_MIICmd, MIICmd_OP_RD | ((idPhy & 0x1f) << 5) |
++ ((reg & 0x1f) << 0));
++ phy_waitRdy();
++ dt = (unsigned short)RegRd32(REG_MIIData);
+
+- spinlock_t rx_lock;
+- unsigned int rx_pointer;
+- unsigned int tx_clean_pointer;
+- unsigned int tx_pointer;
+- spinlock_t tx_pending_lock;
+- unsigned int tx_pending;
++ return dt;
++}
+
+- struct net_device *dev;
+- struct napi_struct napi;
++#ifndef _PRTK_DUMP
++#define _dbg_phy_dumpReg(pD)
++#else
++/*****************************************************************************
++* _dbg_phy_dumpReg()
++*****************************************************************************/
++static void
++_dbg_phy_dumpReg(struct net_device *pD)
++{
++ _PRTK_DUMP(("Dumping registers of Ethernet PHY\n"));
++ _PRTK_DUMP((" pD:0x%p, Eth Base Address:0x%x\n", pD,
++ (unsigned int)pD->base_addr));
+
+- struct net_device_stats stats;
++ _PRTK_DUMP((" 0-3:0x%04x 0x%04x 0x%04x 0x%04x\n",
++ phy_rd(0), phy_rd(1), phy_rd(2), phy_rd(3)));
++ _PRTK_DUMP((" 4-6:0x%04x 0x%04x 0x%04x\n",
++ phy_rd(4), phy_rd(5), phy_rd(6)));
++ _PRTK_DUMP((" 16-19:0x%04x 0x%04x 0x%04x 0x%04x\n",
++ phy_rd(16), phy_rd(17), phy_rd(18), phy_rd(19)));
++ _PRTK_DUMP((" 20:0x%04x\n", phy_rd(20)));
++}
++#endif
+
+- struct mii_if_info mii;
+- u8 mdc_divisor;
+-};
++/*****************************************************************************
++* phy_autoNegotiation()
++*****************************************************************************/
++static int
++phy_autoNegotiation(struct net_device *pD)
++{
++ U16 val;
++ U16 oldVal;
++ U16 count = 0;
+
+-#define rdb(ep, off) __raw_readb((ep)->base_addr + (off))
+-#define rdw(ep, off) __raw_readw((ep)->base_addr + (off))
+-#define rdl(ep, off) __raw_readl((ep)->base_addr + (off))
+-#define wrb(ep, off, val) __raw_writeb((val), (ep)->base_addr + (off))
+-#define wrw(ep, off, val) __raw_writew((val), (ep)->base_addr + (off))
+-#define wrl(ep, off, val) __raw_writel((val), (ep)->base_addr + (off))
++ phy_wr(4, 0x01e1); /*Set 802.3, 100M/10M Full/Half ability*/
++ phy_wr(0, (1 << 12) | (1 << 9)); /* enable auto negotiation*/
++ while (1) {
++ val = phy_rd(1); /* read BM status Reg*/
++ if (val & 0x0020) /* if Auto_Neg_complete?*/
++ break;
++ else {
++ if (count >= 3)
++ return -1;
++ mdelay(1000);//delay 1 second.
++ count++;
++ }
++ }
+
+-static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg);
++ //CS8952 PHY needs the delay. Otherwise it won't send the 1st frame.
++ mdelay(1000);//delay 1 second.
+
+-static struct net_device_stats *ep93xx_get_stats(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return &(ep->stats);
++ val = phy_rd(5); /* read ANLPAR Reg*/
++ if (val & 0x0140) { /* if 100M_FDX or 10M_FDX?*/
++ oldVal = RegRd16(REG_TestCTL);
++ /*Enable MAC's Full Duplex mode.*/
++ RegWr16(REG_TestCTL, oldVal | TestCTL_MFDX);
++ }
++
++ gPhyAutoNegoDone = 1;
++
++ return 0;
+ }
+
+-static int ep93xx_rx(struct net_device *dev, int processed, int budget)
++/*****************************************************************************
++* phy_init()
++*****************************************************************************/
++static int
++phy_init(struct net_device *pD)
++{
++ U32 oldVal;
++ int status = -1;
++ U16 val;
++
++ oldVal = RegRd32(REG_SelfCTL);
++
++ /*
++ * Set MDC clock to be divided by 8 and disable PreambleSuppress bit
++ */
++ RegWr32(REG_SelfCTL, 0x4e00);
++
++ /*
++ * read BM status Reg; Link Status Bit remains cleared until the Reg is
++ * read.
++ */
++ val = phy_rd(1);
++
++ /*
++ * read BMStaReg again to get the current link status
++ */
++ val = phy_rd(1);
++ if (val & 0x0004)
++ status = phy_autoNegotiation(pD);
++
++ RegWr32(REG_SelfCTL, oldVal);
++
++ return status;
++}
++
++/*****************************************************************************
++* phy_reset()
++*****************************************************************************/
++#if 0
++static int
++phy_reset(struct net_device *pD)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
++ int i;
+
+- while (processed < budget) {
+- int entry;
+- struct ep93xx_rstat *rstat;
+- u32 rstat0;
+- u32 rstat1;
+- int length;
+- struct sk_buff *skb;
+
+- entry = ep->rx_pointer;
+- rstat = ep->descs->rstat + entry;
++ phy_wr(0, 1 << 15);
+
+- rstat0 = rstat->rstat0;
+- rstat1 = rstat->rstat1;
+- if (!(rstat0 & RSTAT0_RFP) || !(rstat1 & RSTAT1_RFP))
++ for (i = 0; i < 1000; i++)
++ if ((phy_rd(0) & (1 << 15)) == 0)
+ break;
+
+- rstat->rstat0 = 0;
+- rstat->rstat1 = 0;
++ if ((phy_rd(0) & (1 << 15)) != 0) {
++ _PRTK_HWFAIL(("phy_reset(): PHY reset does not self-clear\n"));
++ return -1;
++ }
+
+- if (!(rstat0 & RSTAT0_EOF))
+- printk(KERN_CRIT "ep93xx_rx: not end-of-frame "
+- " %.8x %.8x\n", rstat0, rstat1);
+- if (!(rstat0 & RSTAT0_EOB))
+- printk(KERN_CRIT "ep93xx_rx: not end-of-buffer "
+- " %.8x %.8x\n", rstat0, rstat1);
+- if ((rstat1 & RSTAT1_BUFFER_INDEX) >> 16 != entry)
+- printk(KERN_CRIT "ep93xx_rx: entry mismatch "
+- " %.8x %.8x\n", rstat0, rstat1);
+-
+- if (!(rstat0 & RSTAT0_RWE)) {
+- ep->stats.rx_errors++;
+- if (rstat0 & RSTAT0_OE)
+- ep->stats.rx_fifo_errors++;
+- if (rstat0 & RSTAT0_FE)
+- ep->stats.rx_frame_errors++;
+- if (rstat0 & (RSTAT0_RUNT | RSTAT0_EDATA))
+- ep->stats.rx_length_errors++;
+- if (rstat0 & RSTAT0_CRCE)
+- ep->stats.rx_crc_errors++;
+- goto err;
+- }
+-
+- length = rstat1 & RSTAT1_FRAME_LENGTH;
+- if (length > MAX_PKT_SIZE) {
+- printk(KERN_NOTICE "ep93xx_rx: invalid length "
+- " %.8x %.8x\n", rstat0, rstat1);
+- goto err;
+- }
+-
+- /* Strip FCS. */
+- if (rstat0 & RSTAT0_CRCI)
+- length -= 4;
+-
+- skb = dev_alloc_skb(length + 2);
+- if (likely(skb != NULL)) {
+- skb_reserve(skb, 2);
+- dma_sync_single(NULL, ep->descs->rdesc[entry].buf_addr,
+- length, DMA_FROM_DEVICE);
+- skb_copy_to_linear_data(skb, ep->rx_buf[entry], length);
+- skb_put(skb, length);
+- skb->protocol = eth_type_trans(skb, dev);
++ phy_wr(19, 0x00);
++ phy_wr(4, (1 << 8) | (1 << 7) | (1 << 6) | (1 << 5) | (0x01 << 0));
++ phy_wr(0, (1 << 12) | (1 << 9));
+
+- dev->last_rx = jiffies;
++ return 0;
++}
++#endif
+
+- netif_receive_skb(skb);
++#ifndef _PRTK_DUMP
++# define _dbg_ep93xxEth_dumpQueues(pD)
++#else
++/*****************************************************************************
++* _dbg_ep93xxEth_dumpQueues()
++*****************************************************************************/
++static void
++_dbg_ep93xxEth_dumpQueues(struct net_device *pD)
++{
++ struct ep93xxEth_info *pP = pD->priv;
++ int i;
+
+- ep->stats.rx_packets++;
+- ep->stats.rx_bytes += length;
+- } else {
+- ep->stats.rx_dropped++;
+- }
++ _PRTK_DUMP(("Dumping Descriptor/Status Queues\n"));
++ _PRTK_DUMP((" pD:0x%p, Base Address:0x%x\n", pD,
++ (unsigned int)pD->base_addr));
++
++ _PRTK_DUMP((" o Rx Status Queue: at 0x%p, %d entries\n",
++ pP->s.pQueRxSts, LEN_QueRxSts));
++ for (i = 0; i < LEN_QueRxSts; i++)
++ _PRTK_DUMP((" - %2d: 0x%08x 0x%08x \n", i,
++ (unsigned int)pP->s.pQueRxSts[i].w.e0,
++ (unsigned int)pP->s.pQueRxSts[i].w.e1));
++
++ _PRTK_DUMP((" o Rx Descriptor Queue: at 0x%p, %d entries\n",
++ pP->s.pQueRxDesc, LEN_QueRxDesc));
++ for (i = 0; i < LEN_QueRxDesc; i++)
++ _PRTK_DUMP((" - %2d: 0x%08x 0x%08x \n", i,
++ (unsigned int)pP->s.pQueRxDesc[i].w.e0,
++ (unsigned int)pP->s.pQueRxDesc[i].w.e1));
++
++ _PRTK_DUMP((" o Tx Status Queue: at 0x%p, %d entries\n",
++ pP->s.pQueTxSts, LEN_QueTxSts));
++ for (i = 0; i < LEN_QueTxSts; i++)
++ _PRTK_DUMP((" - %2d: 0x%08x \n", i,
++ (unsigned int)pP->s.pQueTxSts[i].w.e0));
++
++ _PRTK_DUMP((" o Tx Descriptor Queue: at 0x%p, %d entries\n",
++ pP->s.pQueTxDesc, LEN_QueTxDesc));
++ for (i = 0; i < LEN_QueTxDesc; i++)
++ _PRTK_DUMP((" - %2d: 0x%08x 0x%08x \n", i,
++ (unsigned int)pP->s.pQueTxDesc[i].w.e0,
++ (unsigned int)pP->s.pQueTxDesc[i].w.e1));
++}
++#endif
++
++/*****************************************************************************
++* devQue_start()
++*
++ make descriptor queues active
++ allocate queue entries if needed
++ and set device registers up to make it operational
++ assume device has been initialized
++*
++*****************************************************************************/
++static int
++devQue_start(struct net_device *pD)
++{
++ int err;
++ struct ep93xxEth_info *pP = pD->priv;
++ int i;
++ void *pBuf;
++ U32 phyA;
+
+-err:
+- ep->rx_pointer = (entry + 1) & (RX_QUEUE_ENTRIES - 1);
+- processed++;
+- }
++ RegWr32(REG_BMCtl, BMCtl_RxDis | BMCtl_TxDis | RegRd32(REG_BMCtl));
++ err = waitOnReg32(pD, REG_BMSts, BMSts_TxAct, ~BMSts_TxAct, 1);
++ err |= waitOnReg32(pD, REG_BMSts, BMSts_RxAct, ~BMSts_RxAct, 1);
++ if (err)
++ _PRTK_HWFAIL(("devQue_start(): BM does not stop\n"));
++
++ memset(pP->s.pQueTxSts, 0, sizeof(pP->s.pQueTxSts[0]) * LEN_QueTxSts);
++ pP->d.idxQueTxSts = 0;
++ RegWr32(REG_TxSBA, pP->s.phyQueTxSts);
++ RegWr32(REG_TxSCA, pP->s.phyQueTxSts);
++ RegWr16(REG_TxSBL, sizeof(pP->s.pQueTxSts[0]) * LEN_QueTxSts);
++ RegWr16(REG_TxSCL, sizeof(pP->s.pQueTxSts[0]) * LEN_QueTxSts);
++
++ memset(pP->s.pQueTxDesc, 0,
++ sizeof(pP->s.pQueTxDesc[0]) * LEN_QueTxDesc);
++ pP->d.idxQueTxDescHead = pP->d.idxQueTxDescTail = 0;
++ RegWr32(REG_TxDBA, pP->s.phyQueTxDesc);
++ RegWr32(REG_TxDCA, pP->s.phyQueTxDesc);
++ RegWr16(REG_TxDBL, sizeof(pP->s.pQueTxDesc[0]) * LEN_QueTxDesc);
++ RegWr16(REG_TxDCL, sizeof(pP->s.pQueTxDesc[0]) * LEN_QueTxDesc);
++
++ memset(pP->s.pQueRxSts, 0, sizeof(pP->s.pQueRxSts[0]) * LEN_QueRxSts);
++ pP->d.idxQueRxSts = 0;
++ RegWr32(REG_RxSBA, pP->s.phyQueRxSts);
++ RegWr32(REG_RxSCA, pP->s.phyQueRxSts);
++ RegWr16(REG_RxSBL, sizeof(pP->s.pQueRxSts[0]) * LEN_QueRxSts);
++ RegWr16(REG_RxSCL, sizeof(pP->s.pQueRxSts[0]) * LEN_QueRxSts);
++
++ memset(pP->s.pQueRxDesc, 0,
++ sizeof(pP->s.pQueRxDesc[0]) * LEN_QueRxDesc);
++ phyA = pP->s.phyRxBuf;
++ for (i = 0; i < LEN_QueRxDesc; i++) {
++ pP->s.pQueRxDesc[i].f.bi = i;
++ pP->s.pQueRxDesc[i].f.ba = phyA;
++ pP->s.pQueRxDesc[i].f.bl = LEN_RxBuf;
++ phyA += (LEN_RxBuf + 3) & ~0x03;
++ }
++ pP->d.idxQueRxDesc = 0;
++ RegWr32(REG_RxDBA, pP->s.phyQueRxDesc);
++ RegWr32(REG_RxDCA, pP->s.phyQueRxDesc);
++ RegWr16(REG_RxDBL, sizeof(pP->s.pQueRxDesc[0]) * LEN_QueRxDesc);
++ RegWr16(REG_RxDCL, sizeof(pP->s.pQueRxDesc[0]) * LEN_QueRxDesc);
++
++ pBuf = pP->s.pRxBuf;
++ for (i = 0; i < LEN_QueRxDesc; i++) {
++ pP->s.pRxBufDesc[i].vaddr = pBuf;
++ pP->s.pRxBufDesc[i].pFreeRtn = 0;
++ pBuf += (LEN_RxBuf + 3) & ~0x03;
++ }
++
++ memset(pP->s.pTxBufDesc, 0x0,
++ sizeof(*pP->s.pTxBufDesc) * LEN_QueTxDesc);
++ pBuf = pP->s.pTxBuf;// = &gTxDataBuff[0][0];
++ for (i = 0; i < LEN_QueTxDesc; i++) {
++ pP->s.pTxBufDesc[i].vaddr = pBuf + (i*LEN_TxBuf);//&gTxDataBuff[i][0];
++ pP->s.pTxBufDesc[i].pFreeRtn = 0;
++ }
++
++ RegWr32(REG_BMCtl, BMCtl_TxEn | BMCtl_RxEn | RegRd32(REG_BMCtl));
++ err = waitOnReg32(pD, REG_BMSts, BMSts_TxAct | BMSts_TxAct,
++ BMSts_TxAct | BMSts_TxAct, 1);
++ if(err)
++ _PRTK_HWFAIL(("devQue_start(): BM does not start\n"));
+
+- if (processed) {
+- wrw(ep, REG_RXDENQ, processed);
+- wrw(ep, REG_RXSTSENQ, processed);
+- }
++ RegWr32(REG_RxSEQ, LEN_QueRxSts);
++ RegWr32(REG_RxDEQ, LEN_QueRxDesc);
+
+- return processed;
++ return 0;
+ }
+
+-static int ep93xx_have_more_rx(struct ep93xx_priv *ep)
+-{
+- struct ep93xx_rstat *rstat = ep->descs->rstat + ep->rx_pointer;
+- return !!((rstat->rstat0 & RSTAT0_RFP) && (rstat->rstat1 & RSTAT1_RFP));
+-}
++/*****************************************************************************
++* devQue_init()
++ init device descriptor queues at system level
++ device access is not recommended at this point
++*
++*****************************************************************************/
++static int
++devQue_init(struct net_device *pD)
++{
++ struct ep93xxEth_info *pP = pD->priv;
++ void *pBuf;
++ int size;
++
++ if (sizeof(receiveDescriptor) != 8) {
++ _PRTK_SWERR(("devQue_init(): size of receiveDescriptor is not 8 bytes!!!\n"));
++ return -1;
++ } else if (sizeof(receiveStatus) != 8) {
++ _PRTK_SWERR(("devQue_init(): size of receiveStatus is not 8 bytes!!!\n"));
++ return -1;
++ } else if (sizeof(transmitDescriptor) != 8) {
++ _PRTK_SWERR(("devQue_init(): size of transmitDescriptor is not 8 bytes!!!\n"));
++ return -1;
++ } else if (sizeof(transmitStatus) != 4) {
++ _PRTK_SWERR(("devQue_init(): size of transmitStatus is not 4 bytes!!!\n"));
++ return -1;
++ }
++
++ size = sizeof(receiveDescriptor) * (LEN_QueRxDesc + 1) +
++ sizeof(receiveStatus) * (LEN_QueRxSts + 1) +
++ sizeof(transmitDescriptor) * (LEN_QueTxDesc + 1) +
++ sizeof(transmitStatus) * (LEN_QueTxSts + 1) +
++ sizeof(unsigned long) * 4;
++
++ pBuf = MALLOC_DMA(size, &pP->s.phyQueueBase);
++ if(!pBuf)
++ return -1;
++
++ pP->s.pQueRxDesc = (void *)Align32(pBuf);
++ pBuf = (char *)pBuf + sizeof(receiveDescriptor) * (LEN_QueRxDesc + 1);
++ pP->s.pQueRxSts = (void *)Align32(pBuf);
++ pBuf = (char *)pBuf + sizeof(receiveStatus) * (LEN_QueRxSts + 1);
++ pP->s.pQueTxDesc = (void *)Align32(pBuf);
++ pBuf = (char *)pBuf + sizeof(transmitDescriptor) * (LEN_QueTxDesc + 1);
++ pP->s.pQueTxSts = (void *)Align32(pBuf);
++ pBuf = (char *)pBuf + sizeof(transmitStatus) * (LEN_QueTxSts + 1);
++
++ pP->s.phyQueRxDesc = Align32(pP->s.phyQueueBase);
++ pP->s.phyQueRxSts = pP->s.phyQueRxDesc + ((U32)pP->s.pQueRxSts -
++ (U32)pP->s.pQueRxDesc);
++ pP->s.phyQueTxDesc = pP->s.phyQueRxDesc + ((U32)pP->s.pQueTxDesc -
++ (U32)pP->s.pQueRxDesc);
++ pP->s.phyQueTxSts = pP->s.phyQueRxDesc + ((U32)pP->s.pQueTxSts -
++ (U32)pP->s.pQueRxDesc);
++
++ memset(pP->s.pQueRxDesc, 0, sizeof(receiveDescriptor) * LEN_QueRxDesc);
++ memset(pP->s.pQueRxSts, 0, sizeof(receiveStatus) * LEN_QueRxSts);
++ memset(pP->s.pQueTxDesc, 0,
++ sizeof(transmitDescriptor) * LEN_QueTxDesc);
++ memset(pP->s.pQueTxSts, 0, sizeof(transmitStatus) * LEN_QueTxSts);
++
++ pP->s.pRxBuf = MALLOC_DMA(((LEN_RxBuf + 3) & ~0x03) * LEN_QueRxDesc,
++ &pP->s.phyRxBuf);
++ if (!pP->s.pRxBuf) {
++ pP->s.pRxBuf = 0;
++ _PRTK_SYSFAIL(("devQue_init(): fail to allocate memory for RxBuf\n"));
++ return -1;
++ }
++
++ pP->s.pTxBuf = MALLOC_DMA(((LEN_TxBuf + 3) & ~0x03) * LEN_QueTxDesc,
++ &pP->s.phyTxBuf);
++ if (!pP->s.pTxBuf) {
++ pP->s.pTxBuf = 0;
++ _PRTK_SYSFAIL(("devQue_init(): fail to allocate memory for TxBuf\n"));
++ return -1;
++ }
++
++ size = sizeof(bufferDescriptor) * (LEN_QueRxDesc + LEN_QueTxDesc);
++ pBuf = kmalloc(size, GFP_KERNEL);
++ if(!pBuf) {
++ _PRTK_SYSFAIL(("devQue_initAll(): fail to allocate memory for buf desc\n"));
++ return -1;
++ }
++ memset(pBuf, 0x0, size);
++ pP->s.pRxBufDesc = pBuf;
++ pP->s.pTxBufDesc = pBuf + sizeof(bufferDescriptor) * LEN_QueRxDesc;
+
+-static int ep93xx_poll(struct napi_struct *napi, int budget)
+-{
+- struct ep93xx_priv *ep = container_of(napi, struct ep93xx_priv, napi);
+- struct net_device *dev = ep->dev;
+- int rx = 0;
++ return 0;
++}
+
+-poll_some_more:
+- rx = ep93xx_rx(dev, rx, budget);
+- if (rx < budget) {
+- int more = 0;
++#ifndef _PRTK_DUMP
++# define _dbg_ep93xxeth_dumpReg(pD)
++#else
++/*****************************************************************************
++* _dbg_ep93xxeth_dumpReg()
++*****************************************************************************/
++static void
++_dbg_ep93xxeth_dumpReg(struct net_device *pD)
++{
++ struct ep93xxEth_info *pP = pD->priv;
++
++ _PRTK_DUMP(("Dumping registers of Ethernet Module Embedded within EP93xx\n"));
++ _PRTK_DUMP((" pD:0x%p, Base Address:0x%x\n", pD,
++ (unsigned int)pD->base_addr));
++
++ _PRTK_DUMP((" RxCTL:0x%08x TxCTL:0x%08x TestCTL:0x%08x\n",
++ (unsigned int)RegRd32(REG_RxCTL),
++ (unsigned int)RegRd32(REG_TxCTL),
++ (unsigned int)RegRd32(REG_TestCTL)));
++ _PRTK_DUMP((" SelfCTL:0x%08x IntEn:0x%08x IntStsP:0x%08x\n",
++ (unsigned int)RegRd32(REG_SelfCTL),
++ (unsigned int)RegRd32(REG_IntEn),
++ (unsigned int)RegRd32(REG_IntStsP)));
++ _PRTK_DUMP((" GT:0x%08x FCT:0x%08x FCF:0x%08x\n",
++ (unsigned int)RegRd32(REG_GT),
++ (unsigned int)RegRd32(REG_FCT),
++ (unsigned int)RegRd32(REG_FCF)));
++ _PRTK_DUMP((" AFP:0x%08x\n", (unsigned int)RegRd32(REG_AFP)));
++ _PRTK_DUMP((" TxCollCnt:0x%08x RxMissCnt:0x%08x RxRntCnt:0x%08x\n",
++ (unsigned int)RegRd32(REG_TxCollCnt),
++ (unsigned int)RegRd32(REG_RxMissCnt),
++ (unsigned int)RegRd32(REG_RxRntCnt)));
++ _PRTK_DUMP((" BMCtl:0x%08x BMSts:0x%08x\n",
++ (unsigned int)RegRd32(REG_BMCtl),
++ (unsigned int)RegRd32(REG_BMSts)));
++ _PRTK_DUMP((" RBCA:0x%08x TBCA:0x%08x\n",
++ (unsigned int)RegRd32(REG_RBCA),
++ (unsigned int)RegRd32(REG_TBCA)));
++ _PRTK_DUMP((" RxDBA:0x%08x RxDBL/CL:0x%08x RxDCA:0x%08x\n",
++ (unsigned int)RegRd32(REG_RxDBA),
++ (unsigned int)RegRd32(REG_RxDBL),
++ (unsigned int)RegRd32(REG_RxDCA)));
++ _PRTK_DUMP((" RxSBA:0x%08x RxSBL/CL:0x%08x RxSCA:0x%08x\n",
++ (unsigned int)RegRd32(REG_RxSBA),
++ (unsigned int)RegRd32(REG_RxSBL),
++ (unsigned int)RegRd32(REG_RxSCA)));
++ _PRTK_DUMP((" RxDEQ:0x%08x RxSEQ:0x%08x\n",
++ (unsigned int)RegRd32(REG_RxDEQ),
++ (unsigned int)RegRd32(REG_RxSEQ)));
++ _PRTK_DUMP((" TxDBA:0x%08x TxDBL/CL:0x%08x TxDCA:0x%08x\n",
++ (unsigned int)RegRd32(REG_TxDBA),
++ (unsigned int)RegRd32(REG_TxDBL),
++ (unsigned int)RegRd32(REG_TxDCA)));
++ _PRTK_DUMP((" TxSBA:0x%08x TxSBL/CL:0x%08x TxSCA:0x%08x\n",
++ (unsigned int)RegRd32(REG_TxSBA),
++ (unsigned int)RegRd32(REG_TxSBL),
++ (unsigned int)RegRd32(REG_TxSCA)));
++ _PRTK_DUMP((" TxDEQ:0x%08x\n",(unsigned int)RegRd32(REG_TxDEQ)));
++ _PRTK_DUMP((" RxBTH:0x%08x TxBTH:0x%08x RxSTH:0x%08x\n",
++ (unsigned int)RegRd32(REG_RxBTH),
++ (unsigned int)RegRd32(REG_TxBTH),
++ (unsigned int)RegRd32(REG_RxSTH)));
++ _PRTK_DUMP((" TxSTH:0x%08x RxDTH:0x%08x TxDTH:0x%08x\n",
++ (unsigned int)RegRd32(REG_TxSTH),
++ (unsigned int)RegRd32(REG_RxDTH),
++ (unsigned int)RegRd32(REG_TxDTH)));
++ _PRTK_DUMP((" MaxFL:0x%08x RxHL:0x%08x\n",
++ (unsigned int)RegRd32(REG_MaxFL),
++ (unsigned int)RegRd32(REG_RxHL)));
++ _PRTK_DUMP((" MACCFG0-3:0x%08x 0x%08x 0x%08x 0x%08x\n",
++ (unsigned int)RegRd32(REG_MACCFG0),
++ (unsigned int)RegRd32(REG_MACCFG1),
++ (unsigned int)RegRd32(REG_MACCFG2),
++ (unsigned int)RegRd32(REG_MACCFG3)));
++
++ /*
++ _PRTK_DUMP((" ---INT Controller Reg---\n"));
++ _PRTK_DUMP((" RawIrqSts :0x%08x 0x%08x\n", _RegRd(U32,0x80800004),
++ _RegRd(U32,0x80800018)));
++ _PRTK_DUMP((" IrqMask :0x%08x 0x%08x\n", _RegRd(U32,0x80800008),
++ _RegRd(U32,0x8080001c)));
++ _PRTK_DUMP((" MaskIrqSts:0x%08x 0x%08x\n", _RegRd(U32,0x80800000),
++ _RegRd(U32,0x80800014)));
++ */
++
++
++ _PRTK_DUMP(("Dumping private data:\n"));
++ _PRTK_DUMP((" d.txStopped:%d d.idxQueTxSts:%d d.idxQueTxDescHead:%d d.idxQueTxDescTail:%d\n",
++ pP->d.txStopped, pP->d.idxQueTxSts, pP->d.idxQueTxDescHead,
++ pP->d.idxQueTxDescTail));
++ _PRTK_DUMP((" d.idxQueRxDesc:%d d.idxQueRxSts:%d\n",
++ pP->d.idxQueRxDesc, pP->d.idxQueRxSts));
++}
++#endif
++
++#define CRC_PRIME 0xFFFFFFFF
++#define CRC_POLYNOMIAL 0x04C11DB6
++/*****************************************************************************
++* calculate_hash_index()
++*****************************************************************************/
++static unsigned char
++calculate_hash_index(char *pMulticastAddr)
++{
++ unsigned long CRC;
++ unsigned char HashIndex;
++ unsigned char AddrByte;
++ unsigned char *pC;
++ unsigned long HighBit;
++ int Byte;
++ int Bit;
++
++ CRC = CRC_PRIME;
++ pC = pMulticastAddr;
++
++ for (Byte = 0; Byte < 6; Byte++) {
++ AddrByte = *pC;
++ pC++;
++
++ for (Bit = 8; Bit > 0; Bit--)
++ {
++ HighBit = CRC >> 31;
++ CRC <<= 1;
++
++ if (HighBit ^ (AddrByte & 1))
++ {
++ CRC ^= CRC_POLYNOMIAL;
++ CRC |= 1;
++ }
+
+- spin_lock_irq(&ep->rx_lock);
+- __netif_rx_complete(dev, napi);
+- wrl(ep, REG_INTEN, REG_INTEN_TX | REG_INTEN_RX);
+- if (ep93xx_have_more_rx(ep)) {
+- wrl(ep, REG_INTEN, REG_INTEN_TX);
+- wrl(ep, REG_INTSTSP, REG_INTSTS_RX);
+- more = 1;
++ AddrByte >>= 1;
+ }
+- spin_unlock_irq(&ep->rx_lock);
++ }
+
+- if (more && netif_rx_reschedule(dev, napi))
+- goto poll_some_more;
++ for (Bit = 0, HashIndex = 0; Bit < 6; Bit++)
++ {
++ HashIndex <<= 1;
++ HashIndex |= (unsigned char)(CRC & 1);
++ CRC >>= 1;
+ }
+
+- return rx;
++ return HashIndex;
+ }
+
+-static int ep93xx_xmit(struct sk_buff *skb, struct net_device *dev)
++/*****************************************************************************
++* eth_setMulticastTbl()
++*****************************************************************************/
++static void
++eth_setMulticastTbl(struct net_device *pD, U8 *pBuf)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int entry;
+-
+- if (unlikely(skb->len > MAX_PKT_SIZE)) {
+- ep->stats.tx_dropped++;
+- dev_kfree_skb(skb);
+- return NETDEV_TX_OK;
+- }
+-
+- entry = ep->tx_pointer;
+- ep->tx_pointer = (ep->tx_pointer + 1) & (TX_QUEUE_ENTRIES - 1);
+-
+- ep->descs->tdesc[entry].tdesc1 =
+- TDESC1_EOF | (entry << 16) | (skb->len & 0xfff);
+- skb_copy_and_csum_dev(skb, ep->tx_buf[entry]);
+- dma_sync_single(NULL, ep->descs->tdesc[entry].buf_addr,
+- skb->len, DMA_TO_DEVICE);
+- dev_kfree_skb(skb);
++ int i;
++ unsigned char position;
++ struct dev_mc_list *cur_addr;
+
+- dev->trans_start = jiffies;
++ memset(pBuf, 0x00, 8);
+
+- spin_lock_irq(&ep->tx_pending_lock);
+- ep->tx_pending++;
+- if (ep->tx_pending == TX_QUEUE_ENTRIES)
+- netif_stop_queue(dev);
+- spin_unlock_irq(&ep->tx_pending_lock);
++ cur_addr = pD->mc_list;
++ for (i = 0; i < pD->mc_count; i++, cur_addr = cur_addr->next) {
++ if (!cur_addr)
++ break;
++ if (!(*cur_addr->dmi_addr & 1))
++ continue;
++ position = calculate_hash_index(cur_addr->dmi_addr);
++ pBuf[position >> 3] |= 1 << (position & 0x07);
++ }
++}
+
+- wrl(ep, REG_TXDENQ, 1);
++/*****************************************************************************
++* eth_indAddrWr()
++*****************************************************************************/
++static int
++eth_indAddrWr(struct net_device *pD, int afp, char *pBuf)
++{
++ U32 rxctl;
++ int i, len;
++
++ afp &= 0x07;
++ if (afp == 4 || afp == 5) {
++ _PRTK_SWERR(("eth_indAddrWr(): invalid afp value\n"));
++ return -1;
++ }
++ len = (afp == AFP_AFP_HASH) ? 8 : 6;
++
++ rxctl = RegRd32(REG_RxCTL);
++ RegWr32(REG_RxCTL, ~RxCTL_SRxON & rxctl);
++ RegWr32(REG_AFP, afp);
++ for (i = 0; i < len; i++)
++ RegWr8(REG_IndAD + i, pBuf[i]);
++ RegWr32(REG_RxCTL, rxctl);
+
+- return NETDEV_TX_OK;
++ return 0;
+ }
+
+-static void ep93xx_tx_complete(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int wake;
++/*****************************************************************************
++* eth_indAddrRd()
++*****************************************************************************/
++#if 0
++static int
++eth_indAddrRd(struct net_device *pD, int afp, char *pBuf)
++{
++ int i, len;
++
++ afp &= 0x07;
++ if (afp == 4 || afp == 5) {
++ _PRTK_SWERR(("eth_indAddrRd(): invalid afp value\n"));
++ return -1;
++ }
++
++ RegWr32(REG_AFP, afp);
++ len = (afp == AFP_AFP_HASH) ? 8 : 6;
++ for (i = 0; i < len; i++)
++ pBuf[i] = RegRd8(REG_IndAD + i);
+
+- wake = 0;
++ return 0;
++}
++#endif
+
+- spin_lock(&ep->tx_pending_lock);
+- while (1) {
+- int entry;
+- struct ep93xx_tstat *tstat;
+- u32 tstat0;
++/*****************************************************************************
++* eth_rxCtl()
++*****************************************************************************/
++static int
++eth_rxCtl(struct net_device *pD, int sw)
++{
++ /*
++ * Workaround for MAC lost 60-byte-long frames: must enable
++ * Runt_CRC_Accept bit
++ */
++ RegWr32(REG_RxCTL,
++ sw ? RegRd32(REG_RxCTL) | RxCTL_SRxON | RxCTL_RCRCA :
++ RegRd32(REG_RxCTL) & ~RxCTL_SRxON);
+
+- entry = ep->tx_clean_pointer;
+- tstat = ep->descs->tstat + entry;
++ return 0;
++}
+
+- tstat0 = tstat->tstat0;
+- if (!(tstat0 & TSTAT0_TXFP))
+- break;
++/*****************************************************************************
++* eth_chkTxLvl()
++*****************************************************************************/
++static void
++eth_chkTxLvl(struct net_device *pD)
++{
++ struct ep93xxEth_info *pP = pD->priv;
++ int idxQTxDescHd;
++ int filled;
++
++ idxQTxDescHd = pP->d.idxQueTxDescHead;
++
++ filled = idxQTxDescHd - pP->d.idxQueTxDescTail;
++ if (filled < 0)
++ filled += LEN_QueTxDesc;
++
++ if (pP->d.txStopped && filled <= (LVL_TxResume + 1)) {
++ pP->d.txStopped = 0;
++ pD->trans_start = jiffies;
++ netif_wake_queue(pD);
++ }
++}
+
+- tstat->tstat0 = 0;
++/*****************************************************************************
++* eth_cleanUpTx()
++*****************************************************************************/
++static int
++eth_cleanUpTx(struct net_device *pD)
++{
++ struct ep93xxEth_info *pP = pD->priv;
++ transmitStatus *pQTxSts;
++ int idxSts, bi;
++
++ while (pP->s.pQueTxSts[pP->d.idxQueTxSts].f.txfp) {
++ idxSts = pP->d.idxQueTxSts;
++
++ pP->d.idxQueTxSts = IdxNext(pP->d.idxQueTxSts,LEN_QueTxSts);
++ pQTxSts = &pP->s.pQueTxSts[idxSts];
++ if (!pQTxSts->f.txfp) {
++ _PRTK_HWFAIL(("eth_cleanUpTx(): QueTxSts[%d]:x%08x is empty\n",
++ idxSts, (int)pQTxSts->w.e0));
++ return -1;
++ }
+
+- if (tstat0 & TSTAT0_FA)
+- printk(KERN_CRIT "ep93xx_tx_complete: frame aborted "
+- " %.8x\n", tstat0);
+- if ((tstat0 & TSTAT0_BUFFER_INDEX) != entry)
+- printk(KERN_CRIT "ep93xx_tx_complete: entry mismatch "
+- " %.8x\n", tstat0);
++ pQTxSts->f.txfp = 0;
+
+- if (tstat0 & TSTAT0_TXWE) {
+- int length = ep->descs->tdesc[entry].tdesc1 & 0xfff;
++ bi = pQTxSts->f.bi;
++#if 0
++ if (pP->d.idxQueTxDescTail != bi) {
++ _PRTK_HWFAIL(("eth_cleanUpTx(): unmatching QTxSts[%d].BI:%d idxQTxDTail:%d\n",
++ idxSts,bi, pP->d.idxQueTxDescTail));
++ }
++#endif
++
++ if (pP->s.pTxBufDesc[bi].pFreeRtn) {
++ (*pP->s.pTxBufDesc[bi].pFreeRtn)(pP->s.pTxBufDesc[bi].vaddr);
++ pP->s.pTxBufDesc[bi].pFreeRtn = 0;
++ }
+
+- ep->stats.tx_packets++;
+- ep->stats.tx_bytes += length;
++ if (pQTxSts->f.txwe) {
++ pP->d.stats.tx_packets++;
+ } else {
+- ep->stats.tx_errors++;
++ pP->d.stats.tx_errors++;
++ if (pQTxSts->f.lcrs)
++ pP->d.stats.tx_carrier_errors++;
++ if(pQTxSts->f.txu)
++ pP->d.stats.tx_fifo_errors++;
++ if(pQTxSts->f.ecoll)
++ pP->d.stats.collisions++;
+ }
+
+- if (tstat0 & TSTAT0_OW)
+- ep->stats.tx_window_errors++;
+- if (tstat0 & TSTAT0_TXU)
+- ep->stats.tx_fifo_errors++;
+- ep->stats.collisions += (tstat0 >> 16) & 0x1f;
+-
+- ep->tx_clean_pointer = (entry + 1) & (TX_QUEUE_ENTRIES - 1);
+- if (ep->tx_pending == TX_QUEUE_ENTRIES)
+- wake = 1;
+- ep->tx_pending--;
++ pP->d.idxQueTxDescTail = IdxNext(pP->d.idxQueTxDescTail,
++ LEN_QueTxDesc);
+ }
+- spin_unlock(&ep->tx_pending_lock);
+
+- if (wake)
+- netif_wake_queue(dev);
++ return 0;
+ }
+
+-static irqreturn_t ep93xx_irq(int irq, void *dev_id)
++/*****************************************************************************
++* eth_restartTx()
++*****************************************************************************/
++static int
++eth_restartTx(struct net_device *pD)
+ {
+- struct net_device *dev = dev_id;
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- u32 status;
++ struct ep93xxEth_info *pP = pD->priv;
++ int i;
+
+- status = rdl(ep, REG_INTSTSC);
+- if (status == 0)
+- return IRQ_NONE;
++ RegWr32(REG_GIntMsk, RegRd32(REG_GIntMsk) & ~GIntMsk_IntEn);
+
+- if (status & REG_INTSTS_RX) {
+- spin_lock(&ep->rx_lock);
+- if (likely(netif_rx_schedule_prep(dev, &ep->napi))) {
+- wrl(ep, REG_INTEN, REG_INTEN_TX);
+- __netif_rx_schedule(dev, &ep->napi);
+- }
+- spin_unlock(&ep->rx_lock);
++ RegWr32(REG_TxCTL, RegRd32(REG_TxCTL) & ~TxCTL_STxON);
++ RegWr32(REG_BMCtl, RegRd32(REG_BMCtl) | BMCtl_TxDis);
++
++ RegWr32(REG_BMCtl, BMCtl_TxChR | RegRd32(REG_BMCtl));
++
++ for (i = 0; i < LEN_QueTxDesc; i++) {
++ if (pP->s.pTxBufDesc[i].pFreeRtn) {
++ pP->s.pTxBufDesc[i].pFreeRtn(pP->s.pTxBufDesc[i].vaddr);
++ pP->s.pTxBufDesc[i].pFreeRtn = 0;
++ }
++ pP->d.stats.tx_dropped++;
+ }
+
+- if (status & REG_INTSTS_TX)
+- ep93xx_tx_complete(dev);
++ memset(pP->s.pQueTxSts, 0, sizeof(pP->s.pQueTxSts[0]) * LEN_QueTxSts);
+
+- return IRQ_HANDLED;
+-}
++ pP->d.txStopped = 0;
++ pP->d.idxQueTxSts = pP->d.idxQueTxDescHead = pP->d.idxQueTxDescTail =
++ 0;
+
+-static void ep93xx_free_buffers(struct ep93xx_priv *ep)
+-{
+- int i;
++ waitOnReg32(pD, REG_BMSts, BMCtl_TxChR, ~BMCtl_TxChR, 1);
++ RegWr32(REG_TxSBA, pP->s.phyQueTxSts);
++ RegWr32(REG_TxSCA, pP->s.phyQueTxSts);
++ RegWr16(REG_TxSBL, sizeof(pP->s.pQueTxSts[0]) * LEN_QueTxSts);
++ RegWr16(REG_TxSCL, sizeof(pP->s.pQueTxSts[0]) * LEN_QueTxSts);
++ RegWr32(REG_TxDBA, pP->s.phyQueTxDesc);
++ RegWr32(REG_TxDCA, pP->s.phyQueTxDesc);
++ RegWr16(REG_TxDBL, sizeof(pP->s.pQueTxDesc[0]) * LEN_QueTxDesc);
++ RegWr16(REG_TxDCL, sizeof(pP->s.pQueTxDesc[0]) * LEN_QueTxDesc);
+
+- for (i = 0; i < RX_QUEUE_ENTRIES; i += 2) {
+- dma_addr_t d;
++ RegWr32(REG_TxCTL, RegRd32(REG_TxCTL) | TxCTL_STxON);
++ RegWr32(REG_BMCtl, RegRd32(REG_BMCtl) | BMCtl_TxEn);
+
+- d = ep->descs->rdesc[i].buf_addr;
+- if (d)
+- dma_unmap_single(NULL, d, PAGE_SIZE, DMA_FROM_DEVICE);
++ RegWr32(REG_GIntMsk, RegRd32(REG_GIntMsk) | GIntMsk_IntEn);
+
+- if (ep->rx_buf[i] != NULL)
+- free_page((unsigned long)ep->rx_buf[i]);
+- }
++ return 0;
++}
+
+- for (i = 0; i < TX_QUEUE_ENTRIES; i += 2) {
+- dma_addr_t d;
++/*****************************************************************************
++* eth_reset()
++*****************************************************************************/
++static int
++eth_reset(struct net_device *pD)
++{
++ int err;
+
+- d = ep->descs->tdesc[i].buf_addr;
+- if (d)
+- dma_unmap_single(NULL, d, PAGE_SIZE, DMA_TO_DEVICE);
++ RegWr8(REG_SelfCTL, SelfCTL_RESET);
++ err = waitOnReg32(pD, REG_SelfCTL, SelfCTL_RESET, ~SelfCTL_RESET, 1);
++ if (err)
++ _PRTK_WARN(("eth_reset(): Soft Reset does not self-clear\n"));
+
+- if (ep->tx_buf[i] != NULL)
+- free_page((unsigned long)ep->tx_buf[i]);
+- }
++ //phy_reset(pD);
+
+- dma_free_coherent(NULL, sizeof(struct ep93xx_descs), ep->descs,
+- ep->descs_dma_addr);
++ return 0;
+ }
+
+-/*
+- * The hardware enforces a sub-2K maximum packet size, so we put
+- * two buffers on every hardware page.
+- */
+-static int ep93xx_alloc_buffers(struct ep93xx_priv *ep)
++/*****************************************************************************
++ . Function: eth_shutDown()
++ . Purpose: closes down the Ethernet module
++ . Make sure to:
++ . 1. disable all interrupt mask
++ . 2. disable Rx
++ . 3. disable Tx
++ .
++ . TODO:
++ . (1) maybe utilize power down mode.
++ . Why not yet? Because while the chip will go into power down mode,
++ . the manual says that it will wake up in response to any I/O requests
++ . in the register space. Empirical results do not show this working.
++*
++*****************************************************************************/
++static int
++eth_shutDown(struct net_device *pD)
+ {
+- int i;
+-
+- ep->descs = dma_alloc_coherent(NULL, sizeof(struct ep93xx_descs),
+- &ep->descs_dma_addr, GFP_KERNEL | GFP_DMA);
+- if (ep->descs == NULL)
+- return 1;
++ eth_reset(pD);
+
+- for (i = 0; i < RX_QUEUE_ENTRIES; i += 2) {
+- void *page;
+- dma_addr_t d;
++ return 0;
++}
+
+- page = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
+- if (page == NULL)
+- goto err;
++/*****************************************************************************
++* eth_enable()
+
+- d = dma_map_single(NULL, page, PAGE_SIZE, DMA_FROM_DEVICE);
+- if (dma_mapping_error(d)) {
+- free_page((unsigned long)page);
+- goto err;
+- }
++ Purpose:
++ Turn on device interrupt for interrupt driven operation.
++ Also turn on Rx but no Tx.
++*
++*****************************************************************************/
++static int
++eth_enable(struct net_device *pD)
++{
++ RegWr32(REG_IntEn, Default_IntSrc);
++ RegWr32(REG_GIntMsk, GIntMsk_IntEn);
++ eth_rxCtl(pD, 1);
+
+- ep->rx_buf[i] = page;
+- ep->descs->rdesc[i].buf_addr = d;
+- ep->descs->rdesc[i].rdesc1 = (i << 16) | PKT_BUF_SIZE;
++ return 0;
++}
+
+- ep->rx_buf[i + 1] = page + PKT_BUF_SIZE;
+- ep->descs->rdesc[i + 1].buf_addr = d + PKT_BUF_SIZE;
+- ep->descs->rdesc[i + 1].rdesc1 = ((i + 1) << 16) | PKT_BUF_SIZE;
+- }
++/*****************************************************************************
++* eth_init()
+
+- for (i = 0; i < TX_QUEUE_ENTRIES; i += 2) {
+- void *page;
+- dma_addr_t d;
++ Purpose:
++ Reset and initialize the device.
++ Device should be initialized enough to function in polling mode.
++ Tx and Rx must be disabled and no INT generation.
++*
++*****************************************************************************/
++static int
++eth_init(struct net_device *pD)
++{
++ int status;
++
++ eth_reset(pD);
++
++ gPhyAutoNegoDone = 0;
++ status = phy_init(pD);
++ if (status != 0)
++ printk(KERN_WARNING "%s: No network cable detected!\n", pD->name);
++
++ RegWr32(REG_SelfCTL, 0x0f00);
++ RegWr32(REG_GIntMsk, 0x00);
++ RegWr32(REG_RxCTL, RxCTL_BA | RxCTL_IA0);
++ RegWr32(REG_TxCTL, 0x00);
++ RegWr32(REG_GT, 0x00);
++ RegWr32(REG_BMCtl, 0x00);
++ RegWr32(REG_RxBTH, (0x80 << 16) | (0x40 << 0));
++ RegWr32(REG_TxBTH, (0x80 << 16) | (0x40 << 0));
++ RegWr32(REG_RxSTH, (4 << 16) | (2 << 0));
++ RegWr32(REG_TxSTH, (4 << 16) | (2 << 0));
++ RegWr32(REG_RxDTH, (4 << 16) | (2 << 0));
++ RegWr32(REG_TxDTH, (4 << 16) | (2 << 0));
++ RegWr32(REG_MaxFL, ((1518 + 1) << 16) | (944 << 0));
++
++ RegRd32(REG_TxCollCnt);
++ RegRd32(REG_RxMissCnt);
++ RegRd32(REG_RxRntCnt);
+
+- page = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
+- if (page == NULL)
+- goto err;
++ RegRd32(REG_IntStsC);
+
+- d = dma_map_single(NULL, page, PAGE_SIZE, DMA_TO_DEVICE);
+- if (dma_mapping_error(d)) {
+- free_page((unsigned long)page);
+- goto err;
+- }
++ RegWr32(REG_TxCTL, TxCTL_STxON | RegRd32(REG_TxCTL));
+
+- ep->tx_buf[i] = page;
+- ep->descs->tdesc[i].buf_addr = d;
++ eth_indAddrWr(pD, AFP_AFP_IA0, &pD->dev_addr[0]);
+
+- ep->tx_buf[i + 1] = page + PKT_BUF_SIZE;
+- ep->descs->tdesc[i + 1].buf_addr = d + PKT_BUF_SIZE;
+- }
++ devQue_start(pD);
+
+ return 0;
+-
+-err:
+- ep93xx_free_buffers(ep);
+- return 1;
+ }
+
+-static int ep93xx_start_hw(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- unsigned long addr;
+- int i;
+-
+- wrl(ep, REG_SELFCTL, REG_SELFCTL_RESET);
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_SELFCTL) & REG_SELFCTL_RESET) == 0)
+- break;
+- msleep(1);
+- }
+-
+- if (i == 10) {
+- printk(KERN_CRIT DRV_MODULE_NAME ": hw failed to reset\n");
+- return 1;
+- }
+-
+- wrl(ep, REG_SELFCTL, ((ep->mdc_divisor - 1) << 9));
+-
+- /* Does the PHY support preamble suppress? */
+- if ((ep93xx_mdio_read(dev, ep->mii.phy_id, MII_BMSR) & 0x0040) != 0)
+- wrl(ep, REG_SELFCTL, ((ep->mdc_divisor - 1) << 9) | (1 << 8));
+-
+- /* Receive descriptor ring. */
+- addr = ep->descs_dma_addr + offsetof(struct ep93xx_descs, rdesc);
+- wrl(ep, REG_RXDQBADD, addr);
+- wrl(ep, REG_RXDCURADD, addr);
+- wrw(ep, REG_RXDQBLEN, RX_QUEUE_ENTRIES * sizeof(struct ep93xx_rdesc));
+-
+- /* Receive status ring. */
+- addr = ep->descs_dma_addr + offsetof(struct ep93xx_descs, rstat);
+- wrl(ep, REG_RXSTSQBADD, addr);
+- wrl(ep, REG_RXSTSQCURADD, addr);
+- wrw(ep, REG_RXSTSQBLEN, RX_QUEUE_ENTRIES * sizeof(struct ep93xx_rstat));
+-
+- /* Transmit descriptor ring. */
+- addr = ep->descs_dma_addr + offsetof(struct ep93xx_descs, tdesc);
+- wrl(ep, REG_TXDQBADD, addr);
+- wrl(ep, REG_TXDQCURADD, addr);
+- wrw(ep, REG_TXDQBLEN, TX_QUEUE_ENTRIES * sizeof(struct ep93xx_tdesc));
+-
+- /* Transmit status ring. */
+- addr = ep->descs_dma_addr + offsetof(struct ep93xx_descs, tstat);
+- wrl(ep, REG_TXSTSQBADD, addr);
+- wrl(ep, REG_TXSTSQCURADD, addr);
+- wrw(ep, REG_TXSTSQBLEN, TX_QUEUE_ENTRIES * sizeof(struct ep93xx_tstat));
+-
+- wrl(ep, REG_BMCTL, REG_BMCTL_ENABLE_TX | REG_BMCTL_ENABLE_RX);
+- wrl(ep, REG_INTEN, REG_INTEN_TX | REG_INTEN_RX);
+- wrl(ep, REG_GIINTMSK, 0);
++/*****************************************************************************
++* eth_isrRx()
++*
++* Interrupt Service Routines
++*
++*****************************************************************************/
++static int
++eth_isrRx(struct net_device *pD)
++{
++ ep93xxEth_info *pP = pD->priv;
++ receiveStatus *pQRxSts;
++ int idxQRxStsHead;
++ int idxSts;
++ int cntStsProcessed, cntDescProcessed;
++ char *pDest;
++ struct sk_buff *pSkb;
++ int len;
++ UINT dt;
++
++ dt = RegRd32(REG_RxSCA);
++ idxQRxStsHead = (dt - pP->s.phyQueRxSts) / sizeof(pP->s.pQueRxSts[0]);
++ if (!(idxQRxStsHead >= 0 && idxQRxStsHead < LEN_QueRxSts)) {
++ _PRTK_HWFAIL(("eth_isrRx(): invalid REG_RxSCA:0x%x idx:%d (phyQueRxSts:0x%x Len:%x)\n",
++ dt,idxQRxStsHead, (int)pP->s.phyQueRxSts,
++ LEN_QueRxSts));
++ return -1;
++ }
++
++ cntStsProcessed = cntDescProcessed = 0;
++ while (idxQRxStsHead != pP->d.idxQueRxSts) {
++ idxSts = pP->d.idxQueRxSts;
++ pP->d.idxQueRxSts = IdxNext(pP->d.idxQueRxSts, LEN_QueRxSts);
++ pQRxSts = &pP->s.pQueRxSts[idxSts];
++ if (!pQRxSts->f.rfp) {
++ _PRTK_HWFAIL(("eth_isrRx(): QueRxSts[%d] is empty; Hd:%d\n",
++ idxSts,idxQRxStsHead));
++ return -1;
++ }
++ pQRxSts->f.rfp = 0;
+
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_BMSTS) & REG_BMSTS_RX_ACTIVE) != 0)
+- break;
+- msleep(1);
+- }
++ if(pQRxSts->f.eob) {
++ if(pQRxSts->f.bi == pP->d.idxQueRxDesc) {
++ pP->d.idxQueRxDesc =
++ IdxNext(pP->d.idxQueRxDesc,
++ LEN_QueRxDesc);
++ cntDescProcessed++;
++ if (pQRxSts->f.eof && pQRxSts->f.rwe) {
++ len = pQRxSts->f.fl;
++ pSkb = dev_alloc_skb(len + 5);
++ if (pSkb != NULL) {
++ skb_reserve(pSkb, 2);
++ pSkb->dev = pD;
++ pDest = skb_put(pSkb, len);
++
++ memcpy(pDest,
++ pP->s.pRxBufDesc[pQRxSts->f.bi].vaddr,
++ len);
++ pSkb->protocol =
++ eth_type_trans(pSkb,
++ pD);
++ netif_rx(pSkb);
++ pP->d.stats.rx_packets++;
++ if(pQRxSts->f.am == 3)
++ pP->d.stats.multicast++;
++ } else
++ _PRTK_SYSFAIL(("eth_isrRx(): Low Memory, Rx dropped\n"));
++ pP->d.stats.rx_dropped++;
++ } else {
++ pP->d.stats.rx_errors++;
++ if (pQRxSts->f.oe)
++ pP->d.stats.rx_fifo_errors++;
++ if (pQRxSts->f.fe)
++ pP->d.stats.rx_frame_errors++;
++ if (pQRxSts->f.runt ||
++ pQRxSts->f.edata)
++ pP->d.stats.rx_length_errors++;
++ if (pQRxSts->f.crce)
++ pP->d.stats.rx_crc_errors++;
++ }
++ } else
++ _PRTK_HWFAIL(("eth_isrRx(): unmatching QueRxSts[%d].BI:0x%x; idxQueRxDesc:0x%x\n",
++ idxSts, pQRxSts->f.bi,
++ pP->d.idxQueRxDesc));
++ }
+
+- if (i == 10) {
+- printk(KERN_CRIT DRV_MODULE_NAME ": hw failed to start\n");
+- return 1;
++ cntStsProcessed++;
+ }
+
+- wrl(ep, REG_RXDENQ, RX_QUEUE_ENTRIES);
+- wrl(ep, REG_RXSTSENQ, RX_QUEUE_ENTRIES);
+-
+- wrb(ep, REG_INDAD0, dev->dev_addr[0]);
+- wrb(ep, REG_INDAD1, dev->dev_addr[1]);
+- wrb(ep, REG_INDAD2, dev->dev_addr[2]);
+- wrb(ep, REG_INDAD3, dev->dev_addr[3]);
+- wrb(ep, REG_INDAD4, dev->dev_addr[4]);
+- wrb(ep, REG_INDAD5, dev->dev_addr[5]);
+- wrl(ep, REG_AFP, 0);
+-
+- wrl(ep, REG_MAXFRMLEN, (MAX_PKT_SIZE << 16) | MAX_PKT_SIZE);
+-
+- wrl(ep, REG_RXCTL, REG_RXCTL_DEFAULT);
+- wrl(ep, REG_TXCTL, REG_TXCTL_ENABLE);
++ RegWr32(REG_RxSEQ, cntStsProcessed);
++ RegWr32(REG_RxDEQ, cntDescProcessed);
+
+ return 0;
+ }
+
+-static void ep93xx_stop_hw(struct net_device *dev)
++/*****************************************************************************
++* eth_isrTx()
++*****************************************************************************/
++static int
++eth_isrTx(struct net_device *pD)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int i;
++ eth_cleanUpTx(pD);
++ eth_chkTxLvl(pD);
++ return 0;
++}
+
+- wrl(ep, REG_SELFCTL, REG_SELFCTL_RESET);
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_SELFCTL) & REG_SELFCTL_RESET) == 0)
+- break;
+- msleep(1);
+- }
++/*****************************************************************************
++* ep93xxEth_isr()
++*****************************************************************************/
++static irqreturn_t
++ep93xxEth_isr(int irq,void *pDev)
++{
++ struct net_device *pD = pDev;
++ int lpCnt;
++ U32 intS;
++
++ lpCnt = 0;
++ do {
++ intS = RegRd32(REG_IntStsC);
+
+- if (i == 10)
+- printk(KERN_CRIT DRV_MODULE_NAME ": hw failed to reset\n");
++ if (!intS)
++ break;
++ if (intS & IntSts_RxSQ)
++ eth_isrRx(pD);
++ if (intS & IntSts_TxSQ)
++ eth_isrTx(pD);
++ } while (lpCnt++ < 64);
++
++ if (lpCnt)
++ return IRQ_HANDLED;
++ else
++ return IRQ_NONE;
+ }
+
+-static int ep93xx_open(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int err;
++/*=========================================================
++ * Exposed Driver Routines to the Outside World
++ *=======================================================*/
++
++/*****************************************************************************
++* ep93xxEth_getStats()
++*****************************************************************************/
++static struct net_device_stats *
++ep93xxEth_getStats(struct net_device *pD)
++{
++ return &((struct ep93xxEth_info *)pD->priv)->d.stats;
++}
++
++/*****************************************************************************
++* ep93xxEth_setMulticastList()
++*****************************************************************************/
++static void
++ep93xxEth_setMulticastList(struct net_device *pD)
++{
++ U8 tblMulti[8 + 1];
++
++ if (pD->flags & IFF_PROMISC)
++ RegWr32(REG_RxCTL, RxCTL_PA | RegRd32(REG_RxCTL));
++ else if(pD->flags & IFF_ALLMULTI) {
++ RegWr32(REG_RxCTL, RxCTL_MA |
++ (~RxCTL_PA & RegRd32(REG_RxCTL)));
++ eth_indAddrWr(pD, AFP_AFP_HASH,
++ "\xff\xff\xff\xff\xff\xff\xff\xff");
++ } else if(pD->mc_count) {
++ RegWr32(REG_RxCTL, RxCTL_MA |
++ (~RxCTL_PA & RegRd32(REG_RxCTL)));
++ eth_setMulticastTbl(pD, &tblMulti[0]);
++ eth_indAddrWr(pD, AFP_AFP_HASH, &tblMulti[0]);
++ } else
++ RegWr32(REG_RxCTL,
++ ~(RxCTL_PA | RxCTL_MA) & RegRd32(REG_RxCTL));
++}
++
++/*****************************************************************************
++* ep93xxEth_txTimeout()
++*****************************************************************************/
++static void
++ep93xxEth_txTimeout(struct net_device *pD)
++{
++ int status;
++
++ _PRTK_WARN(("ep93xxEth_txTimeout(): transmit timed out\n"));
++
++ if (gPhyAutoNegoDone == 0) {
++ status = phy_init(pD);
++ if (status != 0)
++ {
++ printk(KERN_WARNING "%s: No network cable detected!\n",
++ pD->name);
++ return;
++ }
++ }
+
+- if (ep93xx_alloc_buffers(ep))
+- return -ENOMEM;
++ eth_restartTx(pD);
+
+- if (is_zero_ether_addr(dev->dev_addr)) {
+- random_ether_addr(dev->dev_addr);
+- printk(KERN_INFO "%s: generated random MAC address "
+- "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x.\n", dev->name,
+- dev->dev_addr[0], dev->dev_addr[1],
+- dev->dev_addr[2], dev->dev_addr[3],
+- dev->dev_addr[4], dev->dev_addr[5]);
+- }
+-
+- napi_enable(&ep->napi);
+-
+- if (ep93xx_start_hw(dev)) {
+- napi_disable(&ep->napi);
+- ep93xx_free_buffers(ep);
+- return -EIO;
+- }
+-
+- spin_lock_init(&ep->rx_lock);
+- ep->rx_pointer = 0;
+- ep->tx_clean_pointer = 0;
+- ep->tx_pointer = 0;
+- spin_lock_init(&ep->tx_pending_lock);
+- ep->tx_pending = 0;
++ pD->trans_start = jiffies;
++ netif_wake_queue(pD);
++}
+
+- err = request_irq(ep->irq, ep93xx_irq, IRQF_SHARED, dev->name, dev);
+- if (err) {
+- napi_disable(&ep->napi);
+- ep93xx_stop_hw(dev);
+- ep93xx_free_buffers(ep);
+- return err;
++/*****************************************************************************
++* ep93xxEth_hardStartXmit()
++*****************************************************************************/
++static int
++ep93xxEth_hardStartXmit(struct sk_buff *pSkb, struct net_device *pD)
++{
++ struct ep93xxEth_info *pP = pD->priv;
++ transmitDescriptor *pQTxDesc;
++ int idxQTxDescHd;
++ int filled;
++ int status;
++
++ if (gPhyAutoNegoDone == 0) {
++ status = phy_init(pD);
++ if (status != 0)
++ {
++ return 1;
++ }
+ }
+
+- wrl(ep, REG_GIINTMSK, REG_GIINTMSK_ENABLE);
++ idxQTxDescHd = pP->d.idxQueTxDescHead;
++ pQTxDesc = &pP->s.pQueTxDesc[idxQTxDescHd];
++
++ filled = idxQTxDescHd - pP->d.idxQueTxDescTail;
++ if (filled < 0)
++ filled += LEN_QueTxDesc;
++ filled += 1;
++
++ if(filled >= LVL_TxStop) {
++ netif_stop_queue(pD);
++ pP->d.txStopped = 1;
++ if(filled > LVL_TxStop) {
++ _PRTK_SYSFAIL(("ep93xxEth_hardStartXmit(): a Tx Request while stop\n"));
++ return 1;
++ }
++ }
+
+- netif_start_queue(dev);
++ if (pSkb->len < 60) {
++ pQTxDesc->f.bl = 60;
++ memset(pP->s.pTxBufDesc[idxQTxDescHd].vaddr, 0, 60);
++ } else
++ pQTxDesc->f.bl = pSkb->len;
++ pQTxDesc->f.ba = pP->s.phyTxBuf+(idxQTxDescHd * LEN_TxBuf);//virt_to_bus(pP->s.pTxBufDesc[idxQTxDescHd].vaddr);
++ pQTxDesc->f.bi = idxQTxDescHd;
++ pQTxDesc->f.af = 0;
++ pQTxDesc->f.eof = 1;
++
++ memcpy(pP->s.pTxBufDesc[idxQTxDescHd].vaddr, pSkb->data, pSkb->len);
++ pP->s.pTxBufDesc[idxQTxDescHd].pFreeRtn = 0;
++
++ free_skb(pSkb);
++
++ pP->d.idxQueTxDescHead = IdxNext(pP->d.idxQueTxDescHead,
++ LEN_QueTxDesc);
++ RegWr32(REG_TxDEQ, 1);
+
+ return 0;
+ }
+
+-static int ep93xx_close(struct net_device *dev)
++/*****************************************************************************
++ . ep93xxEth_close()
++ .
++ . this makes the board clean up everything that it can
++ . and not talk to the outside world. Caused by
++ . an 'ifconfig ethX down'
++ *
++*****************************************************************************/
++static int
++ep93xxEth_close(struct net_device *pD)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
++ netif_stop_queue(pD);
++ eth_shutDown(pD);
+
+- napi_disable(&ep->napi);
+- netif_stop_queue(dev);
+-
+- wrl(ep, REG_GIINTMSK, 0);
+- free_irq(ep->irq, dev);
+- ep93xx_stop_hw(dev);
+- ep93xx_free_buffers(ep);
++ /*MOD_DEC_USE_COUNT;*/
+
+ return 0;
+ }
+
+-static int ep93xx_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
++/*******************************************************
++ * ep93xxEth_open()
++ *
++ * Open and Initialize the board
++ *
++ * Set up everything, reset the card, etc ..
++ *
++ ******************************************************/
++static int
++ep93xxEth_open(struct net_device *pD)
+ {
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- struct mii_ioctl_data *data = if_mii(ifr);
++ int status;
++ struct ep93xxEth_info *pP = pD->priv;
+
+- return generic_mii_ioctl(&ep->mii, data, cmd, NULL);
+-}
++ memset(&pP->d, 0, sizeof(pP->d));
+
+-static int ep93xx_mdio_read(struct net_device *dev, int phy_id, int reg)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- int data;
+- int i;
++ /*MOD_INC_USE_COUNT;*/
+
+- wrl(ep, REG_MIICMD, REG_MIICMD_READ | (phy_id << 5) | reg);
++ status = eth_init(pD);
++ if (status != 0 )
++ return -EAGAIN;
+
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
+- break;
+- msleep(1);
+- }
++ eth_enable(pD);
+
+- if (i == 10) {
+- printk(KERN_INFO DRV_MODULE_NAME ": mdio read timed out\n");
+- data = 0xffff;
+- } else {
+- data = rdl(ep, REG_MIIDATA);
+- }
++#if 0
++ _dbg_phy_dumpReg(pD);
++ _dbg_ep93xxeth_dumpReg(pD);
++ _dbg_ep93xxEth_dumpQueues(pD);
++#endif
+
+- return data;
++ netif_start_queue(pD);
++
++ return 0;
+ }
+
+-static void ep93xx_mdio_write(struct net_device *dev, int phy_id, int reg, int data)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
++/*****************************************************************************
++ .
++ . ep93xxEth_probe( struct net_device * dev )
++ . This is the first routine called to probe device existance
++ . and initialize the driver if the device found.
++ .
++ . Input parameters:
++ . dev->base_addr == 0, try to find all possible locations
++ . dev->base_addr == 1, return failure code
++ . dev->base_addr == 2, always allocate space, and return success
++ . dev->base_addr == <anything else> this is the address to check
++ .
++ . Output:
++ . 0 --> there is a device
++ . anything else, error
++
++*****************************************************************************/
++int ep93xxEth_probe(struct net_device *pD) {
++ struct ep93xxEth_info *pP;
++ int err;
+ int i;
+
+- wrl(ep, REG_MIIDATA, data);
+- wrl(ep, REG_MIICMD, REG_MIICMD_WRITE | (phy_id << 5) | reg);
+-
+- for (i = 0; i < 10; i++) {
+- if ((rdl(ep, REG_MIISTS) & REG_MIISTS_BUSY) == 0)
+- break;
+- msleep(1);
++ if (pD->priv == 0) {
++ pD->priv = kmalloc(sizeof(struct ep93xxEth_info), GFP_KERNEL);
++ if(pD->priv == 0)
++ return -ENOMEM;
+ }
++ memset(pD->priv, 0x00, sizeof(struct ep93xxEth_info));
+
+- if (i == 10)
+- printk(KERN_INFO DRV_MODULE_NAME ": mdio write timed out\n");
+-}
++ pP = pD->priv;
++ pP->s.id = numOfInstance;
++ pP->s.miiIdPhy = 1;
+
+-static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
+-{
+- strcpy(info->driver, DRV_MODULE_NAME);
+- strcpy(info->version, DRV_MODULE_VERSION);
+-}
++ for (i = 0; i < 6; i++)
++ pD->dev_addr[i] = default_mac[i];
+
+-static int ep93xx_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_ethtool_gset(&ep->mii, cmd);
+-}
++ err = (int)request_irq(pD->irq, &ep93xxEth_isr, 0, cardname, pD);
++ if(err) {
++ kfree(pD->priv);
++ return -EAGAIN;
++ }
+
+-static int ep93xx_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_ethtool_sset(&ep->mii, cmd);
+-}
++ pD->open = &ep93xxEth_open;
++ pD->stop = &ep93xxEth_close;
++ pD->hard_start_xmit = &ep93xxEth_hardStartXmit;
++ pD->tx_timeout = &ep93xxEth_txTimeout;
++ pD->watchdog_timeo = HZ * 5;
++ pD->get_stats = &ep93xxEth_getStats;
++ pD->set_multicast_list = &ep93xxEth_setMulticastList;
+
+-static int ep93xx_nway_reset(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_nway_restart(&ep->mii);
+-}
++ ether_setup(pD);
+
+-static u32 ep93xx_get_link(struct net_device *dev)
+-{
+- struct ep93xx_priv *ep = netdev_priv(dev);
+- return mii_link_ok(&ep->mii);
+-}
++ devQue_init(pD);
++ eth_reset(pD);
+
+-static struct ethtool_ops ep93xx_ethtool_ops = {
+- .get_drvinfo = ep93xx_get_drvinfo,
+- .get_settings = ep93xx_get_settings,
+- .set_settings = ep93xx_set_settings,
+- .nway_reset = ep93xx_nway_reset,
+- .get_link = ep93xx_get_link,
+-};
++ numOfInstance++;
+
+-struct net_device *ep93xx_dev_alloc(struct ep93xx_eth_data *data)
+-{
+- struct net_device *dev;
++ err = register_netdev(pD);
++ if (err) {
++ free_irq(pD->irq, pD);
++ kfree(pP);
++ return err;
++ }
+
+- dev = alloc_etherdev(sizeof(struct ep93xx_priv));
+- if (dev == NULL)
+- return NULL;
++ return 0;
++}
+
+- memcpy(dev->dev_addr, data->dev_addr, ETH_ALEN);
++static int ep93xxEth_drv_probe(struct platform_device *pdev)
++{
++ struct net_device *ndev;
++ struct resource *res;
++ int ret;
+
+- dev->get_stats = ep93xx_get_stats;
+- dev->ethtool_ops = &ep93xx_ethtool_ops;
+- dev->hard_start_xmit = ep93xx_xmit;
+- dev->open = ep93xx_open;
+- dev->stop = ep93xx_close;
+- dev->do_ioctl = ep93xx_ioctl;
++ PRINTK("ep93xxEth_drv_probe init\n");
+
+- dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!res){
++ printk("platform_get_resource fail\n");
++ return -ENODEV;
++ }
+
+- return dev;
+-}
++ if (!request_mem_region(res->start, 0x10000, cardname)){
++ printk("request_mem_region fail\n");
++ return -EBUSY;
++ }
+
++ ndev = alloc_etherdev(sizeof(struct ep93xxEth_info));
++ if (!ndev) {
++ release_mem_region(res->start, 0x10000);
++ printk("alloc_etherdev fail\n");
++ return -ENOMEM;
++ }
+
+-static int ep93xx_eth_remove(struct platform_device *pdev)
+-{
+- struct net_device *dev;
+- struct ep93xx_priv *ep;
+
+- dev = platform_get_drvdata(pdev);
+- if (dev == NULL)
+- return 0;
+- platform_set_drvdata(pdev, NULL);
++ SET_NETDEV_DEV(ndev, &pdev->dev);
+
+- ep = netdev_priv(dev);
++ ndev->base_addr = (unsigned long)ioremap(res->start, 0x10000);
++ if (!ndev->base_addr) {
++ printk("ioremap failed\n");
++ release_mem_region(res->start, 0x10000);
++ return -ENOMEM;
++ }
++ ndev->irq = platform_get_irq(pdev, 0);
+
+- /* @@@ Force down. */
+- unregister_netdev(dev);
+- ep93xx_free_buffers(ep);
+
+- if (ep->base_addr != NULL)
+- iounmap(ep->base_addr);
++ dev_set_drvdata(&pdev->dev, ndev);
+
+- if (ep->res != NULL) {
+- release_resource(ep->res);
+- kfree(ep->res);
++ ret = ep93xxEth_probe(ndev);
++ if (ret != 0) {
++ free_netdev(ndev);
++ release_mem_region(res->start, 0x10000);
++ printk("ep93xxEth_probe fail\n");
++ return ret;
+ }
+
+- free_netdev(dev);
+-
+ return 0;
+ }
+
+-static int ep93xx_eth_probe(struct platform_device *pdev)
++static int ep93xxEth_drv_remove(struct platform_device *pdev)
+ {
+- struct ep93xx_eth_data *data;
+- struct net_device *dev;
+- struct ep93xx_priv *ep;
+- int err;
++ struct net_device *ndev = dev_get_drvdata(&pdev->dev);
++ struct resource *res;
+
+- if (pdev == NULL)
+- return -ENODEV;
+- data = pdev->dev.platform_data;
++ dev_set_drvdata(&pdev->dev, NULL);
+
+- dev = ep93xx_dev_alloc(data);
+- if (dev == NULL) {
+- err = -ENOMEM;
+- goto err_out;
+- }
+- ep = netdev_priv(dev);
+- ep->dev = dev;
+- netif_napi_add(dev, &ep->napi, ep93xx_poll, 64);
+-
+- platform_set_drvdata(pdev, dev);
+-
+- ep->res = request_mem_region(pdev->resource[0].start,
+- pdev->resource[0].end - pdev->resource[0].start + 1,
+- pdev->dev.bus_id);
+- if (ep->res == NULL) {
+- dev_err(&pdev->dev, "Could not reserve memory region\n");
+- err = -ENOMEM;
+- goto err_out;
+- }
+-
+- ep->base_addr = ioremap(pdev->resource[0].start,
+- pdev->resource[0].end - pdev->resource[0].start);
+- if (ep->base_addr == NULL) {
+- dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n");
+- err = -EIO;
+- goto err_out;
+- }
+- ep->irq = pdev->resource[1].start;
+-
+- ep->mii.phy_id = data->phy_id;
+- ep->mii.phy_id_mask = 0x1f;
+- ep->mii.reg_num_mask = 0x1f;
+- ep->mii.dev = dev;
+- ep->mii.mdio_read = ep93xx_mdio_read;
+- ep->mii.mdio_write = ep93xx_mdio_write;
+- ep->mdc_divisor = 40; /* Max HCLK 100 MHz, min MDIO clk 2.5 MHz. */
++ unregister_netdev(ndev);
+
+- err = register_netdev(dev);
+- if (err) {
+- dev_err(&pdev->dev, "Failed to register netdev\n");
+- goto err_out;
+- }
++ free_irq(ndev->irq, ndev);
+
+- printk(KERN_INFO "%s: ep93xx on-chip ethernet, IRQ %d, "
+- "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x.\n", dev->name,
+- ep->irq, data->dev_addr[0], data->dev_addr[1],
+- data->dev_addr[2], data->dev_addr[3],
+- data->dev_addr[4], data->dev_addr[5]);
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ release_mem_region(res->start, 0x10000);
+
+- return 0;
++ free_netdev(ndev);
+
+-err_out:
+- ep93xx_eth_remove(pdev);
+- return err;
++ return 0;
+ }
+
+-
+ static struct platform_driver ep93xx_eth_driver = {
+- .probe = ep93xx_eth_probe,
+- .remove = ep93xx_eth_remove,
++ .probe = ep93xxEth_drv_probe,
++ .remove = ep93xxEth_drv_remove,
+ .driver = {
+- .name = "ep93xx-eth",
++ .name = cardname,
++ .owner = THIS_MODULE,
+ },
+ };
+
+-static int __init ep93xx_eth_init_module(void)
++static int __init ep93xxEth_init(void)
+ {
+- printk(KERN_INFO DRV_MODULE_NAME " version " DRV_MODULE_VERSION " loading\n");
++ PRINTK("ep93xxEth_init\n");
+ return platform_driver_register(&ep93xx_eth_driver);
+ }
+
+-static void __exit ep93xx_eth_cleanup_module(void)
++static void __exit ep93xxEth_cleanup(void)
+ {
+ platform_driver_unregister(&ep93xx_eth_driver);
+ }
+
+-module_init(ep93xx_eth_init_module);
+-module_exit(ep93xx_eth_cleanup_module);
++module_init(ep93xxEth_init);
++module_exit(ep93xxEth_cleanup);
++
++MODULE_AUTHOR("Cirrus Logic");
++MODULE_DESCRIPTION("EP93xx ethernet driver");
+ MODULE_LICENSE("GPL");
+Index: linux-2.6.24.7/drivers/net/arm/ep93xx_eth.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24.7/drivers/net/arm/ep93xx_eth.h 2009-09-16 17:37:41.000000000 +0100
+@@ -0,0 +1,402 @@
++/*------------------------------------------------------------------------
++ * ep93xx_eth.h
++ * : header file of Ethernet Device Driver for Cirrus Logic EP93xx.
++ *
++ * Copyright (C) 2003 by Cirrus Logic www.cirrus.com
++ * This software may be used and distributed according to the terms
++ * of the GNU Public License.
++ *
++ * This file contains device related information like register info
++ * and register access method macros for the Ethernet device
++ * embedded within Cirrus Logic's EP93xx SOC chip.
++ *
++ * Information contained in this file was obtained from
++ * the EP9312 Manual Revision 0.12 and 0.14 from Cirrus Logic.
++ *
++ * History
++ * 05/18/01 Sungwook Kim Initial release
++ * 03/25/2003 Melody Modified for EP92xx
++ *--------------------------------------------------------------------------*/
++
++
++#ifndef _EP9213_ETH_H_
++#define _EP9213_ETH_H_
++
++
++/*---------------------------------------------------------------
++ * Definition of H/W Defects and Their Workarounds
++ *-------------------------------------------------------------*/
++
++
++
++/*---------------------------------------------------------------
++ * Data types used in this driver
++ *-------------------------------------------------------------*/
++typedef unsigned char U8;
++typedef unsigned short U16;
++typedef unsigned long U32;
++typedef unsigned int UINT;
++
++
++
++/*---------------------------------------------------------------
++ * Definition of the registers.
++ * For details, refer to the datasheet .
++ *
++ * Basically, most registers are 32 bits width register.
++ * But some are 16 bits and some are 6 or 8 bytes long.
++ *-------------------------------------------------------------*/
++
++#define REG_RxCTL 0x0000 /*offset to Receiver Control Reg*/
++#define RxCTL_PauseA (1<<20)
++#define RxCTL_RxFCE1 (1<<19)
++#define RxCTL_RxFCE0 (1<<18)
++#define RxCTL_BCRC (1<<17)
++#define RxCTL_SRxON (1<<16)
++#define RxCTL_RCRCA (1<<13)
++#define RxCTL_RA (1<<12)
++#define RxCTL_PA (1<<11)
++#define RxCTL_BA (1<<10)
++#define RxCTL_MA (1<<9)
++#define RxCTL_IAHA (1<<8)
++#define RxCTL_IA3 (1<<3)
++#define RxCTL_IA2 (1<<2)
++#define RxCTL_IA1 (1<<1)
++#define RxCTL_IA0 (1<<0)
++
++#define REG_TxCTL 0x0004 /*offset to Transmit Control Reg*/
++#define TxCTL_DefDis (1<<7)
++#define TxCTL_MBE (1<<6)
++#define TxCTL_ICRC (1<<5)
++#define TxCTL_TxPD (1<<5)
++#define TxCTL_OColl (1<<3)
++#define TxCTL_SP (1<<2)
++#define TxCTL_PB (1<<1)
++#define TxCTL_STxON (1<<0)
++
++#define REG_TestCTL 0x0008 /*Test Control Reg, R/W*/
++#define TestCTL_MACF (1<<7)
++#define TestCTL_MFDX (1<<6)
++#define TestCTL_DB (1<<5)
++#define TestCTL_MIIF (1<<4)
++
++#define REG_MIICmd 0x0010 /*offset to MII Command Reg, R/W*/
++#define MIICmd_OP (0x03<<14)
++#define MIICmd_OP_RD (2<<14)
++#define MIICmd_OP_WR (1<<14)
++#define MIICmd_PHYAD (0x1f<<5)
++#define MIICmd_REGAD (0x1f<<0)
++
++#define REG_MIIData 0x0014 /*offset to MII Data Reg, R/W*/
++#define MIIData_MIIData (0xffff<<0)
++
++#define REG_MIISts 0x0018 /*offset to MII Status Reg, R*/
++#define MIISts_Busy (1<<0)
++
++#define REG_SelfCTL 0x0020 /*offset to Self Control Reg*/
++#define SelfCTL_RWP (1<<7) /*Remote Wake Pin*/
++#define SelfCTL_GPO0 (1<<5)
++#define SelfCTL_PUWE (1<<4)
++#define SelfCTL_PDWE (1<<3)
++#define SelfCTL_MIIL (1<<2)
++#define SelfCTL_RESET (1<<0)
++
++#define REG_IntEn 0x0024 /*Interrupt Enable Reg, R/W*/
++#define IntEn_RWIE (1<<30)
++#define IntEn_RxMIE (1<<29)
++#define IntEn_RxBIE (1<<28)
++#define IntEn_RxSQIE (1<<27)
++#define IntEn_TxLEIE (1<<26)
++#define IntEn_ECIE (1<<25)
++#define IntEn_TxUHIE (1<<24)
++#define IntEn_MOIE (1<<18)
++#define IntEn_TxCOIE (1<<17)
++#define IntEn_RxROIE (1<<16)
++#define IntEn_MIIIE (1<<12)
++#define IntEn_PHYSIE (1<<11)
++#define IntEn_TIE (1<<10)
++#define IntEn_SWIE (1<<8)
++#define IntEn_TxSQIE (1<<3)
++#define IntEn_RxEOFIE (1<<2)
++#define IntEn_RxEOBIE (1<<1)
++#define IntEn_RxHDRIE (1<<0)
++
++#define REG_IntStsP 0x0028 /*offset to Interrupt Status Preserve Reg, R/W*/
++#define REG_IntStsC 0x002c /*offset to Interrupt Status Clear Reg, R*/
++#define IntSts_RWI (1<<30)
++#define IntSts_RxMI (1<<29)
++#define IntSts_RxBI (1<<28)
++#define IntSts_RxSQI (1<<27)
++#define IntSts_TxLEI (1<<26)
++#define IntSts_ECI (1<<25)
++#define IntSts_TxUHI (1<<24)
++#define IntSts_MOI (1<<18)
++#define IntSts_TxCOI (1<<17)
++#define IntSts_RxROI (1<<16)
++#define IntSts_MIII (1<<12)
++#define IntSts_PHYSI (1<<11)
++#define IntSts_TI (1<<10)
++#define IntSts_AHBE (1<<9)
++#define IntSts_SWI (1<<8)
++#define IntSts_OTHER (1<<4)
++#define IntSts_TxSQ (1<<3)
++#define IntSts_RxSQ (1<<2)
++
++#define REG_GT 0x0040 /*offset to General Timer Reg*/
++#define GT_GTC (0xffff<<16)
++#define GT_GTP (0xffff<<0)
++
++#define REG_FCT 0x0044 /*offset to Flow Control Timer Reg*/
++#define FCT_FCT (0x00ffffff<<0)
++
++#define REG_FCF 0x0048 /*offset to Flow Control Format Reg*/
++#define FCF_MACCT (0xffff<<16)
++#define FCF_TPT (0xffff<<0)
++
++#define REG_AFP 0x004c /*offset to Address Filter Pointer Reg*/
++#define AFP_AFP (0x07<<0) /*Address Filter Pointer (bank control for REG_IndAD)*/
++#define AFP_AFP_IA0 0 /*Primary Individual Address (MAC Addr)*/
++#define AFP_AFP_IA1 1 /*Individual Address 1*/
++#define AFP_AFP_IA2 2 /*Individual Address 2*/
++#define AFP_AFP_IA3 3 /*Individual Address 3*/
++#define AFP_AFP_DTxP 6 /*Destination Address of Tx Pause Frame*/
++#define AFP_AFP_HASH 7 /*Hash Table*/
++
++#define REG_IndAD 0x0050 /*offset to Individual Address Reg, n bytes, R/W*/
++
++#define REG_GIntSts 0x0060 /*offset to Global Interrupt Status Reg (writing 1 will clear)*/
++#define REG_GIntROS 0x0068 /*offset to Global Interrupt Status Read Only Reg*/
++#define GIntSts_INT (1<<15) /*Global Interrupt Request Status*/
++
++#define REG_GIntMsk 0x0064 /*offset to Global Interrupt Mask Reg*/
++#define GIntMsk_IntEn (1<<15) /*Global Interrupt Enable*/
++
++#define REG_GIntFrc 0x006c /*offset to Global Interrupt Force Reg*/
++#define GIntFrc_INT (1<<15) /*Force to set GIntSts*/
++
++#define REG_TxCollCnt 0x0070 /*Transmit Collision Count Reg, R*/
++#define REG_RxMissCnt 0x0074 /*Receive Miss Count Reg, R*/
++#define REG_RxRntCnt 0x0078 /*Receive Runt Count Reg, R*/
++
++#define REG_BMCtl 0x0080 /*offset to Bus Master Control Reg, R/W*/
++#define BMCtl_MT (1<<13)
++#define BMCtl_TT (1<<12)
++#define BMCtl_UnH (1<<11)
++#define BMCtl_TxChR (1<<10)
++#define BMCtl_TxDis (1<<9)
++#define BMCtl_TxEn (1<<8)
++#define BMCtl_EH2 (1<<6)
++#define BMCtl_EH1 (1<<5)
++#define BMCtl_EEOB (1<<4)
++#define BMCtl_RxChR (1<<2)
++#define BMCtl_RxDis (1<<1)
++#define BMCtl_RxEn (1<<0)
++
++#define REG_BMSts 0x0084 /*offset to Bus Master Status Reg, R*/
++#define BMSts_TxAct (1<<7)
++#define BMSts_TP (1<<4)
++#define BMSts_RxAct (1<<3)
++#define BMSts_QID (0x07<<0)
++#define BMSts_QID_RxDt (0<<0)
++#define BMSts_QID_TxDt (1<<0)
++#define BMSts_QID_RxSts (2<<0)
++#define BMSts_QID_TxSts (3<<0)
++#define BMSts_QID_RxDesc (4<<0)
++#define BMSts_QID_TxDesc (5<<0)
++
++#define REG_RBCA 0x0088 /*offset to Receive Buffer Current Address Reg, R*/
++#define REG_TBCA 0x008c /*offset to Transmit Buffer Current Address Reg, R*/
++
++#define REG_RxDBA 0x0090 /*offset to Receive Descriptor Queue Base Address Reg, R/W*/
++#define REG_RxDBL 0x0094 /*offset to Receive Descriptor Queue Base Length Reg, R/W, 16bits*/
++#define REG_RxDCL 0x0096 /*offset to Receive Descriptor Queue Current Length Reg, R/W, 16bits*/
++#define REG_RxDCA 0x0098 /*offset to Receive Descriptor Queue Current Address Reg, R/W*/
++
++#define REG_RxDEQ 0x009c /*offset to Receive Descriptor Enqueue Reg, R/W*/
++#define RxDEQ_RDV (0xffff<<16) /*R 16bit; Receive Descriptor Value*/
++#define RxDEQ_RDI (0xff<<0) /*W 8bit; Receive Descriptor Increment*/
++
++#define REG_RxSBA 0x00a0 /*offset to Receive Status Queue Base Address Reg, R/W*/
++#define REG_RxSBL 0x00a4 /*offset to Receive Status Queue Base Length Reg, R/W, 16bits*/
++#define REG_RxSCL 0x00a6 /*offset to Receive Status Queue Current Length Reg, R/W, 16bits*/
++#define REG_RxSCA 0x00a8 /*offset to Receive Status Queue Current Address Reg, R/W*/
++
++#define REG_RxSEQ 0x00ac /*offset to Receive Status Queue Current Address Reg, R/W*/
++#define RxSEQ_RSV (0xffff<<16)
++#define RxSEQ_RSI (0xff<<0)
++
++#define REG_TxDBA 0x00b0 /*offset to Transmit Descriptor Queue Base Address Reg, R/W*/
++#define REG_TxDBL 0x00b4 /*offset to Transmit Descriptor Queue Base Length Reg, R/W, 16bits*/
++#define REG_TxDCL 0x00b6 /*offset to Transmit Descriptor Queue Current Length Reg, R/W, 16bits*/
++#define REG_TxDCA 0x00b8 /*offset to Transmit Descriptor Queue Current Address Reg, R/W*/
++
++#define REG_TxDEQ 0x00bc /*offset to Transmit Descriptor Queue Current Address Reg, R/W*/
++#define TxDEQ_TDV (0xffff<<16)
++#define TxDEQ_TDI (0xff<<0)
++
++#define REG_TxSBA 0x00c0 /*offset to Transmit Status Queue Base Address Reg, R/W*/
++#define REG_TxSBL 0x00c4 /*offset to Transmit Status Queue Base Length Reg, R/W, 16bits*/
++#define REG_TxSCL 0x00c6 /*offset to Transmit Status Queue Current Length Reg, R/W, 16bits*/
++#define REG_TxSCA 0x00c8 /*offset to Transmit Status Queue Current Address Reg, R/W*/
++
++#define REG_RxBTH 0x00d0 /*offset to Receive Buffer Threshold Reg, R/W*/
++#define RxBTH_RDHT (0x03ff<<16)
++#define RxBTH_RDST (0x03ff<<0)
++
++#define REG_TxBTH 0x00d4 /*offset to Transmit Buffer Threshold Reg, R/W*/
++#define TxBTH_TDHT (0x03ff<<16)
++#define TxBTH_TDST (0x03ff<<0)
++
++#define REG_RxSTH 0x00d8 /*offset to Receive Status Threshold Reg, R/W*/
++#define RxSTH_RSHT (0x003f<<16)
++#define RxSTH_RSST (0x003f<<0)
++
++#define REG_TxSTH 0x00dc /*offset to Transmit Status Threshold Reg, R/W*/
++#define TxSTH_TSHT (0x003f<<16)
++#define TxSTH_TSST (0x003f<<0)
++
++#define REG_RxDTH 0x00e0 /*offset to Receive Descriptor Threshold Reg, R/W*/
++#define RxDTH_RDHT (0x003f<<16)
++#define RxDTH_RDST (0x003f<<0)
++
++#define REG_TxDTH 0x00e4 /*offset to Transmit Descriptor Threshold Reg, R/W*/
++#define TxDTH_TDHT (0x003f<<16)
++#define TxDTH_TDST (0x003f<<0)
++
++#define REG_MaxFL 0x00e8 /*offset to Max Frame Length Reg, R/W*/
++#define MaxFL_MFL (0x07ff<<16)
++#define MaxFL_TST (0x07ff<<0)
++
++#define REG_RxHL 0x00ec /*offset to Receive Header Length Reg, R/W*/
++#define RxHL_RHL2 (0x07ff<<16)
++#define RxHL_RHL1 (0x03ff<<0)
++
++#define REG_MACCFG0 0x0100 /*offset to Test Reg #0, R/W*/
++#define MACCFG0_DbgSel (1<<7)
++#define MACCFG0_LCKEN (1<<6)
++#define MACCFG0_LRATE (1<<5)
++#define MACCFG0_RXERR (1<<4)
++#define MACCFG0_BIT33 (1<<2)
++#define MACCFG0_PMEEN (1<<1)
++#define MACCFG0_PMEST (1<<0)
++
++#define REG_MACCFG1 0x0104 /*offset to Test Reg #1, R/W*/
++#define REG_MACCFG2 0x0108 /*offset to Test Reg #2, R*/
++#define REG_MACCFG3 0x010c /*offset to Test Reg #3, R*/
++
++
++
++/*---------------------------------------------------------------
++ * Definition of Descriptor/Status Queue Entry
++ *-------------------------------------------------------------*/
++
++typedef union receiveDescriptor { /*data structure of Receive Descriptor Queue Entry*/
++ struct { /*whole value*/
++ U32 e0, /*1st dword entry*/
++ e1; /*2nd dword entry*/
++ } w;
++ struct { /*bit field definitions*/
++ U32 ba:32, /*Buffer Address (keep in mind this is physical address)*/
++ bl:16, /*b15-0; Buffer Length*/
++ bi:15, /*b30-16; Buffer Index*/
++ nsof:1; /*b31; Not Start Of Frame*/
++ } f;
++} receiveDescriptor;
++
++
++typedef union receiveStatus { /*data structure of Receive Status Queue Entry*/
++ struct { /*whole word*/
++ U32 e0, /*1st dword entry*/
++ e1; /*2nd dword entry*/
++ } w;
++ struct { /*bit field*/
++ U32 rsrv1:8, /*b7-0: reserved*/
++ hti:6, /*b13-8: Hash Table Index*/
++ rsrv2:1, /*b14: reserved*/
++ crci:1, /*b15: CRC Included*/
++ crce:1, /*b16: CRC Error*/
++ edata:1, /*b17: Extra Data*/
++ runt:1, /*b18: Runt Frame*/
++ fe:1, /*b19: Framing Error*/
++ oe:1, /*b20: Overrun Error*/
++ rxerr:1, /*b21: Rx Error*/
++ am:2, /*b23-22: Address Match*/
++ rsrv3:4, /*b27-24: reserved*/
++ eob:1, /*b28: End Of Buffer*/
++ eof:1, /*b29: End Of Frame*/
++ rwe:1, /*b30: Received Without Error*/
++ rfp:1, /*b31: Receive Frame Processed*/
++ fl:16, /*b15-0: frame length*/
++ bi:15, /*b30-16: Buffer Index*/
++ rfp2:1; /*b31: Receive Frame Processed at 2nd word*/
++ } f;
++} receiveStatus;
++
++
++typedef union transmitDescriptor { /*data structure of Transmit Descriptor Queue Entry*/
++ struct { /*whole value*/
++ U32 e0, /*1st dword entry*/
++ e1; /*2nd dword entry*/
++ } w;
++ struct { /*bit field*/
++ U32 ba:32, /*b31-0: Buffer Address (keep in mind this is physical address)*/
++ bl:12, /*b11-0: Buffer Length*/
++ rsrv1:3, /*b14-12: reserved*/
++ af:1, /*b15: Abort Frame*/
++ bi:15, /*b30-16: Buffer Index*/
++ eof:1; /*b31: End Of Frame*/
++
++ } f;
++} transmitDescriptor;
++
++
++typedef union transmitStatus { /*data structure of Transmit Status Queue Entry*/
++ struct { /*whole word*/
++ U32 e0; /*1st dword entry*/
++ } w;
++ struct { /*bit field*/
++ U32 bi:15, /*b14-0: Buffer Index*/
++ rsrv3:1, /*b15: reserved*/
++ ncoll:5, /*b20-16: Number of Collisions*/
++ rsrv2:3, /*b23-21: reserved*/
++ ecoll:1, /*b24: Excess Collisions*/
++ txu:1, /*b25: Tx Underrun*/
++ ow:1, /*b26: Out of Window*/
++ rsrv1:1, /*b27: reserved*/
++ lcrs:1, /*b28: Loss of CRS*/
++ fa:1, /*b29: Frame Abort*/
++ txwe:1, /*b30: Transmitted Without Error*/
++ txfp:1; /*b31: Transmit Frame Processed*/
++ } f;
++} transmitStatus;
++
++
++
++/*---------------------------------------------------------------
++ * Size of device registers occupied in memory/IO address map
++ *-------------------------------------------------------------*/
++#define DEV_REG_SPACE 0x00010000
++
++/*
++#define U8 unsigned char
++#define U16 unsigned short
++#define U32 unsigned long
++*/
++
++/*---------------------------------------------------------------
++ * A definition of register access macros
++ *-------------------------------------------------------------*/
++#define _RegRd(type,ofs) (*(volatile type*)(ofs))
++#define _RegWr(type,ofs,dt) *(volatile type*)(ofs)=((type)(dt))
++
++#define RegRd8(ofs) _RegRd(U8,(char*)pD->base_addr+(ofs))
++#define RegRd16(ofs) _RegRd(U16,(char*)pD->base_addr+(ofs))
++#define RegRd32(ofs) _RegRd(U32,(char*)pD->base_addr+(ofs))
++#define RegWr8(ofs,dt) _RegWr(U8,(char*)pD->base_addr+(ofs),(dt))
++#define RegWr16(ofs,dt) _RegWr(U16,(char*)pD->base_addr+(ofs),(dt))
++#define RegWr32(ofs,dt) _RegWr(U32,(char*)pD->base_addr+(ofs),(dt))
++
++
++
++#endif /* _EP9213_ETH_H_ */
++
diff --git a/recipes/linux/linux-2.6.32/ep93xx/ep93xx-i2c.patch b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-i2c.patch
new file mode 100644
index 0000000000..60b9af1bc1
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-i2c.patch
@@ -0,0 +1,234 @@
+---
+ drivers/i2c/busses/Kconfig | 5 +
+ drivers/i2c/busses/Makefile | 1
+ drivers/i2c/busses/i2c-ep93xx.c | 194 ++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 200 insertions(+)
+
+--- linux-2.6.32.orig/drivers/i2c/busses/Kconfig
++++ linux-2.6.32/drivers/i2c/busses/Kconfig
+@@ -351,10 +351,15 @@ config I2C_DESIGNWARE
+ Synopsys DesignWare I2C adapter. Only master mode is supported.
+
+ This driver can also be built as a module. If so, the module
+ will be called i2c-designware.
+
++config I2C_EP93XX
++ tristate "EP93XX I2C"
++ depends on I2C && ARCH_EP93XX
++ select I2C_ALGOBIT
++
+ config I2C_GPIO
+ tristate "GPIO-based bitbanging I2C"
+ depends on GENERIC_GPIO
+ select I2C_ALGOBIT
+ help
+--- linux-2.6.32.orig/drivers/i2c/busses/Makefile
++++ linux-2.6.32/drivers/i2c/busses/Makefile
+@@ -72,9 +72,10 @@ obj-$(CONFIG_I2C_PCA_PLATFORM) += i2c-pc
+ obj-$(CONFIG_I2C_PMCMSP) += i2c-pmcmsp.o
+ obj-$(CONFIG_I2C_SIBYTE) += i2c-sibyte.o
+ obj-$(CONFIG_I2C_STUB) += i2c-stub.o
+ obj-$(CONFIG_SCx200_ACB) += scx200_acb.o
+ obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o
++obj-$(CONFIG_I2C_EP93XX) += i2c-ep93xx.o
+
+ ifeq ($(CONFIG_I2C_DEBUG_BUS),y)
+ EXTRA_CFLAGS += -DDEBUG
+ endif
+--- /dev/null
++++ linux-2.6.32/drivers/i2c/busses/i2c-ep93xx.c
+@@ -0,0 +1,194 @@
++/* ------------------------------------------------------------------------ *
++ * i2c-ep933xx.c I2C bus glue for Cirrus EP93xx *
++ * ------------------------------------------------------------------------ *
++
++ Copyright (C) 2004 Michael Burian
++
++ Based on i2c-parport-light.c
++ Copyright (C) 2003-2004 Jean Delvare <khali@linux-fr.org>
++
++ 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 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, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ * ------------------------------------------------------------------------ */
++
++
++//#include <linux/config.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <linux/delay.h>
++#include <linux/i2c.h>
++#include <linux/i2c-algo-bit.h>
++#include <asm/io.h>
++#include <mach/hardware.h>
++
++//1/(2*clockfrequency)
++#define EE_DELAY_USEC 50
++#define GPIOG_EECLK 1
++#define GPIOG_EEDAT 2
++
++/* ----- I2C algorithm call-back functions and structures ----------------- */
++
++// TODO: optimize
++static void ep93xx_setscl(void *data, int state)
++{
++ unsigned int uiPGDR, uiPGDDR;
++
++ uiPGDR = inl(GPIO_PGDR);
++ uiPGDDR = inl(GPIO_PGDDR);
++
++ /* Configure the clock line as output. */
++ uiPGDDR |= GPIOG_EECLK;
++ outl(uiPGDDR, GPIO_PGDDR);
++
++ /* Set clock line to state */
++ if(state)
++ uiPGDR |= GPIOG_EECLK;
++ else
++ uiPGDR &= ~GPIOG_EECLK;
++
++ outl(uiPGDR, GPIO_PGDR);
++}
++
++static void ep93xx_setsda(void *data, int state)
++{
++ unsigned int uiPGDR, uiPGDDR;
++
++ uiPGDR = inl(GPIO_PGDR);
++ uiPGDDR = inl(GPIO_PGDDR);
++
++ /* Configure the data line as output. */
++ uiPGDDR |= GPIOG_EEDAT;
++ outl(uiPGDDR, GPIO_PGDDR);
++
++ /* Set data line to state */
++ if(state)
++ uiPGDR |= GPIOG_EEDAT;
++ else
++ uiPGDR &= ~GPIOG_EEDAT;
++
++ outl(uiPGDR, GPIO_PGDR);
++}
++
++static int ep93xx_getscl(void *data)
++{
++ unsigned int uiPGDR, uiPGDDR;
++
++ uiPGDR = inl(GPIO_PGDR);
++ uiPGDDR = inl(GPIO_PGDDR);
++
++ /* Configure the clock line as input */
++ uiPGDDR &= ~GPIOG_EECLK;
++ outl(uiPGDDR, GPIO_PGDDR);
++
++ /* Return state of the clock line */
++ return (inl(GPIO_PGDR) & GPIOG_EECLK) ? 1 : 0;
++}
++
++static int ep93xx_getsda(void *data)
++{
++ unsigned int uiPGDR, uiPGDDR;
++ uiPGDR = inl(GPIO_PGDR);
++ uiPGDDR = inl(GPIO_PGDDR);
++
++ /* Configure the data line as input */
++ uiPGDDR &= ~GPIOG_EEDAT;
++ outl(uiPGDDR, GPIO_PGDDR);
++
++ /* Return state of the data line */
++ return (inl(GPIO_PGDR) & GPIOG_EEDAT) ? 1 : 0;
++}
++
++/* ------------------------------------------------------------------------
++ * Encapsulate the above functions in the correct operations structure.
++ * This is only done when more than one hardware adapter is supported.
++ */
++
++/* last line (us, ms, timeout)
++ * us dominates the bit rate: 10us means: 100Kbit/sec(25 means 40kbps)
++ * 10ms not known
++ * 100ms timeout
++ */
++static struct i2c_algo_bit_data ep93xx_data = {
++ .setsda = ep93xx_setsda,
++ .setscl = ep93xx_setscl,
++ .getsda = ep93xx_getsda,
++ .getscl = ep93xx_getscl,
++ .udelay = 10,
++ //.mdelay = 10,
++ .timeout = HZ,
++};
++
++/* ----- I2c structure ---------------------------------------------------- */
++static struct i2c_adapter ep93xx_adapter = {
++ .owner = THIS_MODULE,
++ .class = I2C_CLASS_HWMON,
++/* .id = I2C_HW_B_LP,*/
++ .algo_data = &ep93xx_data,
++ .name = "EP93XX I2C bit-bang interface",
++};
++
++/* ----- Module loading, unloading and information ------------------------ */
++
++static int __init i2c_ep93xx_init(void)
++{
++ unsigned long uiPGDR, uiPGDDR;
++
++ /* Read the current value of the GPIO data and data direction registers. */
++ uiPGDR = inl(GPIO_PGDR);
++ uiPGDDR = inl(GPIO_PGDDR);
++
++ /* If the GPIO pins have not been configured since reset, the data
++ * and clock lines will be set as inputs and with data value of 0.
++ * External pullup resisters are pulling them high.
++ * Set them both high before configuring them as outputs. */
++ uiPGDR |= (GPIOG_EEDAT | GPIOG_EECLK);
++ outl(uiPGDR, GPIO_PGDR);
++
++ /* Delay to meet the EE Interface timing specification. */
++ udelay(EE_DELAY_USEC);
++
++
++ /* Configure the EE data and clock lines as outputs. */
++ uiPGDDR |= (GPIOG_EEDAT | GPIOG_EECLK);
++ outl(uiPGDDR, GPIO_PGDDR);
++
++ /* Delay to meet the EE Interface timing specification. */
++ udelay(EE_DELAY_USEC);
++
++ /* Reset hardware to a sane state (SCL and SDA high) */
++ ep93xx_setsda(NULL, 1);
++ ep93xx_setscl(NULL, 1);
++
++ if (i2c_bit_add_bus(&ep93xx_adapter) > 0) {
++ printk(KERN_ERR "i2c-ep93xx: Unable to register with I2C\n");
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++static void __exit i2c_ep93xx_exit(void)
++{
++ //i2c_bit_del_bus(&ep93xx_adapter);
++ i2c_del_adapter(&ep93xx_adapter);
++}
++
++MODULE_AUTHOR("Michael Burian");
++MODULE_DESCRIPTION("I2C bus glue for Cirrus EP93xx processors");
++MODULE_LICENSE("GPL");
++
++module_init(i2c_ep93xx_init);
++module_exit(i2c_ep93xx_exit);
diff --git a/recipes/linux/linux-2.6.32/ep93xx/ep93xx-regs.patch b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-regs.patch
new file mode 100644
index 0000000000..5b77633960
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-regs.patch
@@ -0,0 +1,490 @@
+---
+ arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | 440 ++++++++++++++++++++++++
+ 1 file changed, 440 insertions(+)
+
+--- linux-2.6.32.orig/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
++++ linux-2.6.32/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h
+@@ -60,10 +60,36 @@
+ #define EP93XX_APB_SIZE 0x00200000
+
+ #define EP93XX_APB_PHYS(x) (EP93XX_APB_PHYS_BASE + (x))
+ #define EP93XX_APB_IOMEM(x) IOMEM(EP93XX_APB_VIRT_BASE + (x))
+
++/* 8081_0000 - 8081_ffff: Timers */
++#define TIMERS_OFFSET 0x010000
++#define TIMERS_BASE (EP93XX_APB_VIRT_BASE|TIMERS_OFFSET)
++
++#define TIMER1LOAD (TIMERS_BASE+0x00)
++#define TIMER1VALUE (TIMERS_BASE+0x04)
++#define TIMER1CONTROL (TIMERS_BASE+0x08)
++#define TIMER1CLEAR (TIMERS_BASE+0x0C)
++#define TIMER1TEST (TIMERS_BASE+0x10)
++
++#define TIMER2LOAD (TIMERS_BASE+0x20)
++#define TIMER2VALUE (TIMERS_BASE+0x24)
++#define TIMER2CONTROL (TIMERS_BASE+0x28)
++#define TIMER2CLEAR (TIMERS_BASE+0x2C)
++#define TIMER2TEST (TIMERS_BASE+0x30)
++
++#define TIMER3LOAD (TIMERS_BASE+0x80)
++#define TIMER3VALUE (TIMERS_BASE+0x84)
++#define TIMER3CONTROL (TIMERS_BASE+0x88)
++#define TIMER3CLEAR (TIMERS_BASE+0x8C)
++#define TIMER3TEST (TIMERS_BASE+0x90)
++
++#define TTIMERBZCONT (TIMERS_BASE+0x40)
++
++#define TIMER4VALUELOW (TIMERS_BASE+0x60)
++#define TIMER4VALUEHIGH (TIMERS_BASE+0x64)
+
+ /* AHB peripherals */
+ #define EP93XX_DMA_BASE EP93XX_AHB_IOMEM(0x00000000)
+
+ #define EP93XX_ETHERNET_PHYS_BASE EP93XX_AHB_PHYS(0x00010000)
+@@ -109,10 +135,12 @@
+ #define EP93XX_TIMER3_CLEAR EP93XX_TIMER_REG(0x8c)
+
+ #define EP93XX_I2S_BASE EP93XX_APB_IOMEM(0x00020000)
+
+ #define EP93XX_SECURITY_BASE EP93XX_APB_IOMEM(0x00030000)
++#define EP93XX_SECURITY_REG(x) (EP93XX_SECURITY_BASE + (x))
++#define EP93XX_SECURITY_UNIQID EP93XX_SECURITY_REG(0x2440)
+
+ #define EP93XX_GPIO_BASE EP93XX_APB_IOMEM(0x00040000)
+ #define EP93XX_GPIO_REG(x) (EP93XX_GPIO_BASE + (x))
+ #define EP93XX_GPIO_F_INT_STATUS EP93XX_GPIO_REG(0x5c)
+ #define EP93XX_GPIO_A_INT_STATUS EP93XX_GPIO_REG(0xa0)
+@@ -120,10 +148,11 @@
+ #define EP93XX_GPIO_EEDRIVE EP93XX_GPIO_REG(0xc8)
+
+ #define EP93XX_AAC_BASE EP93XX_APB_IOMEM(0x00080000)
+
+ #define EP93XX_SPI_BASE EP93XX_APB_IOMEM(0x000a0000)
++#define EP93XX_SPI_BASE_PHYS (EP93XX_APB_PHYS_BASE + 0x000a0000)
+
+ #define EP93XX_IRDA_BASE EP93XX_APB_IOMEM(0x000b0000)
+
+ #define EP93XX_UART1_PHYS_BASE EP93XX_APB_PHYS(0x000c0000)
+ #define EP93XX_UART1_BASE EP93XX_APB_IOMEM(0x000c0000)
+@@ -219,10 +248,421 @@
+ #define EP93XX_SYSCON_SYSCFG_LEEDA (1<<4)
+ #define EP93XX_SYSCON_SYSCFG_LEECLK (1<<3)
+ #define EP93XX_SYSCON_SYSCFG_LCSN2 (1<<1)
+ #define EP93XX_SYSCON_SYSCFG_LCSN1 (1<<0)
+ #define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0)
++#define EP93XX_SYSCON_CHIP_ID EP93XX_SYSCON_REG(0x94)
++#define EP93XX_SYSCON_BMAR EP93XX_SYSCON_REG(0x54)
++#define EP93XX_SYSCON_I2SDIV EP93XX_SYSCON_REG(0x8C)
++#define EP93XX_SYSCON_DEVCFG_CONFIG_Mong 0x02000000
++#define EP93XX_SYSCON_DEVCFG_CONFIG_Tong 0x04000000
++#define EP93XX_SYSCON_DEVCFG_CONFIG_I2SONSSP 0x00000080
++#define EP93XX_SYSCON_DEVCFG_CONFIG_I2SONAC97 0x00000040
++#define EP93XX_SYSCON_DEVCFG_RasOnP3 0x00000010
++#define EP93XX_SYSCON_DEVCFG_A1onG 0x00200000
++#define EP93XX_SYSCON_DEVCFG_A2onG 0x00400000
+
+ #define EP93XX_WATCHDOG_BASE EP93XX_APB_IOMEM(0x00140000)
+
++#define SYSCON_PWRCNT (EP93XX_SYSCON_BASE+0x0004)
++#define SYSCON_VIDDIV (EP93XX_SYSCON_BASE+0x0084)
++#define SYSCON_MIRDIV (EP93XX_SYSCON_BASE+0x0088)
++#define SYSCON_KTDIV (EP93XX_SYSCON_BASE+0x0090)
++#define SYSCON_KTDIV_TSEN 0x80000000
++//-----------------------------------------------------------------------------
++// SYSCON_CLKSET1
++//-----------------------------------------------------------------------------
++#define SYSCON_CLKSET1_PLL1_X2IPD_SHIFT 0
++#define SYSCON_CLKSET1_PLL1_X2IPD_MASK 0x0000001f
++#define SYSCON_CLKSET1_PLL1_X2FBD2_SHIFT 5
++#define SYSCON_CLKSET1_PLL1_X2FBD2_MASK 0x000007e0
++#define SYSCON_CLKSET1_PLL1_X1FBD1_SHIFT 11
++#define SYSCON_CLKSET1_PLL1_X1FBD1_MASK 0x0000f800
++#define SYSCON_CLKSET1_PLL1_PS_SHIFT 16
++#define SYSCON_CLKSET1_PLL1_PS_MASK 0x00030000
++#define SYSCON_CLKSET1_PCLKDIV_SHIFT 18
++#define SYSCON_CLKSET1_PCLKDIV_MASK 0x000c0000
++#define SYSCON_CLKSET1_HCLKDIV_SHIFT 20
++#define SYSCON_CLKSET1_HCLKDIV_MASK 0x00700000
++#define SYSCON_CLKSET1_nBYP1 0x00800000
++#define SYSCON_CLKSET1_SMCROM 0x01000000
++#define SYSCON_CLKSET1_FCLKDIV_SHIFT 25
++#define SYSCON_CLKSET1_FCLKDIV_MASK 0x0e000000
++
++#define SYSCON_CLKSET1_HSEL 0x00000001
++#define SYSCON_CLKSET1_PLL1_EXCLKSEL 0x00000002
++
++#define SYSCON_CLKSET1_PLL1_P_MASK 0x0000007C
++#define SYSCON_CLKSET1_PLL1_P_SHIFT 2
++
++#define SYSCON_CLKSET1_PLL1_M1_MASK 0x00000780
++#define SYSCON_CLKSET1_PLL1_M1_SHIFT 7
++#define SYSCON_CLKSET1_PLL1_M2_MASK 0x0000F800
++#define SYSCON_CLKSET1_PLL1_M2_SHIFT 11
++#define SYSCON_CLKSET1_PLL1_PS_MASK 0x00030000
++#define SYSCON_CLKSET1_PLL1_PS_SHIFT 16
++#define SYSCON_CLKSET1_PCLK_DIV_MASK 0x000C0000
++#define SYSCON_CLKSET1_PCLK_DIV_SHIFT 18
++#define SYSCON_CLKSET1_HCLK_DIV_MASK 0x00700000
++#define SYSCON_CLKSET1_HCLK_DIV_SHIFT 20
++#define SYSCON_CLKSET1_SMCROM 0x01000000
++#define SYSCON_CLKSET1_FCLK_DIV_MASK 0x0E000000
++#define SYSCON_CLKSET1_FCLK_DIV_SHIFT 25
++
++#define SYSCON_CLKSET2_PLL2_EN 0x00000001
++#define SYSCON_CLKSET2_PLL2EXCLKSEL 0x00000002
++#define SYSCON_CLKSET2_PLL2_P_MASK 0x0000007C
++#define SYSCON_CLKSET2_PLL2_P_SHIFT 2
++#define SYSCON_CLKSET2_PLL2_M2_MASK 0x00000F80
++#define SYSCON_CLKSET2_PLL2_M2_SHIFT 7
++#define SYSCON_CLKSET2_PLL2_M1_MASK 0x0001F000
++#define SYSCON_CLKSET2_PLL2_M1 12
++#define SYSCON_CLKSET2_PLL2_PS_MASK 0x000C0000
++#define SYSCON_CLKSET2_PLL2_PS_SHIFT 18
++#define SYSCON_CLKSET2_USBDIV_MASK 0xF0000000
++#define SYSCON_CLKSET2_USBDIV_SHIFT 28
++
++//-----------------------------------------------------------------------------
++// I2SDIV Register Defines
++//-----------------------------------------------------------------------------
++#define SYSCON_I2SDIV_MDIV_MASK 0x0000007f
++#define SYSCON_I2SDIV_MDIV_SHIFT 0
++#define SYSCON_I2SDIV_PDIV_MASK 0x00000300
++#define SYSCON_I2SDIV_PDIV_SHIFT 8
++#define SYSCON_I2SDIV_PSEL 0x00002000
++#define SYSCON_I2SDIV_ESEL 0x00004000
++#define SYSCON_I2SDIV_MENA 0x00008000
++#define SYSCON_I2SDIV_SDIV 0x00010000
++#define SYSCON_I2SDIV_LRDIV_MASK 0x00060000
++#define SYSCON_I2SDIV_LRDIV_SHIFT 17
++#define SYSCON_I2SDIV_SPOL 0x00080000
++#define SYSCON_I2SDIV_DROP 0x00100000
++#define SYSCON_I2SDIV_ORIDE 0x20000000
++#define SYSCON_I2SDIV_SLAVE 0x40000000
++#define SYSCON_I2SDIV_SENA 0x80000000
++
++#define SYSCON_I2SDIV_PDIV_OFF 0x00000000
++#define SYSCON_I2SDIV_PDIV_2 0x00000100
++#define SYSCON_I2SDIV_PDIV_25 0x00000200
++#define SYSCON_I2SDIV_PDIV_3 0x00000300
++
++#define SYSCON_I2SDIV_LRDIV_32 0x00000000
++#define SYSCON_I2SDIV_LRDIV_64 0x00020000
++#define SYSCON_I2SDIV_LRDIV_128 0x00040000
++
++//-----------------------------------------------------------------------------
++// VIDDIV Register Defines
++//-----------------------------------------------------------------------------
++#define SYSCON_VIDDIV_VDIV_MASK 0x0000007f
++#define SYSCON_VIDDIV_VDIV_SHIFT 0
++#define SYSCON_VIDDIV_PDIV_MASK 0x00000300
++#define SYSCON_VIDDIV_PDIV_SHIFT 8
++#define SYSCON_VIDDIV_PSEL 0x00002000
++#define SYSCON_VIDDIV_ESEL 0x00004000
++#define SYSCON_VIDDIV_VENA 0x00008000
++
++//-----------------------------------------------------------------------------
++// MIRDIV Register Defines
++//-----------------------------------------------------------------------------
++#define SYSCON_MIRDIV_MDIV_MASK 0x0000003f
++#define SYSCON_MIRDIV_MDIV_SHIFT 0
++#define SYSCON_MIRDIV_PDIV_MASK 0x00000300
++#define SYSCON_MIRDIV_PDIV_SHIFT 8
++#define SYSCON_MIRDIV_PSEL 0x00002000
++#define SYSCON_MIRDIV_ESEL 0x00004000
++#define SYSCON_MIRDIV_MENA 0x00008000
++
++/* 8082_0000 - 8082_ffff: I2S */
++#define I2S_OFFSET 0x020000
++#define I2S_BASE (EP93XX_APB_VIRT_BASE|I2S_OFFSET)
++#define I2S_PHYS_BASE (EP93XX_APB_PHYS_BASE + I2S_OFFSET)
++
++
++
++#define I2STxClkCfg (I2S_BASE+0x00) /* 8082.0000 R/W Transmitter clock config register */
++#define I2SRxClkCfg (I2S_BASE+0x04) /* 8082.0004 R/W Receiver clock config register */
++#define I2SGlSts (I2S_BASE+0x08) /* 8082.0008 R/W SAI Global Status register. */
++#define I2SGlCtrl (I2S_BASE+0x0C) /* 8082.000C R/W SAI Global Control register */
++
++#define I2STX0Lft (I2S_BASE+0x10) /* 8082.0010 R/W Left TX data reg for channel 0 */
++#define I2STX0Rt (I2S_BASE+0x14) /* 8082.0014 R/W Right TX data reg for channel 0 */
++#define I2STX1Lft (I2S_BASE+0x18) /* 8082.0018 R/W Left TX data reg for channel 1 */
++#define I2STX1Rt (I2S_BASE+0x1C) /* 8082.001C R/W Right TX data reg for channel 1 */
++#define I2STX2Lft (I2S_BASE+0x20) /* 8082.0020 R/W Left TX data reg for channel 2 */
++#define I2STX2Rt (I2S_BASE+0x24) /* 8082.0024 R/W Right TX data reg for channel 2 */
++
++#define I2STXLinCtrlData (I2S_BASE+0x28) /* 8082.0028 R/W TX Line Control data register */
++#define I2STXCtrl (I2S_BASE+0x2C) /* 8082.002C R/W TX Control register */
++#define I2STXWrdLen (I2S_BASE+0x30) /* 8082.0030 R/W TX Word Length */
++#define I2STX0En (I2S_BASE+0x34) /* 8082.0034 R/W TX0 Channel Enable */
++#define I2STX1En (I2S_BASE+0x38) /* 8082.0038 R/W TX1 Channel Enable */
++#define I2STX2En (I2S_BASE+0x3C) /* 8082.003C R/W TX2 Channel Enable */
++
++#define I2SRX0Lft (I2S_BASE+0x40) /* 8082.0040 R Left RX data reg for channel 0 */
++#define I2SRX0Rt (I2S_BASE+0x44) /* 8082.0044 R Right RX data reg for channel 0 */
++#define I2SRX1Lft (I2S_BASE+0x48) /* 8082.0048 R Left RX data reg for channel 1 */
++#define I2SRX1Rt (I2S_BASE+0x4C) /* 8082.004c R Right RX data reg for channel 1 */
++#define I2SRX2Lft (I2S_BASE+0x50) /* 8082.0050 R Left RX data reg for channel 2 */
++#define I2SRX2Rt (I2S_BASE+0x54) /* 8082.0054 R Right RX data reg for channel 2 */
++
++#define I2SRXLinCtrlData (I2S_BASE+0x58) /* 8082.0058 R/W RX Line Control data register */
++#define I2SRXCtrl (I2S_BASE+0x5C) /* 8082.005C R/W RX Control register */
++#define I2SRXWrdLen (I2S_BASE+0x60) /* 8082.0060 R/W RX Word Length */
++#define I2SRX0En (I2S_BASE+0x64) /* 8082.0064 R/W RX0 Channel Enable */
++#define I2SRX1En (I2S_BASE+0x68) /* 8082.0068 R/W RX1 Channel Enable */
++#define I2SRX2En (I2S_BASE+0x6C) /* 8082.006C R/W RX2 Channel Enable */
++
++/* 8084_0000 - 8084_ffff: GPIO */
++#define GPIO_OFFSET 0x040000
++#define GPIO_BASE (EP93XX_APB_VIRT_BASE|GPIO_OFFSET)
++#define GPIO_PADR (GPIO_BASE+0x00)
++#define GPIO_PBDR (GPIO_BASE+0x04)
++#define GPIO_PCDR (GPIO_BASE+0x08)
++#define GPIO_PDDR (GPIO_BASE+0x0C)
++#define GPIO_PADDR (GPIO_BASE+0x10)
++#define GPIO_PBDDR (GPIO_BASE+0x14)
++#define GPIO_PCDDR (GPIO_BASE+0x18)
++#define GPIO_PDDDR (GPIO_BASE+0x1C)
++#define GPIO_PEDR (GPIO_BASE+0x20)
++#define GPIO_PEDDR (GPIO_BASE+0x24)
++// #define 0x8084.0028 Reserved
++// #define 0x8084.002C Reserved
++#define GPIO_PFDR (GPIO_BASE+0x30)
++#define GPIO_PFDDR (GPIO_BASE+0x34)
++#define GPIO_PGDR (GPIO_BASE+0x38)
++#define GPIO_PGDDR (GPIO_BASE+0x3C)
++#define GPIO_PHDR (GPIO_BASE+0x40)
++#define GPIO_PHDDR (GPIO_BASE+0x44)
++// #define 0x8084.0048 RAZ RAZ
++#define GPIO_FINTTYPE1 (GPIO_BASE+0x4C)
++#define GPIO_FINTTYPE2 (GPIO_BASE+0x50)
++#define GPIO_FEOI (GPIO_BASE+0x54) /* WRITE ONLY - READ UNDEFINED */
++#define GPIO_FINTEN (GPIO_BASE+0x58)
++#define GPIO_INTSTATUSF (GPIO_BASE+0x5C)
++#define GPIO_RAWINTSTASUSF (GPIO_BASE+0x60)
++#define GPIO_FDB (GPIO_BASE+0x64)
++#define GPIO_PAPINDR (GPIO_BASE+0x68)
++#define GPIO_PBPINDR (GPIO_BASE+0x6C)
++#define GPIO_PCPINDR (GPIO_BASE+0x70)
++#define GPIO_PDPINDR (GPIO_BASE+0x74)
++#define GPIO_PEPINDR (GPIO_BASE+0x78)
++#define GPIO_PFPINDR (GPIO_BASE+0x7C)
++#define GPIO_PGPINDR (GPIO_BASE+0x80)
++#define GPIO_PHPINDR (GPIO_BASE+0x84)
++#define GPIO_AINTTYPE1 (GPIO_BASE+0x90)
++#define GPIO_AINTTYPE2 (GPIO_BASE+0x94)
++#define GPIO_AEOI (GPIO_BASE+0x98) /* WRITE ONLY - READ UNDEFINED */
++#define GPIO_AINTEN (GPIO_BASE+0x9C)
++#define GPIO_INTSTATUSA (GPIO_BASE+0xA0)
++#define GPIO_RAWINTSTSTISA (GPIO_BASE+0xA4)
++#define GPIO_ADB (GPIO_BASE+0xA8)
++#define GPIO_BINTTYPE1 (GPIO_BASE+0xAC)
++#define GPIO_BINTTYPE2 (GPIO_BASE+0xB0)
++#define GPIO_BEOI (GPIO_BASE+0xB4) /* WRITE ONLY - READ UNDEFINED */
++#define GPIO_BINTEN (GPIO_BASE+0xB8)
++#define GPIO_INTSTATUSB (GPIO_BASE+0xBC)
++#define GPIO_RAWINTSTSTISB (GPIO_BASE+0xC0)
++#define GPIO_BDB (GPIO_BASE+0xC4)
++#define GPIO_EEDRIVE (GPIO_BASE+0xC8)
++//#define Reserved (GPIO_BASE+0xCC)
++#define GPIO_TCR (GPIO_BASE+0xD0) /* Test Registers */
++#define GPIO_TISRA (GPIO_BASE+0xD4) /* Test Registers */
++#define GPIO_TISRB (GPIO_BASE+0xD8) /* Test Registers */
++#define GPIO_TISRC (GPIO_BASE+0xDC) /* Test Registers */
++#define GPIO_TISRD (GPIO_BASE+0xE0) /* Test Registers */
++#define GPIO_TISRE (GPIO_BASE+0xE4) /* Test Registers */
++#define GPIO_TISRF (GPIO_BASE+0xE8) /* Test Registers */
++#define GPIO_TISRG (GPIO_BASE+0xEC) /* Test Registers */
++#define GPIO_TISRH (GPIO_BASE+0xF0) /* Test Registers */
++#define GPIO_TCER (GPIO_BASE+0xF4) /* Test Registers */
++
++
++/* 8088_0000 - 8088_ffff: Ac97 Controller (AAC) */
++#define AC97_OFFSET 0x080000
++#define AC97_BASE (EP93XX_APB_VIRT_BASE|AC97_OFFSET)
++#define EP93XX_AC97_PHY_BASE (EP93XX_APB_PHYS_BASE|AC97_OFFSET)
++#define AC97DR1 (AC97_BASE+0x00) /* 8088.0000 R/W Data read or written from/to FIFO1 */
++#define AC97RXCR1 (AC97_BASE+0x04) /* 8088.0004 R/W Control register for receive */
++#define AC97TXCR1 (AC97_BASE+0x08) /* 8088.0008 R/W Control register for transmit */
++#define AC97SR1 (AC97_BASE+0x0C) /* 8088.000C R Status register */
++#define AC97RISR1 (AC97_BASE+0x10) /* 8088.0010 R Raw interrupt status register */
++#define AC97ISR1 (AC97_BASE+0x14) /* 8088.0014 R Interrupt Status */
++#define AC97IE1 (AC97_BASE+0x18) /* 8088.0018 R/W Interrupt Enable */
++ /* 8088.001C Reserved - RAZ */
++#define AC97DR2 (AC97_BASE+0x20) /* 8088.0020 R/W Data read or written from/to FIFO2 */
++#define AC97RXCR2 (AC97_BASE+0x24) /* 8088.0024 R/W Control register for receive */
++#define AC97TXCR2 (AC97_BASE+0x28) /* 8088.0028 R/W Control register for transmit */
++#define AC97SR2 (AC97_BASE+0x2C) /* 8088.002C R Status register */
++#define AC97RISR2 (AC97_BASE+0x30) /* 8088.0030 R Raw interrupt status register */
++#define AC97ISR2 (AC97_BASE+0x34) /* 8088.0034 R Interrupt Status */
++#define AC97IE2 (AC97_BASE+0x38) /* 8088.0038 R/W Interrupt Enable */
++ /* 8088.003C Reserved - RAZ */
++#define AC97DR3 (AC97_BASE+0x40) /* 8088.0040 R/W Data read or written from/to FIFO3. */
++#define AC97RXCR3 (AC97_BASE+0x44) /* 8088.0044 R/W Control register for receive */
++#define AC97TXCR3 (AC97_BASE+0x48) /* 8088.0048 R/W Control register for transmit */
++#define AC97SR3 (AC97_BASE+0x4C) /* 8088.004C R Status register */
++#define AC97RISR3 (AC97_BASE+0x50) /* 8088.0050 R Raw interrupt status register */
++#define AC97ISR3 (AC97_BASE+0x54) /* 8088.0054 R Interrupt Status */
++#define AC97IE3 (AC97_BASE+0x58) /* 8088.0058 R/W Interrupt Enable */
++ /* 8088.005C Reserved - RAZ */
++#define AC97DR2 (AC97_BASE+0x20) /* 8088.0020 R/W Data read or written from/to FIFO2 */
++#define AC97RXCR2 (AC97_BASE+0x24) /* 8088.0024 R/W Control register for receive */
++#define AC97TXCR2 (AC97_BASE+0x28) /* 8088.0028 R/W Control register for transmit */
++#define AC97SR2 (AC97_BASE+0x2C) /* 8088.002C R Status register */
++#define AC97RISR2 (AC97_BASE+0x30) /* 8088.0030 R Raw interrupt status register */
++#define AC97ISR2 (AC97_BASE+0x34) /* 8088.0034 R Interrupt Status */
++#define AC97IE2 (AC97_BASE+0x38) /* 8088.0038 R/W Interrupt Enable */
++ /* 8088.003C Reserved - RAZ */
++#define AC97DR3 (AC97_BASE+0x40) /* 8088.0040 R/W Data read or written from/to FIFO3. */
++#define AC97RXCR3 (AC97_BASE+0x44) /* 8088.0044 R/W Control register for receive */
++#define AC97TXCR3 (AC97_BASE+0x48) /* 8088.0048 R/W Control register for transmit */
++#define AC97SR3 (AC97_BASE+0x4C) /* 8088.004C R Status register */
++#define AC97RISR3 (AC97_BASE+0x50) /* 8088.0050 R Raw interrupt status register */
++#define AC97ISR3 (AC97_BASE+0x54) /* 8088.0054 R Interrupt Status */
++#define AC97IE3 (AC97_BASE+0x58) /* 8088.0058 R/W Interrupt Enable */
++ /* 8088.005C Reserved - RAZ */
++#define AC97DR4 (AC97_BASE+0x60) /* 8088.0060 R/W Data read or written from/to FIFO4. */
++#define AC97RXCR4 (AC97_BASE+0x64) /* 8088.0064 R/W Control register for receive */
++#define AC97TXCR4 (AC97_BASE+0x68) /* 8088.0068 R/W Control register for transmit */
++#define AC97SR4 (AC97_BASE+0x6C) /* 8088.006C R Status register */
++#define AC97RISR4 (AC97_BASE+0x70) /* 8088.0070 R Raw interrupt status register */
++#define AC97ISR4 (AC97_BASE+0x74) /* 8088.0074 R Interrupt Status */
++#define AC97IE4 (AC97_BASE+0x78) /* 8088.0078 R/W Interrupt Enable */
++ /* 8088.007C Reserved - RAZ */
++#define AC97S1DATA (AC97_BASE+0x80) /* 8088.0080 R/W Data received/transmitted on SLOT1 */
++#define AC97S2DATA (AC97_BASE+0x84) /* 8088.0084 R/W Data received/transmitted on SLOT2 */
++#define AC97S12DATA (AC97_BASE+0x88) /* 8088.0088 R/W Data received/transmitted on SLOT12 */
++#define AC97RGIS (AC97_BASE+0x8C) /* 8088.008C R/W Raw Global interrupt status register*/
++#define AC97GIS (AC97_BASE+0x90) /* 8088.0090 R Global interrupt status register */
++#define AC97IM (AC97_BASE+0x94) /* 8088.0094 R/W Interrupt mask register */
++#define AC97EOI (AC97_BASE+0x98) /* 8088.0098 W Interrupt clear register */
++#define AC97GCR (AC97_BASE+0x9C) /* 8088.009C R/W Main Control register */
++#define AC97RESET (AC97_BASE+0xA0) /* 8088.00A0 R/W RESET control register. */
++#define AC97SYNC (AC97_BASE+0xA4) /* 8088.00A4 R/W SYNC control register. */
++#define AC97GCIS (AC97_BASE+0xA8) /* 8088.00A8 R Global chan FIFO int status register */
++
++
++/* 800B_0000 - 800B_FFFF: VIC 0 */
++#define VIC0_OFFSET 0x0B0000
++#define VIC0_BASE (EP93XX_AHB_VIRT_BASE|VIC0_OFFSET)
++#define VIC0 (VIC0_BASE+0x000)
++#define VIC0IRQSTATUS (VIC0_BASE+0x000) /* R IRQ status register */
++#define VIC0FIQSTATUS (VIC0_BASE+0x004) /* R FIQ status register */
++#define VIC0RAWINTR (VIC0_BASE+0x008) /* R Raw interrupt status register */
++#define VIC0INTSELECT (VIC0_BASE+0x00C) /* R/W Interrupt select register */
++#define VIC0INTENABLE (VIC0_BASE+0x010) /* R/W Interrupt enable register */
++#define VIC0INTENCLEAR (VIC0_BASE+0x014) /* W Interrupt enable clear register */
++
++/* 8003_0000 - 8003_ffff: Raster */
++#define RASTER_OFFSET 0x030000
++#define RASTER_BASE (EP93XX_AHB_VIRT_BASE|RASTER_OFFSET)
++#define VLINESTOTAL (RASTER_BASE+0x00)
++#define VSYNCSTRTSTOP (RASTER_BASE+0x04)
++#define VACTIVESTRTSTOP (RASTER_BASE+0x08)
++#define VCLKSTRTSTOP (RASTER_BASE+0x0C)
++#define HCLKSTOTAL (RASTER_BASE+0x10)
++#define HSYNCSTRTSTOP (RASTER_BASE+0x14)
++#define HACTIVESTRTSTOP (RASTER_BASE+0x18)
++#define HCLKSTRTSTOP (RASTER_BASE+0x1C)
++#define BRIGHTNESS (RASTER_BASE+0x20)
++#define VIDEOATTRIBS (RASTER_BASE+0x24)
++#define VIDSCRNPAGE (RASTER_BASE+0x28)
++#define VIDSCRNHPG (RASTER_BASE+0x2C)
++#define SCRNLINES (RASTER_BASE+0x30)
++#define LINELENGTH (RASTER_BASE+0x34)
++#define VLINESTEP (RASTER_BASE+0x38)
++#define LINECARRY (RASTER_BASE+0x3C)
++#define BLINKRATE (RASTER_BASE+0x40)
++#define BLINKMASK (RASTER_BASE+0x44)
++#define BLINKPATTRN (RASTER_BASE+0x48)
++#define PATTRNMASK (RASTER_BASE+0x4C)
++#define BG_OFFSET (RASTER_BASE+0x50)
++#define PIXELMODE (RASTER_BASE+0x54)
++#define PARLLIFOUT (RASTER_BASE+0x58)
++#define PARLLIFIN (RASTER_BASE+0x5C)
++#define CURSOR_ADR_START (RASTER_BASE+0x60)
++#define CURSOR_ADR_RESET (RASTER_BASE+0x64)
++#define CURSORSIZE (RASTER_BASE+0x68)
++#define CURSORCOLOR1 (RASTER_BASE+0x6C)
++#define CURSORCOLOR2 (RASTER_BASE+0x70)
++#define CURSORXYLOC (RASTER_BASE+0x74)
++#define CURSOR_DHSCAN_LH_YLOC (RASTER_BASE+0x78)
++#define RASTER_SWLOCK (RASTER_BASE+0x7C)
++#define GS_LUT (RASTER_BASE+0x80)
++#define RASTER_TCR (RASTER_BASE+0x100)
++#define RASTER_TISRA (RASTER_BASE+0x104)
++#define RASTER_TISRB (RASTER_BASE+0x108)
++#define CURSOR_TISR (RASTER_BASE+0x10C)
++#define RASTER_TOCRA (RASTER_BASE+0x110)
++#define RASTER_TOCRB (RASTER_BASE+0x114)
++#define FIFO_TOCRA (RASTER_BASE+0x118)
++#define FIFO_TOCRB (RASTER_BASE+0x11C)
++#define BLINK_TISR (RASTER_BASE+0x120)
++#define DAC_TISRA (RASTER_BASE+0x124)
++#define DAC_TISRB (RASTER_BASE+0x128)
++#define SHIFT_TISR (RASTER_BASE+0x12C)
++#define DACMUX_TOCRA (RASTER_BASE+0x130)
++#define DACMUX_TOCRB (RASTER_BASE+0x134)
++#define PELMUX_TOCR (RASTER_BASE+0x138)
++#define VIDEO_TOCRA (RASTER_BASE+0x13C)
++#define VIDEO_TOCRB (RASTER_BASE+0x140)
++#define YCRCB_TOCR (RASTER_BASE+0x144)
++#define CURSOR_TOCR (RASTER_BASE+0x148)
++#define VIDEO_TOCRC (RASTER_BASE+0x14C)
++#define SHIFT_TOCR (RASTER_BASE+0x150)
++#define BLINK_TOCR (RASTER_BASE+0x154)
++#define RASTER_TCER (RASTER_BASE+0x180)
++#define SIGVAL (RASTER_BASE+0x200)
++#define SIGCTL (RASTER_BASE+0x204)
++#define VSIGSTRTSTOP (RASTER_BASE+0x208)
++#define HSIGSTRTSTOP (RASTER_BASE+0x20C)
++#define SIGCLR (RASTER_BASE+0x210)
++#define ACRATE (RASTER_BASE+0x214)
++#define LUTCONT (RASTER_BASE+0x218)
++#define VBLANKSTRTSTOP (RASTER_BASE+0x228)
++#define HBLANKSTRTSTOP (RASTER_BASE+0x22C)
++#define LUT (RASTER_BASE+0x400)
++#define CURSORBLINK1 (RASTER_BASE+0x21C)
++#define CURSORBLINK2 (RASTER_BASE+0x220)
++#define CURSORBLINK (RASTER_BASE+0x224)
++#define EOLOFFSET (RASTER_BASE+0x230)
++#define FIFOLEVEL (RASTER_BASE+0x234)
++#define GS_LUT2 (RASTER_BASE+0x280)
++#define GS_LUT3 (RASTER_BASE+0x300)
++#define COLOR_LUT (RASTER_BASE+0x400)
++
++/* 8004_0000 - 8004_ffff: Graphics */
++#define GRAPHICS_OFFSET 0x040000
++#define GRAPHICS_BASE (EP93XX_AHB_VIRT_BASE|GRAPHICS_OFFSET)
++#define SRCPIXELSTRT (GRAPHICS_BASE+0x00)
++#define DESTPIXELSTRT (GRAPHICS_BASE+0x04)
++#define BLKSRCSTRT (GRAPHICS_BASE+0x08)
++#define BLKDSTSTRT (GRAPHICS_BASE+0x0C)
++#define BLKSRCWIDTH (GRAPHICS_BASE+0x10)
++#define SRCLINELENGTH (GRAPHICS_BASE+0x14)
++#define BLKDESTWIDTH (GRAPHICS_BASE+0x18)
++#define BLKDESTHEIGHT (GRAPHICS_BASE+0x1C)
++#define DESTLINELENGTH (GRAPHICS_BASE+0x20)
++#define BLOCKCTRL (GRAPHICS_BASE+0x24)
++#define TRANSPATTRN (GRAPHICS_BASE+0x28)
++#define BLOCKMASK (GRAPHICS_BASE+0x2C)
++#define BACKGROUND (GRAPHICS_BASE+0x30)
++#define LINEINC (GRAPHICS_BASE+0x34)
++#define LINEINIT (GRAPHICS_BASE+0x38)
++#define LINEPATTRN (GRAPHICS_BASE+0x3C)
++
++#define EP93XX_GRAPHICS_ACCEL_PHYS_BASE (EP93XX_AHB_PHYS_BASE + 0x00040000)
++
++#ifndef __ASSEMBLY__
++
++#define SysconSetLocked(registername,value) \
++ { \
++ local_irq_disable(); \
++ outl( 0xAA, EP93XX_SYSCON_SWLOCK); \
++ outl( value, registername); \
++ local_irq_enable(); \
++ }
++
++#endif /* Not __ASSEMBLY__ */
++
+
+ #endif
diff --git a/recipes/linux/linux-2.6.32/ep93xx/ep93xx-snd-ac97.patch b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-snd-ac97.patch
new file mode 100644
index 0000000000..226310ec58
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-snd-ac97.patch
@@ -0,0 +1,3829 @@
+---
+ arch/arm/mach-ep93xx/include/mach/hardware.h | 1
+ arch/arm/mach-ep93xx/include/mach/regs_ac97.h | 180 +
+ sound/arm/Kconfig | 17
+ sound/arm/Makefile | 3
+ sound/arm/ep93xx-ac97.c | 3482 ++++++++++++++++++++++++++
+ sound/arm/ep93xx-ac97.h | 89
+ 6 files changed, 3772 insertions(+)
+
+--- linux-2.6.31.orig/arch/arm/mach-ep93xx/include/mach/hardware.h
++++ linux-2.6.31/arch/arm/mach-ep93xx/include/mach/hardware.h
+@@ -3,10 +3,11 @@
+ */
+ #ifndef __ASM_ARCH_HARDWARE_H
+ #define __ASM_ARCH_HARDWARE_H
+
+ #include "ep93xx-regs.h"
++#include "regs_ac97.h"
+
+ #define pcibios_assign_all_busses() 0
+ #include "regs_raster.h"
+ #include "regs_touch.h"
+
+--- /dev/null
++++ linux-2.6.31/arch/arm/mach-ep93xx/include/mach/regs_ac97.h
+@@ -0,0 +1,180 @@
++/*=============================================================================
++ * FILE: regs_ac97.h
++ *
++ * DESCRIPTION: Ac'97 Register Definition
++ *
++ * Copyright Cirrus Logic, 2001-2003
++ *
++ * 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 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, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *=============================================================================
++ */
++#ifndef _REGS_AC97_H_
++#define _REGS_AC97_H_
++
++//-----------------------------------------------------------------------------
++// Bit definitionses
++//-----------------------------------------------------------------------------
++#define AC97ISR_RIS 8
++#define AC97ISR_TIS 4
++#define AC97ISR_RTIS 2
++#define AC97ISR_TCIS 1
++
++#define AC97RGIS_SLOT1TXCOMPLETE 0x01
++#define AC97RGIS_SLOT2RXVALID 0x02
++#define AC97RGIS_GPIOTXCOMPLETE 0x04
++#define AC97RGIS_GPIOINTRX 0x08
++#define AC97RGIS_RWIS 0x10
++#define AC97RGIS_CODECREADY 0x20
++#define AC97RGIS_SLOT2TXCOMPLETE 0x40
++
++#define AC97SR_RXFE 0x0001
++#define AC97SR_TXFE 0x0002
++#define AC97SR_RXFF 0x0004
++#define AC97SR_TXFF 0x0008
++#define AC97SR_TXBUSY 0x0010
++#define AC97SR_RXOE 0x0020
++#define AC97SR_TXUE 0x0040
++
++#define AC97GSR_IFE 0x1
++#define AC97GSR_LOOP 0x2
++#define AC97GSR_OVERRIDECODECREADY 0x4
++
++#define AC97RESET_TIMEDRESET 0x1
++#define AC97RESET_FORCEDRESET 0x2
++#define AC97RESET_EFORCER 0x4
++
++#define AC97RXCR_REN 0x1
++
++#define AC97TXCR_TEN 0x1
++
++
++//****************************************************************************
++//
++// The Ac97 Codec registers, accessable through the Ac-link.
++// These are not controller registers and are not memory mapped.
++// Includes registers specific to CS4202 (Beavis).
++//
++//****************************************************************************
++#define AC97_REG_OFFSET_MASK 0x0000007E
++
++#define AC97_00_RESET 0x00000000
++#define AC97_02_MASTER_VOL 0x00000002
++#define AC97_04_HEADPHONE_VOL 0x00000004
++#define AC97_06_MONO_VOL 0x00000006
++#define AC97_08_TONE 0x00000008
++#define AC97_0A_PC_BEEP_VOL 0x0000000A
++#define AC97_0C_PHONE_VOL 0x0000000C
++#define AC97_0E_MIC_VOL 0x0000000E
++#define AC97_10_LINE_IN_VOL 0x00000010
++#define AC97_12_CD_VOL 0x00000012
++#define AC97_14_VIDEO_VOL 0x00000014
++#define AC97_16_AUX_VOL 0x00000016
++#define AC97_18_PCM_OUT_VOL 0x00000018
++#define AC97_1A_RECORD_SELECT 0x0000001A
++#define AC97_1C_RECORD_GAIN 0x0000001C
++#define AC97_1E_RESERVED_1E 0x0000001E
++#define AC97_20_GENERAL_PURPOSE 0x00000020
++#define AC97_22_3D_CONTROL 0x00000022
++#define AC97_24_MODEM_RATE 0x00000024
++#define AC97_26_POWERDOWN 0x00000026
++#define AC97_28_EXT_AUDIO_ID 0x00000028
++#define AC97_2A_EXT_AUDIO_POWER 0x0000002A
++#define AC97_2C_PCM_FRONT_DAC_RATE 0x0000002C
++#define AC97_2E_PCM_SURR_DAC_RATE 0x0000002E
++#define AC97_30_PCM_LFE_DAC_RATE 0x00000030
++#define AC97_32_PCM_LR_ADC_RATE 0x00000032
++#define AC97_34_MIC_ADC_RATE 0x00000034
++#define AC97_36_6CH_VOL_C_LFE 0x00000036
++#define AC97_38_6CH_VOL_SURROUND 0x00000038
++#define AC97_3A_SPDIF_CONTROL 0x0000003A
++#define AC97_3C_EXT_MODEM_ID 0x0000003C
++#define AC97_3E_EXT_MODEM_POWER 0x0000003E
++#define AC97_40_LINE1_CODEC_RATE 0x00000040
++#define AC97_42_LINE2_CODEC_RATE 0x00000042
++#define AC97_44_HANDSET_CODEC_RATE 0x00000044
++#define AC97_46_LINE1_CODEC_LEVEL 0x00000046
++#define AC97_48_LINE2_CODEC_LEVEL 0x00000048
++#define AC97_4A_HANDSET_CODEC_LEVEL 0x0000004A
++#define AC97_4C_GPIO_PIN_CONFIG 0x0000004C
++#define AC97_4E_GPIO_PIN_TYPE 0x0000004E
++#define AC97_50_GPIO_PIN_STICKY 0x00000050
++#define AC97_52_GPIO_PIN_WAKEUP 0x00000052
++#define AC97_54_GPIO_PIN_STATUS 0x00000054
++#define AC97_56_RESERVED 0x00000056
++#define AC97_58_RESERVED 0x00000058
++#define AC97_5A_CRYSTAL_REV_N_FAB_ID 0x0000005A
++#define AC97_5C_TEST_AND_MISC_CTRL 0x0000005C
++#define AC97_5E_AC_MODE 0x0000005E
++#define AC97_60_MISC_CRYSTAL_CONTROL 0x00000060
++#define AC97_62_VENDOR_RESERVED 0x00000062
++#define AC97_64_DAC_SRC_PHASE_INCR 0x00000064
++#define AC97_66_ADC_SRC_PHASE_INCR 0x00000066
++#define AC97_68_RESERVED_68 0x00000068
++#define AC97_6A_SERIAL_PORT_CONTROL 0x0000006A
++#define AC97_6C_VENDOR_RESERVED 0x0000006C
++#define AC97_6E_VENDOR_RESERVED 0x0000006E
++#define AC97_70_BDI_CONFIG 0x00000070
++#define AC97_72_BDI_WAKEUP 0x00000072
++#define AC97_74_VENDOR_RESERVED 0x00000074
++#define AC97_76_CAL_ADDRESS 0x00000076
++#define AC97_78_CAL_DATA 0x00000078
++#define AC97_7A_VENDOR_RESERVED 0x0000007A
++#define AC97_7C_VENDOR_ID1 0x0000007C
++#define AC97_7E_VENDOR_ID2 0x0000007E
++
++
++#ifndef __ASSEMBLY__
++
++//
++// enum type for use with reg AC97_RECORD_SELECT
++//
++typedef enum{
++ RECORD_MIC = 0x0000,
++ RECORD_CD = 0x0101,
++ RECORD_VIDEO_IN = 0x0202,
++ RECORD_AUX_IN = 0x0303,
++ RECORD_LINE_IN = 0x0404,
++ RECORD_STEREO_MIX = 0x0505,
++ RECORD_MONO_MIX = 0x0606,
++ RECORD_PHONE_IN = 0x0707
++} Ac97RecordSources;
++
++#endif /* __ASSEMBLY__ */
++
++//
++// Sample rates supported directly in AC97_PCM_FRONT_DAC_RATE and
++// AC97_PCM_LR_ADC_RATE.
++//
++#define Ac97_Fs_8000 0x1f40
++#define Ac97_Fs_11025 0x2b11
++#define Ac97_Fs_16000 0x3e80
++#define Ac97_Fs_22050 0x5622
++#define Ac97_Fs_32000 0x7d00
++#define Ac97_Fs_44100 0xac44
++#define Ac97_Fs_48000 0xbb80
++
++//
++// RSIZE and TSIZE in AC97RXCR and AC97TXCR
++//
++#define Ac97_SIZE_20 2
++#define Ac97_SIZE_18 1
++#define Ac97_SIZE_16 0
++#define Ac97_SIZE_12 3
++
++//=============================================================================
++//=============================================================================
++
++
++#endif /* _REGS_AC97_H_ */
+--- linux-2.6.31.orig/sound/arm/Kconfig
++++ linux-2.6.31/sound/arm/Kconfig
+@@ -9,10 +9,27 @@ menuconfig SND_ARM
+ Drivers that are implemented on ASoC can be found in
+ "ALSA for SoC audio support" section.
+
+ if SND_ARM
+
++config SND_EP93XX_AC97
++ tristate "AC97 driver for the Cirrus EP93xx chip"
++ depends on ARCH_EP93XX && SND
++ select SND_EP93XX_PCM
++ select SND_AC97_CODEC
++ help
++ Say Y here to use AC'97 audio with a Cirrus Logic EP93xx chip.
++
++ To compile this driver as a module, choose M here: the module
++ will be called snd-ep93xx-ac97.
++
++config SND_EP93XX_PCM
++ tristate
++ select SND_PCM
++ help
++ Generic PCM module for EP93xx
++
+ config SND_ARMAACI
+ tristate "ARM PrimeCell PL041 AC Link support"
+ depends on ARM_AMBA
+ select SND_PCM
+ select SND_AC97_CODEC
+--- linux-2.6.31.orig/sound/arm/Makefile
++++ linux-2.6.31/sound/arm/Makefile
+@@ -3,10 +3,13 @@
+ #
+
+ obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o
+ snd-aaci-objs := aaci.o devdma.o
+
++obj-$(CONFIG_SND_EP93XX_AC97) += snd-ep93xx-ac97.o
++snd-ep93xx-ac97-objs := ep93xx-ac97.o
++
+ obj-$(CONFIG_SND_PXA2XX_PCM) += snd-pxa2xx-pcm.o
+ snd-pxa2xx-pcm-objs := pxa2xx-pcm.o
+
+ obj-$(CONFIG_SND_PXA2XX_LIB) += snd-pxa2xx-lib.o
+ snd-pxa2xx-lib-y := pxa2xx-pcm-lib.o
+--- /dev/null
++++ linux-2.6.31/sound/arm/ep93xx-ac97.c
+@@ -0,0 +1,3482 @@
++/*
++ * linux/sound/arm/ep93xx-ac97.c -- ALSA PCM interface for the edb93xx ac97 audio
++ */
++
++#include <linux/autoconf.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/soundcard.h>
++
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/control.h>
++#include <sound/initval.h>
++#include <sound/ac97_codec.h>
++
++#include <asm/irq.h>
++#include <asm/semaphore.h>
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/arch/dma.h>
++#include "ep93xx-ac97.h"
++
++#define DRIVER_VERSION "01/05/2009"
++#define DRIVER_DESC "EP93xx AC97 Audio driver"
++static int ac_link_enabled = 0;
++static int codec_supported_mixers;
++
++//#define DEBUG 1
++#ifdef DEBUG
++#define DPRINTK( fmt, arg... ) printk( fmt, ##arg )
++#else
++#define DPRINTK( fmt, arg... )
++#endif
++
++#define WL16 0
++#define WL24 1
++
++#define AUDIO_NAME "ep93xx-ac97"
++#define AUDIO_SAMPLE_RATE_DEFAULT 44100
++#define AUDIO_DEFAULT_VOLUME 0
++#define AUDIO_MAX_VOLUME 181
++#define AUDIO_DEFAULT_DMACHANNELS 3
++#define PLAYBACK_DEFAULT_DMACHANNELS 3
++#define CAPTURE_DEFAULT_DMACHANNELS 3
++
++#define CHANNEL_FRONT (1<<0)
++#define CHANNEL_REAR (1<<1)
++#define CHANNEL_CENTER_LFE (1<<2)
++
++static void snd_ep93xx_dma_tx_callback( ep93xx_dma_int_t DMAInt,
++ ep93xx_dma_dev_t device,
++ unsigned int user_data);
++static void snd_ep93xx_dma_rx_callback( ep93xx_dma_int_t DMAInt,
++ ep93xx_dma_dev_t device,
++ unsigned int user_data);
++
++static const struct snd_pcm_hardware ep93xx_ac97_pcm_hardware = {
++
++
++ .info = ( SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_PAUSE ),
++ .formats = ( SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S8 |
++ SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_S16_LE |
++ SNDRV_PCM_FMTBIT_U16_BE | SNDRV_PCM_FMTBIT_S16_BE |
++ SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_S32_LE |
++ SNDRV_PCM_FMTBIT_U32_BE | SNDRV_PCM_FMTBIT_S32_BE ),
++ .rates = ( SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |
++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
++ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
++ SNDRV_PCM_RATE_48000 ),
++ .rate_min = 8000,
++ .rate_max = 48000,
++ .channels_min = 1,/*2,*/
++ .channels_max = 2,
++
++ .period_bytes_min = 1 * 1024,
++ .period_bytes_max = 32 * 1024,
++ .periods_min = 1,
++ .periods_max = 32,
++ .buffer_bytes_max = 32 * 1024,
++ .fifo_size = 0,
++};
++
++static audio_stream_t output_stream;
++static audio_stream_t input_stream;
++
++static audio_state_t audio_state =
++{
++ .output_stream =&output_stream,
++ .output_dma[0] =DMATx_AAC1,
++ .output_id[0] ="Ac97 out",
++
++ .input_stream =&input_stream,
++ .input_dma[0] =DMARx_AAC1,
++ .input_id[0] ="Ac97 in",
++
++ .sem = __SEMAPHORE_INIT(audio_state.sem,1),
++ .codec_set_by_playback = 0,
++ .codec_set_by_capture = 0,
++ .DAC_bit_width =16,
++ .bCompactMode =0,
++};
++
++
++
++/*
++ * peek
++ *
++ * Reads an AC97 codec register. Returns -1 if there was an error.
++ */
++static int peek(unsigned int uiAddress)
++{
++ unsigned int uiAC97RGIS;
++
++ if( !ac_link_enabled )
++ {
++ printk("ep93xx ac97 peek: attempt to peek before enabling ac-link.\n");
++ return -1;
++ }
++
++ /*
++ * Check to make sure that the address is aligned on a word boundary
++ * and is 7E or less.
++ */
++ if( ((uiAddress & 0x1)!=0) || (uiAddress > 0x007e))
++ {
++ return -1;
++ }
++
++ /*
++ * How it is supposed to work is:
++ * - The ac97 controller sends out a read addr in slot 1.
++ * - In the next frame, the codec will echo that address back in slot 1
++ * and send the data in slot 2. SLOT2RXVALID will be set to 1.
++ *
++ * Read until SLOT2RXVALID goes to 1. Reading the data in AC97S2DATA
++ * clears SLOT2RXVALID.
++ */
++
++ /*
++ * First, delay one frame in case of back to back peeks/pokes.
++ */
++ mdelay( 1 );
++
++ /*
++ * Write the address to AC97S1DATA, delay 1 frame, read the flags.
++ */
++ outl( uiAddress, AC97S1DATA);
++ udelay( 21 * 4 );
++ uiAC97RGIS = inl( AC97RGIS );
++
++ /*
++ * Return error if we timed out.
++ */
++ if( ((uiAC97RGIS & AC97RGIS_SLOT1TXCOMPLETE) == 0 ) &&
++ ((uiAC97RGIS & AC97RGIS_SLOT2RXVALID) == 0 ) )
++ {
++ printk( "ep93xx-ac97 - peek failed reading reg 0x%02x.\n", uiAddress );
++ return -1;
++ }
++
++ return ( inl(AC97S2DATA) & 0x000fffff);
++}
++
++/*
++ * poke
++ *
++ * Writes an AC97 codec Register. Return -1 if error.
++ */
++static int poke(unsigned int uiAddress, unsigned int uiValue)
++{
++ unsigned int uiAC97RGIS;
++
++ if( !ac_link_enabled )
++ {
++ printk("ep93xx ac97 poke: attempt to poke before enabling ac-link.\n");
++ return -1;
++ }
++
++ /*
++ * Check to make sure that the address is align on a word boundary and
++ * is 7E or less. And that the value is a 16 bit value.
++ */
++ if( ((uiAddress & 0x1)!=0) || (uiAddress > 0x007e))
++ {
++ printk("ep93xx ac97 poke: address error.\n");
++ return -1;
++ }
++
++ /*stop the audio loop from the input to the output directly*/
++
++ if((uiAddress==AC97_0E_MIC_VOL)||(uiAddress==AC97_10_LINE_IN_VOL))
++ {
++ uiValue = (uiValue | 0x8000);
++
++ }
++
++ /*
++ * First, delay one frame in case of back to back peeks/pokes.
++ */
++ mdelay( 1 );
++
++ /*
++ * Write the data to AC97S2DATA, then the address to AC97S1DATA.
++ */
++ outl( uiValue, AC97S2DATA );
++ outl( uiAddress, AC97S1DATA );
++
++ /*
++ * Wait for the tx to complete, get status.
++ */
++ udelay( 30 );/*21*/
++ uiAC97RGIS = inl(AC97RGIS);
++
++ /*
++ * Return error if we timed out.
++ */
++ if( !(inl(AC97RGIS) & AC97RGIS_SLOT1TXCOMPLETE) )
++ {
++ printk( "ep93xx-ac97: poke failed writing reg 0x%02x value 0x%02x.\n", uiAddress, uiValue );
++ return -1;
++ }
++
++ return 0;
++}
++
++
++/*
++ * When we get to the multichannel case the pre-fill and enable code
++ * will go to the dma driver's start routine.
++ */
++static void ep93xx_audio_enable( int input_or_output_stream )
++{
++ unsigned int uiTemp;
++
++ DPRINTK("ep93xx_audio_enable :%x\n",input_or_output_stream);
++
++ /*
++ * Enable the rx or tx channel depending on the value of
++ * input_or_output_stream
++ */
++ if( input_or_output_stream )
++ {
++ uiTemp = inl(AC97TXCR1);
++ outl( (uiTemp | AC97TXCR_TEN), AC97TXCR1 );
++ }
++ else
++ {
++ uiTemp = inl(AC97RXCR1);
++ outl( (uiTemp | AC97RXCR_REN), AC97RXCR1 );
++ }
++
++
++ //DDEBUG("ep93xx_audio_enable - EXIT\n");
++}
++
++static void ep93xx_audio_disable( int input_or_output_stream )
++{
++ unsigned int uiTemp;
++
++ DPRINTK("ep93xx_audio_disable\n");
++
++ /*
++ * Disable the rx or tx channel depending on the value of
++ * input_or_output_stream
++ */
++ if( input_or_output_stream )
++ {
++ uiTemp = inl(AC97TXCR1);
++ outl( (uiTemp & ~AC97TXCR_TEN), AC97TXCR1 );
++ }
++ else
++ {
++ uiTemp = inl(AC97RXCR1);
++ outl( (uiTemp & ~AC97RXCR_REN), AC97RXCR1 );
++ }
++
++ //DDEBUG("ep93xx_audio_disable - EXIT\n");
++}
++
++
++
++/*=======================================================================================*/
++/*
++ * ep93xx_setup_src
++ *
++ * Once the ac-link is up and all is good, we want to set the codec to a
++ * usable mode.
++ */
++static void ep93xx_setup_src(void)
++{
++ int iTemp;
++
++ /*
++ * Set the VRA bit to enable the SRC.
++ */
++ iTemp = peek( AC97_2A_EXT_AUDIO_POWER );
++ poke( AC97_2A_EXT_AUDIO_POWER, (iTemp | 0x1) );
++
++ /*
++ * Set the DSRC/ASRC bits to enable the variable rate SRC.
++ */
++ iTemp = peek( AC97_60_MISC_CRYSTAL_CONTROL );
++ poke( AC97_60_MISC_CRYSTAL_CONTROL, (iTemp | 0x0300) );
++}
++
++/*
++ * ep93xx_set_samplerate
++ *
++ * lFrequency - Sample Rate in Hz
++ * bCapture - 0 to set Tx sample rate; 1 to set Rx sample rate
++ */
++static void ep93xx_set_samplerate( long lSampleRate, int bCapture )
++{
++ unsigned short usDivider, usPhase;
++
++ DPRINTK( "ep93xx_set_samplerate - Fs = %d\n", (int)lSampleRate );
++
++ if( (lSampleRate < 7200) || (lSampleRate > 48000) )
++ {
++ printk( "ep93xx_set_samplerate - invalid Fs = %d\n",
++ (int)lSampleRate );
++ return;
++ }
++
++ /*
++ * Calculate divider and phase increment.
++ *
++ * divider = round( 0x1770000 / lSampleRate )
++ * Note that usually rounding is done by adding 0.5 to a floating
++ * value and then truncating. To do this without using floating
++ * point, I multiply the fraction by two, do the division, then add one,
++ * then divide the whole by 2 and then truncate.
++ * Same effect, no floating point math.
++ *
++ * Ph incr = trunc( (0x1000000 / usDivider) + 1 )
++ */
++
++ usDivider = (unsigned short)( ((2 * 0x1770000 / lSampleRate) + 1) / 2 );
++
++ usPhase = (0x1000000 / usDivider) + 1;
++
++ /*
++ * Write them in the registers. Spec says divider must be
++ * written after phase incr.
++ */
++ if(!bCapture)
++ {
++ poke( AC97_2C_PCM_FRONT_DAC_RATE, usDivider);
++ poke( AC97_64_DAC_SRC_PHASE_INCR, usPhase);
++ }
++ else
++ {
++
++ poke( AC97_32_PCM_LR_ADC_RATE, usDivider);
++ poke( AC97_66_ADC_SRC_PHASE_INCR, usPhase);
++ }
++
++ DPRINTK( "ep93xx_set_samplerate - phase = %d, divider = %d\n",
++ (unsigned int)usPhase, (unsigned int)usDivider );
++
++ /*
++ * We sorta should report the actual samplerate back to the calling
++ * application. But some applications freak out if they don't get
++ * exactly what they asked for. So we fudge and tell them what
++ * they want to hear.
++ */
++ //audio_samplerate = lSampleRate;
++
++ DPRINTK( "ep93xx_set_samplerate - EXIT\n" );
++}
++
++/*
++ * ep93xx_set_hw_format
++ *
++ * Sets up whether the controller is expecting 20 bit data in 32 bit words
++ * or 16 bit data compacted to have a stereo sample in each 32 bit word.
++ */
++static void ep93xx_set_hw_format( long format,long channel )
++{
++ int bCompactMode;
++
++ switch( format )
++ {
++ /*
++ * Here's all the <=16 bit formats. We can squeeze both L and R
++ * into one 32 bit sample so use compact mode.
++ */
++ case SNDRV_PCM_FORMAT_U8:
++ case SNDRV_PCM_FORMAT_S8:
++ case SNDRV_PCM_FORMAT_S16_LE:
++ case SNDRV_PCM_FORMAT_U16_LE:
++ bCompactMode = 1;
++ break;
++
++ /*
++ * Add any other >16 bit formats here...
++ */
++ case SNDRV_PCM_FORMAT_S32_LE:
++ default:
++ bCompactMode = 0;
++ break;
++ }
++
++ if( bCompactMode )
++ {
++ DPRINTK("ep93xx_set_hw_format - Setting serial mode to 16 bit compact.\n");
++
++ /*
++ * Turn on Compact Mode so we can fit each stereo sample into
++ * a 32 bit word. Twice as efficent for DMA and FIFOs.
++ */
++ if(channel==2){
++ outl( 0x00008018, AC97RXCR1 );
++ outl( 0x00008018, AC97TXCR1 );
++ }
++ else {
++ outl( 0x00008018, AC97RXCR1 );
++ outl( 0x00008018, AC97TXCR1 );
++ }
++
++
++ audio_state.DAC_bit_width = 16;
++ audio_state.bCompactMode = 1;
++ }
++ else
++ {
++ DPRINTK("ep93xx_set_hw_format - Setting serial mode to 20 bit non-CM.\n");
++
++ /*
++ * Turn off Compact Mode so we can do > 16 bits per channel
++ */
++ if(channel==2){
++ outl( 0x00004018, AC97RXCR1 );
++ outl( 0x00004018, AC97TXCR1 );
++ }
++ else{
++ outl( 0x00004018, AC97RXCR1 );
++ outl( 0x00004018, AC97TXCR1 );
++ }
++
++ audio_state.DAC_bit_width = 20;
++ audio_state.bCompactMode = 0;
++ }
++
++}
++
++/*
++ * ep93xx_stop_loop
++ *
++ * Once the ac-link is up and all is good, we want to set the codec to a
++ * usable mode.
++ */
++static void ep93xx_stop_loop(void)
++{
++ int iTemp;
++
++ /*
++ * Set the AC97_0E_MIC_VOL MUTE bit to enable the LOOP.
++ */
++ iTemp = peek( AC97_0E_MIC_VOL );
++ poke( AC97_0E_MIC_VOL, (iTemp | 0x8000) );
++
++ /*
++ * Set the AC97_10_LINE_IN_VOL MUTE bit to enable the LOOP.
++ */
++ iTemp = peek( AC97_10_LINE_IN_VOL );
++ poke( AC97_10_LINE_IN_VOL, (iTemp | 0x8000) );
++}
++
++/*
++ * ep93xx_init_ac97_controller
++ *
++ * This routine sets up the Ac'97 Controller.
++ */
++static void ep93xx_init_ac97_controller(void)
++{
++ unsigned int uiDEVCFG, uiTemp;
++
++ DPRINTK("ep93xx_init_ac97_controller - enter\n");
++
++ /*
++ * Configure the multiplexed Ac'97 pins to be Ac97 not I2s.
++ * Configure the EGPIO4 and EGPIO6 to be GPIOS, not to be
++ * SDOUT's for the second and third I2S controller channels.
++ */
++ uiDEVCFG = inl(EP93XX_SYSCON_DEVICE_CONFIG);
++
++ uiDEVCFG &= ~(EP93XX_SYSCON_DEVCFG_CONFIG_I2SONAC97 |
++ EP93XX_SYSCON_DEVCFG_A1onG |
++ EP93XX_SYSCON_DEVCFG_A2onG);
++
++ SysconSetLocked(EP93XX_SYSCON_DEVICE_CONFIG, uiDEVCFG);
++
++ /*
++ * Disable the AC97 controller internal loopback.
++ * Disable Override codec ready.
++ */
++ outl( 0, AC97GCR );
++
++ /*
++ * Enable the AC97 Link.
++ */
++ uiTemp = inl(AC97GCR);
++ outl( (uiTemp | AC97GSR_IFE), AC97GCR );
++
++ /*
++ * Set the TIMEDRESET bit. Will cause a > 1uSec reset of the ac-link.
++ * This bit is self resetting.
++ */
++ outl( AC97RESET_TIMEDRESET, AC97RESET );
++
++ /*
++ * Delay briefly, but let's not hog the processor.
++ */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout( 5 ); /* 50 mSec */
++
++ /*
++ * Read the AC97 status register to see if we've seen a CODECREADY
++ * signal from the AC97 codec.
++ */
++ if( !(inl(AC97RGIS) & AC97RGIS_CODECREADY))
++ {
++ printk( "ep93xx-ac97 - FAIL: CODECREADY still low!\n");
++ return;
++ }
++
++ /*
++ * Delay for a second, not hogging the processor
++ */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout( HZ ); /* 1 Sec */
++
++ /*
++ * Now the Ac-link is up. We can read and write codec registers.
++ */
++ ac_link_enabled = 1;
++
++ /*
++ * Set up the rx and tx channels
++ * Set the CM bit, data size=16 bits, enable tx slots 3 & 4.
++ */
++ ep93xx_set_hw_format( EP93XX_DEFAULT_FORMAT,EP93XX_DEFAULT_NUM_CHANNELS );
++
++ DPRINTK( "ep93xx-ac97 -- AC97RXCR1: %08x\n", inl(AC97RXCR1) );
++ DPRINTK( "ep93xx-ac97 -- AC97TXCR1: %08x\n", inl(AC97TXCR1) );
++
++ DPRINTK("ep93xx_init_ac97_controller - EXIT - success\n");
++
++}
++
++#ifdef alsa_ac97_debug
++static void ep93xx_dump_ac97_regs(void)
++{
++ int i;
++ unsigned int reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7;
++
++ DPRINTK( "---------------------------------------------\n");
++ DPRINTK( " : 0 2 4 6 8 A C E\n" );
++
++ for( i=0 ; i < 0x80 ; i+=0x10 )
++ {
++ reg0 = 0xffff & (unsigned int)peek( i );
++ reg1 = 0xffff & (unsigned int)peek( i + 0x2 );
++ reg2 = 0xffff & (unsigned int)peek( i + 0x4 );
++ reg3 = 0xffff & (unsigned int)peek( i + 0x6 );
++ reg4 = 0xffff & (unsigned int)peek( i + 0x8 );
++ reg5 = 0xffff & (unsigned int)peek( i + 0xa );
++ reg6 = 0xffff & (unsigned int)peek( i + 0xc );
++ reg7 = 0xffff & (unsigned int)peek( i + 0xe );
++
++ DPRINTK( " %02x : %04x %04x %04x %04x %04x %04x %04x %04x\n",
++ i, reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7);
++ }
++
++ DPRINTK( "---------------------------------------------\n");
++}
++#endif
++
++
++#define supported_mixer(FOO) \
++ ( (FOO >= 0) && \
++ (FOO < SOUND_MIXER_NRDEVICES) && \
++ codec_supported_mixers & (1<<FOO) )
++
++/*
++ * Available record sources.
++ * LINE1 refers to AUX in.
++ * IGAIN refers to input gain which means stereo mix.
++ */
++#define AC97_RECORD_MASK \
++ (SOUND_MASK_MIC | SOUND_MASK_CD | SOUND_MASK_IGAIN | SOUND_MASK_VIDEO |\
++ SOUND_MASK_LINE1 | SOUND_MASK_LINE | SOUND_MASK_PHONEIN)
++
++#define AC97_STEREO_MASK \
++ (SOUND_MASK_VOLUME | SOUND_MASK_PCM | SOUND_MASK_LINE | SOUND_MASK_CD | \
++ SOUND_MASK_ALTPCM | SOUND_MASK_IGAIN | SOUND_MASK_LINE1 | SOUND_MASK_VIDEO)
++
++#define AC97_SUPPORTED_MASK \
++ (AC97_STEREO_MASK | SOUND_MASK_BASS | SOUND_MASK_TREBLE | \
++ SOUND_MASK_SPEAKER | SOUND_MASK_MIC | \
++ SOUND_MASK_PHONEIN | SOUND_MASK_PHONEOUT)
++
++
++
++
++/* this table has default mixer values for all OSS mixers. */
++typedef struct {
++ int mixer;
++ unsigned int value;
++} mixer_defaults_t;
++
++/*
++ * Default mixer settings that are set up during boot.
++ *
++ * These values are 16 bit numbers in which the upper byte is right volume
++ * and the lower byte is left volume or mono volume for mono controls.
++ *
++ * OSS Range for each of left and right volumes is 0 to 100 (0x00 to 0x64).
++ *
++ */
++static mixer_defaults_t mixer_defaults[SOUND_MIXER_NRDEVICES] =
++{
++ /* Outputs */
++ {SOUND_MIXER_VOLUME, 0x6464}, /* 0 dB */ /* -46.5dB to 0 dB */
++ {SOUND_MIXER_ALTPCM, 0x6464}, /* 0 dB */ /* -46.5dB to 0 dB */
++ {SOUND_MIXER_PHONEOUT, 0x6464}, /* 0 dB */ /* -46.5dB to 0 dB */
++
++ /* PCM playback gain */
++ {SOUND_MIXER_PCM, 0x4b4b}, /* 0 dB */ /* -34.5dB to +12dB */
++
++ /* Record gain */
++ {SOUND_MIXER_IGAIN, 0x0000}, /* 0 dB */ /* -34.5dB to +12dB */
++
++ /* Inputs */
++ {SOUND_MIXER_MIC, 0x0000}, /* mute */ /* -34.5dB to +12dB */
++ {SOUND_MIXER_LINE, 0x4b4b}, /* 0 dB */ /* -34.5dB to +12dB */
++
++ /* Inputs that are not connected. */
++ {SOUND_MIXER_SPEAKER, 0x0000}, /* mute */ /* -45dB to 0dB */
++ {SOUND_MIXER_PHONEIN, 0x0000}, /* mute */ /* -34.5dB to +12dB */
++ {SOUND_MIXER_CD, 0x0000}, /* mute */ /* -34.5dB to +12dB */
++ {SOUND_MIXER_VIDEO, 0x0000}, /* mute */ /* -34.5dB to +12dB */
++ {SOUND_MIXER_LINE1, 0x0000}, /* mute */ /* -34.5dB to +12dB */
++
++ {-1,0} /* last entry */
++};
++
++/* table to scale scale from OSS mixer value to AC97 mixer register value */
++typedef struct {
++ unsigned int offset;
++ int scale;
++} ac97_mixer_hw_t;
++
++static ac97_mixer_hw_t ac97_hw[SOUND_MIXER_NRDEVICES] =
++{
++ [SOUND_MIXER_VOLUME] = {AC97_02_MASTER_VOL, 64},
++ [SOUND_MIXER_BASS] = {0, 0},
++ [SOUND_MIXER_TREBLE] = {0, 0},
++ [SOUND_MIXER_SYNTH] = {0, 0},
++ [SOUND_MIXER_PCM] = {AC97_18_PCM_OUT_VOL, 32},
++ [SOUND_MIXER_SPEAKER] = {AC97_0A_PC_BEEP_VOL, 32},
++ [SOUND_MIXER_LINE] = {AC97_10_LINE_IN_VOL, 32},
++ [SOUND_MIXER_MIC] = {AC97_0E_MIC_VOL, 32},
++ [SOUND_MIXER_CD] = {AC97_12_CD_VOL, 32},
++ [SOUND_MIXER_IMIX] = {0, 0},
++ [SOUND_MIXER_ALTPCM] = {AC97_04_HEADPHONE_VOL, 64},
++ [SOUND_MIXER_RECLEV] = {0, 0},
++ [SOUND_MIXER_IGAIN] = {AC97_1C_RECORD_GAIN, 16},
++ [SOUND_MIXER_OGAIN] = {0, 0},
++ [SOUND_MIXER_LINE1] = {AC97_16_AUX_VOL, 32},
++ [SOUND_MIXER_LINE2] = {0, 0},
++ [SOUND_MIXER_LINE3] = {0, 0},
++ [SOUND_MIXER_DIGITAL1] = {0, 0},
++ [SOUND_MIXER_DIGITAL2] = {0, 0},
++ [SOUND_MIXER_DIGITAL3] = {0, 0},
++ [SOUND_MIXER_PHONEIN] = {AC97_0C_PHONE_VOL, 32},
++ [SOUND_MIXER_PHONEOUT] = {AC97_06_MONO_VOL, 64},
++ [SOUND_MIXER_VIDEO] = {AC97_14_VIDEO_VOL, 32},
++ [SOUND_MIXER_RADIO] = {0, 0},
++ [SOUND_MIXER_MONITOR] = {0, 0},
++};
++
++
++/* the following tables allow us to go from OSS <-> ac97 quickly. */
++enum ac97_recsettings
++{
++ AC97_REC_MIC=0,
++ AC97_REC_CD,
++ AC97_REC_VIDEO,
++ AC97_REC_AUX,
++ AC97_REC_LINE,
++ AC97_REC_STEREO, /* combination of all enabled outputs.. */
++ AC97_REC_MONO, /*.. or the mono equivalent */
++ AC97_REC_PHONE
++};
++
++static const unsigned int ac97_rm2oss[] =
++{
++ [AC97_REC_MIC] = SOUND_MIXER_MIC,
++ [AC97_REC_CD] = SOUND_MIXER_CD,
++ [AC97_REC_VIDEO] = SOUND_MIXER_VIDEO,
++ [AC97_REC_AUX] = SOUND_MIXER_LINE1,
++ [AC97_REC_LINE] = SOUND_MIXER_LINE,
++ [AC97_REC_STEREO]= SOUND_MIXER_IGAIN,
++ [AC97_REC_PHONE] = SOUND_MIXER_PHONEIN
++};
++
++/* indexed by bit position */
++static const unsigned int ac97_oss_rm[] =
++{
++ [SOUND_MIXER_MIC] = AC97_REC_MIC,
++ [SOUND_MIXER_CD] = AC97_REC_CD,
++ [SOUND_MIXER_VIDEO] = AC97_REC_VIDEO,
++ [SOUND_MIXER_LINE1] = AC97_REC_AUX,
++ [SOUND_MIXER_LINE] = AC97_REC_LINE,
++ [SOUND_MIXER_IGAIN] = AC97_REC_STEREO,
++ [SOUND_MIXER_PHONEIN] = AC97_REC_PHONE
++};
++
++
++/*
++ * ep93xx_write_mixer
++ *
++ */
++static void ep93xx_write_mixer
++(
++ int oss_channel,
++ unsigned int left,
++ unsigned int right
++)
++{
++ u16 val = 0;
++ ac97_mixer_hw_t * mh = &ac97_hw[oss_channel];
++
++ DPRINTK("ac97_codec: wrote OSS %2d (ac97 0x%02x), "
++ "l:%2d, r:%2d:",
++ oss_channel, mh->offset, left, right);
++
++ if( !mh->scale )
++ {
++ printk( "ep93xx-ac97.c: ep93xx_write_mixer - not a valid OSS channel\n");
++ return;
++ }
++
++ if( AC97_STEREO_MASK & (1 << oss_channel) )
++ {
++ /* stereo mixers */
++ if (left == 0 && right == 0)
++ {
++ val = 0x8000;
++ }
++ else
++ {
++ if (oss_channel == SOUND_MIXER_IGAIN)
++ {
++ right = (right * mh->scale) / 100;
++ left = (left * mh->scale) / 100;
++ if (right >= mh->scale)
++ right = mh->scale-1;
++ if (left >= mh->scale)
++ left = mh->scale-1;
++ }
++ else
++ {
++ right = ((100 - right) * mh->scale) / 100;
++ left = ((100 - left) * mh->scale) / 100;
++ if (right >= mh->scale)
++ right = mh->scale-1;
++ if (left >= mh->scale)
++ left = mh->scale-1;
++ }
++ val = (left << 8) | right;
++ }
++ }
++ else if(left == 0)
++ {
++ val = 0x8000;
++ }
++ else if( (oss_channel == SOUND_MIXER_SPEAKER) ||
++ (oss_channel == SOUND_MIXER_PHONEIN) ||
++ (oss_channel == SOUND_MIXER_PHONEOUT) )
++ {
++ left = ((100 - left) * mh->scale) / 100;
++ if (left >= mh->scale)
++ left = mh->scale-1;
++ val = left;
++ }
++ else if (oss_channel == SOUND_MIXER_MIC)
++ {
++ val = peek( mh->offset) & ~0x801f;
++ left = ((100 - left) * mh->scale) / 100;
++ if (left >= mh->scale)
++ left = mh->scale-1;
++ val |= left;
++ }
++ /*
++ * For bass and treble, the low bit is optional. Masking it
++ * lets us avoid the 0xf 'bypass'.
++ * Do a read, modify, write as we have two contols in one reg.
++ */
++ else if (oss_channel == SOUND_MIXER_BASS)
++ {
++ val = peek( mh->offset) & ~0x0f00;
++ left = ((100 - left) * mh->scale) / 100;
++ if (left >= mh->scale)
++ left = mh->scale-1;
++ val |= (left << 8) & 0x0e00;
++ }
++ else if (oss_channel == SOUND_MIXER_TREBLE)
++ {
++ val = peek( mh->offset) & ~0x000f;
++ left = ((100 - left) * mh->scale) / 100;
++ if (left >= mh->scale)
++ left = mh->scale-1;
++ val |= left & 0x000e;
++ }
++
++ DPRINTK(" 0x%04x", val);
++
++ poke( mh->offset, val );
++
++#ifdef alsa_ac97_debug
++ val = peek( mh->offset );
++ DEBUG(" -> 0x%04x\n", val);
++#endif
++
++}
++
++/* a thin wrapper for write_mixer */
++static void ep93xx_set_mixer
++(
++ unsigned int oss_mixer,
++ unsigned int val
++)
++{
++ unsigned int left,right;
++
++ /* cleanse input a little */
++ right = ((val >> 8) & 0xff) ;
++ left = (val & 0xff) ;
++
++ if (right > 100) right = 100;
++ if (left > 100) left = 100;
++
++ /*mixer_state[oss_mixer] = (right << 8) | left;*/
++ ep93xx_write_mixer( oss_mixer, left, right);
++}
++
++static void ep93xx_init_mixer(void)
++{
++ u16 cap;
++ int i;
++
++ /* mixer masks */
++ codec_supported_mixers = AC97_SUPPORTED_MASK;
++
++ cap = peek( AC97_00_RESET );
++ if( !(cap & 0x04) )
++ {
++ codec_supported_mixers &= ~(SOUND_MASK_BASS|SOUND_MASK_TREBLE);
++ }
++ if( !(cap & 0x10) )
++ {
++ codec_supported_mixers &= ~SOUND_MASK_ALTPCM;
++ }
++
++ /*
++ * Detect bit resolution of output volume controls by writing to the
++ * 6th bit (not unmuting yet)
++ */
++ poke( AC97_02_MASTER_VOL, 0xa020 );
++ if( peek( AC97_02_MASTER_VOL) != 0xa020 )
++ {
++ ac97_hw[SOUND_MIXER_VOLUME].scale = 32;
++ }
++
++ poke( AC97_04_HEADPHONE_VOL, 0xa020 );
++ if( peek( AC97_04_HEADPHONE_VOL) != 0xa020 )
++ {
++ ac97_hw[AC97_04_HEADPHONE_VOL].scale = 32;
++ }
++
++ poke( AC97_06_MONO_VOL, 0x8020 );
++ if( peek( AC97_06_MONO_VOL) != 0x8020 )
++ {
++ ac97_hw[AC97_06_MONO_VOL].scale = 32;
++ }
++
++ /* initialize mixer channel volumes */
++ for( i = 0;
++ (i < SOUND_MIXER_NRDEVICES) && (mixer_defaults[i].mixer != -1) ;
++ i++ )
++ {
++ if( !supported_mixer( mixer_defaults[i].mixer) )
++ {
++ continue;
++ }
++
++ ep93xx_set_mixer( mixer_defaults[i].mixer, mixer_defaults[i].value);
++ }
++
++}
++
++static int ep93xx_set_recsource( int mask )
++{
++ unsigned int val;
++
++ /* Arg contains a bit for each recording source */
++ if( mask == 0 )
++ {
++ return 0;
++ }
++
++ mask &= AC97_RECORD_MASK;
++
++ if( mask == 0 )
++ {
++ return -EINVAL;
++ }
++
++ /*
++ * May have more than one bit set. So clear out currently selected
++ * record source value first (AC97 supports only 1 input)
++ */
++ val = (1 << ac97_rm2oss[peek( AC97_1A_RECORD_SELECT ) & 0x07]);
++ if (mask != val)
++ mask &= ~val;
++
++ val = ffs(mask);
++ val = ac97_oss_rm[val-1];
++ val |= val << 8; /* set both channels */
++
++ /*
++ *
++ */
++ val = peek( AC97_1A_RECORD_SELECT ) & 0x0707;
++ if ((val&0x0404)!=0)
++ val=0x0404;
++ else if((val&0x0000)!=0)
++ val=0x0101;
++
++
++ DPRINTK("ac97_codec: setting ac97 recmask to 0x%04x\n", val);
++
++ poke( AC97_1A_RECORD_SELECT, val);
++
++ return 0;
++}
++
++/*
++ * ep93xx_init_ac97_codec
++ *
++ * Program up the external Ac97 codec.
++ *
++ */
++static void ep93xx_init_ac97_codec( void )
++{
++ DPRINTK("ep93xx_init_ac97_codec - enter\n");
++
++ ep93xx_setup_src();
++ ep93xx_set_samplerate( AUDIO_SAMPLE_RATE_DEFAULT, 0 );
++ ep93xx_set_samplerate( AUDIO_SAMPLE_RATE_DEFAULT, 1 );
++ ep93xx_init_mixer();
++
++ DPRINTK("ep93xx_init_ac97_codec - EXIT\n");
++
++}
++
++
++/*
++ * ep93xx_audio_init
++ * Audio interface
++ */
++static void ep93xx_audio_init(void)
++{
++ DPRINTK("ep93xx_audio_init - enter\n");
++ /*
++ * Init the controller, enable the ac-link.
++ * Initialize the codec.
++ */
++ ep93xx_init_ac97_controller();
++ ep93xx_init_ac97_codec();
++ /*stop the audio loop from the input to the output directly*/
++ ep93xx_stop_loop();
++
++#ifdef alsa_ac97_debug
++ ep93xx_dump_ac97_regs();
++#endif
++ DPRINTK("ep93xx_audio_init - EXIT\n");
++}
++
++/*====================================================================================*/
++
++
++static void print_audio_format( long format )
++{
++ switch( format ){
++ case SNDRV_PCM_FORMAT_S8:
++ DPRINTK( "AFMT_S8\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_U8:
++ DPRINTK( "AFMT_U8\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_S16_LE:
++ DPRINTK( "AFMT_S16_LE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_S16_BE:
++ DPRINTK( "AFMT_S16_BE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_U16_LE:
++ DPRINTK( "AFMT_U16_LE\n" );
++ break;
++ case SNDRV_PCM_FORMAT_U16_BE:
++ DPRINTK( "AFMT_U16_BE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_S24_LE:
++ DPRINTK( "AFMT_S24_LE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_S24_BE:
++ DPRINTK( "AFMT_S24_BE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_U24_LE:
++ DPRINTK( "AFMT_U24_LE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_U24_BE:
++ DPRINTK( "AFMT_U24_BE\n" );
++ break;
++ case SNDRV_PCM_FORMAT_S32_LE:
++ DPRINTK( "AFMT_S24_LE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_S32_BE:
++ DPRINTK( "AFMT_S24_BE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_U32_LE:
++ DPRINTK( "AFMT_U24_LE\n" );
++ break;
++
++ case SNDRV_PCM_FORMAT_U32_BE:
++ DPRINTK( "AFMT_U24_BE\n" );
++ break;
++ default:
++ DPRINTK( "ep93xx_i2s_Unsupported Audio Format\n" );
++ break;
++ }
++}
++
++static void audio_set_format( audio_stream_t * s, long val )
++{
++ DPRINTK( "ep93xx_i2s_audio_set_format enter. Format requested (%d) %d ",
++ (int)val,SNDRV_PCM_FORMAT_S16_LE);
++ print_audio_format( val );
++
++ switch( val ){
++ case SNDRV_PCM_FORMAT_S8:
++ s->audio_format = SNDRV_PCM_FORMAT_S8;
++ s->audio_stream_bitwidth = 8;
++ break;
++
++ case SNDRV_PCM_FORMAT_U8:
++ s->audio_format = SNDRV_PCM_FORMAT_U8;
++ s->audio_stream_bitwidth = 8;
++ break;
++
++ case SNDRV_PCM_FORMAT_S16_LE:
++ case SNDRV_PCM_FORMAT_S16_BE:
++ s->audio_format = SNDRV_PCM_FORMAT_S16_LE;
++ s->audio_stream_bitwidth = 16;
++ break;
++
++ case SNDRV_PCM_FORMAT_U16_LE:
++ case SNDRV_PCM_FORMAT_U16_BE:
++ s->audio_format = SNDRV_PCM_FORMAT_U16_LE;
++ s->audio_stream_bitwidth = 16;
++ break;
++
++ case SNDRV_PCM_FORMAT_S24_LE:
++ case SNDRV_PCM_FORMAT_S24_BE:
++ s->audio_format = SNDRV_PCM_FORMAT_S24_LE;
++ s->audio_stream_bitwidth = 24;
++ break;
++
++ case SNDRV_PCM_FORMAT_U24_LE:
++ case SNDRV_PCM_FORMAT_U24_BE:
++ s->audio_format = SNDRV_PCM_FORMAT_U24_LE;
++ s->audio_stream_bitwidth = 24;
++ break;
++
++ case SNDRV_PCM_FORMAT_U32_LE:
++ case SNDRV_PCM_FORMAT_U32_BE:
++ case SNDRV_PCM_FORMAT_S32_LE:
++ case SNDRV_PCM_FORMAT_S32_BE:
++ s->audio_format = SNDRV_PCM_FORMAT_S32_LE;
++ s->audio_stream_bitwidth = 32;
++ break;
++ default:
++ DPRINTK( "ep93xx_i2s_Unsupported Audio Format\n" );
++ break;
++ }
++
++ DPRINTK( "ep93xx_i2s_audio_set_format EXIT format set to be (%d) ", (int)s->audio_format );
++ print_audio_format( (long)s->audio_format );
++}
++
++static __inline__ unsigned long copy_to_user_S24_LE
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++
++ int total_to_count = to_count;
++ int *user_ptr = (int *)to; /* 32 bit user buffer */
++ int count;
++
++ count = 8 * stream->dma_num_channels;
++
++ while (to_count > 0){
++
++ __put_user( (int)( *dma_buffer_0++ ), user_ptr++ );
++ __put_user( (int)( *dma_buffer_0++ ), user_ptr++ );
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( (int)( *dma_buffer_1++ ), user_ptr++ );
++ __put_user( (int)( *dma_buffer_1++ ), user_ptr++ );
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( (int)( *dma_buffer_2++ ), user_ptr++ );
++ __put_user( (int)( *dma_buffer_2++ ), user_ptr++ );
++ }
++ to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_U24_LE
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++
++ int total_to_count = to_count;
++ unsigned int * user_ptr = (unsigned int *)to; /* 32 bit user buffer */
++ int count;
++
++ count = 8 * stream->dma_num_channels;
++
++ while (to_count > 0){
++ __put_user( ((unsigned int)( *dma_buffer_0++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned int)( *dma_buffer_0++ )) ^ 0x8000, user_ptr++ );
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( ((unsigned int)( *dma_buffer_1++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned int)( *dma_buffer_1++ )) ^ 0x8000, user_ptr++ );
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( ((unsigned int)( *dma_buffer_2++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned int)( *dma_buffer_2++ )) ^ 0x8000, user_ptr++ );
++ }
++ to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_S16_LE
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ int total_to_count = to_count;
++ short * user_ptr = (short *)to; /* 16 bit user buffer */
++ int count;
++
++ count = 4 * stream->dma_num_channels;
++
++ while (to_count > 0){
++
++ __put_user( (short)( *dma_buffer_0++ ), user_ptr++ );
++ __put_user( (short)( *dma_buffer_0++ ), user_ptr++ );
++
++ if( stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( (short)( *dma_buffer_1++ ), user_ptr++ );
++ __put_user( (short)( *dma_buffer_1++ ), user_ptr++ );
++ }
++
++ if( stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( (short)( *dma_buffer_2++ ), user_ptr++ );
++ __put_user( (short)( *dma_buffer_2++ ), user_ptr++ );
++ }
++ to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_U16_LE
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ int count;
++ int total_to_count = to_count;
++ short * user_ptr = (short *)to; /* 16 bit user buffer */
++
++ count = 4 * stream->dma_num_channels;
++
++ while (to_count > 0){
++
++ __put_user( ((unsigned short)( *dma_buffer_0++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned short)( *dma_buffer_0++ )) ^ 0x8000, user_ptr++ );
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( ((unsigned short)( *dma_buffer_1++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned short)( *dma_buffer_1++ )) ^ 0x8000, user_ptr++ );
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( ((unsigned short)( *dma_buffer_2++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned short)( *dma_buffer_2++ )) ^ 0x8000, user_ptr++ );
++ }
++ to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_S8
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ char *dma_buffer_0 = (char *)stream->hwbuf[0];
++ char *dma_buffer_1 = (char *)stream->hwbuf[1];
++ char *dma_buffer_2 = (char *)stream->hwbuf[2];
++ int count;
++ int total_to_count = to_count;
++ char * user_ptr = (char *)to; /* 8 bit user buffer */
++
++ count = 2 * stream->dma_num_channels;
++
++ dma_buffer_0++;
++ dma_buffer_1++;
++ dma_buffer_2++;
++
++ while (to_count > 0){
++
++ __put_user( (char)( *dma_buffer_0 ), user_ptr++ );
++ dma_buffer_0 += 4;
++ __put_user( (char)( *dma_buffer_0 ), user_ptr++ );
++ dma_buffer_0 += 4;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( (char)( *dma_buffer_1 ), user_ptr++ );
++ dma_buffer_1 += 4;
++ __put_user( (char)( *dma_buffer_1 ), user_ptr++ );
++ dma_buffer_1 += 4;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( (char)( *dma_buffer_2 ), user_ptr++ );
++ dma_buffer_2 += 4;
++ __put_user( (char)( *dma_buffer_2 ), user_ptr++ );
++ dma_buffer_2 += 4;
++ }
++ to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_U8
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ char *dma_buffer_0 = (char *)stream->hwbuf[0];
++ char *dma_buffer_1 = (char *)stream->hwbuf[1];
++ char *dma_buffer_2 = (char *)stream->hwbuf[2];
++ int count;
++ int total_to_count = to_count;
++ char * user_ptr = (char *)to; /* 8 bit user buffer */
++
++ count = 2 * stream->dma_num_channels;
++
++ dma_buffer_0++;
++ dma_buffer_1++;
++ dma_buffer_2++;
++
++ while (to_count > 0){
++
++ __put_user( (char)( *dma_buffer_0 ) ^ 0x80, user_ptr++ );
++ dma_buffer_0 += 4;
++ __put_user( (char)( *dma_buffer_0 ) ^ 0x80, user_ptr++ );
++ dma_buffer_0 += 4;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( (char)( *dma_buffer_1 ) ^ 0x80, user_ptr++ );
++ dma_buffer_1 += 4;
++ __put_user( (char)( *dma_buffer_1 ) ^ 0x80, user_ptr++ );
++ dma_buffer_1 += 4;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( (char)( *dma_buffer_2 ) ^ 0x80, user_ptr++ );
++ dma_buffer_2 += 4;
++ __put_user( (char)( *dma_buffer_2 ) ^ 0x80, user_ptr++ );
++ dma_buffer_2 += 4;
++ }
++ to_count -= count;
++ }
++ return total_to_count;
++}
++
++
++
++
++static __inline__ unsigned long copy_to_user_S16_LE_CM
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ short *dma_buffer_0 = (short *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ int total_to_count = to_count;
++ short * user_ptr = (short *)to; /* 16 bit user buffer */
++ int count;
++
++
++ count = 4 * stream->dma_num_channels;
++
++ while (to_count > 0){
++ if(stream->audio_num_channels == 2){
++ __put_user( (short)( *dma_buffer_0++ ), user_ptr++ );
++ __put_user( (short)( *dma_buffer_0++ ), user_ptr++ );
++ to_count -= count;
++ }
++ else{
++ dma_buffer_0++;
++ __put_user( (short)( *dma_buffer_0++ ), user_ptr++ );
++ to_count -= 2;
++ }
++
++ if( stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( (short)( *dma_buffer_1++ ), user_ptr++ );
++ __put_user( (short)( *dma_buffer_1++ ), user_ptr++ );
++ }
++
++ if( stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( (short)( *dma_buffer_2++ ), user_ptr++ );
++ __put_user( (short)( *dma_buffer_2++ ), user_ptr++ );
++ }
++ //to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_U16_LE_CM
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ unsigned short *dma_buffer_0 = (unsigned short *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ int count;
++ int total_to_count = to_count;
++ unsigned short * user_ptr = (unsigned short *)to; /* 16 bit user buffer */
++
++ count = 4 * stream->dma_num_channels;
++
++ while (to_count > 0){
++
++ if(stream->audio_num_channels == 2){
++ __put_user( ((unsigned short)( *dma_buffer_0++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned short)( *dma_buffer_0++ )) ^ 0x8000, user_ptr++ );
++ to_count -= count;
++ }
++ else{
++ dma_buffer_0++;
++ __put_user( ((unsigned short)( *dma_buffer_0++ )) ^ 0x8000, user_ptr++ );
++ to_count -= 2;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( ((unsigned short)( *dma_buffer_1++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned short)( *dma_buffer_1++ )) ^ 0x8000, user_ptr++ );
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( ((unsigned short)( *dma_buffer_2++ )) ^ 0x8000, user_ptr++ );
++ __put_user( ((unsigned short)( *dma_buffer_2++ )) ^ 0x8000, user_ptr++ );
++ }
++ //to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_S8_CM
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ unsigned short *dma_buffer_0 = (unsigned short *)stream->hwbuf[0];
++ char *dma_buffer_1 = (char *)stream->hwbuf[1];
++ char *dma_buffer_2 = (char *)stream->hwbuf[2];
++ int count;
++ int total_to_count = to_count;
++ char * user_ptr = (char *)to; /* 8 bit user buffer */
++
++ count = 2 * stream->dma_num_channels;
++
++ dma_buffer_0++;
++ dma_buffer_1++;
++ dma_buffer_2++;
++
++ while (to_count > 0){
++ if(stream->audio_num_channels == 2){
++ __put_user( (char)( *dma_buffer_0++ >> 8), user_ptr++ );
++ //dma_buffer_0 += 4;
++ __put_user( (char)( *dma_buffer_0++ >> 8), user_ptr++ );
++ //dma_buffer_0 += 4;
++ to_count -= count;
++ }
++ else{
++ dma_buffer_0++ ;
++ __put_user( (char)( *dma_buffer_0++ >> 8), user_ptr++ );
++
++ to_count -= 1;
++ }
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( (char)( *dma_buffer_1 ), user_ptr++ );
++ dma_buffer_1 += 4;
++ __put_user( (char)( *dma_buffer_1 ), user_ptr++ );
++ dma_buffer_1 += 4;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( (char)( *dma_buffer_2 ), user_ptr++ );
++ dma_buffer_2 += 4;
++ __put_user( (char)( *dma_buffer_2 ), user_ptr++ );
++ dma_buffer_2 += 4;
++ }
++ //to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_U8_CM
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ unsigned short *dma_buffer_0 = (unsigned short *)stream->hwbuf[0];
++ char *dma_buffer_1 = (char *)stream->hwbuf[1];
++ char *dma_buffer_2 = (char *)stream->hwbuf[2];
++ int count;
++ int total_to_count = to_count;
++ char * user_ptr = (char *)to; /* 8 bit user buffer */
++
++ count = 2 * stream->dma_num_channels;
++
++ dma_buffer_0++;
++ dma_buffer_1++;
++ dma_buffer_2++;
++
++ while (to_count > 0){
++ if(stream->audio_num_channels == 2){
++ __put_user( (char)( *dma_buffer_0++ >>8) ^ 0x80, user_ptr++ );
++ //dma_buffer_0 += 4;
++ __put_user( (char)( *dma_buffer_0++ >>8) ^ 0x80, user_ptr++ );
++ //dma_buffer_0 += 4;
++ to_count -= count;
++ }
++ else{
++ dma_buffer_0++;
++ __put_user( (char)( *dma_buffer_0++ >>8) ^ 0x80, user_ptr++ );
++ //dma_buffer_0 += 4;
++ to_count--;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __put_user( (char)( *dma_buffer_1 ) ^ 0x80, user_ptr++ );
++ dma_buffer_1 += 4;
++ __put_user( (char)( *dma_buffer_1 ) ^ 0x80, user_ptr++ );
++ dma_buffer_1 += 4;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __put_user( (char)( *dma_buffer_2 ) ^ 0x80, user_ptr++ );
++ dma_buffer_2 += 4;
++ __put_user( (char)( *dma_buffer_2 ) ^ 0x80, user_ptr++ );
++ dma_buffer_2 += 4;
++ }
++ //to_count -= count;
++ }
++ return total_to_count;
++}
++
++static __inline__ unsigned long copy_to_user_U32
++(
++ audio_stream_t *stream,
++ const char *to,
++ unsigned long to_count
++)
++{
++ char *dma_buffer_0 = (char *)stream->hwbuf[0];
++
++ if(__copy_to_user( (char *)to, dma_buffer_0, to_count))
++ {
++ return -EFAULT;
++ }
++ return to_count;
++}
++
++static __inline__ int copy_to_user_with_conversion
++(
++ audio_stream_t *stream,
++ const char *to,
++ int toCount,
++ int bCompactMode
++)
++{
++ int ret = 0;
++
++ if( toCount == 0 ){
++ DPRINTK("ep93xx_i2s_copy_to_user_with_conversion - nothing to copy!\n");
++ }
++
++ if( bCompactMode == 1 ){
++
++ switch( stream->audio_format ){
++
++ case SNDRV_PCM_FORMAT_S8:
++ ret = copy_to_user_S8_CM( stream, to, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_U8:
++ ret = copy_to_user_U8_CM( stream, to, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_S16_LE:
++ ret = copy_to_user_S16_LE_CM( stream, to, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_U16_LE:
++ ret = copy_to_user_U16_LE_CM( stream, to, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_S24_LE:
++ //ret = copy_to_user_S24_LE( stream, to, toCount );
++ //break;
++
++ case SNDRV_PCM_FORMAT_U24_LE:
++ //ret = copy_to_user_U24_LE( stream, to, toCount );
++ //break;
++
++ case SNDRV_PCM_FORMAT_S32_LE:
++ default:
++ DPRINTK( "ep93xx_i2s copy to user unsupported audio format %x\n",stream->audio_format );
++ break;
++ }
++
++ }
++ else{
++
++ switch( stream->audio_format ){
++
++ case SNDRV_PCM_FORMAT_S8:
++ ret = copy_to_user_S8( stream, to, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_U8:
++ ret = copy_to_user_U8( stream, to, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_S16_LE:
++ ret = copy_to_user_S16_LE( stream, to, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_U16_LE:
++ ret = copy_to_user_U16_LE( stream, to, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_S24_LE:
++ //ret = copy_to_user_S24_LE( stream, to, toCount );
++ //break;
++
++ case SNDRV_PCM_FORMAT_U24_LE:
++ //ret = copy_to_user_U24_LE( stream, to, toCount );
++ //break;
++ DPRINTK( "ep93xx_i2s copy to user unsupported audio format %x\n",stream->audio_format );
++ break;
++
++ case SNDRV_PCM_FORMAT_S32_LE:
++
++ //__copy_to_user( (char *)to, from, toCount);
++ ret = copy_to_user_U32( stream, to, toCount );
++ break;
++ default:
++ DPRINTK( "ep93xx_i2s copy to user unsupported audio format\n" );
++ break;
++ }
++
++ }
++ return ret;
++}
++
++static __inline__ int copy_from_user_S24_LE
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ int count;
++
++ unsigned int * user_buffer = (unsigned int *)from;
++ unsigned int data;
++
++ int toCount0 = toCount;
++ count = 8 * stream->dma_num_channels;
++
++ while (toCount > 0){
++
++ __get_user(data, user_buffer++);
++ *dma_buffer_0++ = (unsigned int)data;
++ __get_user(data, user_buffer++);
++ *dma_buffer_0++ = (unsigned int)data;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = (unsigned int)data;
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = (unsigned int)data;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = (unsigned int)data;
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = (unsigned int)data;
++ }
++ toCount -= count;
++ }
++ return toCount0 / 2;
++}
++
++static __inline__ int copy_from_user_U24_LE
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ int count;
++ unsigned int * user_buffer = (unsigned int *)from;
++ unsigned int data;
++
++ int toCount0 = toCount;
++ count = 8 * stream->dma_num_channels;
++
++ while (toCount > 0){
++
++ __get_user(data, user_buffer++);
++ *dma_buffer_0++ = ((unsigned int)data ^ 0x8000);
++ __get_user(data, user_buffer++);
++ *dma_buffer_0++ = ((unsigned int)data ^ 0x8000);
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = ((unsigned int)data ^ 0x8000);
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = ((unsigned int)data ^ 0x8000);
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = ((unsigned int)data ^ 0x8000);
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = ((unsigned int)data ^ 0x8000);
++ }
++ toCount -= count;
++ }
++ return toCount0 / 2;
++}
++
++static __inline__ int copy_from_user_S16_LE
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ unsigned short *user_buffer = (unsigned short *)from;
++ unsigned short data;
++
++ int toCount0 = toCount;
++ int count;
++ count = 8 * stream->dma_num_channels;
++
++ while (toCount > 0){
++
++ __get_user(data, user_buffer++);
++ *dma_buffer_0++ = data;
++ if(stream->audio_num_channels == 2){
++ __get_user(data, user_buffer++);
++ }
++ *dma_buffer_0++ = data;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = data;
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = data;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = data;
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = data;
++ }
++ toCount -= count;
++ }
++
++ if(stream->audio_num_channels == 1){
++ return toCount0 / 4;
++ }
++ return toCount0 / 2;
++}
++
++static __inline__ int copy_from_user_U16_LE
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ int count;
++ unsigned short * user_buffer = (unsigned short *)from;
++ unsigned short data;
++
++ int toCount0 = toCount;
++ count = 8 * stream->dma_num_channels;
++
++ while (toCount > 0){
++
++ __get_user(data, user_buffer++);
++ *dma_buffer_0++ = ((unsigned int)data ^ 0x8000);
++ if(stream->audio_num_channels == 2){
++ __get_user(data, user_buffer++);
++ }
++ *dma_buffer_0++ = ((unsigned int)data ^ 0x8000);
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = ((unsigned int)data ^ 0x8000);
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = ((unsigned int)data ^ 0x8000);
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = ((unsigned int)data ^ 0x8000);
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = ((unsigned int)data ^ 0x8000);
++ }
++ toCount -= count;
++ }
++
++ if(stream->audio_num_channels == 1){
++ return toCount0 / 4;
++ }
++ return toCount0 / 2;
++}
++
++static __inline__ int copy_from_user_S8
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ char *dma_buffer_0 = (char *)stream->hwbuf[0];
++ char *dma_buffer_1 = (char *)stream->hwbuf[1];
++ char *dma_buffer_2 = (char *)stream->hwbuf[2];
++ int count;
++ unsigned char * user_buffer = (unsigned char *)from;
++ unsigned char data;
++
++ int toCount0 = toCount;
++ count = 8 * stream->dma_num_channels;
++
++ dma_buffer_0++;
++ dma_buffer_1++;
++ dma_buffer_2++;
++
++ while (toCount > 0){
++ __get_user(data, user_buffer++);
++ *dma_buffer_0 = data;
++ dma_buffer_0 += 4;
++ if(stream->audio_num_channels == 2){
++ __get_user(data, user_buffer++);
++ }
++ *dma_buffer_0 = data;
++ dma_buffer_0 += 4;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_1 = data;
++ dma_buffer_1 += 4;
++ __get_user(data, user_buffer++);
++ *dma_buffer_1 = data;
++ dma_buffer_1 += 4;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_2 = data;
++ dma_buffer_2 += 4;
++ __get_user(data, user_buffer++);
++ *dma_buffer_2 = data;
++ dma_buffer_2 += 4;
++ }
++ toCount -= count;
++ }
++
++ if(stream->audio_num_channels == 1){
++ return toCount0 / 8;
++ }
++ return toCount0 / 4;
++}
++
++static __inline__ int copy_from_user_U8
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ char *dma_buffer_0 = (char *)stream->hwbuf[0];
++ char *dma_buffer_1 = (char *)stream->hwbuf[1];
++ char *dma_buffer_2 = (char *)stream->hwbuf[2];
++ int count;
++ unsigned char *user_buffer = (unsigned char *)from;
++ unsigned char data;
++
++ int toCount0 = toCount;
++ count = 8 * stream->dma_num_channels;
++
++ dma_buffer_0 ++;
++ dma_buffer_1 ++;
++ dma_buffer_2 ++;
++
++ while (toCount > 0){
++
++ __get_user(data, user_buffer++);
++ *dma_buffer_0 = ((unsigned char)data ^ 0x80);
++ dma_buffer_0 += 4;
++ if(stream->audio_num_channels == 2){
++ __get_user(data, user_buffer++);
++ }
++ *dma_buffer_0 = ((unsigned char)data ^ 0x80);
++ dma_buffer_0 += 4;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_1 = ((unsigned char)data ^ 0x80);
++ dma_buffer_1 += 4;
++ __get_user(data, user_buffer++);
++ *dma_buffer_1 = ((unsigned char)data ^ 0x80);
++ dma_buffer_1 += 4;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_2 = ((unsigned char)data ^ 0x80);
++ dma_buffer_2 += 4;
++ __get_user(data, user_buffer++);
++ *dma_buffer_2 = ((unsigned char)data ^ 0x80);
++ dma_buffer_2 += 4;
++ }
++ toCount -= count;
++ }
++
++ if(stream->audio_num_channels == 1){
++ return toCount0 / 8;
++ }
++ return toCount0 / 4;
++}
++
++static __inline__ int copy_from_user_S16_LE_CM
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ unsigned int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ unsigned int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ unsigned int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ unsigned short *user_buffer = (unsigned short *)from;
++ short data;
++ unsigned int val;
++ int toCount0 = toCount;
++ int count;
++ count = 4 * stream->dma_num_channels;
++
++ //printk("count=%x tocount\n",count,toCount);
++ while (toCount > 0){
++
++ __get_user(data, user_buffer++);
++ //*dma_buffer_0++ = data;
++ val = (unsigned int)data & 0x0000ffff;
++ if(stream->audio_num_channels == 2){
++ __get_user(data, user_buffer++);
++ }
++ *dma_buffer_0++ = ((unsigned int)data << 16) | val;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ //*dma_buffer_1++ = data;
++ val = (unsigned int)data & 0x0000ffff;
++ __get_user(data, user_buffer++);
++ *dma_buffer_1++ = ((unsigned int)data << 16) | val;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ //*dma_buffer_2++ = data;
++ val = (unsigned int)data & 0x0000ffff;
++ __get_user(data, user_buffer++);
++ *dma_buffer_2++ = ((unsigned int)data << 16) | val;
++ }
++ toCount -= count;
++ }
++
++ if(stream->audio_num_channels == 1){
++ return toCount0 /2 ;
++ }
++
++ return toCount0 ;
++}
++
++static __inline__ int copy_from_user_U16_LE_CM
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ int *dma_buffer_0 = (int *)stream->hwbuf[0];
++ int *dma_buffer_1 = (int *)stream->hwbuf[1];
++ int *dma_buffer_2 = (int *)stream->hwbuf[2];
++ int count;
++ unsigned short * user_buffer = (unsigned short *)from;
++ unsigned short data;
++ unsigned int val;
++ int toCount0 = toCount;
++ count = 4 * stream->dma_num_channels;
++
++ while (toCount > 0){
++
++ __get_user(data, user_buffer++);
++ //*dma_buffer_0++ = ((unsigned int)data ^ 0x8000);
++ val = (unsigned int)data & 0x0000ffff;
++ if(stream->audio_num_channels == 2){
++ __get_user(data, user_buffer++);
++ }
++ //*dma_buffer_0++ = ((unsigned int)data ^ 0x8000);
++ *dma_buffer_0++ = (((unsigned int)data << 16) | val) ^ 0x80008000;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ //*dma_buffer_1++ = ((unsigned int)data ^ 0x8000);
++ val = (unsigned int)data & 0x0000ffff;
++ __get_user(data, user_buffer++);
++ //*dma_buffer_1++ = ((unsigned int)data ^ 0x8000);
++ *dma_buffer_1++ = (((unsigned int)data << 16) | val) ^ 0x80008000;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ //*dma_buffer_2++ = ((unsigned int)data ^ 0x8000);
++ val = (unsigned int)data & 0x0000ffff;
++ __get_user(data, user_buffer++);
++ //*dma_buffer_2++ = ((unsigned int)data ^ 0x8000);
++ *dma_buffer_2++ = (((unsigned int)data << 16) | val) ^ 0x80008000;
++ }
++ toCount -= count;
++ }
++
++ if(stream->audio_num_channels == 1){
++ return toCount0/2;
++ }
++ return toCount0 ;
++}
++
++static __inline__ int copy_from_user_S8_CM
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ char *dma_buffer_0 = (char *)stream->hwbuf[0];
++ char *dma_buffer_1 = (char *)stream->hwbuf[1];
++ char *dma_buffer_2 = (char *)stream->hwbuf[2];
++ int count;
++ unsigned char * user_buffer = (unsigned char *)from;
++ unsigned char data;
++ int toCount0 = toCount;
++ count = 4 * stream->dma_num_channels;
++
++ dma_buffer_0++;
++ dma_buffer_1++;
++ dma_buffer_2++;
++
++ while (toCount > 0){
++ __get_user(data, user_buffer++);
++ *dma_buffer_0 = data;
++ *(dma_buffer_0 +1 ) = 0;
++ dma_buffer_0 += 2;
++
++ if(stream->audio_num_channels == 2){
++ __get_user(data, user_buffer++);
++ }
++ *dma_buffer_0 = data;
++ *(dma_buffer_0 +1 ) = 0;
++ dma_buffer_0 += 2;
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_1 = data;
++ dma_buffer_1 += 2;
++ __get_user(data, user_buffer++);
++ *dma_buffer_1 = data;
++ dma_buffer_1 += 2;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_2 = data;
++ dma_buffer_2 += 2;
++ __get_user(data, user_buffer++);
++ *dma_buffer_2 = data;
++ dma_buffer_2 += 2;
++ }
++ toCount -= count;
++ }
++
++ if(stream->audio_num_channels == 1){
++ return toCount0 / 4;
++ }
++
++ return toCount0 / 2;
++}
++
++static __inline__ int copy_from_user_U8_CM
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ unsigned char *dma_buffer_0 = (unsigned char *)stream->hwbuf[0];
++ unsigned char *dma_buffer_1 = (unsigned char *)stream->hwbuf[1];
++ unsigned char *dma_buffer_2 = (unsigned char *)stream->hwbuf[2];
++ int count;
++ unsigned char *user_buffer = (unsigned char *)from;
++ unsigned char data;
++
++ int toCount0 = toCount;
++ count = 4 * stream->dma_num_channels;
++
++ dma_buffer_0 ++;
++ dma_buffer_1 ++;
++ dma_buffer_2 ++;
++
++ while (toCount > 0){
++
++ __get_user(data, user_buffer++);
++ *dma_buffer_0 = ((unsigned char)data ^ 0x80);
++ *(dma_buffer_0 +1 ) = 0;
++ dma_buffer_0 += 2;
++
++ if(stream->audio_num_channels == 2){
++ __get_user(data, user_buffer++);
++ }
++ *dma_buffer_0 = ((unsigned char)data ^ 0x80);
++ *(dma_buffer_0 +1 ) = 0;
++ dma_buffer_0 += 2;
++
++
++ if(stream->audio_channels_flag & CHANNEL_REAR ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_1 = ((unsigned char)data ^ 0x80);
++ dma_buffer_1 += 2;
++ __get_user(data, user_buffer++);
++ *dma_buffer_1 = ((unsigned char)data ^ 0x80);
++ dma_buffer_1 += 2;
++ }
++
++ if(stream->audio_channels_flag & CHANNEL_CENTER_LFE ){
++ __get_user(data, user_buffer++);
++ *dma_buffer_2 = ((unsigned char)data ^ 0x80);
++ dma_buffer_2 += 2;
++ __get_user(data, user_buffer++);
++ *dma_buffer_2 = ((unsigned char)data ^ 0x80);
++ dma_buffer_2 += 2;
++ }
++ toCount -= count;
++ }
++
++ if(stream->audio_num_channels == 1){
++ return toCount0 / 4;
++ }
++
++ return toCount0 / 2;
++}
++
++static int copy_from_user_U32
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount
++)
++{
++ char *dma_buffer_0 = (char *)stream->hwbuf[0];
++
++ if (copy_from_user( (char *)dma_buffer_0, from, toCount))
++ {
++ return -EFAULT;
++ }
++
++ return toCount;
++
++}
++
++/*
++ * Returns negative for error
++ * Returns # of bytes transferred out of the from buffer
++ * for success.
++ */
++static __inline__ int copy_from_user_with_conversion
++(
++ audio_stream_t *stream,
++ const char *from,
++ int toCount,
++ int bCompactMode
++)
++{
++ int ret = 0;
++// DPRINTK("copy_from_user_with_conversion\n");
++ if( toCount == 0 ){
++ DPRINTK("ep93xx_i2s_copy_from_user_with_conversion - nothing to copy!\n");
++ }
++
++ if( bCompactMode == 1){
++
++ switch( stream->audio_format ){
++
++ case SNDRV_PCM_FORMAT_S8:
++ DPRINTK("SNDRV_PCM_FORMAT_S8 CM\n");
++ ret = copy_from_user_S8_CM( stream, from, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_U8:
++ DPRINTK("SNDRV_PCM_FORMAT_U8 CM\n");
++ ret = copy_from_user_U8_CM( stream, from, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_S16_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_S16_LE CM\n");
++ ret = copy_from_user_S16_LE_CM( stream, from, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_U16_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_U16_LE CM\n");
++ ret = copy_from_user_U16_LE_CM( stream, from, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_S24_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_S24_LE CM\n");
++ //ret = copy_from_user_S24_LE( stream, from, toCount );
++ //break;
++
++ case SNDRV_PCM_FORMAT_U24_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_U24_LE CM\n");
++ //ret = copy_from_user_U24_LE( stream, from, toCount );
++ //break;
++ case SNDRV_PCM_FORMAT_S32_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_S32_LE CM\n");
++ //break;
++ default:
++ DPRINTK( "ep93xx_i2s copy from user unsupported audio format\n" );
++ break;
++ }
++ }
++ else{
++ switch( stream->audio_format ){
++
++ case SNDRV_PCM_FORMAT_S8:
++ DPRINTK("SNDRV_PCM_FORMAT_S8\n");
++ ret = copy_from_user_S8( stream, from, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_U8:
++ DPRINTK("SNDRV_PCM_FORMAT_U8\n");
++ ret = copy_from_user_U8( stream, from, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_S16_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_S16_LE\n");
++ ret = copy_from_user_S16_LE( stream, from, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_U16_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_U16_LE\n");
++ ret = copy_from_user_U16_LE( stream, from, toCount );
++ break;
++
++ case SNDRV_PCM_FORMAT_S24_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_S24_LE\n");
++ //ret = copy_from_user_S24_LE( stream, from, toCount );
++ //break;
++
++ case SNDRV_PCM_FORMAT_U24_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_U24_LE\n");
++ //ret = copy_from_user_U24_LE( stream, from, toCount );
++ //break;
++ DPRINTK( "ep93xx_i2s copy from user unsupported audio format\n" );
++ break;
++ case SNDRV_PCM_FORMAT_S32_LE:
++ DPRINTK("SNDRV_PCM_FORMAT_S32_LE\n");
++ ret = copy_from_user_U32( stream, from, toCount );
++ break;
++ default:
++ DPRINTK( "ep93xx_i2s copy from user unsupported audio format\n" );
++ break;
++ }
++ }
++
++ return ret;
++}
++
++
++
++/*
++ * For audio playback, we convert samples of arbitrary format to be 32 bit
++ * for our hardware. We're scaling a user buffer to a dma buffer. So when
++ * report byte counts, we scale them acording to the ratio of DMA sample
++ * size to user buffer sample size. When we report # of DMA fragments,
++ * we don't scale that. So:
++ *
++ * Also adjust the size and number of dma fragments if sample size changed.
++ *
++ * Input format Input sample Output sample size ratio (out:in)
++ * bits channels size (bytes) CM non-CM CM non-CM
++ * 8 stereo 2 4 8 2:1 4:1
++ * 16 stereo 4 4 8 1:1 2:1
++ * 24 stereo 6 4 8 X 8:6 not a real case
++ *
++ */
++static void snd_ep93xx_dma2usr_ratio( audio_stream_t * stream,int bCompactMode )
++{
++ unsigned int dma_sample_size, user_sample_size;
++
++ if(bCompactMode == 1){
++ dma_sample_size = 4; /* each stereo sample is 2 * 32 bits */
++ }
++ else{
++ dma_sample_size = 8;
++ }
++
++ // If stereo 16 bit, user sample is 4 bytes.
++ // If stereo 8 bit, user sample is 2 bytes.
++ if(stream->audio_num_channels == 1){
++ user_sample_size = stream->audio_stream_bitwidth / 8;
++ }
++ else{
++ user_sample_size = stream->audio_stream_bitwidth / 4;
++ }
++
++ stream->dma2usr_ratio = dma_sample_size / user_sample_size;
++}
++
++/*---------------------------------------------------------------------------------------------*/
++
++static int snd_ep93xx_dma_free(struct snd_pcm_substream *substream ){
++
++
++ audio_state_t *state = substream->private_data;
++ audio_stream_t *stream = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
++ state->output_stream:state->input_stream;
++ int i;
++
++
++ DPRINTK("snd_ep93xx_dma_free - enter\n");
++ for( i = 0 ; i < stream->dma_num_channels ;i++ ){
++ ep93xx_dma_free( stream->dmahandles[i] );
++ }
++ DPRINTK("snd_ep93xx_dma_free - exit\n");
++ return 0;
++}
++
++static int snd_ep93xx_dma_config(struct snd_pcm_substream *substream ){
++
++ audio_state_t *state = substream->private_data;
++ audio_stream_t *stream = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
++ state->output_stream:state->input_stream;
++ int i,err = 0;
++
++ DPRINTK("snd_ep93xx_dma_config - enter\n");
++
++ for( i = 0 ; i < stream->dma_num_channels ;i++ ){
++
++ err = ep93xx_dma_request(&stream->dmahandles[i],
++ stream->devicename,
++ (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
++ state->output_dma[i]:state->input_dma[i] );
++ if (err){
++ printk("snd_ep93xx_dma_config - exit ERROR dma request failed\n");
++ return err;
++ }
++ err = ep93xx_dma_config( stream->dmahandles[i],
++ IGNORE_CHANNEL_ERROR,
++ 0,
++ (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
++ snd_ep93xx_dma_tx_callback:snd_ep93xx_dma_rx_callback,
++ (unsigned int)substream );
++ if (err){
++ printk("snd_ep93xx_dma_config - exit ERROR dma request failed\n");
++ return err;
++ }
++ }
++
++ DPRINTK("snd_ep93xx_dma_config - enter\n");
++ return err;
++}
++
++static void snd_ep93xx_dma_start( audio_state_t * state, audio_stream_t * stream )
++{
++ int err,i;
++
++ DPRINTK("snd_ep93xx_dma_start - enter\n");
++
++ for(i = 0 ;i < stream->dma_num_channels;i++)
++ err = ep93xx_dma_start( stream->dmahandles[i], 1,(unsigned int *) stream->dmahandles );
++
++ stream->active = 1;
++
++ DPRINTK("snd_ep93xx_dma_start - exit\n");
++}
++
++static void snd_ep93xx_dma_pause( audio_state_t * state, audio_stream_t * stream )
++{
++ int i;
++
++ DPRINTK("snd_ep93xx_dma_pause - enter\n");
++
++ for(i = 0 ;i < stream->dma_num_channels;i++)
++ ep93xx_dma_pause( stream->dmahandles[i], 1,(unsigned int *)stream->dmahandles );
++
++ stream->active = 0;
++ DPRINTK("snd_ep93xx_dma_pause - exit\n");
++
++}
++
++static void snd_ep93xx_dma_flush( audio_state_t * state, audio_stream_t * stream ){
++
++ int i;
++
++ DPRINTK("snd_ep93xx_dma_flush - enter\n");
++
++ for( i = 0 ; i < stream->dma_num_channels ; i++ )
++ ep93xx_dma_flush( stream->dmahandles[i] );
++
++ DPRINTK("snd_ep93xx_dma_flush - exit\n");
++}
++
++static void snd_ep93xx_deallocate_buffers( struct snd_pcm_substream *substream, audio_stream_t *stream )
++{
++ int i;
++ audio_channel_t *dma_chan;
++
++ DPRINTK("snd_ep93xx_deallocate_buffers - enter\n");
++
++ if( stream->dma_channels ){
++
++ for(i = 0;i < stream->dma_num_channels;i++){
++
++ dma_chan = &stream->dma_channels[i];
++
++ if( dma_chan->area ){
++
++ if( dma_chan->audio_buffers ){
++
++ kfree(dma_chan->audio_buffers);
++ dma_chan->audio_buffers = NULL;
++
++ }
++
++ kfree(dma_chan->area);
++ dma_chan->area = NULL;
++ }
++ }
++ kfree(stream->dma_channels);
++ stream->dma_channels = NULL;
++ }
++ DPRINTK("snd_ep93xx_deallocate_buffers - exit\n");
++}
++
++static int snd_ep93xx_allocate_buffers(struct snd_pcm_substream *substream, audio_stream_t *stream)
++{
++ audio_channel_t *channel;
++ unsigned int size,tmpsize,bufsize,bufextsize;
++ int i,j;
++
++
++ DPRINTK("snd_ep93xx_allocate_buffers - enter\n" );
++
++ if (stream->dma_channels){
++ printk("ep93xx_i2s %s BUSY\n",__FUNCTION__);
++ return -EBUSY;
++ }
++
++ stream->dma_channels = (audio_channel_t *)kmalloc(sizeof(audio_channel_t) * stream->dma_num_channels , GFP_KERNEL);
++
++ if (!stream->dma_channels){
++ printk(AUDIO_NAME ": unable to allocate dma_channels memory\n");
++ return - ENOMEM;
++ }
++
++ size = ( stream->dmasize / stream->dma_num_channels ) * stream->dma2usr_ratio;
++
++ for( i = 0; i < stream->dma_num_channels;i++){
++ channel = &stream->dma_channels[i];
++
++ channel->area = kmalloc( size, GFP_DMA );
++
++ if(!channel->area){
++ printk(AUDIO_NAME ": unable to allocate audio memory\n");
++ return -ENOMEM;
++ }
++ channel->bytes = size;
++ channel->addr = __virt_to_phys((int) channel->area);
++ memset( channel->area, 0, channel->bytes );
++
++ bufsize = ( stream->fragsize / stream->dma_num_channels ) * stream->dma2usr_ratio;
++ channel->audio_buff_count = size / bufsize;
++ bufextsize = size % bufsize;
++
++ if( bufextsize > 0 ){
++ channel->audio_buff_count++;
++ }
++
++ channel->audio_buffers = (audio_buf_t *)kmalloc(sizeof(audio_buf_t) * channel->audio_buff_count , GFP_KERNEL);
++
++ if (!channel->audio_buffers){
++ printk(AUDIO_NAME ": unable to allocate audio memory\n ");
++ return -ENOMEM;
++ }
++
++ tmpsize = size;
++
++ for( j = 0; j < channel->audio_buff_count; j++){
++
++ channel->audio_buffers[j].dma_addr = channel->addr + j * bufsize;
++
++ if( tmpsize >= bufsize ){
++ tmpsize -= bufsize;
++ channel->audio_buffers[j].bytes = bufsize;
++ channel->audio_buffers[j].reportedbytes = bufsize / stream->dma2usr_ratio;
++ }
++ else{
++ channel->audio_buffers[j].bytes = bufextsize;
++ channel->audio_buffers[j].reportedbytes = bufextsize / stream->dma2usr_ratio;
++ }
++ }
++ }
++
++ DPRINTK("snd_ep93xx_allocate_buffers -- exit SUCCESS\n" );
++ return 0;
++}
++
++/*
++ * DMA callback functions
++ */
++
++static void snd_ep93xx_dma_tx_callback
++(
++ ep93xx_dma_int_t DMAInt,
++ ep93xx_dma_dev_t device,
++ unsigned int user_data
++)
++{
++ int handle;
++ int i,chan;
++ unsigned int buf_id;
++
++ struct snd_pcm_substream *substream = (struct snd_pcm_substream *)user_data;
++ audio_state_t *state = (audio_state_t *)(substream->private_data);
++ audio_stream_t *stream = state->output_stream;
++ audio_buf_t *buf;
++
++ switch( device )
++ {
++ case DMATx_I2S3:
++ DPRINTK( "snd_ep93xx_dma_tx_callback - DMATx_I2S3\n");
++ i = 2;
++ break;
++ case DMATx_I2S2:
++ DPRINTK( "snd_ep93xx_dma_tx_callback - DMATx_I2S2\n");
++ i = 1;
++ break;
++ case DMATx_I2S1:
++ default:
++ DPRINTK( "snd_ep93xx_dma_tx_callback - DMATx_I2S1\n");
++ i = 0;
++ break;
++ }
++
++ if(stream->audio_num_channels == 1){
++ chan = 0;
++ }
++ else{
++ chan = stream->audio_num_channels / 2 - 1;
++ }
++ handle = stream->dmahandles[i];
++
++ if(stream->stopped == 0){
++
++ if( ep93xx_dma_remove_buffer( handle, &buf_id ) >= 0 ){
++
++ buf = (audio_buf_t *)buf_id;
++ stream->bytecount += buf->reportedbytes;
++ ep93xx_dma_add_buffer( stream->dmahandles[i],
++ (unsigned int)buf->dma_addr,
++ 0,
++ buf->bytes,
++ 0,
++ (unsigned int) buf );
++ if(chan == i)
++ snd_pcm_period_elapsed(substream);
++ }
++ }
++}
++
++static void snd_ep93xx_dma_rx_callback
++(
++ ep93xx_dma_int_t DMAInt,
++ ep93xx_dma_dev_t device,
++ unsigned int user_data
++)
++{
++ int handle,i,chan;
++ unsigned int buf_id;
++ audio_buf_t *buf;
++
++ struct snd_pcm_substream *substream = (struct snd_pcm_substream *)user_data;
++ audio_state_t *state = (audio_state_t *)(substream->private_data);
++ audio_stream_t *stream = state->input_stream;
++
++ switch( device ){
++
++ case DMARx_I2S3:
++ DPRINTK( "snd_ep93xx_dma_rx_callback - DMARx_I2S3\n");
++ i = 2;
++ break;
++ case DMARx_I2S2:
++ DPRINTK( "snd_ep93xx_dma_rx_callback - DMARx_I2S2\n");
++ i = 1;
++ break;
++ case DMARx_I2S1:
++ default:
++ DPRINTK( "snd_ep93xx_dma_rx_callback - DMARx_I2S1\n");
++ i = 0;
++ break;
++ }
++
++ if(stream->audio_num_channels == 1){
++ chan = 0;
++ }
++ else{
++ chan = stream->audio_num_channels / 2 - 1;
++ }
++ handle = stream->dmahandles[i];
++
++ if( stream->stopped == 0 ){
++
++ if( ep93xx_dma_remove_buffer( handle, &buf_id ) >= 0 ){
++
++ buf = (audio_buf_t *)buf_id;
++ stream->bytecount += buf->reportedbytes;
++ ep93xx_dma_add_buffer( stream->dmahandles[i],
++ (unsigned int)buf->dma_addr,
++ 0,
++ buf->bytes,
++ 0,
++ (unsigned int) buf );
++ if( i == chan )
++ snd_pcm_period_elapsed(substream);
++ }
++ }
++}
++
++static int snd_ep93xx_release(struct snd_pcm_substream *substream)
++{
++ audio_state_t *state = (audio_state_t *)substream->private_data;
++ audio_stream_t *stream = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
++ state->output_stream : state->input_stream;
++
++ DPRINTK("snd_ep93xx_release - enter\n");
++
++ down(&state->sem);
++ stream->active = 0;
++ stream->stopped = 0;
++ snd_ep93xx_deallocate_buffers(substream, stream);
++ up(&state->sem);
++
++ DPRINTK("snd_ep93xx_release - exit\n");
++
++ return 0;
++}
++
++static int ep93xx_ac97_pcm_startup(struct snd_pcm_substream *substream)
++{
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ int r;
++ int iTempMasterVol,iTempHeadphoneVol,iTempMonoVol,iTempRecordSelect;
++ /*save the old mixer*/
++ iTempRecordSelect = peek(AC97_1A_RECORD_SELECT);
++ iTempMasterVol = peek( AC97_02_MASTER_VOL);
++ iTempHeadphoneVol = peek( AC97_04_HEADPHONE_VOL);
++ iTempMonoVol = peek( AC97_06_MONO_VOL);
++
++ runtime->hw.channels_min = 1;
++ runtime->hw.channels_max = 2;
++
++ ep93xx_audio_init();
++ /*ep93xx_init_ac97_controller();*/
++
++ /*reset the old output mixer*/
++ poke( AC97_02_MASTER_VOL, iTempMasterVol);
++ poke( AC97_04_HEADPHONE_VOL,iTempHeadphoneVol );
++ poke( AC97_06_MONO_VOL, iTempMonoVol);
++ poke( AC97_1A_RECORD_SELECT,iTempRecordSelect);
++
++ r = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
++ AC97_RATES_FRONT_DAC : AC97_RATES_ADC;
++
++ DPRINTK(" ep93xx_ac97_pcm_startup=%x\n",r);
++
++ return 0;
++}
++
++
++static int snd_ep93xx_pcm_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ DPRINTK("snd_ep93xx_pcm_hw_params - enter\n");
++ return snd_pcm_lib_malloc_pages(substream,params_buffer_bytes(params));
++}
++
++static int snd_ep93xx_pcm_hw_free(struct snd_pcm_substream *substream)
++{
++
++ DPRINTK("snd_ep93xx_pcm_hw_free - enter\n");
++ return snd_pcm_lib_free_pages(substream);
++}
++
++/*
++ *snd_ep93xx_pcm_prepare: need to finish these functions as lower
++ *chip_set_sample_format
++ *chip_set_sample_rate
++ *chip_set_channels
++ *chip_set_dma_setup
++ */
++
++static int snd_ep93xx_pcm_prepare_playback( struct snd_pcm_substream *substream)
++{
++ audio_state_t *state = (audio_state_t *) substream->private_data;
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ audio_stream_t *stream = state->output_stream;
++
++ DPRINTK("snd_ep93xx_pcm_prepare_playback - enter\n");
++
++ ep93xx_audio_disable(1);
++ ep93xx_ac97_pcm_startup(substream);
++
++ snd_ep93xx_deallocate_buffers(substream,stream);
++
++ //if(runtime->channels % 2 != 0)
++ // return -1;
++
++ DPRINTK("The runtime item : \n");
++ DPRINTK("runtime->dma_addr = 0x%x\n", runtime->dma_addr);
++ DPRINTK("runtime->dma_area = 0x%x\n", runtime->dma_area);
++ DPRINTK("runtime->dma_bytes = %d\n", runtime->dma_bytes);
++ DPRINTK("runtime->frame_bits = %d\n", runtime->frame_bits);
++ DPRINTK("runtime->buffer_size = %d\n", runtime->buffer_size);
++ DPRINTK("runtime->period_size = %d\n", runtime->period_size);
++ DPRINTK("runtime->periods = %d\n", runtime->periods);
++ DPRINTK("runtime->rate = %d\n", runtime->rate);
++ DPRINTK("runtime->format = %d\n", runtime->format);
++ DPRINTK("runtime->channels = %d\n", runtime->channels);
++
++ /* set requestd format when available */
++ stream->audio_num_channels = runtime->channels;
++ if(stream->audio_num_channels == 1){
++ stream->dma_num_channels = 1;
++ }
++ else{
++ stream->dma_num_channels = runtime->channels / 2;
++ }
++
++ stream->audio_channels_flag = CHANNEL_FRONT;
++ if(stream->dma_num_channels == 2)
++ stream->audio_channels_flag |= CHANNEL_REAR;
++ if(stream->dma_num_channels == 3)
++ stream->audio_channels_flag |= CHANNEL_REAR | CHANNEL_CENTER_LFE;
++
++ stream->dmasize = runtime->dma_bytes;
++ stream->nbfrags = runtime->periods;
++ stream->fragsize = frames_to_bytes (runtime, runtime->period_size);
++ stream->bytecount = 0;
++
++ if( !state->codec_set_by_capture ){
++ state->codec_set_by_playback = 1;
++
++ if( stream->audio_rate != runtime->rate ){
++ ep93xx_set_samplerate( runtime->rate,0 );
++ }
++ //if( stream->audio_format != runtime->format ){
++ // snd_ep93xx_i2s_init((stream->audio_stream_bitwidth == 24));
++ //}
++ }
++ else{
++ audio_stream_t *s = state->input_stream;
++ if( runtime->format != s->audio_format)
++ return -1;
++ if( runtime->rate != s->audio_rate )
++ return -1;
++ }
++
++ stream->audio_format = runtime->format ;
++ ep93xx_set_hw_format(stream->audio_format,stream->audio_num_channels);
++
++
++ stream->audio_rate = runtime->rate;
++ audio_set_format( stream, runtime->format );
++ snd_ep93xx_dma2usr_ratio( stream,state->bCompactMode );
++
++ if( snd_ep93xx_allocate_buffers( substream, stream ) != 0 ){
++ snd_ep93xx_deallocate_buffers( substream, stream );
++ return -1;
++ }
++
++ ep93xx_audio_enable(1);
++
++ DPRINTK("snd_ep93xx_pcm_prepare_playback - exit\n");
++ return 0;
++}
++
++static int snd_ep93xx_pcm_prepare_capture( struct snd_pcm_substream *substream)
++{
++ audio_state_t *state = (audio_state_t *) substream->private_data;
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ audio_stream_t *stream = state->input_stream;
++
++ ep93xx_audio_disable(0);
++ ep93xx_ac97_pcm_startup(substream);
++
++ snd_ep93xx_deallocate_buffers(substream,stream);
++
++ //if(runtime->channels % 2 != 0)
++ //return -1;
++
++ DPRINTK("snd_ep93xx_pcm_prepare_capture - enter\n");
++
++// printk("The runtime item : \n");
++// printk("runtime->dma_addr = 0x%x\n", runtime->dma_addr);
++// printk("runtime->dma_area = 0x%x\n", runtime->dma_area);
++// printk("runtime->dma_bytes = %d\n", runtime->dma_bytes);
++// printk("runtime->frame_bits = %d\n", runtime->frame_bits);
++// printk("runtime->buffer_size = %d\n", runtime->buffer_size);
++// printk("runtime->period_size = %d\n", runtime->period_size);
++// printk("runtime->periods = %d\n", runtime->periods);
++// printk("runtime->rate = %d\n", runtime->rate);
++// printk("runtime->format = %d\n", runtime->format);
++// printk("runtime->channels = %d\n", runtime->channels);
++
++ /* set requestd format when available */
++ stream->audio_num_channels = runtime->channels;
++ if(stream->audio_num_channels == 1){
++ stream->dma_num_channels = 1;
++ }
++ else{
++ stream->dma_num_channels = runtime->channels / 2;
++ }
++
++ stream->audio_channels_flag = CHANNEL_FRONT;
++ if(stream->dma_num_channels == 2)
++ stream->audio_channels_flag |= CHANNEL_REAR;
++ if(stream->dma_num_channels == 3)
++ stream->audio_channels_flag |= CHANNEL_REAR | CHANNEL_CENTER_LFE;
++
++ stream->dmasize = runtime->dma_bytes;
++ stream->nbfrags = runtime->periods;
++ stream->fragsize = frames_to_bytes (runtime, runtime->period_size);
++ stream->bytecount = 0;
++
++ if( !state->codec_set_by_playback ){
++ state->codec_set_by_capture = 1;
++
++ /*rate*/
++ if( stream->audio_rate != runtime->rate ){
++ ep93xx_set_samplerate( runtime->rate,1 );
++ }
++
++ /*mixer*/
++ ep93xx_set_recsource(SOUND_MASK_MIC|SOUND_MASK_LINE1 | SOUND_MASK_LINE);
++ poke( AC97_1C_RECORD_GAIN, 0);
++
++ /*format*/
++ //if( stream->audio_format != runtime->format ){
++ // snd_ep93xx_i2s_init((stream->audio_stream_bitwidth == 24));
++ //}
++ }
++ else{
++ audio_stream_t *s = state->output_stream;
++ if( runtime->format != s->audio_format)
++ return -1;
++ if( runtime->rate != s->audio_rate )
++ return -1;
++ }
++
++ stream->audio_format = runtime->format ;
++ ep93xx_set_hw_format(stream->audio_format,stream->audio_num_channels);
++
++
++ stream->audio_rate = runtime->rate;
++ audio_set_format( stream, runtime->format );
++ snd_ep93xx_dma2usr_ratio( stream,state->bCompactMode );
++
++ if( snd_ep93xx_allocate_buffers( substream, stream ) != 0 ){
++ snd_ep93xx_deallocate_buffers( substream, stream );
++ return -1;
++ }
++
++ ep93xx_audio_enable(0);
++
++ DPRINTK("snd_ep93xx_pcm_prepare_capture - exit\n");
++ return 0;
++}
++/*
++ *start/stop/pause dma translate
++ */
++static int snd_ep93xx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ audio_state_t *state = (audio_state_t *)substream->private_data;
++ audio_stream_t *stream = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
++ state->output_stream:state->input_stream;
++ audio_buf_t *buf;
++ audio_channel_t *dma_channel;
++ int i,count,ret = 0;
++ unsigned long flags;
++
++ DPRINTK("snd_ep93xx_pcm_triger %d - enter \n",cmd);
++
++ switch (cmd){
++
++ case SNDRV_PCM_TRIGGER_START:
++
++ snd_ep93xx_dma_config( substream );
++
++ stream->stopped = 0;
++
++ if( !stream->active && !stream->stopped ){
++ stream->active = 1;
++ snd_ep93xx_dma_start( state, stream );
++ }
++
++ local_irq_save(flags);
++
++ for (i = 0; i < stream->dma_num_channels; i++){
++ dma_channel = &stream->dma_channels[i];
++
++ for(count = 0 ;count < dma_channel->audio_buff_count; count++){
++
++ buf = &dma_channel->audio_buffers[count];
++ ep93xx_dma_add_buffer( stream->dmahandles[i],
++ (unsigned int)buf->dma_addr,
++ 0,
++ buf->bytes,
++ 0,
++ (unsigned int) buf );
++ }
++ }
++
++ local_irq_restore(flags);
++ break;
++
++ case SNDRV_PCM_TRIGGER_STOP:
++ stream->stopped = 1;
++ snd_ep93xx_dma_pause( state, stream );
++ snd_ep93xx_dma_flush( state, stream );
++ snd_ep93xx_dma_free( substream );
++ break;
++
++ case SNDRV_PCM_TRIGGER_SUSPEND:
++ break;
++ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++ break;
++ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++ break;
++
++ default:
++ ret = -EINVAL;
++ }
++ DPRINTK("snd_ep93xx_pcm_triger %d - exit \n",cmd);
++ return ret;
++}
++
++static snd_pcm_uframes_t snd_ep93xx_pcm_pointer_playback(struct snd_pcm_substream *substream)
++{
++ audio_state_t *state = (audio_state_t *)(substream->private_data);
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ audio_stream_t *stream = state->output_stream;
++ snd_pcm_uframes_t pointer = 0;
++
++ pointer = bytes_to_frames( runtime,stream->bytecount );
++
++ if (pointer >= runtime->buffer_size){
++ pointer = 0;
++ stream->bytecount = 0;
++ }
++
++ DPRINTK("snd_ep93xx_pcm_pointer_playback - exit\n");
++ return pointer;
++}
++
++static snd_pcm_uframes_t snd_ep93xx_pcm_pointer_capture(struct snd_pcm_substream *substream)
++{
++ audio_state_t *state = (audio_state_t *)(substream->private_data);
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ audio_stream_t *stream = state->input_stream;
++ snd_pcm_uframes_t pointer = 0;
++
++ pointer = bytes_to_frames( runtime,stream->bytecount );
++
++ if (pointer >= runtime->buffer_size){
++ pointer = 0;
++ stream->bytecount = 0;
++ }
++
++ DPRINTK("snd_ep93xx_pcm_pointer_capture - exit\n");
++ return pointer;
++}
++
++static int snd_ep93xx_pcm_open(struct snd_pcm_substream *substream)
++{
++ audio_state_t *state = substream->private_data;
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ audio_stream_t *stream = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
++ state->output_stream:state->input_stream;
++
++ DPRINTK("snd_ep93xx_pcm_open - enter\n");
++
++ down(&state->sem);
++
++ runtime->hw = ep93xx_ac97_pcm_hardware;
++
++ stream->dma_num_channels = AUDIO_DEFAULT_DMACHANNELS;
++ stream->dma_channels = NULL;
++ stream->audio_rate = 0;
++ stream->audio_stream_bitwidth = 0;
++
++ up(&state->sem);
++
++ DPRINTK("snd_ep93xx_pcm_open - exit\n");
++ return 0;
++}
++
++/*
++ *free the HW dma channel
++ *free the HW dma buffer
++ *free the Hw dma decrotion using function :kfree
++ */
++static int snd_ep93xx_pcm_close(struct snd_pcm_substream *substream)
++{
++ audio_state_t *state = (audio_state_t *)(substream->private_data);
++
++ DPRINTK("snd_ep93xx_pcm_close - enter\n");
++
++ snd_ep93xx_release(substream);
++
++ if(substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ state->codec_set_by_playback = 0;
++ else
++ state->codec_set_by_capture = 0;
++
++ DPRINTK("snd_ep93xx_pcm_close - exit\n");
++ return 0;
++}
++
++static int snd_ep93xx_pcm_copy_playback(struct snd_pcm_substream * substream,int channel,
++ snd_pcm_uframes_t pos,void __user *src, snd_pcm_uframes_t count)
++{
++
++ audio_state_t *state = (audio_state_t *)substream->private_data;
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ audio_stream_t *stream = state->output_stream ;
++ audio_channel_t *dma_channel;
++ int i;
++ int tocount = frames_to_bytes(runtime,count);
++
++ for( i = 0; i < stream->dma_num_channels; i++ ){
++
++ dma_channel = &stream->dma_channels[i];
++ stream->hwbuf[i] = dma_channel->area + ( frames_to_bytes(runtime,pos) * stream->dma2usr_ratio / stream->dma_num_channels );
++
++ }
++
++ if(copy_from_user_with_conversion(stream ,(const char*)src,(tocount * stream->dma2usr_ratio),state->bCompactMode) <=0 ){
++ DPRINTK(KERN_ERR "copy_from_user_with_conversion() failed\n");
++ return -EFAULT;
++ }
++
++ DPRINTK("snd_ep93xx_pcm_copy_playback - exit\n");
++ return 0;
++}
++
++
++static int snd_ep93xx_pcm_copy_capture(struct snd_pcm_substream * substream,int channel,
++ snd_pcm_uframes_t pos,void __user *src, snd_pcm_uframes_t count)
++{
++ audio_state_t *state = (audio_state_t *)substream->private_data;
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ audio_stream_t *stream = state->input_stream ;
++ audio_channel_t *dma_channel;
++ int i;
++
++ int tocount = frames_to_bytes(runtime,count);
++
++ for( i = 0; i < stream->dma_num_channels; i++ ){
++
++ dma_channel = &stream->dma_channels[i];
++ stream->hwbuf[i] = dma_channel->area + ( frames_to_bytes(runtime,pos) * stream->dma2usr_ratio / stream->dma_num_channels );
++
++ }
++
++ if(copy_to_user_with_conversion(stream,(const char*)src,tocount,state->bCompactMode) <=0 ){
++
++ DPRINTK(KERN_ERR "copy_to_user_with_conversion() failed\n");
++ return -EFAULT;
++ }
++
++ DPRINTK("snd_ep93xx_pcm_copy_capture - exit\n");
++ return 0;
++}
++
++/*----------------------------------------------------------------------------------*/
++static unsigned short ep93xx_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
++{
++ int val = -1;
++ /*volatile u32 *reg_addr;*/
++
++ DPRINTK(" number of codec:%x reg=%x\n",ac97->num,reg);
++ val=peek(reg);
++ if(val==-1){
++ printk(KERN_ERR "%s: read error (ac97_reg=%d )val=%x\n",
++ __FUNCTION__, reg, val);
++ return 0;
++ }
++
++ return val;
++}
++
++static void ep93xx_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
++{
++ /*volatile u32 *reg_addr;*/
++ int ret;
++
++ DPRINTK(" number of codec:%x rge=%x val=%x\n",ac97->num,reg,val);
++ ret=poke(reg, val);
++ if(ret!=0){
++ printk(KERN_ERR "%s: write error (ac97_reg=%d val=%x)\n",
++ __FUNCTION__, reg, val);
++ }
++
++}
++
++static void ep93xx_ac97_reset(struct snd_ac97 *ac97)
++{
++
++ DPRINTK(" ep93xx_ac97_reset\n");
++ ep93xx_audio_init();
++
++}
++
++static struct snd_ac97_bus_ops ep93xx_ac97_ops = {
++ .read = ep93xx_ac97_read,
++ .write = ep93xx_ac97_write,
++ .reset = ep93xx_ac97_reset,
++};
++
++static struct snd_pcm *ep93xx_ac97_pcm;
++static struct snd_ac97 *ep93xx_ac97_ac97;
++
++static struct snd_pcm_ops snd_ep93xx_pcm_playback_ops = {
++ .open = snd_ep93xx_pcm_open,
++ .close = snd_ep93xx_pcm_close,
++ .ioctl = snd_pcm_lib_ioctl,
++ .hw_params = snd_ep93xx_pcm_hw_params,
++ .hw_free = snd_ep93xx_pcm_hw_free,
++ .prepare = snd_ep93xx_pcm_prepare_playback,
++ .trigger = snd_ep93xx_pcm_trigger,
++ .pointer = snd_ep93xx_pcm_pointer_playback,
++ .copy = snd_ep93xx_pcm_copy_playback,
++
++};
++
++static struct snd_pcm_ops snd_ep93xx_pcm_capture_ops = {
++ .open = snd_ep93xx_pcm_open,
++ .close = snd_ep93xx_pcm_close,
++ .ioctl = snd_pcm_lib_ioctl,
++ .hw_params = snd_ep93xx_pcm_hw_params,
++ .hw_free = snd_ep93xx_pcm_hw_free,
++ .prepare = snd_ep93xx_pcm_prepare_capture,
++ .trigger = snd_ep93xx_pcm_trigger,
++ .pointer = snd_ep93xx_pcm_pointer_capture,
++ .copy = snd_ep93xx_pcm_copy_capture,
++};
++
++/*--------------------------------------------------------------------------*/
++
++
++static int snd_ep93xx_pcm_new(struct snd_card *card, audio_state_t *state, struct snd_pcm **rpcm)
++{
++ struct snd_pcm *pcm;
++ int play = state->output_stream? 1 : 0;/*SNDRV_PCM_STREAM_PLAYBACK*/
++ int capt = state->input_stream ? 1 : 0;/*SNDRV_PCM_STREAM_CAPTURE*/
++ int ret = 0;
++
++ DPRINTK("snd_ep93xx_pcm_new - enter\n");
++
++ /* Register the new pcm device interface */
++ ret = snd_pcm_new(card, "EP93xx-AC97-PCM", 0, play, capt, &pcm);
++
++ if (ret){
++ DPRINTK("%s--%x:card=%x,play=%x,capt=%x,&pcm=%x\n",__FUNCTION__,ret,(int)card,play,capt,(int)pcm);
++ goto out;
++ }
++
++ /* allocate the pcm(DMA) memory */
++ ret = snd_pcm_lib_preallocate_pages_for_all(pcm, /*SNDRV_DMA_TYPE_DEV,0,*/SNDRV_DMA_TYPE_CONTINUOUS,snd_dma_continuous_data(GFP_KERNEL),128*1024,128*1024);
++
++ DPRINTK("The substream item : \n");
++ DPRINTK("pcm->streams[0].substream->dma_buffer.addr = 0x%x\n", pcm->streams[0].substream->dma_buffer.addr);
++ DPRINTK("pcm->streams[0].substream->dma_buffer.area = 0x%x\n", pcm->streams[0].substream->dma_buffer.area);
++ DPRINTK("pcm->streams[0].substream->dma_buffer.bytes = 0x%x\n", pcm->streams[0].substream->dma_buffer.bytes);
++ DPRINTK("pcm->streams[1].substream->dma_buffer.addr = 0x%x\n", pcm->streams[1].substream->dma_buffer.addr);
++ DPRINTK("pcm->streams[1].substream->dma_buffer.area = 0x%x\n", pcm->streams[1].substream->dma_buffer.area);
++ DPRINTK("pcm->streams[1].substream->dma_buffer.bytes = 0x%x\n", pcm->streams[1].substream->dma_buffer.bytes);
++
++ pcm->private_data = state;
++
++ /* seem to free the pcm data struct-->self dma buffer */
++ pcm->private_free = (void*) snd_pcm_lib_preallocate_free_for_all;
++
++ /* alsa pcm ops setting for SNDRV_PCM_STREAM_PLAYBACK */
++ if (play) {
++ int stream = SNDRV_PCM_STREAM_PLAYBACK;
++ snd_pcm_set_ops(pcm, stream, &snd_ep93xx_pcm_playback_ops);
++ }
++
++ /* alsa pcm ops setting for SNDRV_PCM_STREAM_CAPTURE */
++ if (capt) {
++ int stream = SNDRV_PCM_STREAM_CAPTURE;
++ snd_pcm_set_ops(pcm, stream, &snd_ep93xx_pcm_capture_ops);
++ }
++
++ if (rpcm)
++ *rpcm = pcm;
++ DPRINTK("snd_ep93xx_pcm_new - exit\n");
++out:
++ return ret;
++}
++
++#ifdef CONFIG_PM
++
++int ep93xx_ac97_do_suspend(struct snd_card *card, unsigned int state)
++{
++ if (card->power_state != SNDRV_CTL_POWER_D3cold) {
++ snd_pcm_suspend_all(ep93xx_ac97_pcm);
++ snd_ac97_suspend(ep93xx_ac97_ac97);
++ snd_power_change_state(card, SNDRV_CTL_POWER_D3cold);
++ }
++
++ return 0;
++}
++
++int ep93xx_ac97_do_resume(struct snd_card *card, unsigned int state)
++{
++ if (card->power_state != SNDRV_CTL_POWER_D0) {
++
++ snd_ac97_resume(ep93xx_ac97_ac97);
++ snd_power_change_state(card, SNDRV_CTL_POWER_D0);
++ }
++
++ return 0;
++}
++
++int ep93xx_ac97_suspend(struct platform_device *_dev, u32 state, u32 level)
++{
++ struct snd_card *card = platform_get_drvdata(_dev);
++ int ret = 0;
++
++ if (card && level == SUSPEND_DISABLE)
++ ret = ep93xx_ac97_do_suspend(card, SNDRV_CTL_POWER_D3cold);
++
++ return ret;
++}
++
++int ep93xx_ac97_resume(struct platform_device *_dev, u32 level)
++{
++ struct snd_card *card = platform_get_drvdata(_dev);
++ int ret = 0;
++
++ if (card && level == RESUME_ENABLE)
++ ret = ep93xx_ac97_do_resume(card, SNDRV_CTL_POWER_D0);
++
++ return ret;
++}
++
++#else
++/*
++#define ep93xx_ac97_do_suspend NULL
++#define ep93xx_ac97_do_resume NULL
++#define ep93xx_ac97_suspend NULL
++#define ep93xx_ac97_resume NULL
++*/
++
++int ep93xx_ac97_do_suspend(struct snd_card *card, unsigned int state)
++{
++ return 0;
++}
++
++int ep93xx_ac97_do_resume(struct snd_card *card, unsigned int state)
++{
++ return 0;
++}
++
++int ep93xx_ac97_resume(struct platform_device *_dev, u32 level)
++{
++ struct snd_card *card = platform_get_drvdata(_dev);
++ int ret = 0;
++
++ //if (card && level == RESUME_ENABLE)
++ ret = ep93xx_ac97_do_resume(card, SNDRV_CTL_POWER_D0);
++
++ return ret;
++}
++
++int ep93xx_ac97_suspend(struct platform_device *_dev, u32 state, u32 level)
++{
++ struct snd_card *card = platform_get_drvdata(_dev);
++ int ret = 0;
++
++ //if (card && level == SUSPEND_DISABLE)
++ ret = ep93xx_ac97_do_suspend(card, SNDRV_CTL_POWER_D3cold);
++
++ return ret;
++}
++
++#endif
++
++
++
++/* module init & exit */
++static int __devinit ep93xx_ac97_probe(struct platform_device *dev)
++{
++ struct snd_card *card;
++ struct snd_ac97_bus *ac97_bus;
++ struct snd_ac97_template ac97_template;
++ int err = -ENOMEM;
++ struct resource *res = NULL;
++
++ DPRINTK("snd_ep93xx_probe - enter\n");
++
++ /* Enable audio early on, give the DAC time to come up. */
++ res = platform_get_resource( dev, IORESOURCE_MEM, 0);
++
++ if(!res) {
++ printk("error : platform_get_resource \n");
++ return -ENODEV;
++ }
++
++ if (!request_mem_region(res->start,res->end - res->start + 1, "snd-ac97-cs4202" )){
++ printk("error : request_mem_region\n");
++ return -EBUSY;
++ }
++
++ /*enable ac97 codec*/
++ ep93xx_audio_init();
++
++ /* register the soundcard */
++ card = snd_card_new(SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
++ THIS_MODULE, 0);
++ if (!card){
++ printk("AC97: snd_card_new error\n");
++ goto error;
++ }
++
++ card->dev = &dev->dev;
++ /*regist the new pcm device*/
++ err = snd_ep93xx_pcm_new(card, &audio_state, &ep93xx_ac97_pcm);
++ if (err){
++ printk("AC97: ep93xx_ac97_pcm_new error\n");
++ goto error;
++ }
++ if (card == NULL) {
++ DPRINTK(KERN_ERR "snd_card_new() failed\n");
++ goto error;
++ }
++
++ /*driver name*/
++ strcpy(card->driver, "CS4202A");
++ strcpy(card->shortname, "Cirrus Logic AC97 Audio ");
++ strcpy(card->longname, "Cirrus Logic AC97 Audio with CS4202A");
++
++ /*regist the new ac97 device*/
++ err = snd_ac97_bus(card, 0, &ep93xx_ac97_ops, NULL, &ac97_bus);
++ if (err){
++ printk("AC97: snd_ac97_bus error\n");
++ goto error;
++ }
++
++ memset(&ac97_template, 0, sizeof(ac97_template));
++ err = snd_ac97_mixer(ac97_bus, &ac97_template, &ep93xx_ac97_ac97);
++ if (err){
++ printk("AC97: snd_ac97_mixer error\n");
++ goto error;
++ }
++
++ /**/
++ ep93xx_audio_init();
++ /*setting the card device callback*/
++ //err = snd_card_set_pm_callback(card, ep93xx_ac97_do_suspend,ep93xx_ac97_do_resume, (void*)NULL);
++ //if(err != 0){
++ // printk("snd_card_set_pm_callback error\n");
++ //}
++
++ /*regist the new CARD device*/
++ err = snd_card_register(card);
++ if (err == 0) {
++ printk( KERN_INFO "Cirrus Logic ep93xx ac97 audio initialized\n" );
++ platform_set_drvdata(dev,card);
++ DPRINTK("snd_ep93xx_probe - exit\n");
++ return 0;
++ }
++
++error:
++ snd_card_free(card);
++ printk("snd_ep93xx_probe - error\n");
++ return err;
++
++return 0;
++}
++
++static int __devexit ep93xx_ac97_remove(struct platform_device *dev)
++{
++ struct resource *res;
++ struct snd_card *card = platform_get_drvdata(dev);
++
++ res = platform_get_resource( dev, IORESOURCE_MEM, 0);
++ release_mem_region(res->start, res->end - res->start + 1);
++
++ DPRINTK("snd_ep93xx_ac97_remove - enter\n");
++
++ if (card) {
++ snd_card_free(card);
++ platform_set_drvdata(dev, NULL);
++ }
++ DPRINTK("snd_ep93xx_remove - exit\n");
++
++return 0;
++}
++
++
++static struct platform_driver ep93xx_ac97_driver = {
++ .probe = ep93xx_ac97_probe,
++ .remove = __devexit_p (ep93xx_ac97_remove),
++ .suspend = ep93xx_ac97_suspend,
++ .resume = ep93xx_ac97_resume,
++ .driver = {
++ .name = "ep93xx-ac97",
++ },
++};
++
++
++static int __init ep93xx_ac97_init(void)
++{
++ int ret;
++
++ DPRINTK(KERN_INFO "%s: version %s\n", DRIVER_DESC, DRIVER_VERSION);
++ DPRINTK("snd_ep93xx_AC97_init - enter\n");
++ ret = platform_driver_register(&ep93xx_ac97_driver);
++ DPRINTK("snd_ep93xx_AC97_init - exit\n");
++ return ret;
++}
++
++static void __exit ep93xx_ac97_exit(void)
++{
++ DPRINTK("ep93xx_ac97_exit - enter\n");
++ return platform_driver_unregister(&ep93xx_ac97_driver);
++}
++
++module_init(ep93xx_ac97_init);
++module_exit(ep93xx_ac97_exit);
++
++MODULE_DESCRIPTION("Cirrus Logic audio module");
++MODULE_LICENSE("GPL");
+--- /dev/null
++++ linux-2.6.31/sound/arm/ep93xx-ac97.h
+@@ -0,0 +1,89 @@
++/*
++ * linux/sound/arm/ep93xx-ac97.h -- ALSA PCM interface for the edb93xx ac97 audio
++ *
++ * Author: Fred Wei
++ * Created: July 19, 2005
++ * Copyright: Cirrus Logic, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#define EP93XX_DEFAULT_NUM_CHANNELS 2
++#define EP93XX_DEFAULT_FORMAT SNDRV_PCM_FORMAT_S16_LE
++#define EP93XX_DEFAULT_BIT_WIDTH 16
++#define MAX_DEVICE_NAME 20
++
++/*
++ * Buffer Management
++ */
++
++typedef struct {
++
++ unsigned char *area; /* virtual pointer */
++ dma_addr_t dma_addr; /* physical address */
++ size_t bytes;
++ size_t reportedbytes; /* buffer size */
++ int sent; /* indicates that dma has the buf */
++ char *start; /* points to actual buffer */
++
++} audio_buf_t;
++
++
++typedef struct {
++
++ unsigned char *area; /* virtual pointer */
++ dma_addr_t addr; /* physical address */
++ size_t bytes; /* buffer size in bytes */
++ unsigned char *buff_pos; /* virtual pointer */
++ audio_buf_t *audio_buffers; /* array of audio buffer structures */
++ int audio_buff_count;
++
++
++} audio_channel_t;
++
++typedef struct audio_stream_s {
++
++ /* dma stuff */
++ int dmahandles[3]; /* handles for dma driver instances */
++ char devicename[MAX_DEVICE_NAME]; /* string - name of device */
++ int dma_num_channels; /* 1, 2, or 3 DMA channels */
++ audio_channel_t *dma_channels;
++ u_int nbfrags; /* nbr of fragments i.e. buffers */
++ u_int fragsize; /* fragment i.e. buffer size */
++ u_int dmasize;
++ int bytecount; /* nbr of processed bytes */
++ int externedbytecount; /* nbr of processed bytes */
++ volatile int active; /* actually in progress */
++ volatile int stopped; /* might be active but stopped */
++ char *hwbuf[3];
++ long audio_rate;
++ long audio_num_channels; /* Range: 1 to 6 */
++ int audio_channels_flag;
++ long audio_format;
++ long audio_stream_bitwidth; /* Range: 8, 16, 24 */
++ int dma2usr_ratio;
++
++} audio_stream_t;
++
++
++/*
++ * State structure for one instance
++ */
++typedef struct {
++
++ audio_stream_t *output_stream;
++ audio_stream_t *input_stream;
++ ep93xx_dma_dev_t output_dma[3];
++ ep93xx_dma_dev_t input_dma[3];
++ char *output_id[3];
++ char *input_id[3];
++ struct semaphore sem; /* to protect against races in attach() */
++ int codec_set_by_playback;
++ int codec_set_by_capture;
++ int DAC_bit_width; /* 16, 20, 24 bits */
++ int bCompactMode; /* set if 32bits = a stereo sample */
++
++} audio_state_t;
++
diff --git a/recipes/linux/linux-2.6.32/ep93xx/ep93xx-spi.patch b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-spi.patch
new file mode 100644
index 0000000000..6effac1717
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-spi.patch
@@ -0,0 +1,721 @@
+---
+ drivers/spi/Kconfig | 6
+ drivers/spi/Makefile | 1
+ drivers/spi/spi_ep93xx.c | 679 +++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 686 insertions(+)
+
+--- linux-2.6.32.orig/drivers/spi/Kconfig
++++ linux-2.6.32/drivers/spi/Kconfig
+@@ -98,10 +98,16 @@ config SPI_BUTTERFLY
+ This uses a custom parallel port cable to connect to an AVR
+ Butterfly <http://www.atmel.com/products/avr/butterfly>, an
+ inexpensive battery powered microcontroller evaluation board.
+ This same cable can be used to flash new firmware.
+
++config SPI_EP93XX
++ tristate "EP93xx SSP SPI master"
++ depends on SPI_MASTER && ARCH_EP93XX && EXPERIMENTAL
++ help
++ This enables the EP93xx SPI master controller.
++
+ config SPI_GPIO
+ tristate "GPIO-based bitbanging SPI Master"
+ depends on GENERIC_GPIO
+ select SPI_BITBANG
+ help
+--- linux-2.6.32.orig/drivers/spi/Makefile
++++ linux-2.6.32/drivers/spi/Makefile
+@@ -31,10 +31,11 @@ obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s
+ obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
+ obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
+ obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
+ obj-$(CONFIG_SPI_SH_SCI) += spi_sh_sci.o
+ obj-$(CONFIG_SPI_STMP3XXX) += spi_stmp.o
++obj-$(CONFIG_SPI_EP93XX) += spi_ep93xx.o
+ # ... add above this line ...
+
+ # SPI protocol drivers (device/link on bus)
+ obj-$(CONFIG_SPI_SPIDEV) += spidev.o
+ obj-$(CONFIG_SPI_TLE62X0) += tle62x0.o
+--- /dev/null
++++ linux-2.6.32/drivers/spi/spi_ep93xx.c
+@@ -0,0 +1,679 @@
++/*
++ * linux/drivers/spi/spi_ep93xx.c
++ *
++ * Copyright (C) 2007 Manfred Gruber <m.gruber@tirol.com>
++ * Small changes by Peter Ivanov <ivanovp@gmail.com> to support MMC over SPI, 2008
++ * SIM.ONE changes by Nuccio Raciti Simplemachine <nuccio.raciti@gmail.com>
++ *
++ * Based on pxa2xx_spi.c/spi_imx.c and bitbang.c driver
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/blkdev.h>
++#include <linux/clk.h>
++#include <linux/delay.h>
++#include <linux/dma-mapping.h>
++#include <linux/err.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/spinlock.h>
++#include <linux/workqueue.h>
++
++#include <linux/spi/spi.h>
++
++#include <mach/hardware.h>
++#include <mach/ep93xx-regs.h>
++#include <mach/gpio.h>
++
++/* #define SPI_EP93XX_DEBUG */
++
++#define DEFINE_SSP_REG(reg, off) \
++ static inline u32 read_##reg(void *p) \
++ { return __raw_readl(p + (off)); } \
++ static inline void write_##reg(u32 v, void *p) \
++ { __raw_writel(v, p + (off)); }
++
++DEFINE_SSP_REG(SSPCR0, 0x00)
++DEFINE_SSP_REG(SSPCR1, 0x04)
++DEFINE_SSP_REG(SSPDR, 0x08)
++DEFINE_SSP_REG(SSPSR, 0x0c)
++DEFINE_SSP_REG(SSPCPSR, 0x10)
++DEFINE_SSP_REG(SSPIIR, 0x14)
++DEFINE_SSP_REG(SSPICR, 0x14)
++
++/* Bits in SSPCR0 */
++#define SSPCR0_DSS_MASK 0x0000000f
++#define SSPCR0_FRF_MASK 0x00000030
++#define SSPCR0_FRF_SHIFT 4
++#define SSPCR0_FRF_MOTOROLA (0 << SSPCR0_FRF_SHIFT)
++#define SSPCR0_FRF_TI (1 << SSPCR0_FRF_SHIFT)
++#define SSPCR0_FRF_NI (2 << SSPCR0_FRF_SHIFT)
++#define SSPCR0_SPO 0x00000040
++#define SSPCR0_SPH 0x00000080
++#define SSPCR0_SCR_MASK 0x0000ff00
++#define SSPCR0_SCR_SHIFT 8
++
++/* Bits in SSPCR1 */
++#define SSPC1_RIE 0x00000001
++#define SSPC1_TIE 0x00000002
++#define SSPC1_RORIE 0x00000004
++#define SSPC1_LBM 0x00000008
++#define SSPC1_SSE 0x00000010
++#define SSPC1_MS 0x00000020
++#define SSPC1_SOD 0x00000040
++
++/* Bits in SSPSR */
++#define SSPSR_TFE 0x00000001 /* TX FIFO is empty */
++#define SSPSR_TNF 0x00000002 /* TX FIFO is not full */
++#define SSPSR_RNE 0x00000004 /* RX FIFO is not empty */
++#define SSPSR_RFF 0x00000008 /* RX FIFO is full */
++#define SSPSR_BSY 0x00000010 /* SSP is busy */
++#define SSPSR_MASK 0x0000001F /* SSP is busy */
++
++/* Bits in SSPCPSR */
++#define SSPCPSR_SCR_MASK 0x000000ff
++
++/* Bits in SSPIIR */
++#define SSPIIR_RIS 0x00000001 /* RX FIFO IRQ status */
++#define SSPIIR_TIS 0x00000002 /* TX FIFO is not full */
++#define SSPIIR_RORIS 0x00000004 /* RX FIFO is full */
++
++#define SPI_SSPCLK 7.4e6
++#define SPI_SSPCLK_REV_E2 14.8e6 /* only for chip Rev E2 */
++#define SPI_MAX_SPEED 3.7e6
++#define SPI_MAX_SPEED_REV_E2 7.4e6 /* only for chip Rev E2 */
++#define SPI_CPSDVR_DIV_MIN 2
++#define SPI_CPSDVR_DIV_MAX 254
++#define SPI_SCR_DIV_MIN 0
++#define SPI_SCR_DIV_MAX 255
++#define SPI_DATARATE_OK 0
++#define SPI_DATARATE_NOK -1
++
++struct driver_data {
++ /* Driver model hookup */
++ struct platform_device *pdev;
++
++ /* SPI framework hookup */
++ struct spi_master *master;
++
++ /* SSP register addresses */
++ void *ioaddr;
++
++ /* SSP irq */
++ int irq;
++
++ struct list_head queue;
++
++ /* SSP spinlock */
++ spinlock_t lock;
++
++ struct workqueue_struct *workqueue;
++ struct work_struct work;
++
++ u8 busy;
++ u8 use_dma;
++};
++
++static unsigned ep93xx_txrx_8(struct spi_device *spi, struct spi_transfer *t)
++{
++ struct driver_data *drv_data;
++ const u8 *tx = t->tx_buf;
++ u8 *rx = t->rx_buf;
++ unsigned count = t->len;
++ u8 byte;
++ int busy;
++
++ drv_data = spi_master_get_devdata(spi->master);
++
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "ep93xx_txrx_8: t->len %u \n", t->len);
++#endif
++
++ while (likely(count > 0)) {
++ byte = 0;
++ if (tx) {
++ byte = *tx++;
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "ep93xx_txrx_8: write 0x%x \n", byte);
++#endif
++ }
++
++ write_SSPDR(byte, drv_data->ioaddr);
++ busy = read_SSPSR(drv_data->ioaddr);
++ while (busy & SSPSR_BSY) {
++ cpu_relax();
++ busy = read_SSPSR(drv_data->ioaddr);
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "ep93xx_txrx_8: delay. SSPSR: 0x%X\n", busy);
++#endif
++ }
++ byte = read_SSPDR(drv_data->ioaddr);
++
++ if (rx) {
++ *rx++ = byte;
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "ep93xx_txrx_8: read 0x%x \n", byte);
++#endif
++ }
++ count -= 1;
++ }
++ return t->len - count;
++}
++
++
++static unsigned ep93xx_txrx_16(struct spi_device *spi, struct spi_transfer *t)
++{
++
++ struct driver_data *drv_data;
++ const u16 *tx = t->tx_buf;
++ u16 *rx = t->rx_buf;
++ unsigned count = t->len;
++ u16 word;
++ int busy;
++
++ drv_data = spi_master_get_devdata(spi->master);
++
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "ep93xx_txrx_16: t->len %u \n", t->len);
++#endif
++ while (likely(count > 0)) {
++ word = 0;
++ if (tx) {
++ word = *tx++;
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "ep93xx_txrx_16: write 0x%x \n", word);
++#endif
++ }
++
++ write_SSPDR(word, drv_data->ioaddr);
++ busy = read_SSPSR(drv_data->ioaddr);
++ while (busy & SSPSR_BSY) {
++ cpu_relax();
++ busy = read_SSPSR(drv_data->ioaddr);
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "ep93xx_txrx_8: delay.\n");
++#endif
++ }
++
++ word = read_SSPDR(drv_data->ioaddr);
++
++ if (rx) {
++ *rx++ = word;
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "ep93xx_txrx_16: read 0x%x \n", word);
++#endif
++ }
++ count -= 2;
++ }
++ return t->len - count;
++}
++
++static u32 spi_data_rate(u32 speed_hz, u32 *div_cpsdvr, u32 *div_scr,
++ struct driver_data *drv_data, struct spi_device *spi)
++{
++ unsigned int spi_sspclk = SPI_SSPCLK;
++ unsigned int bus_speed_max = SPI_MAX_SPEED;
++ unsigned int bus_hz_tmp = 0;
++ u32 div_cpsdvr_tmp;
++ u32 div_scr_tmp;
++ u32 rv = SPI_DATARATE_NOK;
++ int chip_rev;
++
++ /* Checking CHIP_ID */
++ chip_rev = (__raw_readl (EP93XX_SYSCON_CHIP_ID) >> 28) & 0xF;
++ if (chip_rev == 7)
++ {
++ /* Chip version: Rev E2 */
++ /* This device has double speed SSP clock */
++ spi_sspclk = SPI_SSPCLK_REV_E2;
++ bus_speed_max = SPI_MAX_SPEED_REV_E2;
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "Chip Rev E2 detected! This device has double speed SSP clock.\n");
++#endif
++ }
++
++ *div_cpsdvr = SPI_CPSDVR_DIV_MAX;
++ *div_scr = SPI_SCR_DIV_MAX;
++
++ for (div_cpsdvr_tmp = SPI_CPSDVR_DIV_MIN;
++ div_cpsdvr_tmp <= SPI_CPSDVR_DIV_MAX && rv; div_cpsdvr_tmp++) {
++ for (div_scr_tmp = SPI_SCR_DIV_MIN;
++ div_scr_tmp <= SPI_SCR_DIV_MAX && rv; div_scr_tmp++) {
++ bus_hz_tmp = spi_sspclk / (div_cpsdvr_tmp * (1 + div_scr_tmp));
++ if (bus_hz_tmp <= speed_hz && bus_hz_tmp <= bus_speed_max) {
++ *div_cpsdvr = div_cpsdvr_tmp;
++ *div_scr = div_scr_tmp;
++ rv = SPI_DATARATE_OK;
++ }
++ }
++ }
++#ifdef SPI_EP93XX_DEBUG
++ dev_info(&spi->dev,
++ "Needed SPI bus frequency: %i Hz\n", speed_hz);
++ dev_info(&spi->dev,
++ "Actual SPI bus frequency: %i Hz\n", bus_hz_tmp);
++#endif
++ return rv;
++}
++
++/* Supported modes (returns -EINVAL if not supported mode requested) */
++#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH)
++
++static int ep93xx_spi_setup(struct spi_device *spi)
++{
++ struct driver_data *drv_data;
++ u16 val;
++ u32 div_scr;
++ u32 div_cpsdvr;
++ unsigned int bits = spi->bits_per_word;
++ unsigned long speed_hz = spi->max_speed_hz;
++
++ drv_data = spi_master_get_devdata(spi->master);
++
++ /* enable SSP */
++ write_SSPCR1(SSPC1_SSE, drv_data->ioaddr);
++ /* Enable SSP and loopback mode (only for testing!) */
++ /* write_SSPCR1(SSPC1_SSE | SSPC1_LBM, drv_data->ioaddr); */
++
++ if (bits == 0)
++ bits = 8;
++ if (bits < 4 || bits > 16) {
++ dev_err(&spi->dev,
++ "setup invalid bits_per_word %u (4 to 16)\n", bits);
++ return -EINVAL;
++ } else {
++ val = read_SSPCR0(drv_data->ioaddr);
++ val = val & ~SSPCR0_DSS_MASK ;
++ val = val | (bits-1);
++ write_SSPCR0(val, drv_data->ioaddr);
++#ifdef SPI_EP93XX_DEBUG
++ dev_info (&spi->dev, "Bits per word: %i\n", bits);
++#endif
++ }
++
++ if (spi->mode & ~MODEBITS) {
++ dev_err(&spi->dev, "unsupported mode bits: %x\n",
++ spi->mode & ~MODEBITS);
++ return -EINVAL;
++ } else {
++ val = read_SSPCR0(drv_data->ioaddr);
++ val = val & ~SSPCR0_SPO;
++ val = val & ~SSPCR0_SPH;
++ if (spi->mode & SPI_CPOL)
++ {
++ val = val | SSPCR0_SPO;
++ }
++#ifdef SPI_EP93XX_DEBUG
++ dev_info (&spi->dev, "Clock polarity (CPOL): %s\n", (spi->mode & SPI_CPHA) ? "1" : "0");
++#endif
++ if (spi->mode & SPI_CPHA)
++ {
++ val = val | SSPCR0_SPH;
++ }
++#ifdef SPI_EP93XX_DEBUG
++ dev_info (&spi->dev, "Clock phase (CPHA): %s\n", (spi->mode & SPI_CPHA) ? "1" : "0");
++#endif
++ write_SSPCR0(val, drv_data->ioaddr);
++ }
++
++ if (SPI_DATARATE_OK == (spi_data_rate(speed_hz, &div_cpsdvr,
++ &div_scr, drv_data, spi))) {
++
++ val = read_SSPCPSR(drv_data->ioaddr);
++ val = val & ~SSPCPSR_SCR_MASK;
++ val = val | div_cpsdvr;
++#ifdef SPI_EP93XX_DEBUG
++ dev_info (&spi->dev, "SSPCPSR: 0x%X\n", val);
++#endif
++ write_SSPCPSR(val, drv_data->ioaddr);
++
++ val = read_SSPCR0(drv_data->ioaddr);
++ val = val & ~SSPCR0_SCR_MASK;
++ val = val | (div_scr << SSPCR0_SCR_SHIFT);
++#ifdef SPI_EP93XX_DEBUG
++ dev_info (&spi->dev, "SSPCR0: 0x%X (div_scr: 0x%X)\n", val, div_scr);
++#endif
++ write_SSPCR0(val, drv_data->ioaddr);
++ } else
++ return -EINVAL;
++
++ /* reenable */
++ val = read_SSPCR1(drv_data->ioaddr);
++ val = val & ~SSPC1_SSE;
++ write_SSPCR1(val, drv_data->ioaddr);
++ val = read_SSPCR1(drv_data->ioaddr);
++ val = val | SSPC1_SSE;
++ write_SSPCR1(val, drv_data->ioaddr);
++#ifdef SPI_EP93XX_DEBUG
++ dev_info (&spi->dev, "Loopback mode: %s\n", (val & SSPC1_LBM) ? "On" : "Off");
++#endif
++
++ return 0;
++}
++
++static int ep93xx_spi_transfer(struct spi_device *spi, struct spi_message *m)
++{
++ struct driver_data *drv_data;
++ unsigned long flags;
++ int status = 0;
++
++ m->actual_length = 0;
++ m->status = -EINPROGRESS;
++
++ drv_data = spi_master_get_devdata(spi->master);
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ if (!spi->max_speed_hz)
++ status = -ENETDOWN;
++ else {
++ list_add_tail(&m->queue, &drv_data->queue);
++ queue_work(drv_data->workqueue, &drv_data->work);
++ }
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++ return status;
++}
++
++static void ep93xx_work(struct work_struct *work)
++{
++ struct driver_data *drv_data =
++ container_of(work, struct driver_data, work);
++ unsigned long flags;
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ drv_data->busy = 1;
++
++ while (!list_empty(&drv_data->queue)) {
++ struct spi_message *m;
++ struct spi_device *spi;
++ struct spi_transfer *t = NULL;
++ int status;
++
++ m = container_of(drv_data->queue.next, struct spi_message,
++ queue);
++ list_del_init(&m->queue);
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++
++ spi = m->spi;
++ status = 0;
++
++ list_for_each_entry(t, &m->transfers, transfer_list) {
++
++ if (!t->tx_buf && !t->rx_buf && t->len) {
++ status = -EINVAL;
++ break;
++ }
++
++ if (t->len) {
++ if (!m->is_dma_mapped) {
++ t->rx_dma = 0;
++ t->tx_dma = 0;
++ }
++ if (t->bits_per_word <= 8)
++ status = ep93xx_txrx_8(spi, t);
++ else
++ status = ep93xx_txrx_16(spi, t);
++ }
++
++ if (status != t->len) {
++ if (status > 0)
++ status = -EMSGSIZE;
++ break;
++ }
++ m->actual_length += status;
++ status = 0;
++
++ /* protocol tweaks before next transfer */
++ if (t->delay_usecs)
++ udelay(t->delay_usecs);
++
++ if (t->transfer_list.next == &m->transfers)
++ break;
++ }
++
++ m->status = status;
++ m->complete(m->context);
++
++ spin_lock_irqsave(&drv_data->lock, flags);
++ }
++ drv_data->busy = 0;
++ spin_unlock_irqrestore(&drv_data->lock, flags);
++}
++
++static irqreturn_t ssp_int(int irq, void *dev_id)
++{
++ struct driver_data *drv_data = dev_id;
++ u8 status;
++ status = read_SSPIIR(drv_data->ioaddr);
++
++ if (status & SSPIIR_RORIS) {
++ dev_err(&drv_data->pdev->dev, "SPI rx overrun.\n");
++
++ /* We clear the overrun here ! */
++ write_SSPICR(0, drv_data->ioaddr);
++ }
++
++ /* RX interrupt */
++ if (status & SSPIIR_RIS)
++ dev_info(&drv_data->pdev->dev, "SPI RX interrupt\n");
++
++ /* TX interrupt */
++ if (status & SSPIIR_TIS)
++ dev_info(&drv_data->pdev->dev, "SPI TX interrupt\n");
++
++ write_SSPICR(0, drv_data->ioaddr);
++ return IRQ_HANDLED;
++}
++
++static int __init ep93xx_spi_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct spi_master *master;
++ struct driver_data *drv_data = 0;
++ struct resource *memory_resource;
++ int status = 0;
++ u16 val;
++
++ /* Allocate master with space for drv_data and null dma buffer */
++ master = spi_alloc_master(dev, sizeof(struct driver_data));
++ if (!master) {
++ dev_err(&pdev->dev, "cannot alloc spi_master\n");
++ return -ENOMEM;
++ }
++ drv_data = spi_master_get_devdata(master);
++ drv_data->master = master;
++ drv_data->pdev = pdev;
++
++ master->num_chipselect = EP93XX_GPIO_LINE_H(7) + 1;
++ master->bus_num = pdev->id;
++ master->setup = ep93xx_spi_setup;
++ master->transfer = ep93xx_spi_transfer;
++
++ spin_lock_init(&drv_data->lock);
++ INIT_LIST_HEAD(&drv_data->queue);
++
++ /* Setup register addresses */
++ memory_resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!memory_resource) {
++ dev_err(&pdev->dev, "memory resources not defined\n");
++ status = -EIO;
++ goto out_error_master_alloc;
++ } else {
++ drv_data->ioaddr = ioremap(memory_resource->start,
++ memory_resource->end - memory_resource->start);
++ if (drv_data->ioaddr == NULL) {
++ dev_err(&pdev->dev, "ioremap failed\n");
++ status = -EIO;
++ goto out_error_master_alloc;
++ }
++ }
++
++ /* Attach to IRQ */
++ drv_data->irq = platform_get_irq(pdev, 0);
++ if (drv_data->irq < 0)
++ return drv_data->irq;
++
++ if (drv_data->irq <= 0) {
++ dev_err(&pdev->dev, "IRQ resource not defined\n");
++ status = -ENODEV;
++ goto out_error_master_alloc;
++ }
++
++ status = request_irq(drv_data->irq, ssp_int, 0, "ep93xx-spi", drv_data);
++ if (status < 0) {
++ dev_err(&pdev->dev, "cannot get SPI IRQ 0\n");
++ goto out_error_master_alloc;
++ }
++
++ /* SSP default configuration, enable */
++ write_SSPCR1(SSPC1_SSE, drv_data->ioaddr);
++
++ /* run as master */
++ val = read_SSPCR1(drv_data->ioaddr);
++ val = val & ~SSPC1_MS;
++ write_SSPCR1(val, drv_data->ioaddr);
++
++ /* frame format to Motorola SPI Format */
++ val = read_SSPCR0(drv_data->ioaddr);
++ val = val & ~SSPCR0_FRF_MASK ;
++ val = val | SSPCR0_FRF_MOTOROLA;
++ write_SSPCR0(val, drv_data->ioaddr);
++
++ /* enable interrupts */
++ val = read_SSPCR1(drv_data->ioaddr);
++ /* for now only overrun is handled */
++ /* val = val | SSPC1_RIE | SSPC1_TIE | SSPC1_RORIE; */
++ val = val | SSPC1_RORIE;
++ write_SSPCR1(val, drv_data->ioaddr);
++
++ /* SSP default configuration, re enable */
++ val = read_SSPCR1(drv_data->ioaddr);
++ val = val & ~SSPC1_SSE;
++ write_SSPCR1(val, drv_data->ioaddr);
++ val = read_SSPCR1(drv_data->ioaddr);
++ val = val | SSPC1_SSE;
++ write_SSPCR1(val, drv_data->ioaddr);
++
++ /* Register with the SPI framework */
++ platform_set_drvdata(pdev, drv_data);
++ status = spi_register_master(master);
++ if (status != 0) {
++ dev_err(&pdev->dev, "cannot register SPI master\n");
++ goto out_error_master_alloc;
++ } else
++ dev_info(&pdev->dev, "SPI Controller initalized\n");
++
++ INIT_WORK(&drv_data->work, ep93xx_work);
++ spin_lock_init(&drv_data->lock);
++ INIT_LIST_HEAD(&drv_data->queue);
++
++ /* this task is the only thing to touch the SPI bits */
++ drv_data->busy = 0;
++ drv_data->workqueue = create_singlethread_workqueue(
++ dev_name(drv_data->master->dev.parent));
++ if (drv_data->workqueue == NULL) {
++ status = -EBUSY;
++ goto out_error_free_irq;
++ }
++
++ return status;
++
++out_error_free_irq:
++ free_irq(drv_data->irq, master);
++out_error_master_alloc:
++ if (drv_data->ioaddr != NULL)
++ iounmap(drv_data->ioaddr);
++ spi_master_put(master);
++ return status;
++}
++
++static int __exit ep93xx_spi_remove(struct platform_device *pdev)
++{
++ struct driver_data *drv_data = platform_get_drvdata(pdev);
++ u8 val;
++
++ WARN_ON(!list_empty(&drv_data->queue));
++
++ destroy_workqueue(drv_data->workqueue);
++
++ /* switch off SSP*/
++ val = read_SSPCR1(drv_data->ioaddr);
++ val = val & ~SSPC1_SSE;
++ write_SSPCR1(val, drv_data->ioaddr);
++
++ /* release irqs */
++ if (drv_data->irq > 0)
++ free_irq(drv_data->irq, drv_data);
++
++ /* Disconnect from the SPI framework */
++ spi_unregister_master(drv_data->master);
++ spi_master_put(drv_data->master);
++
++ if (drv_data->ioaddr != NULL)
++ iounmap(drv_data->ioaddr);
++
++ /* Prevent double remove */
++ platform_set_drvdata(pdev, NULL);
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int ep93xx_spi_suspend(struct platform_device *pdev, pm_message_t msg)
++{
++ return 0;
++}
++
++static int ep93xx_spi_resume(struct platform_device *pdev)
++{
++ return 0;
++}
++
++#else
++#define ep93xx_spi_suspend NULL
++#define ep93xx_spi_resume NULL
++#endif
++
++struct platform_driver ep93xx_spi_device = {
++ .remove = __exit_p(ep93xx_spi_remove),
++#ifdef CONFIG_PM
++ .suspend = ep93xx_spi_suspend,
++ .resume = ep93xx_spi_resume,
++#endif
++ .driver = {
++ .name = "ep93xx-spi",
++ .bus = &spi_bus_type,
++ .owner = THIS_MODULE,
++ },
++};
++
++int __init ep93xx_spi_init(void)
++{
++ return platform_driver_probe(&ep93xx_spi_device, ep93xx_spi_probe);
++}
++
++void __exit ep93xx_spi_exit(void)
++{
++ platform_driver_unregister(&ep93xx_spi_device);
++}
++
++module_init(ep93xx_spi_init);
++module_exit(ep93xx_spi_exit);
++
++MODULE_DESCRIPTION("EP93XX SPI Driver");
++MODULE_AUTHOR("Manfred Gruber, <m.gruber@tirol.com>");
++MODULE_LICENSE("GPL");
diff --git a/recipes/linux/linux-2.6.32/ep93xx/ep93xx-touchscreen.patch b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-touchscreen.patch
new file mode 100644
index 0000000000..b7e209c93a
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/ep93xx-touchscreen.patch
@@ -0,0 +1,1320 @@
+---
+ arch/arm/mach-ep93xx/include/mach/hardware.h | 1
+ arch/arm/mach-ep93xx/include/mach/regs_touch.h | 95 ++
+ drivers/input/touchscreen/Kconfig | 5
+ drivers/input/touchscreen/Makefile | 1
+ drivers/input/touchscreen/ep93xx_ts.c | 1117 +++++++++++++++++++++++++
+ drivers/input/touchscreen/ep93xx_ts.h | 53 +
+ 6 files changed, 1272 insertions(+)
+
+--- linux-2.6.32.orig/arch/arm/mach-ep93xx/include/mach/hardware.h
++++ linux-2.6.32/arch/arm/mach-ep93xx/include/mach/hardware.h
+@@ -6,10 +6,11 @@
+
+ #include <mach/ep93xx-regs.h>
+ #include <mach/platform.h>
+
+ #define pcibios_assign_all_busses() 0
++#include "regs_touch.h"
+
+ /*
+ * The EP93xx has two external crystal oscillators. To generate the
+ * required high-frequency clocks, the processor uses two phase-locked-
+ * loops (PLLs) to multiply the incoming external clock signal to much
+--- /dev/null
++++ linux-2.6.32/arch/arm/mach-ep93xx/include/mach/regs_touch.h
+@@ -0,0 +1,95 @@
++/*=============================================================================
++ *
++ * FILE: regs_touch.h
++ *
++ * DESCRIPTION: Analog Touchscreen Register Definition
++ *
++ * Copyright Cirrus Logic, 2001-2003
++ *
++ * 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 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, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *=============================================================================
++ */
++#ifndef _REGS_TOUCH_H_
++#define _REGS_TOUCH_H_
++
++/*
++ *-----------------------------------------------------------------------------
++ * Individual bit #defines
++ *-----------------------------------------------------------------------------
++ */
++#define TSSETUP_SDLY_MASK 0x000003FF
++#define TSSETUP_SDLY_SHIFT 0
++#define TSSETUP_NSMP_4 0x00000000
++#define TSSETUP_NSMP_8 0x00000400
++#define TSSETUP_NSMP_16 0x00000800
++#define TSSETUP_NSMP_32 0x00000C00
++#define TSSETUP_NSMP_MASK 0x00000C00
++#define TSSETUP_DEV_4 0x00000000
++#define TSSETUP_DEV_8 0x00001000
++#define TSSETUP_DEV_12 0x00002000
++#define TSSETUP_DEV_16 0x00003000
++#define TSSETUP_DEV_24 0x00004000
++#define TSSETUP_DEV_32 0x00005000
++#define TSSETUP_DEV_64 0x00006000
++#define TSSETUP_DEV_128 0x00007000
++#define TSSETUP_ENABLE 0x00008000
++#define TSSETUP_DLY_MASK 0x03FF0000
++#define TSSETUP_DLY_SHIFT 16
++#define TSSETUP_TDTCT 0x80000000
++
++#define TSMAXMIN_XMIN_MASK 0x000000FF
++#define TSMAXMIN_XMIN_SHIFT 0
++#define TSMAXMIN_YMIN_MASK 0x0000FF00
++#define TSMAXMIN_YMIN_SHIFT 8
++#define TSMAXMIN_XMAX_MASK 0x00FF0000
++#define TSMAXMIN_XMAX_SHIFT 16
++#define TSMAXMIN_YMAX_MASK 0xFF000000
++#define TSMAXMIN_YMAX_SHIFT 24
++
++#define TSXYRESULT_X_MASK 0x00000FFF
++#define TSXYRESULT_X_SHIFT 0
++#define TSXYRESULT_AD_MASK 0x0000FFFF
++#define TSXYRESULT_AD_SHIFT 0
++#define TSXYRESULT_Y_MASK 0x0FFF0000
++#define TSXYRESULT_Y_SHIFT 16
++#define TSXYRESULT_SDR 0x80000000
++
++#define TSX_SAMPLE_MASK 0x00003FFF
++#define TSX_SAMPLE_SHIFT 0x00
++#define TSY_SAMPLE_MASK 0x3FFF0000
++#define TSY_SAMPLE_SHIFT 0x10
++
++#define TSSETUP2_TINT 0x00000001
++#define TSSETUP2_NICOR 0x00000002
++#define TSSETUP2_PINT 0x00000004
++#define TSSETUP2_PENSTS 0x00000008
++#define TSSETUP2_PINTEN 0x00000010
++#define TSSETUP2_DEVINT 0x00000020
++#define TSSETUP2_DINTEN 0x00000040
++#define TSSETUP2_DTMEN 0x00000080
++#define TSSETUP2_DISDEV 0x00000100
++#define TSSETUP2_NSIGND 0x00000200
++#define TSSETUP2_S28EN 0x00000400
++#define TSSETUP2_RINTEN 0x00000800
++
++#define TSXYRESULT_SDR 0x80000000
++
++/*
++ *-----------------------------------------------------------------------------
++ *-----------------------------------------------------------------------------
++ */
++
++
++#endif /* _REGS_TOUCH_H_ */
+--- linux-2.6.32.orig/drivers/input/touchscreen/Kconfig
++++ linux-2.6.32/drivers/input/touchscreen/Kconfig
+@@ -528,6 +528,11 @@ config TOUCHSCREEN_PCAP
+ Say Y here if you have a Motorola EZX telephone and
+ want to enable support for the built-in touchscreen.
+
+ To compile this driver as a module, choose M here: the
+ module will be called pcap_ts.
++
++config TOUCHSCREEN_EP93XX
++ tristate "EP93xx Touchscreen"
++ depends on ARM && INPUT && ARCH_EP93XX
++
+ endif
+--- linux-2.6.32.orig/drivers/input/touchscreen/Makefile
++++ linux-2.6.32/drivers/input/touchscreen/Makefile
+@@ -40,5 +40,6 @@ wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9713) +
+ obj-$(CONFIG_TOUCHSCREEN_WM97XX_ATMEL) += atmel-wm97xx.o
+ obj-$(CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE) += mainstone-wm97xx.o
+ obj-$(CONFIG_TOUCHSCREEN_WM97XX_ZYLONITE) += zylonite-wm97xx.o
+ obj-$(CONFIG_TOUCHSCREEN_W90X900) += w90p910_ts.o
+ obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o
++obj-$(CONFIG_TOUCHSCREEN_EP93XX) += ep93xx_ts.o
+--- /dev/null
++++ linux-2.6.32/drivers/input/touchscreen/ep93xx_ts.c
+@@ -0,0 +1,1117 @@
++/*
++ * linux/drivers/input/touchscreen/ep93xx_ts.c
++ *
++ * Copyright (C) 2003-2004 Cirrus Corp.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/delay.h>
++#include <linux/wait.h>
++#include <linux/fs.h>
++#include <linux/sched.h>
++#include <linux/poll.h>
++#include <linux/miscdevice.h>
++#include <linux/init.h>
++#include <linux/compiler.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/syscalls.h>
++#include <linux/input.h>
++#include <asm/irq.h>
++#include <mach/hardware.h>
++#include <asm/io.h>
++
++#define TOUCH_OFFSET 0x100000
++#define TOUCH_BASE (EP93XX_APB_VIRT_BASE|TOUCH_OFFSET)
++#define TSSetup (TOUCH_BASE+0x00) /* R/W touchscreen controller setup control register. */
++#define TSXYMaxMin (TOUCH_BASE+0x04) /* R/W touchscreen controller max/min register. */
++#define TSXYResult (TOUCH_BASE+0x08) /* R touchscreen controller result register. */
++#define TSDischarge (TOUCH_BASE+0x0C) /* LOCKED R/W touchscreen Switch Matrix control register. */
++#define TSXSample (TOUCH_BASE+0x10) /* LOCKED R/W touchscreen Switch Matrix control register. */
++#define TSYSample (TOUCH_BASE+0x14) /* LOCKED R/W touchscreen Switch Matrix control register. */
++#define TSDirect (TOUCH_BASE+0x18) /* LOCKED R/W touchscreen Switch Matrix control register. */
++#define TSDetect (TOUCH_BASE+0x1C) /* LOCKED R/W touchscreen Switch Matrix control register. */
++#define TSSWLock (TOUCH_BASE+0x20) /* NA R/W touchscreen software lock register. */
++#define TSSetup2 (TOUCH_BASE+0x24) /* R/W touchscreen setup control register #2. */
++
++//
++// To customize for a new touchscreen, there are various macros that
++// have to be set. If you allow UART_HACK_DEBUG to be defined, you
++// will get real time ts data scrolling up your serial terminal
++// screen that will help you empirically determine good values for these.
++//
++
++//
++// These are used as trigger levels to know when we have pen up/down
++//
++// The rules:
++// 1. TS_HEAVY_INV_PRESSURE < TS_LIGHT_INV_PRESSURE because these
++// are Inverse pressure.
++// 2. Any touch lighter than TS_LIGHT_INV_PRESSURE is a pen up.
++// 3. Any touch heavier than TS_HEAVY_INV_PRESSURE is a pen down.
++//
++#define TS_HEAVY_INV_PRESSURE 0xFE0 //C00
++#define TS_LIGHT_INV_PRESSURE 0xFFF //e00
++
++//
++// If the x, y, or inverse pressure changes more than these values
++// between two succeeding points, the point is not reported.
++//
++#define TS_MAX_VALID_XY_CHANGE 0x300
++#define TS_MAX_VALID_PRESSURE_CHANGE 0x100
++
++//
++// This is the minimum Z1 Value that is valid.
++//
++#define MIN_Z1_VALUE 0x50
++
++//
++// Settling delay for taking each ADC measurement. Increase this
++// if ts is jittery.
++//
++#define EP93XX_TS_ADC_DELAY_USEC 2000
++
++//
++// Delay between TS points.
++//
++#define EP93XX_TS_PER_POINT_DELAY_USEC 10000
++
++//-----------------------------------------------------------------------------
++// Debug messaging thru the UARTs
++//-----------------------------------------------------------------------------
++/*
++ * Hello there! Are you trying to get this driver to work with a new
++ * touschscreen? Turn this on and you will get useful info coming
++ * out of your serial port.
++ */
++/* #define PRINT_CALIBRATION_FACTORS */
++#ifdef PRINT_CALIBRATION_FACTORS
++#define UART_HACK_DEBUG 1
++int iMaxX=0, iMaxY=0, iMinX = 0xfff, iMinY = 0xfff;
++#endif
++
++/*
++ * For debugging, let's spew messages out serial port 1 or 3 at 57,600 baud.
++ */
++/* #define UART_HACK_DEBUG 1 */
++#if 0
++#ifdef UART_HACK_DEBUG
++static char szBuf[256];
++void UARTWriteString(char * msg);
++#define DPRINTK( x... ) \
++ sprintf( szBuf, ##x ); \
++ UARTWriteString( szBuf );
++#else
++static char szBuf[256];
++#define DPRINTK( x... ) \
++ sprintf( szBuf, ##x ); \
++ printk( szBuf );
++#endif
++#endif // 0
++#define DPRINTK( x... )
++
++//-----------------------------------------------------------------------------
++// A few more macros...
++//-----------------------------------------------------------------------------
++#define TSSETUP_DEFAULT ( TSSETUP_NSMP_32 | TSSETUP_DEV_64 | \
++ ((128<<TSSETUP_SDLY_SHIFT) & TSSETUP_SDLY_MASK) | \
++ ((128<<TSSETUP_DLY_SHIFT) & TSSETUP_DLY_MASK) )
++
++#define TSSETUP2_DEFAULT (TSSETUP2_NSIGND)
++
++//
++// For now, we use one of the minor numbers from the local/experimental
++// range.
++//
++#define EP93XX_TS_MINOR 240
++
++//-----------------------------------------------------------------------------
++// Static Declarations
++//-----------------------------------------------------------------------------
++static unsigned int guiLastX, guiLastY;
++static unsigned int guiLastInvPressure;
++
++struct TouchScreenSample
++{
++ int currentX;
++ int currentY;
++ int currentButton;
++ int currentPressure;
++ struct timeval currentTime;
++};
++
++//
++// This must match the structure in tslib.
++//
++struct ts_sample {
++ int x;
++ int y;
++ unsigned int pressure;
++ struct timeval tv;
++};
++
++
++static struct TouchScreenSample gSample;
++
++// static int currentX, currentY, currentButton;
++// static int gPressure;
++// static struct timeval gtime;
++
++static int bFreshTouchData;
++static int bCurrentPenDown;
++
++
++
++static DECLARE_WAIT_QUEUE_HEAD(queue);
++static DECLARE_MUTEX(open_sem);
++static spinlock_t event_buffer_lock = SPIN_LOCK_UNLOCKED;
++static struct fasync_struct *ep93xx_fasync;
++
++//-----------------------------------------------------------------------------
++// Typedef Declarations
++//-----------------------------------------------------------------------------
++typedef enum {
++ TS_MODE_UN_INITIALIZED,
++ TS_MODE_HARDWARE_SCAN,
++ TS_MODE_SOFT_SCAN
++} ts_mode_t;
++
++static ts_mode_t gScanningMode;
++
++typedef enum{
++ TS_STATE_STOPPED = 0,
++ TS_STATE_Z1,
++ TS_STATE_Z2,
++ TS_STATE_Y,
++ TS_STATE_X,
++ TS_STATE_DONE
++} ts_states_t;
++
++typedef struct
++{
++ unsigned int uiX;
++ unsigned int uiY;
++ unsigned int uiZ1;
++ unsigned int uiZ2;
++ ts_states_t state;
++} ts_struct_t;
++
++static ts_struct_t sTouch;
++
++/*
++ * From the spec, here's how to set up the touch screen's switch registers.
++ */
++typedef struct
++{
++ unsigned int uiDetect;
++ unsigned int uiDischarge;
++ unsigned int uiXSample;
++ unsigned int uiYSample;
++ unsigned int uiSwitchZ1;
++ unsigned int uiSwitchZ2;
++}SwitchStructType;
++
++//
++// Here's the switch settings for a 4-wire touchscreen. See the spec
++// for how to handle a 4, 7, or 8-wire.
++//
++const static SwitchStructType sSwitchSettings =
++/* s28en=0
++ * TSDetect TSDischarge TSXSample TSYSample SwitchZ1 SwitchZ2
++ */
++ {0x00403604, 0x0007fe04, 0x00081604, 0x00104601, 0x00101601, 0x00101608};
++
++
++//-----------------------------------------------------------------------------
++// Function Declarations
++//-----------------------------------------------------------------------------
++static void ep93xx_ts_set_direct( unsigned int uiADCSwitch );
++static irqreturn_t ep93xx_ts_isr(int irq, void *dev_id);
++static irqreturn_t ep93xx_timer2_isr(int irq, void *dev_id);
++static void ee93xx_ts_evt_add( int button, int dX, int dY, int Pressure );
++static ssize_t ep93xx_ts_read(struct file *filp, char *buf,
++ size_t count, loff_t *l);
++static unsigned int ep93xx_ts_poll(struct file *filp, poll_table *wait);
++static int ep93xx_ts_open(struct inode *inode, struct file *filp);
++static int ep93xx_ts_fasync(int fd, struct file *filp, int on);
++static int ep93xx_ts_release(struct inode *inode, struct file *filp);
++static ssize_t ep93xx_ts_write(struct file *file, const char *buffer,
++ size_t count, loff_t *ppos);
++static void ep93xx_ts_setup(void);
++static void ep93xx_ts_shutdown(void);
++int __init ep93xx_ts_init(void);
++void __exit ep93xx_ts_exit(void);
++static unsigned int CalculateInvPressure( void );
++static unsigned int ADCGetData( unsigned int uiSamples, unsigned int uiMaxDiff);
++static void TS_Soft_Scan_Mode(void);
++static void TS_Hardware_Scan_Mode(void);
++static void ProcessPointData(void);
++static void Set_Timer2_uSec( unsigned int Delay_mSec );
++static void Stop_Timer2(void);
++
++
++
++//-----------------------------------------------------------------------------
++// Debug stuff...
++//-----------------------------------------------------------------------------
++
++#ifdef UART_HACK_DEBUG
++
++// This "array" is a cheap-n-easy way of getting access to the UART registers.
++static unsigned int * const pDebugUART=(unsigned int *)IO_ADDRESS(UART1_BASE);
++//static unsigned int * const pDebugUART=(unsigned int *)IO_ADDRESS(UART3_BASE);
++static int bUartInitialized = 0;
++
++void SendChar(char value)
++{
++ // wait for Tx fifo full flag to clear.
++ while (pDebugUART[0x18>>2] & 0x20);
++
++ // send a char to the uart
++ pDebugUART[0] = value;
++}
++
++void UARTWriteString(char * msg)
++{
++ int index = 0;
++ unsigned int uiTemp;
++
++ //if((pDebugUART[0x14>>2] & 0x1) == 0)
++ if( bUartInitialized == 0 )
++ {
++ uiTemp = inl(EP93XX_SYSCON_DEVCFG);
++ uiTemp |= EP93XX_SYSCON_DEVCFG_U1E;
++ //uiTemp |= EP93XX_SYSCON_DEVCFG_U3E;
++ SysconSetLocked(EP93XX_SYSCON_DEVCFG, uiTemp);
++ pDebugUART[0x10>>2] = 0xf;
++ pDebugUART[0xc>>2] = 0;
++ pDebugUART[0x8>>2] = 0x70;
++ pDebugUART[0x14>>2] = 0x1;
++ bUartInitialized = 1;
++ }
++ while (msg[index] != 0)
++ {
++ if (msg[index] == '\n')
++ {
++ SendChar('\r');
++ SendChar('\n');
++ }
++ else
++ {
++ SendChar(msg[index]);
++ }
++ index++;
++ }
++}
++#endif // UART_HACK_DEBUG
++
++/*
++ * ep93xx_ts_isr
++ */
++static irqreturn_t ep93xx_ts_isr(int irq, void *dev_id)
++{
++ DPRINTK("isr\n");
++
++ //
++ // Note that we don't clear the interrupt here. The interrupt
++ // gets cleared in TS_Soft_Scan_Mode when the TS ENABLE
++ // bit is cleared.
++ //
++
++ //
++ // Set the ts to manual polling mode and schedule a callback.
++ // That way we can return from the isr in a reasonable amount of
++ // time and process the touch in the callback after a brief delay.
++ //
++ TS_Soft_Scan_Mode();
++
++ return(IRQ_HANDLED);
++}
++
++/*
++ * Save the current ts 'event' in an atomic fashion.
++ */
++static void ee93xx_ts_evt_add( int buttons, int iX, int iY, int iPressure )
++{
++#ifdef PRINT_CALIBRATION_FACTORS
++ if( iX > iMaxX ) iMaxX = iX;
++ if( iX < iMinX ) iMinX = iX;
++ if( iY > iMaxY ) iMaxY = iY;
++ if( iY < iMinY ) iMinY = iY;
++#endif
++
++
++ // printk("ee93xx_ts_evt_add\n");
++ //DPRINTK("cb\n");
++ /*
++ * Note the event, but use spinlocks to keep it from getting
++ * halfway read if we get interrupted.
++ */
++
++ spin_lock(&event_buffer_lock);
++ gSample.currentX = iX;
++ gSample.currentY = iY;
++ gSample.currentButton = buttons;
++ gSample.currentPressure = iPressure;
++ bFreshTouchData = 1;
++ do_gettimeofday(&gSample.currentTime);
++
++
++ spin_unlock(&event_buffer_lock);
++
++ kill_fasync(&ep93xx_fasync, SIGIO, POLL_IN);
++ wake_up_interruptible(&queue);
++
++}
++
++
++static ssize_t ep93xx_ts_read(struct file *filp, char *buf, size_t count, loff_t *l)
++{
++
++ unsigned short data[3];
++ struct ts_sample ts_data;
++ int iReturn = -EFAULT;
++ // printk("ep93xx_ts_read\n");
++
++#ifdef PRINT_CALIBRATION_FACTORS
++ static int lala=0;
++ if( bFreshTouchData && (lala++ > 9) )
++ {
++ DPRINTK("%4d, %4d - range [%4d to %4d],[%4d to %4d]\n",
++ f, currentY, iMinX, iMaxX, iMinY, iMaxY );
++ lala = 0;
++ }
++#endif
++ if( !bFreshTouchData)
++ {
++ iReturn = 0;
++ }
++ else if( (count == sizeof(data)) )
++ {
++ spin_lock_irq(&event_buffer_lock);
++ bFreshTouchData = 0;
++ data[0] = gSample.currentX;
++ data[1] = gSample.currentY;
++ data[2] = gSample.currentButton;
++
++ spin_unlock_irq(&event_buffer_lock);
++
++ if (copy_to_user(buf, data, sizeof data))
++ return -EFAULT;
++
++ count -= sizeof(data);
++
++ /* return the # of bytes that got read */
++ iReturn = sizeof(data) ;
++ }
++ else if (count == sizeof(struct ts_sample) )
++ {
++ spin_lock_irq(&event_buffer_lock);
++ bFreshTouchData = 0;
++ ts_data.x = gSample.currentX;
++ ts_data.y = gSample.currentY;
++ ts_data.pressure = gSample.currentPressure;
++ ts_data.tv = gSample.currentTime;
++ spin_unlock_irq(&event_buffer_lock);
++
++ if (copy_to_user(buf, &ts_data, sizeof(struct ts_sample)))
++ {
++ iReturn = -EFAULT;
++ }
++ else
++ {
++ count -= sizeof(ts_data);
++ iReturn = sizeof(ts_data);
++ }
++
++ }
++
++ return iReturn;
++}
++
++static unsigned int ep93xx_ts_poll(struct file *filp, poll_table *wait)
++{
++ // printk("ep93xx_ts_poll\n");
++ poll_wait(filp, &queue, wait);
++
++ if( bFreshTouchData )
++ {
++ return POLLIN | POLLRDNORM;
++ }
++
++ return 0;
++}
++
++static int ep93xx_ts_open(struct inode *inode, struct file *filp)
++{
++ printk("ep93xx_ts_open");
++
++ if( down_trylock(&open_sem) )
++ {
++ return -EBUSY;
++ }
++
++ ep93xx_ts_setup();
++
++ return 0;
++}
++
++/*
++ * Asynchronous I/O support.
++ */
++static int ep93xx_ts_fasync(int fd, struct file *filp, int on)
++{
++ int retval;
++
++ retval = fasync_helper(fd, filp, on, &ep93xx_fasync);
++ if (retval < 0)
++ {
++ return retval;
++ }
++
++ return 0;
++}
++
++static int ep93xx_ts_release(struct inode *inode, struct file *filp)
++{
++ Stop_Timer2();
++
++ /*
++ * Call our async I/O support to request that this file
++ * cease to be used for async I/O.
++ */
++ ep93xx_ts_fasync(-1, filp, 0);
++
++ ep93xx_ts_shutdown();
++
++ up(&open_sem);
++
++ return 0;
++}
++
++static ssize_t ep93xx_ts_write(struct file *file, const char *buffer, size_t count,
++ loff_t *ppos)
++{
++ return -EINVAL;
++}
++
++
++static int ep93xx_ts_ioctl(struct inode *inode, struct file *file, uint command, ulong u)
++{
++ static const int version = EV_VERSION;
++ static const u_int32_t bit =(1 << EV_ABS);
++ static const u_int32_t absbit = (1 << ABS_X) | (1 << ABS_Y) | (1 << ABS_PRESSURE);
++ int iReturn ;
++ int i = 0;
++
++ switch(command)
++ {
++ case EVIOCGVERSION:
++ DPRINTK("ep93xx_ts_ioctl command = EVIOCGVERSION\r\n");
++ i = copy_to_user((void __user *)u, (void *)version, sizeof(version));
++ iReturn = i ? -EFAULT : 0;
++ break;
++
++ case EVIOCGBIT(0,sizeof(u_int32_t) * 8) :
++ DPRINTK("ep93xx_ts_ioctl command = EVIOCGBIT(0,sizeof(uint32) * 8)\r\n");
++ i = copy_to_user((void __user *)u, (void *)bit, sizeof(bit));
++ iReturn = i ? -EFAULT : 0;
++ break;
++
++ case EVIOCGBIT(EV_ABS, sizeof(absbit) * 8):
++ DPRINTK("ep93xx_ts_ioctl command = EVIOCGBIT(0,sizeof(uint32) * 8)\r\n");
++ copy_to_user((void __user *)u, (void *)absbit, sizeof(absbit));
++ iReturn = i ? -EFAULT : 0;
++ break;
++ default:
++ DPRINTK(" ep93xx_ts_ioctl unknown command = %d\n",u);
++ iReturn = -1;
++ break;
++ }
++
++ return iReturn;
++}
++
++static struct file_operations ep93xx_ts_fops = {
++ owner: THIS_MODULE,
++ read: ep93xx_ts_read,
++ write: ep93xx_ts_write,
++ poll: ep93xx_ts_poll,
++ open: ep93xx_ts_open,
++ ioctl: ep93xx_ts_ioctl,
++ release: ep93xx_ts_release,
++ fasync: ep93xx_ts_fasync,
++};
++
++static struct miscdevice ep93xx_ts_miscdev =
++{
++ EP93XX_TS_MINOR,
++ "ep93xx_ts",
++ &ep93xx_ts_fops
++};
++
++void ep93xx_ts_setup(void)
++{
++ unsigned int uiKTDIV, uiTSXYMaxMin;
++ // printk("ep93xx_hw_setup\n");
++
++ /*
++ * Set the TSEN bit in KTDIV so that we are enabling the clock
++ * for the touchscreen.
++ */
++ uiKTDIV = inl(SYSCON_KTDIV);
++ uiKTDIV |= SYSCON_KTDIV_TSEN;
++ SysconSetLocked( SYSCON_KTDIV, uiKTDIV );
++
++ //
++ // Program the TSSetup and TSSetup2 registers.
++ //
++ outl( TSSETUP_DEFAULT, TSSetup );
++ outl( TSSETUP2_DEFAULT, TSSetup2 );
++
++ //
++ // Set the the touch settings.
++ //
++ outl( 0xaa, TSSWLock );
++ outl( sSwitchSettings.uiDischarge, TSDirect );
++
++ outl( 0xaa, TSSWLock );
++ outl( sSwitchSettings.uiDischarge, TSDischarge );
++
++ outl( 0xaa, TSSWLock );
++ outl( sSwitchSettings.uiSwitchZ1, TSXSample );
++
++ outl( 0xaa, TSSWLock );
++ outl( sSwitchSettings.uiSwitchZ2, TSYSample );
++
++ outl( 0xaa, TSSWLock );
++ outl( sSwitchSettings.uiDetect, TSDetect );
++
++ //
++ // X,YMin set to 0x40 = have to drag that many pixels for a new irq.
++ // X,YMax set to 0x40 = 1024 pixels is the maximum movement within the
++ // time scan limit.
++ //
++ uiTSXYMaxMin = (50 << TSMAXMIN_XMIN_SHIFT) & TSMAXMIN_XMIN_MASK;
++ uiTSXYMaxMin |= (50 << TSMAXMIN_YMIN_SHIFT) & TSMAXMIN_YMIN_MASK;
++ uiTSXYMaxMin |= (0xff << TSMAXMIN_XMAX_SHIFT) & TSMAXMIN_XMAX_MASK;
++ uiTSXYMaxMin |= (0xff << TSMAXMIN_YMAX_SHIFT) & TSMAXMIN_YMAX_MASK;
++ outl( uiTSXYMaxMin, TSXYMaxMin );
++
++ bCurrentPenDown = 0;
++ bFreshTouchData = 0;
++ guiLastX = 0;
++ guiLastY = 0;
++ guiLastInvPressure = 0xffffff;
++
++ //
++ // Enable the touch screen scanning engine.
++ //
++ TS_Hardware_Scan_Mode();
++}
++
++/*
++ * ep93xx_ts_shutdown
++ *
++ */
++static void
++ep93xx_ts_shutdown(void)
++{
++ unsigned int uiKTDIV;
++
++ DPRINTK("ep93xx_ts_shutdown\n");
++
++ sTouch.state = TS_STATE_STOPPED;
++ Stop_Timer2();
++
++ /*
++ * Disable the scanning engine.
++ */
++ outl( 0, TSSetup );
++ outl( 0, TSSetup2 );
++
++ /*
++ * Clear the TSEN bit in KTDIV so that we are disabling the clock
++ * for the touchscreen.
++ */
++ uiKTDIV = inl(SYSCON_KTDIV);
++ uiKTDIV &= ~SYSCON_KTDIV_TSEN;
++ SysconSetLocked( SYSCON_KTDIV, uiKTDIV );
++
++} /* ep93xx_ts_shutdown */
++
++static irqreturn_t ep93xx_timer2_isr(int irq, void *dev_id)
++{
++ DPRINTK("%d", (int)sTouch.state );
++
++ switch( sTouch.state )
++ {
++ case TS_STATE_STOPPED:
++ TS_Hardware_Scan_Mode();
++ break;
++
++ //
++ // Get the Z1 value for pressure measurement and set up
++ // the switch register for getting the Z2 measurement.
++ //
++ case TS_STATE_Z1:
++ Set_Timer2_uSec( EP93XX_TS_ADC_DELAY_USEC );
++ sTouch.uiZ1 = ADCGetData( 2, 200 );
++ ep93xx_ts_set_direct( sSwitchSettings.uiSwitchZ2 );
++ sTouch.state = TS_STATE_Z2;
++ break;
++
++ //
++ // Get the Z2 value for pressure measurement and set up
++ // the switch register for getting the Y measurement.
++ //
++ case TS_STATE_Z2:
++ sTouch.uiZ2 = ADCGetData( 2, 200 );
++ ep93xx_ts_set_direct( sSwitchSettings.uiYSample );
++ sTouch.state = TS_STATE_Y;
++ break;
++
++ //
++ // Get the Y value and set up the switch register for
++ // getting the X measurement.
++ //
++ case TS_STATE_Y:
++ sTouch.uiY = ADCGetData( 4, 20 );
++ ep93xx_ts_set_direct( sSwitchSettings.uiXSample );
++ sTouch.state = TS_STATE_X;
++ break;
++
++ //
++ // Read the X value. This is the last of the 4 adc values
++ // we need so we continue on to process the data.
++ //
++ case TS_STATE_X:
++ Stop_Timer2();
++
++ sTouch.uiX = ADCGetData( 4, 20 );
++
++ outl( 0xaa, TSSWLock );
++ outl( sSwitchSettings.uiDischarge, TSDirect );
++
++ sTouch.state = TS_STATE_DONE;
++
++ /*
++ * Process this set of ADC readings.
++ */
++ ProcessPointData();
++
++ break;
++
++
++ //
++ // Shouldn't get here. But if we do, we can recover...
++ //
++ case TS_STATE_DONE:
++ TS_Hardware_Scan_Mode();
++ break;
++ }
++
++ //
++ // Clear the timer2 interrupt.
++ //
++ outl( 1, TIMER2CLEAR );
++ return(IRQ_HANDLED);
++}
++
++/*---------------------------------------------------------------------
++ * ProcessPointData
++ *
++ * This routine processes the ADC data into usable point data and then
++ * puts the driver into hw or sw scanning mode before returning.
++ *
++ * We calculate inverse pressure (lower number = more pressure) then
++ * do a hystheresis with the two pressure values 'light' and 'heavy'.
++ *
++ * If we are above the light, we have pen up.
++ * If we are below the heavy we have pen down.
++ * As long as the pressure stays below the light, pen stays down.
++ * When we get above the light again, pen goes back up.
++ *
++ */
++static void ProcessPointData(void)
++{
++ int bValidPoint = 0;
++ unsigned int uiXDiff, uiYDiff, uiInvPressureDiff;
++ unsigned int uiInvPressure;
++
++ //
++ // Calculate the current pressure.
++ //
++ uiInvPressure = CalculateInvPressure();
++
++ DPRINTK(" X=0x%x, Y=0x%x, Z1=0x%x, Z2=0x%x, InvPressure=0x%x",
++ sTouch.uiX, sTouch.uiY, sTouch.uiZ1, sTouch.uiZ2, uiInvPressure );
++
++ //
++ // If pen pressure is so light that it is greater than the 'max' setting
++ // then we consider this to be a pen up.
++ //
++ if( uiInvPressure >= TS_LIGHT_INV_PRESSURE )
++ {
++ DPRINTK(" -- up \n");
++ bCurrentPenDown = 0;
++ ee93xx_ts_evt_add( 0, guiLastX, guiLastY, 0 );
++ TS_Hardware_Scan_Mode();
++ return;
++ }
++
++ //
++ // Hystheresis:
++ // If the pen pressure is hard enough to be less than the 'min' OR
++ // the pen is already down and is still less than the 'max'...
++ //
++ if( (uiInvPressure < TS_HEAVY_INV_PRESSURE) ||
++ ( bCurrentPenDown && (uiInvPressure < TS_LIGHT_INV_PRESSURE) ) )
++ {
++ if( bCurrentPenDown )
++ {
++ //
++ // If pen was previously down, check the difference between
++ // the last sample and this one... if the difference between
++ // samples is too great, ignore the sample.
++ //
++ uiXDiff = abs(guiLastX - sTouch.uiX);
++ uiYDiff = abs(guiLastY - sTouch.uiY);
++ uiInvPressureDiff = abs(guiLastInvPressure - uiInvPressure);
++
++ if( (uiXDiff < TS_MAX_VALID_XY_CHANGE) && (uiYDiff < TS_MAX_VALID_XY_CHANGE) &&
++ (uiInvPressureDiff < TS_MAX_VALID_PRESSURE_CHANGE) )
++ {
++ DPRINTK(" -- valid(two) \n");
++ bValidPoint = 1;
++ }
++ else
++ {
++ DPRINTK(" -- INvalid(two) \n");
++ }
++ }
++ else
++ {
++ DPRINTK(" -- valid \n");
++ bValidPoint = 1;
++ }
++
++ /*
++ * If either the pen was put down or dragged make a note of it.
++ */
++ if( bValidPoint )
++ {
++ guiLastX = sTouch.uiX;
++ guiLastY = sTouch.uiY;
++ guiLastInvPressure = uiInvPressure;
++ bCurrentPenDown = 1;
++ ee93xx_ts_evt_add( 1, sTouch.uiX, sTouch.uiY, (0x7000000 /uiInvPressure) );
++ }
++
++ TS_Soft_Scan_Mode();
++ return;
++ }
++
++ DPRINTK(" -- fallout \n");
++ TS_Hardware_Scan_Mode();
++}
++
++static void ep93xx_ts_set_direct( unsigned int uiADCSwitch )
++{
++ unsigned int uiResult;
++
++ //
++ // Set the switch settings in the direct register.
++ //
++ outl( 0xaa, TSSWLock );
++ outl( uiADCSwitch, TSDirect );
++
++ //
++ // Read and throw away the first sample.
++ //
++ do {
++ uiResult = inl(TSXYResult);
++ } while( !(uiResult & TSXYRESULT_SDR) );
++
++}
++
++static unsigned int ADCGetData
++(
++ unsigned int uiSamples,
++ unsigned int uiMaxDiff
++)
++{
++ unsigned int uiResult, uiValue, uiCount, uiLowest, uiHighest, uiSum, uiAve;
++
++ do
++ {
++ //
++ //Initialize our values.
++ //
++ uiLowest = 0xfffffff;
++ uiHighest = 0;
++ uiSum = 0;
++
++ for( uiCount = 0 ; uiCount < uiSamples ; uiCount++ )
++ {
++ //
++ // Read the touch screen four more times and average.
++ //
++ do {
++ uiResult = inl(TSXYResult);
++ } while( !(uiResult & TSXYRESULT_SDR) );
++
++ uiValue = (uiResult & TSXYRESULT_AD_MASK) >> TSXYRESULT_AD_SHIFT;
++ uiValue = ((uiValue >> 4) + ((1 + TSXYRESULT_X_MASK)>>1)) & TSXYRESULT_X_MASK;
++
++ //
++ // Add up the values.
++ //
++ uiSum += uiValue;
++
++ //
++ // Get the lowest and highest values.
++ //
++ if( uiValue < uiLowest )
++ {
++ uiLowest = uiValue;
++ }
++ if( uiValue > uiHighest )
++ {
++ uiHighest = uiValue;
++ }
++ }
++
++ } while( (uiHighest - uiLowest) > uiMaxDiff );
++
++ //
++ // Calculate the Average value.
++ //
++ uiAve = uiSum / uiSamples;
++
++ return uiAve;
++}
++
++//****************************************************************************
++// CalculateInvPressure
++//****************************************************************************
++// Is the Touch Valid. Touch is not valid if the X or Y value is not
++// in range and the pressure is not enough.
++//
++// Touch resistance can be measured by the following formula:
++//
++// Rx * X * Z2
++// Rtouch = --------- * (-- - 1)
++// 4096 Z1
++//
++// This is simplified in the ration of Rtouch to Rx. The lower the value, the
++// higher the pressure.
++//
++// Z2
++// InvPressure = X * (-- - 1)
++// Z1
++//
++static unsigned int CalculateInvPressure(void)
++{
++ unsigned int uiInvPressure;
++
++ //
++ // Check to see if the point is valid.
++ //
++ if( sTouch.uiZ1 < MIN_Z1_VALUE )
++ {
++ uiInvPressure = 0x10000;
++ }
++
++ //
++ // Can omit the pressure calculation if you need to get rid of the division.
++ //
++ else
++ {
++ uiInvPressure = ((sTouch.uiX * sTouch.uiZ2) / sTouch.uiZ1) - sTouch.uiX;
++ }
++
++ return uiInvPressure;
++}
++
++
++
++//****************************************************************************
++// TS_Hardware_Scan_Mode
++//****************************************************************************
++// Enables the ep93xx ts scanning engine so that when the pen goes down
++// we will get an interrupt.
++//
++//
++static void TS_Hardware_Scan_Mode(void)
++{
++ unsigned int uiDevCfg;
++
++ DPRINTK("S\n");
++
++ //
++ // Disable the soft scanning engine.
++ //
++ sTouch.state = TS_STATE_STOPPED;
++ Stop_Timer2();
++
++ //
++ // Clear the TIN (Touchscreen INactive) bit so we can go to
++ // automatic scanning mode.
++ //
++ uiDevCfg = inl( EP93XX_SYSCON_DEVCFG );
++ SysconSetLocked( EP93XX_SYSCON_DEVCFG, (uiDevCfg & ~EP93XX_SYSCON_DEVCFG_TIN) );
++
++ //
++ // Enable the touch screen scanning state machine by setting
++ // the ENABLE bit.
++ //
++ outl( (TSSETUP_DEFAULT | TSSETUP_ENABLE), TSSetup );
++
++ //
++ // Set the flag to show that we are in interrupt mode.
++ //
++ gScanningMode = TS_MODE_HARDWARE_SCAN;
++
++ //
++ // Initialize TSSetup2 register.
++ //
++ outl( TSSETUP2_DEFAULT, TSSetup2 );
++
++}
++
++//****************************************************************************
++// TS_Soft_Scan_Mode
++//****************************************************************************
++// Sets the touch screen to manual polling mode.
++//
++//
++static void TS_Soft_Scan_Mode(void)
++{
++ unsigned int uiDevCfg;
++
++ DPRINTK("M\n");
++
++ if( gScanningMode != TS_MODE_SOFT_SCAN )
++ {
++ //
++ // Disable the touch screen scanning state machine by clearing
++ // the ENABLE bit.
++ //
++ outl( TSSETUP_DEFAULT, TSSetup );
++
++ //
++ // Set the TIN bit so we can do manual touchscreen polling.
++ //
++ uiDevCfg = inl(EP93XX_SYSCON_DEVCFG );
++ SysconSetLocked( EP93XX_SYSCON_DEVCFG, (uiDevCfg | EP93XX_SYSCON_DEVCFG_TIN) );
++ }
++
++ //
++ // Set the switch register up for the first ADC reading
++ //
++ ep93xx_ts_set_direct( sSwitchSettings.uiSwitchZ1 );
++
++ //
++ // Initialize our software state machine to know which ADC
++ // reading to take
++ //
++ sTouch.state = TS_STATE_Z1;
++
++ //
++ // Set the timer so after a mSec or two settling delay it will
++ // take the first ADC reading.
++ //
++ Set_Timer2_uSec( EP93XX_TS_PER_POINT_DELAY_USEC );
++
++ //
++ // Note that we are in sw scanning mode not hw scanning mode.
++ //
++ gScanningMode = TS_MODE_SOFT_SCAN;
++
++}
++
++static void Set_Timer2_uSec( unsigned int uiDelay_uSec )
++{
++ unsigned int uiClockTicks;
++
++ /*
++ * Stop timer 2
++ */
++ outl( 0, TIMER2CONTROL );
++
++ uiClockTicks = ((uiDelay_uSec * 508) + 999) / 1000;
++ outl( uiClockTicks, TIMER2LOAD );
++ outl( uiClockTicks, TIMER2VALUE );
++
++ /*
++ * Set up Timer 2 for 508 kHz clock and periodic mode.
++ */
++ outl( 0xC8, TIMER2CONTROL );
++
++}
++
++static void Stop_Timer2(void)
++{
++ outl( 0, TIMER2CONTROL );
++}
++
++/*
++ * Initialization and exit routines
++ */
++int __init ep93xx_ts_init(void)
++{
++ int retval;
++
++ //printk("ep93xx_ts_init\n");
++
++ // printk("request Touchscreen interrupt.\n");
++ retval = request_irq( IRQ_EP93XX_TOUCH, ep93xx_ts_isr, IRQF_DISABLED, "ep93xx_ts", 0);
++ if( retval )
++ {
++ printk(KERN_WARNING "ep93xx_ts: failed to get touchscreen IRQ\n");
++ return retval;
++ }
++
++ // printk("Request Timer interrupt.\n");
++ retval = request_irq( IRQ_EP93XX_TIMER2, ep93xx_timer2_isr,
++ IRQF_DISABLED, "ep93xx_timer2", 0);
++ if( retval )
++ {
++ printk(KERN_WARNING "ep93xx_ts: failed to get timer2 IRQ\n");
++ return retval;
++ }
++
++ // printk("Register Touchscreen Driver\n");
++ misc_register(&ep93xx_ts_miscdev);
++
++ sTouch.state = TS_STATE_STOPPED;
++ gScanningMode = TS_MODE_UN_INITIALIZED;
++
++ printk(KERN_NOTICE "ep93xx touchscreen driver configured for 4-wire operation\n");
++
++ return 0;
++}
++void __exit
++ep93xx_ts_exit(void)
++{
++ DPRINTK("ep93xx_ts_exit\n");
++
++ Stop_Timer2();
++
++ free_irq(IRQ_EP93XX_TOUCH, 0);
++ free_irq(IRQ_EP93XX_TIMER2, 0);
++
++ misc_deregister(&ep93xx_ts_miscdev);
++}
++
++module_init(ep93xx_ts_init);
++module_exit(ep93xx_ts_exit);
++
++MODULE_DESCRIPTION("Cirrus EP93xx touchscreen driver");
++MODULE_SUPPORTED_DEVICE("touchscreen/ep93xx");
+--- /dev/null
++++ linux-2.6.32/drivers/input/touchscreen/ep93xx_ts.h
+@@ -0,0 +1,53 @@
++/*
++ * ep93xx_ts.h
++ *
++ * The contents of this file are subject to the Mozilla Public License
++ * Version 1.1 (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 David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use
++ * your version of this file under the MPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the MPL or the GPL.
++ */
++
++#ifndef _LINUX_EP93XX_TS_H
++#define _LINUX_EP93XX_TS_H
++
++/*touchscreen register defines*/
++#define SYSCON_KTDIV EP93XX_SYSCON_KEY_TOUCH_CLOCK_DIV
++#define SYSCON_SWLOCK EP93XX_SYSCON_SWLOCK
++#define TSSetup EP93XX_TOUCHSCREEN_TSSetup
++#define TSXYMaxMin EP93XX_TOUCHSCREEN_TSXYMaxMin
++#define TSXYResult EP93XX_TOUCHSCREEN_TSDischarge
++#define TSDischarge EP93XX_TOUCHSCREEN_TSDischarge
++#define TSXSample EP93XX_TOUCHSCREEN_TSXSample
++#define TSYSample EP93XX_TOUCHSCREEN_TSYSample
++#define TSDirect EP93XX_TOUCHSCREEN_TSDirect
++#define TSDetect EP93XX_TOUCHSCREEN_TSDetect
++#define TSSWLock EP93XX_TOUCHSCREEN_TSSWLock
++#define TSSetup2 EP93XX_TOUCHSCREEN_TSSetup2
++
++
++//#define SYSCON_DEVCFG EP93XX_SYSCON_DEVICE_CONFIG
++#define TIMER2CONTROL EP93XX_TIMER2_CONTROL
++#define TIMER2LOAD EP93XX_TIMER2_LOAD
++#define TIMER2VALUE EP93XX_TIMER2_VALUE
++#define TIMER2CLEAR EP93XX_TIMER2_CLEAR
++#endif
diff --git a/recipes/linux/linux-2.6.32/ep93xx/series b/recipes/linux/linux-2.6.32/ep93xx/series
new file mode 100644
index 0000000000..0ae77856ca
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/series
@@ -0,0 +1,7 @@
+edb9301-fix-machine-id.patch -p1
+simone-board-def.patch -p1
+ep93xx-regs.patch -p1
+ep93xx-i2c.patch -p1
+ep93xx-touchscreen.patch
+ep93xx-spi.patch -p1
+ep93xx-cpuinfo.patch -p1
diff --git a/recipes/linux/linux-2.6.32/ep93xx/simone-board-def.patch b/recipes/linux/linux-2.6.32/ep93xx/simone-board-def.patch
new file mode 100644
index 0000000000..463a73b117
--- /dev/null
+++ b/recipes/linux/linux-2.6.32/ep93xx/simone-board-def.patch
@@ -0,0 +1,1653 @@
+---
+ arch/arm/configs/simone_defconfig | 1380 +++++++++++++++++++++++++++++++++++++
+ arch/arm/mach-ep93xx/Kconfig | 7
+ arch/arm/mach-ep93xx/Makefile | 1
+ arch/arm/mach-ep93xx/Makefile.boot | 2
+ arch/arm/mach-ep93xx/simone.c | 217 +++++
+ 5 files changed, 1607 insertions(+)
+
+--- /dev/null
++++ linux-2.6.32/arch/arm/configs/simone_defconfig
+@@ -0,0 +1,1380 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.24.7
++# Tue May 12 17:49:25 2009
++#
++CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++# CONFIG_GENERIC_GPIO is not set
++# CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
++CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=16
++# CONFIG_CGROUPS is not set
++CONFIG_FAIR_GROUP_SCHED=y
++CONFIG_FAIR_USER_SCHED=y
++# CONFIG_FAIR_CGROUP_SCHED is not set
++CONFIG_SYSFS_DEPRECATED=y
++# CONFIG_RELAY is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++CONFIG_EMBEDDED=y
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++# CONFIG_IOSCHED_AS is not set
++CONFIG_IOSCHED_DEADLINE=y
++# CONFIG_IOSCHED_CFQ is not set
++# CONFIG_DEFAULT_AS is not set
++CONFIG_DEFAULT_DEADLINE=y
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="deadline"
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++# CONFIG_ARCH_AT91 is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++CONFIG_ARCH_EP93XX=y
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++
++#
++# Cirrus EP93xx Implementation Options
++#
++CONFIG_CRUNCH=y
++
++#
++# EP93xx Platforms
++#
++# CONFIG_MACH_ADSSPHERE is not set
++# CONFIG_MACH_EDB9302 is not set
++# CONFIG_MACH_EDB9302A is not set
++# CONFIG_MACH_EDB9307 is not set
++# CONFIG_MACH_EDB9312 is not set
++# CONFIG_MACH_EDB9315 is not set
++# CONFIG_MACH_EDB9315A is not set
++# CONFIG_MACH_GESBC9312 is not set
++# CONFIG_MACH_MICRO9 is not set
++# CONFIG_MACH_MICRO9H is not set
++# CONFIG_MACH_MICRO9M is not set
++# CONFIG_MACH_MICRO9L is not set
++CONFIG_MACH_SIM_ONE=y
++# CONFIG_MACH_TS72XX is not set
++
++#
++# Boot options
++#
++
++#
++# Power management
++#
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM920T=y
++CONFIG_CPU_32v4T=y
++CONFIG_CPU_ABRT_EV4T=y
++CONFIG_CPU_CACHE_V4WT=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_COPY_V4WB=y
++CONFIG_CPU_TLB_V4WBI=y
++CONFIG_CPU_CP15=y
++CONFIG_CPU_CP15_MMU=y
++
++#
++# Processor Features
++#
++CONFIG_ARM_THUMB=y
++# CONFIG_CPU_ICACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_OUTER_CACHE is not set
++CONFIG_ARM_VIC=y
++
++#
++# Bus support
++#
++CONFIG_ARM_AMBA=y
++# CONFIG_PCI_SYSCALL is not set
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_TICK_ONESHOT is not set
++CONFIG_PREEMPT=y
++# CONFIG_NO_IDLE_HZ is not set
++CONFIG_HZ=100
++CONFIG_AEABI=y
++CONFIG_OABI_COMPAT=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/ram"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++CONFIG_FPE_NWFPE_XP=y
++# CONFIG_FPE_FASTFPE is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++CONFIG_SUSPEND_UP_POSSIBLE=y
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++CONFIG_NET_KEY=y
++# CONFIG_NET_KEY_MIGRATE is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++CONFIG_IP_PNP_BOOTP=y
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++CONFIG_SYN_COOKIES=y
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_XFRM_MODE_TRANSPORT=y
++CONFIG_INET_XFRM_MODE_TUNNEL=y
++CONFIG_INET_XFRM_MODE_BEET=y
++# CONFIG_INET_LRO is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++CONFIG_IPV6=y
++# CONFIG_IPV6_PRIVACY is not set
++# CONFIG_IPV6_ROUTER_PREF is not set
++# CONFIG_IPV6_OPTIMISTIC_DAD is not set
++# CONFIG_INET6_AH is not set
++# CONFIG_INET6_ESP is not set
++# CONFIG_INET6_IPCOMP is not set
++# CONFIG_IPV6_MIP6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET6_XFRM_MODE_BEET is not set
++# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
++# CONFIG_IPV6_SIT is not set
++# CONFIG_IPV6_TUNNEL is not set
++# CONFIG_IPV6_MULTIPLE_TABLES is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_SCHED is not set
++CONFIG_NET_SCH_FIFO=y
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++
++#
++# Wireless
++#
++CONFIG_CFG80211=y
++CONFIG_NL80211=y
++CONFIG_WIRELESS_EXT=y
++CONFIG_MAC80211=m
++CONFIG_MAC80211_RCSIMPLE=y
++# CONFIG_MAC80211_DEBUG is not set
++CONFIG_IEEE80211=m
++# CONFIG_IEEE80211_DEBUG is not set
++CONFIG_IEEE80211_CRYPT_WEP=m
++CONFIG_IEEE80211_CRYPT_CCMP=m
++CONFIG_IEEE80211_CRYPT_TKIP=m
++# CONFIG_IEEE80211_SOFTMAC is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++# CONFIG_FW_LOADER is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_MTD_CMDLINE_PARTS is not set
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_MTD_OOPS is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=y
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_GEN_PROBE=y
++CONFIG_MTD_CFI_ADV_OPTIONS=y
++CONFIG_MTD_CFI_NOSWAP=y
++# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
++# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
++# CONFIG_MTD_CFI_GEOMETRY is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_OTP is not set
++CONFIG_MTD_CFI_INTELEXT=y
++CONFIG_MTD_CFI_AMDSTD=y
++CONFIG_MTD_CFI_STAA=y
++CONFIG_MTD_CFI_UTIL=y
++CONFIG_MTD_RAM=y
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++CONFIG_MTD_PHYSMAP=y
++CONFIG_MTD_PHYSMAP_START=0x0
++CONFIG_MTD_PHYSMAP_LEN=0x0
++CONFIG_MTD_PHYSMAP_BANKWIDTH=1
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_DATAFLASH is not set
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++# CONFIG_MTD_NAND is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++CONFIG_BLK_DEV_NBD=y
++# CONFIG_BLK_DEV_UB is not set
++# CONFIG_BLK_DEV_RAM is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++# CONFIG_MISC_DEVICES is not set
++CONFIG_EEPROM_93CX6=m
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++# CONFIG_SCSI_PROC_FS is not set
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++# CONFIG_SCSI_SRP_ATTRS is not set
++CONFIG_SCSI_LOWLEVEL=y
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++# CONFIG_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_EP93XX_ETH=y
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_B44 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++CONFIG_WLAN_80211=y
++# CONFIG_LIBERTAS is not set
++# CONFIG_USB_ZD1201 is not set
++CONFIG_RTL8187=m
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++# CONFIG_RT2X00 is not set
++
++#
++# USB Network Adapters
++#
++CONFIG_USB_CATC=y
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++CONFIG_USB_RTL8150=y
++# CONFIG_USB_USBNET is not set
++# CONFIG_WAN is not set
++CONFIG_PPP=m
++# CONFIG_PPP_MULTILINK is not set
++# CONFIG_PPP_FILTER is not set
++# CONFIG_PPP_ASYNC is not set
++CONFIG_PPP_SYNC_TTY=m
++# CONFIG_PPP_DEFLATE is not set
++CONFIG_PPP_BSDCOMP=m
++# CONFIG_PPP_MPPE is not set
++CONFIG_PPPOE=m
++# CONFIG_PPPOL2TP is not set
++# CONFIG_SLIP is not set
++CONFIG_SLHC=m
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++CONFIG_INPUT_MOUSEDEV_PSAUX=y
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++CONFIG_KEYBOARD_ATKBD=y
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_STOWAWAY is not set
++CONFIG_INPUT_MOUSE=y
++CONFIG_MOUSE_PS2=y
++CONFIG_MOUSE_PS2_ALPS=y
++# CONFIG_MOUSE_PS2_LOGIPS2PP is not set
++# CONFIG_MOUSE_PS2_SYNAPTICS is not set
++# CONFIG_MOUSE_PS2_LIFEBOOK is not set
++# CONFIG_MOUSE_PS2_TRACKPOINT is not set
++# CONFIG_MOUSE_PS2_TOUCHKIT is not set
++# CONFIG_MOUSE_SERIAL is not set
++# CONFIG_MOUSE_APPLETOUCH is not set
++# CONFIG_MOUSE_VSXXXAA is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++# CONFIG_TOUCHSCREEN_ADS7846 is not set
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_MK712 is not set
++# CONFIG_TOUCHSCREEN_PENMOUNT is not set
++# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
++# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
++# CONFIG_TOUCHSCREEN_UCB1400 is not set
++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++CONFIG_TOUCHSCREEN_EP93XX=y
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_SERPORT is not set
++# CONFIG_SERIO_AMBAKMI is not set
++CONFIG_SERIO_LIBPS2=y
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_AMBA_PL010=y
++CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
++# CONFIG_SERIAL_AMBA_PL011 is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_NVRAM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=y
++
++#
++# I2C Algorithms
++#
++CONFIG_I2C_ALGOBIT=y
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++CONFIG_I2C_EP93XX=y
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_SIMTEC is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++CONFIG_SENSORS_DS1337=y
++# CONFIG_SENSORS_DS1374 is not set
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_EEPROM is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_SENSORS_TSL2550 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_BITBANG=y
++CONFIG_SPI_EP93XX=y
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++CONFIG_WATCHDOG=y
++# CONFIG_WATCHDOG_NOWAYOUT is not set
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++CONFIG_EP93XX_WATCHDOG=y
++
++#
++# USB-based Watchdog Cards
++#
++# CONFIG_USBPCWATCHDOG is not set
++
++#
++# Sonics Silicon Backplane
++#
++CONFIG_SSB_POSSIBLE=y
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++# CONFIG_VGASTATE is not set
++CONFIG_VIDEO_OUTPUT_CONTROL=y
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
++# CONFIG_FB_SYS_FILLRECT is not set
++# CONFIG_FB_SYS_COPYAREA is not set
++# CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_SYS_FOPS is not set
++CONFIG_FB_DEFERRED_IO=y
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++CONFIG_FB_EP93XX=y
++# CONFIG_FB_EP93XX_MONO is not set
++# CONFIG_FB_ARMCLCD is not set
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
++CONFIG_FONTS=y
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_7x14 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++# CONFIG_FONT_MINI_4x6 is not set
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_10x18 is not set
++CONFIG_LOGO=y
++CONFIG_LOGO_LINUX_MONO=y
++CONFIG_LOGO_LINUX_VGA16=y
++CONFIG_LOGO_LINUX_CLUT224=y
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=y
++CONFIG_SND_TIMER=y
++CONFIG_SND_PCM=y
++# CONFIG_SND_SEQUENCER is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=y
++CONFIG_SND_PCM_OSS=y
++CONFIG_SND_PCM_OSS_PLUGINS=y
++# CONFIG_SND_DYNAMIC_MINORS is not set
++# CONFIG_SND_SUPPORT_OLD_API is not set
++# CONFIG_SND_VERBOSE_PROCFS is not set
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++CONFIG_SND_AC97_CODEC=y
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++
++#
++# ALSA ARM devices
++#
++CONFIG_SND_EP93XX_AC97=y
++CONFIG_SND_EP93XX_PCM=y
++# CONFIG_SND_ARMAACI is not set
++
++#
++# SPI devices
++#
++
++#
++# USB devices
++#
++# CONFIG_SND_USB_AUDIO is not set
++# CONFIG_SND_USB_CAIAQ is not set
++
++#
++# System on Chip audio support
++#
++# CONFIG_SND_SOC is not set
++
++#
++# SoC Audio support for SuperH
++#
++
++#
++# Open Sound System
++#
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=y
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++# CONFIG_HIDRAW is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_USB_HIDINPUT_POWERBOOK is not set
++# CONFIG_HID_FF is not set
++# CONFIG_USB_HIDDEV is not set
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++CONFIG_USB_DEVICE_CLASS=y
++CONFIG_USB_DYNAMIC_MINORS=y
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++
++#
++# USB Device Class drivers
++#
++CONFIG_USB_ACM=m
++CONFIG_USB_PRINTER=m
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_MON is not set
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++CONFIG_USB_SERIAL=y
++CONFIG_USB_SERIAL_CONSOLE=y
++# CONFIG_USB_SERIAL_GENERIC is not set
++# CONFIG_USB_SERIAL_AIRCABLE is not set
++# CONFIG_USB_SERIAL_AIRPRIME is not set
++# CONFIG_USB_SERIAL_ARK3116 is not set
++# CONFIG_USB_SERIAL_BELKIN is not set
++# CONFIG_USB_SERIAL_CH341 is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
++# CONFIG_USB_SERIAL_CP2101 is not set
++# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
++# CONFIG_USB_SERIAL_EMPEG is not set
++# CONFIG_USB_SERIAL_FTDI_SIO is not set
++# CONFIG_USB_SERIAL_FUNSOFT is not set
++# CONFIG_USB_SERIAL_VISOR is not set
++# CONFIG_USB_SERIAL_IPAQ is not set
++# CONFIG_USB_SERIAL_IR is not set
++# CONFIG_USB_SERIAL_EDGEPORT is not set
++# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
++# CONFIG_USB_SERIAL_GARMIN is not set
++# CONFIG_USB_SERIAL_IPW is not set
++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++# CONFIG_USB_SERIAL_KLSI is not set
++# CONFIG_USB_SERIAL_KOBIL_SCT is not set
++# CONFIG_USB_SERIAL_MCT_U232 is not set
++# CONFIG_USB_SERIAL_MOS7720 is not set
++# CONFIG_USB_SERIAL_MOS7840 is not set
++# CONFIG_USB_SERIAL_NAVMAN is not set
++CONFIG_USB_SERIAL_PL2303=y
++# CONFIG_USB_SERIAL_OTI6858 is not set
++# CONFIG_USB_SERIAL_HP4X is not set
++# CONFIG_USB_SERIAL_SAFE is not set
++# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
++# CONFIG_USB_SERIAL_TI is not set
++# CONFIG_USB_SERIAL_CYBERJACK is not set
++# CONFIG_USB_SERIAL_XIRCOM is not set
++# CONFIG_USB_SERIAL_OPTION is not set
++# CONFIG_USB_SERIAL_OMNINET is not set
++# CONFIG_USB_SERIAL_DEBUG is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++# CONFIG_USB_GADGET is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++# CONFIG_SDIO_UART is not set
++
++#
++# MMC/SD Host Controller Drivers
++#
++# CONFIG_MMC_ARMMMCI is not set
++CONFIG_MMC_SPI=y
++#
++# SimOne LCD support
++#
++CONFIG_LCD_LINUX=m
++CONFIG_LCD_HD44780=m
++#
++# CONFIG_NEW_LEDS is not set
++CONFIG_RTC_LIB=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_HCTOSYS=y
++CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
++# CONFIG_RTC_DEBUG is not set
++
++#
++# RTC interfaces
++#
++CONFIG_RTC_INTF_SYSFS=y
++CONFIG_RTC_INTF_PROC=y
++CONFIG_RTC_INTF_DEV=y
++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
++# CONFIG_RTC_DRV_TEST is not set
++
++#
++# I2C RTC drivers
++#
++CONFIG_RTC_DRV_DS1307=y
++# CONFIG_RTC_DRV_DS1374 is not set
++# CONFIG_RTC_DRV_DS1672 is not set
++# CONFIG_RTC_DRV_MAX6900 is not set
++# CONFIG_RTC_DRV_RS5C372 is not set
++# CONFIG_RTC_DRV_ISL1208 is not set
++# CONFIG_RTC_DRV_X1205 is not set
++# CONFIG_RTC_DRV_PCF8563 is not set
++# CONFIG_RTC_DRV_PCF8583 is not set
++# CONFIG_RTC_DRV_M41T80 is not set
++
++#
++# SPI RTC drivers
++#
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_STK17TA8 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_M48T59 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_EP93XX=y
++CONFIG_RTC_DRV_EP93XX_DS1337=y
++# CONFIG_RTC_DRV_PL031 is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++CONFIG_EXT2_FS_XATTR=y
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++# CONFIG_EXT3_FS_XATTR is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++CONFIG_FS_POSIX_ACL=y
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++CONFIG_ROMFS_FS=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++CONFIG_AUTOFS4_FS=y
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++CONFIG_ISO9660_FS=y
++CONFIG_JOLIET=y
++# CONFIG_ZISOFS is not set
++CONFIG_UDF_FS=y
++CONFIG_UDF_NLS=y
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++# CONFIG_JFFS2_LZO is not set
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_BIND34 is not set
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++# CONFIG_KARMA_PARTITION is not set
++# CONFIG_EFI_PARTITION is not set
++# CONFIG_SYSV68_PARTITION is not set
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++# CONFIG_DLM is not set
++# CONFIG_INSTRUMENTATION is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++# CONFIG_ENABLE_WARN_DEPRECATED is not set
++# CONFIG_ENABLE_MUST_CHECK is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++# CONFIG_DEBUG_KERNEL is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++CONFIG_FRAME_POINTER=y
++# CONFIG_SAMPLES is not set
++CONFIG_DEBUG_USER=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_MANAGER=y
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=y
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_ECB=m
++CONFIG_CRYPTO_CBC=m
++CONFIG_CRYPTO_PCBC=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_XTS is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_DES=y
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++CONFIG_CRYPTO_MICHAEL_MIC=y
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_TEST is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++# CONFIG_CRYPTO_HW is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC_ITU_T=y
++CONFIG_CRC32=y
++CONFIG_CRC7=y
++CONFIG_LIBCRC32C=y
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
+--- linux-2.6.32.orig/arch/arm/mach-ep93xx/Kconfig
++++ linux-2.6.32/arch/arm/mach-ep93xx/Kconfig
+@@ -166,10 +166,17 @@ config MACH_TS72XX
+ depends on EP93XX_SDCE3_SYNC_PHYS_OFFSET
+ help
+ Say 'Y' here if you want your kernel to support the
+ Technologic Systems TS-72xx board.
+
++config MACH_SIM_ONE
++ bool "Support SIM.ONE board "
++ depends on EP93XX_SDCE0_PHYS_OFFSET
++ help
++ Say 'Y' here if you want your kernel to support the
++ Simplemachines SIM.ONE board.
++
+ choice
+ prompt "Select a UART for early kernel messages"
+
+ config EP93XX_EARLY_UART1
+ bool "UART1"
+--- linux-2.6.32.orig/arch/arm/mach-ep93xx/Makefile
++++ linux-2.6.32/arch/arm/mach-ep93xx/Makefile
+@@ -8,6 +8,7 @@ obj- :=
+
+ obj-$(CONFIG_MACH_ADSSPHERE) += adssphere.o
+ obj-$(CONFIG_MACH_EDB93XX) += edb93xx.o
+ obj-$(CONFIG_MACH_GESBC9312) += gesbc9312.o
+ obj-$(CONFIG_MACH_MICRO9) += micro9.o
++obj-$(CONFIG_MACH_SIM_ONE) += simone.o
+ obj-$(CONFIG_MACH_TS72XX) += ts72xx.o
+--- linux-2.6.32.orig/arch/arm/mach-ep93xx/Makefile.boot
++++ linux-2.6.32/arch/arm/mach-ep93xx/Makefile.boot
+@@ -1,7 +1,9 @@
+ zreladdr-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET) := 0x00008000
+ params_phys-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET) := 0x00000100
++ zreladdr-$(CONFIG_MACH_SIM_ONE) := 0xc0008000
++params_phys-$(CONFIG_MACH_SIM_ONE) := 0xc0000100
+
+ zreladdr-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET) := 0xc0008000
+ params_phys-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET) := 0xc0000100
+
+ zreladdr-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET) := 0xd0008000
+--- /dev/null
++++ linux-2.6.32/arch/arm/mach-ep93xx/simone.c
+@@ -0,0 +1,217 @@
++/*
++ * arch/arm/mach-ep93xx/simone.c
++ * Simplemachines SIM.ONE support.
++ *
++ * Copyright (C) 2009 Simplemachines
++ * MMC support by Peter Ivanov <ivanovp@gmail.com>, 2007
++ *
++ * 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 of the License, or (at
++ * your option) any later version.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/mtd/physmap.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/mmc_spi.h>
++#include <linux/mmc/host.h>
++#include <linux/jiffies.h>
++#include <linux/irq.h>
++
++#include <asm/io.h>
++#include <mach/hardware.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/gpio.h>
++
++static struct physmap_flash_data simone_flash_data = {
++ .width = 2,
++};
++
++static struct resource simone_flash_resource = {
++ .start = 0x60000000,
++ .end = 0x60000000+ SZ_8M - 1,
++ .flags = IORESOURCE_MEM,
++};
++
++static struct platform_device simone_flash = {
++ .name = "physmap-flash",
++ .id = 0,
++ .dev = {
++ .platform_data = &simone_flash_data,
++ },
++ .num_resources = 1,
++ .resource = &simone_flash_resource,
++};
++
++
++static struct resource ep93xx_ac97_resources[] = {
++ [0] = {
++ .start = EP93XX_AC97_PHY_BASE,
++ .end = EP93XX_AC97_PHY_BASE + 0x6C,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = NO_IRQ,
++ .end = NO_IRQ,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static u64 ep93xx_ac97_dma_mask = 0xffffffffUL;
++
++static struct platform_device ep93xx_ac97_device = {
++ .name = "ep93xx-ac97",
++ .id = 0,
++ .num_resources = 2,
++ .resource = ep93xx_ac97_resources,
++ .dev = {
++ .dma_mask = &ep93xx_ac97_dma_mask,
++ .coherent_dma_mask = 0xffffffffUL,
++ },
++};
++
++
++#ifdef CONFIG_SPI
++static struct resource ep93xx_spi_resources[] = {
++ [0] = {
++ .start = EP93XX_SPI_BASE_PHYS,
++ .end = EP93XX_SPI_BASE_PHYS + 0x0fff,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = IRQ_EP93XX_SSP,
++ .end = IRQ_EP93XX_SSP,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device ep93xx_spi_device = {
++ .name = "ep93xx-spi",
++ .id = 0,
++ .resource = ep93xx_spi_resources,
++ .num_resources = ARRAY_SIZE(ep93xx_spi_resources),
++};
++
++
++#define EP93XX_MMC_SPI_CARD_PRESENT EP93XX_GPIO_LINE_A(0)
++
++/*
++ * Initializes SPI system to communicate with MMC/SD card
++ */
++int ep93xx_mmc_spi_init (struct device *pdev, irqreturn_t (*card_det_irq_handler)(int, void *),
++ void *mmc)
++{
++ int rv;
++
++ rv = gpio_request(EP93XX_MMC_SPI_CARD_PRESENT, "ep93xx-mmc-spi");
++ if (rv) {
++ dev_info(pdev, "failed to request MMC/SD gpio pin\n");
++ return rv;
++ }
++
++ gpio_direction_input (EP93XX_MMC_SPI_CARD_PRESENT);
++
++ if ((rv = request_irq (gpio_to_irq( EP93XX_MMC_SPI_CARD_PRESENT),
++ card_det_irq_handler,
++ IRQF_DISABLED | IRQ_TYPE_EDGE_FALLING, /* flags */
++ "ep93xx-mmc-spi", /* devname */
++ mmc /* void *devid */
++ )) == 0)
++ {
++ dev_info (pdev, "MMC/SD card detection IRQ %i assigned.\n",
++ gpio_to_irq(EP93XX_MMC_SPI_CARD_PRESENT));
++ }
++ else
++ {
++ dev_err (pdev, "Cannot assign MMC/SD card detection IRQ (%i)!\n",
++ gpio_to_irq(EP93XX_MMC_SPI_CARD_PRESENT));
++ return rv;
++ }
++ return 0;
++}
++
++void ep93xx_mmc_spi_exit (struct device *pdev, void *mmc)
++{
++ free_irq (EP93XX_MMC_SPI_CARD_PRESENT, mmc);
++}
++
++static struct mmc_spi_platform_data ep93xx_spi_pdata = {
++ .init = &ep93xx_mmc_spi_init,
++ .exit = &ep93xx_mmc_spi_exit,
++ .get_ro = NULL,
++ .detect_delay = 500, /* card detection delay in msec */
++ .ocr_mask = MMC_VDD_33_34,
++};
++
++static struct spi_board_info ep93xx_spi_board_info[] __initdata = {
++ {
++ .modalias = "mmc_spi",
++ .max_speed_hz = 7.4E6, /* max spi clock (SCK) speed in HZ */
++ .bus_num = 0,
++ .chip_select = 0,
++ .platform_data = (void*) &ep93xx_spi_pdata,
++ .controller_data = NULL,
++ .mode = SPI_MODE_0,
++ }
++};
++#endif
++static struct ep93xx_eth_data ep93xx_eth_data = {
++ .dev_addr = { 0x00, 0xba, 0xd0, 0x0b, 0xad, 0x00 },
++};
++
++static struct resource ep93xx_eth_resource[] = {
++ {
++ .start = EP93XX_ETHERNET_PHYS_BASE,
++ .end = EP93XX_ETHERNET_PHYS_BASE + 0xffff,
++ .flags = IORESOURCE_MEM,
++ }, {
++ .start = IRQ_EP93XX_ETHERNET,
++ .end = IRQ_EP93XX_ETHERNET,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++static struct platform_device ep93xx_eth_device = {
++ .name = "ep93xx-eth",
++ .id = -1,
++ .dev = {
++ .platform_data = &ep93xx_eth_data,
++ },
++ .num_resources = ARRAY_SIZE(ep93xx_eth_resource),
++ .resource = ep93xx_eth_resource,
++};
++
++static void __init simone_init_machine(void)
++{
++ ep93xx_init_devices();
++ /* Switch off the LCD backlight*/
++ gpio_request(EP93XX_GPIO_LINE_B(5), "lcd");
++ gpio_direction_output (EP93XX_GPIO_LINE_B(5), 0);
++ platform_device_register(&simone_flash);
++ platform_device_register(&ep93xx_ac97_device);
++ platform_device_register(&ep93xx_eth_device);
++#if defined(CONFIG_SPI_EP93XX) || defined(CONFIG_SPI_EP93XX_MODULE)
++ dev_set_name(&ep93xx_spi_device.dev, "apb:spi");
++ platform_device_register(&ep93xx_spi_device);
++ spi_register_board_info(ep93xx_spi_board_info,ARRAY_SIZE(ep93xx_spi_board_info));
++#endif
++}
++
++MACHINE_START(SIM_ONE, "Simplemachine SimONE Board")
++ /* Maintainer: Nuccio Raciti Simplemachine <nuccio.raciti@gmail.com>*/
++ .phys_io = EP93XX_APB_PHYS_BASE,
++ .io_pg_offst = ((EP93XX_APB_VIRT_BASE) >> 18) & 0xfffc,
++ .boot_params = 0x00000100,
++ .map_io = ep93xx_map_io,
++ .init_irq = ep93xx_init_irq,
++ .timer = &ep93xx_timer,
++ .init_machine = simone_init_machine,
++MACHINE_END
diff --git a/recipes/linux/linux-bug_2.6.27.2.bb b/recipes/linux/linux-bug_2.6.27.2.bb
index bb4d11fb3a..85ed0a9bb7 100644
--- a/recipes/linux/linux-bug_2.6.27.2.bb
+++ b/recipes/linux/linux-bug_2.6.27.2.bb
@@ -2,12 +2,12 @@ DESCRIPTION = "Linux kernel for bug"
PV_append = "+svnr${SRCREV}"
KV = "2.6.27.2"
-PR = "r30"
+PR = "r31"
COMPATIBLE_MACHINE = "bug"
SVN_PRJ = "bug-linux-${KV}"
-SRCREV = "10371"
+SRCREV = "10550"
SRC_URI = "svn://svn.buglabs.net/bug/branches/R1.4/qa;module=${SVN_PRJ};proto=svn \
file://defconfig \
@@ -46,5 +46,6 @@ module_autoload_bugpm = "bugpm"
module_autoload_bugpm_apm = "bugpm_apm"
module_autoload_rtc-isl12026 = "rtc-isl12026"
module_autoload_bug_v4l2_capture = "bug_v4l2_capture"
+module_autoload_libertas_sdio = "libertas_sdio"
# bmi_lcd_core loaded to ensure xserver device nodes are created on boot.
module_autoload_bmi_lcd_core = "bmi_lcd_core"
diff --git a/recipes/linux/linux-davinci_git.bb b/recipes/linux/linux-davinci_git.bb
index f99f8ae937..05b8eba45e 100644
--- a/recipes/linux/linux-davinci_git.bb
+++ b/recipes/linux/linux-davinci_git.bb
@@ -8,8 +8,7 @@ COMPATIBLE_MACHINE = "(dm355-evm|dm365-evm|dm6446-evm|dm6467-evm|dm6467t-evm|da8
DEFAULT_PREFERENCE = "1"
BRANCH = "master"
-
-# DAVINCI
+SRC_URI = "file://defconfig "
# dm355-evm/dm365-evm/dm6446-evm/dm6467-evm/dm6467t-evm Davinci PSP.03.01.00.28 (Phase 3 Build r28)
SRCREV_dm355-evm = "7b2683fd0168df1576fcea947ef9f63e905de807"
@@ -25,38 +24,34 @@ PV_dm6446-evm = "2.6.31+2.6.32-rc2-${PR}+gitr${SRCREV}"
PV_dm6467-evm = "2.6.31+2.6.32-rc2-${PR}+gitr${SRCREV}"
PV_dm6467t-evm = "2.6.31+2.6.32-rc2-${PR}+gitr${SRCREV}"
-SRC_URI_dm355-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
-SRC_URI_dm365-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
-SRC_URI_dm6446-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
-SRC_URI_dm6467-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
-SRC_URI_dm6467t-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
+BRANCH_dm355-evm = "r28"
+BRANCH_dm365-evm = "r28"
+BRANCH_dm6446-evm = "r28"
+BRANCH_dm6467-evm = "r28"
+BRANCH_dm6467t-evm = "r28"
+
+SRC_URI_append_dm355-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_dm365-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_dm6446-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_dm6467-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_dm6467t-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
# OMAPL
# da830-omapl137-evm/da850-omapl138-evm/hawkboard OMAPL PSP.3.20.00.07 (Beta)
-SRCREV_da830-omapl137-evm = "b60234a5b0ee985912ecb59d3e689c1ed4baa46c"
-SRCREV_da850-omapl138-evm = "b60234a5b0ee985912ecb59d3e689c1ed4baa46c"
-SRCREV_hawkboard = "b60234a5b0ee985912ecb59d3e689c1ed4baa46c"
+SRCREV_da830-omapl137-evm = "b306b47248ef6b4e5927a6baa2849ff434c12ddb"
+SRCREV_da850-omapl138-evm = "b306b47248ef6b4e5927a6baa2849ff434c12ddb"
+SRCREV_hawkboard = "b306b47248ef6b4e5927a6baa2849ff434c12ddb"
# The main PR is now using MACHINE_KERNEL_PR, for davinci see conf/machine/include/davinci.inc
PV_da830-omapl137-evm = "2.6.31+2.6.32-rc6-${PR}+gitr${SRCREV}"
PV_da850-omapl138-evm = "2.6.31+2.6.32-rc6-${PR}+gitr${SRCREV}"
PV_hawkboard = "2.6.31+2.6.32-rc6-${PR}+gitr${SRCREV}"
-SRC_URI_da830-omapl137-evm = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH} \
- file://defconfig"
-
-SRC_URI_da850-omapl138-evm = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH} \
- file://defconfig"
-
-SRC_URI_hawkboard = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH} \
- file://patch_hawk.diff;patch=1 \
- file://defconfig"
+SRC_URI_append_da830-omapl137-evm = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_da850-omapl138-evm = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_hawkboard = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH} \
+ file://patch_hawk.diff;patch=1"
S = "${WORKDIR}/git"
diff --git a/recipes/linux/linux-handhelds-2.6_cvs.bb b/recipes/linux/linux-handhelds-2.6_cvs.bb
index 89cb68548f..93e884e994 100644
--- a/recipes/linux/linux-handhelds-2.6_cvs.bb
+++ b/recipes/linux/linux-handhelds-2.6_cvs.bb
@@ -2,7 +2,7 @@ SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
LICENSE = "GPL"
PV = "${K_MAJOR}.${K_MINOR}.${K_MICRO}-hh${HHV}+cvs${SRCDATE}"
-PR = "r0"
+PR = "r1"
DEFAULT_PREFERENCE = "-1"
@@ -15,7 +15,11 @@ K_MINOR = "6"
K_MICRO = "21"
HHV = "20"
-SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26 \
+SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26 \
+ file://linux-2.6.git-9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a.patch;patch=1 \
+ http://www.rpsys.net/openzaurus/patches/archive/export_atags-r0a.patch;patch=1 \
+ file://gcc4x-limits.patch;patch=1 \
+ file://0001-time-prevent-the-loop-in-timespec_add_ns-from-bei.patch;patch=1 \
file://defconfig"
require linux-handhelds-2.6.inc
diff --git a/recipes/linux/linux-omap-2.6.32/beagleboard/defconfig b/recipes/linux/linux-omap-2.6.32/beagleboard/defconfig
new file mode 100644
index 0000000000..c22fc99949
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/beagleboard/defconfig
@@ -0,0 +1,2899 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Wed Dec 9 16:04:50 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_OPROFILE_ARMV7=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+CONFIG_OPROFILE=y
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+CONFIG_SLOW_WORK=y
+# CONFIG_SLOW_WORK_DEBUG is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_U8500 is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+# CONFIG_ARCH_OMAP4 is not set
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
+# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
+CONFIG_OMAP_RESET_CLOCKS=y
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_MCBSP=y
+CONFIG_OMAP_MBOX_FWK=m
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+CONFIG_OMAP_LL_DEBUG_UART3=y
+# CONFIG_OMAP_LL_DEBUG_NONE is not set
+# CONFIG_OMAP_PM_NONE is not set
+CONFIG_OMAP_PM_NOOP=y
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+CONFIG_OMAP_PACKAGE_CBB=y
+
+#
+# OMAP Board Type
+#
+CONFIG_MACH_OMAP3_BEAGLE=y
+CONFIG_MACH_OMAP_LDP=y
+CONFIG_MACH_OVERO=y
+CONFIG_MACH_OMAP3EVM=y
+# CONFIG_MACH_OMAP3517EVM is not set
+CONFIG_MACH_OMAP3_PANDORA=y
+# CONFIG_MACH_OMAP3_TOUCHBOOK is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_NOKIA_RX51 is not set
+CONFIG_MACH_OMAP_ZOOM2=y
+# CONFIG_MACH_OMAP_ZOOM3 is not set
+# CONFIG_MACH_CM_T35 is not set
+CONFIG_MACH_IGEP0020=y
+# CONFIG_MACH_OMAP_3630SDP is not set
+# CONFIG_OMAP3_EMU is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_V7=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_THUMBEE=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_HAS_TLS_REG=y
+CONFIG_ARM_L1_CACHE_SHIFT=6
+# CONFIG_ARM_ERRATA_430973 is not set
+# CONFIG_ARM_ERRATA_458693 is not set
+# CONFIG_ARM_ERRATA_460075 is not set
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=128
+# CONFIG_THUMB2_KERNEL is not set
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_LEDS=y
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_VERBOSE is not set
+CONFIG_CAN_PM_TRACE=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_PM_RUNTIME=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=m
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_LRO=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+CONFIG_TCP_CONG_ADVANCED=y
+CONFIG_TCP_CONG_BIC=m
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_TCP_CONG_WESTWOOD=m
+CONFIG_TCP_CONG_HTCP=m
+CONFIG_TCP_CONG_HSTCP=m
+CONFIG_TCP_CONG_HYBLA=m
+CONFIG_TCP_CONG_VEGAS=m
+CONFIG_TCP_CONG_SCALABLE=m
+CONFIG_TCP_CONG_LP=m
+CONFIG_TCP_CONG_VENO=m
+CONFIG_TCP_CONG_YEAH=m
+CONFIG_TCP_CONG_ILLINOIS=m
+# CONFIG_DEFAULT_BIC is not set
+CONFIG_DEFAULT_CUBIC=y
+# CONFIG_DEFAULT_HTCP is not set
+# CONFIG_DEFAULT_VEGAS is not set
+# CONFIG_DEFAULT_WESTWOOD is not set
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_SIT_6RD is not set
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+CONFIG_IPV6_MROUTE=y
+# CONFIG_IPV6_PIMSM_V2 is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+# CONFIG_NF_CT_PROTO_SCTP is not set
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+# CONFIG_NETFILTER_TPROXY is not set
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_HL=m
+# CONFIG_NETFILTER_XT_TARGET_LED is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+# CONFIG_NETFILTER_XT_MATCH_OSF is not set
+CONFIG_IP_VS=m
+CONFIG_IP_VS_IPV6=y
+CONFIG_IP_VS_DEBUG=y
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_AH_ESP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_RAW=m
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_STP=m
+CONFIG_GARP=m
+CONFIG_BRIDGE=m
+# CONFIG_NET_DSA is not set
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+CONFIG_WAN_ROUTER=m
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_MULTIQ=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_DRR=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_FLOW=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_SCH_FIFO=y
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NET_DROP_MONITOR is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_CAN=m
+CONFIG_CAN_RAW=m
+CONFIG_CAN_BCM=m
+
+#
+# CAN Device Drivers
+#
+CONFIG_CAN_VCAN=m
+# CONFIG_CAN_DEV is not set
+# CONFIG_CAN_DEBUG_DEVICES is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+# CONFIG_ACT200L_DONGLE is not set
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_MCS_FIR=m
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=y
+CONFIG_BT_HCIBTSDIO=y
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=y
+CONFIG_BT_HCIBPA10X=y
+CONFIG_BT_HCIBFUSB=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_BT_MRVL is not set
+CONFIG_AF_RXRPC=m
+# CONFIG_AF_RXRPC_DEBUG is not set
+# CONFIG_RXKAD is not set
+CONFIG_FIB_RULES=y
+CONFIG_WIRELESS=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_WEXT_SPY=y
+CONFIG_WEXT_PRIV=y
+CONFIG_CFG80211=y
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
+CONFIG_CFG80211_WEXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=y
+CONFIG_LIB80211_CRYPT_WEP=y
+CONFIG_LIB80211_CRYPT_CCMP=y
+CONFIG_LIB80211_CRYPT_TKIP=y
+# CONFIG_LIB80211_DEBUG is not set
+CONFIG_MAC80211=y
+CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT="pid"
+# CONFIG_MAC80211_MESH is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+CONFIG_WIMAX=m
+CONFIG_WIMAX_DEBUG_LEVEL=8
+# CONFIG_RFKILL is not set
+CONFIG_NET_9P=m
+# CONFIG_NET_9P_DEBUG is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_OMAP2=y
+CONFIG_MTD_NAND_OMAP_PREFETCH=y
+# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+CONFIG_MTD_NAND_PLATFORM=y
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+CONFIG_EEPROM_93CX6=y
+# CONFIG_IWMC3200TOP is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=m
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID6_PQ=m
+# CONFIG_ASYNC_RAID6_TEST is not set
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+# CONFIG_DM_LOG_USERSPACE is not set
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+# CONFIG_DM_MULTIPATH_QL is not set
+# CONFIG_DM_MULTIPATH_ST is not set
+CONFIG_DM_DELAY=m
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_MACVLAN=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_VETH=m
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+CONFIG_ENC28J60=y
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+# CONFIG_ETHOC is not set
+CONFIG_SMC911X=y
+CONFIG_SMSC911X=y
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_AT76C50X_USB is not set
+CONFIG_USB_ZD1201=y
+CONFIG_USB_NET_RNDIS_WLAN=y
+CONFIG_RTL8187=y
+CONFIG_RTL8187_LEDS=y
+# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_ATH_COMMON is not set
+CONFIG_B43=y
+# CONFIG_B43_SDIO is not set
+CONFIG_B43_PHY_LP=y
+CONFIG_B43_LEDS=y
+CONFIG_B43_HWRNG=y
+# CONFIG_B43_DEBUG is not set
+# CONFIG_B43LEGACY is not set
+CONFIG_HOSTAP=y
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+# CONFIG_IWM is not set
+CONFIG_LIBERTAS=y
+CONFIG_LIBERTAS_USB=y
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_SPI is not set
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_P54_COMMON=y
+CONFIG_P54_USB=y
+# CONFIG_P54_SPI is not set
+CONFIG_P54_LEDS=y
+CONFIG_RT2X00=y
+CONFIG_RT2500USB=y
+CONFIG_RT73USB=y
+# CONFIG_RT2800USB is not set
+CONFIG_RT2X00_LIB_USB=y
+CONFIG_RT2X00_LIB=y
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+# CONFIG_WL12XX is not set
+CONFIG_ZD1211RW=y
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# WiMAX Wireless Broadband devices
+#
+# CONFIG_WIMAX_I2400M_USB is not set
+# CONFIG_WIMAX_I2400M_SDIO is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=y
+CONFIG_USB_KAWETH=y
+CONFIG_USB_PEGASUS=y
+CONFIG_USB_RTL8150=y
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_CDC_EEM is not set
+CONFIG_USB_NET_DM9601=y
+CONFIG_USB_NET_SMSC95XX=y
+CONFIG_USB_NET_GL620A=y
+CONFIG_USB_NET_NET1080=y
+CONFIG_USB_NET_PLUSB=y
+CONFIG_USB_NET_MCS7830=y
+CONFIG_USB_NET_RNDIS_HOST=y
+CONFIG_USB_NET_CDC_SUBSET=y
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=y
+# CONFIG_USB_NET_INT51X1 is not set
+# CONFIG_WAN is not set
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+# CONFIG_ATM_TCP is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_PPPOATM is not set
+CONFIG_PPPOL2TP=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL=y
+CONFIG_NETPOLL_TRAP=y
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=y
+CONFIG_INPUT_POLLDEV=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_TWL4030 is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
+# CONFIG_MOUSE_PS2_SENTELIC is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_MOUSE_SYNAPTICS_I2C is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_TWL4030_PWRBUTTON=y
+CONFIG_INPUT_UINPUT=y
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_OMAP24XX=y
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=y
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_TWL4030=y
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=m
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LM95241 is not set
+# CONFIG_SENSORS_MAX1111 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+# CONFIG_TWL4030_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=y
+CONFIG_SSB_SDIOHOST_POSSIBLE=y
+# CONFIG_SSB_SDIOHOST is not set
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_CORE=y
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+CONFIG_TWL4030_CORE=y
+CONFIG_TWL4030_POWER=y
+CONFIG_TWL4030_CODEC=y
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+CONFIG_REGULATOR_TWL4030=y
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
+CONFIG_MEDIA_SUPPORT=y
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_MEDIA_ATTACH=y
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_MEDIA_TUNER_MXL5007T=m
+CONFIG_MEDIA_TUNER_MC44S803=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEO_V4L1=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_MT9V011=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_VIVI=m
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_VIDEO_AU0828 is not set
+# CONFIG_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+CONFIG_USB_M5602=m
+CONFIG_USB_STV06XX=m
+# CONFIG_USB_GL860 is not set
+CONFIG_USB_GSPCA_CONEX=m
+CONFIG_USB_GSPCA_ETOMS=m
+CONFIG_USB_GSPCA_FINEPIX=m
+# CONFIG_USB_GSPCA_JEILINJ is not set
+CONFIG_USB_GSPCA_MARS=m
+# CONFIG_USB_GSPCA_MR97310A is not set
+CONFIG_USB_GSPCA_OV519=m
+CONFIG_USB_GSPCA_OV534=m
+CONFIG_USB_GSPCA_PAC207=m
+CONFIG_USB_GSPCA_PAC7311=m
+# CONFIG_USB_GSPCA_SN9C20X is not set
+CONFIG_USB_GSPCA_SONIXB=m
+CONFIG_USB_GSPCA_SONIXJ=m
+CONFIG_USB_GSPCA_SPCA500=m
+CONFIG_USB_GSPCA_SPCA501=m
+CONFIG_USB_GSPCA_SPCA505=m
+CONFIG_USB_GSPCA_SPCA506=m
+CONFIG_USB_GSPCA_SPCA508=m
+CONFIG_USB_GSPCA_SPCA561=m
+# CONFIG_USB_GSPCA_SQ905 is not set
+# CONFIG_USB_GSPCA_SQ905C is not set
+CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_SUNPLUS=m
+CONFIG_USB_GSPCA_T613=m
+CONFIG_USB_GSPCA_TV8532=m
+CONFIG_USB_GSPCA_VC032X=m
+CONFIG_USB_GSPCA_ZC3XX=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_PVRUSB2_DVB=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_HDPVR=m
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_CX231XX=m
+# CONFIG_VIDEO_CX231XX_ALSA is not set
+CONFIG_VIDEO_CX231XX_DVB=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_PWC_INPUT_EVDEV=y
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_USB_S2255=m
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_I2C_SI4713 is not set
+# CONFIG_RADIO_SI4713 is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_RADIO_SI470X is not set
+# CONFIG_USB_MR800 is not set
+# CONFIG_RADIO_TEA5764 is not set
+CONFIG_DVB_MAX_ADAPTERS=8
+CONFIG_DVB_DYNAMIC_MINORS=y
+CONFIG_DVB_CAPTURE_DRIVERS=y
+# CONFIG_TTPCI_EEPROM is not set
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_M920X=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_USB_DW2102=m
+CONFIG_DVB_USB_CINERGY_T2=m
+CONFIG_DVB_USB_ANYSEE=m
+CONFIG_DVB_USB_DTV5100=m
+CONFIG_DVB_USB_AF9015=m
+# CONFIG_DVB_USB_CE6230 is not set
+# CONFIG_DVB_USB_FRIIO is not set
+# CONFIG_SMS_SIANO_MDTV is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_ZL10039=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_STV0288=m
+CONFIG_DVB_STB6000=m
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TUNER_CX24113=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_CX24116=m
+CONFIG_DVB_SI21XX=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_TDA10048=m
+CONFIG_DVB_AF9013=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_LGDT3305=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_S5H1411=m
+CONFIG_DVB_DIB8000=m
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TUNER_DIB0070=m
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DVB_LGS8GL5=m
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_TMIO is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_OMAP_LCD_VGA is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_OMAP2_VRAM=y
+CONFIG_OMAP2_VRFB=y
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_VRAM_SIZE=14
+CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+# CONFIG_OMAP2_DSS_SDI is not set
+CONFIG_OMAP2_DSS_DSI=y
+CONFIG_OMAP2_DSS_USE_DSI_PLL=y
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=1
+CONFIG_FB_OMAP2=y
+CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+
+#
+# OMAP2/3 Display Device Drivers
+#
+CONFIG_PANEL_GENERIC=y
+CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C=y
+CONFIG_PANEL_SHARP_LS037V7DW01=y
+# CONFIG_PANEL_TAAL is not set
+# CONFIG_PANEL_TOPPOLY_TDO35S is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=y
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=y
+CONFIG_SND_RAWMIDI=y
+CONFIG_SND_JACK=y
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_HRTIMER=m
+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_RAWMIDI_SEQ=m
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_ARM is not set
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+CONFIG_SND_SOC=y
+CONFIG_SND_OMAP_SOC=y
+CONFIG_SND_OMAP_SOC_MCBSP=y
+# CONFIG_SND_OMAP_SOC_OVERO is not set
+# CONFIG_SND_OMAP_SOC_OMAP3EVM is not set
+# CONFIG_SND_OMAP_SOC_OMAP3_PANDORA is not set
+CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE=y
+# CONFIG_SND_OMAP_SOC_ZOOM2 is not set
+# CONFIG_SND_OMAP_SOC_IGEP0020 is not set
+CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_TWL4030=y
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+# CONFIG_HID_DRAGONRISE is not set
+CONFIG_HID_EZKEY=y
+# CONFIG_HID_KYE is not set
+CONFIG_HID_GYRATION=y
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+CONFIG_HID_TOPSEED=y
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_WACOM is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_U132_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+CONFIG_USB_MUSB_OTG=y
+CONFIG_USB_GADGET_MUSB_HDRC=y
+CONFIG_USB_MUSB_HDRC_HCD=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+# CONFIG_USB_TI_CPPI_DMA is not set
+# CONFIG_USB_MUSB_DEBUG is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+CONFIG_USB_TMC=m
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP210X is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+# CONFIG_USB_SERIAL_QUALCOMM is not set
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIEMENS_MPI=m
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+# CONFIG_USB_SERIAL_SYMBOL is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_OPTICON=m
+CONFIG_USB_SERIAL_DEBUG=m
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+CONFIG_USB_SISUSBVGA_CON=y
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+# CONFIG_USB_IOWARRIOR is not set
+CONFIG_USB_TEST=m
+# CONFIG_USB_ISIGHTFW is not set
+CONFIG_USB_VST=m
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_DEBUG_FS=y
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ZERO_HNPTEST=y
+# CONFIG_USB_AUDIO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_ETH_EEM is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+CONFIG_USB_G_PRINTER=m
+CONFIG_USB_CDC_COMPOSITE=m
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+CONFIG_USB_GPIO_VBUS=y
+# CONFIG_ISP1301_OMAP is not set
+CONFIG_TWL4030_USB=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_OMAP is not set
+CONFIG_MMC_OMAP_HS=y
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+CONFIG_MMC_SPI=m
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=m
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_TWL4030=m
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+CONFIG_UIO=m
+CONFIG_UIO_PDRV=m
+CONFIG_UIO_PDRV_GENIRQ=m
+# CONFIG_UIO_SMX is not set
+# CONFIG_UIO_SERCOS3 is not set
+
+#
+# TI VLYNQ
+#
+CONFIG_STAGING=y
+# CONFIG_STAGING_EXCLUDE_BUILD is not set
+# CONFIG_USB_IP_COMMON is not set
+CONFIG_W35UND=m
+# CONFIG_PRISM2_USB is not set
+CONFIG_ECHO=m
+CONFIG_OTUS=m
+# CONFIG_COMEDI is not set
+# CONFIG_ASUS_OLED is not set
+# CONFIG_INPUT_MIMIO is not set
+# CONFIG_TRANZPORT is not set
+
+#
+# Android
+#
+
+#
+# Qualcomm MSM Camera And Video
+#
+
+#
+# Camera Sensor Selection
+#
+# CONFIG_INPUT_GPIO is not set
+# CONFIG_DST is not set
+# CONFIG_POHMELFS is not set
+# CONFIG_PLAN9AUTH is not set
+# CONFIG_LINE6_USB is not set
+# CONFIG_USB_SERIAL_QUATECH2 is not set
+# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
+# CONFIG_VT6656 is not set
+# CONFIG_FB_UDL is not set
+
+#
+# RAR Register Driver
+#
+# CONFIG_RAR_REGISTER is not set
+# CONFIG_IIO is not set
+# CONFIG_STRIP is not set
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=m
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+CONFIG_REISERFS_PROC_INFO=y
+CONFIG_REISERFS_FS_XATTR=y
+# CONFIG_REISERFS_FS_POSIX_ACL is not set
+# CONFIG_REISERFS_FS_SECURITY is not set
+CONFIG_JFS_FS=m
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_DEBUG is not set
+CONFIG_GFS2_FS=m
+# CONFIG_GFS2_FS_LOCKING_DLM is not set
+CONFIG_OCFS2_FS=m
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_STATS=y
+CONFIG_OCFS2_DEBUG_MASKLOG=y
+# CONFIG_OCFS2_DEBUG_FS is not set
+# CONFIG_OCFS2_FS_POSIX_ACL is not set
+CONFIG_BTRFS_FS=m
+# CONFIG_BTRFS_FS_POSIX_ACL is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+CONFIG_QUOTA_TREE=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+# CONFIG_CUSE is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+CONFIG_MISC_FILESYSTEMS=y
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+# CONFIG_ECRYPT_FS is not set
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+# CONFIG_JFFS2_CMODE_PRIORITY is not set
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_JFFS2_CMODE_FAVOURLZO=y
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_XATTR=y
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=y
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+CONFIG_VXFS_FS=m
+CONFIG_MINIX_FS=m
+CONFIG_OMFS_FS=m
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_ROMFS_BACKED_BY_BLOCK=y
+# CONFIG_ROMFS_BACKED_BY_MTD is not set
+# CONFIG_ROMFS_BACKED_BY_BOTH is not set
+CONFIG_ROMFS_ON_BLOCK=y
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+CONFIG_CIFS_STATS2=y
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_UPCALL is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_DFS_UPCALL is not set
+CONFIG_CIFS_EXPERIMENTAL=y
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+CONFIG_AFS_FS=m
+# CONFIG_AFS_DEBUG is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+CONFIG_MINIX_SUBPARTITION=y
+CONFIG_SOLARIS_X86_PARTITION=y
+CONFIG_UNIXWARE_DISKLABEL=y
+CONFIG_LDM_PARTITION=y
+CONFIG_LDM_DEBUG=y
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_EFI_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_STACKTRACE=y
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_NOP_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_EVENT_TRACING=y
+CONFIG_CONTEXT_SWITCH_TRACER=y
+CONFIG_RING_BUFFER_ALLOW_SWAP=y
+CONFIG_TRACING=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_BOOT_TRACER is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_RING_BUFFER_BENCHMARK is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_ARM_UNWIND=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_ASYNC_PQ=m
+CONFIG_ASYNC_RAID6_RECOV=m
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_FIPS=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=m
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=m
+CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_SEQIV=m
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=y
+CONFIG_CRYPTO_GHASH=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_RMD128=m
+CONFIG_CRYPTO_RMD160=m
+CONFIG_CRYPTO_RMD256=m
+CONFIG_CRYPTO_RMD320=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=m
+CONFIG_CRYPTO_HW=y
+CONFIG_BINARY_PRINTF=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch
new file mode 100644
index 0000000000..423b29f841
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch
@@ -0,0 +1,159 @@
+From 971595be3dc245cfa095747263b94535d27a3f1c Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Tue, 1 Dec 2009 12:14:10 +0200
+Subject: [PATCH 1/6] OMAP: DSS2: add Toppoly TDO35S panel
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ drivers/video/omap2/displays/Kconfig | 6 +
+ drivers/video/omap2/displays/Makefile | 1 +
+ .../video/omap2/displays/panel-toppoly-tdo35s.c | 112 ++++++++++++++++++++
+ 3 files changed, 119 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/video/omap2/displays/panel-toppoly-tdo35s.c
+
+diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig
+index 79d2861..0d0d4f3 100644
+--- a/drivers/video/omap2/displays/Kconfig
++++ b/drivers/video/omap2/displays/Kconfig
+@@ -25,4 +25,10 @@ config PANEL_TAAL
+ help
+ Taal DSI command mode panel from TPO.
+
++config PANEL_TOPPOLY_TDO35S
++ tristate "Toppoly TDO35S LCD Panel support"
++ depends on OMAP2_DSS
++ help
++ LCD Panel used in CM-T35
++
+ endmenu
+diff --git a/drivers/video/omap2/displays/Makefile b/drivers/video/omap2/displays/Makefile
+index d44e765..e299454 100644
+--- a/drivers/video/omap2/displays/Makefile
++++ b/drivers/video/omap2/displays/Makefile
+@@ -3,3 +3,4 @@ obj-$(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) += panel-samsung-lte430wq-f0c.o
+ obj-$(CONFIG_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o
+
+ obj-$(CONFIG_PANEL_TAAL) += panel-taal.o
++obj-$(CONFIG_PANEL_TOPPOLY_TDO35S) += panel-toppoly-tdo35s.o
+\ No newline at end of file
+diff --git a/drivers/video/omap2/displays/panel-toppoly-tdo35s.c b/drivers/video/omap2/displays/panel-toppoly-tdo35s.c
+new file mode 100644
+index 0000000..e744b8c
+--- /dev/null
++++ b/drivers/video/omap2/displays/panel-toppoly-tdo35s.c
+@@ -0,0 +1,112 @@
++/*
++ * LCD panel driver for Toppoly TDO35S
++ *
++ * Copyright (C) 2009 CompuLab, Ltd.
++ * Author: Mike Rapoport <mike@compulab.co.il>
++ *
++ * Based on generic panel support
++ * Copyright (C) 2008 Nokia Corporation
++ * Author: Tomi Valkeinen <tomi.valkeinen@nokia.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 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 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 <http://www.gnu.org/licenses/>.
++ */
++
++#include <linux/module.h>
++#include <linux/delay.h>
++
++#include <plat/display.h>
++
++static struct omap_video_timings toppoly_tdo_panel_timings = {
++ /* 640 x 480 @ 60 Hz Reduced blanking VESA CVT 0.31M3-R */
++ .x_res = 480,
++ .y_res = 640,
++
++ .pixel_clock = 26000,
++
++ .hfp = 104,
++ .hsw = 8,
++ .hbp = 8,
++
++ .vfp = 4,
++ .vsw = 2,
++ .vbp = 2,
++};
++
++static int toppoly_tdo_panel_probe(struct omap_dss_device *dssdev)
++{
++ dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++ OMAP_DSS_LCD_IHS;
++ dssdev->panel.timings = toppoly_tdo_panel_timings;
++
++ return 0;
++}
++
++static void toppoly_tdo_panel_remove(struct omap_dss_device *dssdev)
++{
++}
++
++static int toppoly_tdo_panel_enable(struct omap_dss_device *dssdev)
++{
++ int r = 0;
++
++ if (dssdev->platform_enable)
++ r = dssdev->platform_enable(dssdev);
++
++ return r;
++}
++
++static void toppoly_tdo_panel_disable(struct omap_dss_device *dssdev)
++{
++ if (dssdev->platform_disable)
++ dssdev->platform_disable(dssdev);
++}
++
++static int toppoly_tdo_panel_suspend(struct omap_dss_device *dssdev)
++{
++ toppoly_tdo_panel_disable(dssdev);
++ return 0;
++}
++
++static int toppoly_tdo_panel_resume(struct omap_dss_device *dssdev)
++{
++ return toppoly_tdo_panel_enable(dssdev);
++}
++
++static struct omap_dss_driver generic_driver = {
++ .probe = toppoly_tdo_panel_probe,
++ .remove = toppoly_tdo_panel_remove,
++
++ .enable = toppoly_tdo_panel_enable,
++ .disable = toppoly_tdo_panel_disable,
++ .suspend = toppoly_tdo_panel_suspend,
++ .resume = toppoly_tdo_panel_resume,
++
++ .driver = {
++ .name = "toppoly_tdo35s_panel",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init toppoly_tdo_panel_drv_init(void)
++{
++ return omap_dss_register_driver(&generic_driver);
++}
++
++static void __exit toppoly_tdo_panel_drv_exit(void)
++{
++ omap_dss_unregister_driver(&generic_driver);
++}
++
++module_init(toppoly_tdo_panel_drv_init);
++module_exit(toppoly_tdo_panel_drv_exit);
++MODULE_LICENSE("GPL");
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch
new file mode 100644
index 0000000000..b540987af0
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch
@@ -0,0 +1,30 @@
+From 8a2cbbaa60ea06370d2a6d9303b1aab54cdb8a69 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Tue, 24 Nov 2009 10:09:35 +0200
+Subject: [PATCH] backlight: tdo24m: ensure chip select changes between transfers
+
+Some SPI host drivers do not change chip select betwen transfers unless
+.cs_chnage field is explicitly set. The LCD spec requires chip select
+change between consecuitive transfers, so ensure it at the SPI driver
+level.
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ drivers/video/backlight/tdo24m.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/backlight/tdo24m.c b/drivers/video/backlight/tdo24m.c
+index bbfb502..4a3d46e 100644
+--- a/drivers/video/backlight/tdo24m.c
++++ b/drivers/video/backlight/tdo24m.c
+@@ -367,6 +367,7 @@ static int __devinit tdo24m_probe(struct spi_device *spi)
+
+ spi_message_init(m);
+
++ x->cs_change = 1;
+ x->tx_buf = &lcd->buf[0];
+ spi_message_add_tail(x, m);
+
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch
new file mode 100644
index 0000000000..07f901c9a6
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch
@@ -0,0 +1,153 @@
+Date: Wed, 09 Dec 2009 15:22:20 +0200
+From: Mike Rapoport <mike@compulab.co.il>
+To: Koen Kooi <koen@dominion.thruhere.net>
+Subject: Re: linux-omap 2.6.32 updates
+
+
+Mike Rapoport wrote:
+>> The tdo24m patch is indeed in the linux-omap tree and the mux patch should be
+>> different for the updated linux-omap (at least with
+>> SRCREV = "6833f1a8cdcb65a370f898bde6b6af63f81962df").
+>>
+>> Attached the actual patch needed to initialize cm-t35 mux and updated recipe
+>> diff that uses this patch.
+>>
+>> I don't know yet if Tony is going to merge my latest patches before the merge
+>> window closes. If you're going to bump SRCREV once again in the next few days,
+>> it's possible that cm-t35 patches won't be needed at all.
+
+--
+Sincerely yours,
+Mike.
+
+
+diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
+index 16c0c13..66de47b 100644
+--- a/arch/arm/mach-omap2/Kconfig
++++ b/arch/arm/mach-omap2/Kconfig
+@@ -136,6 +136,7 @@ config MACH_CM_T35
+ bool "CompuLab CM-T35 module"
+ depends on ARCH_OMAP3 && ARCH_OMAP34XX
+ select OMAP_PACKAGE_CUS
++ select OMAP_MUX
+
+ config MACH_IGEP0020
+ bool "IGEP0020"
+diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
+index 507c922..1591aae 100644
+--- a/arch/arm/mach-omap2/board-cm-t35.c
++++ b/arch/arm/mach-omap2/board-cm-t35.c
+@@ -482,13 +482,98 @@ static void __init cm_t35_map_io(void)
+ omap2_map_common_io();
+ }
+
+-#ifdef CONFIG_OMAP_MUX
+ static struct omap_board_mux board_mux[] __initdata = {
++ /* nCS and IRQ for CM-T35 ethernet */
++ OMAP3_MUX(GPMC_NCS5, OMAP_MUX_MODE0),
++ OMAP3_MUX(UART3_CTS_RCTX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
++
++ /* nCS and IRQ for SB-T35 ethernet */
++ OMAP3_MUX(GPMC_NCS4, OMAP_MUX_MODE0),
++ OMAP3_MUX(GPMC_WAIT3, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
++
++ /* PENDOWN GPIO */
++ OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
++
++ /* mUSB */
++ OMAP3_MUX(HSUSB0_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_STP, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(HSUSB0_DIR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_NXT, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++
++ /* MMC 2 */
++ OMAP3_MUX(SDMMC2_DAT4, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(SDMMC2_DAT5, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(SDMMC2_DAT6, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(SDMMC2_DAT7, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++
++ /* McSPI 1 */
++ OMAP3_MUX(MCSPI1_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCSPI1_SIMO, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCSPI1_SOMI, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCSPI1_CS0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
++
++ /* McSPI 4 */
++ OMAP3_MUX(MCBSP1_CLKR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP1_DX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP1_DR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP1_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT_PULLUP),
++
++ /* McBSP 2 */
++ OMAP3_MUX(MCBSP2_FSX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP2_CLKX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP2_DR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP2_DX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++
++ /* serial ports */
++ OMAP3_MUX(MCBSP3_CLKX, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(MCBSP3_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++ OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++
++ /* DSS */
++ OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_ACBIAS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA9, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA10, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA11, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA12, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA13, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA14, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA20, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++
++ /* TPS IRQ */
++ OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_WAKEUP_EN | \
++ OMAP_PIN_INPUT_PULLUP),
++
+ { .reg_offset = OMAP_MUX_TERMINATOR },
+ };
+-#else
+-#define board_mux NULL
+-#endif
+
+ static void __init cm_t35_init(void)
+ {
+@@ -501,9 +586,6 @@ static void __init cm_t35_init(void)
+ cm_t35_init_led();
+
+ usb_musb_init();
+-
+- omap_mux_init_signal("sys_nirq",
+- OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
+ }
+
+ MACHINE_START(CM_T35, "Compulab CM-T35")
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch
new file mode 100644
index 0000000000..199e89bc93
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch
@@ -0,0 +1,307 @@
+From 7d601fa33c5475bcd3035df797a3cbe40cc542d4 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Tue, 1 Dec 2009 13:09:28 +0200
+Subject: [PATCH 2/6] omap3: cm-t35: add DSS2 display support
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ arch/arm/mach-omap2/board-cm-t35.c | 234 +++++++++++++++++++++++++++++++++++-
+ 1 files changed, 233 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
+index 22c4529..2d7a819 100644
+--- a/arch/arm/mach-omap2/board-cm-t35.c
++++ b/arch/arm/mach-omap2/board-cm-t35.c
+@@ -32,6 +32,9 @@
+ #include <linux/i2c/twl4030.h>
+ #include <linux/regulator/machine.h>
+
++#include <linux/spi/spi.h>
++#include <linux/spi/tdo24m.h>
++
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/mach/map.h>
+@@ -42,6 +45,7 @@
+ #include <plat/nand.h>
+ #include <plat/gpmc.h>
+ #include <plat/usb.h>
++#include <plat/display.h>
+
+ #include <mach/hardware.h>
+
+@@ -248,7 +252,6 @@ static inline void cm_t35_init_nand(void) {}
+
+ #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
+ defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
+-#include <linux/spi/spi.h>
+ #include <linux/spi/ads7846.h>
+
+ #include <plat/mcspi.h>
+@@ -304,6 +307,193 @@ static void __init cm_t35_init_ads7846(void)
+ static inline void cm_t35_init_ads7846(void) {}
+ #endif
+
++#define CM_T35_LCD_EN_GPIO 157
++#define CM_T35_LCD_BL_GPIO 58
++#define CM_T35_DVI_EN_GPIO 54
++
++static int lcd_bl_gpio;
++static int lcd_en_gpio;
++static int dvi_en_gpio;
++
++static int lcd_enabled;
++static int dvi_enabled;
++
++static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev)
++{
++ if (dvi_enabled) {
++ printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
++ return -EINVAL;
++ }
++
++ gpio_set_value(lcd_en_gpio, 1);
++ gpio_set_value(lcd_bl_gpio, 1);
++
++ lcd_enabled = 1;
++
++ return 0;
++}
++
++static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev)
++{
++ lcd_enabled = 0;
++
++ gpio_set_value(lcd_bl_gpio, 0);
++ gpio_set_value(lcd_en_gpio, 0);
++}
++
++static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
++{
++ if (lcd_enabled) {
++ printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
++ return -EINVAL;
++ }
++
++ gpio_set_value(dvi_en_gpio, 0);
++ dvi_enabled = 1;
++
++ return 0;
++}
++
++static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev)
++{
++ gpio_set_value(dvi_en_gpio, 1);
++ dvi_enabled = 0;
++}
++
++static int cm_t35_panel_enable_tv(struct omap_dss_device *dssdev)
++{
++ return 0;
++}
++
++static void cm_t35_panel_disable_tv(struct omap_dss_device *dssdev)
++{
++}
++
++static struct omap_dss_device cm_t35_lcd_device = {
++ .name = "lcd",
++ .driver_name = "toppoly_tdo35s_panel",
++ .type = OMAP_DISPLAY_TYPE_DPI,
++ .phy.dpi.data_lines = 18,
++ .platform_enable = cm_t35_panel_enable_lcd,
++ .platform_disable = cm_t35_panel_disable_lcd,
++};
++
++static struct omap_dss_device cm_t35_dvi_device = {
++ .name = "dvi",
++ .driver_name = "generic_panel",
++ .type = OMAP_DISPLAY_TYPE_DPI,
++ .phy.dpi.data_lines = 24,
++ .platform_enable = cm_t35_panel_enable_dvi,
++ .platform_disable = cm_t35_panel_disable_dvi,
++};
++
++static struct omap_dss_device cm_t35_tv_device = {
++ .name = "tv",
++ .driver_name = "venc",
++ .type = OMAP_DISPLAY_TYPE_VENC,
++ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
++ .platform_enable = cm_t35_panel_enable_tv,
++ .platform_disable = cm_t35_panel_disable_tv,
++};
++
++static struct omap_dss_device *cm_t35_dss_devices[] = {
++ &cm_t35_lcd_device,
++ &cm_t35_dvi_device,
++ &cm_t35_tv_device,
++};
++
++static struct omap_dss_board_info cm_t35_dss_data = {
++ .num_devices = ARRAY_SIZE(cm_t35_dss_devices),
++ .devices = cm_t35_dss_devices,
++ .default_device = &cm_t35_dvi_device,
++};
++
++static struct platform_device cm_t35_dss_device = {
++ .name = "omapdss",
++ .id = -1,
++ .dev = {
++ .platform_data = &cm_t35_dss_data,
++ },
++};
++
++static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
++ .turbo_mode = 0,
++ .single_channel = 1, /* 0: slave, 1: master */
++};
++
++static struct tdo24m_platform_data tdo24m_config = {
++ .model = TDO35S,
++};
++
++static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
++ {
++ .modalias = "tdo24m",
++ .bus_num = 4,
++ .chip_select = 0,
++ .max_speed_hz = 1000000,
++ .controller_data = &tdo24m_mcspi_config,
++ .platform_data = &tdo24m_config,
++ },
++};
++
++static void __init cm_t35_display_init(void)
++{
++ int err;
++
++ lcd_en_gpio = CM_T35_LCD_EN_GPIO;
++ lcd_bl_gpio = CM_T35_LCD_BL_GPIO;
++ dvi_en_gpio = CM_T35_DVI_EN_GPIO;
++
++ spi_register_board_info(cm_t35_lcd_spi_board_info,
++ ARRAY_SIZE(cm_t35_lcd_spi_board_info));
++
++ err = gpio_request(lcd_en_gpio, "LCD RST");
++ if (err) {
++ pr_err("CM-T35: failed to get LCD reset GPIO\n");
++ goto out;
++ }
++
++ err = gpio_request(lcd_bl_gpio, "LCD BL");
++ if (err) {
++ pr_err("CM-T35: failed to get LCD backlight control GPIO\n");
++ goto err_lcd_bl;
++ }
++
++ err = gpio_request(dvi_en_gpio, "DVI EN");
++ if (err) {
++ pr_err("CM-T35: failed to get DVI reset GPIO\n");
++ goto err_dvi_en;
++ }
++
++ gpio_export(lcd_en_gpio, 0);
++ gpio_export(lcd_bl_gpio, 0);
++ gpio_export(dvi_en_gpio, 0);
++ gpio_direction_output(lcd_en_gpio, 0);
++ gpio_direction_output(lcd_bl_gpio, 0);
++ gpio_direction_output(dvi_en_gpio, 1);
++
++ msleep(50);
++ gpio_set_value(lcd_en_gpio, 1);
++
++ err = platform_device_register(&cm_t35_dss_device);
++ if (err) {
++ pr_err("CM-T35: failed to register DSS device\n");
++ goto err_dev_reg;
++ }
++
++ return;
++
++err_dev_reg:
++ gpio_free(dvi_en_gpio);
++err_dvi_en:
++ gpio_free(lcd_bl_gpio);
++err_lcd_bl:
++ gpio_free(lcd_en_gpio);
++out:
++
++ return;
++}
++
+ static struct regulator_consumer_supply cm_t35_vmmc1_supply = {
+ .supply = "vmmc",
+ };
+@@ -312,6 +502,16 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = {
+ .supply = "vmmc_aux",
+ };
+
++static struct regulator_consumer_supply cm_t35_vdac_supply = {
++ .supply = "vdda_dac",
++ .dev = &cm_t35_dss_device.dev,
++};
++
++static struct regulator_consumer_supply cm_t35_vdvi_supply = {
++ .supply = "vdvi",
++ .dev = &cm_t35_dss_device.dev,
++};
++
+ /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
+ static struct regulator_init_data cm_t35_vmmc1 = {
+ .constraints = {
+@@ -342,6 +542,35 @@ static struct regulator_init_data cm_t35_vsim = {
+ .consumer_supplies = &cm_t35_vsim_supply,
+ };
+
++/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */
++static struct regulator_init_data cm_t35_vdac = {
++ .constraints = {
++ .min_uV = 1800000,
++ .max_uV = 1800000,
++ .valid_modes_mask = REGULATOR_MODE_NORMAL
++ | REGULATOR_MODE_STANDBY,
++ .valid_ops_mask = REGULATOR_CHANGE_MODE
++ | REGULATOR_CHANGE_STATUS,
++ },
++ .num_consumer_supplies = 1,
++ .consumer_supplies = &cm_t35_vdac_supply,
++};
++
++/* VPLL2 for digital video outputs */
++static struct regulator_init_data cm_t35_vpll2 = {
++ .constraints = {
++ .name = "VDVI",
++ .min_uV = 1800000,
++ .max_uV = 1800000,
++ .valid_modes_mask = REGULATOR_MODE_NORMAL
++ | REGULATOR_MODE_STANDBY,
++ .valid_ops_mask = REGULATOR_CHANGE_MODE
++ | REGULATOR_CHANGE_STATUS,
++ },
++ .num_consumer_supplies = 1,
++ .consumer_supplies = &cm_t35_vdvi_supply,
++};
++
+ static struct twl4030_usb_data cm_t35_usb_data = {
+ .usb_mode = T2_USB_MODE_ULPI,
+ };
+@@ -445,6 +674,8 @@ static struct twl4030_platform_data cm_t35_twldata = {
+ .gpio = &cm_t35_gpio_data,
+ .vmmc1 = &cm_t35_vmmc1,
+ .vsim = &cm_t35_vsim,
++ .vdac = &cm_t35_vdac,
++ .vpll2 = &cm_t35_vpll2,
+ };
+
+ static struct i2c_board_info __initdata cm_t35_i2c_boardinfo[] = {
+@@ -490,6 +721,7 @@ static void __init cm_t35_init(void)
+ cm_t35_init_ads7846();
+ cm_t35_init_ethernet();
+ cm_t35_init_led();
++ cm_t35_display_init();
+
+ usb_musb_init();
+
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch
new file mode 100644
index 0000000000..dc1e5270c9
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch
@@ -0,0 +1,145 @@
+From 10cd78db62cbda2f9db1c53d459ee03a35b84662 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Tue, 1 Dec 2009 13:16:02 +0200
+Subject: [PATCH 3/6] omap3: cm-t35: update defconfig for DSS2
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ arch/arm/configs/cm_t35_defconfig | 82 +++++++++++++++++++++++++++++++++++--
+ 1 files changed, 78 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/configs/cm_t35_defconfig b/arch/arm/configs/cm_t35_defconfig
+index e42c5c8..bd6f882 100644
+--- a/arch/arm/configs/cm_t35_defconfig
++++ b/arch/arm/configs/cm_t35_defconfig
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.32-rc4
+-# Tue Oct 13 17:10:40 2009
++# Linux kernel version: 2.6.32-rc8
++# Tue Dec 1 12:08:44 2009
+ #
+ CONFIG_ARM=y
+ CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+@@ -215,6 +215,7 @@ CONFIG_OMAP_DM_TIMER=y
+ # CONFIG_OMAP_LL_DEBUG_UART1 is not set
+ # CONFIG_OMAP_LL_DEBUG_UART2 is not set
+ CONFIG_OMAP_LL_DEBUG_UART3=y
++# CONFIG_OMAP_LL_DEBUG_NONE is not set
+ # CONFIG_OMAP_PM_NONE is not set
+ CONFIG_OMAP_PM_NOOP=y
+ CONFIG_ARCH_OMAP34XX=y
+@@ -227,11 +228,15 @@ CONFIG_ARCH_OMAP3430=y
+ # CONFIG_MACH_OMAP_LDP is not set
+ # CONFIG_MACH_OVERO is not set
+ # CONFIG_MACH_OMAP3EVM is not set
++# CONFIG_MACH_OMAP3517EVM is not set
+ # CONFIG_MACH_OMAP3_PANDORA is not set
+ # CONFIG_MACH_OMAP_3430SDP is not set
+ # CONFIG_MACH_NOKIA_RX51 is not set
+ # CONFIG_MACH_OMAP_ZOOM2 is not set
++# CONFIG_MACH_OMAP_ZOOM3 is not set
+ CONFIG_MACH_CM_T35=y
++# CONFIG_MACH_IGEP0020 is not set
++# CONFIG_MACH_OMAP_3630SDP is not set
+
+ #
+ # Processor Type
+@@ -963,6 +968,7 @@ CONFIG_SSB_POSSIBLE=y
+ # CONFIG_TPS65010 is not set
+ CONFIG_TWL4030_CORE=y
+ # CONFIG_TWL4030_POWER is not set
++# CONFIG_TWL4030_CODEC is not set
+ # CONFIG_MFD_TMIO is not set
+ # CONFIG_MFD_T7L66XB is not set
+ # CONFIG_MFD_TC6387XB is not set
+@@ -993,8 +999,66 @@ CONFIG_REGULATOR_TWL4030=y
+ #
+ # CONFIG_VGASTATE is not set
+ # CONFIG_VIDEO_OUTPUT_CONTROL is not set
+-# CONFIG_FB is not set
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
++# CONFIG_FB_SYS_FILLRECT is not set
++# CONFIG_FB_SYS_COPYAREA is not set
++# CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS is not set
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
++CONFIG_OMAP2_VRAM=y
++CONFIG_OMAP2_VRFB=y
++CONFIG_OMAP2_DSS=y
++CONFIG_OMAP2_VRAM_SIZE=4
++CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
++# CONFIG_OMAP2_DSS_RFBI is not set
++CONFIG_OMAP2_DSS_VENC=y
++# CONFIG_OMAP2_DSS_SDI is not set
++# CONFIG_OMAP2_DSS_DSI is not set
++# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
++CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
++CONFIG_FB_OMAP2=y
++CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
++# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
++CONFIG_FB_OMAP2_NUM_FBS=3
++
++#
++# OMAP2/3 Display Device Drivers
++#
++CONFIG_PANEL_GENERIC=y
++# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
++# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
++CONFIG_PANEL_TOPPOLY_TDO35S=y
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_LCD_CLASS_DEVICE=y
++# CONFIG_LCD_LMS283GF05 is not set
++# CONFIG_LCD_LTV350QV is not set
++# CONFIG_LCD_ILI9320 is not set
++CONFIG_LCD_TDO24M=y
++# CONFIG_LCD_VGG2432A4 is not set
++# CONFIG_LCD_PLATFORM is not set
++# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+
+ #
+ # Display device support
+@@ -1006,6 +1070,16 @@ CONFIG_REGULATOR_TWL4030=y
+ #
+ # CONFIG_VGA_CONSOLE is not set
+ CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
++# CONFIG_FONTS is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++CONFIG_LOGO=y
++CONFIG_LOGO_LINUX_MONO=y
++CONFIG_LOGO_LINUX_VGA16=y
++CONFIG_LOGO_LINUX_CLUT224=y
+ # CONFIG_SOUND is not set
+ CONFIG_HID_SUPPORT=y
+ CONFIG_HID=y
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch
new file mode 100644
index 0000000000..ff8b50b1c9
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch
@@ -0,0 +1,427 @@
+From a1a572a6b020996155fa3fd7e70a96299b37cf30 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Mon, 7 Dec 2009 10:27:48 +0200
+Subject: [PATCH 4/6] omap3: cm-t35: add cm-t35 mux configs
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ arch/arm/mach-omap2/board-cm-t35.c | 94 +++++++++++++++++++
+ arch/arm/mach-omap2/mux.c | 158 ++++++++++++++++++++++++++++++++-
+ arch/arm/plat-omap/include/plat/mux.h | 86 ++++++++++++++++++
+ 3 files changed, 337 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
+index 2d7a819..3e54499 100644
+--- a/arch/arm/mach-omap2/board-cm-t35.c
++++ b/arch/arm/mach-omap2/board-cm-t35.c
+@@ -693,6 +693,99 @@ static void __init cm_t35_init_i2c(void)
+ ARRAY_SIZE(cm_t35_i2c_boardinfo));
+ }
+
++static void __init cm_t35_init_mux(void)
++{
++ /* nCS and IRQ mux for CM-T35 ethernet */
++ omap_cfg_reg(G5_34XX_GPMC_NCS5);
++ omap_cfg_reg(A23_34XX_GPIO163_UP);
++
++ /* nCS, IRQ and reset mux for SB-T35 ethernet */
++ omap_cfg_reg(F4_34XX_GPMC_NCS4);
++ omap_cfg_reg(N21_34XX_GPIO127_UP);
++ omap_cfg_reg(B23_34XX_GPIO164_OUT);
++
++ /* PENDOWN GPIO */
++ omap_cfg_reg(F3_34XX_GPIO57_UP);
++
++ /* mUSB */
++ omap_cfg_reg(R21_3430_USB0HS_PHY_CLK);
++ omap_cfg_reg(R23_3430_USB0HS_PHY_STP);
++ omap_cfg_reg(P23_3430_USB0HS_PHY_DIR);
++ omap_cfg_reg(R22_3430_USB0HS_PHY_NXT);
++ omap_cfg_reg(T24_3430_USB0HS_PHY_DATA0);
++ omap_cfg_reg(T23_3430_USB0HS_PHY_DATA1);
++ omap_cfg_reg(U24_3430_USB0HS_PHY_DATA2);
++ omap_cfg_reg(U23_3430_USB0HS_PHY_DATA3);
++ omap_cfg_reg(W24_3430_USB0HS_PHY_DATA4);
++ omap_cfg_reg(V23_3430_USB0HS_PHY_DATA5);
++ omap_cfg_reg(W23_3430_USB0HS_PHY_DATA6);
++ omap_cfg_reg(T22_3430_USB0HS_PHY_DATA7);
++
++ /* MMC 2 */
++ omap_cfg_reg(AB2_3430_MMC2_DIR_DAT0);
++ omap_cfg_reg(AA2_3430_MMC2_DIR_DAT1);
++ omap_cfg_reg(Y2_3430_MMC2_DIR_CMD);
++ omap_cfg_reg(AA1_3420_MMC2_CLKIN);
++
++ /* McSPI 1 */
++ omap_cfg_reg(T5_34XX_MCSPI1_CLK);
++ omap_cfg_reg(R4_34XX_MCSPI1_SIMO);
++ omap_cfg_reg(T4_34XX_MCSPI1_SOMI);
++ omap_cfg_reg(T6_34XX_MCSPI1_CS0);
++
++ /* McBSP 2 */
++ omap_cfg_reg(V20_34XX_MCBSP2_FSX);
++ omap_cfg_reg(T21_34XX_MCBSP2_CLKX);
++ omap_cfg_reg(V19_34XX_MCBSP2_DR);
++ omap_cfg_reg(R20_34XX_MCBSP2_DX);
++
++ omap_cfg_reg(F21_34XX_GPIO109_OUT);
++
++ /* serial ports */
++ omap_cfg_reg(W4_34XX_UART2_TX);
++ omap_cfg_reg(V4_34XX_UART2_RX);
++ omap_cfg_reg(W7_34XX_UART1_TX);
++ omap_cfg_reg(V7_34XX_UART1_RX);
++
++ /* display controls */
++ omap_cfg_reg(U8_34XX_GPIO54_OUT);
++ omap_cfg_reg(G4_34XX_GPIO58_OUT);
++/* omap_cfg_reg(??_34XX_GPIO129_OUT); */
++
++ /* DSS */
++ omap_cfg_reg(G22_34XX_DSS_PCLK);
++ omap_cfg_reg(E22_34XX_DSS_HSYNC);
++ omap_cfg_reg(F22_34XX_DSS_VSYNC);
++ omap_cfg_reg(J21_34XX_DSS_ACBIAS);
++ omap_cfg_reg(AC19_34XX_DSS_DATA0);
++ omap_cfg_reg(AB19_34XX_DSS_DATA1);
++ omap_cfg_reg(AD20_34XX_DSS_DATA2);
++ omap_cfg_reg(AC20_34XX_DSS_DATA3);
++ omap_cfg_reg(AD21_34XX_DSS_DATA4);
++ omap_cfg_reg(AC21_34XX_DSS_DATA5);
++ omap_cfg_reg(D24_34XX_DSS_DATA6);
++ omap_cfg_reg(E23_34XX_DSS_DATA7);
++ omap_cfg_reg(E24_34XX_DSS_DATA8);
++ omap_cfg_reg(F23_34XX_DSS_DATA9);
++ omap_cfg_reg(AC22_34XX_DSS_DATA10);
++ omap_cfg_reg(AC23_34XX_DSS_DATA11);
++ omap_cfg_reg(AB22_34XX_DSS_DATA12);
++ omap_cfg_reg(Y22_34XX_DSS_DATA13);
++ omap_cfg_reg(W22_34XX_DSS_DATA14);
++ omap_cfg_reg(V22_34XX_DSS_DATA15);
++ omap_cfg_reg(J22_34XX_DSS_DATA16);
++ omap_cfg_reg(G23_34XX_DSS_DATA17);
++ omap_cfg_reg(G24_34XX_DSS_DATA18);
++ omap_cfg_reg(H23_34XX_DSS_DATA19);
++ omap_cfg_reg(D23_34XX_DSS_DATA20);
++ omap_cfg_reg(K22_34XX_DSS_DATA21);
++ omap_cfg_reg(V21_34XX_DSS_DATA22);
++ omap_cfg_reg(W21_34XX_DSS_DATA23);
++
++ /* TPS IRQ */
++ omap_cfg_reg(AF26_34XX_SYS_NIRQ);
++}
++
+ static struct omap_board_config_kernel cm_t35_config[] __initdata = {
+ };
+
+@@ -716,6 +809,7 @@ static void __init cm_t35_map_io(void)
+ static void __init cm_t35_init(void)
+ {
+ omap_serial_init();
++ cm_t35_init_mux();
+ cm_t35_init_i2c();
+ cm_t35_init_nand();
+ cm_t35_init_ads7846();
+diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
+index c18a94e..23eb011 100644
+--- a/arch/arm/mach-omap2/mux.c
++++ b/arch/arm/mach-omap2/mux.c
+@@ -279,6 +279,33 @@ MUX_CFG_34XX("AD26_34XX_I2C4_SCL", 0xa00,
+ MUX_CFG_34XX("AE26_34XX_I2C4_SDA", 0xa02,
+ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT_PULLUP)
+
++/* HSUSB Port 0 */
++MUX_CFG_34XX("R21_3430_USB0HS_PHY_CLK", 0x1a2,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("R23_3430_USB0HS_PHY_STP", 0x1a4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT | \
++ OMAP2_PULL_ENA | OMAP2_PULL_UP)
++MUX_CFG_34XX("P23_3430_USB0HS_PHY_DIR", 0x1a6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("R22_3430_USB0HS_PHY_NXT", 0x1a8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T24_3430_USB0HS_PHY_DATA0", 0x1aa,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T23_3430_USB0HS_PHY_DATA1", 0x1ac,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("U24_3430_USB0HS_PHY_DATA2", 0x1ae,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("U23_3430_USB0HS_PHY_DATA3", 0x1b0,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("W24_3430_USB0HS_PHY_DATA4", 0x1b2,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("V23_3430_USB0HS_PHY_DATA5", 0x1b4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("W23_3430_USB0HS_PHY_DATA6", 0x1b6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T22_3430_USB0HS_PHY_DATA7", 0x1b8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++
+ /* PHY - HSUSB: 12-pin ULPI PHY: Port 1*/
+ MUX_CFG_34XX("Y8_3430_USB1HS_PHY_CLK", 0x5da,
+ OMAP34XX_MUX_MODE3 | OMAP34XX_PIN_OUTPUT)
+@@ -541,6 +568,15 @@ MUX_CFG_34XX("AF3_3430_MMC2_DAT6", 0x168,
+ MUX_CFG_34XX("AE3_3430_MMC2_DAT7", 0x16A,
+ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT_PULLUP)
+
++MUX_CFG_34XX("AB2_3430_MMC2_DIR_DAT0", 0x164,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AA2_3430_MMC2_DIR_DAT1", 0x166,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("Y2_3430_MMC2_DIR_CMD", 0x168,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AA1_3420_MMC2_CLKIN", 0x16a,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_INPUT)
++
+ /* MMC3 */
+ MUX_CFG_34XX("AF10_3430_MMC3_CLK", 0x5d8,
+ OMAP34XX_MUX_MODE2 | OMAP34XX_PIN_INPUT_PULLUP)
+@@ -559,13 +595,133 @@ MUX_CFG_34XX("AF13_3430_MMC3_DAT3", 0x5e2,
+ MUX_CFG_34XX("AF26_34XX_SYS_NIRQ", 0x1E0,
+ OMAP3_WAKEUP_EN | OMAP34XX_PIN_INPUT_PULLUP |
+ OMAP34XX_MUX_MODE0)
+-/* EHCI GPIO's on OMAP3EVM (Rev >= E) */
++
+ MUX_CFG_34XX("AH14_34XX_GPIO21", 0x5ea,
+ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
+ MUX_CFG_34XX("AF9_34XX_GPIO22", 0x5ec,
+ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
+ MUX_CFG_34XX("U3_34XX_GPIO61", 0x0c8,
+ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
++
++MUX_CFG_34XX("AG4_34XX_GPIO134", 0x160,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("U8_34XX_GPIO54", 0x0b4,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AE4_34XX_GPIO136", 0x164,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("F3_34XX_GPIO57_UP", 0x0ba,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
++MUX_CFG_34XX("G4_34XX_GPIO58_OUT", 0x0bc,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("W2_34XX_GPIO59", 0x0be,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("L1_34XX_GPIO61_OUT", 0x0c8,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("C2_34XX_GPIO65", 0x0d2,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("N21_34XX_GPIO127_UP", 0x152,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
++MUX_CFG_34XX("A23_34XX_GPIO163_UP", 0x19a,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
++MUX_CFG_34XX("B23_34XX_GPIO164_OUT", 0x19c,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AA6_34XX_GPIO164_OUT", 0x1e2,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++
++/* GPMC */
++MUX_CFG_34XX("F4_34XX_GPMC_NCS4", 0x0b6, OMAP34XX_MUX_MODE0)
++MUX_CFG_34XX("G5_34XX_GPMC_NCS5", 0x0b8, OMAP34XX_MUX_MODE0)
++
++/* McSPI 1 */
++MUX_CFG_34XX("T5_34XX_MCSPI1_CLK", 0x1c8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("R4_34XX_MCSPI1_SIMO", 0x1ca,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T4_34XX_MCSPI1_SOMI", 0x1cc,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T6_34XX_MCSPI1_CS0", 0x1ce,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT_PULLDOWN)
++
++/* McBSP 2 */
++MUX_CFG_34XX("V20_34XX_MCBSP2_FSX", 0x13c,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T21_34XX_MCBSP2_CLKX", 0x13e,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("V19_34XX_MCBSP2_DR", 0x140,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("R20_34XX_MCBSP2_DX", 0x142,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++
++MUX_CFG_34XX("F21_34XX_GPIO109_OUT", 0x12a,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++
++/* Serial ports */
++MUX_CFG_34XX("W4_34XX_UART2_TX", 0x170,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("V4_34XX_UART2_RX", 0x172,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("W7_34XX_UART1_TX", 0x17c,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("V7_34XX_UART1_RX", 0x182,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++
++/* DSS */
++MUX_CFG_34XX("G22_34XX_DSS_PCLK", 0x0d4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("E22_34XX_DSS_HSYNC", 0x0d6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("F22_34XX_DSS_VSYNC", 0x0d8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("J21_34XX_DSS_ACBIAS", 0x0da,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC19_34XX_DSS_DATA0", 0x0dc,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AB19_34XX_DSS_DATA1", 0x0de,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AD20_34XX_DSS_DATA2", 0x0e0,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC20_34XX_DSS_DATA3", 0x0e2,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AD21_34XX_DSS_DATA4", 0x0e4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC21_34XX_DSS_DATA5", 0x0e6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("D24_34XX_DSS_DATA6", 0x0e8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("E23_34XX_DSS_DATA7", 0x0ea,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("E24_34XX_DSS_DATA8", 0x0ec,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("F23_34XX_DSS_DATA9", 0x0ee,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC22_34XX_DSS_DATA10", 0x0f0,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC23_34XX_DSS_DATA11", 0x0f2,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AB22_34XX_DSS_DATA12", 0x0f4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("Y22_34XX_DSS_DATA13", 0x0f6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("W22_34XX_DSS_DATA14", 0x0f8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("V22_34XX_DSS_DATA15", 0x0fa,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("J22_34XX_DSS_DATA16", 0x0fc,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("G23_34XX_DSS_DATA17", 0x0fe,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("G24_34XX_DSS_DATA18", 0x100,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("H23_34XX_DSS_DATA19", 0x102,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("D23_34XX_DSS_DATA20", 0x104,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("K22_34XX_DSS_DATA21", 0x106,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("V21_34XX_DSS_DATA22", 0x108,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("W21_34XX_DSS_DATA23", 0x10a,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
+ };
+
+ #define OMAP34XX_PINS_SZ ARRAY_SIZE(omap34xx_pins)
+diff --git a/arch/arm/plat-omap/include/plat/mux.h b/arch/arm/plat-omap/include/plat/mux.h
+index ba77de6..119379c 100644
+--- a/arch/arm/plat-omap/include/plat/mux.h
++++ b/arch/arm/plat-omap/include/plat/mux.h
+@@ -692,6 +692,20 @@ enum omap34xx_index {
+ AD26_34XX_I2C4_SCL,
+ AE26_34XX_I2C4_SDA,
+
++ /* HSUSB Port 0 */
++ R21_3430_USB0HS_PHY_CLK,
++ R23_3430_USB0HS_PHY_STP,
++ P23_3430_USB0HS_PHY_DIR,
++ R22_3430_USB0HS_PHY_NXT,
++ T24_3430_USB0HS_PHY_DATA0,
++ T23_3430_USB0HS_PHY_DATA1,
++ U24_3430_USB0HS_PHY_DATA2,
++ U23_3430_USB0HS_PHY_DATA3,
++ W24_3430_USB0HS_PHY_DATA4,
++ V23_3430_USB0HS_PHY_DATA5,
++ W23_3430_USB0HS_PHY_DATA6,
++ T22_3430_USB0HS_PHY_DATA7,
++
+ /* PHY - HSUSB: 12-pin ULPI PHY: Port 1*/
+ Y8_3430_USB1HS_PHY_CLK,
+ Y9_3430_USB1HS_PHY_STP,
+@@ -839,6 +853,11 @@ enum omap34xx_index {
+ AF3_3430_MMC2_DAT6,
+ AE3_3430_MMC2_DAT7,
+
++ AB2_3430_MMC2_DIR_DAT0,
++ AA2_3430_MMC2_DIR_DAT1,
++ Y2_3430_MMC2_DIR_CMD,
++ AA1_3420_MMC2_CLKIN,
++
+ /* MMC3 */
+ AF10_3430_MMC3_CLK,
+ AC3_3430_MMC3_CMD,
+@@ -854,6 +873,73 @@ enum omap34xx_index {
+ AH14_34XX_GPIO21,
+ AF9_34XX_GPIO22,
+ U3_34XX_GPIO61,
++
++ AG4_34XX_GPIO134,
++ U8_34XX_GPIO54,
++ AE4_34XX_GPIO136,
++ F3_34XX_GPIO57_UP,
++ G4_34XX_GPIO58_OUT,
++ W2_34XX_GPIO59,
++ L1_34XX_GPIO61_OUT,
++ C2_34XX_GPIO65,
++ N21_34XX_GPIO127_UP,
++ A23_34XX_GPIO163_UP,
++ B23_34XX_GPIO164_OUT,
++ AA6_34XX_GPIO186_OUT,
++
++ /* gpmc */
++ F4_34XX_GPMC_NCS4,
++ G5_34XX_GPMC_NCS5,
++
++ /* McSPI 1 */
++ T5_34XX_MCSPI1_CLK,
++ R4_34XX_MCSPI1_SIMO,
++ T4_34XX_MCSPI1_SOMI,
++ T6_34XX_MCSPI1_CS0,
++
++ /* McBSP 2 */
++ V20_34XX_MCBSP2_FSX,
++ T21_34XX_MCBSP2_CLKX,
++ V19_34XX_MCBSP2_DR,
++ R20_34XX_MCBSP2_DX,
++
++ F21_34XX_GPIO109_OUT,
++
++ /* serial ports */
++ W4_34XX_UART2_TX,
++ V4_34XX_UART2_RX,
++ W7_34XX_UART1_TX,
++ V7_34XX_UART1_RX,
++
++ /* DSS */
++ G22_34XX_DSS_PCLK,
++ E22_34XX_DSS_HSYNC,
++ F22_34XX_DSS_VSYNC,
++ J21_34XX_DSS_ACBIAS,
++ AC19_34XX_DSS_DATA0,
++ AB19_34XX_DSS_DATA1,
++ AD20_34XX_DSS_DATA2,
++ AC20_34XX_DSS_DATA3,
++ AD21_34XX_DSS_DATA4,
++ AC21_34XX_DSS_DATA5,
++ D24_34XX_DSS_DATA6,
++ E23_34XX_DSS_DATA7,
++ E24_34XX_DSS_DATA8,
++ F23_34XX_DSS_DATA9,
++ AC22_34XX_DSS_DATA10,
++ AC23_34XX_DSS_DATA11,
++ AB22_34XX_DSS_DATA12,
++ Y22_34XX_DSS_DATA13,
++ W22_34XX_DSS_DATA14,
++ V22_34XX_DSS_DATA15,
++ J22_34XX_DSS_DATA16,
++ G23_34XX_DSS_DATA17,
++ G24_34XX_DSS_DATA18,
++ H23_34XX_DSS_DATA19,
++ D23_34XX_DSS_DATA20,
++ K22_34XX_DSS_DATA21,
++ V21_34XX_DSS_DATA22,
++ W21_34XX_DSS_DATA23,
+ };
+
+ struct omap_mux_cfg {
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0006-omap3-cm-t35-update-defconfig.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0006-omap3-cm-t35-update-defconfig.patch
new file mode 100644
index 0000000000..a9034f08a7
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0006-omap3-cm-t35-update-defconfig.patch
@@ -0,0 +1,87 @@
+From 88f7dc4c115c57b12de7ab4170bdaaeba145283b Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Mon, 7 Dec 2009 11:07:55 +0200
+Subject: [PATCH 6/6] omap3: cm-t35: update defconfig
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ arch/arm/configs/cm_t35_defconfig | 28 ++++++++++++++++++++++------
+ 1 files changed, 22 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/configs/cm_t35_defconfig b/arch/arm/configs/cm_t35_defconfig
+index bd6f882..78eeb66 100644
+--- a/arch/arm/configs/cm_t35_defconfig
++++ b/arch/arm/configs/cm_t35_defconfig
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.32-rc8
+-# Tue Dec 1 12:08:44 2009
++# Linux kernel version: 2.6.32
++# Mon Dec 7 10:43:46 2009
+ #
+ CONFIG_ARM=y
+ CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+@@ -572,7 +572,15 @@ CONFIG_MTD_NAND_IDS=y
+ #
+ # UBI - Unsorted block images
+ #
+-# CONFIG_MTD_UBI is not set
++CONFIG_MTD_UBI=y
++CONFIG_MTD_UBI_WL_THRESHOLD=4096
++CONFIG_MTD_UBI_BEB_RESERVE=1
++# CONFIG_MTD_UBI_GLUEBI is not set
++
++#
++# UBI debugging options
++#
++# CONFIG_MTD_UBI_DEBUG is not set
+ # CONFIG_PARPORT is not set
+ CONFIG_BLK_DEV=y
+ # CONFIG_BLK_DEV_COW_COMMON is not set
+@@ -1506,6 +1514,12 @@ CONFIG_JFFS2_RTIME=y
+ CONFIG_JFFS2_CMODE_PRIORITY=y
+ # CONFIG_JFFS2_CMODE_SIZE is not set
+ # CONFIG_JFFS2_CMODE_FAVOURLZO is not set
++CONFIG_UBIFS_FS=y
++# CONFIG_UBIFS_FS_XATTR is not set
++# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
++CONFIG_UBIFS_FS_LZO=y
++CONFIG_UBIFS_FS_ZLIB=y
++# CONFIG_UBIFS_FS_DEBUG is not set
+ # CONFIG_CRAMFS is not set
+ # CONFIG_SQUASHFS is not set
+ # CONFIG_VXFS_FS is not set
+@@ -1775,9 +1789,9 @@ CONFIG_CRYPTO_DES=y
+ #
+ # Compression
+ #
+-# CONFIG_CRYPTO_DEFLATE is not set
++CONFIG_CRYPTO_DEFLATE=y
+ # CONFIG_CRYPTO_ZLIB is not set
+-# CONFIG_CRYPTO_LZO is not set
++CONFIG_CRYPTO_LZO=y
+
+ #
+ # Random Number Generation
+@@ -1792,7 +1806,7 @@ CONFIG_CRYPTO_HW=y
+ CONFIG_BITREVERSE=y
+ CONFIG_GENERIC_FIND_LAST_BIT=y
+ CONFIG_CRC_CCITT=y
+-# CONFIG_CRC16 is not set
++CONFIG_CRC16=y
+ # CONFIG_CRC_T10DIF is not set
+ # CONFIG_CRC_ITU_T is not set
+ CONFIG_CRC32=y
+@@ -1800,6 +1814,8 @@ CONFIG_CRC32=y
+ CONFIG_LIBCRC32C=y
+ CONFIG_ZLIB_INFLATE=y
+ CONFIG_ZLIB_DEFLATE=y
++CONFIG_LZO_COMPRESS=y
++CONFIG_LZO_DECOMPRESS=y
+ CONFIG_DECOMPRESS_GZIP=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/defconfig b/recipes/linux/linux-omap-2.6.32/cm-t35/defconfig
new file mode 100644
index 0000000000..78eeb66d59
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/defconfig
@@ -0,0 +1,1823 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Mon Dec 7 10:43:46 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=17
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_BCMRING is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+# CONFIG_ARCH_OMAP4 is not set
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
+# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_MUX=y
+# CONFIG_OMAP_MUX_DEBUG is not set
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+# CONFIG_OMAP_MBOX_FWK is not set
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+CONFIG_OMAP_LL_DEBUG_UART3=y
+# CONFIG_OMAP_LL_DEBUG_NONE is not set
+# CONFIG_OMAP_PM_NONE is not set
+CONFIG_OMAP_PM_NOOP=y
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP3_BEAGLE is not set
+# CONFIG_MACH_OMAP_LDP is not set
+# CONFIG_MACH_OVERO is not set
+# CONFIG_MACH_OMAP3EVM is not set
+# CONFIG_MACH_OMAP3517EVM is not set
+# CONFIG_MACH_OMAP3_PANDORA is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_NOKIA_RX51 is not set
+# CONFIG_MACH_OMAP_ZOOM2 is not set
+# CONFIG_MACH_OMAP_ZOOM3 is not set
+CONFIG_MACH_CM_T35=y
+# CONFIG_MACH_IGEP0020 is not set
+# CONFIG_MACH_OMAP_3630SDP is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_V7=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_ARM_THUMBEE is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_HAS_TLS_REG=y
+CONFIG_ARM_L1_CACHE_SHIFT=6
+# CONFIG_ARM_ERRATA_430973 is not set
+# CONFIG_ARM_ERRATA_458693 is not set
+# CONFIG_ARM_ERRATA_460075 is not set
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=128
+# CONFIG_THUMB2_KERNEL is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_CFG80211_DEFAULT_PS_VALUE=0
+# CONFIG_WIRELESS_OLD_REGULATORY is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=m
+# CONFIG_LIB80211_DEBUG is not set
+
+#
+# CFG80211 needs to be enabled for MAC80211
+#
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_OMAP_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_OMAP2=y
+CONFIG_MTD_NAND_OMAP_PREFETCH=y
+# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+CONFIG_SMSC911X=y
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_LIBERTAS=m
+# CONFIG_LIBERTAS_USB is not set
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_SPI is not set
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+CONFIG_KEYBOARD_TWL4030=m
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_OMAP24XX=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_TWL4030=y
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+# CONFIG_TWL4030_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+CONFIG_TWL4030_CORE=y
+# CONFIG_TWL4030_POWER is not set
+# CONFIG_TWL4030_CODEC is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+CONFIG_REGULATOR_TWL4030=y
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_OMAP2_VRAM=y
+CONFIG_OMAP2_VRFB=y
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_VRAM_SIZE=4
+CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+# CONFIG_OMAP2_DSS_SDI is not set
+# CONFIG_OMAP2_DSS_DSI is not set
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
+CONFIG_FB_OMAP2=y
+CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+
+#
+# OMAP2/3 Display Device Drivers
+#
+CONFIG_PANEL_GENERIC=y
+# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+CONFIG_PANEL_TOPPOLY_TDO35S=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+CONFIG_LCD_TDO24M=y
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+# CONFIG_HID_A4TECH is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_DRAGONRISE is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_KYE is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+# CONFIG_HID_LOGITECH is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_PANTHERLORD is not set
+# CONFIG_HID_PETALYNX is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SONY is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+CONFIG_USB_MUSB_OTG=y
+CONFIG_USB_GADGET_MUSB_HDRC=y
+CONFIG_USB_MUSB_HDRC_HCD=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+# CONFIG_USB_TI_CPPI_DMA is not set
+# CONFIG_USB_MUSB_DEBUG is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+CONFIG_USB_TEST=y
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_ETH_EEM is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_ISP1301_OMAP is not set
+CONFIG_TWL4030_USB=y
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_OMAP is not set
+CONFIG_MMC_OMAP_HS=y
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_TWL4030=y
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+CONFIG_QUOTA_TREE=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_BOOT_TRACER is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_ARM_UNWIND=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-omap-2.6.32/usb/ehci-omap.c-mach-to-plat.diff b/recipes/linux/linux-omap-2.6.32/usb/ehci-omap.c-mach-to-plat.diff
new file mode 100644
index 0000000000..faa1ae025c
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/usb/ehci-omap.c-mach-to-plat.diff
@@ -0,0 +1,12 @@
+--- a/drivers/usb/host/ehci-omap.c
++++ b/drivers/usb/host/ehci-omap.c
+@@ -37,7 +37,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/clk.h>
+ #include <linux/gpio.h>
+-#include <mach/usb.h>
++#include <plat/usb.h>
+
+ /*
+ * OMAP USBHOST Register addresses: VIRTUAL ADDRESSES
+
diff --git a/recipes/linux/linux-omap-2.6.32/usb/ehci.patch b/recipes/linux/linux-omap-2.6.32/usb/ehci.patch
new file mode 100644
index 0000000000..569561185a
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/usb/ehci.patch
@@ -0,0 +1,46 @@
+From patchwork Wed Nov 25 08:56:48 2009
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [2/2] usb: ehci: Allow EHCI to be built on OMAP3
+Date: Wed, 25 Nov 2009 08:56:48 -0000
+From: Olof Johansson <olof@lixom.net>
+X-Patchwork-Id: 62727
+
+OMAP34XX has EHCI, so select USB_ARCH_HAS_EHCI.
+
+Signed-off-by: Olof Johansson <olof@lixom.net>
+Acked-by: Anand Gadiyar <gadiyar@ti.com>
+
+---
+On Sat, Nov 07, 2009 at 01:16:32AM +0530, Anand Gadiyar wrote:
+> usb: ehci: Allow EHCI to be built on OMAP3
+>
+> OMAP3 chips have a built-in EHCI controller.
+> The recently introduced omap ehci-hcd driver missed
+> out on selecting USB_ARCH_HAS_EHCI in Kconfig.
+>
+> Without this, the driver cannot be built.
+
+This is a losing battle. It scales much better to select the option
+from OMAP34XX, instead of starting to enumerate the various platforms
+in drivers/usb.
+
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-omap" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+
+diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
+index 034d990..a913b05 100644
+--- a/arch/arm/mach-omap2/Kconfig
++++ b/arch/arm/mach-omap2/Kconfig
+@@ -18,6 +18,7 @@ config ARCH_OMAP2430
+ config ARCH_OMAP34XX
+ bool "OMAP34xx Based System"
+ depends on ARCH_OMAP3
++ select USB_ARCH_HAS_EHCI
+
+ config ARCH_OMAP3430
+ bool "OMAP3430 support"
diff --git a/recipes/linux/linux-omap_2.6.32.bb b/recipes/linux/linux-omap_2.6.32.bb
new file mode 100644
index 0000000000..71405b7f63
--- /dev/null
+++ b/recipes/linux/linux-omap_2.6.32.bb
@@ -0,0 +1,33 @@
+require linux.inc
+
+DESCRIPTION = "Linux kernel for OMAP processors"
+KERNEL_IMAGETYPE = "uImage"
+
+COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|omap3evm|omap3-pandora|overo|omapzoom|omapzoom2|omap4430-sdp|cm-t35"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_cm-t35 = "1"
+
+SRCREV = "6833f1a8cdcb65a370f898bde6b6af63f81962df"
+
+# The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
+PV = "2.6.32"
+
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git;protocol=git \
+ file://defconfig"
+
+SRC_URI_append = " \
+file://cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch;patch=1 \
+file://cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch;patch=1 \
+file://cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch;patch=1 \
+file://cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch;patch=1 \
+file://cm-t35/0006-omap3-cm-t35-update-defconfig.patch;patch=1 \
+"
+
+SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \
+"
+
+S = "${WORKDIR}/git"
+
+module_autoload_ohci-hcd_omap5912osk = "ohci-hcd"
+
diff --git a/recipes/linux/linux/simone/defconfig b/recipes/linux/linux/simone/defconfig
new file mode 100644
index 0000000000..72e6c48d25
--- /dev/null
+++ b/recipes/linux/linux/simone/defconfig
@@ -0,0 +1,1751 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Thu Dec 3 18:28:09 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+CONFIG_SLOW_WORK=y
+# CONFIG_SLOW_WORK_DEBUG is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+CONFIG_ARCH_EP93XX=y
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+
+#
+# Cirrus EP93xx Implementation Options
+#
+CONFIG_CRUNCH=y
+
+#
+# EP93xx Platforms
+#
+# CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET is not set
+CONFIG_EP93XX_SDCE0_PHYS_OFFSET=y
+# CONFIG_EP93XX_SDCE1_PHYS_OFFSET is not set
+# CONFIG_EP93XX_SDCE2_PHYS_OFFSET is not set
+# CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET is not set
+CONFIG_MACH_EDB93XX=y
+CONFIG_MACH_EDB9302A=y
+CONFIG_MACH_EDB9307A=y
+CONFIG_MACH_EDB9315A=y
+CONFIG_MACH_SIM_ONE=y
+CONFIG_EP93XX_EARLY_UART1=y
+# CONFIG_EP93XX_EARLY_UART2 is not set
+# CONFIG_EP93XX_EARLY_UART3 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+CONFIG_ARM_VIC=y
+CONFIG_ARM_VIC_NR=2
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_UACCESS_WITH_MEMCPY=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Power Management
+#
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NET_DROP_MONITOR is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+# CONFIG_BT_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_BT_MRVL is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_WIRELESS is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_LIB80211=m
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+# CONFIG_MTD_PHYSMAP_COMPAT is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+CONFIG_MTD_M25P80=m
+CONFIG_M25PXX_USE_FAST_READ=y
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=y
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_ATA_OVER_ETH=m
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+CONFIG_EP93XX_PWM=m
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+CONFIG_EEPROM_AT24=y
+CONFIG_EEPROM_AT25=y
+CONFIG_EEPROM_LEGACY=y
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+CONFIG_SCSI_MULTI_LUN=y
+CONFIG_SCSI_CONSTANTS=y
+# CONFIG_SCSI_LOGGING is not set
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_EP93XX_ETH=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_SDIO=m
+CONFIG_LIBERTAS_SPI=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_CDC_EEM is not set
+CONFIG_USB_NET_DM9601=m
+# CONFIG_USB_NET_SMSC95XX is not set
+# CONFIG_USB_NET_GL620A is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_USB_NET_INT51X1 is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_APMPOWER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_EP93XX is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+CONFIG_TOUCHSCREEN_EP93XX=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_UINPUT=m
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL010=y
+CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+# CONFIG_SERIAL_AMBA_PL011 is not set
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+CONFIG_I2C_EP93XX=y
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_EP93XX=y
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_PL022 is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_PL061 is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_EP93XX_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_ARMCLCD is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+CONFIG_FB_EP93XX=y
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_LOGO is not set
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# Special HID drivers
+#
+# CONFIG_HID_A4TECH is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_DRAGONRISE is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_KYE is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+# CONFIG_HID_LOGITECH is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_PANTHERLORD is not set
+# CONFIG_HID_PETALYNX is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SONY is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+CONFIG_USB_DYNAMIC_MINORS=y
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=m
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP210X is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_QUALCOMM is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_SYMBOL is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_OPTICON is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+# CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_ARMMMCI is not set
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+CONFIG_MMC_SPI=y
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=m
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_EP93XX=y
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+CONFIG_CUSE=m
+
+#
+# Caches
+#
+CONFIG_FSCACHE=y
+# CONFIG_FSCACHE_STATS is not set
+# CONFIG_FSCACHE_HISTOGRAM is not set
+# CONFIG_FSCACHE_DEBUG is not set
+# CONFIG_FSCACHE_OBJECT_LIST is not set
+# CONFIG_CACHEFILES is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+# CONFIG_JFFS2_CMODE_PRIORITY is not set
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_JFFS2_CMODE_FAVOURLZO=y
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_XATTR=y
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+CONFIG_CRAMFS=y
+CONFIG_SQUASHFS=y
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFS_FSCACHE is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+CONFIG_NLS_CODEPAGE_852=y
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+CONFIG_DEBUG_SLAB=y
+# CONFIG_DEBUG_SLAB_LEAK is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_STACKTRACE=y
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_NOP_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_EVENT_TRACING=y
+CONFIG_CONTEXT_SWITCH_TRACER=y
+CONFIG_RING_BUFFER_ALLOW_SWAP=y
+CONFIG_TRACING=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_BOOT_TRACER is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_RING_BUFFER_BENCHMARK is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_ARM_UNWIND=y
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+CONFIG_BINARY_PRINTF=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux_2.6.32.bb b/recipes/linux/linux_2.6.32.bb
new file mode 100644
index 0000000000..99db01bf8b
--- /dev/null
+++ b/recipes/linux/linux_2.6.32.bb
@@ -0,0 +1,46 @@
+require linux.inc
+
+PR = "r1"
+
+S = "${WORKDIR}/linux-${PV}"
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_simone = "1"
+DEFAULT_PREFERENCE_akita = "-1"
+DEFAULT_PREFERENCE_c7x0 = "-1"
+DEFAULT_PREFERENCE_collie = "-1"
+DEFAULT_PREFERENCE_poodle = "-1"
+DEFAULT_PREFERENCE_spitz = "-1"
+DEFAULT_PREFERENCE_tosa = "-1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \
+ file://defconfig"
+
+SRC_URI[kernel.md5sum] = "260551284ac224c3a43c4adac7df4879"
+SRC_URI[kernel.sha256sum] = "5099786d80b8407d98a619df00209c2353517f22d804fdd9533b362adcb4504e"
+
+# part of 2.6.24.7 patchset from Sim.One project
+# other patches needs work
+SRC_URI_append_simone = " \
+ file://ep93xx/edb9301-fix-machine-id.patch;patch=1 \
+ file://ep93xx/simone-board-def.patch;patch=1 \
+ file://ep93xx/ep93xx-regs.patch;patch=1 \
+ file://ep93xx/ep93xx-i2c.patch;patch=1 \
+ file://ep93xx/ep93xx-touchscreen.patch;patch=1 \
+ file://ep93xx/ep93xx-spi.patch;patch=1 \
+ file://ep93xx/ep93xx-cpuinfo.patch;patch=1 "
+
+# Zaurus family bootloader patches
+RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
+ZAURUSPATCHES = " ${RPSRC}/pxa-linking-bug-r1.patch;patch=1;status=unmergable;name=pxa-linking-bug-r1 "
+SRC_URI[pxa-linking-bug-r1.md5sum] = "1e2a99787260c3566033e7f41180e2c8"
+SRC_URI[pxa-linking-bug-r1.sha256sum] = "785d2680022325ad54c1593082dce902f5fee31dae4c1922ba43956b1dcfcd8b"
+
+# Machine specific patches
+SRC_URI_append_akita = "${ZAURUSPATCHES}"
+SRC_URI_append_c7x0 = "${ZAURUSPATCHES}"
+SRC_URI_append_collie = "${ZAURUSPATCHES}"
+SRC_URI_append_poodle = "${ZAURUSPATCHES}"
+SRC_URI_append_spitz = "${ZAURUSPATCHES}"
+SRC_URI_append_tosa = "${ZAURUSPATCHES}"
diff --git a/recipes/matchbox2/matchbox2/matchbox-session-2.in b/recipes/matchbox2/matchbox2/matchbox-session-2.in
index 6e13fe0d69..60e599be0e 100644
--- a/recipes/matchbox2/matchbox2/matchbox-session-2.in
+++ b/recipes/matchbox2/matchbox2/matchbox-session-2.in
@@ -8,7 +8,7 @@ if [ -e /etc/profile ]
then
. /etc/profile
fi
-if [ -e $HOME/profile ]
+if [ -e $HOME/.profile ]
then
. $HOME/.profile
fi
diff --git a/recipes/matchbox2/matchbox2_2.0.bb b/recipes/matchbox2/matchbox2_2.0.bb
index 1762ff4766..fc7e9ef39d 100644
--- a/recipes/matchbox2/matchbox2_2.0.bb
+++ b/recipes/matchbox2/matchbox2_2.0.bb
@@ -3,7 +3,7 @@ LICENSE = "GPL"
DEPENDS = "matchbox-wm-2 matchbox-panel-2 matchbox-desktop-2"
RDEPENDS = "matchbox-wm-2 matchbox-panel-2 matchbox-desktop-2"
SECTION = "x11/wm"
-PR = "r0"
+PR = "r1"
SRC_URI = "file://matchbox-session-2.in \
file://defaults.in \
diff --git a/recipes/moblin/librest_git.bb b/recipes/moblin/librest_git.bb
index ec2d676fd5..0576c0dd8d 100644
--- a/recipes/moblin/librest_git.bb
+++ b/recipes/moblin/librest_git.bb
@@ -1,7 +1,8 @@
SRC_URI = "git://git.moblin.org/${PN}.git;protocol=git"
+SRCREV="18bce68c8e54032f2d7e78a8484ac892ba3ebd5a"
PV = "0.0+git${SRCREV}"
-PR = "r0"
+PR = "r1"
DEPENDS = "libsoup-2.4"
diff --git a/recipes/mokoeightball/files/fixpath.patch b/recipes/mokoeightball/files/fixpath.patch
new file mode 100644
index 0000000000..8fd82cf27e
--- /dev/null
+++ b/recipes/mokoeightball/files/fixpath.patch
@@ -0,0 +1,63 @@
+Index: ./python/src/eightball.py
+===================================================================
+--- ./python/src/eightball.py (revision 45)
++++ ./python/src/eightball.py (working copy)
+@@ -47,12 +47,6 @@
+ shakeTimer = None
+
+ def __init__( self, size ):
+- # Check if we can use accelerated rendering
+- if ecore.evas.engine_type_supported_get("software_x11_16"):
+- self.engine = ecore.evas.SoftwareX11_16
+- else:
+- print "warning: x11-16 is not supported, fallback to x11"
+- self.engine = ecore.evas.SoftwareX11
+
+ self.size = size
+
+@@ -63,7 +57,12 @@
+ self.accel.addListener( "shake", self.onShake )
+
+ # Initialize the renderer and set all initial properties
+- self.ee = self.engine( w = size[0], h = size[1] )
++ try:
++ self.engine = ecore.evas.SoftwareX11_16
++ self.ee = self.engine( w = size[0], h = size[1] )
++ except e:
++ self.engine = ecore.evas.SoftwareX11
++ self.ee = self.engine( w = size[0], h = size[1] )
+ self.ee.title = "Moko Eightball"
+ self.ee.name_class = ( "MOKO_EIGHTBALL", "MOKO_EIGHTBALL" )
+ # self.ee.fullscreen = True
+Index: ./python/src/Accelerometer/__init__.py
+===================================================================
+--- ./python/src/Accelerometer/__init__.py (revision 45)
++++ ./python/src/Accelerometer/__init__.py (working copy)
+@@ -30,7 +30,7 @@
+
+ class EventManager(object):
+ movementTolerance = 30
+- shakeTolerance = 2100
++ shakeTolerance = 100
+
+ listeners = dict(
+ shake = [],
+@@ -82,15 +82,15 @@
+ # Inform all listeners
+ self.informListeners()
+ break
+- if ( type == 2 and code == 0 ):
++ if ( type == 3 and code == 0 ):
+ # Update x
+ x = value
+ continue
+- if ( type == 2 and code == 1 ):
++ if ( type == 3 and code == 1 ):
+ # Update y
+ y = value
+ continue
+- if ( type == 2 and code == 2 ):
++ if ( type == 3 and code == 2 ):
+ # Update z
+ z = value
+ continue
diff --git a/recipes/mokoeightball/mokoeightball_svn.bb b/recipes/mokoeightball/mokoeightball_svn.bb
new file mode 100644
index 0000000000..dde59cb018
--- /dev/null
+++ b/recipes/mokoeightball/mokoeightball_svn.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "Magic 8 Ball"
+HOMEPAGE = "http://www.opkg.org/package_35.html"
+AUTHOR = "Jakob Westhoff"
+LICENSE = "GPLv2"
+SECTION = "x11/game"
+SRCREV = "45"
+PV = "0.2+svnr${SRCPV}"
+PR = "r0"
+S = "${WORKDIR}/"
+FILES_${PN} += /usr/share/moko_eightball/Accelerometer/__init__.py
+FILES_${PN} += /usr/share/moko_eightball/themes/eightball.edj
+
+SRC_URI = "svn://svn.pureenergy.cc/moko_eightball;module=.;proto=svn \
+ file://files/fixpath.patch;patch=1"
+
+do_compile() {
+ cd python/src/data/themes
+ ./maketheme.sh
+}
+
+do_install() {
+ cd python
+ install -d 0755 ${D}/usr/share/moko_eightball
+ install -d 0755 ${D}/usr/share/moko_eightball/Accelerometer
+ install -d 0755 ${D}/usr/share/moko_eightball/themes
+ install -d 0755 ${D}/usr/share/applications
+ install -d 0755 ${D}/usr/share/pixmaps
+ install -d 0755 ${D}/usr/bin
+ install -m 0755 src/eightball.py ${D}/usr/bin/eightball
+ install -m 0644 src/Accelerometer/__init__.py ${D}/usr/share/moko_eightball/Accelerometer/
+ install -m 0644 src/data/themes/eightball.edj ${D}/usr/share/moko_eightball/themes/eightball.edj
+ install -m 0644 ipk/usr/share/applications/eightball.desktop ${D}/usr/share/applications/eightball.desktop
+ install -m 0644 ipk/usr/share/pixmaps/eightball.png ${D}/usr/share/pixmaps/eightball.png
+}
diff --git a/recipes/mythtv/mythtv_0.22.bb b/recipes/mythtv/mythtv_0.22.bb
index 0ff2b4d0c6..ac6d2f8d30 100644
--- a/recipes/mythtv/mythtv_0.22.bb
+++ b/recipes/mythtv/mythtv_0.22.bb
@@ -5,7 +5,7 @@ mysql5-server mysql5-client"
RDEPENDS_${PN}_append_libc-glibc = " glibc-gconv-utf-16"
PV = "0.22"
-PR = "r0"
+PR = "r1"
# REALPV is here to support release candidates
# OE in that case has as PV something like 0.21+0.22rc1
# but for packaging the real PV is needed
@@ -60,38 +60,6 @@ do_install() {
install -d ${D}${datadir}/mythtv/sql
install -m 0644 ${S}/database/mc.sql ${D}${datadir}/mythtv/sql
}
-do_stage() {
- install -d ${STAGING_INCDIR}
- install -d ${STAGING_INCDIR}/${PN}
- install -d ${STAGING_INCDIR}/${PN}/dvdnav
- install -d ${STAGING_INCDIR}/${PN}/dvdread
- install -d ${STAGING_INCDIR}/${PN}/libavcodec
- install -d ${STAGING_INCDIR}/${PN}/libavformat
- install -d ${STAGING_INCDIR}/${PN}/libavutil
- install -d ${STAGING_INCDIR}/${PN}/libmyth
- install -d ${STAGING_INCDIR}/${PN}/libmythdb
- install -d ${STAGING_INCDIR}/${PN}/libmythui
- install -d ${STAGING_INCDIR}/${PN}/libswscale
- install -d ${STAGING_INCDIR}/${PN}/mpeg2dec
- install -d ${STAGING_INCDIR}/${PN}/upnp
- install -m 0644 ${D}/${includedir}/${PN}/*.h ${STAGING_INCDIR}/${PN}
- install -m 0644 ${D}/${includedir}/${PN}/mythconfig.mak ${STAGING_INCDIR}/${PN}
- install -m 0644 ${D}/${includedir}/${PN}/dvdnav/*.h ${STAGING_INCDIR}/${PN}/dvdnav
- install -m 0644 ${D}/${includedir}/${PN}/dvdread/*.h ${STAGING_INCDIR}/${PN}/dvdread
- install -m 0644 ${D}/${includedir}/${PN}/libavcodec/*.h ${STAGING_INCDIR}/${PN}/libavcodec
- install -m 0644 ${D}/${includedir}/${PN}/libavformat/*.h ${STAGING_INCDIR}/${PN}/libavformat
- install -m 0644 ${D}/${includedir}/${PN}/libavutil/*.h ${STAGING_INCDIR}/${PN}/libavutil
- install -m 0644 ${D}/${includedir}/${PN}/libmyth/*.h ${STAGING_INCDIR}/${PN}/libmyth
- install -m 0644 ${D}/${includedir}/${PN}/libmythdb/*.h ${STAGING_INCDIR}/${PN}/libmythdb
- install -m 0644 ${D}/${includedir}/${PN}/libmythui/*.h ${STAGING_INCDIR}/${PN}/libmythui
- install -m 0644 ${D}/${includedir}/${PN}/libswscale/*.h ${STAGING_INCDIR}/${PN}/libswscale
- install -m 0644 ${D}/${includedir}/${PN}/mpeg2dec/*.h ${STAGING_INCDIR}/${PN}/mpeg2dec
- install -m 0644 ${D}/${includedir}/${PN}/upnp/*.h ${STAGING_INCDIR}/${PN}/upnp
- # next part may need to be done better
- cp -R ${D}/${libdir}/* ${STAGING_LIBDIR}
- # ugly chmod ahead
- chmod -R ugo+r ${STAGING_LIBDIR}
-}
PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-database"
PACKAGES_DYNAMIC = "mythtv-theme-*"
diff --git a/recipes/navit/files/maps.xml b/recipes/navit/files/maps.xml
new file mode 100644
index 0000000000..6f59f20c39
--- /dev/null
+++ b/recipes/navit/files/maps.xml
@@ -0,0 +1,24 @@
+ <!-- If you have the reiseplaner maps installed, set enabled="yes" in the next line and set the path correctly -->
+ <mapset enabled="no">
+ <map type="mg" enabled="yes" data="/opt/reiseplaner/travel/DE.map"/>
+ <map type="mg" enabled="yes" data="/opt/reiseplaner/travel/DE.map/smp1.smp"/>
+ <map type="mg" enabled="yes" data="/opt/reiseplaner/travel/DE.map/smp2.smp"/>
+ <map type="mg" enabled="yes" data="/opt/reiseplaner/travel/DE.map/smp3.smp"/>
+ <map type="mg" enabled="yes" data="/opt/reiseplaner/travel/DE.map/smp4.smp"/>
+ <map type="mg" enabled="yes" data="/opt/reiseplaner/travel/DE.map/smp5.smp"/>
+ </mapset>
+
+ <!-- If you dont want to use the sample map, either set enabled="no" in the next line or remove the xml file from the maps directory -->
+ <mapset enabled="no">
+ <xi:include href="$NAVIT_SHAREDIR/maps/*.xml"/>
+ </mapset>
+
+ <!-- Mapset template for openstreetmaps -->
+ <mapset enabled="yes">
+ <map type="binfile" enabled="yes" data="/media/mmc2/MapsNavit/osm_europe.bin"/>
+ </mapset>
+
+ <!-- Mapset template for garmin maps -->
+ <mapset enabled="no">
+ <map type="garmin" enabled="yes" data="/path/to/img" debug="4"/>
+ </mapset>
diff --git a/recipes/navit/files/navit.desktop b/recipes/navit/files/navit.desktop
index 085c8c9238..05ecc1d4ee 100644
--- a/recipes/navit/files/navit.desktop
+++ b/recipes/navit/files/navit.desktop
@@ -2,7 +2,7 @@
Name=Navit
Comment=GPS Navigation
Exec=navit
-Icon=navit.png
+Icon=navit
Terminal=false
Type=Application
Categories=GTK;
diff --git a/recipes/navit/files/navit.xml b/recipes/navit/files/navit.xml
new file mode 100644
index 0000000000..cce85aaf2f
--- /dev/null
+++ b/recipes/navit/files/navit.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE config SYSTEM "navit.dtd">
+<config xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/plugins)"/>
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/debug)"/>
+
+ <navit center="4808 N 1134 E" zoom="256" tracking="1" orientation="-1" recent_dest="10">
+ <graphics type="gtk_drawing_area"/>
+ <gui type="gtk" enabled="no" menubar="1" toolbar="1" statusbar="1"/>
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/gui[@type='internal'])"/>
+ <xi:include href="/usr/share/navit/osd.xml"/>
+ <log enabled="no" type="textfile_debug" data="debug_%Y%m%d-%i.txt" flush_size="1000" flush_time="30"/>
+ <vehicle name="Local GPS" profilename="car" enabled="yes" active="1" source="gpsd://localhost" gpsd_query="w+xj">
+ <!-- <log type="gpx" attr_types="position_time_iso8601,position_direction,position_speed,profilename,position_radius" data="track_%Y%m%d-%i.gpx" flush_size="1000" flush_time="30"/> -->
+ </vehicle>
+
+ <vehicle name="Demo" profilename="car" enabled="no" active="yes" source="demo://"/>
+
+ <!-- For the cumulative displacement filter to be enabled, set cdf_histsize="x" here, with x being an integer somewhere around 4 -->
+ <tracking cdf_histsize="0"/>
+
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/vehicleprofile[@name='car'])"/>
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/vehicleprofile[@name='bike'])"/>
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/vehicleprofile[@name='pedestrian'])"/>
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/vehicleprofile[@name='horse'])"/>
+
+ <route destination_distance="50"/>
+
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/navigation)"/>
+
+ <xi:include href="/usr/share/navit/speech.xml"/>
+ <xi:include href="/usr/share/navit/maps.xml"/>
+
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/layout[@name='Car'])"/>
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/layout[@name='Car-dark'])"/>
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/layout[@name='Bike'])"/>
+ <xi:include href="/usr/share/navit/navit.default.xml" xpointer="xpointer(/config/navit/layout[@name='T@H'])"/>
+ </navit>
+</config>
diff --git a/recipes/navit/files/osd.xml b/recipes/navit/files/osd.xml
new file mode 100644
index 0000000000..2d0f9ffdf4
--- /dev/null
+++ b/recipes/navit/files/osd.xml
@@ -0,0 +1,15 @@
+ <!-- osd items allow to position display and control items directly on top of the map: -->
+ <osd enabled="no" type="compass"/>
+ <osd enabled="no" type="eta"/>
+ <osd enabled="no" type="navigation_distance_to_target"/>
+ <osd enabled="no" type="navigation"/>
+ <osd enabled="no" type="navigation_distance_to_next"/>
+ <osd enabled="no" type="navigation_next_turn"/>
+
+ <!-- Commands include gui_internal_menu, gui_internal_fullscreen, zoom_in and zoom_out.
+ Usage of negative values change the button origins. x="0" y="0" specifies the top left, x="-0" y="-0" the bottom right corner.
+ It's always the top left corner of the icon, so you need to consider the icon's size when you enter the values. -->
+ <osd enabled="no" type="button" x="0" y="0" command="gui.fullscreen()" src="toggle_fullscreen.xpm"/>
+ <osd enabled="no" type="button" x="-96" y="0" command="gui.menu()" src="menu.xpm"/>
+ <osd enabled="no" type="button" x="-96" y="-96" command="zoom_in()" src="zoom_in.xpm"/>
+ <osd enabled="no" type="button" x="0" y="-96" command="zoom_out()" src="zoom_out.xpm"/>
diff --git a/recipes/navit/files/shr/navit.desktop b/recipes/navit/files/shr/navit.desktop
new file mode 100644
index 0000000000..d313d6a63e
--- /dev/null
+++ b/recipes/navit/files/shr/navit.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=Navit
+Comment=GPS Navigation
+Exec=fsoraw -r CPU,GPS -- navit
+Icon=navit
+Terminal=false
+Type=Application
+Categories=GTK;
+MimeType=text/x-vcard;
+StartupNotify=true
diff --git a/recipes/navit/files/shr/navit.launcher b/recipes/navit/files/shr/navit.launcher
new file mode 100644
index 0000000000..68baaeb956
--- /dev/null
+++ b/recipes/navit/files/shr/navit.launcher
@@ -0,0 +1,57 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2008
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: navit.launcher
+# Date: 20080105 (YMD)
+#
+#################################################################################
+#
+# 20080105 - v0.0.1 - Initial release
+# 20090818 - - Zoff <zoff@zoff.cc> addons and fixes
+# 20091025 - - Zoff check if navit already running
+# 20091122 - - Zoff use fsoraw, use correct LANG setting
+#
+#
+#################################################################################
+
+# On devices with low memory (< 512Mb?) Navit will segfault on start.
+# This can be worked around by doing
+# "echo 1 > /proc/sys/vm/overcommit_memory"
+
+# check if navit already running:
+pgrep '^navit$'
+not_running=$?
+
+if [ $not_running == 0 ]; then
+ echo "navit already running !!"
+else
+ echo "ok starting navit ..."
+
+ # HINT: to get correct LANG setting
+ . /etc/profile
+
+ # HINT: we need that for streetname search
+ export LC_ALL=''
+ unset LC_ALL
+
+ # HINT: that should be set in illume, but atm its not
+ # export LANG=de_AT.utf8
+
+ if test "`cat /proc/meminfo | grep ^MemTotal | awk '{print $2}'`" -lt "500000"
+ then
+ if test "$USER" = "root"
+ then
+ echo "Enabling low-mem workaround..."
+ OLD=`cat /proc/sys/vm/overcommit_memory`
+ echo 1 > /proc/sys/vm/overcommit_memory
+ navit.real $*
+ echo ${OLD} > /proc/sys/vm/overcommit_memory
+ exit
+ else
+ echo "I need root-privs to enable the low-mem workaround!"
+ fi
+ fi
+ navit.real $*
+fi
diff --git a/recipes/navit/files/shr/navit.png b/recipes/navit/files/shr/navit.png
new file mode 100644
index 0000000000..76156d0334
--- /dev/null
+++ b/recipes/navit/files/shr/navit.png
Binary files differ
diff --git a/recipes/navit/files/shr/navitD.desktop b/recipes/navit/files/shr/navitD.desktop
new file mode 100644
index 0000000000..9a2378a3ea
--- /dev/null
+++ b/recipes/navit/files/shr/navitD.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Name=NavitD
+Comment=GPS Navigation Display blanking disabled
+Exec=fsoraw -r CPU,GPS,Display -- navit
+Icon=navitD
+Terminal=false
+Type=Application
+Categories=GTK;
+MimeType=text/x-vcard;
+StartupNotify=true
diff --git a/recipes/navit/files/shr/navitD.png b/recipes/navit/files/shr/navitD.png
new file mode 100644
index 0000000000..a23ba5ce03
--- /dev/null
+++ b/recipes/navit/files/shr/navitD.png
Binary files differ
diff --git a/recipes/navit/files/shr/osd.xml b/recipes/navit/files/shr/osd.xml
new file mode 100644
index 0000000000..a8a97d74c9
--- /dev/null
+++ b/recipes/navit/files/shr/osd.xml
@@ -0,0 +1,44 @@
+ <!-- FreeRunner Layout 3 -->
+ <osd enabled="yes" type="text" label="${navigation.item.street_name} ${navigation.item[1].street_name_systematic}" x="0" y="0" w="480" h="30" align="0" background_color="#000000cc" font_size="300" />
+ <osd enabled="yes" type="gps_status" x="430" y="0" w="65" h="30" align="0" background_color="#000000cc" font_size="300" />
+ <osd enabled="yes" type="compass" align="0" font_size="350" x="0" y="30" w="150" h="150" background_color="#000000cc" />
+ <osd enabled="yes" type="navigation_next_turn" x="-150" y="30" w="150" h="60" background_color="#000000cc" />
+ <osd enabled="yes" type="text" label="${navigation.item[1].length[named]}" x="-150" y="90" w="150" h="40" align="0" background_color="#000000cc" font_size="450"/>
+ <osd enabled="yes" type="button" x="-55" y="-90" command="zoom_in()" src="gui_zoom_in.svg"/>
+ <osd enabled="yes" type="button" x="5" y="-90" command="zoom_out()" src="gui_zoom_out.svg"/>
+ <osd enabled="yes" type="text" label="${vehicle.position_speed}" x="120" y="-50" w="240" h="25" align="0" background_color="#000000cc" font_size="280"/>
+ <osd enabled="yes" type="text" label="ETA:${navigation.item.destination_time[arrival]}" x="0" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
+ <osd enabled="yes" type="text" label="TL:${navigation.item.destination_time[remaining]}" x="160" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
+ <osd enabled="yes" type="text" label="Dist:${navigation.item.destination_length[named]}" x="320" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
+ <!-- / FreeRunner Layout 3 -->
+
+ <!-- Mineque's OSD 003 Layout -->
+ <!--osd enabled="yes" type="text" label="Currently On ${navigation.item.street_name} ${navigation.item[1].street_name_systematic}" x="0" y="0" w="735" h="35" align="16" background_color="#a60c0f00" font_size="430" src="gui_fullscreen.svg" />
+ <osd enabled="yes" type="gps_status" x="735" y="0" w="65" h="30" align="0" background_color="#a60c0f00" font_size="300" />
+ <osd enabled="yes" type="text" label="ETA:${navigation.item.destination_time[arrival]}" x="50" y="-100" w="275" h="70" align="4" background_color="#a60c0f01" font_size="500" />
+ <osd enabled="yes" type="text" label="TL:${navigation.item.destination_time[remaining]}" x="475" y="-100" w="275" h="70"align="4" background_color="#a60c0f00" font_size="500" />
+ <osd enabled="yes" type="text" label="Dist:${navigation.item.destination_length[named]}" x="50" y="-60" w="275" h="70" align="4" background_color="#a60c0f00" font_size="500" />
+ <osd enabled="yes" type="text" label="${vehicle.position_speed} / ${tracking.item.route_speed}" x="475" y="-60" w="275" h="70" align="4" background_color="#a60c0f00" font_size="500"/>
+ <osd enabled="yes" type="text" label="${navigation.item[1].length[named]}" x="325" y="-40" w="150" h="40" align="0" background_color="#a60c0f00" font_size="500"/>
+ <osd enabled="yes" type="navigation_next_turn" x="325" y="-135" w="150" h="100" align="15" background_color="#a60c0f00" />
+ <osd enabled="yes" type="button" x="0" y="-120" w="800" h="120" command="" src="/home/mineque/.navit/skins/Mineque_003/M_003_01.png" />
+ <osd enabled="yes" type="button" x="0" y="0" w="800" h="35" command="" src="/home/mineque/.navit/skins/Mineque_003/M_003_02.png" />
+ <osd enabled="yes" type="button" x="5" y="35" command="gui.fullscreen()" src="gui_fullscreen.svg"/>
+ <osd enabled="no" type="button" x="300" y="100" command="gui.menu()" src="menu.xpm"/>
+ <osd enabled="yes" type="button" x="5" y="475" command="zoom_in()" src="gui_zoom_in.svg"/>
+ <osd enabled="yes" type="button" x="-53" y="475" command="zoom_out()" src="gui_zoom_out.svg"/-->
+ <!-- / Mineque's OSD 003 Layout -->
+
+ <!-- Default -->
+ <!-- osd items allow to position display and control items directly on top of the map: -->
+ <!-- osd enabled="no" type="compass"/>
+ <osd enabled="no" type="eta"/>
+ <osd enabled="no" type="navigation_distance_to_target"/>
+ <osd enabled="no" type="navigation"/>
+ <osd enabled="no" type="navigation_distance_to_next"/>
+ <osd enabled="no" type="navigation_next_turn"/>
+ <osd enabled="no" type="button" x="0" y="0" command="gui.fullscreen()" src="toggle_fullscreen.xpm"/>
+ <osd enabled="no" type="button" x="-96" y="0" command="gui.menu()" src="menu.xpm"/>
+ <osd enabled="no" type="button" x="-96" y="-96" command="zoom_in()" src="zoom_in.xpm"/>
+ <osd enabled="no" type="button" x="0" y="-96" command="zoom_out()" src="zoom_out.xpm"/-->
+ <!-- Default -->
diff --git a/recipes/navit/files/speech.xml b/recipes/navit/files/speech.xml
new file mode 100644
index 0000000000..28c49906d9
--- /dev/null
+++ b/recipes/navit/files/speech.xml
@@ -0,0 +1,8 @@
+ <!-- Navit provides speech output in text format.
+ If you have a speech synthesizer like festival lite installed, you can get turn by turn directions out of navit. Please set the "cps"-value to how many characters your tts engine approximately speaks per second.
+ The default is text output to the shell -->
+ <!-- <speech type="cmdline" data="echo 'Fix the speech tag in navit.xml to let navit say:' '%s'" cps="15"/> -->
+ <!-- <speech type="cmdline" data="espeak -s 150 -v czech '%s' &amp;"/> -->
+ <!-- <speech type="cmdline" data="flite -t '%s'"/> -->
+ <!-- <speech type="cmdline" data="/usr/local/bin/say.sh '%s'"/> -->
+ <speech type="cmdline" data="espeak '%s' &amp;"/>
diff --git a/recipes/navit/navit-icons/configure.in b/recipes/navit/navit-icons/configure.in
new file mode 100644
index 0000000000..25259007e8
--- /dev/null
+++ b/recipes/navit/navit-icons/configure.in
@@ -0,0 +1,69 @@
+AC_INIT(navit, 0.2.0)
+SOURCE_MODE=svn
+
+AM_INIT_AUTOMAKE
+AM_CONFIG_HEADER(config.h)
+
+AC_SUBST(SOURCE_MODE)
+AM_CONDITIONAL(SOURCE_MODE_SVN, [test "x${SOURCE_MODE}" = "xsvn"])
+
+if test "x${SOURCE_MODE}" = "xsvn" ; then
+ USE_MAINTAINER_MODE=yes
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is enabled by default (reason of inclusion of this function)
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval)
+ 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])
+
+AM_MAINTAINER_MODE
+
+# svg
+AC_ARG_ENABLE(svg, [ --disable-svg disable Scalable Vector Graphics], enable_svg=$enableval, enable_svg=yes)
+AC_ARG_ENABLE(svg2png, [ --disable-svg2png disable conversion of svgs to pngs], enable_svg2png=$enableval, enable_svg2png=yes)
+AC_ARG_ENABLE(svg2png-scaling, [ --enable-svg2png-scaling enable conversion of svgs to pngs with specified sizes], SVG2PNG_SCALES=$enableval, SVG2PNG_SCALES="8 16 32 48 96")
+AC_ARG_ENABLE(svg2png-scaling-flag, [ --enable-svg2png-scaling-flag enable conversion of flag svgs to pngs with specified sizes], SVG2PNG_SCALES_FLAG=$enableval, SVG2PNG_SCALES_FLAG="8 16 32 48 96")
+AC_ARG_ENABLE(svg2png-scaling-nav, [ --enable-svg2png-scaling-nav enable conversion of nav svgs to pngs with specified sizes], SVG2PNG_SCALES_NAV=$enableval, SVG2PNG_SCALES_NAV="8 16 32 48 96")
+AC_ARG_WITH(svg2png-use-convert, [ --with-svg2png-use-convert use imagemagick's convert for png creation], SVG2PNG_CONVERTER="convert")
+AC_ARG_WITH(svg2png-use-rsvg-convert, [ --with-svg2png-use-rsvg-convert use librsvg's rsvg-convert for png creation], SVG2PNG_CONVERTER="rsvg-convert")
+AC_ARG_WITH(svg2png-use-inkscape, [ --with-svg2png-use-inkscape use inkscapes internal convert routines for png creation], SVG2PNG_CONVERTER="inkscape")
+AC_ARG_WITH(svg2png-use-ksvgtopng4, [ --with-svg2png-use-ksvgtopng4 use kde4's ksvgtopng4 for png creation], SVG2PNG_CONVERTER="ksvgtopng4")
+AC_ARG_WITH(svg2png-use-ksvgtopng, [ --with-svg2png-use-ksvgtopng use kde3's convert for png creation], SVG2PNG_CONVERTER="ksvgtopng")
+if test "x${enable_svg2png}" = "xyes" ; then
+ if test "x${SVG2PNG_CONVERTER}" = "x"; then
+ SVG2PNG_CONVERTER="ksvgtopng ksvgtopng4 rsvg-convert inkscape convert"
+ fi
+ AC_PATH_PROGS([SVG2PNG], ${SVG2PNG_CONVERTER}, [none])
+ if test "x${SVG2PNG}" = "xnone"; then
+ enable_svg2png="no"
+ fi
+fi
+AC_SUBST(SVG2PNG)
+AC_SUBST(SVG2PNG_SCALES)
+AC_SUBST(SVG2PNG_SCALES_FLAG)
+AC_SUBST(SVG2PNG_SCALES_NAV)
+AM_CONDITIONAL(USE_SVG2PNG_SCALES, test "x${SVG2PNG_SCALES}" != "xyes" -a "x${SVG2PNG_SCALES}" != "x")
+AM_CONDITIONAL(USE_SVG2PNG_SCALES_FLAG, test "x${SVG2PNG_SCALES_FLAG}" != "xyes" -a "x${SVG2PNG_SCALES_FLAG}" != "x")
+AM_CONDITIONAL(USE_SVG2PNG_SCALES_NAV, test "x${SVG2PNG_SCALES_NAV}" != "xyes" -a "x${SVG2PNG_SCALES_NAV}" != "x")
+AM_CONDITIONAL(USE_SVG2PNG, test "x${enable_svg2png}" = "xyes")
+AM_CONDITIONAL(USE_SVG, test "x${enable_svg}" = "xyes")
+
+AC_CONFIG_FILES([
+Makefile
+])
+
+AC_OUTPUT
+
diff --git a/recipes/navit/navit-icons_svn.bb b/recipes/navit/navit-icons_svn.bb
new file mode 100644
index 0000000000..09961deb7c
--- /dev/null
+++ b/recipes/navit/navit-icons_svn.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "Navit is a car navigation system with routing engine."
+LICENSE = "GPL"
+SECTION = "x11/applications"
+DEPENDS = "glib-2.0 gtk+"
+RRECOMMENDS = "gpsd espeak flite"
+
+PV = "0.1.0+svnr${SRCPV}"
+PR = "r0"
+
+DEPENDS_shr += " librsvg-native"
+EXTRA_OECONF = "--disable-binding-python --disable-gui-sdl --disable-samplemap --enable-avoid-float --enable-avoid-unaligned --enable-svg2png-scaling-flag=32 --disable-speech-speech-dispatcher"
+
+S = "${WORKDIR}/xpm"
+
+inherit autotools
+
+FILES_${PN} = " /usr/share/navit/xpm/"
+
+#use different URL than navit_svn doest, to prevent upgrade/downgrade cycle in downloads dir
+SRC_URI = "svn://anonymous@navit.svn.sourceforge.net/svnroot/navit/trunk/navit/navit;module=xpm;proto=https \
+ file://configure.in"
+
+do_configure_prepend() {
+ cp ${WORKDIR}/configure.in ${S}/
+ # replace include with just xpmdir variable
+ sed -i 's#.*Makefile.inc.*#xpmdir=$(pkgdatadir)/xpm#g' ${S}/Makefile.am
+ # don't install desktopfile and icons
+ sed -i 's/^\(EXTRADIST.*\) $(DESKTOPFILE_DATA) $(ICON128_DATA) $(ICON22_DATA) \(.*\)$/\1\2/g' ${S}/Makefile.am
+}
diff --git a/recipes/navit/navit.inc b/recipes/navit/navit.inc
index fa250ffac9..0b0c36470d 100644
--- a/recipes/navit/navit.inc
+++ b/recipes/navit/navit.inc
@@ -4,6 +4,9 @@ SECTION = "x11/applications"
DEPENDS = "glib-2.0 gtk+"
RRECOMMENDS = "gpsd speechd flite"
+PE = "1"
+INC_PR = "r4"
+
inherit autotools
EXTRA_OECONF = "--disable-binding-python --disable-gui-sdl --disable-samplemap --enable-avoid-float --enable-avoid-unaligned"
diff --git a/recipes/navit/navit_0.0.4.bb b/recipes/navit/navit_0.0.4.bb
index dbb83d9ff4..75d63be57d 100644
--- a/recipes/navit/navit_0.0.4.bb
+++ b/recipes/navit/navit_0.0.4.bb
@@ -1,6 +1,6 @@
require navit.inc
-PR = "r2"
+PR = "${INC_PR}.0"
SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz"
diff --git a/recipes/navit/navit_0.1.0.bb b/recipes/navit/navit_0.1.0.bb
index 5162fa0a85..9ad09481a9 100644
--- a/recipes/navit/navit_0.1.0.bb
+++ b/recipes/navit/navit_0.1.0.bb
@@ -1,5 +1,5 @@
require navit.inc
-PR = "r1"
+PR = "${INC_PR}.0"
SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz"
diff --git a/recipes/navit/navit_svn.bb b/recipes/navit/navit_svn.bb
index 833eb4714e..7660d0128f 100644
--- a/recipes/navit/navit_svn.bb
+++ b/recipes/navit/navit_svn.bb
@@ -1,12 +1,63 @@
require navit.inc
-PV = "0.1.0+svnrev${SRCREV}"
-PR = "r2"
+PV = "0.1.0+svnr${SRCPV}"
+PR = "${INC_PR}.0"
DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_shr = "1"
S = "${WORKDIR}/navit"
+# use espeak instead speechd
+RRECOMMENDS = "gpsd espeak flite"
+
+DEPENDS_shr += " librsvg-native"
+RDEPENDS = " navit-icons"
+EXTRA_OECONF += " --enable-svg2png-scaling-flag=32 --disable-speech-speech-dispatcher --enable-cache-size=20971520"
+
SRC_URI = "svn://anonymous@navit.svn.sourceforge.net/svnroot/navit/trunk;module=navit;proto=https"
EXTRA_AUTORECONF = " -I m4"
+
+FILES_${PN} += " ${datadir}/dbus-1/services/ "
+
+CONFFILES_${PN} += "${datadir}/navit/navit.default.xml \
+ ${datadir}/navit/navit.xml \
+ ${datadir}/navit/maps.xml \
+ ${datadir}/navit/osd.xml \
+ ${datadir}/navit/speech.xml \
+ "
+
+SRC_URI += "file://navit.xml \
+ file://maps.xml \
+ file://osd.xml \
+ file://speech.xml \
+ "
+
+#Second launcher for shr
+SRC_URI_append_shr = "file://navitD.desktop \
+ file://navitD.png \
+ "
+
+DEPENDS_append_shr = " gypsy"
+RDEPENDS_append_shr = " fsoraw"
+
+do_configure_prepend() {
+ #Remove xpm building, replaced by icons in own package
+ sed -i 's/\(.*SUBDIRS.*\) xpm\( \|$\)\(.*\)/\1\2\3/g' ${S}/navit/Makefile.am
+}
+
+do_install_append() {
+ #Use split config
+ mv ${D}${datadir}/navit/navit.xml ${D}${datadir}/navit/navit.default.xml
+ install -m 0644 ${WORKDIR}/navit.xml ${D}${datadir}/navit/navit.xml
+ install -m 0644 ${WORKDIR}/maps.xml ${D}${datadir}/navit/maps.xml
+ install -m 0644 ${WORKDIR}/osd.xml ${D}${datadir}/navit/osd.xml
+ install -m 0644 ${WORKDIR}/speech.xml ${D}${datadir}/navit/speech.xml
+}
+
+do_install_append_shr() {
+ #Install second launcher for shr
+ install -m 0644 ${WORKDIR}/navitD.desktop ${D}${datadir}/applications/
+ install -m 0644 ${WORKDIR}/navitD.png ${D}${datadir}/pixmaps/
+}
diff --git a/recipes/nfs-utils/nfs-utils-1.1.2/nfsserver b/recipes/nfs-utils/nfs-utils-1.1.2/nfsserver
new file mode 100644
index 0000000000..b4c7662ce0
--- /dev/null
+++ b/recipes/nfs-utils/nfs-utils-1.1.2/nfsserver
@@ -0,0 +1,149 @@
+#!/bin/sh
+#
+# Startup script for nfs-utils
+#
+#
+# The environment variable NFS_SERVERS may be set in /etc/default/nfsd
+# Other control variables may be overridden here too
+test -r /etc/default/nfsd && . /etc/default/nfsd
+#
+# Location of executables:
+test -x "$NFS_MOUNTD" || NFS_MOUNTD=/usr/sbin/rpc.mountd
+test -x "$NFS_NFSD" || NFS_NFSD=/usr/sbin/rpc.nfsd
+test -x "$NFS_STATD" || NFS_STATD=/usr/sbin/rpc.statd
+#
+# The user mode program must also exist (it just starts the kernel
+# threads using the kernel module code).
+test -x "$NFS_MOUNTD" || exit 0
+test -x "$NFS_NFSD" || exit 0
+#
+# Default is 8 threads, value is settable between 1 and the truely
+# ridiculous 99
+test "$NFS_SERVERS" -gt 0 && test "$NFS_SERVERS" -lt 100 || NFS_SERVERS=8
+#
+# The default state directory is /var/lib/nfs
+test -n "$NFS_STATEDIR" || NFS_STATEDIR=/var/lib/nfs
+#
+#----------------------------------------------------------------------
+# Startup and shutdown functions.
+# Actual startup/shutdown is at the end of this file.
+#directories
+create_directories(){
+ echo -n 'creating NFS state directory: '
+ mkdir -p "$NFS_STATEDIR"
+ ( cd "$NFS_STATEDIR"
+ umask 077
+ mkdir -p sm sm.bak
+ test -w sm/state || {
+ rm -f sm/state
+ :>sm/state
+ }
+ umask 022
+ for file in xtab etab smtab rmtab
+ do
+ test -w "$file" || {
+ rm -f "$file"
+ :>"$file"
+ }
+ done
+ )
+ echo done
+}
+#mountd
+start_mountd(){
+ echo -n 'starting mountd: '
+ start-stop-daemon --start --exec "$NFS_MOUNTD" -- "-f /etc/exports $@"
+ echo done
+}
+stop_mountd(){
+ echo -n 'stopping mountd: '
+ start-stop-daemon --stop --quiet --exec "$NFS_MOUNTD"
+ echo done
+}
+#
+#nfsd
+start_nfsd(){
+ echo -n "starting $1 nfsd kernel threads: "
+ start-stop-daemon --start --exec "$NFS_NFSD" -- "$@"
+ echo done
+}
+delay_nfsd(){
+ for delay in 0 1 2 3 4 5 6 7 8 9
+ do
+ if pidof nfsd >/dev/null
+ then
+ echo -n .
+ sleep 1
+ else
+ return 0
+ fi
+ done
+ return 1
+}
+stop_nfsd(){
+ # WARNING: this kills any process with the executable
+ # name 'nfsd'.
+ echo -n 'stopping nfsd: '
+ start-stop-daemon --stop --quiet --signal 1 --name nfsd
+ if delay_nfsd || {
+ echo failed
+ echo ' using signal 9: '
+ start-stop-daemon --stop --quiet --signal 9 --name nfsd
+ delay_nfsd
+ }
+ then
+ echo done
+ # This will remove, recursively, dependencies
+ echo -n 'removing nfsd kernel module: '
+ if modprobe -r nfsd
+ then
+ echo done
+ else
+ echo failed
+ fi
+ else
+ echo failed
+ fi
+}
+
+#statd
+start_statd(){
+ echo -n "starting statd: "
+ start-stop-daemon --start --exec "$NFS_STATD"
+ echo done
+}
+stop_statd(){
+ # WARNING: this kills any process with the executable
+ # name 'statd'.
+ echo -n 'stopping statd: '
+ start-stop-daemon --stop --quiet --signal 1 --name statd
+ echo done
+}
+#----------------------------------------------------------------------
+#
+# supported options:
+# start
+# stop
+# reload: reloads the exports file
+# restart: stops and starts mountd
+#FIXME: need to create the /var/lib/nfs/... directories
+case "$1" in
+start) create_directories
+ start_nfsd "$NFS_SERVERS"
+ start_mountd
+ start_statd
+ test -r /etc/exports && exportfs -a;;
+stop) exportfs -ua
+ stop_statd
+ stop_mountd
+ stop_nfsd;;
+reload) test -r /etc/exports && exportfs -r;;
+restart)exportfs -ua
+ stop_mountd
+ stop_statd
+ # restart does not restart the kernel threads,
+ # only the user mode processes
+ start_mountd
+ start_statd
+ test -r /etc/exports && exportfs -a;;
+esac
diff --git a/recipes/nfs-utils/nfs-utils_1.1.2.bb b/recipes/nfs-utils/nfs-utils_1.1.2.bb
index cdd5d372cd..3951c46eff 100644
--- a/recipes/nfs-utils/nfs-utils_1.1.2.bb
+++ b/recipes/nfs-utils/nfs-utils_1.1.2.bb
@@ -3,7 +3,7 @@ PRIORITY = "optional"
SECTION = "console/network"
LICENSE = "GPL"
-PR = "r6"
+PR = "r7"
DEPENDS = "e2fsprogs-libs tcp-wrappers libevent"
@@ -44,30 +44,12 @@ do_ccompile() {
INHIBIT_AUTO_STAGE = "1"
-do_install() {
+do_install_append() {
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/nfsserver ${D}${sysconfdir}/init.d/nfsserver
- install -d ${D}${sbindir}
- install -d ${D}${base_sbindir}
- install -m 0755 ${S}/utils/exportfs/exportfs ${D}${sbindir}/exportfs
- install -m 0755 ${S}/utils/mountd/mountd ${D}${sbindir}/mountd
- install -m 0755 ${S}/utils/mount/mount.nfs ${D}${base_sbindir}/mount.nfs
- install -m 0755 ${S}/utils/nfsd/nfsd ${D}${sbindir}/nfsd
- install -m 0755 ${S}/utils/nfsstat/nfsstat ${D}${sbindir}/nfsstat
- install -m 0755 ${S}/utils/showmount/showmount ${D}${sbindir}/showmount
- install -m 0755 ${S}/utils/statd/statd ${D}${sbindir}/statd
-
- ln -s ${base_sbindir}/mount.nfs ${D}/${base_sbindir}/mount.nfs4
-
- install -d ${D}${mandir}/man8
- install -m 0644 ${S}/utils/exportfs/exportfs.man ${D}${mandir}/man8/exportfs.8
- install -m 0644 ${S}/utils/mountd/mountd.man ${D}${mandir}/man8/mountd.8
- install -m 0644 ${S}/utils/nfsd/nfsd.man ${D}${mandir}/man8/nfsd.8
- install -m 0644 ${S}/utils/nfsstat/nfsstat.man ${D}${mandir}/man8/nfsstat.8
- install -m 0644 ${S}/utils/showmount/showmount.man ${D}${mandir}/man8/showmount.8
- install -m 0644 ${S}/utils/statd/statd.man ${D}${mandir}/man8/statd.8
+ rm ${D}${sbindir}/rpcdebug
}
PACKAGES =+ "nfs-utils-client"
-FILES_nfs-utils-client = "${base_sbindir}/mount.nfs ${base_sbindir}/mount.nfs4"
+FILES_nfs-utils-client = "${base_sbindir}/*mount.nfs*"
diff --git a/recipes/obexpush/obexpush_1.0.0.bb b/recipes/obexpush/obexpush_1.0.0.bb
index 7b73b10da5..4de4cbe98f 100644
--- a/recipes/obexpush/obexpush_1.0.0.bb
+++ b/recipes/obexpush/obexpush_1.0.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.caside.lancs.ac.uk/java_bt.php"
SECTION = "console/network"
LICENSE = "GPL"
DEPENDS = "glib-2.0 openobex bluez-libs"
-PR = "r5"
+PR = "r6"
SRC_URI = "http://www.caside.lancs.ac.uk/bt/obexpush.tar.gz \
file://add-obextool.patch;patch=1 \
@@ -14,7 +14,7 @@ S = "${WORKDIR}/obexpush"
inherit update-rc.d
INITSCRIPT_NAME = "opd"
-INITSCRIPT_PARAMS = "defaults 33 09"
+INITSCRIPT_PARAMS = "defaults 33 9"
export GLIBINC = "-I${STAGING_INCDIR}/glib-2.0"
export GLIBLIB = "-I${STAGING_LIBDIR} -lglib-2.0"
@@ -43,6 +43,7 @@ do_install() {
install -d ${D}${sysconfdir}/init.d
install -d ${D}${sysconfdir}/default
+ install -d ${D}/var/obexpush
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/opd
install -m 0755 ${WORKDIR}/opd_args ${D}${sysconfdir}/default/opd_args
}
diff --git a/recipes/openmax/libomxil-bellagio_0.9.2.bb b/recipes/openmax/libomxil-bellagio_0.9.2.bb
new file mode 100644
index 0000000000..b0564f381e
--- /dev/null
+++ b/recipes/openmax/libomxil-bellagio_0.9.2.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "OpenMAX Integration Layer (IL) is a standard API to access Multimedia Components on mobile platforms. It has been defined by the Khronos group."
+LICENSE = "LGPLv2"
+DEPENDS = "alsa-lib ffmpeg \
+ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad', d)}"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/omxil/${PN}-${PV}.tar.gz"
+
+inherit autotools_stage
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
+FILES_${PN} += "${libdir}/bellagio/*.so ${libdir}/bellagio/*.la"
+FILES_${PN}-dev += "${libdir}/bellagio/*.a"
+FILES_${PN}-dbg += "${libdir}/bellagio/.debug"
+
+PARALLEL_MAKE = ""
+
diff --git a/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb b/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb
new file mode 100644
index 0000000000..29645845d9
--- /dev/null
+++ b/recipes/openmoko-3rdparty/babiloo-efl_2.0.9-4.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "EFL Dictionary Viewer. It supports dictionaries in SDictionary and StarDict format."
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "GPL"
+AUTHOR = "Luca Vaudano <vaudano@gmail.com>"
+HOMEPAGE = "http://babiloo-project.org"
+RDEPENDS = "python-elementary python-compression python-misc python-netclient"
+
+PACKAGE_ARCH = "all"
+
+PV = "2.0.9-4"
+PR = "r1"
+
+SRC_URI = "http://bazaar.launchpad.net/%7Evaudano/babiloo/efl/download/head%3A/babiloo_2.0.94.tar.g-20091201105555-efky7gi6fkm39xw8-2/babiloo_2.0.9-4.tar.gz;name=tarball"
+SRC_URI[tarball.md5sum] = "f5f25daff7accb8d409fa9f94c49fc17"
+SRC_URI[tarball.sha256sum] = "28fc4550f986512aaa96ebf776f16d3cb9d9b493ac1805642def54c8167a0f74"
+
+S = "${WORKDIR}/babiloo"
+
+do_install() {
+ install -d "${D}${datadir}/babiloo"
+ install -d "${D}${datadir}/babiloo/dicts"
+
+ cp -a "${S}/core" "${D}${datadir}/babiloo/"
+ cp -a "${S}/efl" "${D}${datadir}/babiloo/"
+ cp -a "${S}/images" "${D}${datadir}/babiloo/"
+ install -m 0755 "${S}/run.py" "${D}${datadir}/babiloo/"
+ install -d "${D}${bindir}"
+ ln -s "${datadir}/babiloo/run.py" "${D}${bindir}/babiloo"
+ install -d "${D}${datadir}/pixmaps"
+ install -m 0644 "${S}/images/babiloo.png" "${D}${datadir}/pixmaps"
+ install -d "${D}${datadir}/applications"
+ install -m 0644 "${S}/babiloo.desktop" "${D}${datadir}/applications"
+
+ cp -a "${S}/locale" "${D}${datadir}/"
+ find ${D}${datadir}/locale -name *.po -exec rm {} \;
+ rm -f ${D}${datadir}/locale/babiloo.pot
+}
+
+FILES_${PN} += "${datadir}/babiloo"
diff --git a/recipes/calc/calc_0.0.3.bb b/recipes/openmoko-3rdparty/calc_0.0.4.bb
index 1e261f88a6..1e261f88a6 100644
--- a/recipes/calc/calc_0.0.3.bb
+++ b/recipes/openmoko-3rdparty/calc_0.0.4.bb
diff --git a/recipes/calc/calc_git.bb b/recipes/openmoko-3rdparty/calc_git.bb
index 9914d23717..9914d23717 100644
--- a/recipes/calc/calc_git.bb
+++ b/recipes/openmoko-3rdparty/calc_git.bb
diff --git a/recipes/openmoko-3rdparty/epiano_0.3.1.bb b/recipes/openmoko-3rdparty/epiano_0.3.1.bb
index ecd7d26427..6426093bba 100644
--- a/recipes/openmoko-3rdparty/epiano_0.3.1.bb
+++ b/recipes/openmoko-3rdparty/epiano_0.3.1.bb
@@ -3,7 +3,7 @@ DEPENDS = "ecore evas edje fluidsynth"
LICENSE = "GPL"
SECTION = "x11/multimedia"
PV = "0.3.1"
-PR = "r1"
+PR = "r2"
inherit autotools pkgconfig
diff --git a/recipes/openmoko-projects/diversity-radar_svn.bb b/recipes/openmoko-projects/diversity-radar_svn.bb
index bdc6120b87..2a334a5021 100644
--- a/recipes/openmoko-projects/diversity-radar_svn.bb
+++ b/recipes/openmoko-projects/diversity-radar_svn.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL"
DEPENDS = "python-evas python-edje python-ecore python-edbus python-dbus python-etk"
RDEPENDS_${PN} = "diversity-daemon"
PV = "0.0.4+svnr${SRCPV}"
-PR = "r0.01"
+PR = "r0.02"
SRC_URI = "svn://svn.projects.openmoko.org/svnroot/diversity/toys;module=diversity-radar;proto=http"
diff --git a/recipes/openmoko-projects/enlazar_svn.bb b/recipes/openmoko-projects/enlazar_svn.bb
index 9b2896bced..925f6d98d5 100644
--- a/recipes/openmoko-projects/enlazar_svn.bb
+++ b/recipes/openmoko-projects/enlazar_svn.bb
@@ -4,7 +4,7 @@ LICENSE = "GPL"
DEPENDS = "evas edje ecore edbus"
RDEPENDS = "networkmanager"
PV = "0.1+svnr${SRCPV}"
-PR = "r3"
+PR = "r4"
PE = "2"
SRC_URI = "svn://svn.projects.openmoko.org/svnroot/enlazar;module=trunk;proto=http"
diff --git a/recipes/openmoko-projects/om-locations_git.bb b/recipes/openmoko-projects/om-locations_git.bb
index b50de38e9e..4d2b5aa7f3 100644
--- a/recipes/openmoko-projects/om-locations_git.bb
+++ b/recipes/openmoko-projects/om-locations_git.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL"
DEPENDS = "eet evas edje ecore edbus etk"
RDEPENDS_${PN} = "diversity-daemon"
PV = "0.2+gitr${SRCREV}"
-PR = "r1.03"
+PR = "r1.04"
SRC_URI = "git://git.openmoko.org/git/om-locations.git;protocol=git"
diff --git a/recipes/openmoko-projects/pyefl-sudoku_svn.bb b/recipes/openmoko-projects/pyefl-sudoku_svn.bb
index ae1a162563..c22220437e 100644
--- a/recipes/openmoko-projects/pyefl-sudoku_svn.bb
+++ b/recipes/openmoko-projects/pyefl-sudoku_svn.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL"
DEPENDS = "python-evas python-edje python-ecore"
RDEPENDS = "python-evas python-edje python-ecore"
PV = "0.0.2+svnr${SRCPV}"
-PR = "r2"
+PR = "r3"
SRC_URI = "svn://svn.projects.openmoko.org/svnroot/;module=pyefl-sudoku;proto=http"
diff --git a/recipes/openmoko-system/ompower_svn.bb b/recipes/openmoko-system/ompower_svn.bb
index 27065235e6..28381741c3 100644
--- a/recipes/openmoko-system/ompower_svn.bb
+++ b/recipes/openmoko-system/ompower_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Openmoko Power State handling daemon via DBUS"
LICENSE = "MIT BSD"
DEPENDS = "ecore edbus"
PV = "0.0.0+svnr${SRCPV}"
-PR = "r3"
+PR = "r4"
RDEPENDS = "initscripts"
SRCNAME = "ompower"
diff --git a/recipes/openmoko2/neod_svn.bb b/recipes/openmoko2/neod_svn.bb
index aeeee871b3..e57bf08068 100644
--- a/recipes/openmoko2/neod_svn.bb
+++ b/recipes/openmoko2/neod_svn.bb
@@ -1,9 +1,11 @@
DESCRIPTION = "Simple Neo1973 Daemon for Button Handling and Power Management"
SECTION = "openmoko/daemons"
+
+DISTRO_APM ?= "apm"
DEPENDS = "gtk+ pulseaudio apmd"
-RDEPENDS = "gpe-scap xrandr alsa-utils-amixer apm dbus"
+RDEPENDS = "gpe-scap xrandr alsa-utils-amixer ${DISTRO_APM} dbus"
PV = "0.1.0+svnr${SRCPV}"
-PR = "r6"
+PR = "r7"
inherit openmoko2 gconf
diff --git a/recipes/openmoko2/openmoko-alsa-scenarios.bb b/recipes/openmoko2/openmoko-alsa-scenarios.bb
index 39a9fcfec0..72edfef1d1 100644
--- a/recipes/openmoko2/openmoko-alsa-scenarios.bb
+++ b/recipes/openmoko2/openmoko-alsa-scenarios.bb
@@ -7,6 +7,7 @@ PROVIDES = "virtual/alsa-scenarios"
COMPATIBLE_MACHINE = "(om-gta01|om-gta02)"
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target/audio/;module=om-gta01;proto=http"
SRC_URI_${MACHINE_ARCH} = "svn://svn.openmoko.org/trunk/src/target/audio/;module=${MACHINE_ARCH};proto=http"
S = "${WORKDIR}/${MACHINE_ARCH}"
diff --git a/recipes/openssl/openssl-native_0.9.8j.bb b/recipes/openssl/openssl-native_0.9.8j.bb
index 976a4d7835..eba3ba9903 100644
--- a/recipes/openssl/openssl-native_0.9.8j.bb
+++ b/recipes/openssl/openssl-native_0.9.8j.bb
@@ -2,7 +2,7 @@ inherit pkgconfig native
require openssl.inc
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
# This flag can contain target options (e.g -mfpu=neon for armv7-a systems)
export FULL_OPTIMIZATION = " "
@@ -14,6 +14,8 @@ SRC_URI += "file://configure-targets.patch;patch=1 \
PARALLEL_MAKE = ""
+CFLAG += " -Wa,--noexecstack "
+
do_install() {
:
}
diff --git a/recipes/openttd/openttd_0.7.4-RC1.bb b/recipes/openttd/openttd_0.7.4.bb
index 1887e06cbe..1887e06cbe 100644
--- a/recipes/openttd/openttd_0.7.4-RC1.bb
+++ b/recipes/openttd/openttd_0.7.4.bb
diff --git a/recipes/opkg/opkg-native_svn.bb b/recipes/opkg/opkg-native_svn.bb
index 1de472e156..e5fdfd027f 100644
--- a/recipes/opkg/opkg-native_svn.bb
+++ b/recipes/opkg/opkg-native_svn.bb
@@ -2,6 +2,7 @@ require opkg.inc
DEPENDS = "curl-native"
PR = "${INC_PR}"
+PROVIDES =+ "virtual/update-alternatives-native"
SRC_URI += "file://opkg-libdir.patch;patch=1;maxrev=342"
diff --git a/recipes/opkg/opkg-nogpg-nocurl-slugos_svn.bb b/recipes/opkg/opkg-nogpg-nocurl-slugos_svn.bb
new file mode 100644
index 0000000000..5491a28914
--- /dev/null
+++ b/recipes/opkg/opkg-nogpg-nocurl-slugos_svn.bb
@@ -0,0 +1,62 @@
+# This recipe is a regeneration of the original opkg-nogpg-nocurl_svn.bb
+# recipe, intended for temporary use by the SlugOS distro.
+
+# DO NOT USE this recipe for anything other than SlugOS and svn version 160
+# of the opkg sources. Also note that This recipe will be removed without
+# notice when the unfortunate commits to the original opkg-nogpg-nocurl_svn.bb
+# recipe are repaired, the small-memory patches updated to a newer opkg svn
+# version, and appropriate testing confirms that the resulting binary actually
+# works correctly on a 32MB system.
+
+# DO NOT CHANGE THIS RECIPE!
+
+require opkg.inc
+
+DEPENDS = ""
+PROVIDES += "opkg"
+
+SRC_URI += " \
+ file://isatty.patch;patch=1 \
+ file://opkg_wget.patch;patch=1;maxrev=180 \
+ file://reduce-nogpg-noise.patch;patch=1;maxrev=180 \
+ file://opkg_wget_nogpg_01_use_vfork_gunzip.patch;patch=1 \
+ file://opkg_wget_nogpg_02_use_vfork_system.patch;patch=1 \
+ file://opkg_wget_nogpg_03_fix_tmpdirs.patch;patch=1 \
+ file://opkg_wget_nogpg_04_default_tmpdir.patch;patch=1 \
+ "
+PR = "${INC_PR}"
+
+SRCREV = "${SRCREV_pn-opkg}"
+
+EXTRA_OECONF += "--disable-gpg --enable-static --disable-shared"
+
+# Not sure this is needed; needs to be investigated and removed if not
+do_stage() {
+ autotools_stage_all
+}
+
+# The nogpg version isn't getting much love and has an unused variable which trips up -Werror
+do_configure_prepend() {
+ sed -i -e s:-Werror::g ${S}/libopkg/Makefile.am
+}
+
+PACKAGES =+ "libopkg-dev"
+
+FILES_libopkg-dev = "${libdir}/*.a ${libdir}/*.la ${libdir}/*.so"
+# not happens automatically for opkg-nogpg:
+FILES_${PN} += "${datadir}/opkg/intercept"
+
+# Define a variable to allow distros to run configure earlier.
+# (for example, to enable loading of ethernet kernel modules before networking starts)
+OPKG_INIT_POSITION = "98"
+OPKG_INIT_POSITION_slugos = "41"
+
+pkg_postinst_${PN} () {
+ update-alternatives --install ${bindir}/opkg opkg ${bindir}/opkg-cl 100
+}
+
+pkg_postrm_${PN} () {
+ update-alternatives --remove opkg ${bindir}/opkg-cl
+}
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/opkg/opkg.inc b/recipes/opkg/opkg.inc
index c973174787..1716034429 100644
--- a/recipes/opkg/opkg.inc
+++ b/recipes/opkg/opkg.inc
@@ -4,7 +4,7 @@ SECTION = "base"
LICENSE = "GPL"
DEPENDS = "curl gpgme"
PV = "0.1.6+svnr${SRCPV}"
-INC_PR = "r16"
+INC_PR = "r18"
FILESPATHPKG =. "opkg:"
diff --git a/recipes/opkg/opkg_svn.bb b/recipes/opkg/opkg_svn.bb
index 57b2774b65..44c0baf880 100644
--- a/recipes/opkg/opkg_svn.bb
+++ b/recipes/opkg/opkg_svn.bb
@@ -4,6 +4,8 @@ DEPENDS_append = " openssl"
PR = "${INC_PR}"
+PROVIDES =+ "virtual/update-alternatives"
+RPROVIDES_${PN} = "update-alternatives"
PACKAGES =+ "libopkg-dev libopkg"
FILES_libopkg-dev = "${libdir}/*.a ${libdir}/*.la ${libdir}/*.so"
diff --git a/recipes/performous/performous_0.4.0.bb b/recipes/performous/performous_0.4.0.bb
new file mode 100644
index 0000000000..246c71d4e8
--- /dev/null
+++ b/recipes/performous/performous_0.4.0.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "A game where you can sing caraoke or play instruments"
+HOMEPAGE = "http://performous.org/"
+SECTION = "apps"
+LICENSE = "GPL"
+
+DEPENDS = "boost glib-2.0 gstreamer pulseaudio pango freetype \
+ ffmpeg cairo gtk+ librsvg libxml++ imagemagick jack \
+ libglew virtual/libsdl \
+ "
+
+PR = "r1"
+
+inherit cmake
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/performous/performous/${PV}/Performous-${PV}-Source.tar.bz2"
+
+S = "${WORKDIR}/Performous-${PV}-Source"
+
+OECMAKE_BUILDPATH = "build"
+
+OECMAKE_SOURCEPATH = "../"
+
+FILES_${PN} += " ${datadir}/games/performous/themes/default/* \
+ ${datadir}/games/performous/config/* \
+ ${datadir}/games/performous/xsl/* \
+ ${datadir}/games/performous/sounds/* \
+ ${datadir}/games/performous/backgrounds/* \
+ "
+
diff --git a/recipes/php/php-5.2.11/acinclude-xml2-config.patch b/recipes/php/php-5.2.11/acinclude-xml2-config.patch
new file mode 100644
index 0000000000..bf519d2934
--- /dev/null
+++ b/recipes/php/php-5.2.11/acinclude-xml2-config.patch
@@ -0,0 +1,18 @@
+--- /orig-acinclude.m4 2007-02-20 15:03:25.000000000 +0200
++++ /acinclude.m4 2007-02-20 15:03:24.000000000 +0200
+@@ -2359,12 +2359,9 @@
+ AC_DEFUN([PHP_SETUP_LIBXML], [
+ AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
+ [
+- for i in $PHP_LIBXML_DIR /usr/local /usr; do
+- if test -x "$i/bin/xml2-config"; then
+- ac_cv_php_xml2_config_path="$i/bin/xml2-config"
+- break
+- fi
+- done
++
++ ac_cv_php_xml2_config_path="$PHP_LIBXML_DIR/xml2-config"
++
+ ])
+
+ if test -x "$ac_cv_php_xml2_config_path"; then
diff --git a/recipes/php/php-5.2.11/pear-makefile.patch b/recipes/php/php-5.2.11/pear-makefile.patch
new file mode 100644
index 0000000000..487f507a02
--- /dev/null
+++ b/recipes/php/php-5.2.11/pear-makefile.patch
@@ -0,0 +1,13 @@
+Index: php-5.2.11/pear/Makefile.frag
+===================================================================
+--- php-5.2.11.orig/pear/Makefile.frag 2009-08-02 13:11:15.000000000 -0600
++++ php-5.2.11/pear/Makefile.frag 2009-12-09 16:13:38.700972014 -0700
+@@ -11,7 +11,7 @@
+ PEAR_SUFFIX = -ds a$(program_suffix)
+
+ install-pear-installer: $(SAPI_CLI_PATH)
+- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) pear/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
++ @$(PHP_NATIVE_DIR)/php $(PEAR_INSTALL_FLAGS) pear/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
+
+ install-pear:
+ @echo "Installing PEAR environment: $(INSTALL_ROOT)$(peardir)/"
diff --git a/recipes/php/php_5.2.11.bb b/recipes/php/php_5.2.11.bb
new file mode 100644
index 0000000000..d4fd98597a
--- /dev/null
+++ b/recipes/php/php_5.2.11.bb
@@ -0,0 +1,87 @@
+require php.inc
+
+DEPENDS = "zlib libxml2 virtual/libiconv php-native lemon-native mysql"
+
+PR = "r1"
+
+SRC_URI += "file://pear-makefile.patch;patch=1 \
+ "
+export THREADS="pthread"
+export LIBS=" -lpthread "
+
+EXTRA_OECONF = " --without-iconv \
+ --enable-mbstring \
+ --enable-discard-path \
+ --enable-sockets \
+ --enable-shared \
+ --enable-pcntl \
+ --enable-memory-limit \
+ --enable-wddx \
+ --enable-embedded-mysqli \
+ --enable-magic-quotes \
+ --enable-fastcgi \
+ --with-zlib --with-zlib-dir=${STAGING_LIBDIR}/.. \
+ --with-libxml-dir=${STAGING_BINDIR_CROSS} \
+ --with-mysql="${STAGING_DIR_TARGET}${layout_exec_prefix}" \
+# --with-mysqli = "${STAGING_BINDIR_NATIVE}/mysql_config" \
+ --without-pdo-sqlite \
+ "
+
+export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
+export PHP_NATIVE_DIR = "${STAGING_BINDIR_NATIVE}"
+export PHP_PEAR_PHP_BIN = "${bindir}/php"
+
+do_configure_append() {
+ find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}:g'
+}
+
+# fixme
+do_install_append() {
+ mv ${D}/${STAGING_DIR_NATIVE}/${sysconfdir} ${D}/${sysconfdir}
+ rm -rf ${D}/${STAGING_DIR_NATIVE}
+ rm -rf ${D}/.registry
+ rm -rf ${D}/.channels
+ rm -rf ${D}/.[a-z]*
+}
+
+PACKAGES = "${PN}-dbg \
+ ${PN}-cli \
+ ${PN}-cgi \
+ ${PN}-pear \
+ ${PN}-dev \
+ ${PN}-doc \
+ ${PN} \
+"
+
+
+FILES_${PN}-dbg =+ "${bindir}/.debug"
+
+FILES_${PN}-doc += "${libdir}/php/doc"
+
+FILES_${PN}-cli = "${bindir}/php"
+FILES_${PN}-cgi = "${bindir}/php-cgi"
+
+FILES_${PN}-pear = "${bindir}/pear* ${bindir}/pecl \
+ ${libdir}/php/PEAR \
+ ${libdir}/php/PEAR.php \
+ ${libdir}/php/System.php ${libdir}php/peclcmd.php ${libdir}/php/pearcmd.php \
+ ${libdir}/php/.channels ${libdir}/php/.channels/.alias \
+ ${libdir}/php/.channels\__uri.reg \
+ ${libdir}/php/.channels\pear.php.net.reg ${libdir}/php/.channels/pecl.php.net.reg \
+ ${libdir}/php/.registry \
+ ${libdir}/php/Archive/Tar.php \
+ ${libdir}/php/Console/Getopt.php ${libdir}/php/OS/Guess.php \
+ ${sysconfdir}/pear.conf"
+
+
+FILES_${PN}-dev = "${includedir}/php ${libdir}/build \
+ ${bindir}/phpize ${bindir}/php-config \
+ ${libdir}/php/.depdb ${libdir}/php/.depdblock ${libdir}/php/.filemap ${libdir}/php/.lock \
+ ${libdir}/php/test "
+
+FILES_${PN} = "${libdir}/php"
+FILES_${PN} += "${bindir}"
+
+RDEPENDS_${PN}-pear = ${PN}
+RDEPENDS_${PN}-cli = ${PN}
+RDEPENDS_${PN}-dev = ${PN}
diff --git a/recipes/php/php_5.2.6.bb b/recipes/php/php_5.2.6.bb
index 0d9e1f42a5..8723a1e14f 100644
--- a/recipes/php/php_5.2.6.bb
+++ b/recipes/php/php_5.2.6.bb
@@ -1,8 +1,8 @@
require php.inc
-DEPENDS = "zlib libxml2 virtual/libiconv php-native lemon-native"
+DEPENDS = "zlib libxml2 virtual/libiconv php-native lemon-native mysql"
-PR = "r6"
+PR = "r7"
SRC_URI += "file://pear-makefile.patch;patch=1 \
file://string.c.patch;patch=1 "
@@ -24,6 +24,7 @@ EXTRA_OECONF = " --without-iconv \
--with-libxml-dir=${STAGING_BINDIR_CROSS} \
--with-mysql="${STAGING_DIR_TARGET}${layout_exec_prefix}" \
# --with-mysqli = "${STAGING_BINDIR_NATIVE}/mysql_config" \
+ --without-pdo-sqlite \
"
export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
diff --git a/recipes/poptop/poptop_1.3.4.bb b/recipes/poptop/poptop_1.3.4.bb
index 5c6a71bb2e..370f6a30ec 100644
--- a/recipes/poptop/poptop_1.3.4.bb
+++ b/recipes/poptop/poptop_1.3.4.bb
@@ -38,4 +38,4 @@ CONFFILES_${PN} = "${sysconfdir}/pptpd.conf \
${sysconfdir}/ppp/options.pptpd"
INITSCRIPT_NAME = "pptpd"
-INITSCRIPT_PARAMS = "defaults 92 08"
+INITSCRIPT_PARAMS = "defaults 92 8"
diff --git a/recipes/powervr-drivers/libgles-omap3.inc b/recipes/powervr-drivers/libgles-omap3.inc
index 208da9e052..ddec910efe 100644
--- a/recipes/powervr-drivers/libgles-omap3.inc
+++ b/recipes/powervr-drivers/libgles-omap3.inc
@@ -48,6 +48,9 @@ SRC_URI = "file://OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin \
S = "${WORKDIR}/OMAP35x_Graphics_SDK_${SGXPV}"
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
+require ../ti/ti-eula-unpack.inc
+
BINLOCATION ?= "${S}/gfx_rel"
PACKAGES += " xserver-kdrive-powervrsgx ${PN}-tests ${PN}-demos"
@@ -69,7 +72,6 @@ inherit update-rc.d
INITSCRIPT_NAME = "pvr-init"
INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
-require ../ti/ti-dspbios.inc
do_compile() {
for sofile in $(find ${S} -name "lib*Open*.so") $(find ${S} -name "lib*srv*.so") $(find ${S} -name "lib*gl*.so") $(find ${S} -name "libpvr*.so") $(find ${S} -name "lib*GL*.so"); do
diff --git a/recipes/powervr-drivers/omap3-sgx-modules/0001-Compile-fixes-for-recent-kernels.patch b/recipes/powervr-drivers/omap3-sgx-modules/0001-Compile-fixes-for-recent-kernels.patch
new file mode 100644
index 0000000000..53b1f2772e
--- /dev/null
+++ b/recipes/powervr-drivers/omap3-sgx-modules/0001-Compile-fixes-for-recent-kernels.patch
@@ -0,0 +1,28 @@
+From ef693358e658a7cbab4d2696108d9d4240ab8096 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Wed, 2 Dec 2009 10:13:15 +0200
+Subject: [PATCH] Compile fixes for recent kernels
+
+---
+ .../3rdparty/dc_omap3430_linux/omaplfb_linux.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c b/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
+index 935f78b..4d41829 100755
+--- a/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
++++ b/services4/3rdparty/dc_omap3430_linux/omaplfb_linux.c
+@@ -57,7 +57,11 @@ extern int omap_dispc_request_irq(unsigned long, void (*)(void *), void *);
+ extern void omap_dispc_free_irq(unsigned long, void (*)(void *), void *);
+ extern void omap_dispc_set_plane_base(int plane, IMG_UINT32 phys_addr);
+ #else
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)
++#include <plat/display.h>
++#else
+ #include <mach/display.h>
++#endif
+ #include <linux/console.h>
+ #include <linux/fb.h>
+ #endif
+--
+1.6.4.4
+
diff --git a/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb b/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb
index 9bd77ad9af..603c81f9a4 100644
--- a/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb
+++ b/recipes/powervr-drivers/omap3-sgx-modules_1.3.13.1607.bb
@@ -8,6 +8,7 @@ SRC_URI = "file://omap3-sgx-modules-${PV}.tar.bz2 \
file://rotation-dss2.patch;patch=1 \
file://build_es3.x_sgx.patch;patch=1 \
file://proc-interface.patch;patch=1 \
+ file://0001-Compile-fixes-for-recent-kernels.patch;patch=1 \
"
PVRBUILD = "release"
diff --git a/recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb b/recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb
index 9da9a478f8..a2c4d32aeb 100644
--- a/recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb
+++ b/recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb
@@ -3,11 +3,13 @@ LICENSE = "GPLv2"
DEFAULT_PREFERENCE = "-1"
-require ../ti/ti-dspbios.inc
# download required binary distribution from:
# http://software-dl.ti.com/dsps/forms/export.html?prod_no=/OMAP35x_Graphics_SDK_setuplinux_3_01_00_02.bin
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
+require ../ti/ti-eula-unpack.inc
+
SGXPV = "3_01_00_02"
IMGPV = "1.4.14.2514"
BINFILE := "OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin"
diff --git a/recipes/qt4/qt4-embedded-4.6.0/0006-freetype-host-includes.patch b/recipes/qt4/qt4-embedded-4.6.0/0006-freetype-host-includes.patch
new file mode 100644
index 0000000000..987c425138
--- /dev/null
+++ b/recipes/qt4/qt4-embedded-4.6.0/0006-freetype-host-includes.patch
@@ -0,0 +1,20 @@
+From c9ab62bd9a56643574b3ae6e59e0ca776d4860d2 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Mon, 4 Jun 2007 14:48:50 +0200
+Subject: [PATCH] freetype host includes
+
+---
+ config.tests/unix/freetype/freetype.pri | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+Index: qt-embedded-linux-opensource-src-4.5.0/config.tests/unix/freetype/freetype.pri
+===================================================================
+--- qt-embedded-linux-opensource-src-4.5.0.orig/config.tests/unix/freetype/freetype.pri 2009-02-25 22:32:32.000000000 +0100
++++ qt-embedded-linux-opensource-src-4.5.0/config.tests/unix/freetype/freetype.pri 2009-03-26 17:14:16.000000000 +0100
+@@ -1,5 +1,5 @@
+ !cross_compile {
+- TRY_INCLUDEPATHS = /include /usr/include $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
++ TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
+ # LSB doesn't allow using headers from /include or /usr/include
+ linux-lsb-g++:TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
+ for(p, TRY_INCLUDEPATHS) {
diff --git a/recipes/qt4/qt4-embedded-4.6.0/0008-qt-lib-infix.patch b/recipes/qt4/qt4-embedded-4.6.0/0008-qt-lib-infix.patch
new file mode 100644
index 0000000000..61e60a0eb6
--- /dev/null
+++ b/recipes/qt4/qt4-embedded-4.6.0/0008-qt-lib-infix.patch
@@ -0,0 +1,32 @@
+--- /tmp/uitools.prf 2009-12-01 18:38:22.000000000 +0100
++++ qt-everywhere-opensource-src-4.6.0/mkspecs/features/uitools.prf 2009-12-01 18:58:16.000000000 +0100
+@@ -3,11 +3,11 @@
+
+ # Include the correct version of the UiLoader library
+ symbian: QTUITOOLS_LINKAGE = -lQtUiTools.lib
+-else: QTUITOOLS_LINKAGE = -lQtUiTools
++else: QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}
+
+ CONFIG(debug, debug|release) {
+- mac: QTUITOOLS_LINKAGE = -lQtUiTools_debug
+- win32: QTUITOOLS_LINKAGE = -lQtUiToolsd
++ mac: QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}_debug
++ win32: QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}d
+ }
+ LIBS += $$QTUITOOLS_LINKAGE
+
+--- /tmp/uitools.pro 2009-12-01 18:40:28.000000000 +0100
++++ qt-everywhere-opensource-src-4.6.0/tools/designer/src/uitools/uitools.pro 2009-12-01 18:59:18.000000000 +0100
+@@ -1,5 +1,5 @@
+ TEMPLATE = lib
+-TARGET = $$qtLibraryTarget(QtUiTools)
++TARGET = QtUiTools
+ QT += xml
+ CONFIG += qt staticlib
+ DESTDIR = ../../../../lib
+@@ -43,3 +43,5 @@
+ QMAKE_PKGCONFIG_DESTDIR = pkgconfig
+ QMAKE_PKGCONFIG_REQUIRES += QtXml
+ }
++
++TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #do this towards the end
diff --git a/recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch b/recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch
new file mode 100644
index 0000000000..070b4ac9c1
--- /dev/null
+++ b/recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch
@@ -0,0 +1,9 @@
+--- qt-embedded-linux-opensource-src-4.5.0.orig/examples/qws/qws.pro 2009-02-25 22:32:34.000000000 +0100
++++ qt-embedded-linux-opensource-src-4.5.0/examples/qws/qws.pro 2009-03-26 19:53:19.000000000 +0100
+@@ -1,5 +1,5 @@
+ TEMPLATE = subdirs
+-SUBDIRS = framebuffer mousecalibration simpledecoration
++SUBDIRS = framebuffer mousecalibration
+
+ # install
+ sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS README *.pro
diff --git a/recipes/qt4/qt4-embedded-4.6.0/linux.conf b/recipes/qt4/qt4-embedded-4.6.0/linux.conf
new file mode 100644
index 0000000000..2e862407bc
--- /dev/null
+++ b/recipes/qt4/qt4-embedded-4.6.0/linux.conf
@@ -0,0 +1,54 @@
+#
+# qmake configuration for common linux
+#
+
+QMAKE_CFLAGS_THREAD += -D_REENTRANT
+QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
+
+QMAKE_INCDIR =
+QMAKE_LIBDIR =
+QMAKE_INCDIR_X11 =
+QMAKE_LIBDIR_X11 =
+QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
+QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
+QMAKE_INCDIR_OPENGL =
+QMAKE_LIBDIR_OPENGL =
+
+
+QMAKE_LIBS = -lglib-2.0
+QMAKE_LIBS_DYNLOAD = -ldl
+QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
+QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
+QMAKE_LIBS_NIS = -lnsl
+QMAKE_LIBS_OPENGL = -lGLU -lGL
+QMAKE_LIBS_OPENGL_QT = -lGL
+QMAKE_LIBS_THREAD = -lpthread
+
+QMAKE_MOC = $(OE_QMAKE_MOC)
+QMAKE_UIC = $(OE_QMAKE_UIC)
+QMAKE_UIC3 = $(OE_QMAKE_UIC3)
+QMAKE_RCC = $(OE_QMAKE_RCC)
+QMAKE_QDBUSCPP2XML = $(OE_QMAKE_QDBUSCPP2XML)
+QMAKE_QDBUSXML2CPP = $(OE_QMAKE_QDBUSXML2CPP)
+
+QMAKE_AR = $(OE_QMAKE_AR) cqs
+QMAKE_OBJCOPY = ${OBJCOPY}
+QMAKE_RANLIB =
+
+QMAKE_TAR = tar -cf
+QMAKE_GZIP = gzip -9f
+
+QMAKE_COPY = cp -f
+QMAKE_COPY_FILE = $(COPY)
+QMAKE_COPY_DIR = $(COPY) -r
+QMAKE_MOVE = mv -f
+QMAKE_DEL_FILE = rm -f
+QMAKE_DEL_DIR = rmdir
+QMAKE_STRIP = $(OE_QMAKE_STRIP)
+QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+QMAKE_CHK_DIR_EXISTS = test -d
+QMAKE_MKDIR = mkdir -p
+QMAKE_INSTALL_FILE = install -m 644 -p
+QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+include(unix.conf)
diff --git a/recipes/qt4/qt4-embedded.inc b/recipes/qt4/qt4-embedded.inc
index 95b770a5a4..11fcd5849b 100644
--- a/recipes/qt4/qt4-embedded.inc
+++ b/recipes/qt4/qt4-embedded.inc
@@ -31,7 +31,7 @@ QT_CONFIG_FLAGS += " \
-qt-decoration-styled -plugin-decoration-default -plugin-decoration-windows \
-plugin-gfx-transformed -plugin-gfx-qvfb -plugin-gfx-vnc -plugin-gfx-directfb \
-plugin-mouse-tslib -qt-mouse-pc -qt-mouse-qvfb \
- -qt-kbd-tty -qt-kbd-usb -qt-kbd-qvfb \
+ -qt-kbd-tty \
-DQT_KEYPAD_NAVIGATION \
"
diff --git a/recipes/qt4/qt4-embedded_4.6.0.bb b/recipes/qt4/qt4-embedded_4.6.0.bb
new file mode 100644
index 0000000000..1bdca87a0d
--- /dev/null
+++ b/recipes/qt4/qt4-embedded_4.6.0.bb
@@ -0,0 +1,38 @@
+DEFAULT_PREFERENCE = "-1"
+
+require qt4-embedded.inc
+
+PR = "${INC_PR}.0"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
+ file://0001-cross-compile.patch;patch=1 \
+ file://0002-fix-resinit-declaration.patch;patch=1 \
+ file://0004-no-qmake.patch;patch=1 \
+ file://0006-freetype-host-includes.patch;patch=1 \
+ file://0008-qt-lib-infix.patch;patch=1 \
+ file://0009-support-2bpp.patch;patch=1 \
+ file://fix-config-tests.patch;patch=1 \
+ file://g++.conf \
+ file://linux.conf \
+ "
+S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
+
+do_configure_prepend() {
+ sed -i \
+ -e /QMAKE_MOC\ /d \
+ -e /QMAKE_UIC\ /d \
+ -e /QMAKE_UIC3\ /d \
+ -e /QMAKE_RCC\ /d \
+ ${S}/configure
+}
+
+do_install_append() {
+ install -d ${D}${bindir}
+ for i in rcc uic moc ; do
+ install -m 0755 ${S}/bin/$i ${D}${bindir}/
+ done
+}
+
+LICENSE = "LGPLv2.1 GPLv3"
+SRC_URI += " \
+ file://hack-out-pg_config.patch;patch=1"
diff --git a/recipes/qt4/qt4-tools-native_4.6.0.bb b/recipes/qt4/qt4-tools-native_4.6.0.bb
new file mode 100644
index 0000000000..48310b1233
--- /dev/null
+++ b/recipes/qt4/qt4-tools-native_4.6.0.bb
@@ -0,0 +1,15 @@
+DEFAULT_PREFERENCE = "-1"
+
+require qt4-tools-native.inc
+LICENSE = "LGPLv2.1 GPLv3"
+PR = "${INC_PR}.0"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
+ file://configure-lflags.patch;patch=1 \
+ file://qt-config.patch;patch=1 \
+ file://g++.conf \
+ file://linux.conf"
+
+S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
+
+TOBUILD := "src/tools/bootstrap ${TOBUILD}"
diff --git a/recipes/qt4/qt4-x11-free-4.6.0/0008-qt-lib-infix.patch b/recipes/qt4/qt4-x11-free-4.6.0/0008-qt-lib-infix.patch
new file mode 100644
index 0000000000..61e60a0eb6
--- /dev/null
+++ b/recipes/qt4/qt4-x11-free-4.6.0/0008-qt-lib-infix.patch
@@ -0,0 +1,32 @@
+--- /tmp/uitools.prf 2009-12-01 18:38:22.000000000 +0100
++++ qt-everywhere-opensource-src-4.6.0/mkspecs/features/uitools.prf 2009-12-01 18:58:16.000000000 +0100
+@@ -3,11 +3,11 @@
+
+ # Include the correct version of the UiLoader library
+ symbian: QTUITOOLS_LINKAGE = -lQtUiTools.lib
+-else: QTUITOOLS_LINKAGE = -lQtUiTools
++else: QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}
+
+ CONFIG(debug, debug|release) {
+- mac: QTUITOOLS_LINKAGE = -lQtUiTools_debug
+- win32: QTUITOOLS_LINKAGE = -lQtUiToolsd
++ mac: QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}_debug
++ win32: QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}d
+ }
+ LIBS += $$QTUITOOLS_LINKAGE
+
+--- /tmp/uitools.pro 2009-12-01 18:40:28.000000000 +0100
++++ qt-everywhere-opensource-src-4.6.0/tools/designer/src/uitools/uitools.pro 2009-12-01 18:59:18.000000000 +0100
+@@ -1,5 +1,5 @@
+ TEMPLATE = lib
+-TARGET = $$qtLibraryTarget(QtUiTools)
++TARGET = QtUiTools
+ QT += xml
+ CONFIG += qt staticlib
+ DESTDIR = ../../../../lib
+@@ -43,3 +43,5 @@
+ QMAKE_PKGCONFIG_DESTDIR = pkgconfig
+ QMAKE_PKGCONFIG_REQUIRES += QtXml
+ }
++
++TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #do this towards the end
diff --git a/recipes/qt4/qt4-x11-free-4.6.0/linux.conf b/recipes/qt4/qt4-x11-free-4.6.0/linux.conf
new file mode 100644
index 0000000000..2e862407bc
--- /dev/null
+++ b/recipes/qt4/qt4-x11-free-4.6.0/linux.conf
@@ -0,0 +1,54 @@
+#
+# qmake configuration for common linux
+#
+
+QMAKE_CFLAGS_THREAD += -D_REENTRANT
+QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
+
+QMAKE_INCDIR =
+QMAKE_LIBDIR =
+QMAKE_INCDIR_X11 =
+QMAKE_LIBDIR_X11 =
+QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
+QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
+QMAKE_INCDIR_OPENGL =
+QMAKE_LIBDIR_OPENGL =
+
+
+QMAKE_LIBS = -lglib-2.0
+QMAKE_LIBS_DYNLOAD = -ldl
+QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
+QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
+QMAKE_LIBS_NIS = -lnsl
+QMAKE_LIBS_OPENGL = -lGLU -lGL
+QMAKE_LIBS_OPENGL_QT = -lGL
+QMAKE_LIBS_THREAD = -lpthread
+
+QMAKE_MOC = $(OE_QMAKE_MOC)
+QMAKE_UIC = $(OE_QMAKE_UIC)
+QMAKE_UIC3 = $(OE_QMAKE_UIC3)
+QMAKE_RCC = $(OE_QMAKE_RCC)
+QMAKE_QDBUSCPP2XML = $(OE_QMAKE_QDBUSCPP2XML)
+QMAKE_QDBUSXML2CPP = $(OE_QMAKE_QDBUSXML2CPP)
+
+QMAKE_AR = $(OE_QMAKE_AR) cqs
+QMAKE_OBJCOPY = ${OBJCOPY}
+QMAKE_RANLIB =
+
+QMAKE_TAR = tar -cf
+QMAKE_GZIP = gzip -9f
+
+QMAKE_COPY = cp -f
+QMAKE_COPY_FILE = $(COPY)
+QMAKE_COPY_DIR = $(COPY) -r
+QMAKE_MOVE = mv -f
+QMAKE_DEL_FILE = rm -f
+QMAKE_DEL_DIR = rmdir
+QMAKE_STRIP = $(OE_QMAKE_STRIP)
+QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+QMAKE_CHK_DIR_EXISTS = test -d
+QMAKE_MKDIR = mkdir -p
+QMAKE_INSTALL_FILE = install -m 644 -p
+QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+include(unix.conf)
diff --git a/recipes/qt4/qt4-x11-free_4.6.0.bb b/recipes/qt4/qt4-x11-free_4.6.0.bb
new file mode 100644
index 0000000000..4b5eabff5c
--- /dev/null
+++ b/recipes/qt4/qt4-x11-free_4.6.0.bb
@@ -0,0 +1,45 @@
+DEFAULT_PREFERENCE = "-1"
+
+require qt4-x11-free.inc
+LICENSE = "LGPLv2.1 GPLv3"
+PR = "${INC_PR}.0"
+
+export MOC = "${OE_QMAKE_MOC}"
+export QMAKE_MOC = "${OE_QMAKE_MOC}"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
+ file://0001-cross-compile.patch;patch=1 \
+ file://0002-fix-resinit-declaration.patch;patch=1 \
+ file://0004-no-qmake.patch;patch=1 \
+ file://0006-freetype-host-includes.patch;patch=1 \
+ file://0008-qt-lib-infix.patch;patch=1 \
+ file://fix-config-tests.patch;patch=1 \
+ file://g++.conf \
+ file://linux.conf \
+"
+
+SRC_URI += "file://hack-out-pg_config.patch;patch=1"
+
+S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
+
+QT_CONFIG_FLAGS += " \
+ -no-embedded \
+ -xrandr \
+ -x11"
+
+do_configure_prepend() {
+ sed -i \
+ -e /QMAKE_MOC\ /d \
+ -e /QMAKE_UIC\ /d \
+ -e /QMAKE_UIC3\ /d \
+ -e /QMAKE_RCC\ /d \
+ ${S}/configure
+}
+
+do_install_append() {
+ install -d ${D}${bindir}
+ for i in rcc uic moc ; do
+ install -m 0755 ${S}/bin/$i ${D}${bindir}/
+ done
+}
+
diff --git a/recipes/rp-pppoe/rp-pppoe_3.8.bb b/recipes/rp-pppoe/rp-pppoe_3.8.bb
index 9852522da1..bc8b3b1510 100644
--- a/recipes/rp-pppoe/rp-pppoe_3.8.bb
+++ b/recipes/rp-pppoe/rp-pppoe_3.8.bb
@@ -52,5 +52,5 @@ CONFFILES_${PN}-server = "${sysconfdir}/ppp/pppoe-server-options \
INITSCRIPT_PACKAGES = "${PN}-server"
INITSCRIPT_NAME_${PN}-server = "pppoe-server"
-INITSCRIPT_PARAMS_${PN}-server = "defaults 92 08"
+INITSCRIPT_PARAMS_${PN}-server = "defaults 92 8"
diff --git a/recipes/shr/libframeworkd-phonegui-efl2_git.bb b/recipes/shr/libframeworkd-phonegui-efl2_git.bb
index 207658f807..551abb1dd2 100644
--- a/recipes/shr/libframeworkd-phonegui-efl2_git.bb
+++ b/recipes/shr/libframeworkd-phonegui-efl2_git.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "frameworkd EFL phonegui 2"
SECTION = "e/apps"
DEPENDS += " dbus-glib libframeworkd-glib libframeworkd-phonegui etk evas ecore edje edje-native elementary"
PV = "0.0.1+gitr${SRCREV}"
-PR = "r1"
+PR = "r2"
SRC_URI = "git://shr.bearstech.com/repo/libframeworkd-phonegui-efl2.git;protocol=http;branch=master"
S = "${WORKDIR}/git"
diff --git a/recipes/shr/libframeworkd-phonegui-efl_git.bb b/recipes/shr/libframeworkd-phonegui-efl_git.bb
index b24e152364..5d0d099a9a 100644
--- a/recipes/shr/libframeworkd-phonegui-efl_git.bb
+++ b/recipes/shr/libframeworkd-phonegui-efl_git.bb
@@ -4,7 +4,7 @@ LICENSE = "GPL"
SECTION = "e/apps"
DEPENDS += " dbus-glib libframeworkd-glib libframeworkd-phonegui etk evas ecore edje edje-native elementary"
PV = "0.0.3+gitr${SRCREV}"
-PR = "r35"
+PR = "r36"
require libframeworkd-phonegui-efl-theme.inc
diff --git a/recipes/shr/libphone-ui-shr_git.bb b/recipes/shr/libphone-ui-shr_git.bb
index a4519c7f1d..c297fe3640 100644
--- a/recipes/shr/libphone-ui-shr_git.bb
+++ b/recipes/shr/libphone-ui-shr_git.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "SHR default module for the Phone UI daemon"
SECTION = "e/apps"
DEPENDS += " dbus-glib libframeworkd-glib libphone-ui etk evas ecore edje edje-native elementary"
PV = "0.0.0+gitr${SRCREV}"
-PR = "r3"
+PR = "r4"
SRC_URI = "git://shr.bearstech.com/repo/libphone-ui-shr.git;protocol=http;branch=master"
S = "${WORKDIR}/git"
diff --git a/recipes/shr/shr-config_git.bb b/recipes/shr/shr-config_git.bb
index 60ed586179..b0927442ce 100644
--- a/recipes/shr/shr-config_git.bb
+++ b/recipes/shr/shr-config_git.bb
@@ -5,7 +5,7 @@ LICENSE = "GPLv2"
DEPENDS = "vala-native elementary libeflvala"
SECTION = "x11/application"
PV = "0.0.2+gitr${SRCREV}"
-PR = "r4"
+PR = "r5"
EXTRA_OECONF="--enable-vapidir=${STAGING_DATADIR}/vala/vapi"
inherit autotools
diff --git a/recipes/shr/shr-launcher_svn.bb b/recipes/shr/shr-launcher_svn.bb
index ffd6161586..807d3a2cea 100644
--- a/recipes/shr/shr-launcher_svn.bb
+++ b/recipes/shr/shr-launcher_svn.bb
@@ -6,16 +6,31 @@ SECTION = "e/apps"
DEPENDS = "elementary eina edbus"
PV = "0.0.1+svnr${SRCPV}"
-PR = "r0"
+PR = "r4"
SRC_URI = "svn://shr-launcher.googlecode.com/svn/trunk;module=.;proto=http"
do_configure_prepend() {
- rm -f ${S}/config.log
- rm -f ${S}/config.status
+ # all links to /usr/share/automake-1.10/
+ rm -f ${S}/depcomp ${S}/config.guess ${S}/config.sub ${S}/INSTALL ${S}/install-sh ${S}/missing
+ touch ${S}/INSTALL
}
S = "${WORKDIR}"
inherit autotools
+do_install_append() {
+ install -d "${D}/${datadir}/pixmaps"
+ install -m 0644 "${S}/resources/launcher.png" "${D}/${datadir}/pixmaps"
+ install -d "${D}/${datadir}/applications"
+ install -m 0644 "${S}/resources/launcher.desktop" "${D}/${datadir}/applications"
+ install -d "${D}/${datadir}/launcher"
+ for ico in "${S}/resources/"*.png; do
+ if [ "$(basename $ico)" != "launcher.png" ]; then
+ install -m 0644 $ico "${D}/${datadir}/launcher"
+ fi
+ done
+}
+
+FILES_${PN} += "/usr/share/launcher/* /usr/share/applications/* /usr/share/pixmaps/*"
diff --git a/recipes/shr/shr-settings_git.bb b/recipes/shr/shr-settings_git.bb
index 4ae6e96882..96c16ed4e7 100644
--- a/recipes/shr/shr-settings_git.bb
+++ b/recipes/shr/shr-settings_git.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Modular settings application for SHR based on python-elementary"
HOMEPAGE = "http://shr-project.org"
SHR_RELEASE ?= "shr"
LICENSE ?= "GPL"
-RDEPENDS = "python-elementary python-dbus python-codecs python-shell python-pyrtc python python-core python-edbus dbus-x11 frameworkd python-phoneutils python-pexcept"
+RDEPENDS = "python-elementary python-dbus python-codecs python-shell python-pyrtc python python-core python-edbus dbus-x11 frameworkd python-phoneutils python-pexpect"
SECTION = "x11/application"
PE = "1"
PV = "0.1.1+gitr${SRCREV}"
diff --git a/recipes/shr/shr-splash-theme-logo_git.bb b/recipes/shr/shr-splash-theme-logo_git.bb
index 77ae8d7d25..ecb603b9d7 100644
--- a/recipes/shr/shr-splash-theme-logo_git.bb
+++ b/recipes/shr/shr-splash-theme-logo_git.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "SHR splash screen - SHR logo theme"
SECTION = "x11/data"
LICENSE = "MIT BSD"
PV = "0.1+gitr${SRCREV}"
-PR = "r0"
+PR = "r1"
SRC_URI = "git://git.shr-project.org/repo/shr-themes.git;protocol=http;branch=master"
S = "${WORKDIR}/git/shr-splash/${PN}"
diff --git a/recipes/shr/shr-splash-theme.inc b/recipes/shr/shr-splash-theme.inc
index 50e62bcb7e..d9a199bf2a 100644
--- a/recipes/shr/shr-splash-theme.inc
+++ b/recipes/shr/shr-splash-theme.inc
@@ -1,4 +1,5 @@
RPROVIDES_${PN} = "virtual/shr-splash-theme"
+PROVIDES = "virtual/shr-splash-theme"
RDEPENDS += "shr-splash"
inherit update-alternatives
diff --git a/recipes/shr/shr-splash_git.bb b/recipes/shr/shr-splash_git.bb
index 5053befbf8..a63b47f102 100644
--- a/recipes/shr/shr-splash_git.bb
+++ b/recipes/shr/shr-splash_git.bb
@@ -2,9 +2,9 @@ DESCRIPTION = "SHR splash screen"
SECTION = "x11/data"
LICENSE = "MIT BSD"
PV = "1.2+gitr${SRCREV}"
-PR = "r4"
-RRECOMMENDS_${PN} += "\
- virtual/shr-splash-theme"
+PR = "r5"
+DEPENDS = "virtual/shr-splash-theme"
+RRECOMMENDS = "virtual/shr-splash-theme"
inherit update-rc.d
diff --git a/recipes/shr/shr-wizard_git.bb b/recipes/shr/shr-wizard_git.bb
new file mode 100644
index 0000000000..ec63fb13fc
--- /dev/null
+++ b/recipes/shr/shr-wizard_git.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "An e17 module and a python app for the SHR first run wizard"
+HOMEPAGE = "http://shr-project.org"
+LICENSE = "GPL"
+RDEPENDS = "python-elementary shr-settings python-phoneutils e-wm python-dbus python-edbus"
+SECTION = "x11/application"
+PV = "0.0.0+gitr${SRCREV}"
+PR = "r1"
+
+inherit autotools
+
+SRC_URI = "git://git.shr-project.org/repo/shr-wizard.git;protocol=http;branch=master"
+S = "${WORKDIR}/git"
+
+FILES_${PN} += "${libdir}/enlightenment/modules/wizard/*/page_900.so"
+
+
diff --git a/recipes/sudo/libgksu_2.0.12.bb b/recipes/sudo/libgksu_2.0.12.bb
index 639a4b2107..e5bd10ef61 100644
--- a/recipes/sudo/libgksu_2.0.12.bb
+++ b/recipes/sudo/libgksu_2.0.12.bb
@@ -1,13 +1,17 @@
DESCRIPTION = "Gksu authorization library"
LICENSE = "LGPLv2"
-
DEPENDS = "gtk+ gconf startup-notification gnome-keyring libgtop"
+RRECOMMENDS_${PN} = "gksu"
+PR = "r1"
SRC_URI = "http://people.debian.org/~kov/gksu/libgksu-${PV}.tar.gz"
inherit autotools lib_package
+EXTRA_OECONF += " \
+ --disable-gtk-doc \
+"
+
FILES_${PN}-bin += "${datadir}/applications/gksu-properties.desktop \
${datadir}/pixmaps/gksu.png \
"
-
diff --git a/recipes/suspend-desktop/suspend-desktop_1.0.bb b/recipes/suspend-desktop/suspend-desktop_1.0.bb
index fa9efba84b..085d686aa1 100644
--- a/recipes/suspend-desktop/suspend-desktop_1.0.bb
+++ b/recipes/suspend-desktop/suspend-desktop_1.0.bb
@@ -3,10 +3,11 @@ PRIORITY = "optional"
DESCRIPTION = "Suspend feature for the application launcher menu."
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
+DISTRO_APM ?= "apm"
RDEPENDS = "gpe-conf"
-RRECOMMENDS = "apm"
+RRECOMMENDS = "${DISTRO_APM}"
PACKAGES = "${PN}"
PACKAGE_ARCH = "all"
diff --git a/recipes/sysfsutils/sysfsutils.inc b/recipes/sysfsutils/sysfsutils.inc
new file mode 100644
index 0000000000..1dbd0226dc
--- /dev/null
+++ b/recipes/sysfsutils/sysfsutils.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "System Utilities Based on Sysfs"
+HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
+LICENSE = "GPLv2"
+INC_PR = "r3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz"
+
+inherit autotools autotools_stage
+
+acpaths = "-I ${S}/m4"
+
+PACKAGES = "libsysfs libsysfs-dbg libsysfs-dev \
+ ${PN} ${PN}-dbg ${PN}-doc ${PN}-locale"
+
+FILES_libsysfs = "${libdir}/*.so.*"
+FILES_libsysfs-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \
+ ${libdir}/*.a"
+FILES_libsysfs-dbg += "${libdir}/.debug"
diff --git a/recipes/sysfsutils/sysfsutils_1.3.0.bb b/recipes/sysfsutils/sysfsutils_1.3.0.bb
index 11e4ca7e9a..3339a089e4 100644
--- a/recipes/sysfsutils/sysfsutils_1.3.0.bb
+++ b/recipes/sysfsutils/sysfsutils_1.3.0.bb
@@ -1,22 +1,5 @@
-PR = "r2"
-SECTION = "base"
-DESCRIPTION = "System Utilities Based on Sysfs"
-HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
-LICENSE = "GPLv2"
-SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz"
+require sysfsutils.inc
-S = "${WORKDIR}/sysfsutils-${PV}"
+PR = "${INC_PR}"
-inherit autotools
-
-includedir += "/sysfs"
-
-PACKAGES_prepend = "libsysfs "
-FILES_libsysfs = "${libdir}/*.so.1.0.3"
-
-do_stage () {
- oe_libinstall -a -so -C lib libsysfs ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/sysfs
- install -m 0644 ${S}/include/dlist.h ${STAGING_INCDIR}/sysfs
- install -m 0644 ${S}/include/libsysfs.h ${STAGING_INCDIR}/sysfs
-}
+includedir .= "/sysfs"
diff --git a/recipes/sysfsutils/sysfsutils_2.0.0.bb b/recipes/sysfsutils/sysfsutils_2.0.0.bb
index f59dfa0feb..c2557c1e15 100644
--- a/recipes/sysfsutils/sysfsutils_2.0.0.bb
+++ b/recipes/sysfsutils/sysfsutils_2.0.0.bb
@@ -1,24 +1,3 @@
-DESCRIPTION = "System Utilities Based on Sysfs"
-HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
-LICENSE = "GPLv2"
-PR = "r2"
+require sysfsutils.inc
-SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz"
-S = "${WORKDIR}/sysfsutils-${PV}"
-
-inherit autotools
-
-includedir += "/sysfs"
-
-do_stage () {
- oe_libinstall -a -so -C lib libsysfs ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/sysfs
- install -m 0644 ${S}/include/dlist.h ${STAGING_INCDIR}/sysfs
- install -m 0644 ${S}/include/libsysfs.h ${STAGING_INCDIR}/sysfs
-}
-
-PACKAGES_prepend = "libsysfs libsysfs-dbg libsysfs-dev "
-FILES_libsysfs = "${libdir}/*.so.*"
-FILES_libsysfs-dev = "${libdir}/* ${includedir}"
-FILES_libsysfs-dbg += "${libdir}/.debug"
-FILES_${PN}-dbg += "${bindir}/.debug"
+PR = "${INC_PR}"
diff --git a/recipes/sysfsutils/sysfsutils_2.1.0.bb b/recipes/sysfsutils/sysfsutils_2.1.0.bb
index 4f540d5181..02d936f688 100644
--- a/recipes/sysfsutils/sysfsutils_2.1.0.bb
+++ b/recipes/sysfsutils/sysfsutils_2.1.0.bb
@@ -1,22 +1,4 @@
-DESCRIPTION = "System Utilities Based on Sysfs"
-HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
-LICENSE = "GPLv2"
-PR = "r1"
+require sysfsutils.inc
-SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz \
- file://get_mnt_path_check.patch;patch=1"
-
-inherit autotools
-
-do_stage () {
- autotools_stage_all
-}
-
-PACKAGES = "libsysfs libsysfs-dbg libsysfs-dev \
- ${PN} ${PN}-dbg ${PN}-doc ${PN}-locale"
-
-FILES_libsysfs = "${libdir}/*.so.*"
-FILES_libsysfs-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \
- ${libdir}/*.a"
-FILES_libsysfs-dbg += "${libdir}/.debug"
-FILES_${PN}-dbg += "${bindir}/.debug"
+PR = "${INC_PR}"
+SRC_URI += "file://get_mnt_path_check.patch;patch=1"
diff --git a/recipes/tasks/task-base.bb b/recipes/tasks/task-base.bb
index ed561b802e..d59acba026 100644
--- a/recipes/tasks/task-base.bb
+++ b/recipes/tasks/task-base.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Merge machine and distro options to create a basic machine task/package"
-PR = "r86"
+PR = "r87"
inherit task
@@ -60,6 +60,9 @@ HOTPLUG ?= "${@base_contains("MACHINE_FEATURES", "kernel24", "linux-hotplug",""
#
DISTRO_SSH_DAEMON ?= "dropbear"
+# Distro can override apm provider
+DISTRO_APM ?= "apm"
+
#
# bluetooth manager
#
@@ -190,7 +193,7 @@ RDEPENDS_task-base-acpi = "\
acpid"
RDEPENDS_task-base-apm = "\
- apm \
+ ${DISTRO_APM} \
apmd \
${@base_contains('MACHINE_FEATURES', 'kernel24', 'network-suspend-scripts', '',d)}"
diff --git a/recipes/tasks/task-beagleboard-demo.bb b/recipes/tasks/task-beagleboard-demo.bb
index ca26baaaff..f9867afeea 100644
--- a/recipes/tasks/task-beagleboard-demo.bb
+++ b/recipes/tasks/task-beagleboard-demo.bb
@@ -5,6 +5,7 @@ PR = "r15"
inherit task
ECONFIG ?= "places e-wm-config-angstrom e-wm-config-angstrom-touchscreen e-wm-config-angstrom-widescreen e-wm-config-default"
+EMENU ?= "e-wm-menu"
RDEPENDS_${PN} = "\
task-proper-tools \
@@ -15,7 +16,7 @@ RDEPENDS_${PN} = "\
angstrom-zeroconf-audio \
angstrom-led-config \
gpe-scap \
- mime-support e-wm ${ECONFIG} \
+ mime-support e-wm ${ECONFIG} ${EMENU} \
xterm xmms \
firefox midori \
gecko-mediaplayer-firefox-hack \
diff --git a/recipes/tasks/task-boot.bb b/recipes/tasks/task-boot.bb
index 0ce9ee4415..04c55357a8 100644
--- a/recipes/tasks/task-boot.bb
+++ b/recipes/tasks/task-boot.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Basic task to get a device booting"
-PR = "r50"
+PR = "r51"
inherit task
diff --git a/recipes/tasks/task-shr-feed.bb b/recipes/tasks/task-shr-feed.bb
index 17787d926f..328a422064 100644
--- a/recipes/tasks/task-shr-feed.bb
+++ b/recipes/tasks/task-shr-feed.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "SHR Feed"
-PR = "r26"
+PR = "r28"
PV = "1.0"
LICENSE = "GPL"
@@ -211,7 +211,6 @@ RDEPENDS_${PN} += "\
elmdentica \
shr-installer \
eject \
- illume-keyboard-german \
illume-keyboard-arabic \
illume-keyboard-browse \
illume-keyboard-danish \
@@ -219,10 +218,11 @@ RDEPENDS_${PN} += "\
illume-keyboard-dutch \
illume-keyboard-dvorak \
illume-keyboard-french \
+ illume-keyboard-german \
illume-keyboard-hebrew \
illume-keyboard-numeric-alt \
- illume-keyboard-russian-terminal \
illume-keyboard-russian \
+ illume-keyboard-russian-terminal \
python-xlib \
xcompmgr \
man \
@@ -253,6 +253,8 @@ RDEPENDS_${PN} += "\
transmission \
xf86-input-tslib \
fltkcocktailbar \
+ fltkcurrency \
+ mokoeightball \
babiloo-efl \
make \
"
diff --git a/recipes/tasks/task-shr-minimal.bb b/recipes/tasks/task-shr-minimal.bb
index 1507ded9da..caf2597ae0 100644
--- a/recipes/tasks/task-shr-minimal.bb
+++ b/recipes/tasks/task-shr-minimal.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "SHR Lite Image Feed"
-PR = "r17"
+PR = "r18"
PV = "2.0"
LICENSE = "GPL"
@@ -115,6 +115,7 @@ RDEPENDS_${PN}-x = "\
glibc-utils \
glibc-charmap-utf-8 \
e-wm-menu-shr \
+ shr-wizard \
shr-theme-gry \
etk-theme-shr \
${@get_rdepends(bb, d)} \
diff --git a/recipes/tasks/task-slugos.bb b/recipes/tasks/task-slugos.bb
index 35b0f8382e..8ed43b1983 100644
--- a/recipes/tasks/task-slugos.bb
+++ b/recipes/tasks/task-slugos.bb
@@ -6,7 +6,7 @@
DESCRIPTION = "Task packages for the SlugOS distribution"
HOMEPAGE = "http://www.nslu2-linux.org"
LICENSE = "MIT"
-PR = "r23"
+PR = "r24"
PACKAGE_ARCH = "${MACHINE_ARCH}"
COMPATIBLE_MACHINE = "(nslu2|ixp4xx|sheevaplug)"
ALLOW_EMPTY = "1"
@@ -129,7 +129,7 @@ RDEPENDS += "\
busybox initscripts-slugos slugos-init \
update-modules sysvinit udev \
module-init-tools modutils-initscripts \
- opkg-collateral opkg-nogpg-nocurl \
+ opkg-collateral ${IPKG_VARIANT} \
libgcc \
beep \
util-linux-mount \
diff --git a/recipes/tcltk/tcl_8.4.19.bb b/recipes/tcltk/tcl_8.4.19.bb
index dc71db9c72..ff63472a31 100644
--- a/recipes/tcltk/tcl_8.4.19.bb
+++ b/recipes/tcltk/tcl_8.4.19.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Tool Command Language"
LICENSE = "tcl"
SECTION = "devel/tcltk"
HOMEPAGE = "http://tcl.sourceforge.net"
-PR = "r3"
+PR = "r4"
SRC_URI = "\
${SOURCEFORGE_MIRROR}/tcl/tcl${PV}-src.tar.gz \
@@ -15,6 +15,8 @@ inherit autotools
EXTRA_OECONF = "--enable-threads"
+FILES_${PN} += "${prefix}/lib"
+
do_configure() {
gnu-configize
oe_runconf
diff --git a/recipes/ti/bitblit_svn.bb b/recipes/ti/bitblit_svn.bb
index f813b31f06..cc7dbf9a6b 100644
--- a/recipes/ti/bitblit_svn.bb
+++ b/recipes/ti/bitblit_svn.bb
@@ -18,18 +18,6 @@ PR = "r1"
S = "${WORKDIR}/trunk/bitblit"
-XDC_TARGET = gnu.targets.arm.GCArmv5T
-XDC_PLATFORM_dm6446-evm = ti.platforms.evmDM6446
-XDC_PLATFORM_da830-omapl137-evm = ti.platforms.omapl137
-PLATFORM_XDC = ${XDC_PLATFORM}
-
-export XDC_TARGET
-export XDC_PLATFORM
-export PLATFORM_XDC
-
-PLATFORM_dm6446-evm = "dm6446"
-PLATFORM_da830-omapl137-evm = "ol137"
-
export LINUXLIBS_INSTALL_DIR="${STAGING_DIR_HOST}/usr"
export EXEC_DIR = "${D}${datadir}/ti/bitblit/"
diff --git a/recipes/ti/files/Makefile-dsplink-dsp b/recipes/ti/files/Makefile-dsplink-dsp
index 0861f1ee21..0861f1ee21 100755..100644
--- a/recipes/ti/files/Makefile-dsplink-dsp
+++ b/recipes/ti/files/Makefile-dsplink-dsp
diff --git a/recipes/ti/files/Makefile-dsplink-gpp b/recipes/ti/files/Makefile-dsplink-gpp
index d9f2f6209a..d9f2f6209a 100755..100644
--- a/recipes/ti/files/Makefile-dsplink-gpp
+++ b/recipes/ti/files/Makefile-dsplink-gpp
diff --git a/recipes/ti/files/dm355mm.patch b/recipes/ti/files/dm355mm.patch
new file mode 100644
index 0000000000..6ee6064f5a
--- /dev/null
+++ b/recipes/ti/files/dm355mm.patch
@@ -0,0 +1,498 @@
+diff -uNr dm355_codecs_1_13_000/dm355mm/module/dm350mmap.c dm355_codecs_1_13_000.new/dm355mm/module/dm350mmap.c
+--- dm355_codecs_1_13_000/dm355mm/module/dm350mmap.c 2009-05-20 11:22:57.000000000 -0500
++++ dm355_codecs_1_13_000.new/dm355mm/module/dm350mmap.c 2009-06-09 10:43:25.000000000 -0500
+@@ -7,7 +7,7 @@
+ * Use of this software is controlled by the terms and conditions found in the
+ * license agreement under which this software has been supplied or provided.
+ * ============================================================================
+- */
++ */
+ #include <linux/module.h>
+ #include <linux/init.h>
+ #include <linux/moduleparam.h>
+@@ -20,274 +20,283 @@
+ #include <linux/proc_fs.h>
+ #include <linux/kernel.h>
+ #include <linux/device.h>
+-
++#include <linux/clk.h>
++
+ #include <asm/page.h>
+ #include <asm/uaccess.h>
+ #include <asm/pgtable.h>
+ #include <asm/io.h>
+-#include<asm/system.h>
+-#include<asm-arm/memory.h>
++#include <asm/system.h>
++#include <asm/memory.h>
++
+ #include <asm/irq.h>
+-
++
++#include <linux/version.h>
+ #include <linux/completion.h>
+-#include <asm/arch/edma.h>
+-
++#include <mach/edma.h>
++
+ #define ASQINT_ENABLE
+- typedef struct _edma_params
+-{
+- unsigned long src;
+- unsigned long dst;
+- unsigned int srcmode;
+- unsigned int srcfifowidth;
+- int srcbidx;
+- int srccidx;
+- unsigned int dstmode;
+- unsigned int dstfifowidth;
+- int dstbidx;
+- int dstcidx;
+- int acnt;
+- int bcnt;
+- int ccnt;
+- int bcntrld;
+- int syncmode;
+- } edma_params;
++typedef struct _edma_params {
++ unsigned long src;
++ unsigned long dst;
++ unsigned int srcmode;
++ unsigned int srcfifowidth;
++ int srcbidx;
++ int srccidx;
++ unsigned int dstmode;
++ unsigned int dstfifowidth;
++ int dstbidx;
++ int dstcidx;
++ int acnt;
++ int bcnt;
++ int ccnt;
++ int bcntrld;
++ int syncmode;
++} edma_params;
+
+ #define DM350MMAP_IOCMEMCPY 0x7
+ #define DM350MMAP_IOCWAIT 0x8
+ #define DM350MMAP_IOCCLEAR_PENDING 0x9
+-
++
+ #ifdef __DEBUG
+-#define __D(fmt, args...) printk(KERN_DEBUG "DM350MMAP Debug: " fmt, ## args)
++# define __D(fmt, args...) printk(KERN_DEBUG "DM350MMAP Debug: " fmt, ## args)
+ #else /* */
+-#define __D(fmt, args...)
++# define __D(fmt, args...)
+ #endif /* */
+-
++
+ #define __E(fmt, args...) printk(KERN_ERR "DM350MMAP Error: " fmt, ## args)
+-
++
+ #define MAXTYPE(T) ((T) (((T)1 << ((sizeof(T) * 8) - 1) ^ ((T) -1))))
+-
++
+ static int major = 0;
+
+ #if (USE_UDEV==1)
+ static struct class *dm350mmap_class;
+-
+ #endif // USE_UDEV
+-static DECLARE_MUTEX_LOCKED (dm350mmap_reply_mutex);
+-int master_ch;
+-struct completion edmacompletion;
+-
+-/* Forward declaration of system calls */
+-static int ioctl (struct inode *inode, struct file *filp, unsigned int cmd,
+- unsigned long args);
+-static int mmap (struct file *filp, struct vm_area_struct *vma);
+-static int open (struct inode *inode, struct file *filp);
+-static int release (struct inode *inode, struct file *filp);
++
++static DECLARE_MUTEX(dm350mmap_reply_mutex);
++static struct completion edmacompletion;
++
++/* Forward declaration of system calls */
++static int ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
++ unsigned long args);
++static int mmap(struct file *filp, struct vm_area_struct *vma);
++static int open(struct inode *inode, struct file *filp);
++static int release(struct inode *inode, struct file *filp);
+ static struct file_operations dm350mmap_fxns = { ioctl: ioctl, mmap: mmap, open: open, release:release
+-
+ };
+
+-static irqreturn_t irq_handler (int irq, void *dev_id, struct pt_regs *regs)
++/* Structure to hold mjcp clock info */
++static struct clk *mjcp = NULL;
++
++//static irqreturn_t irq_handler (int irq, void *dev_id, struct pt_regs *regs)
++static irqreturn_t irq_handler(int irq, void *dev_id)
+ {
+-
+- /* Release the mutex, suggesting sequencer processing complete */
+- up (&dm350mmap_reply_mutex);
+- return IRQ_HANDLED;
++ /* Release the mutex, suggesting sequencer processing complete */
++ up(&dm350mmap_reply_mutex);
++ return IRQ_HANDLED;
+ }
+
+-static void memcpy_dma_irq_handler (int lch, u16 ch_status, void *data)
++static void memcpy_dma_irq_handler(unsigned lch, u16 ch_status, void *data)
+ {
+- complete_all (&edmacompletion);
+-}
++ complete_all(&edmacompletion);
++}
+
+-static int mmap (struct file *filp, struct vm_area_struct *vma)
++static int mmap(struct file *filp, struct vm_area_struct *vma)
+ {
+- __D ("mmap: vma->vm_start = %#lx\n", vma->vm_start);
+- __D ("mmap: vma->vm_pgoff = %#lx\n", vma->vm_pgoff);
+- __D ("mmap: vma->vm_end = %#lx\n", vma->vm_end);
+- __D ("mmap: size = %#lx\n", vma->vm_end - vma->vm_start);
+- vma->vm_page_prot = pgprot_noncached (vma->vm_page_prot);
+- if (remap_pfn_range (vma, vma->vm_start,
+-
+-#ifdef LINUX_2_6_18
+- (vma->vm_pgoff >> PAGE_SHIFT),
++ __D("mmap: vma->vm_start = %#lx\n", vma->vm_start);
++ __D("mmap: vma->vm_pgoff = %#lx\n", vma->vm_pgoff);
++ __D("mmap: vma->vm_end = %#lx\n", vma->vm_end);
++ __D("mmap: size = %#lx\n", vma->vm_end - vma->vm_start);
++ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
++ if (remap_pfn_range(vma, vma->vm_start,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ (vma->vm_pgoff >> PAGE_SHIFT),
+ #else /* */
+- vma->vm_pgoff,
++ vma->vm_pgoff,
+ #endif /* */
+-
+- vma->vm_end - vma->vm_start, vma->vm_page_prot))
+- {
+- __E ("mmap: failed remap_pfn_range\n");
+- return -EAGAIN;
++ vma->vm_end - vma->vm_start, vma->vm_page_prot)) {
++ __E("mmap: failed remap_pfn_range\n");
++ return -EAGAIN;
+ }
+- return 0;
++ return 0;
+ }
+
+
+-static int ioctl (struct inode *inode, struct file *filp, unsigned int cmd,
+- unsigned long args)
++static int ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
++ unsigned long args)
+ {
+- unsigned int __user *argp = (unsigned int __user *) args;
+- edma_params edmaparams;
+- int err = 0, tcc = EDMA_TCC_ANY;
+- struct paramentry_descriptor paramentry;
+- switch (cmd)
+- {
+-
+- /*
+- * Tries to clear any previously unaccounted interrupt.
+- */
+- case DM350MMAP_IOCCLEAR_PENDING:
+-
+- {
+- int retval;
+- __D ("Clear Pending Call received.\n");
+- init_MUTEX_LOCKED(&dm350mmap_reply_mutex);
+- return 0;
+- }
+- break;
+-
+- /*
+- * Blocks till the sequencer completion interrupt arrives.
+- */
+- case DM350MMAP_IOCWAIT:
+-
+- {
+- int retval;
+- __D ("WAIT Call received.\n");
+- retval = down_interruptible (&dm350mmap_reply_mutex);
+- return retval;
+- }
+- break;
+- case DM350MMAP_IOCMEMCPY:
+- __D ("MEMCPY ioctl received.\n");
+- if (copy_from_user (&edmaparams, argp, sizeof (edmaparams)))
+- {
+- return -EFAULT;
+- }
+- err =
+- davinci_request_dma (EDMA_DMA_CHANNEL_ANY, "EDMA memcpy",
+- memcpy_dma_irq_handler, NULL, &master_ch, &tcc,
+- EVENTQ_1);
+-
+- /* Handle Failure condition here */
+- if (err < 0)
+- {
+- __E ("Error in requesting Master channel %d = 0x%x\n", master_ch,
+- err);
+- return err;
+- }
+- davinci_stop_dma (master_ch);
+- init_completion (&edmacompletion);
+- davinci_set_dma_src_params (master_ch,
+- (unsigned long) edmaparams.src,
+- edmaparams.srcmode,
+- edmaparams.srcfifowidth);
+- davinci_set_dma_dest_params (master_ch,
+- (unsigned long) edmaparams.dst,
+- edmaparams.dstmode,
+- edmaparams.dstfifowidth);
+- davinci_set_dma_src_index (master_ch, edmaparams.srcbidx,
+- edmaparams.srccidx);
+- davinci_set_dma_dest_index (master_ch, edmaparams.dstbidx,
+- edmaparams.dstcidx);
+- davinci_set_dma_transfer_params (master_ch, edmaparams.acnt,
+- edmaparams.bcnt, edmaparams.ccnt,
+- edmaparams.bcntrld,
+- edmaparams.syncmode);
+- davinci_get_dma_params (master_ch, &paramentry);
+-
+- /*printk("%x : %x : %x : %x : %x : %x : %x\n", paramentry.opt,
+- paramentry.a_b_cnt, paramentry.src_dst_bidx,
+- paramentry.src_dst_cidx, paramentry.ccnt, paramentry.src,
+- paramentry.dst); */
+- davinci_set_dma_params (master_ch, &paramentry);
+- davinci_start_dma (master_ch);
+- wait_for_completion (&edmacompletion);
+-
+- //printk("Dma completed... \n");
+- davinci_stop_dma (master_ch);
+- davinci_free_dma (master_ch);
+- break;
+- default:
+- __E ("Unknown ioctl received = %d.\n", cmd);
+- return -EINVAL;
++ unsigned int __user *argp = (unsigned int __user *) args;
++ edma_params edmaparams;
++ int edma_channel;
++ int retval = 0;
++ struct edmacc_param p_ram;
++
++ switch (cmd) {
++
++ /*
++ * Tries to clear any previously unaccounted interrupt.
++ */
++ case DM350MMAP_IOCCLEAR_PENDING:
++ __D("Clear Pending Call received.\n");
++ init_MUTEX_LOCKED(&dm350mmap_reply_mutex);
++ break;
++
++ /*
++ * Blocks till the sequencer completion interrupt arrives.
++ */
++ case DM350MMAP_IOCWAIT:
++ __D("WAIT Call received.\n");
++ retval = down_interruptible(&dm350mmap_reply_mutex);
++ break;
++
++ case DM350MMAP_IOCMEMCPY:
++ __D("MEMCPY ioctl received.\n");
++ if (copy_from_user(&edmaparams, argp, sizeof(edmaparams))) {
++ retval = -EFAULT;
++ break;
++ }
++
++ edma_channel =
++ edma_alloc_channel(EDMA_CHANNEL_ANY, &memcpy_dma_irq_handler,
++ NULL, EVENTQ_1);
++
++ /* Handle Failure condition here */
++ if (edma_channel < 0) {
++ __E("Error in requesting Master channel = 0x%x\n",
++ edma_channel);
++ retval = edma_channel;
++ break;
++ }
++
++ edma_stop(edma_channel);
++
++ init_completion(&edmacompletion);
++
++ edma_set_src(edma_channel,
++ (dma_addr_t) edmaparams.src,
++ edmaparams.srcmode, edmaparams.srcfifowidth);
++
++ edma_set_dest(edma_channel,
++ (dma_addr_t) edmaparams.dst,
++ edmaparams.dstmode, edmaparams.dstfifowidth);
++
++ edma_set_src_index(edma_channel, edmaparams.srcbidx,
++ edmaparams.srccidx);
++ edma_set_dest_index(edma_channel, edmaparams.dstbidx,
++ edmaparams.dstcidx);
++
++ edma_set_transfer_params(edma_channel,
++ edmaparams.acnt,
++ edmaparams.bcnt,
++ edmaparams.ccnt,
++ edmaparams.bcntrld, edmaparams.syncmode);
++
++ edma_read_slot(edma_channel, &p_ram);
++ p_ram.opt |= TCINTEN | EDMA_TCC(edma_channel);
++ edma_write_slot(edma_channel, &p_ram);
++
++ edma_start(edma_channel);
++ wait_for_completion(&edmacompletion);
++ edma_stop(edma_channel);
++ edma_free_channel(edma_channel);
++ break;
++
++ default:
++ __E("Unknown ioctl received = %d.\n", cmd);
++ retval = -EINVAL;
++ break;
+ }
+- return 0;
++
++ return retval;
+ }
+
+
+-static int open (struct inode *inode, struct file *filp)
++static int open(struct inode *inode, struct file *filp)
+ {
+- __D ("open: called.\n");
+- return 0;
++ __D("open: called.\n");
++ return 0;
+ }
+
+
+-static int release (struct inode *inode, struct file *filp)
++static int release(struct inode *inode, struct file *filp)
+ {
+- __D ("close: called.");
+- return 0;
++ __D("close: called.");
++ return 0;
+ }
+
+
+-int __init dm350mmap_init (void)
++int __init dm350mmap_init(void)
+ {
+- __D ("** DM350MMAP kernel module built: " __DATE__ " " __TIME__ "\n");
+- major = register_chrdev (0, "dm350mmap", &dm350mmap_fxns);
+- if (major < 0)
+- {
+- __E ("Failed to allocate major number.\n");
+- return -ENODEV;
++ /* In the GIT kernel unused clocks are disabled. To run codec we need to
++ * enable mjcp clock.
++ */
++ mjcp = clk_get(NULL, "mjcp");
++ if (IS_ERR(mjcp))
++ printk(KERN_WARNING "unable to get MJCP clock\n");
++ else
++ clk_enable(mjcp);
++
++ __D("** DM350MMAP kernel module built: " __DATE__ " " __TIME__ "\n");
++ major = register_chrdev(0, "dm350mmap", &dm350mmap_fxns);
++ if (major < 0) {
++ __E("Failed to allocate major number.\n");
++ return -ENODEV;
+ }
+- __D ("Allocated major number: %d\n", major);
+-
++ __D("Allocated major number: %d\n", major);
++
+ #if (USE_UDEV==1)
+- dm350mmap_class = class_create (THIS_MODULE, "dm350mmap");
+- if (IS_ERR (dm350mmap_class))
+- {
+- __E ("Error creating dm350mmap device class.\n");
+- return -EIO;
++ dm350mmap_class = class_create(THIS_MODULE, "dm350mmap");
++ if (IS_ERR(dm350mmap_class)) {
++ __E("Error creating dm350mmap device class.\n");
++ return -EIO;
+ }
+- class_device_create (dm350mmap_class, NULL, MKDEV (major, 0), NULL,
+- "dm350mmap");
+-
++ class_device_create(dm350mmap_class, NULL, MKDEV(major, 0), NULL,
++ "dm350mmap");
++
+ #endif // USE_UDEV
+- __D ("Successfully initialized module\n");
+-
++ __D("Successfully initialized module\n");
++
+ #ifdef ASQINT_ENABLE
+- if (request_irq (IRQ_ASQINT, irq_handler, 0, "seq_arm_interrupt", NULL))
+- {
+- __D ("Could not install ISR\n");
++ if (request_irq(IRQ_ASQINT, irq_handler, 0, "seq_arm_interrupt", NULL)) {
++ __D("Could not install ISR\n");
+ }
+-
++
+ #endif /* */
++ init_MUTEX_LOCKED(&dm350mmap_reply_mutex);
+ return 0;
+ }
+
+
+-void __exit dm350mmap_exit (void)
++void __exit dm350mmap_exit(void)
+ {
+- __D ("In dm350mmap_exit()\n");
+-
++ /* if mjcp clock is enabled then free it */
++ if (mjcp) {
++ clk_disable(mjcp);
++ clk_put(mjcp);
++ }
++
++ __D("In dm350mmap_exit()\n");
++
+ #if (USE_UDEV==1)
+- class_device_destroy (dm350mmap_class, MKDEV (major, 0));
+- class_destroy (dm350mmap_class);
+-
++ class_device_destroy(dm350mmap_class, MKDEV(major, 0));
++ class_destroy(dm350mmap_class);
++
+ #endif // USE_UDEV
+- __D ("Unregistering character device dm350mmap\n");
+- unregister_chrdev (major, "dm350mmap");
+-
++ __D("Unregistering character device dm350mmap\n");
++ unregister_chrdev(major, "dm350mmap");
++
+ #ifdef ASQINT_ENABLE
+- free_irq (IRQ_ASQINT, NULL);
+-
++ free_irq(IRQ_ASQINT, NULL);
++
+ #endif /* */
+- __D ("dm350mmap unregistered\n");
+-}
++ __D("dm350mmap unregistered\n");
++}
+
+-module_init (dm350mmap_init);
++module_init(dm350mmap_init);
+
+-module_exit (dm350mmap_exit);
+-MODULE_LICENSE ("GPL");
+-MODULE_AUTHOR ("Texas Instruments");
+-MODULE_DESCRIPTION ("DM350 mmap export to userland");
++module_exit(dm350mmap_exit);
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("DM350 mmap export to userland");
+
diff --git a/recipes/ti/files/loadmodules-ti-dmai-dm365_al.sh b/recipes/ti/files/loadmodules-ti-dmai-dm365_al.sh
new file mode 100644
index 0000000000..921c924b9a
--- /dev/null
+++ b/recipes/ti/files/loadmodules-ti-dmai-dm365_al.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+rmmod cmemk 2>/dev/null
+rmmod irqk 2>/dev/null
+rmmod edmak 2>/dev/null
+rmmod dm365mmap 2>/dev/null
+
+# Pools configuration
+insmod cmemk.ko phys_start=0x85000000 phys_end=0x88000000 pools=6x4096,2x8192,1x11908,2x13184,1x2697152,6x4096,1x30720,3x81920,1x3185664,64x56,1x320,1x640,1x81920,1x6650880,2x608,1x296,1x28,2x24,23x1548288,1x154288 allowOverlap=1 phys_start_1=0x00001000 phys_end_1=0x00008000 pools_1=1x28672
+
+insmod irqk.ko
+insmod edmak.ko
+insmod dm365mmap.ko
+rm -f /dev/dm365mmap
+mknod /dev/dm365mmap c `awk "\\$2==\"dm365mmap\" {print \\$1}" /proc/devices` 0
diff --git a/recipes/ti/files/mapdmaq b/recipes/ti/files/mapdmaq
index 5c11bc3141..5c11bc3141 100755..100644
--- a/recipes/ti/files/mapdmaq
+++ b/recipes/ti/files/mapdmaq
Binary files differ
diff --git a/recipes/ti/files/mp3dec_cs1omap3530.patch b/recipes/ti/files/mp3dec_cs1omap3530.patch
new file mode 100644
index 0000000000..4ed9267e40
--- /dev/null
+++ b/recipes/ti/files/mp3dec_cs1omap3530.patch
@@ -0,0 +1,41 @@
+diff -uNr -x .xdcenv.mak -x mp3dec cs1omap3530_1_00_01/packages/ti/sdo/server/cs/codec.cfg cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/codec.cfg
+--- cs1omap3530_1_00_01/packages/ti/sdo/server/cs/codec.cfg 2009-10-26 14:19:21.000000000 -0500
++++ cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/codec.cfg 2009-10-26 14:36:03.000000000 -0500
+@@ -92,6 +92,14 @@
+ MPEG4ENC.alg.udataSection = "DDR2";
+ MPEG4ENC.alg.dataSection = "DDR2";
+
++ var MP3DEC = xdc.useModule('ti.sdo.codecs.mp3dec.ce.MP3DEC');
++
++ // Module Config
++ MP3DEC.alg.watermark = false;
++ MP3DEC.alg.codeSection = "DDR2";
++ MP3DEC.alg.udataSection = "DDR2";
++ MP3DEC.alg.dataSection = "DDR2";
++
+ /*
+ * The array of algorithms this server can serve up. This array also
+ * configures details about the threads which will be created to run the
+@@ -103,6 +111,11 @@
+ groupId : 1,
+ },
+
++ {name: "mp3dec", mod: MP3DEC , threadAttrs: {
++ stackMemId: 0, priority: Server.MINPRI + 3},
++ groupId : 1,
++ },
++
+ {name: "g711dec", mod: G711DEC , threadAttrs: {
+ stackMemId: 0, priority: Server.MINPRI + 3},
+ groupId : 1,
+diff -uNr -x .xdcenv.mak -x mp3dec cs1omap3530_1_00_01/packages/ti/sdo/server/cs/package.xs cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/package.xs
+--- cs1omap3530_1_00_01/packages/ti/sdo/server/cs/package.xs 2009-10-26 14:19:20.000000000 -0500
++++ cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/package.xs 2009-10-26 14:53:40.000000000 -0500
+@@ -17,6 +17,7 @@
+ validate_one_codec( "ti.sdo.codecs.mpeg2dec", "MPEG2DEC" );
+ validate_one_codec( "ti.sdo.codecs.mpeg4dec", "MPEG4DEC" );
+ validate_one_codec( "ti.sdo.codecs.mpeg4enc", "MPEG4ENC" );
++ validate_one_codec( "ti.sdo.codecs.mp3dec", "MP3DEC" );
+ }
+
+ function validate_one_codec( packageName, moduleName ) {
diff --git a/recipes/ti/files/unloadmodules-ti-dmai-apps.sh b/recipes/ti/files/unloadmodules-ti-dmai-apps.sh
index 793d727f39..793d727f39 100755..100644
--- a/recipes/ti/files/unloadmodules-ti-dmai-apps.sh
+++ b/recipes/ti/files/unloadmodules-ti-dmai-apps.sh
diff --git a/recipes/ti/gstreamer-ti/gstreamer-ti-dm355-rc.sh b/recipes/ti/gstreamer-ti/gstreamer-ti-dm355-rc.sh
new file mode 100644
index 0000000000..d95658e44b
--- /dev/null
+++ b/recipes/ti/gstreamer-ti/gstreamer-ti-dm355-rc.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+#
+# configure kernel modules for TI DSP based gstreamer plugin
+#
+
+# Disable XDM 0.9 elements
+export GST_TI_TIViddec_DISABLE=1
+export GST_TI_TIAuddec_DISABLE=1
+export GST_TI_TIVidenc_DISABLE=1
+export GST_TI_TIImgdec_DISABLE=1
+export GST_TI_TIImgenc_DISABLE=1
+
+load_module() {
+ # CMEM Allocation
+ # 1x3628800 Circular buffer
+ # 4x829440 Video buffers (max D1 PAL)
+ # 1x829440 Underlying software components (codecs, etc.)
+ # 1x518400 Underlying software components (codecs, etc.)
+ # 1x4948 Underlying software components (codecs, etc.)
+ # 1x1505280 Underlying software components (codecs, etc.)
+ # 1x5760 Underlying software components (codecs, etc.)
+ # 1x8192 Underlying software components (codecs, etc.)
+ # 1x1 Dummy buffer used during final flush
+ modprobe cmemk phys_start=0x87400000 phys_end=0x88000000 \
+ pools=1x3628800,5x829440,1x518400,1x4948,1x1505280,1x5760,1x8192,1x1
+
+ modprobe dm350mmap
+ rm -f /dev/dm350mmap
+ mknod /dev/dm350mmap c `awk "\\$2==\"dm350mmap\" {print \\$1}" /proc/devices` 0
+
+}
+
+unload_module() {
+ rmmod cmemk
+ rmmod dm350mmap
+}
+
+case "$1" in
+ start)
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ stop)
+ echo -n "Unloading kernel module ..."
+ unload_module
+ echo " done"
+ ;;
+ restart)
+ echo -n "Unloading kernel module ..."
+ unload_module
+ echo " done"
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ *)
+ echo "$0 <start/stop/restart>"
+ ;;
+esac
+
diff --git a/recipes/ti/gstreamer-ti/gstreamer-ti-dm6446-rc.sh b/recipes/ti/gstreamer-ti/gstreamer-ti-dm6446-rc.sh
new file mode 100644
index 0000000000..69468977bd
--- /dev/null
+++ b/recipes/ti/gstreamer-ti/gstreamer-ti-dm6446-rc.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+#
+# configure kernel modules for TI DSP based gstreamer plugin
+#
+
+# Disable XDM 0.9 elements
+export GST_TI_TIViddec_DISABLE=1
+export GST_TI_TIAuddec_DISABLE=1
+export GST_TI_TIVidenc_DISABLE=1
+export GST_TI_TIImgdec_DISABLE=1
+export GST_TI_TIImgenc_DISABLE=1
+
+load_module() {
+ # insert cmemk, tell it to occupy physical 118MB-128MB.
+ #
+ # CMEM Allocation
+ # 1x5250000 Circular buffer
+ # 2x829440 Video buffers (max D1 PAL)
+ # 3x1036800 Video buffers (larger size needed for MPEG4 encoder)
+ # 1x8192 Underlying software components (codecs, etc.)
+ # 1x1 Dummy buffer used during final flush
+ modprobe cmemk phys_start=0x87600000 phys_end=0x88000000 \
+ pools=1x5250000,2x829440,3x1036800,1x8192,1x1
+
+ # Notes on using the "playbin" element:
+ # -------------------------------------
+ # Playbin requires one 6 video buffers, and we have only allocated five.
+ # If you replace the "2x829440,3x1036800" with "6x829440" it should work, but
+ # you will not be able to use the MPEG4 encoder.
+ #
+ #insmod cmemk.ko phys_start=0x87600000 phys_end=0x88000000 \
+ # pools=1x5250000,6x829440,1x8192,1x1
+
+ # insert dsplinkk
+ modprobe dsplinkk
+
+ # make /dev/dsplink
+ rm -f /dev/dsplink
+ mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+}
+
+unload_module() {
+ rmmod cmemk
+ rmmod dsplinkk
+ rm -f /dev/dsplink
+}
+
+case "$1" in
+ start)
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ stop)
+ echo -n "Unloading kernel module ..."
+ unload_module
+ echo " done"
+ ;;
+ restart)
+ echo -n "Unloading kernel module ..."
+ unload_module
+ echo " done"
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ *)
+ echo "$0 <start/stop/restart>"
+ ;;
+esac
+
diff --git a/recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh b/recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh
index 9a19cf926b..b61b40c176 100644
--- a/recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh
+++ b/recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh
@@ -12,11 +12,11 @@
#
# Disable XDM 0.9 elements
-export GST_TI_TIViddec_DISABLED=1
-export GST_TI_TIAuddec_DISABLED=1
-export GST_TI_TIVidenc_DISABLED=1
-export GST_TI_TIImgdec_DISABLED=1
-export GST_TI_TIImgenc_DISABLED=1
+export GST_TI_TIViddec_DISABLE=1
+export GST_TI_TIAuddec_DISABLE=1
+export GST_TI_TIVidenc_DISABLE=1
+export GST_TI_TIImgdec_DISABLE=1
+export GST_TI_TIImgenc_DISABLE=1
load_module() {
#
diff --git a/recipes/ti/gstreamer-ti_svn.bb b/recipes/ti/gstreamer-ti_svn.bb
index 099ca1d91b..de09d36caa 100644
--- a/recipes/ti/gstreamer-ti_svn.bb
+++ b/recipes/ti/gstreamer-ti_svn.bb
@@ -1,90 +1,85 @@
DESCRIPTION = "Gstreamer plugin for TI Davinci and OMAP processors"
-
-require ti-paths.inc
-
-inherit update-rc.d
-inherit autotools
-
DEPENDS = "ti-dmai gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly"
-GST_TI_RC_SCRIPT_armv7a="gstreamer-ti-omap3530-rc.sh"
-
-# Fetch source from svn repo
SRCREV = "459"
+# Again, no '.' in PWD allowed :(
+PV = "svnr${SRCREV}"
+PR = "r37"
+
+GST_TI_RC_SCRIPT_omap3 = "gstreamer-ti-omap3530-rc.sh"
+GST_TI_RC_SCRIPT_dm6446="gstreamer-ti-dm6446-rc.sh"
+GST_TI_RC_SCRIPT_dm355="gstreamer-ti-dm355-rc.sh"
+
SRC_URI = "svn://gforge.ti.com/svn/gstreamer_ti/trunk;module=gstreamer_ti;proto=https;user=anonymous;pswd='' \
file://gstreamer-ti-tracker-462.patch;patch=1 \
file://gstreamer-ti-remove-mp3-decode-support-from-auddec1.patch;patch=1 \
- file://${GST_TI_RC_SCRIPT} \
+ file://${GST_TI_RC_SCRIPT} \
"
-SRC_URI_append_armv7a = " \
+SRC_URI_append_omap3 = " \
file://gstreamer-ti-add-omapfb.patch;patch=1 \
"
-# Again, no '.' in PWD allowed :(
-PR = "r37"
-PV = "svnr${SRCREV}"
-
S = "${WORKDIR}/gstreamer_ti/ti_build/ticodecplugin"
-INITSCRIPT_NAME = "gstti-init"
-INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
-
-XDC_TARGET = gnu.targets.arm.GCArmv5T
-XDC_PLATFORM_dm6446-evm = ti.platforms.evmDM6446
-XDC_PLATFORM_da830-omapl137-evm = ti.platforms.omapl137
-PLATFORM_XDC = ${XDC_PLATFORM}
-export XDC_TARGET
-export XDC_PLATFORM
-export PLATFORM_XDC
+inherit autotools update-rc.d
-PLATFORM_dm6446-evm = "dm6446"
-PLATFORM_da830-omapl137-evm = "ol137"
-
-CPPFLAGS_append = " -DPlatform_${PLATFORM}"
+require ti-paths.inc
-PACKAGE_ARCH = "${MACHINE_ARCH}"
+XDC_TARGET = "gnu.targets.arm.GCArmv5T"
+XDC_PLATFORM_dm6446 = "ti.platforms.evmDM6446"
+XDC_PLATFORM_omapl137 = "ti.platforms.omapl137"
+PLATFORM_XDC = "${XDC_PLATFORM}"
+PLATFORM_dm6446 = "dm6446"
+PLATFORM_omapl137 = "ol137"
+export XDC_TARGET
+export XDC_PLATFORM
+export PLATFORM_XDC
# export codec combo (or server) locations
export HMJCP_COMBO = "${installdir}/codec-combo/hmjcp.accel"
export CODEC_SERVER = "${installdir}/codec-combo/cs.x64P"
-export ENCODE_COMBO = "${installdir}/codec-combo/encodeCombo.x64P"
+export ENCODE_COMBO = "${installdir}/codec-combo/encodeCombo.x64P"
export DECODE_COMBO = "${installdir}/codec-combo/decodeCombo.x64P"
-do_install_prepend () {
- # install gstreamer demo scripts
- install -d ${D}/${installdir}/gst
- cp -r ${WORKDIR}/gstreamer_ti/gstreamer_demo/shared ${D}/${installdir}/gst
- cp -r ${WORKDIR}/gstreamer_ti/gstreamer_demo/${PLATFORM} ${D}/${installdir}/gst
-
- # default loadmodule script is hard-coded for insmod, change to modprobe
- sed -i 's/insmod/modprobe/g' ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
- sed -i 's/.ko//g' ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
- if [ "${PLATFORM}" = "omap3530" ]; then
- echo "modprobe sdmak" >> ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
- fi
- chmod 0755 ${D}/${installdir}/gst -R
-
- install -d ${D}${sysconfdir}/init.d/
- install -m 0755 ${WORKDIR}/${GST_TI_RC_SCRIPT} ${D}${sysconfdir}/init.d/gstti-init
-}
+CPPFLAGS_append = " -DPlatform_${PLATFORM}"
-pkg_postinst_gstreamer-ti-demo-script () {
- ln -sf ${installdir}/codec-combo/* ${installdir}/gst/${PLATFORM}/
+do_install_prepend () {
+ # install gstreamer demo scripts
+ install -d ${D}/${installdir}/gst
+ cp -r ${WORKDIR}/gstreamer_ti/gstreamer_demo/shared ${D}/${installdir}/gst
+ cp -r ${WORKDIR}/gstreamer_ti/gstreamer_demo/${PLATFORM} ${D}/${installdir}/gst
+ # default loadmodule script is hard-coded for insmod, change to modprobe
+ sed -i 's/insmod/modprobe/g' ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
+ sed -i 's/.ko//g' ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
+ if [ "${PLATFORM}" = "omap3530" ]; then
+ echo "modprobe sdmak" >> ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
+ fi
+ chmod 0755 ${D}/${installdir}/gst -R
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/${GST_TI_RC_SCRIPT} ${D}${sysconfdir}/init.d/gstti-init
}
+PACKAGE_ARCH = "${MACHINE_ARCH}"
PACKAGES += "gstreamer-ti-demo-script"
-FILES_gstreamer-ti-demo-script = "${installdir}/gst/*"
-RDEPENDS_gstreamer-ti-demo-script = "gstreamer-ti"
-RDEPENDS_${PN} = " \
+RDEPENDS_gstreamer-ti-demo-script = "${PN}"
+RRECOMMENDS_${PN} = " \
gst-plugins-base-meta \
gst-plugins-good-meta \
gst-plugins-bad-meta \
gst-plugins-ugly-meta \
ti-dmai-apps"
+FILES_gstreamer-ti-demo-script = "${installdir}/gst/*"
FILES_${PN} += "${libdir}/gstreamer-0.10/*.so ${sysconfdir}"
FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.a ${libdir}/gstreamer-0.10/*.la"
FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+pkg_postinst_gstreamer-ti-demo-script () {
+ ln -sf ${installdir}/codec-combo/* ${installdir}/gst/${PLATFORM}/
+}
+
+INITSCRIPT_NAME = "gstti-init"
+INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
+
diff --git a/recipes/ti/ti-cgt6x-native_6.1.9.bb b/recipes/ti/ti-cgt6x-native_6.1.9.bb
index f8d9d98c1b..9674e7699c 100644
--- a/recipes/ti/ti-cgt6x-native_6.1.9.bb
+++ b/recipes/ti/ti-cgt6x-native_6.1.9.bb
@@ -1,9 +1,9 @@
require ti-cgt6x.inc
inherit native
-# download ti_cgt_c6000_6.1.9_setup_linux_x86.bin from https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm and copy in Arago (or OE) download directory.
+# download ti_cgt_c6000_6.1.9_setup_linux_x86.bin from https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm and copy in Arago/OE download directory.
-SRC_URI = "http://install.source.dir.local/ti_cgt_c6000_6.1.9_setup_linux_x86.bin"
+SRC_URI = "http://install.source.dir.local/ti_cgt_c6000_6.1.9_setup_linux_x86.bin"
BINFILE = "ti_cgt_c6000_6.1.9_setup_linux_x86.bin"
diff --git a/recipes/ti/ti-cgt6x.inc b/recipes/ti/ti-cgt6x.inc
index 35a9252cfe..fa46d12aeb 100644
--- a/recipes/ti/ti-cgt6x.inc
+++ b/recipes/ti/ti-cgt6x.inc
@@ -2,41 +2,8 @@ DESCRIPTION = "Code Generation Tools for TI DaVinci and OMAP"
# This file defines function used for extracting .bin file
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
+TI_BIN_UNPK_CMDS="Y:qY:workdir: : "
+TI_BIN_UNPK_WDEXT="/cgt"
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, "qY\n"
- print >>f, "%s/cgt\n" % workdir
- print >>f, " \n"
- print >>f, " \n"
-
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
+require ti-eula-unpack.inc
diff --git a/recipes/ti/ti-cmem-module_2.23.1.bb b/recipes/ti/ti-cmem-module_2.23.1.bb
deleted file mode 100644
index 7af1216cd3..0000000000
--- a/recipes/ti/ti-cmem-module_2.23.1.bb
+++ /dev/null
@@ -1,68 +0,0 @@
-DESCRIPTION = "CMEM module for TI ARM/DSP processors"
-inherit module
-
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-# Download codec_engine_2_23_01.tar.gz from https://www-a.ti.com/downloads/sds_support/targetcontent/CE/ce_2_23/index.html and copy in Arago (or OE) download directory.
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23_01.tar.gz \
- file://cmem-remove-show-pte-function.patch;patch=1 "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23_01"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2231"
-
-do_compile() {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem/apps
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- EXEC_DIR="${D}${datadir}/ti/ti-cmem-apps" \
- install
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-PACKAGES += " ti-cmem-apps"
-FILES_ti-cmem-apps = "${datadir}/ti/ti-cmem-apps/*"
-INSANE_SKIP_ti-cmem-apps = True
-
-
diff --git a/recipes/ti/ti-cmem-module_2.23.bb b/recipes/ti/ti-cmem-module_2.23.bb
deleted file mode 100644
index 0200369501..0000000000
--- a/recipes/ti/ti-cmem-module_2.23.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-DESCRIPTION = "CMEM module for TI ARM/DSP processors"
-inherit module
-
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23.tar.gz"
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-PV = "223"
-
-do_compile() {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-
diff --git a/recipes/ti/ti-cmem-module_2.24.01.bb b/recipes/ti/ti-cmem-module_2.24.01.bb
deleted file mode 100644
index 625d292a55..0000000000
--- a/recipes/ti/ti-cmem-module_2.24.01.bb
+++ /dev/null
@@ -1,66 +0,0 @@
-DESCRIPTION = "CMEM module for TI ARM/DSP processors"
-inherit module
-
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_24_01.tar.gz \
- file://cmem-remove-show-pte-function.patch;patch=1 "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_24_01"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2241"
-
-do_compile() {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem/apps
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- EXEC_DIR="${D}${prefix}/ti/ti-cmem-apps" \
- install
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-PACKAGES += " ti-cmem-apps"
-FILES_ti-cmem-apps = "${prefix}/ti/ti-cmem-apps/*"
-INSANE_SKIP_ti-cmem-apps = True
-
-
diff --git a/recipes/ti/ti-codec-combo-dm355.inc b/recipes/ti/ti-codec-combo-dm355.inc
deleted file mode 100644
index e975793082..0000000000
--- a/recipes/ti/ti-codec-combo-dm355.inc
+++ /dev/null
@@ -1,38 +0,0 @@
-# This file defines function used for extracting .bin file
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, "Y\n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
-
diff --git a/recipes/ti/ti-codec-combo-dm355_1.13.bb b/recipes/ti/ti-codec-combo-dm355_1.13.bb
deleted file mode 100644
index 2db0720c6a..0000000000
--- a/recipes/ti/ti-codec-combo-dm355_1.13.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-require ti-codec.inc
-require ti-codec-combo-dm355.inc
-
-SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/codecs/dm355_codecs_setuplinux_1_13_000.bin \
- file://mapdmaq \
- "
-
-BINFILE = "dm355_codecs_setuplinux_1_13_000.bin"
-
-S = "${WORKDIR}/dm355_codecs_1_13_000"
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "113"
-PR = "r15"
-
-do_compile() {
- echo "Do nothing"
-}
-
-do_install () {
- # install mapdmaq on target
- install -d ${D}/${installdir}/codec-combo
- install -m 0755 ${WORKDIR}/mapdmaq ${D}/${installdir}/codec-combo
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-INSANE_SKIP_${PN} = True
-
diff --git a/recipes/ti/ti-codec-combo-dm6446.inc b/recipes/ti/ti-codec-combo-dm6446.inc
deleted file mode 100644
index 44508bf49e..0000000000
--- a/recipes/ti/ti-codec-combo-dm6446.inc
+++ /dev/null
@@ -1,39 +0,0 @@
-# This file defines function used for extracting .bin file
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, "Y\n"
- print >>f, " \n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
-
diff --git a/recipes/ti/ti-codec-combo-omap3530.inc b/recipes/ti/ti-codec-combo-omap3530.inc
deleted file mode 100644
index a884549622..0000000000
--- a/recipes/ti/ti-codec-combo-omap3530.inc
+++ /dev/null
@@ -1,46 +0,0 @@
-# This file defines function used for unpacking the .bin file downloaded over
-# the http and display EULA.
-# BINFILE - name of the install jammer .bin file
-# TARFILE - name of the tar file inside the install jammer
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
- tarfile = bb.data.getVar('TARFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- f.close()
-
- # Expand the tarball that was created
- cmd = 'tar xz --no-same-owner -f %s -C %s' % (tarfile, workdir)
- ret = os.system(cmd)
-
- # Return to the previous directory
- os.chdir(save_cwd)
- return ret == 0
-}
-
diff --git a/recipes/ti/ti-codec-combo-omap3530_3.16.1.bb b/recipes/ti/ti-codec-combo-omap3530_3.16.1.bb
deleted file mode 100644
index 3a9efdd60d..0000000000
--- a/recipes/ti/ti-codec-combo-omap3530_3.16.1.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-require ti-codec.inc
-require ti-codec-combo-omap3530.inc
-
-SRC_URI = "http://software-dl.ti.com/sdo/sdo_apps_public_sw/omap3530_dvsdk_combos_tspa/omap3530_dvsdk_combos_tspa-3_16_01-Linux-x86.bin"
-
-# Specify names of the InstallJammer binary file and the tarball it extracts
-BINFILE = "omap3530_dvsdk_combos_tspa-3_16_01-Linux-x86.bin"
-TARFILE = "omap3530_dvsdk_combos_tspa/omap3530_dvsdk_combos_tspa_3_16_01.tar.gz"
-
-S = "${WORKDIR}/omap3530_dvsdk_combos_tspa_3_16_01"
-
-DEPENDS="ti-codec-engine ti-dsplink-module"
-
-CODEC_INSTALL_DIR = "${S}"
-
-export CODEGEN_INSTALL_DIR
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "3161"
-PR = "r17"
-do_compile() {
- make CE_INSTALL_DIR=${CE_INSTALL_DIR} \
- FC_INSTALL_DIR=${FC_INSTALL_DIR} \
- LINK_INSTALL_DIR=${LINK_INSTALL_DIR} \
- CMEM_INSTALL_DIR=${CMEM_INSTALL_DIR} \
- LPM_INSTALL_DIR=${LPM_INSTALL_DIR} \
- BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} \
- CODEGEN_INSTALL_DIR=${CODEGEN_INSTALL_DIR} \
- CODEC_INSTALL_DIR=${CODEC_INSTALL_DIR} \
- XDC_INSTALL_DIR=${XDC_INSTALL_DIR} clean
-
- make CE_INSTALL_DIR=${CE_INSTALL_DIR} \
- FC_INSTALL_DIR=${FC_INSTALL_DIR} \
- LINK_INSTALL_DIR=${LINK_INSTALL_DIR} \
- CMEM_INSTALL_DIR=${CMEM_INSTALL_DIR} \
- LPM_INSTALL_DIR=${LPM_INSTALL_DIR} \
- BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} \
- CODEGEN_INSTALL_DIR=${CODEGEN_INSTALL_DIR} \
- CODEC_INSTALL_DIR=${CODEC_INSTALL_DIR} \
- XDC_INSTALL_DIR=${XDC_INSTALL_DIR}
-}
-
-do_install () {
- install -d ${D}/${installdir}/codec-combo
- cd ${S}
- for file in `find . -name *.x64P`; do
- cp ${file} ${D}/${installdir}/codec-combo
- done
-}
-
-
diff --git a/recipes/ti/ti-codec-combos_3.16.bb b/recipes/ti/ti-codec-combos_3.16.bb
deleted file mode 100644
index 5d8faca30f..0000000000
--- a/recipes/ti/ti-codec-combos_3.16.bb
+++ /dev/null
@@ -1,90 +0,0 @@
-DESCRIPTION = "Codec combos for omap3530"
-DEPENDS = "ti-codec-engine"
-LICENCE = "unknown"
-
-require ti-paths.inc
-
-# Tar-Up Codec Combos from the OMAP DVSDK (http://www.ti.com/dvevmupdates) and drop in files/
-SRC_URI = "file://omap3530_dvsdk_combos_3_16.tar.gz \
- "
-
-S = "${WORKDIR}/omap3530_dvsdk_combos_3_16"
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "316"
-PR = "r15"
-
-TARGET = "all"
-
-export CE_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/packages;${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
-
-# Needed for now since makefile in latest package assumes this is set
-export CODEC_INSTALL_DIR="${S}"
-
-do_compile() {
-
- # For now, remove the reference to Rules.make and swap prod for eval, since this only has eval libs included
- sed -i \
- -e '/Rules.make/d' \
- -e 's:$(FC_INSTALL_DIR)/packages;::g' \
- -e 's:$(XDAIS_INSTALL_DIR)/packages;::g' \
- -e 's:$(FC_INSTALL_DIR)/fctools/packages;::g' \
- -e 's:$(BIOSUTILS_INSTALL_DIR)/packages;::g' \
- -e 's:$(CMEM_INSTALL_DIR)/packages;::g' \
- -e 's:$(LINK_INSTALL_DIR)/packages;::g' \
- -e 's:$(LPM_INSTALL_DIR)/packages;::g' \
- -e s:prod:eval:g \
- ${S}/Makefile
-
- # Fix-up config.bld to swap out hardcoded references to tools paths
- sed -i -e s:/opt/dmsw/cg6x_6_0_16:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
- ${S}/config.bld
-
- # Add make target to allow package to be prepared for building (normally this package is a binary release)
- echo "makebuildable:
- \$(XDC) .make -PR .
-" >> ${S}/Makefile
-
- oe_runmake makebuildable
- oe_runmake clean
- oe_runmake
-}
-
-do_install () {
- echo oe_runmake install
-
- install -d ${D}/${datadir}/ti-codec-combos
-
- cd ${S}
-
- # grab the server executables
- for i in $(find . -name "*.x64P") ; do
- install ${i} ${D}/${datadir}/ti-codec-combos
- done
-
- # copy the generated data sheets as well for reference
- #for i in $(find . -name "*.DataSheet.*") ; do
-
- # infact, just copy all the html files (including the server datasheets) from the distro
- # - this includes top level html (with codec versions) + some qualiTI codec test reports
- for i in $(find . -name "*.html") ; do
- install ${i} ${D}/${datadir}/ti-codec-combos
- done
-
-}
-
-do_stage () {
- install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos
- cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos
- for codec in encode decode ; do
- mkdir -p ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos/packages/ti/sdo/servers/$codec/package/info/${datadir}/ti-codec-combos
- ln -sf ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos/packages/ti/sdo/servers/$codec/package/info/$codec* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos/packages/ti/sdo/servers/$codec/package/info/${datadir}/ti-codec-combos
- done
-}
-
-FILES_ti-codec-combos = "${datadir}/ti-codec-combos/*"
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
diff --git a/recipes/ti/ti-codec-engine.inc b/recipes/ti/ti-codec-engine.inc
new file mode 100644
index 0000000000..81dae36bda
--- /dev/null
+++ b/recipes/ti/ti-codec-engine.inc
@@ -0,0 +1,27 @@
+DESCRIPTION = "Codec Engine for TI ARM/DSP processors"
+
+# compile time dependencies
+DEPENDS = "ti-xdctools-native ti-xdais-native ti-linuxutils ti-framework-components"
+DEPENDS_append_dm6446 = " ti-cgt6x-native ti-dspbios-native"
+DEPENDS_append_omap3 = " ti-cgt6x-native ti-dspbios-native"
+
+BASE_SRC_URI = "http://install.source.dir.local"
+SRC_URI = "${BASE_SRC_URI}/codec_engine_${PV},lite.tar.gz "
+
+# Set the source directory
+S = "${WORKDIR}/codec_engine_${PV}"
+
+do_compile () {
+ echo "! Do not rebuild for now !"
+}
+
+# stage tree - other packages may need this
+do_stage() {
+ install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}
+ cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-codec-engine_2.21.bb b/recipes/ti/ti-codec-engine_2.21.bb
deleted file mode 100644
index d0cd18e8e9..0000000000
--- a/recipes/ti/ti-codec-engine_2.21.bb
+++ /dev/null
@@ -1,278 +0,0 @@
-require dsplink.inc
-
-INSANE_SKIP_ti-codec-engine-apps = True
-INSANE_SKIP_ti-dsplink-apps = True
-INSANE_SKIP_${PN} = True
-
-DESCRIPTION = "Codec Engine for TI ARM/DSP processors"
-
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-inherit module
-
-# tconf from xdctools dislikes '.' in pwd :/
-PV = "221"
-
-# Get CE tarball from TI website, place in sources and calculate
-# md5sum
-# Look for tarball at https://www-a.ti.com/downloads/sds_support/targetcontent/CE/index.html
-
-SRC_URI = "http://install.tarball.in.source.dir/codec_engine_2_21.tar.gz \
- file://cmem-class-device-27-and-sched-include-fix.patch;patch=1 \
- file://sdma-class-device-and-includes-fix.patch;patch=1 \
- file://dsplink-semaphore-27.patch;patch=1 \
- file://dsplink-add-class-device-create-support.patch;patch=1 \
- file://lpm-device-create-and-semaphore-include-fix.patch;patch=1 \
- file://lpm-make-symbol-warnings-fix.patch;patch=1 \
- file://Makefile-dsplink-gpp \
- file://Makefile-dsplink-dsp \
- file://loadmodules-ti-dsplink-apps.sh \
- file://unloadmodules-ti-dsplink-apps.sh \
- file://loadmodules-ti-codec-engine-apps.sh \
- file://unloadmodules-ti-codec-engine-apps.sh \
-"
-
-S = "${WORKDIR}/codec_engine_2_21"
-
-require ti-paths.inc
-
-export DSPLINK="${S}/cetools/packages/dsplink"
-
-PARALLEL_MAKE = ""
-
-# the include files on top define do_compile for the submodules
-do_compile_append() {
-
-#dsplink already done from inclusion of require dsplink.inc
-
-#lpm bits
- if [ -e ${S}/cetools/packages/ti/bios/power/ ] ; then
-
- # Build the DSP power manager kernel module
- cd ${S}/cetools/packages/ti/bios/power/modules/${DSPPOWERSOC}/lpm
-
- # Still need to move this into the patch file
- if [ $(echo ${KERNEL_VERSION} | cut -c5,6) -gt 26 ] ; then
- sed -i -e s:asm/semaphore:linux/semaphore: lpm_driver.c
- fi
-
- #what is this for?
- rm -f *o
-
- # lpm also needs KERNEL_INSTALL_DIR and MVTOOL_PREFIX which come from ti-paths.inc
- export DSPLINK_REPO=${DSPLINK}/..
- # should move the clean step into the clean stage..
- #oe_runmake clean
- oe_runmake
- fi
-
-#cmemk bits
- if [ -e ${S}/cetools/packages/ti/sdo/linuxutils/cmem ] ; then
- echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make
- echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
- echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}" >> ${S}/Rules.make
- #export DSPLINK=${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/dsplink
-
- # Build the cmem kernel module and associated test apps
- # We unset CFLAGS because kernel modules need different ones, this is basically a verbatim copy of kernel.bbclass and module-base.bbclass
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
- oe_runmake clean
- oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
- KERNEL_SRC=${STAGING_KERNEL_DIR} \
- KERNEL_VERSION=${KERNEL_VERSION} \
- CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}"
- fi
-
-#sdma bits
- if [ -e ${S}/cetools/packages/ti/sdo/linuxutils/sdma ] ; then
- echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make
- echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
- echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}" >> ${S}/Rules.make
-
- # Build the sdma kernel module and associated test apps
- # We unset CFLAGS because kernel modules need different ones, this is basically a verbatim copy of kernel.bbclass and module-base.bbclass
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/sdma
- oe_runmake clean
- oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
- KERNEL_SRC=${STAGING_KERNEL_DIR} \
- KERNEL_VERSION=${KERNEL_VERSION} \
- CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}"
- fi
-
-
-#need to add other modules here, like IRQ, etc
-
-
-#now build the CE examples
- cd ${S}/examples
-
- # Fix paths to arm crosstools, c6x codegen and x86 gcc
- # Also disable uclibc and x86 builds
- sed -i -e s:/db/toolsrc/library/tools/vendors/cs/arm/arm-2007q3:${CROSS_DIR}:g \
- -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
- -e s:/db/toolsrc/library/tools/vendors/opensource/gcc/4.1.0/Linux/gcc-4.1.0-glibc-2.3.6/i686-unknown-linux-gnu:/usr:g \
- -e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
- -e 's:true, // build for uC Linux:false,:g' \
- -e 's:true, // build for PC Linux:false,:g' \
- ${S}/examples/user.bld
-
- # For now, remove all targets, except dm6446 and omap3530
- sed -i \
- -e '/evmDM357/d' \
- -e '/evmDM6446/d' \
- -e '/evmDM6467/d' \
- -e '/evmDM355/d' \
- -e '/evmDM6437/d' \
- -e '/evmDM648/d' \
- -e '/sdp3430/d' \
- -e '/evm2530/d' \
- ${S}/examples/user.bld
-
- # Fix path to c6x codegen
- sed -i -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
- xdcpaths.mak
-
- # Start building the CE examples: codecs, extensions, servers (codec bundles) and ARM side apps
- # the DSP side uses CC to point to the c6x codegen, but would get the gcc tool
- unset CC
-
- # Make clean doesn't do what you'd expect, it only cleans stuff you've enabled, so some cruft remains
-
- # First clean
- for i in codecs extensions servers apps ; do
- make -e -C ${S}/examples/ti/sdo/ce/examples/$i clean
- done
-
- # Then build the examples
- for i in codecs extensions servers apps ; do
- make -e -C ${S}/examples/ti/sdo/ce/examples/$i
- done
-}
-
-do_install_append () {
- #driver - kernel module
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- cp ${S}/cetools/packages/ti/bios/power/modules/${DSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
- cp ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
- cp ${S}/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
-
- #library
- #install -d ${D}/${libdir}
- #install -m 0755 ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/dsplink.lib ${D}/${libdir}
-
- #sample apps - this is very 64x / v5T specific at the moment - we really need CE to give us this list...
- install -d ${D}/${datadir}/ti-codec-engine
- # we change pwd so that find gives us relative path to the files, which we use to create the same structure on the target
- cd ${S}/examples/ti/sdo/ce
-
- #test app module un/load scripts
- install ${WORKDIR}/loadmodules-ti-dsplink-apps.sh ${D}/${datadir}/ti-dsplink
- install ${WORKDIR}/unloadmodules-ti-dsplink-apps.sh ${D}/${datadir}/ti-dsplink
-
- #ce samples
- # first find all the app files named '.out'
- for i in $(find . -name "*.out") ; do
- # first create the directory
- install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- # now copy the file
- install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- done
-
- # next find all the app files named '.xv5T'
- for i in $(find . -name "*.xv5T") ; do
- # first create the directory
- install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- # now copy the file
- install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- done
-
- # then find all the app/server files named '.x64P'
- for i in $(find . -name "*.x64P") ; do
- # first create the directory
- install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- # now copy the file
- install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- done
-
- # finally find all the app files named '.dat'
- for i in $(find . -name "*.dat") ; do
- # first create the directory
- install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- # now copy the file
- install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- done
-
- #test app module un/load scripts
- install ${WORKDIR}/loadmodules-ti-codec-engine-apps.sh ${D}/${datadir}/ti-codec-engine
- install ${WORKDIR}/unloadmodules-ti-codec-engine-apps.sh ${D}/${datadir}/ti-codec-engine
-
- # we should install the CMEM apps as well here
-
- # finally, strip targets that we're not supporting here
- # - TODO...
-}
-
-PACKAGES =+ "ti-lpm-module ti-cmem-module ti-sdma-module ti-codec-engine-apps"
-
-FILES_ti-lpm-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
-FILES_ti-cmem-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-FILES_ti-sdma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdmak.ko"
-FILES_ti-codec-engine-apps = "${datadir}/ti-codec-engine/*"
-
-pkg_postinst_ti-lpm-module () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm_ti-lpm-module () {
- update-modules || true
-}
-
-pkg_postinst_ti-cmem-module () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm_ti-cmem-module () {
- update-modules || true
-}
-
-pkg_postinst_ti-sdma-module () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm_ti-sdma-module () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-#legacy upgrade helpers
-RPROVIDES_ti-cmem-module += "ti-cmemk-module"
-RREPLACES_ti-cmem-module += "ti-cmemk-module"
-
-# ti-dsplink-module can be built by either codec-engine or standalone dsplink - tell it to use this one, else unwanted dependence
-PREFERRED_PROVIDER_ti-dsplink-module = "ti-codec-engine"
-
-#add run-time dependencies - note for kernel module we can only use RRECOMMENDS, since modules might be built into the kernel
-RRECOMMENDS_ti-codec-engine-apps += "ti-dsplink-module ti-lpm-module ti-cmem-module ti-sdma-module"
-
diff --git a/recipes/ti/ti-codec-engine_2.23.1.bb b/recipes/ti/ti-codec-engine_2.23.1.bb
deleted file mode 100644
index e002850a9e..0000000000
--- a/recipes/ti/ti-codec-engine_2.23.1.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION = "Codec Engine 2.23.01 for TI ARM/DSP processors"
-
-# compile time dependencies
-DEPENDS_dm6446-evm += "ti-xdctools-native ti-cgt6x-native ti-dspbios-native"
-DEPENDS_omap3evm += "ti-cgt6x-native ti-dspbios-native ti-xdctools-native"
-DEPENDS_armv7a += "ti-cgt6x-native ti-dspbios-native ti-xdctools-native"
-DEPENDS_dm355-evm += "ti-xdctools-native"
-
-# tconf from xdctools dislikes '.' in pwd :/
-PR = "r16"
-PV = "2231"
-
-# Download codec_engine_2_23_01.tar.gz from https://www-a.ti.com/downloads/sds_support/targetcontent/CE/ce_2_23/index.html and copy in Arago (or OE) download directory.
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23_01.tar.gz "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23_01"
-
-do_compile () {
- echo "! Do not rebuild for now !"
-}
-
-# stage tree - other packages may need this
-do_stage() {
- install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}
- cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/
-}
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-INHIBIT_PACKAGE_STRIP = "1"
-
diff --git a/recipes/ti/ti-codec-engine_2.24.01.bb b/recipes/ti/ti-codec-engine_2.24.01.bb
index 9be02046a4..ae0197e3d2 100644
--- a/recipes/ti/ti-codec-engine_2.24.01.bb
+++ b/recipes/ti/ti-codec-engine_2.24.01.bb
@@ -3,14 +3,14 @@ DESCRIPTION = "Codec Engine 2.24.01 for TI ARM/DSP processors"
require ti-paths.inc
# compile time dependencies
-DEPENDS = "ti-xdctools-native"
+DEPENDS = "ti-framework-components ti-xdais-native ti-xdctools-native ti-cgt6x-native"
-DEPENDS_append_dm6446-evm = " ti-cgt6x-native ti-dspbios-native ti-dsplink-module"
-DEPENDS_append_armv7a = " ti-cgt6x-native ti-dspbios-native ti-dsplink-module"
+DEPENDS_append_dm6446 = " ti-dspbios-native ti-linuxutils ti-dsplink-module"
+DEPENDS_append_omap3 = " ti-dspbios-native ti-linuxutils ti-dsplink-module"
# tconf from xdctools dislikes '.' in pwd :/
PR = "r7"
-PV = "2241"
+PV = "2_24_01"
SRC_URI = "http://install.source.dir.local/codec_engine_2_24_01.tar.gz "
@@ -18,19 +18,18 @@ SRC_URI = "http://install.source.dir.local/codec_engine_2_24_01.tar.gz "
S = "${WORKDIR}/codec_engine_2_24_01"
# Define Device variable
-DEVICES_dm6446-evm ?= "DM6446"
-
-# define gppos variable
-GPPOS_dm6446-evm ?= "LINUX_GCC"
+DEVICES_dm6446 ?= "DM6446"
+DEVICES_omap3 ?= "OMAP3530"
+DEVICES_dm355 ?= "DM355"
#define PROGRAM variables
-PROGRAMS = "APP_CLIENT DSP_SERVER"
+PROGRAMS ?= "APP_CLIENT DSP_SERVER"
+PROGRAMS_dm355 = "APP_LOCAL"
LINK_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dsplink-module/packages"
-DSPBIOS_DIR="${STAGING_DIR_NATIVE}/ti-dspbios-native"
-CGT6x_DIR="${STAGING_DIR_NATIVE}/ti-cgt6x-native"
-XDCTOOLS_DIR="${STAGING_DIR_NATIVE}/ti-xdctools-native"
-CE_INSTALL_DIR="${S}"
+CGT6x_DIR = "${STAGING_DIR_NATIVE}/ti-cgt6x-native"
+XDCTOOLS_DIR = "${STAGING_DIR_NATIVE}/ti-xdctools-native"
+CE_INSTALL_DIR = "${S}"
do_compile () {
@@ -38,35 +37,34 @@ do_compile () {
-e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
${S}/examples/xdcpaths.mak
- for i in codecs extensions servers apps ; do
- cd ${S}/examples/ti/sdo/ce/examples/$i
- make DEVICES="${DEVICES}" \
- GPPOS="${GPPOS}" \
- PROGRAMS="${PROGRAMS}" \
- CE_INSTALL_DIR="${CE_INSTALL_DIR}" \
- XDC_INSTALL_DIR="${XDCTOOLS_DIR}" \
- BIOS_INSTALL_DIR="${DSPBIOS_DIR}"\
- DSPLINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
- XDAIS_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- FC_INSTALL_DIR="${FC_INSTALL_DIR}" \
- CMEM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- LPM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- EDMA3_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- FC_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- CGTOOLS_V5T="${CROSS_DIR}"\
- CGTOOLS_C64P="${CGT6x_DIR}" \
- clean all
- done
+ for i in codecs extensions servers apps ; do
+ cd ${S}/examples/ti/sdo/ce/examples/$i
+ make DEVICES="${DEVICES}" \
+ GPPOS="${GPPOS}" \
+ PROGRAMS="${PROGRAMS}" \
+ CE_INSTALL_DIR="${CE_INSTALL_DIR}" \
+ XDC_INSTALL_DIR="${XDCTOOLS_DIR}" \
+ BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}"\
+ DSPLINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
+ XDAIS_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ FC_INSTALL_DIR="${FC_INSTALL_DIR}" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
+ LPM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ EDMA3_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ CGTOOLS_V5T="${CROSS_DIR}"\
+ CGTOOLS_C64P="${CGT6x_DIR}" \
+ clean all
+ done
}
do_install() {
install -d ${D}/${installdir}/codec-engine-apps
- cp ${S}/examples/apps/system_files/${DEVICES}/loadmodules.sh ${D}/${installdir}/codec-engine-apps
+ cp ${S}/examples/apps/system_files/${DEVICES}/loadmodules.sh ${D}/${installdir}/codec-engine-apps
sed -i 's/insmod/modprobe/g' ${D}/${installdir}/codec-engine-apps/loadmodules.sh
cd ${S}/examples/ti/sdo/ce/examples
- for i in $(find . -name "*.xv5T"); do
+ for i in $(find . -name "*.xv5T"); do
install -d ${D}/${installdir}/codec-engine-apps/`dirname ${i} | cut -f3 -d /`
install ${i} ${D}/${installdir}/codec-engine-apps/`dirname ${i} | cut -f3 -d /`
diff --git a/recipes/ti/ti-codec-engine_2.25.01.bb b/recipes/ti/ti-codec-engine_2.25.01.bb
new file mode 100644
index 0000000000..5a5c7d3d44
--- /dev/null
+++ b/recipes/ti/ti-codec-engine_2.25.01.bb
@@ -0,0 +1,7 @@
+require ti-codec-engine.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PV = "2_25_00_01"
+PR = "r20"
+
diff --git a/recipes/ti/ti-codecs-dm355.inc b/recipes/ti/ti-codecs-dm355.inc
new file mode 100644
index 0000000000..8a95dc3751
--- /dev/null
+++ b/recipes/ti/ti-codecs-dm355.inc
@@ -0,0 +1,37 @@
+DESCRIPTION = "DM355 Codecs"
+
+BASE_SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/codecs"
+SRC_URI = "${BASE_SRC_URI}/dm355_codecs_setuplinux_${PV}.bin \
+ file://mapdmaq \
+ "
+
+S = "${WORKDIR}/dm355_codecs_${PV}"
+
+require ti-paths.inc
+
+BINFILE = "dm355_codecs_setuplinux_${PV}.bin"
+TI_BIN_UNPK_CMDS = "Y:Y: qY:workdir"
+
+require ti-eula-unpack.inc
+
+do_compile() {
+ echo "Do nothing"
+}
+
+do_install () {
+ # install mapdmaq on target
+ install -d ${D}/${installdir}/codecs
+ install -m 0755 ${WORKDIR}/mapdmaq ${D}/${installdir}/codecs
+}
+
+do_stage() {
+ install -d ${CODEC_INSTALL_DIR}
+ cp -pPrf ${S}/* ${CODEC_INSTALL_DIR}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FILES_${PN} = "${installdir}/codecs/mapdmaq"
+
+INHIBIT_PACKAGE_STRIP = "1"
+INSANE_SKIP_${PN} = "True"
diff --git a/recipes/ti/ti-codecs-dm355_1.13.bb b/recipes/ti/ti-codecs-dm355_1.13.bb
new file mode 100644
index 0000000000..bb7adbdb8e
--- /dev/null
+++ b/recipes/ti/ti-codecs-dm355_1.13.bb
@@ -0,0 +1,6 @@
+PV = "1_13_000"
+PR = "r16"
+
+require ti-codecs-dm355.inc
+
+
diff --git a/recipes/ti/ti-codecs-dm365.inc b/recipes/ti/ti-codecs-dm365.inc
new file mode 100644
index 0000000000..b3166bef67
--- /dev/null
+++ b/recipes/ti/ti-codecs-dm365.inc
@@ -0,0 +1,26 @@
+DESCRIPTION = "DM365 Codecs"
+
+BASE_SRC_URI = "http://install.source.dir.local"
+SRC_URI = "${BASE_SRC_URI}/dm365_codecs_${PV}.tar.gz"
+
+S = "${WORKDIR}/dm365_codecs_${PV}"
+
+do_compile() {
+ echo "Do nothing"
+}
+
+do_install () {
+ # install mapdmaq on target
+ install -d ${D}/${installdir}/codecs
+}
+
+do_stage() {
+ install -d ${CODEC_INSTALL_DIR}
+ cp -pPrf ${S}/* ${CODEC_INSTALL_DIR}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+FILES_${PN} = "${installdir}/codecs"
+INHIBIT_PACKAGE_STRIP = "1"
+INSANE_SKIP_${PN} = True
+
diff --git a/recipes/ti/ti-codecs-dm365_1.0.6.bb b/recipes/ti/ti-codecs-dm365_1.0.6.bb
new file mode 100644
index 0000000000..59f57223a9
--- /dev/null
+++ b/recipes/ti/ti-codecs-dm365_1.0.6.bb
@@ -0,0 +1,6 @@
+
+PV = "01_00_06"
+
+require ti-codecs-dm365.inc
+
+
diff --git a/recipes/ti/ti-codec-combo-dm6446_2.05.bb b/recipes/ti/ti-codecs-dm6446_2.05.bb
index 07d9dffe6b..63a57fef8f 100644
--- a/recipes/ti/ti-codec-combo-dm6446_2.05.bb
+++ b/recipes/ti/ti-codecs-dm6446_2.05.bb
@@ -1,12 +1,14 @@
-DEPENDS="ti-codec-engine ti-dsplink-module"
+DEPENDS="ti-codec-engine ti-linuxutils"
require ti-codec.inc
-require ti-codec-combo-dm6446.inc
SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/S1SDKLNX/DVSDK_2_00/exports/dm6446_codecs_setuplinux_2_00_00_22.bin"
S = "${WORKDIR}/dvsdk_2_00_00_22/dm6446_dvsdk_combos_2_05"
BINFILE = "dm6446_codecs_setuplinux_2_00_00_22.bin"
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
+
+require ti-eula-unpack.inc
export ${CODEGEN_INSTALL_DIR}
diff --git a/recipes/ti/ti-cs1-omap3530_1.0.1.bb b/recipes/ti/ti-codecs-omap3530_1.01.bb
index 9779c33b71..104b128282 100644
--- a/recipes/ti/ti-cs1-omap3530_1.0.1.bb
+++ b/recipes/ti/ti-codecs-omap3530_1.01.bb
@@ -1,19 +1,21 @@
require ti-codec.inc
-require ti-cs1-omap3530.inc
SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_3_00/latest//exports/cs1omap3530_setuplinux_1_00_01-42.bin"
# Specify names of the InstallJammer binary file and the tarball it extracts
BINFILE = "cs1omap3530_setuplinux_1_00_01-42.bin"
+TI_BIN_UNPK_CMDS = "Y:Y: qY:workdir"
+
+require ti-eula-unpack.inc
S = "${WORKDIR}/dvsdk_3_00_01_42/cs1omap3530_1_00_01"
-DEPENDS="ti-codec-engine ti-dsplink-module"
+DEPENDS="ti-codec-engine ti-linuxutils"
export CODEGEN_INSTALL_DIR
# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "101"
+PV = "1_00_1"
PR = "r5"
do_compile() {
diff --git a/recipes/ti/ti-codec-combo-omapl137_1.0.bb b/recipes/ti/ti-codecs-omapl137_1.0.bb
index 25baa694f5..269f9a3e00 100644
--- a/recipes/ti/ti-codec-combo-omapl137_1.0.bb
+++ b/recipes/ti/ti-codecs-omapl137_1.0.bb
@@ -6,7 +6,7 @@ SRC_URI = "http://install.source.dir.local/omapl137_dvsdk_combos_1_0.tar.gz"
S = "${WORKDIR}/omapl137_dvsdk_combos_1_0"
# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "100"
+PV = "1_0"
PR = "r1"
do_compile() {
diff --git a/recipes/ti/ti-cs1-omap3530.inc b/recipes/ti/ti-cs1-omap3530.inc
deleted file mode 100644
index cb9696d61d..0000000000
--- a/recipes/ti/ti-cs1-omap3530.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-
-# This file defines function used for extracting .bin file
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, "Y\n"
- print >>f, " \n"
- print >>f, "qY\n"
- print >>f, "%s\n" % workdir
-
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
-
diff --git a/recipes/ti/ti-dm355mm-module_1.13.bb b/recipes/ti/ti-dm355mm-module_1.13.bb
index 59cbd69e10..6941d0c741 100644
--- a/recipes/ti/ti-dm355mm-module_1.13.bb
+++ b/recipes/ti/ti-dm355mm-module_1.13.bb
@@ -1,25 +1,19 @@
DESCRIPTION = "User space DMA module for DM355"
-require ti-codec-combo-dm355.inc
+require ti-codecs-dm355.inc
inherit module
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
+PV = "1_13_000"
-SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/codecs/dm355_codecs_setuplinux_1_13_000.bin \
- file://dm355mm_1_30.patch;patch=1 \
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/codecs/dm355_codecs_setuplinux_${PV}.bin \
+ file://dm355mm.patch;patch=1 \
"
+S = "${WORKDIR}/dm355_codecs_${PV}"
+BINFILE="dm355_codecs_setuplinux_${PV}.bin"
-S = "${WORKDIR}/dm355_codecs_1_13_000"
-BINFILE = "dm355_codecs_setuplinux_1_13_000.bin"
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "113"
#This is a kernel module, don't set PR directly
MACHINE_KERNEL_PR_append = "a"
-
do_configure() {
find ${S} -name "*.ko" -exec rm {} \; || true
sed -i -e s:include:#include:g ${S}/dm355mm/Rules.make
@@ -39,19 +33,4 @@ do_install () {
install -m 0755 ${S}/dm355mm/module/dm350mmap.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
}
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
INHIBIT_PACKAGE_STRIP = "1"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/dm350mmap.ko"
-
-
diff --git a/recipes/ti/ti-dm365mm-module.inc b/recipes/ti/ti-dm365mm-module.inc
new file mode 100644
index 0000000000..55f48f137e
--- /dev/null
+++ b/recipes/ti/ti-dm365mm-module.inc
@@ -0,0 +1,28 @@
+DESCRIPTION = "User space DMA module for DM365"
+
+BASE_SRC_URI = "http://install.source.dir.local"
+
+SRC_URI = "${BASE_SRC_URI}/dm365mm_${PV}.tar.gz "
+
+S = "${WORKDIR}/dm365mm_${PV}"
+
+inherit module
+
+do_compile() {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ find ${S} -name "*.ko" -exec rm {} \; || true
+ cd ${S}/module
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}";
+}
+
+do_install () {
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ install -m 0755 ${S}/module/dm365mmap.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+}
+
+INHIBIT_PACKAGE_STRIP = "1"
+INSANE_SKIP_${PN} = True
+
diff --git a/recipes/ti/ti-dm365mm-module_1.0.1.bb b/recipes/ti/ti-dm365mm-module_1.0.1.bb
new file mode 100644
index 0000000000..d929350204
--- /dev/null
+++ b/recipes/ti/ti-dm365mm-module_1.0.1.bb
@@ -0,0 +1,9 @@
+
+require ti-dm365mm-module.inc
+
+PV = "01_00_01"
+
+#This is a kernel module, don't set PR directly
+MACHINE_KERNEL_PR_append = "a"
+
+
diff --git a/recipes/ti/ti-dmai.inc b/recipes/ti/ti-dmai.inc
index 3aafd47cf1..c52e46aaf1 100644
--- a/recipes/ti/ti-dmai.inc
+++ b/recipes/ti/ti-dmai.inc
@@ -1,15 +1,20 @@
DESCRIPTION = "DMAI for TI ARM/DSP processors"
-# NOTE: Use Brijesh' DMAI development branch. The URL *must* be updated once
-# we have stable DMAI 2.x on gforge.
-SRCREV = "342"
-SRC_URI = "svn://gforge.ti.com/svn/dmai/branches;module=BRANCH_BRIJESH_DMAI_DEV_2_xx;proto=https;user=anonymous;pswd='' \
+BRANCH = "BRANCH_BRIJESH_DMAI_DEV_2_xx"
+BRANCH_6467 = "GITPSP_INT_101009"
+
+SRCREV = "364"
+
+SRC_URI = "svn://gforge.ti.com/svn/dmai/branches;module=${BRANCH};proto=https;user=anonymous;pswd='' \
file://loadmodules-ti-dmai-dm355_al.sh \
+ file://loadmodules-ti-dmai-dm365_al.sh \
file://loadmodules-ti-dmai-dm6446_al.sh \
file://loadmodules-ti-dmai-o3530_al.sh \
"
-S = "${WORKDIR}/BRANCH_BRIJESH_DMAI_DEV_2_xx/davinci_multimedia_application_interface"
+S = "${WORKDIR}/${BRANCH}/davinci_multimedia_application_interface"
+
# Yes, the xdc stuff still breaks with a '.' in PWD
PV = "svnr${SRCREV}"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-dmai_svn.bb b/recipes/ti/ti-dmai_svn.bb
index a204120fc2..1fa03e22fa 100644
--- a/recipes/ti/ti-dmai_svn.bb
+++ b/recipes/ti/ti-dmai_svn.bb
@@ -7,19 +7,24 @@ inherit module-base
MACHINE_KERNEL_PR_append = "c"
# compile time dependencies
-DEPENDS_omap3evm += "alsa-lib ti-codec-engine ti-xdctools-native ti-dspbios-native ti-cgt6x-native ti-cs1-omap3530 virtual/kernel ti-dsplink-module"
-DEPENDS_armv7a += "alsa-lib ti-codec-engine ti-xdctools-native ti-dspbios-native ti-cgt6x-native ti-cs1-omap3530 virtual/kernel ti-dsplink-module "
-DEPENDS_dm6446-evm += "alsa-lib ti-codec-engine ti-xdctools-native ti-dspbios-native ti-cgt6x-native ti-codec-combo-dm6446 virtual/kernel ti-dsplink-module "
-DEPENDS_dm355-evm += "alsa-lib ti-codec-engine ti-xdctools-native ti-codec-combo-dm355 virtual/kernel"
-DEPENDS_da830-omapl137-evm += "alsa-lib ti-codec-engine ti-xdctools-native ti-dspbios-native ti-cgt6x-native ti-codec-combo-omapl137 virtual/kernel ti-dsplink-module "
+DEPENDS = "alsa-lib ti-framework-components ti-codec-engine ti-xdctools-native"
+
+DEPENDS_append_omap3 = " ti-dspbios-native ti-cgt6x-native ti-codecs-omap3530 virtual/kernel ti-linuxutils"
+DEPENDS_append_dm6446 = " ti-dspbios-native ti-cgt6x-native ti-codecs-dm6446 virtual/kernel ti-linuxutils"
+DEPENDS_append_dm355 = " ti-codecs-dm355 virtual/kernel"
+DEPENDS_append_dm365 = " ti-codecs-dm365 virtual/kernel"
+DEPENDS_append_omapl137 = " ti-dspbios-native ti-cgt6x-native ti-codecs-omapl137 virtual/kernel ti-linuxutils"
+DEPENDS_append_omapl138 = " ti-dspbios-native ti-cgt6x-native ti-codecs-omapl138 virtual/kernel ti-linuxutils"
# Define DMAI build time variables
-TARGET ?= "all"
-TARGET_armv7a ?= "o3530_al"
-TARGET_dm6446-evm ?= "dm6446_al"
-TARGET_da830-omapl137-evm ?= "ol137_al"
+TARGET_omap3 = "o3530_al"
+TARGET_dm6446 = "dm6446_al"
+TARGET_omapl137 = "ol137_al"
+TARGET_omapl138 = "ol138_al"
+TARGET_dm355 = "dm355_al"
+TARGET_dm365 = "dm365_al"
+TARGET ?= "all"
-DSPBIOS_DIR = "${STAGING_DIR_NATIVE}/ti-dspbios-native"
CGT6x_DIR = "${STAGING_DIR_NATIVE}/ti-cgt6x-native"
XDCTOOLS_DIR = "${STAGING_DIR_NATIVE}/ti-xdctools-native"
USER_XDC_PATH = "${CE_INSTALL_DIR}/examples"
@@ -31,7 +36,7 @@ do_configure () {
# PSP kernel is based on older DSS. we need to replace linux/omapfb.h with
# mach/omapfb.h
- if [ ${MACHINE} == "omap3evm" ] ; then
+ if ![ -e ${STAGING_KERNEL_DIR}/include/linux/omapfb.h ] ; then
sed -i -e s:linux/omapfb:mach/omapfb:g ${S}/dmai/packages/ti/sdo/dmai/linux/Display_fbdev.c
sed -i -e s:linux/omapfb:mach/omapfb:g ${S}/dmai/packages/ti/sdo/dmai/linux/priv/_Display.h
fi
@@ -42,9 +47,9 @@ do_compile () {
unset DMAI_INSTALL_DIR
cd ${S}
- make XDC_INSTALL_DIR="${XDCTOOLS_DIR}" clean
+ make XDC_INSTALL_DIR="${XDCTOOLS_DIR}" PLATFORM="${TARGET}" clean
- # TODO: Figure out how to pass the alsa include location, currently
+ # TODO: Figure out how to pass the alsa require location, currently
# LINUXLIBS_INSTALL_DIR is hard-coded for armv5te
make CE_INSTALL_DIR="${CE_INSTALL_DIR}" \
CODEC_INSTALL_DIR="${CODEC}" \
@@ -52,14 +57,14 @@ do_compile () {
LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
XDC_INSTALL_DIR="${XDCTOOLS_DIR}" \
CODEGEN_INSTALL_DIR="${CGT6x_DIR}" \
- BIOS_INSTALL_DIR="${DSPBIOS_DIR}"\
+ BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}"\
LINUXLIBS_INSTALL_DIR="${STAGING_DIR_HOST}/usr" \
USER_XDC_PATH="${USER_XDC_PATH}" \
CROSS_COMPILE="${CROSS_DIR}/bin/${TARGET_PREFIX}" \
VERBOSE="true" \
- XDAIS_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \
LINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
- CMEM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
LPM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
PLATFORM="${TARGET}"
}
@@ -97,9 +102,9 @@ FILES_ti-dmai-apps = "${installdir}/dmai-apps/*"
FILES_ti-dmai-tests = "${installdir}/dmai-tests/*"
# run time dependencies
-RDEPENDS_ti-dmai-apps_dm355-evm += "ti-dm355mm-module ti-cmem-module ti-codec-combo-dm355"
-RDEPENDS_ti-dmai-apps_dm6446-evm += "ti-cmem-module ti-dsplink-module ti-codec-combo-dm6446"
-RDEPENDS_ti-dmai-apps_omap3evm += "ti-cmem-module ti-dsplink-module ti-cs1-omap3530 ti-lpm-module ti-sdma-module"
-RDEPENDS_ti-dmai-apps_armv7a += "ti-cmem-module ti-dsplink-module ti-cs1-omap3530 ti-lpm-module ti-sdma-module"
-RDEPENDS_ti-dmai-apps_da830-omapl137-evm += "ti-cmem-module ti-dsplink-module ti-codec-combo-ol137"
+RDEPENDS_ti-dmai-apps_dm355 += "ti-dm355mm-module ti-cmem-module ti-codecs-dm355"
+RDEPENDS_ti-dmai-apps_dm6446 += "ti-cmem-module ti-dsplink-module ti-codecs-dm6446"
+RDEPENDS_ti-dmai-apps_omap3 += "ti-cmem-module ti-dsplink-module ti-codecs-omap3530 ti-lpm-module ti-sdma-module"
+RDEPENDS_ti-dmai-apps_omapl137 += "ti-cmem-module ti-dsplink-module ti-codecs-omapl137"
+RDEPENDS_ti-dmai-apps_omapl138 += "ti-cmem-module ti-dsplink-module ti-codecs-omapl138"
diff --git a/recipes/ti/ti-dspbios-native_5.33.02.bb b/recipes/ti/ti-dspbios-native_5.33.02.bb
index 02c2d5690f..e1cf5fbee6 100644
--- a/recipes/ti/ti-dspbios-native_5.33.02.bb
+++ b/recipes/ti/ti-dspbios-native_5.33.02.bb
@@ -1,7 +1,7 @@
require ti-dspbios.inc
inherit native
-# download bios_setuplinux_5_33_02.bin from https://www-a.ti.com/downloads/sds_support/targetcontent/bios/bios_5_33/bios_5_33_02/index_external.html and copy in Arago (or OE) installation directory
+# download bios_setuplinux_5_33_02.bin from https://www-a.ti.com/downloads/sds_support/targetcontent/bios/bios_5_33/bios_5_33_02/index_external.html and copy in Arago/OE installation directory
SRC_URI = "http://install.source.dir.local/bios_setuplinux_5_33_02.bin"
BINFILE="bios_setuplinux_5_33_02.bin"
diff --git a/recipes/ti/ti-dspbios.inc b/recipes/ti/ti-dspbios.inc
index 9e79216554..08d797a6e3 100644
--- a/recipes/ti/ti-dspbios.inc
+++ b/recipes/ti/ti-dspbios.inc
@@ -1,40 +1,6 @@
DESCRIPTION = "TI DSP/BIOS for Davinci and OMAP processor"
-# This file defines function used for extracting .bin file
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- print >>f, "Y\n"
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
+require ti-eula-unpack.inc
diff --git a/recipes/ti/ti-dsplink-module_1.61.3.bb b/recipes/ti/ti-dsplink-module_1.61.3.bb
index 2cdf1a8e28..41fd212a0d 100644
--- a/recipes/ti/ti-dsplink-module_1.61.3.bb
+++ b/recipes/ti/ti-dsplink-module_1.61.3.bb
@@ -6,10 +6,11 @@ inherit module
# compile and run time dependencies
DEPENDS += "virtual/kernel perl-native ti-dspbios-native ti-cgt6x-native update-modules ti-xdctools-native"
-# tconf from xdctools dislikes '.' in pwd :/
#This is a kernel module, don't set PR directly
MACHINE_KERNEL_PR_append = "b"
-PV = "1613"
+
+# tconf from xdctools dislikes '.' in pwd :/
+PV = "1_61_03"
SRC_URI = "http://install.source.dir.local/dsplink_1_61_03.tar.gz \
file://loadmodules-ti-dsplink-apps.sh \
@@ -20,16 +21,16 @@ S = "${WORKDIR}/dsplink_1_61_03"
# DSPLINK - Config Variable for different platform
DSPLINKPLATFORM ?= "DAVINCI"
-DSPLINKPLATFORM_dm6446-evm ?= "DAVINCI"
-DSPLINKPLATFORM_da830-omapl137-evm ?= "OMAPL1XX"
+DSPLINKPLATFORM_dm6446 ?= "DAVINCI"
+DSPLINKPLATFORM_omapl137 ?= "OMAPL1XX"
DSPLINKDSPCFG ?= "DM6446GEMSHMEM"
-DSPLINKDSPCFG_dm6446-evm ?= "DM6446GEMSHMEM"
-DSPLINKDSPCFG_da830-omapl137-evm ?= "OMAPL1XXGEMSHMEM"
+DSPLINKDSPCFG_dm6446 ?= "DM6446GEMSHMEM"
+DSPLINKDSPCFG_omapl137 ?= "OMAPL1XXGEMSHMEM"
DSPLINKGPPOS ?= "MVL5G"
-DSPLINKGPPOS_dm6446-evm ?= "MVL5G"
-DSPLINKGPPOS_da830-omapl137-evm ?= "MVL5G"
+DSPLINKGPPOS_dm6446 ?= "MVL5G"
+DSPLINKGPPOS_omapl137 ?= "MVL5G"
DSPLINK = "${S}/dsplink"
export DSPLINK
@@ -65,7 +66,7 @@ do_compile() {
# Build the gpp user space library
cd ${DSPLINK}/gpp/src/api
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
CROSS_COMPILE="${TARGET_PREFIX}" \
CC="${KERNEL_CC}" \
AR="${KERNEL_AR}" \
@@ -77,7 +78,7 @@ do_compile() {
# Build the gpp kernel space (debug and release)
cd ${DSPLINK}/gpp/src
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
OBJDUMP="${TARGET_PREFIX}objdump" \
CROSS_COMPILE="${TARGET_PREFIX}" \
CC="${KERNEL_CC}" \
@@ -90,7 +91,7 @@ do_compile() {
# Build the gpp samples
cd ${DSPLINK}/gpp/src/samples
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
BASE_TOOLCHAIN="${CROSS_DIR}" \
BASE_CGTOOLS="${BASE_TOOLCHAIN}/bin" \
OSINC_PLATFORM="${CROSS_DIR}/lib/gcc/${TARGET_SYS}/$(${TARGET_PREFIX}gcc -dumpversion)/include" \
@@ -107,14 +108,14 @@ do_compile() {
# Build the dsp library (debug and release)
cd ${DSPLINK}/dsp/src
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
BASE_CGTOOLS="${STAGING_TI_CGT6x_DIR}" \
BASE_SABIOS="${STAGING_TI_DSPBIOS_DIR}" \
clean all
# Build the dsp samples (debug and release)
cd ${DSPLINK}/dsp/src/samples
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
BASE_CGTOOLS="${STAGING_TI_CGT6x_DIR}" \
BASE_SABIOS="${STAGING_TI_DSPBIOS_DIR}" \
clean all
@@ -148,22 +149,9 @@ do_stage () {
cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/packages
}
-pkg_postrm () {
- update-modules || true
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
INHIBIT_PACKAGE_STRIP = "1"
PACKAGES += " ti-dsplink-apps"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*"
FILES_ti-dsplink-apps = "${installdir}/dsplink/*"
# Disable QA check untils we figure out how to pass LDFLAGS in build
diff --git a/recipes/ti/ti-dvsdk-demos.inc b/recipes/ti/ti-dvsdk-demos.inc
new file mode 100644
index 0000000000..44770c5207
--- /dev/null
+++ b/recipes/ti/ti-dvsdk-demos.inc
@@ -0,0 +1,41 @@
+DESCRIPTION = "DVSDK Demo applications for TI ARM/DSP processors"
+
+DEPENDS += "ti-dmai"
+DEPENDS += "alsa-lib libpng freetype jpeg"
+
+SRC_URI = "${BASE_SRC_URI}/dvsdk_demos_${PV}.tar.gz "
+
+S = "${WORKDIR}/dvsdk_demos_${PV}"
+
+inherit module-base
+require ti-multimedia-common.inc
+
+# Should go into machine config
+TARGET ?= "all"
+TARGET_dm355 ?= "dm355"
+TARGET_dm365-evm ?= "dm365"
+
+VERBOSE = "true"
+
+do_compile () {
+ cd ${S}
+ make -e clean
+ make -e ${PLATFORM}
+}
+do_install () {
+ cd ${S}
+ make -e ${TARGET} EXEC_DIR=${D}/${installdir}/dvsdk-demos install
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+RDEPENDS_ti-dvsdk-demos_dm355 += "ti-dm355mm-module ti-linuxutils alsa-lib libpng freetype jpeg"
+RDEPENDS_ti-dvsdk-demos_dm365-evm += "ti-dm365mm-module ti-linuxutils alsa-lib libpng freetype jpeg"
+
+FILES_${PN} = "${installdir}/dvsdk-demos/*"
+
+
+BASE_SRC_URI ?= "http://install.source.dir.local"
+
+INHIBIT_PACKAGE_STRIP = "1"
+INSANE_SKIP_${PN} = "True"
diff --git a/recipes/ti/ti-dvsdk-demos_3.10.00.00.bb b/recipes/ti/ti-dvsdk-demos_3.10.00.00.bb
new file mode 100644
index 0000000000..d724993130
--- /dev/null
+++ b/recipes/ti/ti-dvsdk-demos_3.10.00.00.bb
@@ -0,0 +1,5 @@
+require ti-dvsdk-demos.inc
+
+PV ?= "3_10_00_00"
+
+
diff --git a/recipes/ti/ti-eula-unpack.inc b/recipes/ti/ti-eula-unpack.inc
new file mode 100644
index 0000000000..1c5a776e0b
--- /dev/null
+++ b/recipes/ti/ti-eula-unpack.inc
@@ -0,0 +1,62 @@
+# This file defines function used for unpacking the .bin file downloaded over
+# the http and display EULA.
+# BINFILE - name of the install jammer .bin file
+# TARFILE - name of the tar file inside the install jammer
+# TI_BIN_UNPK_CMDS - contains list of commands separated with colon to be
+# passed while unpacking the bin file. The keyword
+# workdir expands to WORKDIR and commands are appendded
+# with '\n'. Eg. TI_BIN_UNPK_CMDS="Y:Y: qY:workdir"
+# TI_BIN_UNPK_WDEXT - This variable extends workdir path, if user wants to put
+# the output in some internal directory
+
+python do_unpack () {
+ bb.build.exec_func('base_do_unpack', d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+}
+
+TI_BIN_UNPK_WDEXT += ""
+python ti_bin_do_unpack() {
+
+ import os
+
+ localdata = bb.data.createCopy(d)
+ bb.data.update_data(localdata)
+
+ binfile = bb.data.getVar('BINFILE', localdata)
+ binfile = bb.data.expand(binfile, localdata)
+
+ # Change to the working directory
+ save_cwd = os.getcwd()
+ workdir = bb.data.getVar('WORKDIR', localdata)
+ workdir = bb.data.expand(workdir, localdata)
+ os.chdir(workdir)
+
+ # Get unpack commands
+ cmd_string = bb.data.getVar('TI_BIN_UNPK_CMDS', localdata)
+ cmd_list = cmd_string.split( ":" )
+
+ # Make the InstallJammer binary executable so we can run it
+ os.chmod(binfile, 0755)
+
+ # Run the InstallJammer binary and accept the EULA
+ filename = "HOME=%s ./%s" % (workdir, binfile)
+ f = os.popen(filename,'w')
+ for cmd in cmd_list:
+ if cmd == "workdir":
+ wdext = bb.data.getVar('TI_BIN_UNPK_WDEXT', localdata)
+ wdext = bb.data.expand(wdext, localdata)
+ cmd = workdir+wdext
+ print >>f, "%s\n" % cmd
+ f.close()
+
+ # Expand the tarball that was created if required
+ tarfile = bb.data.getVar('TARFILE', localdata)
+ if bool(tarfile) == True:
+ tarfile = bb.data.expand(tarfile, localdata)
+ tcmd = 'tar xz --no-same-owner -f %s -C %s' % (tarfile, workdir)
+ os.system(tcmd)
+
+ # Return to the previous directory
+ os.chdir(save_cwd)
+}
+
diff --git a/recipes/ti/ti-framework-components.inc b/recipes/ti/ti-framework-components.inc
new file mode 100644
index 0000000000..cd8a56193e
--- /dev/null
+++ b/recipes/ti/ti-framework-components.inc
@@ -0,0 +1,23 @@
+DESCRIPTION = "Framework Components for TI ARM/DSP processors"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc/${PV}/exports/framework_components_${PV}.tar.gz"
+
+require ti-paths.inc
+
+S = "${WORKDIR}/framework_components_${PV}"
+
+# compile time dependencies
+DEPENDS += "ti-xdctools-native ti-xdais-native ti-linuxutils"
+
+do_compile () {
+ echo "! Do not rebuild for now !"
+}
+
+# stage tree - other packages may need this
+do_stage() {
+ install -d ${FC_INSTALL_DIR}
+ cp -pPrf ${S}/* ${FC_INSTALL_DIR}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-framework-components_2.25.00.04.bb b/recipes/ti/ti-framework-components_2.25.00.04.bb
new file mode 100644
index 0000000000..5ca4704364
--- /dev/null
+++ b/recipes/ti/ti-framework-components_2.25.00.04.bb
@@ -0,0 +1,5 @@
+require ti-framework-components.inc
+
+PV = "2_25_00_04"
+
+
diff --git a/recipes/ti/ti-linuxutils.inc b/recipes/ti/ti-linuxutils.inc
new file mode 100644
index 0000000000..b1f876d0d3
--- /dev/null
+++ b/recipes/ti/ti-linuxutils.inc
@@ -0,0 +1,82 @@
+DESCRIPTION = "MFP Linux utils for TI ARM/DSP processors"
+
+BASE_SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/${PV}/exports"
+SRC_URI = "${BASE_SRC_URI}/linuxutils_${PV}.tar.gz "
+
+S = "${WORKDIR}/linuxutils_${PV}"
+
+require ti-multimedia-common.inc
+
+#This is a kernel module, don't set PR directly
+MACHINE_KERNEL_PR_append = "a"
+
+inherit module
+
+do_compile() {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ case ${SOC_FAMILY} in
+ dm365)
+ modules="cmem edma";;
+ omap3)
+ modules="cmem sdma";;
+ *)
+ modules="cmem"
+ esac
+
+ for module in $modules ; do
+ cd ${S}/packages/ti/sdo/linuxutils/$module
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ clean debug release
+ done
+}
+
+do_install () {
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ # Install CMEM
+ for module in $(find ${S}/packages/ti/sdo/linuxutils/ -name "*.ko") ; do
+ install -m 0755 $module ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ done
+ cd ${S}/packages/ti/sdo/linuxutils/cmem/apps
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ EXEC_DIR="${D}${installdir}/ti-linuxutils-app/cmem-app" \
+ install
+ # Install EDMA
+ if [ ${SOC_FAMILY} == "dm365" ] ; then
+ cd ${S}/packages/ti/sdo/linuxutils/edma/apps
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ EXEC_DIR="${D}${installdir}/ti-linuxutils-app/edma-app" \
+ install
+ fi
+}
+
+# stage tree - other packages may need this
+do_stage() {
+ install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}
+ cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/
+}
+
+PACKAGES =+ " ti-cmem-module \
+ ti-sdma-module \
+ ti-edma-module \
+ ti-irq-module \
+ ti-linuxutils-app"
+
+FILES_ti-cmem-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmem*.ko"
+FILES_ti-sdma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdma*.ko"
+FILES_ti-edma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/edma*.ko"
+FILES_ti-irq-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/irq*.ko"
+
+FILES_ti-linuxutils-app = "${installdir}/ti-linuxutils-app/*/*"
+
+INSANE_SKIP_ti-linuxutils-app = "True"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-linuxutils_2.25.01.06.bb b/recipes/ti/ti-linuxutils_2.25.01.06.bb
new file mode 100644
index 0000000000..a75fdba30d
--- /dev/null
+++ b/recipes/ti/ti-linuxutils_2.25.01.06.bb
@@ -0,0 +1,3 @@
+require ti-linuxutils.inc
+
+PV = "2_25_01_06"
diff --git a/recipes/ti/ti-lpm-module_2.23.1.bb b/recipes/ti/ti-lpm-module_2.23.1.bb
deleted file mode 100644
index b478f64a98..0000000000
--- a/recipes/ti/ti-lpm-module_2.23.1.bb
+++ /dev/null
@@ -1,65 +0,0 @@
-DESCRIPTION = "LPM module for TI OMAP3 processors"
-
-require ti-paths.inc
-inherit module
-# compile and run time dependencies
-DEPENDS = " virtual/kernel perl-native ti-dsplink-module"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2231"
-
-# Download codec_engine_2_23_01.tar.gz from https://www-a.ti.com/downloads/sds_support/targetcontent/CE/ce_2_23/index.html and copy in Arago (or OE) download directory.
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23_01.tar.gz "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23_01"
-
-export DSPLINK="${S}/cetools/packages/dsplink"
-
-LPMDSPPOWERSOC ?= "omap3530"
-LPMDSPPOWERSOC_omap3evm ?= "omap3530"
-
-do_compile () {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm
- make \
- DSPLINK_REPO="${DSPLINK}/.." \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- clean default
-}
-
-do_install () {
-
- # LPM/CMEM/SDMA drivers - kernel modules
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-}
-
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
-RDEPENDS += " ti-dsplink-module"
-
diff --git a/recipes/ti/ti-lpm-module_2.24.01.bb b/recipes/ti/ti-lpm-module_2.24.01.bb
index 8c41dbf8c2..32bc02b1e5 100644
--- a/recipes/ti/ti-lpm-module_2.24.01.bb
+++ b/recipes/ti/ti-lpm-module_2.24.01.bb
@@ -1,29 +1,24 @@
DESCRIPTION = "LPM module for TI OMAP3 processors"
-require ti-paths.inc
-
-inherit module
-# compile and run time dependencies
-DEPENDS = " virtual/kernel perl-native ti-dsplink-module"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
+DEPENDS = "ti-linuxutils"
-PV = "2241"
+# tconf breaks with '.' in PWD
+PV = "2_24_01"
SRC_URI = "http://install.source.dir.local/local_power_manager_1_24.tar.gz"
# Set the source directory
S = "${WORKDIR}/local_power_manager_1_24"
-do_compile () {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
+require ti-paths.inc
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+#This is a kernel module, don't set PR directly
+MACHINE_KERNEL_PR_append = "a"
+inherit module
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
cd ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm
make \
DSPLINK_REPO="${DSPLINK}/.." \
@@ -33,27 +28,13 @@ do_compile () {
}
do_install () {
-
# LPM/CMEM/SDMA drivers - kernel modules
install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ install -m 0755 ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
+RDEPENDS_${PN} += " ti-dsplink-module"
FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
-RDEPENDS += " ti-dsplink-module"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-multimedia-common.inc b/recipes/ti/ti-multimedia-common.inc
new file mode 100644
index 0000000000..170e77bfec
--- /dev/null
+++ b/recipes/ti/ti-multimedia-common.inc
@@ -0,0 +1,55 @@
+installdir = "${datadir}/ti"
+
+# needed for configuro:
+export CGTOOLS_V5T="${CROSS_DIR}"
+export CC_V5T="bin/${TARGET_PREFIX}gcc"
+export CROSS_COMPILE = "${CROSS_DIR}/bin/${TARGET_PREFIX}"
+export MVTOOL_PREFIX="${TARGET_PREFIX}"
+export MVTOOL_DIR="${CROSS_DIR}"
+export CSTOOL_PREFIX="${TARGET_PREFIX}"
+export CSTOOL_DIR="${CROSS_DIR}"
+export LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}
+
+export CODEC_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codecs"
+
+export LINUXLIBS_INSTALL_DIR = "${STAGING_DIR_HOST}/usr"
+export CODEGEN_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-cgt6x-native"
+export XDC_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-xdctools-native"
+export XDAIS_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-xdais"
+export BIOS_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-dspbios-native"
+
+export CE_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine"
+export FC_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-framework-components"
+export LINUXKERNEL_INSTALL_DIR = "${STAGING_KERNEL_DIR}"
+export LINUXUTILS_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-linuxutils"
+export CMEM_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-linuxutils"
+#export LINK_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
+export LINK_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dsplink-module"
+export LPM_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
+export DMAI_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dmai"
+
+export USER_XDC_PATH = "${CE_INSTALL_DIR}/examples"
+export XDC_TARGET = gnu.targets.arm.GCArmv5T
+
+XDC_PLATFORM_dm355 = ti.platforms.evmDM355
+XDC_PLATFORM_dm365 = ti.platforms.evmDM365
+XDC_PLATFORM_dm6446 = ti.platforms.evmDM6446
+XDC_PLATFORM_omap3 = ti.platforms.evm3530
+XDC_PLATFORM_omapl137 = ti.platforms.omapl137
+XDC_PLATFORM_omapl138 = ti.platforms.omapl138
+export XDC_PLATFORM
+
+export PLATFORM_XDC = ${XDC_PLATFORM}
+
+LPMDSPPOWERSOC_omap3 = "omap3530"
+
+export LPMDSPPOWERSOC
+
+PLATFORM_dm355 = "dm355"
+PLATFORM_dm365 = "dm365"
+PLATFORM_dm6446 = "dm6446"
+PLATFORM_omap3 = "omap3530"
+PLATFORM_omapl137 = "ol137"
+PLATFORM_omapl138 = "ol138"
+export PLATFORM
+
diff --git a/recipes/ti/ti-paths.inc b/recipes/ti/ti-paths.inc
index 9ac7ac69e1..3a9eb3dbbc 100644
--- a/recipes/ti/ti-paths.inc
+++ b/recipes/ti/ti-paths.inc
@@ -7,14 +7,8 @@
# export some more variable to point to external TI tools
# information is duplicated between the js and make based tools
-# needed for configuro:
-export CGTOOLS_V5T="${CROSS_DIR}"
-export CC_V5T="bin/${TARGET_PREFIX}gcc"
-export MVTOOL_PREFIX="${TARGET_PREFIX}"
-export MVTOOL_DIR="${CROSS_DIR}"
-export CSTOOL_PREFIX="${TARGET_PREFIX}"
-export CSTOOL_DIR="${CROSS_DIR}"
-export LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}
+
+require ti-multimedia-common.inc
export PLATFORM
@@ -22,25 +16,14 @@ export CROSS_COMPILE = "${CROSS_DIR}/bin/${TARGET_PREFIX}"
# This tells codec engine which targets to build
DEVICES ?= "DM6446"
-DEVICES_omap5912osk = "fixme-ti-paths.inc"
-
-# Set a default for armv7a now, change this when omap4 and friends become available
-DEVICES_armv7a = "OMAP3530"
-
-DEVICES_davinci-sffsdr = "DM6446"
-DEVICES_davinci-dvevm = "DM6446"
+DEVICES_omap3 = "OMAP3530"
+DEVICES_dm6446 = "DM6446"
DSPLINKPLATFORM ?= "DAVINCI"
-DSPLINKPLATFORM_omap5912osk = "OMAP"
-
-DSPLINKPLATFORM_davinci-sffsdr = "DAVINCI"
-DSPLINKPLATFORM_davinci-dvevm = "DAVINCI"
+DSPLINKPLATFORM_dm6446 = "DAVINCI"
PLATFORM ?= "dm6446"
-PLATFORM_omap5912osk = "OMAP"
-
-PLATFORM_davinci-sffsdr = "dm6446"
-PLATFORM_davinci-dvevm = "dm6446"
+PLATFORM_dm6446 = "dm6446"
DSPLINKDSP ?= "C64XX"
@@ -48,7 +31,7 @@ DSPLINKSOC ?= "DM6446"
DSPCFG ?= "DM6446GEMSHMEM"
-GPPOS ?= "MVL5G"
+GPPOS ?= "LINUX_GCC"
export DEVICES
export DSPLINKPLATFORM
@@ -61,20 +44,6 @@ export LPMDSPPOWERSOC
DSPPOWERSOC ?= "dm6446"
-export BIOS_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-dspbios-native"
-export CE_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine"
-export CMEM_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
-export CODEGEN_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-cgt6x-native"
-export CROSS_COMPILE = "${CROSS_DIR}/bin/${TARGET_PREFIX}"
-export DMAI_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dmai"
-export FC_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
-export LINK_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dsplink-module"
-export LINUXKERNEL_INSTALL_DIR = "${STAGING_KERNEL_DIR}"
-export LPM_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
-export XDC_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-xdctools-native"
-export XDAIS_INSTALL_DIR = "${CE_INSTALL_DIR}/cetools"
-
-export CODEC_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combo"
export CODEC ?= "${CODEC_INSTALL_DIR}"
export DSPLINK = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dsplink-module/packages/dsplink/"
diff --git a/recipes/ti/ti-sdma-module_2.23.1.bb b/recipes/ti/ti-sdma-module_2.23.1.bb
deleted file mode 100644
index b64cd9b2bc..0000000000
--- a/recipes/ti/ti-sdma-module_2.23.1.bb
+++ /dev/null
@@ -1,56 +0,0 @@
-DESCRIPTION = "SDMA module for TI OMAP3 processors"
-
-inherit module
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2231"
-
-# Download codec_engine_2_23_01.tar.gz from https://www-a.ti.com/downloads/sds_support/targetcontent/CE/ce_2_23/index.html and copy in Arago (or OE) download directory.
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23_01.tar.gz "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23_01"
-
-do_compile() {
- # SDMA - Build the sdma module
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/sdma
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdmak.ko"
-
diff --git a/recipes/ti/ti-sdma-module_2.24.01.bb b/recipes/ti/ti-sdma-module_2.24.01.bb
deleted file mode 100644
index b5e3bc313e..0000000000
--- a/recipes/ti/ti-sdma-module_2.24.01.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-DESCRIPTION = "SDMA module for TI OMAP3 processors"
-
-inherit module
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2241"
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_24_01.tar.gz "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_24_01"
-
-do_compile() {
- # SDMA - Build the sdma module
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/sdma
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdmak.ko"
-
diff --git a/recipes/ti/ti-xdais-native_6.23.bb b/recipes/ti/ti-xdais-native_6.23.bb
new file mode 100644
index 0000000000..9cf839c139
--- /dev/null
+++ b/recipes/ti/ti-xdais-native_6.23.bb
@@ -0,0 +1,13 @@
+require ti-xdais.inc
+
+PV = "6_23"
+
+inherit native
+
+do_stage() {
+ install -d ${STAGING_DIR_NATIVE}/ti-xdais
+ cp -pPrf ${S}/* ${STAGING_DIR_NATIVE}/ti-xdais
+}
+
+AUTOTOOLS_NATIVE_STAGE_INSTALL="1"
+
diff --git a/recipes/ti/ti-xdais.inc b/recipes/ti/ti-xdais.inc
new file mode 100644
index 0000000000..4816ee288a
--- /dev/null
+++ b/recipes/ti/ti-xdais.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "TI DSP Algorithm Interface Standard specification"
+
+PVEXTENSION ?= ""
+BASE_SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/${PV}/exports"
+
+SRC_URI = "${BASE_SRC_URI}/xdais_${PV}${PVEXTENSION}.tar.gz"
+
+S = "${WORKDIR}/xdais_${PV}${PVEXTENSION}"
+
+
diff --git a/recipes/ti/ti-xdctools-native_3.10.03.bb b/recipes/ti/ti-xdctools-native_3.10.03.bb
deleted file mode 100644
index ca1b7f5f0f..0000000000
--- a/recipes/ti/ti-xdctools-native_3.10.03.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-inherit native
-require ti-xdctools.inc
-
-# download xdctools_setuplinux_3_10_03.bin from https://www-a.ti.com/downloads/sds_support/targetcontent/rtsc/xdctools_3_10/xdctools_3_10_03/index_external.html and copy in Arago (or OE) download directory
-
-SRC_URI = "http://install.source.dir.local/xdctools_setuplinux_3_10_03.bin"
-BINFILE="xdctools_setuplinux_3_10_03.bin"
-
-S = "${WORKDIR}/xdctools_3_10_03"
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "310"
-PR = "r16"
-
-do_stage() {
- install -d ${STAGING_DIR_NATIVE}/${PN}
- cp -pPrf ${S}/* ${STAGING_DIR_NATIVE}/${PN}
-}
-
-AUTOTOOLS_NATIVE_STAGE_INSTALL="1"
-
diff --git a/recipes/ti/ti-xdctools-native_3.15.01.59.bb b/recipes/ti/ti-xdctools-native_3.15.01.59.bb
index d06cb8f615..ee34a5eec2 100644
--- a/recipes/ti/ti-xdctools-native_3.15.01.59.bb
+++ b/recipes/ti/ti-xdctools-native_3.15.01.59.bb
@@ -1,22 +1,16 @@
inherit native
-require ti-xdctools.inc
-
-SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/xdctools_3_15//exports/xdctools_setuplinux_3_15_01_59.bin"
-BINFILE = "xdctools_setuplinux_3_15_01_59.bin"
-S = "${WORKDIR}/xdctools_3_15_01_59"
+BASE_PV = "3_15"
+PV = "3_15_01_59"
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "315"
-PR = "r4"
+require ti-xdctools.inc
do_stage() {
- install -d -m 0755 ${STAGING_DIR_NATIVE}/${PN}
+ install -d ${STAGING_DIR_NATIVE}/${PN}
cp -pPrf ${S}/* ${STAGING_DIR_NATIVE}/${PN}
- chmod 755 -R ${STAGING_DIR_NATIVE}/${PN}
- # rm_work fails if you don't chmod S:
- chmod 755 -R ${S}
+ chmod 755 -R ${STAGING_DIR_NATIVE}/${PN}
+ chmod 755 -R ${S}
}
-AUTOTOOLS_NATIVE_STAGE_INSTALL = "1"
+AUTOTOOLS_NATIVE_STAGE_INSTALL="1"
diff --git a/recipes/ti/ti-xdctools.inc b/recipes/ti/ti-xdctools.inc
index 9dbd35f24c..5d29436042 100644
--- a/recipes/ti/ti-xdctools.inc
+++ b/recipes/ti/ti-xdctools.inc
@@ -1,40 +1,12 @@
DESCRIPTION = "TI XDC tool"
-# This file defines function used for extracting .bin file
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/xdctools_${BASE_PV}/exports/xdctools_setuplinux_${PV}.bin"
+BINFILE="xdctools_setuplinux_${PV}.bin"
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
+S = "${WORKDIR}/xdctools_${PV}"
-python ti_bin_do_unpack() {
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
- import os
+require ti-eula-unpack.inc
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- print >>f, "Y\n"
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
diff --git a/recipes/tslib/tslib.inc b/recipes/tslib/tslib.inc
index e10351b817..81f2a4eaa6 100644
--- a/recipes/tslib/tslib.inc
+++ b/recipes/tslib/tslib.inc
@@ -3,7 +3,7 @@ HOMEPAGE = "http://tslib.berlios.de/"
AUTHOR = "Russell King w/ plugins by Chris Larson et. al."
SECTION = "base"
LICENSE = "LGPL"
-INC_PR = "r22"
+INC_PR = "r23"
SRC_URI += "\
file://ts.conf \
@@ -61,6 +61,7 @@ PACKAGE_ARCH_tslib-conf_jornada7xx = "${MACHINE_ARCH}"
PACKAGE_ARCH_tslib-conf_netbook-pro = "${MACHINE_ARCH}"
PACKAGE_ARCH_tslib-conf_omap1610h2 = "${MACHINE_ARCH}"
PACKAGE_ARCH_tslib-conf_omap5912osk = "${MACHINE_ARCH}"
+PACKAGE_ARCH_tslib-conf_omap3-pandora = "${MACHINE_ARCH}"
PACKAGE_ARCH_tslib-conf_simpad = "${MACHINE_ARCH}"
PACKAGES =+ "tslib-conf libts-dev tslib-tests tslib-calibrate"
@@ -78,3 +79,4 @@ FILES_${PN} = "${libdir}/*.so.* ${libdir}/ts/*.so*"
FILES_libts-dev = "${FILES_tslib-dev} ${libdir}/ts/*.la"
FILES_tslib-calibrate += "${bindir}/ts_calibrate"
FILES_tslib-tests = "${bindir}/ts_harvest ${bindir}/ts_print ${bindir}/ts_print_raw ${bindir}/ts_test"
+
diff --git a/recipes/tslib/tslib/omap3-pandora/ts.conf b/recipes/tslib/tslib/omap3-pandora/ts.conf
new file mode 100644
index 0000000000..7b5271c60e
--- /dev/null
+++ b/recipes/tslib/tslib/omap3-pandora/ts.conf
@@ -0,0 +1,8 @@
+# ts.conf for the OMAP3-PANDORA default touchscreen.
+
+module_raw input
+
+module pthres pmin=1
+module variance delta=30
+module dejitter delta=100
+module linear
diff --git a/recipes/tslib/tslib/omap3-pandora/tslib.sh b/recipes/tslib/tslib/omap3-pandora/tslib.sh
new file mode 100644
index 0000000000..f73e39c5d9
--- /dev/null
+++ b/recipes/tslib/tslib/omap3-pandora/tslib.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+TSLIB_TSDEVICE=/dev/input/touchscreen0
+TSLIB_CONFFILE=/etc/ts.conf
+
+export TSLIB_TSDEVICE TSLIB_CONFFILE
+
diff --git a/recipes/ttf-fonts/ttf-freefonts_20090104.bb b/recipes/ttf-fonts/ttf-freefonts_20090104.bb
new file mode 100644
index 0000000000..316873dc75
--- /dev/null
+++ b/recipes/ttf-fonts/ttf-freefonts_20090104.bb
@@ -0,0 +1,24 @@
+require ttf.inc
+
+DESCRIPTION="TrueType Unicode fonts from the Free UCS Outline Fonts Project"
+HOMEPAGE="http://savannah.nongnu.org/projects/freefont/"
+
+PR = "r1"
+
+SRC_URI = "http://ftp.gnu.org/gnu/freefont/freefont-ttf-${PV}.tar.gz"
+
+S = "${WORKDIR}/freefont-${PV}"
+
+FILES_${PN}-doc = "${datadir}/doc/ttf-freefont/README \
+ ${datadir}/doc/ttf-freefont/AUTHORS \
+"
+
+FILES_${PN} = "${datadir}"
+
+
+do_install_append() {
+ install -d ${D}${datadir}/doc/
+ install -d ${D}${datadir}/doc/ttf-freefont
+ install -m 0644 ${S}/README ${D}${datadir}/doc/ttf-freefont
+ install -m 0644 ${S}/AUTHORS ${D}${datadir}/doc/ttf-freefont
+}
diff --git a/recipes/u-boot/u-boot-git/cm-t35/cm-t35.patch b/recipes/u-boot/u-boot-git/cm-t35/cm-t35.patch
new file mode 100644
index 0000000000..10e84a2881
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/cm-t35/cm-t35.patch
@@ -0,0 +1,1487 @@
+diff --git a/MAINTAINERS b/MAINTAINERS
+index d70a9d2..94e45f4 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -677,6 +677,10 @@ Stelian Pop <stelian.pop@leadtechdesign.com>
+ at91sam9263ek ARM926EJS (AT91SAM9263 SoC)
+ at91sam9rlek ARM926EJS (AT91SAM9RL SoC)
+
++Mike Rapoport <mike@compulab.co.il>
++
++ cm_t35 ARM CORTEX-A8 (OMAP3xx SoC)
++
+ Tom Rix <Tom.Rix@windriver.com>
+
+ omap3_zoom2 ARM CORTEX-A8 (OMAP3xx SoC)
+diff --git a/MAKEALL b/MAKEALL
+index d63c5c2..e131c62 100755
+--- a/MAKEALL
++++ b/MAKEALL
+@@ -612,6 +612,7 @@ LIST_ARM11=" \
+ ## ARM Cortex-A8 Systems
+ #########################################################################
+ LIST_ARM_CORTEX_A8=" \
++ cm_t35 \
+ devkit8000 \
+ omap3_beagle \
+ omap3_overo \
+diff --git a/Makefile b/Makefile
+index bcb3fe9..9d6150a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -3143,6 +3143,8 @@ SMN42_config : unconfig
+ #########################################################################
+ ## ARM CORTEX Systems
+ #########################################################################
++cm_t35_config : unconfig
++ @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 cm_t35 NULL omap3
+
+ devkit8000_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 devkit8000 timll omap3
+diff --git a/board/cm_t35/Makefile b/board/cm_t35/Makefile
+new file mode 100644
+index 0000000..320a817
+--- /dev/null
++++ b/board/cm_t35/Makefile
+@@ -0,0 +1,47 @@
++#
++# (C) Copyright 2000, 2001, 2002
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# 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 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, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS := cm_t35.o
++
++SRCS := $(COBJS:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS))
++
++$(LIB): $(obj).depend $(OBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS)
++
++clean:
++ rm -f $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak $(obj).depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
+diff --git a/board/cm_t35/cm_t35.c b/board/cm_t35/cm_t35.c
+new file mode 100644
+index 0000000..a9bb86f
+--- /dev/null
++++ b/board/cm_t35/cm_t35.c
+@@ -0,0 +1,257 @@
++/*
++ * (C) Copyright 2009
++ * CompuLab, Ltd. <www.compulab.co.il>
++ *
++ * Authors :
++ * Igor Vaisbein <igor@compulab.co.il>
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * Derived from omap3evm and Beagle Board by
++ * Manikandan Pillai <mani.pillai@ti.com>
++ * Richard Woodruff <r-woodruff2@ti.com>
++ * Syed Mohammed Khasim <x0khasim@ti.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * 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 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, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <netdev.h>
++#include <net.h>
++#include <i2c.h>
++#include <twl4030.h>
++
++#include <asm/io.h>
++#include <asm/setup.h>
++#include <asm/arch/mem.h>
++#include <asm/arch/mux.h>
++#include <asm/arch/sys_proto.h>
++#include <asm/mach-types.h>
++
++#include "cm_t35.h"
++
++static u32 gpmc_net_config[GPMC_MAX_REG] = {
++ NET_GPMC_CONFIG1,
++ NET_GPMC_CONFIG2,
++ NET_GPMC_CONFIG3,
++ NET_GPMC_CONFIG4,
++ NET_GPMC_CONFIG5,
++ NET_GPMC_CONFIG6,
++ 0
++};
++
++static u32 gpmc_nand_config[GPMC_MAX_REG] = {
++ SMNAND_GPMC_CONFIG1,
++ SMNAND_GPMC_CONFIG2,
++ SMNAND_GPMC_CONFIG3,
++ SMNAND_GPMC_CONFIG4,
++ SMNAND_GPMC_CONFIG5,
++ SMNAND_GPMC_CONFIG6,
++ 0,
++};
++
++DECLARE_GLOBAL_DATA_PTR;
++
++/*
++ * Routine: board_init
++ * Description: Early hardware init.
++ */
++int board_init(void)
++{
++ gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
++
++ enable_gpmc_cs_config(gpmc_nand_config, &gpmc_cfg->cs[0],
++ CONFIG_SYS_NAND_BASE, GPMC_SIZE_16M);
++
++ /* board id for Linux */
++ gd->bd->bi_arch_number = MACH_TYPE_CM_T35;
++ /* boot param addr */
++ gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
++
++ return 0;
++}
++
++/*
++ * Routine: misc_init_r
++ * Description: init i2c and dieid
++ */
++int misc_init_r(void)
++{
++#ifdef CONFIG_DRIVER_OMAP34XX_I2C
++ i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
++#endif
++
++ dieid_num_r();
++
++ return 0;
++}
++
++/*
++ * Routine: set_muxconf_regs
++ * Description: Setting up the configuration Mux registers specific to the
++ * hardware. Many pins need to be moved from protect to primary
++ * mode.
++ */
++void set_muxconf_regs(void)
++{
++ MUX_CM_T35();
++}
++
++/*
++ * Routine: get_board_serial
++ * Description: read system serial number
++ */
++void get_board_serial(struct tag_serialnr *serialnr)
++{
++ u32 low, high;
++ int rc;
++
++ memset(serialnr, 0, sizeof(*serialnr));
++
++ rc = i2c_read(0x50, 0x8, 1, &low, sizeof(low));
++ if (rc)
++ return;
++
++ rc = i2c_read(0x50, 0xc, 1, &high, sizeof(high));
++ if (rc)
++ return;
++
++ if (low != 0xffffffff && high != 0xffffffff) {
++ serialnr->low = low;
++ serialnr->high = high;
++ }
++};
++
++/*
++ * Routine: get_board_rev
++ * Description: read system revision
++ */
++u32 get_board_rev(void)
++{
++ u16 rev;
++ int rc;
++
++ rc = i2c_read(0x50, 0x6, 1, &rev, sizeof(rev));
++ if (rc)
++ return 0;
++
++ return rev;
++};
++
++/*
++ * Routine: setup_net_chip_gmpc
++ * Description: Setting up the configuration GPMC registers specific to the
++ * Ethernet hardware.
++ */
++static void setup_net_chip_gmpc(void)
++{
++ struct ctrl *ctrl_base = (struct ctrl *)OMAP34XX_CTRL_BASE;
++
++ enable_gpmc_cs_config(gpmc_net_config, &gpmc_cfg->cs[5],
++ CM_T35_SMC911X_BASE, GPMC_SIZE_16M);
++ enable_gpmc_cs_config(gpmc_net_config, &gpmc_cfg->cs[4],
++ SB_T35_SMC911X_BASE, GPMC_SIZE_16M);
++
++ /* Enable off mode for NWE in PADCONF_GPMC_NWE register */
++ writew(readw(&ctrl_base->gpmc_nwe) | 0x0E00, &ctrl_base->gpmc_nwe);
++
++ /* Enable off mode for NOE in PADCONF_GPMC_NADV_ALE register */
++ writew(readw(&ctrl_base->gpmc_noe) | 0x0E00, &ctrl_base->gpmc_noe);
++
++ /* Enable off mode for ALE in PADCONF_GPMC_NADV_ALE register */
++ writew(readw(&ctrl_base->gpmc_nadv_ale) | 0x0E00,
++ &ctrl_base->gpmc_nadv_ale);
++}
++
++#ifdef CONFIG_DRIVER_OMAP34XX_I2C
++/*
++ * Routine: reset_net_chip
++ * Description: reset the Ethernet controller via TPS65930 GPIO
++ */
++static void reset_net_chip(void)
++{
++ /* Set GPIO1 of TPS65930 as output */
++ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02,
++ TWL4030_BASEADD_GPIO+0x03);
++ /* Send a pulse on the GPIO pin */
++ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02,
++ TWL4030_BASEADD_GPIO+0x0C);
++ udelay(1);
++ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02,
++ TWL4030_BASEADD_GPIO+0x09);
++ udelay(1);
++ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02,
++ TWL4030_BASEADD_GPIO+0x0C);
++}
++#else
++static inline void reset_net_chip(void) {}
++#endif
++
++/*
++ * Routine: handle_mac_address
++ * Description: prepare MAC address for on-board Ethernet.
++ */
++static int handle_mac_address(void)
++{
++ unsigned char enetaddr[6];
++ int rc;
++
++ memset(enetaddr, 0, 6);
++ rc = eth_getenv_enetaddr("ethaddr", enetaddr);
++ if (rc)
++ return 0;
++
++#ifdef CONFIG_DRIVER_OMAP34XX_I2C
++ rc = i2c_read(0x50, 0, 1, enetaddr, 6);
++ if (rc)
++ return rc;
++#endif
++
++ if (!is_valid_ether_addr(enetaddr))
++ return -1;
++
++ return eth_setenv_enetaddr("ethaddr", enetaddr);
++}
++
++/*
++ * Routine: board_eth_init
++ * Description: initialize module and base-board Ethernet chips
++ */
++int board_eth_init(bd_t *bis)
++{
++ int rc = 0, rc1 = 0;
++
++#ifdef CONFIG_SMC911X
++ setup_net_chip_gmpc();
++ reset_net_chip();
++
++ rc1 = handle_mac_address();
++ if (rc1)
++ printf("CM-T35: No MAC address found\n");
++
++ rc1 = smc911x_initialize(0, CM_T35_SMC911X_BASE);
++ if (rc1 > 0)
++ rc++;
++
++ rc1 = smc911x_initialize(1, SB_T35_SMC911X_BASE);
++ if (rc1 > 0)
++ rc++;
++#endif
++
++ return rc;
++}
+diff --git a/board/cm_t35/cm_t35.h b/board/cm_t35/cm_t35.h
+new file mode 100644
+index 0000000..549422c
+--- /dev/null
++++ b/board/cm_t35/cm_t35.h
+@@ -0,0 +1,180 @@
++/*
++ * (C) Copyright 2009 CompuLab, Ltd
++ * Authors:
++ * Igor Vaisbein <igor@compulab.co.il>
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * 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 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, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++#ifndef _CM_T35_H_
++#define _CM_T35_H_
++
++const omap3_sysinfo sysinfo = {
++ DDR_DISCRETE,
++ "CM-T35 board",
++ "NAND",
++};
++
++/* static void setup_net_chip(void); */
++
++/*
++ * IEN - Input Enable
++ * IDIS - Input Disable
++ * PTD - Pull type Down
++ * PTU - Pull type Up
++ * DIS - Pull type selection is inactive
++ * EN - Pull type selection is active
++ * M0 - Mode 0
++ * The commented string gives the final mux configuration for that pin
++ */
++#define MUX_CM_T35() \
++ /*SDRC*/\
++ MUX_VAL(CP(SDRC_D0), (IEN | PTD | DIS | M0)) /*SDRC_D0*/\
++ MUX_VAL(CP(SDRC_D1), (IEN | PTD | DIS | M0)) /*SDRC_D1*/\
++ MUX_VAL(CP(SDRC_D2), (IEN | PTD | DIS | M0)) /*SDRC_D2*/\
++ MUX_VAL(CP(SDRC_D3), (IEN | PTD | DIS | M0)) /*SDRC_D3*/\
++ MUX_VAL(CP(SDRC_D4), (IEN | PTD | DIS | M0)) /*SDRC_D4*/\
++ MUX_VAL(CP(SDRC_D5), (IEN | PTD | DIS | M0)) /*SDRC_D5*/\
++ MUX_VAL(CP(SDRC_D6), (IEN | PTD | DIS | M0)) /*SDRC_D6*/\
++ MUX_VAL(CP(SDRC_D7), (IEN | PTD | DIS | M0)) /*SDRC_D7*/\
++ MUX_VAL(CP(SDRC_D8), (IEN | PTD | DIS | M0)) /*SDRC_D8*/\
++ MUX_VAL(CP(SDRC_D9), (IEN | PTD | DIS | M0)) /*SDRC_D9*/\
++ MUX_VAL(CP(SDRC_D10), (IEN | PTD | DIS | M0)) /*SDRC_D10*/\
++ MUX_VAL(CP(SDRC_D11), (IEN | PTD | DIS | M0)) /*SDRC_D11*/\
++ MUX_VAL(CP(SDRC_D12), (IEN | PTD | DIS | M0)) /*SDRC_D12*/\
++ MUX_VAL(CP(SDRC_D13), (IEN | PTD | DIS | M0)) /*SDRC_D13*/\
++ MUX_VAL(CP(SDRC_D14), (IEN | PTD | DIS | M0)) /*SDRC_D14*/\
++ MUX_VAL(CP(SDRC_D15), (IEN | PTD | DIS | M0)) /*SDRC_D15*/\
++ MUX_VAL(CP(SDRC_D16), (IEN | PTD | DIS | M0)) /*SDRC_D16*/\
++ MUX_VAL(CP(SDRC_D17), (IEN | PTD | DIS | M0)) /*SDRC_D17*/\
++ MUX_VAL(CP(SDRC_D18), (IEN | PTD | DIS | M0)) /*SDRC_D18*/\
++ MUX_VAL(CP(SDRC_D19), (IEN | PTD | DIS | M0)) /*SDRC_D19*/\
++ MUX_VAL(CP(SDRC_D20), (IEN | PTD | DIS | M0)) /*SDRC_D20*/\
++ MUX_VAL(CP(SDRC_D21), (IEN | PTD | DIS | M0)) /*SDRC_D21*/\
++ MUX_VAL(CP(SDRC_D22), (IEN | PTD | DIS | M0)) /*SDRC_D22*/\
++ MUX_VAL(CP(SDRC_D23), (IEN | PTD | DIS | M0)) /*SDRC_D23*/\
++ MUX_VAL(CP(SDRC_D24), (IEN | PTD | DIS | M0)) /*SDRC_D24*/\
++ MUX_VAL(CP(SDRC_D25), (IEN | PTD | DIS | M0)) /*SDRC_D25*/\
++ MUX_VAL(CP(SDRC_D26), (IEN | PTD | DIS | M0)) /*SDRC_D26*/\
++ MUX_VAL(CP(SDRC_D27), (IEN | PTD | DIS | M0)) /*SDRC_D27*/\
++ MUX_VAL(CP(SDRC_D28), (IEN | PTD | DIS | M0)) /*SDRC_D28*/\
++ MUX_VAL(CP(SDRC_D29), (IEN | PTD | DIS | M0)) /*SDRC_D29*/\
++ MUX_VAL(CP(SDRC_D30), (IEN | PTD | DIS | M0)) /*SDRC_D30*/\
++ MUX_VAL(CP(SDRC_D31), (IEN | PTD | DIS | M0)) /*SDRC_D31*/\
++ MUX_VAL(CP(SDRC_CLK), (IEN | PTD | DIS | M0)) /*SDRC_CLK*/\
++ MUX_VAL(CP(SDRC_DQS0), (IEN | PTD | DIS | M0)) /*SDRC_DQS0*/\
++ MUX_VAL(CP(SDRC_DQS1), (IEN | PTD | DIS | M0)) /*SDRC_DQS1*/\
++ MUX_VAL(CP(SDRC_DQS2), (IEN | PTD | DIS | M0)) /*SDRC_DQS2*/\
++ MUX_VAL(CP(SDRC_DQS3), (IEN | PTD | DIS | M0)) /*SDRC_DQS3*/\
++ /*GPMC*/\
++ MUX_VAL(CP(GPMC_A1), (IDIS | PTU | EN | M0)) /*GPMC_A1*/\
++ MUX_VAL(CP(GPMC_A2), (IDIS | PTU | EN | M0)) /*GPMC_A2*/\
++ MUX_VAL(CP(GPMC_A3), (IDIS | PTU | EN | M0)) /*GPMC_A3*/\
++ MUX_VAL(CP(GPMC_A4), (IDIS | PTU | EN | M0)) /*GPMC_A4*/\
++ MUX_VAL(CP(GPMC_A5), (IDIS | PTU | EN | M0)) /*GPMC_A5*/\
++ MUX_VAL(CP(GPMC_A6), (IDIS | PTU | EN | M0)) /*GPMC_A6*/\
++ MUX_VAL(CP(GPMC_A7), (IDIS | PTU | EN | M0)) /*GPMC_A7*/\
++ MUX_VAL(CP(GPMC_A8), (IDIS | PTU | EN | M0)) /*GPMC_A8*/\
++ MUX_VAL(CP(GPMC_A9), (IDIS | PTU | EN | M0)) /*GPMC_A9*/\
++ MUX_VAL(CP(GPMC_A10), (IDIS | PTU | EN | M0)) /*GPMC_A10*/\
++ MUX_VAL(CP(GPMC_D0), (IEN | PTU | EN | M0)) /*GPMC_D0*/\
++ MUX_VAL(CP(GPMC_D1), (IEN | PTU | EN | M0)) /*GPMC_D1*/\
++ MUX_VAL(CP(GPMC_D2), (IEN | PTU | EN | M0)) /*GPMC_D2*/\
++ MUX_VAL(CP(GPMC_D3), (IEN | PTU | EN | M0)) /*GPMC_D3*/\
++ MUX_VAL(CP(GPMC_D4), (IEN | PTU | EN | M0)) /*GPMC_D4*/\
++ MUX_VAL(CP(GPMC_D5), (IEN | PTU | EN | M0)) /*GPMC_D5*/\
++ MUX_VAL(CP(GPMC_D6), (IEN | PTU | EN | M0)) /*GPMC_D6*/\
++ MUX_VAL(CP(GPMC_D7), (IEN | PTU | EN | M0)) /*GPMC_D7*/\
++ MUX_VAL(CP(GPMC_D8), (IEN | PTU | EN | M0)) /*GPMC_D8*/\
++ MUX_VAL(CP(GPMC_D9), (IEN | PTU | EN | M0)) /*GPMC_D9*/\
++ MUX_VAL(CP(GPMC_D10), (IEN | PTU | EN | M0)) /*GPMC_D10*/\
++ MUX_VAL(CP(GPMC_D11), (IEN | PTU | EN | M0)) /*GPMC_D11*/\
++ MUX_VAL(CP(GPMC_D12), (IEN | PTU | EN | M0)) /*GPMC_D12*/\
++ MUX_VAL(CP(GPMC_D13), (IEN | PTU | EN | M0)) /*GPMC_D13*/\
++ MUX_VAL(CP(GPMC_D14), (IEN | PTU | EN | M0)) /*GPMC_D14*/\
++ MUX_VAL(CP(GPMC_D15), (IEN | PTU | EN | M0)) /*GPMC_D15*/\
++ MUX_VAL(CP(GPMC_NCS0), (IDIS | PTU | EN | M0)) /*GPMC_nCS0*/\
++ /*Expansion card */\
++ MUX_VAL(CP(MMC1_CLK), (IDIS | PTU | EN | M0)) /*MMC1_CLK*/ \
++ MUX_VAL(CP(MMC1_CMD), (IEN | PTU | EN | M0)) /*MMC1_CMD*/ \
++ MUX_VAL(CP(MMC1_DAT0), (IEN | PTU | EN | M0)) /*MMC1_DAT0*/ \
++ MUX_VAL(CP(MMC1_DAT1), (IEN | PTU | EN | M0)) /*MMC1_DAT1*/ \
++ MUX_VAL(CP(MMC1_DAT2), (IEN | PTU | EN | M0)) /*MMC1_DAT2*/ \
++ MUX_VAL(CP(MMC1_DAT3), (IEN | PTU | EN | M0)) /*MMC1_DAT3*/ \
++ /* SB-T35 Ethernet */\
++ MUX_VAL(CP(GPMC_NCS4), (IEN | PTU | EN | M0)) /*GPMC_nCS4*/\
++ /* CM-T35 Ethernet */\
++ MUX_VAL(CP(GPMC_NCS5), (IDIS | PTU | DIS | M0)) /*GPMC_nCS5*/\
++ MUX_VAL(CP(GPMC_CLK), (IEN | PTD | DIS | M4)) /*GPIO_59*/\
++ MUX_VAL(CP(GPMC_NADV_ALE), (IDIS | PTD | DIS | M0)) /*nADV_ALE*/\
++ MUX_VAL(CP(GPMC_NOE), (IDIS | PTD | DIS | M0)) /*nOE*/\
++ MUX_VAL(CP(GPMC_NWE), (IDIS | PTD | DIS | M0)) /*nWE*/\
++ MUX_VAL(CP(GPMC_NBE0_CLE), (IDIS | PTU | EN | M0)) /*nBE0_CLE*/\
++ MUX_VAL(CP(GPMC_NBE1), (IDIS | PTD | DIS | M4)) /*GPIO_61*/\
++ MUX_VAL(CP(GPMC_NWP), (IEN | PTD | DIS | M0)) /*nWP*/\
++ MUX_VAL(CP(GPMC_WAIT0), (IEN | PTU | EN | M0)) /*WAIT0*/\
++ /*DSS*/\
++ MUX_VAL(CP(DSS_PCLK), (IDIS | PTD | DIS | M0)) /*DSS_PCLK*/\
++ MUX_VAL(CP(DSS_HSYNC), (IDIS | PTD | DIS | M0)) /*DSS_HSYNC*/\
++ MUX_VAL(CP(DSS_VSYNC), (IDIS | PTD | DIS | M0)) /*DSS_VSYNC*/\
++ MUX_VAL(CP(DSS_ACBIAS), (IDIS | PTD | DIS | M0)) /*DSS_ACBIAS*/\
++ MUX_VAL(CP(DSS_DATA0), (IDIS | PTD | DIS | M0)) /*DSS_DATA0*/\
++ MUX_VAL(CP(DSS_DATA1), (IDIS | PTD | DIS | M0)) /*DSS_DATA1*/\
++ MUX_VAL(CP(DSS_DATA2), (IDIS | PTD | DIS | M0)) /*DSS_DATA2*/\
++ MUX_VAL(CP(DSS_DATA3), (IDIS | PTD | DIS | M0)) /*DSS_DATA3*/\
++ MUX_VAL(CP(DSS_DATA4), (IDIS | PTD | DIS | M0)) /*DSS_DATA4*/\
++ MUX_VAL(CP(DSS_DATA5), (IDIS | PTD | DIS | M0)) /*DSS_DATA5*/\
++ MUX_VAL(CP(DSS_DATA6), (IDIS | PTD | DIS | M0)) /*DSS_DATA6*/\
++ MUX_VAL(CP(DSS_DATA7), (IDIS | PTD | DIS | M0)) /*DSS_DATA7*/\
++ MUX_VAL(CP(DSS_DATA8), (IDIS | PTD | DIS | M0)) /*DSS_DATA8*/\
++ MUX_VAL(CP(DSS_DATA9), (IDIS | PTD | DIS | M0)) /*DSS_DATA9*/\
++ MUX_VAL(CP(DSS_DATA10), (IDIS | PTD | DIS | M0)) /*DSS_DATA10*/\
++ MUX_VAL(CP(DSS_DATA11), (IDIS | PTD | DIS | M0)) /*DSS_DATA11*/\
++ MUX_VAL(CP(DSS_DATA12), (IDIS | PTD | DIS | M0)) /*DSS_DATA12*/\
++ MUX_VAL(CP(DSS_DATA13), (IDIS | PTD | DIS | M0)) /*DSS_DATA13*/\
++ MUX_VAL(CP(DSS_DATA14), (IDIS | PTD | DIS | M0)) /*DSS_DATA14*/\
++ MUX_VAL(CP(DSS_DATA15), (IDIS | PTD | DIS | M0)) /*DSS_DATA15*/\
++ MUX_VAL(CP(DSS_DATA16), (IDIS | PTD | DIS | M0)) /*DSS_DATA16*/\
++ MUX_VAL(CP(DSS_DATA17), (IDIS | PTD | DIS | M0)) /*DSS_DATA17*/\
++ MUX_VAL(CP(DSS_DATA18), (IDIS | PTD | DIS | M0)) /*DSS_DATA18*/\
++ MUX_VAL(CP(DSS_DATA19), (IDIS | PTD | DIS | M0)) /*DSS_DATA19*/\
++ MUX_VAL(CP(DSS_DATA20), (IDIS | PTD | DIS | M0)) /*DSS_DATA20*/\
++ MUX_VAL(CP(DSS_DATA21), (IDIS | PTD | DIS | M0)) /*DSS_DATA21*/\
++ MUX_VAL(CP(DSS_DATA22), (IDIS | PTD | DIS | M0)) /*DSS_DATA22*/\
++ MUX_VAL(CP(DSS_DATA23), (IDIS | PTD | DIS | M0)) /*DSS_DATA23*/\
++ /*Serial Interface*/\
++ MUX_VAL(CP(UART3_RX_IRRX), (IEN | PTD | DIS | M0)) /*UART3_RX*/\
++ MUX_VAL(CP(UART3_TX_IRTX), (IDIS | PTD | DIS | M0)) /*UART3_TX*/\
++ MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)) /*I2C1_SCL*/\
++ MUX_VAL(CP(I2C1_SDA), (IEN | PTU | EN | M0)) /*I2C1_SDA*/\
++ /*Control and debug */\
++ MUX_VAL(CP(SYS_32K), (IEN | PTD | DIS | M0)) /*SYS_32K*/\
++ MUX_VAL(CP(SYS_CLKREQ), (IEN | PTD | DIS | M0)) /*SYS_CLKREQ*/\
++ MUX_VAL(CP(SYS_NIRQ), (IEN | PTU | EN | M0)) /*SYS_nIRQ*/\
++ MUX_VAL(CP(SYS_OFF_MODE), (IEN | PTD | DIS | M0)) /*OFF_MODE*/\
++ MUX_VAL(CP(SYS_CLKOUT1), (IEN | PTD | DIS | M0)) /*CLKOUT1*/\
++ MUX_VAL(CP(SYS_CLKOUT2), (IDIS | PTD | DIS | M4)) /*green LED*/\
++ MUX_VAL(CP(JTAG_nTRST), (IEN | PTD | DIS | M0)) /*JTAG_nTRST*/\
++ MUX_VAL(CP(JTAG_TCK), (IEN | PTD | DIS | M0)) /*JTAG_TCK*/\
++ MUX_VAL(CP(JTAG_TMS), (IEN | PTD | DIS | M0)) /*JTAG_TMS*/\
++ MUX_VAL(CP(JTAG_TDI), (IEN | PTD | DIS | M0)) /*JTAG_TDI*/\
++ MUX_VAL(CP(SDRC_CKE0), (IDIS | PTU | EN | M0)) /*sdrc_cke0*/\
++ MUX_VAL(CP(SDRC_CKE1), (IDIS | PTD | DIS | M7)) /*sdrc_cke1*/\
++
++#endif
+diff --git a/board/cm_t35/config.mk b/board/cm_t35/config.mk
+new file mode 100644
+index 0000000..a90c86a
+--- /dev/null
++++ b/board/cm_t35/config.mk
+@@ -0,0 +1,30 @@
++#
++# (C) Copyright 2009
++# CompuLab, Ltd., <www.compulab.co.il>
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# 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 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, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++# Physical Address:
++# 8000'0000 (bank0)
++#
++# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
++# (mem base + reserved)
++
++# For use with external or internal boots.
++TEXT_BASE = 0x80e80000
+diff --git a/cpu/arm_cortexa8/omap3/board.c b/cpu/arm_cortexa8/omap3/board.c
+index dd2c940..0b3805a 100644
+--- a/cpu/arm_cortexa8/omap3/board.c
++++ b/cpu/arm_cortexa8/omap3/board.c
+@@ -291,8 +291,11 @@ int dram_init(void)
+
+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+ gd->bd->bi_dram[0].size = size0;
++
++#if (CONFIG_NR_DRAM_BANKS > 1)
+ gd->bd->bi_dram[1].start = PHYS_SDRAM_1 + get_sdr_cs_offset(CS1);
+ gd->bd->bi_dram[1].size = size1;
++#endif
+
+ return 0;
+ }
+diff --git a/cpu/arm_cortexa8/omap3/mem.c b/cpu/arm_cortexa8/omap3/mem.c
+index 8b8cd6d..be254b5 100644
+--- a/cpu/arm_cortexa8/omap3/mem.c
++++ b/cpu/arm_cortexa8/omap3/mem.c
+@@ -35,11 +35,6 @@
+ * Only One NAND allowed on board at a time.
+ * The GPMC CS Base for the same
+ */
+-unsigned int boot_flash_base;
+-unsigned int boot_flash_off;
+-unsigned int boot_flash_sec;
+-unsigned int boot_flash_type;
+-volatile unsigned int boot_flash_env_addr;
+
+ struct gpmc *gpmc_cfg;
+
+@@ -223,10 +218,6 @@ void gpmc_init(void)
+ const u32 *gpmc_config = NULL;
+ u32 base = 0;
+ u32 size = 0;
+-#if defined(CONFIG_ENV_IS_IN_NAND) || defined(CONFIG_ENV_IS_IN_ONENAND)
+- u32 f_off = CONFIG_SYS_MONITOR_LEN;
+- u32 f_sec = 0;
+-#endif
+ #endif
+ u32 config = 0;
+
+@@ -251,15 +242,6 @@ void gpmc_init(void)
+ base = PISMO1_NAND_BASE;
+ size = PISMO1_NAND_SIZE;
+ enable_gpmc_cs_config(gpmc_config, &gpmc_cfg->cs[0], base, size);
+-#if defined(CONFIG_ENV_IS_IN_NAND)
+- f_off = SMNAND_ENV_OFFSET;
+- f_sec = (128 << 10); /* 128 KiB */
+- /* env setup */
+- boot_flash_base = base;
+- boot_flash_off = f_off;
+- boot_flash_sec = f_sec;
+- boot_flash_env_addr = f_off;
+-#endif
+ #endif
+
+ #if defined(CONFIG_CMD_ONENAND)
+@@ -267,14 +249,5 @@ void gpmc_init(void)
+ base = PISMO1_ONEN_BASE;
+ size = PISMO1_ONEN_SIZE;
+ enable_gpmc_cs_config(gpmc_config, &gpmc_cfg->cs[0], base, size);
+-#if defined(CONFIG_ENV_IS_IN_ONENAND)
+- f_off = ONENAND_ENV_OFFSET;
+- f_sec = (128 << 10); /* 128 KiB */
+- /* env setup */
+- boot_flash_base = base;
+- boot_flash_off = f_off;
+- boot_flash_sec = f_sec;
+- boot_flash_env_addr = f_off;
+-#endif
+ #endif
+ }
+diff --git a/cpu/arm_cortexa8/omap3/sys_info.c b/cpu/arm_cortexa8/omap3/sys_info.c
+index 31b2003..3f66a6a 100644
+--- a/cpu/arm_cortexa8/omap3/sys_info.c
++++ b/cpu/arm_cortexa8/omap3/sys_info.c
+@@ -173,15 +173,6 @@ u32 get_gpmc0_width(void)
+ return WIDTH_16BIT;
+ }
+
+-/*************************************************************************
+- * get_board_rev() - setup to pass kernel board revision information
+- * returns:(bit[0-3] sub version, higher bit[7-4] is higher version)
+- *************************************************************************/
+-u32 get_board_rev(void)
+-{
+- return 0x20;
+-}
+-
+ /********************************************************
+ * get_base(); get upper addr of current execution
+ *******************************************************/
+diff --git a/doc/README.omap3 b/doc/README.omap3
+index 6227151..1c1c16f 100644
+--- a/doc/README.omap3
++++ b/doc/README.omap3
+@@ -21,6 +21,8 @@ Currently the following boards are supported:
+
+ * TI/Logic PD Zoom 2 [7]
+
++* CompuLab Ltd. CM-T35 [8]
++
+ Toolchain
+ =========
+
+@@ -61,6 +63,11 @@ make
+ make omap3_zoom2_config
+ make
+
++* CM-T35:
++
++make cm_t35_config
++make
++
+ Custom commands
+ ===============
+
+@@ -119,7 +126,7 @@ To read a bit :
+ Acknowledgements
+ ================
+
+-OMAP3 U-Boot is based on U-Boot tar ball [8] for BeagleBoard and EVM done by
++OMAP3 U-Boot is based on U-Boot tar ball [9] for BeagleBoard and EVM done by
+ several TI employees.
+
+ Links
+@@ -153,6 +160,11 @@ http://www.logicpd.com/products/devkit/ti/zoom_mobile_development_kit
+ [7] TI/Logic PD Zoom 2
+
+ http://www.logicpd.com/sites/default/files/1012659A_Zoom_OMAP34x-II_MDP_Brief.pdf
+-[8] TI OMAP3 U-Boot:
++
++[8] CompuLab Ltd. CM-T35:
++
++http://www.compulab.co.il/t35/html/t35-cm-datasheet.htm
++
++[9] TI OMAP3 U-Boot:
+
+ http://beagleboard.googlecode.com/files/u-boot_beagle_revb.tar.gz
+diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
+index c027abe..8509b6a 100644
+--- a/drivers/net/smc911x.c
++++ b/drivers/net/smc911x.c
+@@ -37,7 +37,7 @@ void pkt_data_push(struct eth_device *dev, u32 addr, u32 val) \
+
+ #define mdelay(n) udelay((n)*1000)
+
+-static void smx911x_handle_mac_address(struct eth_device *dev)
++static void smc911x_handle_mac_address(struct eth_device *dev)
+ {
+ unsigned long addrh, addrl;
+ uchar *m = dev->enetaddr;
+@@ -47,7 +47,7 @@ static void smx911x_handle_mac_address(struct eth_device *dev)
+ smc911x_set_mac_csr(dev, ADDRL, addrl);
+ smc911x_set_mac_csr(dev, ADDRH, addrh);
+
+- printf(DRIVERNAME ": MAC %pM\n", m);
++ printf("%s: MAC %pM\n", dev->name, m);
+ }
+
+ static int smc911x_miiphy_read(struct eth_device *dev,
+@@ -119,12 +119,12 @@ static void smc911x_phy_configure(struct eth_device *dev)
+ goto err_out;
+ } while (!(status & PHY_BMSR_LS));
+
+- printf(DRIVERNAME ": phy initialized\n");
++ printf("%s: phy initialized\n", dev->name);
+
+ return;
+
+ err_out:
+- printf(DRIVERNAME ": autonegotiation timed out\n");
++ printf("%s: autonegotiation timed out\n", dev->name);
+ }
+
+ static void smc911x_enable(struct eth_device *dev)
+@@ -148,14 +148,14 @@ static int smc911x_init(struct eth_device *dev, bd_t * bd)
+ {
+ struct chip_id *id = dev->priv;
+
+- printf(DRIVERNAME ": detected %s controller\n", id->name);
++ printf("%s: detected %s controller\n", dev->name, id->name);
+
+ smc911x_reset(dev);
+
+ /* Configure the PHY, initialize the link state */
+ smc911x_phy_configure(dev);
+
+- smx911x_handle_mac_address(dev);
++ smc911x_handle_mac_address(dev);
+
+ /* Turn on Tx + Rx */
+ smc911x_enable(dev);
+@@ -193,7 +193,7 @@ static int smc911x_send(struct eth_device *dev,
+ if (!status)
+ return 0;
+
+- printf(DRIVERNAME ": failed to send packet: %s%s%s%s%s\n",
++ printf("%s: failed to send packet: %s%s%s%s%s\n", dev->name,
+ status & TX_STS_LOC ? "TX_STS_LOC " : "",
+ status & TX_STS_LATE_COLL ? "TX_STS_LATE_COLL " : "",
+ status & TX_STS_MANY_COLL ? "TX_STS_MANY_COLL " : "",
+@@ -206,6 +206,10 @@ static int smc911x_send(struct eth_device *dev,
+ static void smc911x_halt(struct eth_device *dev)
+ {
+ smc911x_reset(dev);
++
++#ifdef CONFIG_SMC911X_KEEP_MAC
++ smc911x_handle_mac_address(dev);
++#endif
+ }
+
+ static int smc911x_rx(struct eth_device *dev)
+@@ -225,9 +229,8 @@ static int smc911x_rx(struct eth_device *dev)
+ *data++ = pkt_data_pull(dev, RX_DATA_FIFO);
+
+ if (status & RX_STS_ES)
+- printf(DRIVERNAME
+- ": dropped bad packet. Status: 0x%08x\n",
+- status);
++ printf("%s: dropped bad packet. Status: 0x%08x\n",
++ dev->name, status);
+ else
+ NetReceive(NetRxPackets[0], pktlen);
+ }
+@@ -238,6 +241,7 @@ static int smc911x_rx(struct eth_device *dev)
+ int smc911x_initialize(u8 dev_num, int base_addr)
+ {
+ unsigned long addrl, addrh;
++ unsigned char enetaddr[6];
+ struct eth_device *dev;
+
+ dev = malloc(sizeof(*dev));
+@@ -248,6 +252,7 @@ int smc911x_initialize(u8 dev_num, int base_addr)
+ memset(dev, 0, sizeof(*dev));
+
+ dev->iobase = base_addr;
++ sprintf(dev->name, "%s-%hu", DRIVERNAME, dev_num);
+
+ /* Try to detect chip. Will fail if not present. */
+ if (smc911x_detect_chip(dev)) {
+@@ -257,18 +262,20 @@ int smc911x_initialize(u8 dev_num, int base_addr)
+
+ addrh = smc911x_get_mac_csr(dev, ADDRH);
+ addrl = smc911x_get_mac_csr(dev, ADDRL);
+- dev->enetaddr[0] = addrl;
+- dev->enetaddr[1] = addrl >> 8;
+- dev->enetaddr[2] = addrl >> 16;
+- dev->enetaddr[3] = addrl >> 24;
+- dev->enetaddr[4] = addrh;
+- dev->enetaddr[5] = addrh >> 8;
++ enetaddr[0] = addrl;
++ enetaddr[1] = addrl >> 8;
++ enetaddr[2] = addrl >> 16;
++ enetaddr[3] = addrl >> 24;
++ enetaddr[4] = addrh;
++ enetaddr[5] = addrh >> 8;
++
++ if (is_valid_ether_addr(enetaddr))
++ memcpy(dev->enetaddr, enetaddr, 6);
+
+ dev->init = smc911x_init;
+ dev->halt = smc911x_halt;
+ dev->send = smc911x_send;
+ dev->recv = smc911x_rx;
+- sprintf(dev->name, "%s-%hu", DRIVERNAME, dev_num);
+
+ eth_register(dev);
+ return 1;
+diff --git a/drivers/net/smc911x.h b/drivers/net/smc911x.h
+index 05e007c..0ea6ac1 100644
+--- a/drivers/net/smc911x.h
++++ b/drivers/net/smc911x.h
+@@ -447,7 +447,7 @@ static int smc911x_detect_chip(struct eth_device *dev)
+ /* Special case -- no chip present */
+ return -1;
+ } else if (val != 0x87654321) {
+- printf(DRIVERNAME ": Invalid chip endian 0x%08lx\n", val);
++ printf("%s: Invalid chip endian 0x%08lx\n", __func__, val);
+ return -1;
+ }
+
+@@ -456,7 +456,7 @@ static int smc911x_detect_chip(struct eth_device *dev)
+ if (chip_ids[i].id == val) break;
+ }
+ if (!chip_ids[i].id) {
+- printf(DRIVERNAME ": Unknown chip ID %04lx\n", val);
++ printf("%s: Unknown chip ID %04lx\n", __func__, val);
+ return -1;
+ }
+
+@@ -480,8 +480,8 @@ static void smc911x_reset(struct eth_device *dev)
+ !(smc911x_reg_read(dev, PMT_CTRL) & PMT_CTRL_READY))
+ udelay(10);
+ if (!timeout) {
+- printf(DRIVERNAME
+- ": timeout waiting for PM restore\n");
++ printf("%s: timeout waiting for PM restore\n",
++ dev->name);
+ return;
+ }
+ }
+@@ -496,7 +496,7 @@ static void smc911x_reset(struct eth_device *dev)
+ udelay(10);
+
+ if (!timeout) {
+- printf(DRIVERNAME ": reset timeout\n");
++ printf("%s: reset timeout\n", dev->name);
+ return;
+ }
+
+diff --git a/examples/api/Makefile b/examples/api/Makefile
+index 04a270b..057e85a 100644
+--- a/examples/api/Makefile
++++ b/examples/api/Makefile
+@@ -49,6 +49,12 @@ ifeq ($(ARCH),ppc)
+ EXT_SOBJ_FILES-$(CONFIG_API) += lib_ppc/ppcstring.o
+ endif
+
++ifeq ($(ARCH),arm)
++ifneq (,$(findstring -mabi=aapcs-linux,$(PLATFORM_CPPFLAGS)))
++EXT_COBJ_FILES-$(CONFIG_API) += lib_arm/eabi_compat.o
++endif
++endif
++
+ # Create a list of source files so their dependencies can be auto-generated
+ SRCS += $(addprefix $(SRCTREE)/,$(EXT_COBJ_FILES-y:.o=.c))
+ SRCS += $(addprefix $(SRCTREE)/,$(EXT_SOBJ_FILES-y:.o=.S))
+@@ -81,6 +87,10 @@ $(obj)%.o: $(SRCTREE)/lib_generic/%.c
+ $(obj)%.o: $(SRCTREE)/lib_$(ARCH)/%.S
+ $(CC) -g $(CFLAGS) -c -o $@ $<
+
++# Rule to build architecture-specific library C files
++$(obj)%.o: $(SRCTREE)/lib_$(ARCH)/%.c
++ $(CC) -g $(CFLAGS) -c -o $@ $<
++
+ #########################################################################
+
+ # defines $(obj).depend target
+diff --git a/include/asm-arm/arch-omap3/cpu.h b/include/asm-arm/arch-omap3/cpu.h
+index 8ab2e39..7fdf00f 100644
+--- a/include/asm-arm/arch-omap3/cpu.h
++++ b/include/asm-arm/arch-omap3/cpu.h
+@@ -136,6 +136,10 @@ struct gpmc {
+ u32 ecc8_result; /* 0x21C */
+ u32 ecc9_result; /* 0x220 */
+ };
++
++/* Used for board specific gpmc initialization */
++extern struct gpmc *gpmc_cfg;
++
+ #else /* __ASSEMBLY__ */
+ #define GPMC_CONFIG1 0x00
+ #define GPMC_CONFIG2 0x04
+diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
+new file mode 100644
+index 0000000..37edbb5
+--- /dev/null
++++ b/include/configs/cm_t35.h
+@@ -0,0 +1,281 @@
++/*
++ * (C) Copyright 2009 CompuLab, Ltd.
++ *
++ * Authors :
++ * Igor Vaisbein <igor@compulab.co.il>
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * Derived from omap3evm and Beagle Board by
++ * Manikandan Pillai <mani.pillai@ti.com>
++ * Richard Woodruff <r-woodruff2@ti.com>
++ * Syed Mohammed Khasim <x0khasim@ti.com>
++ *
++ * Configuration settings for the CompuLab CM-T35 board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * 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 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, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/* High Level Configuration Options */
++#define CONFIG_ARMCORTEXA8 1 /* This is an ARM V7 CPU core */
++#define CONFIG_OMAP 1 /* in a TI OMAP core */
++#define CONFIG_OMAP34XX 1 /* which is a 34XX */
++#define CONFIG_OMAP3430 1 /* which is in a 3430 */
++#define CONFIG_CM_T35 1 /* working with CM_T35 */
++
++#include <asm/arch/cpu.h> /* get chip and board defs */
++#include <asm/arch/omap3.h>
++
++#define CONFIG_DISPLAY_CPUINFO 1
++#define CONFIG_DISPLAY_BOARDINFO 1
++
++/* Clock Defines */
++#define V_OSCK 26000000 /* Clock output from T2 */
++#define V_SCLK (V_OSCK >> 1)
++
++/* DDR type - Micron */
++#define CONFIG_OMAP3_MICRON_DDR 1
++
++#undef CONFIG_USE_IRQ /* no support for IRQs */
++#define CONFIG_MISC_INIT_R
++
++#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_REVISION_TAG 1
++#define CONFIG_SERIAL_TAG 1
++
++/* Size of malloc() pool */
++#define CONFIG_ENV_SIZE (128 << 10) /* Total Size Environment */
++ /* Sector */
++#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (512 << 10))
++#define CONFIG_SYS_GBL_DATA_SIZE 128 /* bytes reserved for */
++ /* initial data */
++/* NS16550 Configuration */
++#define V_NS16550_CLK 48000000 /* 48MHz (APLL96/2) */
++
++#define CONFIG_SYS_NS16550
++#define CONFIG_SYS_NS16550_SERIAL
++#define CONFIG_SYS_NS16550_REG_SIZE (-4)
++#define CONFIG_SYS_NS16550_CLK V_NS16550_CLK
++
++/* serial console configuration */
++#define CONFIG_CONS_INDEX 3
++#define CONFIG_SYS_NS16550_COM3 OMAP34XX_UART3
++#define CONFIG_SERIAL3 3 /* UART3 */
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++#define CONFIG_BAUDRATE 115200
++#define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600,\
++ 115200}
++#define CONFIG_MMC 1
++#define CONFIG_OMAP3_MMC 1
++#define CONFIG_SYS_MMC_MAX_DEVICE 1
++#define CONFIG_DOS_PARTITION 1
++
++/* commands to include */
++#include <config_cmd_default.h>
++
++#define CONFIG_CMD_EXT2 /* EXT2 Support */
++#define CONFIG_CMD_FAT /* FAT support */
++#define CONFIG_CMD_JFFS2 /* JFFS2 Support */
++#define CONFIG_CMD_YAFFS2 /* YAFFS2 Support */
++#define CONFIG_CMD_UBI /* UBI Support */
++#define CONFIG_CMD_MTDPARTS
++
++#define CONFIG_CMD_I2C /* I2C serial bus support */
++#define CONFIG_CMD_MMC /* MMC support */
++#define CONFIG_CMD_NAND /* NAND support */
++#define CONFIG_CMD_DHCP
++#define CONFIG_CMD_PING
++
++#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */
++#undef CONFIG_CMD_FPGA /* FPGA configuration Support */
++#undef CONFIG_CMD_IMLS /* List all found images */
++
++#define CONFIG_SYS_NO_FLASH
++
++/* I2C */
++#define CONFIG_SYS_I2C_SPEED 100000
++#define CONFIG_SYS_I2C_SLAVE 1
++#define CONFIG_SYS_I2C_BUS 0
++#define CONFIG_SYS_I2C_BUS_SELECT 1
++#define CONFIG_DRIVER_OMAP34XX_I2C 1
++
++/* TWL4030 */
++#define CONFIG_TWL4030_POWER 1
++
++/* Board NAND Info. */
++#define CONFIG_NAND_OMAP_GPMC 1
++#define GPMC_NAND_ECC_LP_x8_LAYOUT 1
++#define OMAP34XX_GPMC_NAND_SMNAND 1
++
++#define CONFIG_SYS_NAND_ADDR NAND_BASE /* physical address */
++ /* to access nand */
++#define CONFIG_SYS_NAND_BASE NAND_BASE /* physical address */
++ /* to access */
++ /* nand at CS0 */
++
++#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of */
++ /* NAND devices */
++#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
++
++/* JFFS2 */
++#define CONFIG_JFFS2_NAND
++#define CONFIG_JFFS2_DEV "nand0"
++#define CONFIG_SYS_MAX_MTD_BANKS (CONFIG_SYS_MAX_FLASH_BANKS + \
++ CONFIG_SYS_MAX_NAND_DEVICE)
++#define CONFIG_SYS_JFFS2_MEM_NAND
++#define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
++#define CONFIG_SYS_JFFS2_NUM_BANKS 1
++
++/* ubi/ubifs related definitions */
++#define CONFIG_RBTREE
++#define CONFIG_MTD_DEVICE /* needed for mtdparts commands */
++#define CONFIG_MTD_PARTITIONS
++
++/* Environment information */
++#define CONFIG_BOOTDELAY 3
++
++#define CONFIG_BOOTFILE uImage
++
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "loadaddr=0x82000000\0" \
++ "baudrate=115200\0"\
++ "console=ttyS2,115200n8\0" \
++ "autoload=no\0" \
++ "mmcargs=setenv bootargs console=${console} " \
++ "root=/dev/mmcblk0p2 rw " \
++ "rootfstype=ext3 rootwait\0" \
++ "nandargs=setenv bootargs console=${console} " \
++ "root=/dev/mtdblock4 rw " \
++ "rootfstype=jffs2\0" \
++ "loadbootscript=fatload mmc 0 ${loadaddr} boot.scr\0" \
++ "bootscript=echo Running bootscript from mmc ...; " \
++ "source ${loadaddr}\0" \
++ "loaduimage=fatload mmc 0 ${loadaddr} uImage\0" \
++ "mmcboot=echo Booting from mmc ...; " \
++ "run mmcargs; " \
++ "bootm ${loadaddr}\0" \
++ "nandboot=echo Booting from nand ...; " \
++ "run nandargs; " \
++ "onenand read ${loadaddr} 280000 400000; " \
++ "bootm ${loadaddr}\0" \
++
++#define CONFIG_BOOTCOMMAND \
++ "if mmc init; then " \
++ "if run loadbootscript; then " \
++ "run bootscript; " \
++ "else " \
++ "if run loaduimage; then " \
++ "run mmcboot; " \
++ "else run nandboot; " \
++ "fi; " \
++ "fi; " \
++ "else run nandboot; fi"
++
++#define MTDIDS_DEFAULT "nand0=nand"
++#define MTDPARTS_DEFAULT "mtdparts=nand:512k(xloader)," \
++ "1920k(u-boot)," \
++ "256k(env)," \
++ "4m(kernel)," \
++ "-(fs),"
++
++#define CONFIG_AUTO_COMPLETE 1
++/*
++ * Miscellaneous configurable options
++ */
++#define CONFIG_API 1
++#define V_PROMPT "CM-T35 # "
++
++#define CONFIG_SYS_LONGHELP /* undef to save memory */
++#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */
++#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
++#define CONFIG_SYS_PROMPT V_PROMPT
++#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
++
++/* Print Buffer Size */
++#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
++ sizeof(CONFIG_SYS_PROMPT) + 16)
++#define CONFIG_SYS_MAXARGS 16 /* max number of command */
++ /* args */
++/* Boot Argument Buffer Size */
++#define CONFIG_SYS_BARGSIZE (CONFIG_SYS_CBSIZE)
++
++/* memtest works on */
++#define CONFIG_SYS_MEMTEST_START (OMAP34XX_SDRC_CS0 + 0x01000000)
++#define CONFIG_SYS_MEMTEST_END (OMAP34XX_SDRC_CS0 + 0x08000000)
++
++#define CONFIG_SYS_LOAD_ADDR (OMAP34XX_SDRC_CS0) /* default load */
++ /* address */
++
++/*
++ * OMAP3 has 12 GP timers, they can be driven by the system clock
++ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
++ * This rate is divided by a local divisor.
++ */
++#define CONFIG_SYS_TIMERBASE OMAP34XX_GPT2
++#define CONFIG_SYS_PTV 2 /* Divisor: 2^(PTV+1) => 8 */
++#define CONFIG_SYS_HZ 1000
++
++/*
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (128 << 10) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (4 << 10) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4 << 10) /* FIQ stack */
++#endif
++
++/* Physical Memory Map */
++#define CONFIG_NR_DRAM_BANKS 1 /* CS1 may not be populated on CM-T35 */
++#define PHYS_SDRAM_1 OMAP34XX_SDRC_CS0
++#define PHYS_SDRAM_1_SIZE (32 << 20) /* at least 32 meg */
++
++/* SDRAM Bank Allocation method */
++#define SDRC_R_B_C 1
++
++/* PISMO support */
++#define PISMO1_NAND_SIZE GPMC_SIZE_128M
++
++/* environment */
++#define CONFIG_ENV_IS_IN_NAND 1
++#define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
++
++/* SMSC9220 Ethernet */
++#if defined(CONFIG_CMD_NET)
++#define CONFIG_NET_MULTI
++#define CONFIG_SMC911X
++#define CONFIG_SMC911X_32_BIT
++#define CONFIG_SMC911X_KEEP_MAC
++#define CM_T35_SMC911X_BASE 0x2C000000
++#define SB_T35_SMC911X_BASE (CM_T35_SMC911X_BASE + (16 << 20))
++#define CONFIG_SMC911X_BASE CM_T35_SMC911X_BASE /* for smc911x_eeprom */
++#endif /* (CONFIG_CMD_NET) */
++
++#define CONFIG_OMAP3_GPIO_6 1
++
++#endif /* __CONFIG_H */
+diff --git a/include/configs/devkit8000.h b/include/configs/devkit8000.h
+index bd5037e..bac5127 100644
+--- a/include/configs/devkit8000.h
++++ b/include/configs/devkit8000.h
+@@ -293,15 +293,6 @@
+ #define CONFIG_ENV_IS_IN_NAND 1
+ #define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
+
+-#define CONFIG_ENV_OFFSET boot_flash_off
+-
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h
+index 19a5ec9..73ead6c 100644
+--- a/include/configs/omap3_beagle.h
++++ b/include/configs/omap3_beagle.h
+@@ -291,8 +291,8 @@
+ #define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -310,13 +310,4 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h
+index a5514ae..70eb86b 100644
+--- a/include/configs/omap3_evm.h
++++ b/include/configs/omap3_evm.h
+@@ -262,7 +262,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE ONENAND_MAP
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -272,9 +272,9 @@
+ #define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
+-#define CONFIG_ENV_ADDR boot_flash_env_addr
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET ONENAND_ENV_OFFSET
++#define CONFIG_ENV_ADDR ONENAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+ * CFI FLASH driver setup
+@@ -291,15 +291,6 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ /*----------------------------------------------------------------------------
+ * SMSC9115 Ethernet from SMSC9118 family
+ *----------------------------------------------------------------------------
+diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h
+index ffb515d..6ffae60 100644
+--- a/include/configs/omap3_overo.h
++++ b/include/configs/omap3_overo.h
+@@ -266,7 +266,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE NAND_BASE
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -276,8 +276,8 @@
+ #define ONENAND_ENV_OFFSET 0x240000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x240000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -295,15 +295,6 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #if defined(CONFIG_CMD_NET)
+ /*----------------------------------------------------------------------------
+ * SMSC9211 Ethernet from SMSC9118 family
+diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h
+index 6f21af3..041412e 100644
+--- a/include/configs/omap3_pandora.h
++++ b/include/configs/omap3_pandora.h
+@@ -259,7 +259,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE ONENAND_MAP
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -269,8 +269,8 @@
+ #define ONENAND_ENV_OFFSET 0x240000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x240000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -288,13 +288,4 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_sdp3430.h b/include/configs/omap3_sdp3430.h
+index 229dc5e..3ec7ce0 100644
+--- a/include/configs/omap3_sdp3430.h
++++ b/include/configs/omap3_sdp3430.h
+@@ -355,15 +355,4 @@
+ * - rest for filesystem
+ */
+
+-/*--------------------------------------------------------------------------*/
+-
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_zoom1.h b/include/configs/omap3_zoom1.h
+index da4b677..9811f15 100644
+--- a/include/configs/omap3_zoom1.h
++++ b/include/configs/omap3_zoom1.h
+@@ -267,7 +267,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_NAND_BASE
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -277,8 +277,8 @@
+ #define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -296,13 +296,4 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_zoom2.h b/include/configs/omap3_zoom2.h
+index 32cd6fd..1a23acd 100644
+--- a/include/configs/omap3_zoom2.h
++++ b/include/configs/omap3_zoom2.h
+@@ -232,7 +232,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_NAND_BASE
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -240,8 +240,8 @@
+ #define CONFIG_ENV_IS_IN_NAND 1
+ #define SMNAND_ENV_OFFSET 0x0c0000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -251,13 +251,4 @@
+ #define CONFIG_SYS_FLASH_ERASE_TOUT (100 * CONFIG_SYS_HZ)
+ #define CONFIG_SYS_FLASH_WRITE_TOUT (100 * CONFIG_SYS_HZ)
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
diff --git a/recipes/u-boot/u-boot-mkimage-native_1.3.2.bb b/recipes/u-boot/u-boot-mkimage-native_1.3.2.bb
index 38dd700d08..3c210a099b 100644
--- a/recipes/u-boot/u-boot-mkimage-native_1.3.2.bb
+++ b/recipes/u-boot/u-boot-mkimage-native_1.3.2.bb
@@ -13,7 +13,7 @@ EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
do_compile () {
oe_runmake smdk2410_config
- oe_runmake tools
+ oe_runmake tools STRIP='/bin/true'
}
do_stage () {
diff --git a/recipes/u-boot/u-boot-omap3pandora_git.bb b/recipes/u-boot/u-boot-omap3pandora_git.bb
index 77634aa080..773eb18ea2 100644
--- a/recipes/u-boot/u-boot-omap3pandora_git.bb
+++ b/recipes/u-boot/u-boot-omap3pandora_git.bb
@@ -3,12 +3,12 @@ require u-boot.inc
COMPATIBLE_MACHINE = "omap3-pandora"
# Latest SRCREV for the final shipping boards.
-SRCREV = "70532c1152662f88ba1e0627c96307d93536508f"
+SRCREV = "c71d8dbe09d69feda7e57745bd3909727d3cc33f"
PROVIDES = "u-boot"
PV = "pandora+${PR}+gitr${SRCREV}"
-PR ="r3"
+PR ="r4"
PE = "1"
SRC_URI = "git://git.openpandora.org/pandora-u-boot.git;branch=master;protocol=git \
diff --git a/recipes/u-boot/u-boot_git.bb b/recipes/u-boot/u-boot_git.bb
index e914d78064..5fcf7c586a 100644
--- a/recipes/u-boot/u-boot_git.bb
+++ b/recipes/u-boot/u-boot_git.bb
@@ -11,8 +11,10 @@ SRCREV_c7x0 = "9bf86baaa3b35b25baa2d664e2f7f6cafad689ee"
SRCREV_afeb9260 = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
SRCREV_afeb9260-180 = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
SRCREV_palmpre = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
+SRCREV_cm-t35 = "3c014f1586d5bfe30dca7549396915c83f31cd30"
SRC_URI_append_afeb9260 = " file://AFEB9260-network-fix.patch;patch=1"
SRC_URI_append_afeb9260-180 = " file://AFEB9260-network-fix.patch;patch=1"
+SRC_URI_append_cm-t35 = "file://cm-t35/cm-t35.patch;patch=1"
SRC_URI_beagleboard = "git://git.denx.de/u-boot-ti.git;protocol=git \
file://fw_env.config \
diff --git a/recipes/uclibc/uclibc-nptl/installfix.patch b/recipes/uclibc/uclibc-nptl/installfix.patch
new file mode 100644
index 0000000000..61908df179
--- /dev/null
+++ b/recipes/uclibc/uclibc-nptl/installfix.patch
@@ -0,0 +1,13 @@
+Index: git/Makefile.in
+===================================================================
+--- git.orig/Makefile.in 2009-12-04 12:53:00.000000000 -0800
++++ git/Makefile.in 2009-12-04 16:25:28.000000000 -0800
+@@ -300,7 +300,7 @@ else
+ endif
+
+ # Installs development library links.
+-install_dev: install_headers all
++install_dev: install_headers install_runtime
+ $(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)lib
+ -$(INSTALL) -m 644 lib/*.[ao] $(PREFIX)$(DEVEL_PREFIX)lib/
+ ifeq ($(HAVE_SHARED),y)
diff --git a/recipes/uclibc/uclibc-nptl/uClibc.distro b/recipes/uclibc/uclibc-nptl/uClibc.distro
index ebd16563f0..e5ac05273a 100644
--- a/recipes/uclibc/uclibc-nptl/uClibc.distro
+++ b/recipes/uclibc/uclibc-nptl/uClibc.distro
@@ -35,6 +35,7 @@ UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
UCLIBC_HAS___PROGNAME=y
UNIX98PTY_ONLY=y
ASSUME_DEVPTS=y
+UCLIBC_HAS_LIBUTIL=y
UCLIBC_HAS_TM_EXTENSIONS=y
UCLIBC_HAS_TZ_CACHING=y
UCLIBC_HAS_TZ_FILE=y
diff --git a/recipes/uclibc/uclibc-nptl/uclibc_rpc_thread.patch b/recipes/uclibc/uclibc-nptl/uclibc_rpc_thread.patch
new file mode 100644
index 0000000000..8c2b85db13
--- /dev/null
+++ b/recipes/uclibc/uclibc-nptl/uclibc_rpc_thread.patch
@@ -0,0 +1,12 @@
+Index: git/libc/inet/rpc/rpc_thread.c
+===================================================================
+--- git.orig/libc/inet/rpc/rpc_thread.c 2009-12-04 13:13:09.000000000 -0800
++++ git/libc/inet/rpc/rpc_thread.c 2009-12-04 13:13:17.000000000 -0800
+@@ -14,6 +14,7 @@
+ #ifdef __UCLIBC_HAS_THREADS__
+
+ #include <bits/libc-tsd.h>
++#include <bits/libc-lock.h>
+
+ /* Variable used in non-threaded applications or for the first thread. */
+ static struct rpc_thread_variables __libc_tsd_RPC_VARS_mem;
diff --git a/recipes/uclibc/uclibc_nptl.bb b/recipes/uclibc/uclibc_nptl.bb
index d5d6d1ab20..a910590ab8 100644
--- a/recipes/uclibc/uclibc_nptl.bb
+++ b/recipes/uclibc/uclibc_nptl.bb
@@ -7,7 +7,7 @@
# on whether the base patches apply to the selected (SRCDATE) svn release.
#
UCLIBC_BASE ?= "0.9.30"
-SRCREV="8a6a88f5032ccbc3bfb8836c783a55316b156481"
+SRCREV="b3d31460fbf188997c7337296a61409529f7c974"
PV = "${UCLIBC_BASE}+gitr${SRCREV}"
DEFAULT_PREFERENCE = "-1"
#DEFAULT_PREFERENCE is 0 (empty), releases have a preference of 1 so take
@@ -34,6 +34,8 @@ SRC_URI = "git://uclibc.org/uClibc.git;protocol=git;branch=nptl \
file://uclibc-arm-ftruncate64.patch;patch=1 \
file://ldso_use_arm_dl_linux_resolve_in_thumb_mode.patch;patch=1 \
file://uclibc_arm_remove_duplicate_sysdep_defs.patch;patch=1 \
+ file://uclibc_rpc_thread.patch;patch=1 \
+ file://installfix.patch;patch=1 \
"
S = "${WORKDIR}/git"
diff --git a/recipes/udev/udev-092/mtd-exclude-persistent.patch b/recipes/udev/udev-092/mtd-exclude-persistent.patch
new file mode 100644
index 0000000000..30032d402d
--- /dev/null
+++ b/recipes/udev/udev-092/mtd-exclude-persistent.patch
@@ -0,0 +1,17 @@
+Copyright (c) 2009 MontaVista Software, Inc. All rights reserved.
+
+---
+ etc/udev/60-persistent-storage.rules | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- udev-092.orig/etc/udev/60-persistent-storage.rules
++++ udev-092/etc/udev/60-persistent-storage.rules
+@@ -5,7 +5,7 @@ ACTION!="add", GOTO="persistent_storage_
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*", GOTO="persistent_storage_end"
++KERNEL=="ram*|loop*|fd*|mtd*|nbd*", GOTO="persistent_storage_end"
+
+ # never access removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", SYSFS{removable}=="1", DRIVER=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
diff --git a/recipes/udev/udev-100/mtd-exclude-persistent.patch b/recipes/udev/udev-100/mtd-exclude-persistent.patch
new file mode 100644
index 0000000000..2b848810d2
--- /dev/null
+++ b/recipes/udev/udev-100/mtd-exclude-persistent.patch
@@ -0,0 +1,17 @@
+Copyright (c) 2009 MontaVista Software, Inc. All rights reserved.
+
+---
+ etc/udev/rules.d/60-persistent-storage.rules | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- udev-100.orig/etc/udev/rules.d/60-persistent-storage.rules
++++ udev-100/etc/udev/rules.d/60-persistent-storage.rules
+@@ -5,7 +5,7 @@ ACTION!="add", GOTO="persistent_storage_
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*|dm-*", GOTO="persistent_storage_end"
++KERNEL=="ram*|loop*|fd*|mtd*|nbd*|dm-*", GOTO="persistent_storage_end"
+
+ # never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", ATTRS{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
diff --git a/recipes/udev/udev-118/mtd-exclude-persistent.patch b/recipes/udev/udev-118/mtd-exclude-persistent.patch
new file mode 100644
index 0000000000..204b7b487d
--- /dev/null
+++ b/recipes/udev/udev-118/mtd-exclude-persistent.patch
@@ -0,0 +1,13 @@
+Copyright (c) 2009 MontaVista Software, Inc. All rights reserved.
+
+--- a/etc/udev/rules.d/60-persistent-storage.rules 2008-06-12 07:24:30.000000000 +0200
++++ b/etc/udev/rules.d/60-persistent-storage.rules 2009-08-18 11:39:23.595063264 +0200
+@@ -10,7 +10,7 @@
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-*|md*", GOTO="persistent_storage_end"
++KERNEL=="ram*|loop*|fd*|mtd*|nbd*|gnbd*|dm-*|md*|btibm*", GOTO="persistent_storage_end"
+
+ # never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
diff --git a/recipes/udev/udev-124/mtd-exclude-persistent.patch b/recipes/udev/udev-124/mtd-exclude-persistent.patch
new file mode 100644
index 0000000000..204b7b487d
--- /dev/null
+++ b/recipes/udev/udev-124/mtd-exclude-persistent.patch
@@ -0,0 +1,13 @@
+Copyright (c) 2009 MontaVista Software, Inc. All rights reserved.
+
+--- a/etc/udev/rules.d/60-persistent-storage.rules 2008-06-12 07:24:30.000000000 +0200
++++ b/etc/udev/rules.d/60-persistent-storage.rules 2009-08-18 11:39:23.595063264 +0200
+@@ -10,7 +10,7 @@
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-*|md*", GOTO="persistent_storage_end"
++KERNEL=="ram*|loop*|fd*|mtd*|nbd*|gnbd*|dm-*|md*|btibm*", GOTO="persistent_storage_end"
+
+ # never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
diff --git a/recipes/udev/udev_092.bb b/recipes/udev/udev_092.bb
index d9f5cbaa68..50d2156bcd 100644
--- a/recipes/udev/udev_092.bb
+++ b/recipes/udev/udev_092.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
the hotplug package and requires a kernel not older than 2.6.12."
RPROVIDES_${PN} = "hotplug"
-PR = "r24"
+PR = "r25"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
@@ -11,6 +11,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz
file://udevsynthesize.patch;patch=1 \
file://udevsynthesize.sh \
file://arm_inotify_fix.patch;patch=1 \
+ file://mtd-exclude-persistent.patch;patch=1 \
file://mount.blacklist \
"
diff --git a/recipes/udev/udev_100.bb b/recipes/udev/udev_100.bb
index ef08aa4636..550d047cf1 100644
--- a/recipes/udev/udev_100.bb
+++ b/recipes/udev/udev_100.bb
@@ -9,11 +9,12 @@ used to detect the type of a file system and read its metadata."
DESCRIPTION_libvolume-id-dev = "libvolume_id development headers, \
needed to link programs with libvolume_id."
-PR = "r15"
+PR = "r16"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
file://flags.patch;patch=1 \
+ file://mtd-exclude-persistent.patch;patch=1 \
file://mount.blacklist \
file://mount.sh \
"
diff --git a/recipes/udev/udev_118.bb b/recipes/udev/udev_118.bb
index b7043496af..631b8c2df3 100644
--- a/recipes/udev/udev_118.bb
+++ b/recipes/udev/udev_118.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
the hotplug package and requires a kernel not older than 2.6.12."
RPROVIDES_${PN} = "hotplug"
-PR = "r5"
+PR = "r6"
DEFAULT_PREFERENCE = "-118"
@@ -12,6 +12,7 @@ SRC_URI = "\
file://flags.patch;patch=1 \
file://vol_id_ld.patch;patch=1 \
file://udevtrigger_add_devname_filtering.patch;patch=1 \
+ file://mtd-exclude-persistent.patch;patch=1 \
file://mount.blacklist \
"
TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/recipes/udev/udev_124.bb b/recipes/udev/udev_124.bb
index 9477c55ab9..ab391a3394 100644
--- a/recipes/udev/udev_124.bb
+++ b/recipes/udev/udev_124.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
/dev/, handles hotplug events and loads drivers at boot time. It replaces \
the hotplug package and requires a kernel not older than 2.6.12."
RPROVIDES_${PN} = "hotplug"
-PR = "r17"
+PR = "r18"
SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
@@ -10,6 +10,7 @@ SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://vol_id_ld.patch;patch=1 \
file://udevtrigger_add_devname_filtering.patch;patch=1 \
file://libvolume-id-soname.patch;patch=1 \
+ file://mtd-exclude-persistent.patch;patch=1 \
file://mount.blacklist \
file://run.rules \
file://default \
diff --git a/recipes/udev/udev_141.bb b/recipes/udev/udev_141.bb
index b54b059516..e07150df65 100644
--- a/recipes/udev/udev_141.bb
+++ b/recipes/udev/udev_141.bb
@@ -6,7 +6,7 @@ LICENSE = "GPL"
# Untested
DEFAULT_PREFERENCE = "-1"
-PR = "r15"
+PR = "r18"
# needed for init.d script
RDEPENDS_${PN} += "udev-utils"
@@ -70,7 +70,6 @@ do_install () {
# This is hardcoded to $(udev_prefix)/lib/udev/rules.d in the
# Makefile, even if libdir is lib64.
mv ${D}/lib/udev/rules.d ${D}${sysconfdir}/udev/
- ln -sf ${sysconfdir}/udev/rules.d ${D}/lib/udev/
cp ${S}/rules/rules.d/* ${D}${sysconfdir}/udev/rules.d/
cp ${S}/rules/packages/* ${D}${sysconfdir}/udev/rules.d/
@@ -99,6 +98,14 @@ do_install_append_h2200() {
install -m 0644 ${WORKDIR}/50-hostap_cs.rules ${D}${sysconfdir}/udev/rules.d/50-hostap_cs.rules
}
+pkg_postinst_${PN}_append() {
+if [ -d $D/lib/udev/rules.d ] ; then
+ echo "$D/lib/udev/rules.d is not a symlink, fixing that"
+ mv $D/lib/udev/rules.d/* $D${sysconfdir}/udev/rules.d/
+ rm -rf $D/lib/udev/rules.d
+ ln -sf ${sysconfdir}/udev/rules.d $D/lib/udev/
+fi
+}
do_stage_append() {
install -m 0644 ${S}/extras/volume_id/lib/libvolume_id.h ${STAGING_INCDIR}
diff --git a/recipes/usb-gadget-mode/files/shr/usb-gadget.conf b/recipes/usb-gadget-mode/files/shr/usb-gadget.conf
new file mode 100644
index 0000000000..717687d4c3
--- /dev/null
+++ b/recipes/usb-gadget-mode/files/shr/usb-gadget.conf
@@ -0,0 +1,3 @@
+USB_MODE="networking"
+MODULE_OPTIONS=""
+
diff --git a/recipes/usb-gadget-mode/usb-gadget-mode.bb b/recipes/usb-gadget-mode/usb-gadget-mode.bb
index a01377aa36..c8de395660 100644
--- a/recipes/usb-gadget-mode/usb-gadget-mode.bb
+++ b/recipes/usb-gadget-mode/usb-gadget-mode.bb
@@ -9,7 +9,7 @@ DESCRIPTION = "Manage the default USB gadget mode"
SECTION = "console/network"
LICENSE = "GPL"
PV = "0.0.2"
-PR = "r5"
+PR = "r6"
SRC_URI = "\
file://usb-gadget.conf \
diff --git a/recipes/wesnoth/wesnoth_1.6.5.bb b/recipes/wesnoth/wesnoth_1.6.5.bb
new file mode 100644
index 0000000000..4b7b9b67de
--- /dev/null
+++ b/recipes/wesnoth/wesnoth_1.6.5.bb
@@ -0,0 +1,172 @@
+DESCRIPTION = "The Battle for Wesnoth is a turn-based strategy game with a fantasy theme."
+HOMEPAGE = "http://www.wesnoth.org/"
+SECTION = "games"
+LICENSE = "GPL"
+
+DEPENDS = "freetype libsdl-image libsdl-mixer libsdl-net libsdl-ttf zlib boost imagemagick-native pango libpng"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wesnoth/${PN}-${PV}.tar.bz2;name=tarball"
+SRC_URI[tarball.md5sum] = "493826bbd9ba355930765a7e8fe3749a"
+SRC_URI[tarball.sha256sum] = "7ef047ae364278a5bf9bdc69228f77d825f793f1c4d9adae8b47f0882e7f30d7"
+
+ARM_INSTRUCTION_SET = "arm"
+
+inherit cmake
+
+EXTRA_OECMAKE = "\
+ -DGUI=tiny \
+ -DENABLE_EDITOR=ON \
+ -DENABLE_LOW_MEM=ON \
+ -DENABLE_FRIBIDI=OFF \
+ \
+ -DCMAKE_BUILD_TYPE=Debug \
+ "
+
+PACKAGES = "wesnoth-editor wesnoth-doc wesnoth-music wesnoth-sounds \
+ wesnoth-aoi wesnoth-did wesnoth-ei wesnoth-httt wesnoth-l \
+ wesnoth-nr wesnoth-sof wesnoth-sotbe wesnoth-thot wesnoth-trow \
+ wesnoth-tsg wesnoth-tb wesnoth-utbs \
+ wesnoth-data \
+ wesnoth-all-campaigns \
+ wesnoth-all \
+ wesnoth wesnoth-dbg \
+ wesnothd \
+ "
+
+DESCRIPTION_wesnoth-editor = "Map Editor for The Battle for Wesnoth"
+DESCRIPTION_wesnoth-all = "The Battle for Wesnoth with all campaigns, music and sounds"
+DESCRIPTION_wesnoth-all-campaigns = "The Battle for Wesnoth with all campaigns."
+DESCRIPTION_wesnoth-sounds = "Optional sound package for The Battle for Wesnoth"
+DESCRIPTION_wesnoth-music = "Optional music package for The Battle for Wesnoth"
+DESCRIPTION_wesnoth-data = "Mandatory data package for The Battle for Wesnoth"
+DESCRIPTION_wesnothd = "Optional Battle for Wesnoth server"
+
+do_configure_prepend(){
+ export HOST_SYS="${HOST_SYS}"
+ export BUILD_SYS="${BUILD_SYS}"
+ export STAGING_LIBDIR="${STAGING_LIBDIR}"
+ export STAGING_INCDIR="${STAGING_INCDIR}"
+ rm -f ${S}/cmake/FindBoost.cmake
+}
+
+do_install_append() {
+ #ugly hack but otherwise it would have required to
+ #have MANDIR:STRING=share/man that would require a
+ #second python function
+ if [ -d ${D}${prefix}/man ];then
+ mv ${D}${prefix}/man ${D}${mandir}
+ fi
+}
+
+RDEPENDS_wesnoth = "wesnoth-data libpng"
+
+RDEPENDS_wesnoth-editor = "wesnoth-data"
+
+RDEPENDS_wesnoth-all-campaigns = "wesnoth \
+ wesnoth-aoi wesnoth-did wesnoth-ei wesnoth-httt wesnoth-l \
+ wesnoth-nr wesnoth-sof wesnoth-sotbe wesnoth-thot wesnoth-trow \
+ wesnoth-tsg wesnoth-tb wesnoth-utbs"
+
+# Installing wesnoth-all should pull everything in (like in Debian).
+RDEPENDS_wesnoth-all = "wesnoth wesnoth-sounds wesnoth-music"
+
+FILES_wesnoth-music = "\
+ ${datadir}/wesnoth/data/core/music \
+"
+
+FILES_wesnoth-sounds = "\
+ ${datadir}/wesnoth/data/core/sounds \
+"
+
+# Picks up remaining translations and data. Must be packaged after
+# wesnoth-music, wesnoth-sounds and all campaigns.
+FILES_wesnoth-data = "\
+ ${datadir}/wesnoth/sounds \
+ ${datadir}/wesnoth/images \
+ ${datadir}/wesnoth/data \
+ ${datadir}/wesnoth/fonts \
+ ${datadir}/wesnoth/translations \
+"
+
+FILES_${PN} = "\
+ ${bindir}/wesnoth \
+ ${datadir}/icons \
+ ${datadir}/applications/wesnoth.desktop \
+ ${datadir}/pixmaps/wesnoth-icon.png \
+"
+
+FILES_wesnothd = "\
+ ${bindir}/wesnothd \
+"
+
+FILES_wesnoth-editor = "\
+ ${bindir}/wesnoth_editor \
+ ${datadir}/applications/wesnoth_editor.desktop \
+ ${datadir}/pixmaps/wesnoth_editor-icon.png \
+"
+
+FILES_wesnoth-aoi = "\
+ ${datadir}/wesnoth/data/campaigns/An_Orcish_Incursion \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-aoi.mo \
+"
+
+FILES_wesnoth-did = "\
+ ${datadir}/wesnoth/data/campaigns/Descent_Into_Darkness \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-did.mo \
+"
+
+FILES_wesnoth-ei = "\
+ ${datadir}/wesnoth/data/campaigns/Eastern_Invasion \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-ei.mo \
+"
+
+FILES_wesnoth-httt = "\
+ ${datadir}/wesnoth/data/campaigns/Heir_To_The_Throne \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-httt.mo \
+"
+
+FILES_wesnoth-l = "\
+ ${datadir}/wesnoth/data/campaigns/Liberty \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-l.mo \
+"
+
+FILES_wesnoth-nr = "\
+ ${datadir}/wesnoth/data/campaigns/Northern_Rebirth \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-nr.mo \
+"
+
+FILES_wesnoth-sof = "\
+ ${datadir}/wesnoth/data/campaigns/Sceptre_Of_Fire \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-sof.mo \
+"
+
+FILES_wesnoth-sotbe = "\
+ ${datadir}/wesnoth/data/campaigns/Son_Of_The_Black_Eye \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-sotbe.mo \
+"
+
+FILES_wesnoth-thot = "\
+ ${datadir}/wesnoth/data/campaigns/The_Hammer_Of_Thursagan \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-thot.mo \
+"
+
+FILES_wesnoth-trow = "\
+ ${datadir}/wesnoth/data/campaigns/The_Rise_Of_Wesnoth \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-trow.mo \
+"
+
+FILES_wesnoth-tsg = "\
+ ${datadir}/wesnoth/data/campaigns/The_South_Guard \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-tsg.mo \
+"
+
+FILES_wesnoth-tb = "\
+ ${datadir}/wesnoth/data/campaigns/Two_Brothers \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-tb.mo \
+"
+
+FILES_wesnoth-utbs = "\
+ ${datadir}/wesnoth/data/campaigns/Under_the_Burning_Suns \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-utbs.mo \
+"
diff --git a/recipes/x-load/x-load-omap3pandora_git.bb b/recipes/x-load/x-load-omap3pandora_git.bb
index c19b719592..05dfc2073c 100644
--- a/recipes/x-load/x-load-omap3pandora_git.bb
+++ b/recipes/x-load/x-load-omap3pandora_git.bb
@@ -4,12 +4,12 @@ COMPATIBLE_MACHINE = "omap3-pandora"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/x-load-${MACHINE}/${MACHINE}"
-SRCREV = "ea866e76420f629614ae3fc828f1525a77e051e8"
+SRCREV = "b3646a83f9e67ec9a2de3182fd254557fd6ad9aa"
PROVIDES = "x-load"
PV = "1.42+${PR}+gitr${SRCREV}"
-PR ="r1"
+PR ="r2"
PE = "1"
SRC_URI = "git://git.openpandora.org/pandora-x-loader.git;branch=master;protocol=git"
diff --git a/recipes/xchat/xchat_2.8.6.bb b/recipes/xchat/xchat_2.8.6.bb
index 9be5bd385f..2c5de69fb0 100644
--- a/recipes/xchat/xchat_2.8.6.bb
+++ b/recipes/xchat/xchat_2.8.6.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.xchat.org"
SECTION = "x11/network"
DEPENDS = "libgcrypt zlib gtk+"
DEPENDS += "gdk-pixbuf-csource-native"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://www.xchat.org/files/source/2.8/xchat-${PV}.tar.bz2"
@@ -13,6 +13,7 @@ inherit autotools
EXTRA_OECONF = "\
--disable-perl \
--disable-python \
+ --disable-tcl \
"
#Fix little bug that slipped into the 2.8.6 release, already fixed upstream.
diff --git a/recipes/xfce-extras/gigolo_0.3.2.bb b/recipes/xfce-extras/gigolo_0.3.2.bb
index 22f83538ef..33554347f3 100644
--- a/recipes/xfce-extras/gigolo_0.3.2.bb
+++ b/recipes/xfce-extras/gigolo_0.3.2.bb
@@ -1,10 +1,10 @@
DESCRIPTION = "Gigolo is a frontend to easily manage connections to remote filesystems using GIO/GVfs."
-DEPENDS = "pkgconfig gtk+"
-RDEPENDS = "libxfce4util libxfcegui4"
+DEPENDS = "pkgconfig gtk+ gvfs"
+RDEPENDS = "libxfce4util libxfcegui4 gvfs"
SECTION = "x11"
LICENSE = "GPL-2"
-PR = "r1"
+PR = "r2"
inherit xfce46
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.2.6.bb b/recipes/xorg-driver/xf86-input-evdev_2.2.6.bb
new file mode 100644
index 0000000000..792909621a
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evdev_2.2.6.bb
@@ -0,0 +1,4 @@
+require xorg-driver-input.inc
+
+DESCRIPTION = "X.Org X server -- evdev input driver"
+PE = "1"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb b/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb
new file mode 100644
index 0000000000..1e66108501
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb
@@ -0,0 +1,6 @@
+require xorg-driver-input.inc
+
+DESCRIPTION = "X.Org X server -- evdev input driver"
+PE = "1"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/xorg-font/encodings_1.0.2.bb b/recipes/xorg-font/encodings_1.0.2.bb
index da67d037aa..ecc3eed540 100644
--- a/recipes/xorg-font/encodings_1.0.2.bb
+++ b/recipes/xorg-font/encodings_1.0.2.bb
@@ -1,8 +1,5 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
-#DESCRIPTION = ""
-
-DEPENDS = "mkfontscale-native"
-RDEPENDS = ""
-
+DEPENDS = "mkfontscale-native font-util-native"
diff --git a/recipes/xorg-font/encodings_1.0.3.bb b/recipes/xorg-font/encodings_1.0.3.bb
new file mode 100644
index 0000000000..ecc3eed540
--- /dev/null
+++ b/recipes/xorg-font/encodings_1.0.3.bb
@@ -0,0 +1,5 @@
+require xorg-font-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
+
+DEPENDS = "mkfontscale-native font-util-native"
diff --git a/recipes/xorg-font/font-adobe-100dpi_1.0.0.bb b/recipes/xorg-font/font-adobe-100dpi_1.0.0.bb
index e1bdcb5e7a..ae0b32e8fd 100644
--- a/recipes/xorg-font/font-adobe-100dpi_1.0.0.bb
+++ b/recipes/xorg-font/font-adobe-100dpi_1.0.0.bb
@@ -1,3 +1,3 @@
require xorg-font-common.inc
PE = "1"
-
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-100dpi_1.0.1.bb b/recipes/xorg-font/font-adobe-100dpi_1.0.1.bb
new file mode 100644
index 0000000000..ae0b32e8fd
--- /dev/null
+++ b/recipes/xorg-font/font-adobe-100dpi_1.0.1.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-75dpi_1.0.0.bb b/recipes/xorg-font/font-adobe-75dpi_1.0.0.bb
index 60ef06fba0..ae0b32e8fd 100644
--- a/recipes/xorg-font/font-adobe-75dpi_1.0.0.bb
+++ b/recipes/xorg-font/font-adobe-75dpi_1.0.0.bb
@@ -1,2 +1,3 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-75dpi_1.0.1.bb b/recipes/xorg-font/font-adobe-75dpi_1.0.1.bb
new file mode 100644
index 0000000000..ae0b32e8fd
--- /dev/null
+++ b/recipes/xorg-font/font-adobe-75dpi_1.0.1.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb b/recipes/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb
index 0799b8a97e..897fd018df 100644
--- a/recipes/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb
+++ b/recipes/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb
@@ -3,3 +3,4 @@ require xorg-font-common.inc
DESCRIPTION = "Adobe typeface software"
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-utopia-100dpi_1.0.2.bb b/recipes/xorg-font/font-adobe-utopia-100dpi_1.0.2.bb
new file mode 100644
index 0000000000..897fd018df
--- /dev/null
+++ b/recipes/xorg-font/font-adobe-utopia-100dpi_1.0.2.bb
@@ -0,0 +1,6 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "Adobe typeface software"
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb b/recipes/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb
index 6e20eb97d8..897fd018df 100644
--- a/recipes/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb
+++ b/recipes/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb
@@ -3,4 +3,4 @@ require xorg-font-common.inc
DESCRIPTION = "Adobe typeface software"
PE = "1"
-
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-utopia-75dpi_1.0.2.bb b/recipes/xorg-font/font-adobe-utopia-75dpi_1.0.2.bb
new file mode 100644
index 0000000000..897fd018df
--- /dev/null
+++ b/recipes/xorg-font/font-adobe-utopia-75dpi_1.0.2.bb
@@ -0,0 +1,6 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "Adobe typeface software"
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-utopia-type1_1.0.1.bb b/recipes/xorg-font/font-adobe-utopia-type1_1.0.1.bb
index 6e20eb97d8..897fd018df 100644
--- a/recipes/xorg-font/font-adobe-utopia-type1_1.0.1.bb
+++ b/recipes/xorg-font/font-adobe-utopia-type1_1.0.1.bb
@@ -3,4 +3,4 @@ require xorg-font-common.inc
DESCRIPTION = "Adobe typeface software"
PE = "1"
-
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-adobe-utopia-type1_1.0.2.bb b/recipes/xorg-font/font-adobe-utopia-type1_1.0.2.bb
new file mode 100644
index 0000000000..897fd018df
--- /dev/null
+++ b/recipes/xorg-font/font-adobe-utopia-type1_1.0.2.bb
@@ -0,0 +1,6 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "Adobe typeface software"
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-alias_1.0.1.bb b/recipes/xorg-font/font-alias_1.0.1.bb
index 90eec26a57..5314cbc5db 100644
--- a/recipes/xorg-font/font-alias_1.0.1.bb
+++ b/recipes/xorg-font/font-alias_1.0.1.bb
@@ -5,4 +5,5 @@ DESCRIPTION = "X font aliases."
DEPENDS = "virtual/xserver font-util"
RDEPENDS = "encodings font-util"
-PE = "1" \ No newline at end of file
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-alias_1.0.2.bb b/recipes/xorg-font/font-alias_1.0.2.bb
new file mode 100644
index 0000000000..5314cbc5db
--- /dev/null
+++ b/recipes/xorg-font/font-alias_1.0.2.bb
@@ -0,0 +1,9 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "X font aliases."
+
+DEPENDS = "virtual/xserver font-util"
+RDEPENDS = "encodings font-util"
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-arabic-misc_1.0.0.bb b/recipes/xorg-font/font-arabic-misc_1.0.0.bb
index 6171333d6a..501d4dd979 100644
--- a/recipes/xorg-font/font-arabic-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-arabic-misc_1.0.0.bb
@@ -4,4 +4,4 @@ DESCRIPTION = "100dpi, 24 point (approximately) font to minimally support (almos
of the Arabic characters available in Unicode."
PE = "1"
-
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-arabic-misc_1.0.1.bb b/recipes/xorg-font/font-arabic-misc_1.0.1.bb
new file mode 100644
index 0000000000..501d4dd979
--- /dev/null
+++ b/recipes/xorg-font/font-arabic-misc_1.0.1.bb
@@ -0,0 +1,7 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "100dpi, 24 point (approximately) font to minimally support (almost) all \
+of the Arabic characters available in Unicode."
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-100dpi_1.0.0.bb b/recipes/xorg-font/font-bh-100dpi_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bh-100dpi_1.0.0.bb
+++ b/recipes/xorg-font/font-bh-100dpi_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-100dpi_1.0.1.bb b/recipes/xorg-font/font-bh-100dpi_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bh-100dpi_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-75dpi_1.0.0.bb b/recipes/xorg-font/font-bh-75dpi_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bh-75dpi_1.0.0.bb
+++ b/recipes/xorg-font/font-bh-75dpi_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-75dpi_1.0.1.bb b/recipes/xorg-font/font-bh-75dpi_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bh-75dpi_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb b/recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb
+++ b/recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.1.bb b/recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb b/recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb
+++ b/recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.1.bb b/recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-ttf_1.0.0.bb b/recipes/xorg-font/font-bh-ttf_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bh-ttf_1.0.0.bb
+++ b/recipes/xorg-font/font-bh-ttf_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-ttf_1.0.1.bb b/recipes/xorg-font/font-bh-ttf_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bh-ttf_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-type1_1.0.0.bb b/recipes/xorg-font/font-bh-type1_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bh-type1_1.0.0.bb
+++ b/recipes/xorg-font/font-bh-type1_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bh-type1_1.0.1.bb b/recipes/xorg-font/font-bh-type1_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bh-type1_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bitstream-100dpi_1.0.0.bb b/recipes/xorg-font/font-bitstream-100dpi_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bitstream-100dpi_1.0.0.bb
+++ b/recipes/xorg-font/font-bitstream-100dpi_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bitstream-100dpi_1.0.1.bb b/recipes/xorg-font/font-bitstream-100dpi_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bitstream-100dpi_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bitstream-75dpi_1.0.0.bb b/recipes/xorg-font/font-bitstream-75dpi_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bitstream-75dpi_1.0.0.bb
+++ b/recipes/xorg-font/font-bitstream-75dpi_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bitstream-75dpi_1.0.1.bb b/recipes/xorg-font/font-bitstream-75dpi_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bitstream-75dpi_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bitstream-speedo_1.0.0.bb b/recipes/xorg-font/font-bitstream-speedo_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bitstream-speedo_1.0.0.bb
+++ b/recipes/xorg-font/font-bitstream-speedo_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bitstream-speedo_1.0.1.bb b/recipes/xorg-font/font-bitstream-speedo_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bitstream-speedo_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bitstream-type1_1.0.0.bb b/recipes/xorg-font/font-bitstream-type1_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-bitstream-type1_1.0.0.bb
+++ b/recipes/xorg-font/font-bitstream-type1_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-bitstream-type1_1.0.1.bb b/recipes/xorg-font/font-bitstream-type1_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-bitstream-type1_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-cronyx-cyrillic_1.0.0.bb b/recipes/xorg-font/font-cronyx-cyrillic_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-cronyx-cyrillic_1.0.0.bb
+++ b/recipes/xorg-font/font-cronyx-cyrillic_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-cronyx-cyrillic_1.0.1.bb b/recipes/xorg-font/font-cronyx-cyrillic_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-cronyx-cyrillic_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-cursor-misc_1.0.0.bb b/recipes/xorg-font/font-cursor-misc_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-cursor-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-cursor-misc_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-cursor-misc_1.0.1.bb b/recipes/xorg-font/font-cursor-misc_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-cursor-misc_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-daewoo-misc_1.0.0.bb b/recipes/xorg-font/font-daewoo-misc_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-daewoo-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-daewoo-misc_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-daewoo-misc_1.0.1.bb b/recipes/xorg-font/font-daewoo-misc_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-daewoo-misc_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-dec-misc_1.0.0.bb b/recipes/xorg-font/font-dec-misc_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-dec-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-dec-misc_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-dec-misc_1.0.1.bb b/recipes/xorg-font/font-dec-misc_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-dec-misc_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-ibm-type1_1.0.0.bb b/recipes/xorg-font/font-ibm-type1_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-ibm-type1_1.0.0.bb
+++ b/recipes/xorg-font/font-ibm-type1_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-ibm-type1_1.0.1.bb b/recipes/xorg-font/font-ibm-type1_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-ibm-type1_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-isas-misc_1.0.0.bb b/recipes/xorg-font/font-isas-misc_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-isas-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-isas-misc_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-isas-misc_1.0.1.bb b/recipes/xorg-font/font-isas-misc_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-isas-misc_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-jis-misc_1.0.0.bb b/recipes/xorg-font/font-jis-misc_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-jis-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-jis-misc_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-jis-misc_1.0.1.bb b/recipes/xorg-font/font-jis-misc_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-jis-misc_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-micro-misc_1.0.0.bb b/recipes/xorg-font/font-micro-misc_1.0.0.bb
index 383d16c799..9eec596969 100644
--- a/recipes/xorg-font/font-micro-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-micro-misc_1.0.0.bb
@@ -1,4 +1,6 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
EXTRA_OECONF = "--disable-iso8859-2 --disable-iso8859-3 --disable-iso8859-4 --disable-iso8859-5 --disable-iso8859-6 --disable-iso8859-7 --disable-iso8859-8 --disable-iso8859-9 --disable-iso8859-10 --disable-iso8859-11 --disable-iso8859-12 --disable-iso8859-13 --disable-iso8859-14 --disable-iso8859-15 --disable-iso8859-16 --disable-jisx0201 --disable-koi8-r"
diff --git a/recipes/xorg-font/font-micro-misc_1.0.1.bb b/recipes/xorg-font/font-micro-misc_1.0.1.bb
new file mode 100644
index 0000000000..9eec596969
--- /dev/null
+++ b/recipes/xorg-font/font-micro-misc_1.0.1.bb
@@ -0,0 +1,6 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
+
+EXTRA_OECONF = "--disable-iso8859-2 --disable-iso8859-3 --disable-iso8859-4 --disable-iso8859-5 --disable-iso8859-6 --disable-iso8859-7 --disable-iso8859-8 --disable-iso8859-9 --disable-iso8859-10 --disable-iso8859-11 --disable-iso8859-12 --disable-iso8859-13 --disable-iso8859-14 --disable-iso8859-15 --disable-iso8859-16 --disable-jisx0201 --disable-koi8-r"
diff --git a/recipes/xorg-font/font-misc-cyrillic_1.0.0.bb b/recipes/xorg-font/font-misc-cyrillic_1.0.0.bb
index 60ef06fba0..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-misc-cyrillic_1.0.0.bb
+++ b/recipes/xorg-font/font-misc-cyrillic_1.0.0.bb
@@ -1,2 +1,4 @@
require xorg-font-common.inc
+
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-misc-cyrillic_1.0.1.bb b/recipes/xorg-font/font-misc-cyrillic_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-misc-cyrillic_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-misc-ethiopic_1.0.0.bb b/recipes/xorg-font/font-misc-ethiopic_1.0.0.bb
index 60ef06fba0..ae0b32e8fd 100644
--- a/recipes/xorg-font/font-misc-ethiopic_1.0.0.bb
+++ b/recipes/xorg-font/font-misc-ethiopic_1.0.0.bb
@@ -1,2 +1,3 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-misc-ethiopic_1.0.1.bb b/recipes/xorg-font/font-misc-ethiopic_1.0.1.bb
new file mode 100644
index 0000000000..ae0b32e8fd
--- /dev/null
+++ b/recipes/xorg-font/font-misc-ethiopic_1.0.1.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-misc-meltho_1.0.0.bb b/recipes/xorg-font/font-misc-meltho_1.0.0.bb
index 719a443b51..d2d6883aea 100644
--- a/recipes/xorg-font/font-misc-meltho_1.0.0.bb
+++ b/recipes/xorg-font/font-misc-meltho_1.0.0.bb
@@ -2,4 +2,4 @@ require xorg-font-common.inc
DESCRIPTION = "These fonts are designed for the display of Syriac text."
PE = "1"
-
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-misc-meltho_1.0.1.bb b/recipes/xorg-font/font-misc-meltho_1.0.1.bb
new file mode 100644
index 0000000000..d2d6883aea
--- /dev/null
+++ b/recipes/xorg-font/font-misc-meltho_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "These fonts are designed for the display of Syriac text."
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-misc-misc_1.0.0.bb b/recipes/xorg-font/font-misc-misc_1.0.0.bb
index ad42a16ae2..729a90aa48 100644
--- a/recipes/xorg-font/font-misc-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-misc-misc_1.0.0.bb
@@ -2,8 +2,6 @@ EXTRA_OECONF = "STAGING_LIBDIR_NATIVE=\"${STAGING_LIBDIR_NATIVE}\""
require xorg-font-common.inc
-SRC_URI += " file://configure-mapdir.patch;patch=1"
-
-#DESCRIPTION = ""
+PR = "${INC_PR}.0"
-#DEPENDS += " "
+SRC_URI += " file://configure-mapdir.patch;patch=1"
diff --git a/recipes/xorg-font/font-misc-misc_1.0.1.bb b/recipes/xorg-font/font-misc-misc_1.0.1.bb
new file mode 100644
index 0000000000..2bcb87e702
--- /dev/null
+++ b/recipes/xorg-font/font-misc-misc_1.0.1.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-mutt-misc_1.0.0.bb b/recipes/xorg-font/font-mutt-misc_1.0.0.bb
index a5ded3d3cc..6862d026b6 100644
--- a/recipes/xorg-font/font-mutt-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-mutt-misc_1.0.0.bb
@@ -4,4 +4,4 @@ DESCRIPTION = "Provides a 12pt, 100dpi proportional font with many of \
the glyphs needed for Unicode text."
PE = "1"
-
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-mutt-misc_1.0.1.bb b/recipes/xorg-font/font-mutt-misc_1.0.1.bb
new file mode 100644
index 0000000000..6862d026b6
--- /dev/null
+++ b/recipes/xorg-font/font-mutt-misc_1.0.1.bb
@@ -0,0 +1,7 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "Provides a 12pt, 100dpi proportional font with many of \
+the glyphs needed for Unicode text."
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-schumacher-misc_1.0.0.bb b/recipes/xorg-font/font-schumacher-misc_1.0.0.bb
index 60ef06fba0..ae0b32e8fd 100644
--- a/recipes/xorg-font/font-schumacher-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-schumacher-misc_1.0.0.bb
@@ -1,2 +1,3 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-schumacher-misc_1.1.0.bb b/recipes/xorg-font/font-schumacher-misc_1.1.0.bb
new file mode 100644
index 0000000000..ae0b32e8fd
--- /dev/null
+++ b/recipes/xorg-font/font-schumacher-misc_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-screen-cyrillic_1.0.0.bb b/recipes/xorg-font/font-screen-cyrillic_1.0.0.bb
index 60ef06fba0..ae0b32e8fd 100644
--- a/recipes/xorg-font/font-screen-cyrillic_1.0.0.bb
+++ b/recipes/xorg-font/font-screen-cyrillic_1.0.0.bb
@@ -1,2 +1,3 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-screen-cyrillic_1.0.2.bb b/recipes/xorg-font/font-screen-cyrillic_1.0.2.bb
new file mode 100644
index 0000000000..ae0b32e8fd
--- /dev/null
+++ b/recipes/xorg-font/font-screen-cyrillic_1.0.2.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-sony-misc_1.0.0.bb b/recipes/xorg-font/font-sony-misc_1.0.0.bb
index 60ef06fba0..ae0b32e8fd 100644
--- a/recipes/xorg-font/font-sony-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-sony-misc_1.0.0.bb
@@ -1,2 +1,3 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-sony-misc_1.0.1.bb b/recipes/xorg-font/font-sony-misc_1.0.1.bb
new file mode 100644
index 0000000000..ae0b32e8fd
--- /dev/null
+++ b/recipes/xorg-font/font-sony-misc_1.0.1.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-sun-misc_1.0.0.bb b/recipes/xorg-font/font-sun-misc_1.0.0.bb
index 60ef06fba0..ae0b32e8fd 100644
--- a/recipes/xorg-font/font-sun-misc_1.0.0.bb
+++ b/recipes/xorg-font/font-sun-misc_1.0.0.bb
@@ -1,2 +1,3 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-sun-misc_1.0.1.bb b/recipes/xorg-font/font-sun-misc_1.0.1.bb
new file mode 100644
index 0000000000..ae0b32e8fd
--- /dev/null
+++ b/recipes/xorg-font/font-sun-misc_1.0.1.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-util-native_1.0.1.bb b/recipes/xorg-font/font-util-native_1.0.1.bb
index 32ea62c3d5..ffcd60c8b7 100644
--- a/recipes/xorg-font/font-util-native_1.0.1.bb
+++ b/recipes/xorg-font/font-util-native_1.0.1.bb
@@ -6,3 +6,4 @@ XORG_PN = "font-util"
DEPENDS = "bdftopcf-native"
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-util-native_1.1.1.bb b/recipes/xorg-font/font-util-native_1.1.1.bb
new file mode 100644
index 0000000000..49fbde39ed
--- /dev/null
+++ b/recipes/xorg-font/font-util-native_1.1.1.bb
@@ -0,0 +1,13 @@
+inherit native
+require xorg-font-common.inc
+
+XORG_PN = "font-util"
+
+DEPENDS = "bdftopcf-native util-macros-native"
+
+PE = "1"
+PR = "${INC_PR}.1"
+
+do_configure_prepend() {
+ sed -i "s#MAPFILES_PATH=\`pkg-config#MAPFILES_PATH=\`PKG_CONFIG_PATH=\"${STAGING_LIBDIR_NATIVE}/pkg-config\" pkg-config#g" fontutil.m4.in
+}
diff --git a/recipes/xorg-font/font-util_1.0.1.bb b/recipes/xorg-font/font-util_1.0.1.bb
index 3ba1c05a29..4d55407ff9 100644
--- a/recipes/xorg-font/font-util_1.0.1.bb
+++ b/recipes/xorg-font/font-util_1.0.1.bb
@@ -7,5 +7,5 @@ DESCRIPTION = "X font utils."
DEPENDS = "encodings"
RDEPENDS = "mkfontdir mkfontscale encodings"
-PR = "r1"
PE = "1"
+PR = "${INC_PR}.1"
diff --git a/recipes/xorg-font/font-util_1.1.1.bb b/recipes/xorg-font/font-util_1.1.1.bb
new file mode 100644
index 0000000000..635c3e4343
--- /dev/null
+++ b/recipes/xorg-font/font-util_1.1.1.bb
@@ -0,0 +1,15 @@
+require xorg-font-common.inc
+
+PACKAGE_ARCH = "${BASE_PACKAGE_ARCH}"
+
+DESCRIPTION = "X font utils."
+
+DEPENDS = "encodings util-macros"
+RDEPENDS = "mkfontdir mkfontscale encodings"
+
+PE = "1"
+PR = "${INC_PR}.1"
+
+do_configure_prepend() {
+ sed -i "s#MAPFILES_PATH=\`pkg-config#MAPFILES_PATH=\`PKG_CONFIG_PATH=\"${STAGING_LIBDIR_NATIVE}/pkg-config\" pkg-config#g" fontutil.m4.in
+}
diff --git a/recipes/xorg-font/font-winitzki-cyrillic_1.0.0.bb b/recipes/xorg-font/font-winitzki-cyrillic_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-winitzki-cyrillic_1.0.0.bb
+++ b/recipes/xorg-font/font-winitzki-cyrillic_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-winitzki-cyrillic_1.0.1.bb b/recipes/xorg-font/font-winitzki-cyrillic_1.0.1.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-winitzki-cyrillic_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-xfree86-type1_1.0.0.bb b/recipes/xorg-font/font-xfree86-type1_1.0.0.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-xfree86-type1_1.0.0.bb
+++ b/recipes/xorg-font/font-xfree86-type1_1.0.0.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-xfree86-type1_1.0.1.bb b/recipes/xorg-font/font-xfree86-type1_1.0.1.bb
index f8fe553c62..4aa3ec58a0 100644
--- a/recipes/xorg-font/font-xfree86-type1_1.0.1.bb
+++ b/recipes/xorg-font/font-xfree86-type1_1.0.1.bb
@@ -1,3 +1,4 @@
require xorg-font-common.inc
PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/font-xfree86-type1_1.0.2.bb b/recipes/xorg-font/font-xfree86-type1_1.0.2.bb
new file mode 100644
index 0000000000..4aa3ec58a0
--- /dev/null
+++ b/recipes/xorg-font/font-xfree86-type1_1.0.2.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+
+PE = "1"
+PR = "${INC_PR}.0"
diff --git a/recipes/xorg-font/xorg-font-common.inc b/recipes/xorg-font/xorg-font-common.inc
index c2ea41e8e0..5cf40e8436 100644
--- a/recipes/xorg-font/xorg-font-common.inc
+++ b/recipes/xorg-font/xorg-font-common.inc
@@ -6,12 +6,14 @@ DEPENDS = " encodings font-alias font-util-native mkfontdir-native mkfontscale-n
RDEPENDS = "encodings font-util font-alias"
XORG_PN = "${PN}"
+INC_PR = "r1"
+
SRC_URI = "${XORG_MIRROR}/individual/font/${XORG_PN}-${PV}.tar.bz2"
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
-FILES_${PN} += " ${libdir}/X11/fonts"
+EXTRA_OEMAKE += "FCCACHE=/bin/true"
do_configure_prepend() {
if [ -f "${S}"/configure.ac ] ; then
@@ -19,10 +21,11 @@ do_configure_prepend() {
fi
}
-EXTRA_OEMAKE += "FCCACHE=/bin/true"
do_install_append() {
find ${D}${libdir}/X11/fonts -type f -name fonts.dir | xargs rm -f
find ${D}${libdir}/X11/fonts -type f -name fonts.scale | xargs rm -f
+ find ${D}${datadir}/fonts/X11 -type f -name fonts.dir | xargs rm -f
+ find ${D}${datadir}/fonts/X11 -type f -name fonts.scale | xargs rm -f
}
do_stage() {
@@ -31,10 +34,16 @@ do_stage() {
PACKAGE_ARCH = "all"
+FILES_${PN} += " ${libdir}/X11/fonts ${datadir}"
+
pkg_postinst_${PN} () {
- set -x
- for fontdir in `find $D/usr/lib/X11/fonts -type d`; do
- mkfontdir $fontdir
- mkfontscale $fontdir
- done
+ set -x
+ for fontdir in `find $D/usr/lib/X11/fonts -type d`; do
+ mkfontdir $fontdir
+ mkfontscale $fontdir
+ done
+ for fontdir in `find $D/usr/share/fonts/X11 -type d`; do
+ mkfontdir $fontdir
+ mkfontscale $fontdir
+ done
}
diff --git a/recipes/xorg-font/xorg-minimal-fonts.bb b/recipes/xorg-font/xorg-minimal-fonts.bb
index d91c6d772d..92b29e61e6 100644
--- a/recipes/xorg-font/xorg-minimal-fonts.bb
+++ b/recipes/xorg-font/xorg-minimal-fonts.bb
@@ -2,7 +2,7 @@ HOMEPAGE = "http://www.x.org"
SECTION = "x11/fonts"
LICENSE = "MIT-X"
-PR = "r1"
+PR = "1"
SRC_URI = "file://misc"
diff --git a/recipes/xorg-util/util-macros-native_1.3.0.bb b/recipes/xorg-util/util-macros-native_1.3.0.bb
new file mode 100644
index 0000000000..618e78f116
--- /dev/null
+++ b/recipes/xorg-util/util-macros-native_1.3.0.bb
@@ -0,0 +1,7 @@
+require util-macros_${PV}.bb
+
+inherit native
+
+XORG_PN = "util-macros"
+
+S = "${WORKDIR}/util-macros-${PV}"
diff --git a/recipes/xorg-util/util-macros_1.3.0.bb b/recipes/xorg-util/util-macros_1.3.0.bb
new file mode 100644
index 0000000000..4775fc6901
--- /dev/null
+++ b/recipes/xorg-util/util-macros_1.3.0.bb
@@ -0,0 +1,6 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "X autotools macros"
+PE = "1"
+
+ALLOW_EMPTY = "1"
diff --git a/recipes/xorg-xserver/xserver-xorg-conf/cm-t35/xorg.conf b/recipes/xorg-xserver/xserver-xorg-conf/cm-t35/xorg.conf
new file mode 100644
index 0000000000..07d849d705
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg-conf/cm-t35/xorg.conf
@@ -0,0 +1,29 @@
+Section "Module"
+ Load "extmod"
+ Load "dbe"
+ Load "glx"
+ Load "freetype"
+ Load "type1"
+ Load "record"
+ Load "dri"
+EndSection
+
+Section "Monitor"
+ Identifier "Builtin Default Monitor"
+EndSection
+
+Section "Device"
+ Identifier "Builtin Default fbdev Device 0"
+ Driver "omapfb"
+EndSection
+
+Section "Screen"
+ Identifier "Builtin Default fbdev Screen 0"
+ Device "Builtin Default fbdev Device 0"
+ Monitor "Builtin Default Monitor"
+EndSection
+
+Section "ServerLayout"
+ Identifier "Builtin Default Layout"
+ Screen "Builtin Default fbdev Screen 0"
+EndSection
diff --git a/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb b/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
index 8945e1e8f1..77e0f8df48 100644
--- a/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
+++ b/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Machine specific xorg.conf files"
-PR = "r16"
+PR = "r17"
SRC_URI = "file://xorg.conf"
diff --git a/recipes/zsh/zsh_4.3.10.bb b/recipes/zsh/zsh_4.3.10.bb
new file mode 100644
index 0000000000..3935e1f0cc
--- /dev/null
+++ b/recipes/zsh/zsh_4.3.10.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "The Zsh shell"
+SECTION = "base/shell"
+PRIORITY = "optional"
+DEPENDS = "ncurses libpcre"
+PR = "r1"
+LICENSE = "zsh"
+
+SRC_URI = "http://www.zsh.org/pub/zsh-${PV}.tar.bz2 \
+"
+
+inherit autotools
+
+do_configure() {
+ oe_runconf
+}
+
+EXTRA_OECONF = "--with-term-lib="ncurses" --with-tcsetpgrp"
+PARALLEL_MAKE = ""
+
+#Kill symlink
+do_install_append () {
+ mv ${D}${bindir}/zsh-${PV} ${D}${bindir}/zsh
+}
diff --git a/site/arm-common b/site/arm-common
index fd602bf3d6..20de8c5261 100644
--- a/site/arm-common
+++ b/site/arm-common
@@ -36,7 +36,7 @@ db_cv_path_sh=${db_cv_path_sh=/bin/sh}
db_cv_path_strip=${db_cv_path_strip=/usr/bin/strip}
db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_alignp_t=${db_cv_alignp_t='unsigned long'}
-db_cv_mutex=${db_cv_mutex=no}
+db_cv_mutex=${db_cv_mutex=ARM/gcc-assembly}
db_cv_posixmutexes=${db_cv_posixmutexes=no}
db_cv_uimutexes=${db_cv_uimutexes=no}
@@ -164,6 +164,7 @@ ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo=yes}
ac_cv_pread=${ac_cv_pread=no}
ac_cv_pwrite=${ac_cv_pwrite=no}
php_cv_lib_cookie_io_functions_use_off64_t=${php_cv_lib_cookie_io_functions_use_off64_t=yes}
+cv_php_mbstring_stdarg=${cv_php_mbstring_stdarg=yes}
# rsync
rsync_cv_HAVE_BROKEN_LARGEFILE=${rsync_cv_HAVE_BROKEN_LARGEFILE=no}
diff --git a/site/mips-linux b/site/mips-linux
index e00c175392..4f1297aeca 100644
--- a/site/mips-linux
+++ b/site/mips-linux
@@ -69,7 +69,7 @@ rpppoe_cv_pack_bitfields=${rpppoe_cv_pack_bitfields=rev}
# db3
db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_alignp_t=${db_cv_alignp_t='unsigned long'}
-db_cv_mutex=${db_cv_mutex=no}
+db_cv_mutex=${db_cv_mutex=POSIX/pthreads/library}
db_cv_posixmutexes=${db_cv_posixmutexes=no}
db_cv_uimutexes=${db_cv_uimutexes=no}
db_cv_fcntl_f_setfd=${db_cv_fcntl_f_setfd=yes}
diff --git a/site/mipsel-linux b/site/mipsel-linux
index 042e09a8f8..61932d1a99 100644
--- a/site/mipsel-linux
+++ b/site/mipsel-linux
@@ -73,7 +73,7 @@ rpppoe_cv_pack_bitfields=${rpppoe_cv_pack_bitfields=rev}
# db3
db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_alignp_t=${db_cv_alignp_t='unsigned long'}
-db_cv_mutex=${db_cv_mutex=no}
+db_cv_mutex=${db_cv_mutex=POSIX/pthreads/library}
db_cv_posixmutexes=${db_cv_posixmutexes=no}
db_cv_uimutexes=${db_cv_uimutexes=no}
db_cv_fcntl_f_setfd=${db_cv_fcntl_f_setfd=yes}
diff --git a/site/powerpc-common b/site/powerpc-common
index f5acef8103..dd321c04f6 100644
--- a/site/powerpc-common
+++ b/site/powerpc-common
@@ -106,7 +106,7 @@ db_cv_path_sh=${db_cv_path_sh=/bin/sh}
db_cv_path_strip=${db_cv_path_strip=/usr/bin/strip}
db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_alignp_t=${db_cv_alignp_t='unsigned long'}
-db_cv_mutex=${db_cv_mutex=no}
+db_cv_mutex=${db_cv_mutex=POSIX/pthreads/library}
db_cv_posixmutexes=${db_cv_posixmutexes=no}
db_cv_uimutexes=${db_cv_uimutexes=no}
diff --git a/site/x86_64-linux b/site/x86_64-linux
index 9180cd6e7c..9f70046392 100644
--- a/site/x86_64-linux
+++ b/site/x86_64-linux
@@ -3,6 +3,7 @@ ac_cv_func_getpwuid_r=${ac_cv_func_getpwuid_r=yes}
ac_cv_func_lstat_dereferences_slashed_symlink=${ac_cv_func_lstat_dereferences_slashed_symlink=yes}
ac_cv_func_lstat_empty_string_bug=${ac_cv_func_lstat_empty_string_bug=no}
ac_cv_func_malloc_0_nonnull=${ac_cv_func_malloc_0_nonnull=yes}
+ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=yes}
ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=yes}
ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes}
ac_cv_func_setpgrp_void=${ac_cv_func_setpgrp_void=yes}
@@ -62,9 +63,9 @@ glib_cv_uscore=${glib_cv_uscore=no}
glib_cv___va_copy=${glib_cv___va_copy=yes}
glib_cv_va_copy=${glib_cv_va_copy=yes}
glib_cv_va_val_copy=${glib_cv_va_val_copy=no}
-ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=yes}
lftp_cv_va_copy=${lftp_cv_va_copy=yes}
+lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
nano_cv_func_regexec_segv_emptystr=${nano_cv_func_regexec_segv_emptystr=no}
samba_cv_HAVE_VA_COPY=${samba_cv_HAVE_VA_COPY=yes}
screen_cv_sys_bcopy_overlap=${screen_cv_sys_bcopy_overlap=no}
@@ -95,3 +96,24 @@ ac_cv_func_realloc_0_nonnull=${ac_cv_func_realloc_0_nonnull=yes}
# bash
bash_cv_func_sigsetjmp=${bash_cv_func_sigsetjmp=present}
+
+#sudo
+sudo_cv_uid_t_len=${sudo_cv_uid_t_len=10}
+
+#libidl
+libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
+
+# ORBit2
+ac_cv_alignof_CORBA_boolean=1
+ac_cv_alignof_CORBA_char=1
+ac_cv_alignof_CORBA_double=4
+ac_cv_alignof_CORBA_float=4
+ac_cv_alignof_CORBA_long=4
+ac_cv_alignof_CORBA_long_double=8
+ac_cv_alignof_CORBA_long_long=8
+ac_cv_alignof_CORBA_octet=1
+ac_cv_alignof_CORBA_pointer=8
+ac_cv_alignof_CORBA_short=2
+ac_cv_alignof_CORBA_struct=1
+ac_cv_alignof_CORBA_wchar=2
+ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo=yes}