diff options
author | Stefan Schmidt <stefan@datenfreihafen.org> | 2009-12-10 11:08:51 +0100 |
---|---|---|
committer | Stefan Schmidt <stefan@datenfreihafen.org> | 2009-12-10 11:08:51 +0100 |
commit | a79d5a546392cad57bb8855f88d4617caa852d27 (patch) | |
tree | 28a5b26bf27ff1e594e13e6eb5aa76891f8f8aab | |
parent | 09a85ada712374f567b276067805c19b091a518a (diff) | |
parent | 6e0172f360053c39bfad106592fbb55509167103 (diff) |
Merge branch 'org.openembedded.dev' of git.openembedded.org:openembedded into org.openembedded.dev
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 Binary files differnew file mode 100644 index 0000000000..0189fe3072 --- /dev/null +++ b/recipes/epdfview/files/acroread.png 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, ð); +- 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, ð); +- +- /* 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, ð); ++ 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, ð); ++ ++ /* 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 Binary files differnew file mode 100644 index 0000000000..76156d0334 --- /dev/null +++ b/recipes/navit/files/shr/navit.png 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 Binary files differnew file mode 100644 index 0000000000..a23ba5ce03 --- /dev/null +++ b/recipes/navit/files/shr/navitD.png 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' &"/> --> + <!-- <speech type="cmdline" data="flite -t '%s'"/> --> + <!-- <speech type="cmdline" data="/usr/local/bin/say.sh '%s'"/> --> + <speech type="cmdline" data="espeak '%s' &"/> 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, ¶mentry); +- +- /*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, ¶mentry); +- 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 Binary files differindex 5c11bc3141..5c11bc3141 100755..100644 --- a/recipes/ti/files/mapdmaq +++ b/recipes/ti/files/mapdmaq 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} |