commit a470f3e5f229571b42a49aa537b437e473f979e8 Author: tpearson Date: Mon Jan 18 07:38:32 2010 +0000 Added abandoned KDE3 version of libkdcraw git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/libraries/libkdcraw@1076409 283d02a7-25f6-0310-bc7c-ecb5cbfe19da diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..cf0b402 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,11 @@ +AUTHORS AND MAINTAINERS : + +Caulier Gilles +Marcel Wiesweg + +CONTRIBUTORS: + +Angelo Naselli +Gerhard Kulzer +Achim Bohnet +Guillaume Castagnino diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..0fc8a21 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..d2140ad --- /dev/null +++ b/ChangeLog @@ -0,0 +1,1661 @@ +V 0.1.4 - 2008-03-09 +---------------------------------------------------------------------------- +2008-03-05 10:25 cgilles + + * [r782489] libkdcraw/NEWS: + update + +2008-03-05 10:24 cgilles + + * [r782487] libkdcraw/dcraw/CAMERALIST, libkdcraw/dcraw/dcraw.c, + libkdcraw/libkdcraw/dcrawbinary.cpp: + backport commit #782437 from KDE4 + +2008-03-02 08:31 cgilles + + * [r781202] libkdcraw/libkdcraw/dcrawsettingswidget.cpp: + fix i18n + +2008-02-26 07:01 cgilles + + * [r779443] libkdcraw/libkdcraw/dcrawbinary.cpp, + libkdcraw/libkdcraw/dcrawbinary.h, + libkdcraw/libkdcraw/dcrawinfocontainer.h, + libkdcraw/libkdcraw/kdcraw.cpp, libkdcraw/libkdcraw/rawfiles.h, + libkdcraw/libkdcraw/version.h: + polish + +2008-02-26 06:59 cgilles + + * [r779442] libkdcraw/libkdcraw/kdcraw.cpp: + polish + +2008-02-22 14:24 vfuoglio + + * [r778103] kipi-plugins/rawconverter/batchdialog.cpp, + kipi-plugins/rawconverter/batchdialog.h, + kipi-plugins/rawconverter/singledialog.cpp, + kipi-plugins/rawconverter/singledialog.h, libkdcraw/NEWS, + libkdcraw/libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/libkdcraw/dcrawsettingswidget.h, + libkdcraw/libkdcraw/kdcraw.cpp, libkdcraw/libkdcraw/kdcraw.h, + libkdcraw/libkdcraw/rawdecodingsettings.h: + White balance with RAW files improvements (related to bug + #142055). + + Patches by Guillaume Castagnino. + + CCMAIL : kde-imaging@kde.org + CCMAIL : casta@xwing.info + CCMAIL : caulier.gilles@gmail.com + +2008-02-07 13:23 cgilles + + * [r772001] libkdcraw/libkdcraw/dcrawbinary.cpp: + fix dcraw release + +2008-02-07 12:57 gkulzer + + * [r771991] libkdcraw/NEWS: + update to 8.82 + no new options, just renameing of -k black ro -k darkness + 4 new cameras: + Sony DSLR-A200, Sony DSLR-A700, Sony XCD-SX910CR, STV680 VGA + CCMAIL: caulier.gilles@gmail.com + +2008-02-07 12:56 gkulzer + + * [r771990] libkdcraw/dcraw/CAMERALIST, libkdcraw/dcraw/dcraw.c, + libkdcraw/dcraw/kdcraw.1: + update to 8.82 + no new options, just renameing of -k black ro -k darkness + 4 new cameras: + Sony DSLR-A200, Sony DSLR-A700, Sony XCD-SX910CR, STV680 VGA + CCMAIL: caulier.gilles@gmail.com + +2008-01-01 20:40 cgilles + + * [r755552] libkdcraw/libkdcraw/dcrawbinary.h: + static method + +2008-01-01 20:03 cgilles + + * [r755539] kipi-plugins/imageviewer/texture.cpp, + kipi-plugins/jpeglossless/utils.cpp, + kipi-plugins/printwizard/tphoto.cpp, + kipi-plugins/rawconverter/plugin_rawconverter.cpp, + kipi-plugins/sendimages/sendimages.cpp, + libkdcraw/libkdcraw/dcrawbinary.cpp, + libkdcraw/libkdcraw/dcrawbinary.h: + new method to get raw files extension string depending of the + libkdcraw version installled on computer. + +2008-01-01 09:36 cgilles + + * [r755359] libkdcraw/libkdcraw/dcrawbinary.cpp, + libkdcraw/libkdcraw/dcrawbinary.h: + new method backported from KDE4 to get list of supported RAW + camera + +2007-12-30 22:04 anaselli + + * [r754876] libkdcraw/configure.in.in, libkdcraw/libkdcraw.lsm, + libkdcraw/libkdcraw.pc.in, libkdcraw/libkdcraw/kdcraw.cpp, + libkdcraw/libkdcraw/kdcraw.h: + Breakage of the year, new static method version() has been added + + CCMAIL: kde-imaging@kde.org + +---------------------------------------------------------------------------- +V 0.1.3 - 2007-12-23 +---------------------------------------------------------------------------- +2007-12-14 14:09 cgilles + + * [r748435] libkdcraw/libkdcraw/version.h: + fix new version + +2007-12-14 08:17 gkulzer + + * [r748345] libkdcraw/dcraw/CAMERALIST: + clean-up list + +2007-12-14 07:57 gkulzer + + * [r748333] libkdcraw/NEWS, libkdcraw/dcraw/CAMERALIST, + libkdcraw/dcraw/README, libkdcraw/dcraw/dcraw.c, + libkdcraw/dcraw/kdcraw.1, libkdcraw/libkdcraw/dcrawbinary.cpp: + update dcraw to 8.81. Interface stays compatible, regression + testing done. 4 cameras added. Additional parameter -W to not + adjust brightness + +2007-11-16 14:59 gkulzer + + * [r737564] libkdcraw/NEWS: + dcraw update to 8.80 + CCMAIL:caulier.gilles@gmail.com + +2007-11-16 14:48 gkulzer + + * [r737563] libkdcraw/dcraw/CAMERALIST, libkdcraw/dcraw/dcraw.c, + libkdcraw/libkdcraw/dcrawbinary.cpp: + update dcraw to version 8.80 + +2007-11-14 10:22 cgilles + + * [r736540] libkdcraw/dcraw/dcraw.c: + fix double "%s" + +2007-11-02 14:13 gkulzer + + * [r732003] libkdcraw/dcraw/kdcraw.1: + man page update + +2007-11-02 11:58 cgilles + + * [r731957] libkdcraw/dcraw/Makefile.am: + polish + +2007-11-02 11:44 cgilles + + * [r731953] libkdcraw/libkdcraw.lsm, libkdcraw/libkdcraw.pc.in: + upgrate libkdcraw version + +2007-11-02 11:44 cgilles + + * [r731952] libkdcraw/dcraw/Makefile.am: + install CAMERALIST on kdcraw bin folder + +2007-11-02 11:33 cgilles + + * [r731948] libkdcraw/dcraw/dcraw.c: + separate Make ans Model informations from identify command line + +2007-11-02 10:46 gkulzer + + * [r731936] libkdcraw/dcraw/CAMERALIST, libkdcraw/dcraw/dcraw.c, + libkdcraw/dcraw/kdcraw.1, libkdcraw/libkdcraw/dcrawbinary.cpp: + dcraw update to version 8.78 + CCMAIL:caulier.gilles@gmail.com + +2007-10-21 10:34 hasso + + * [r727627] libkdcraw/configure.in.in, libkdcraw/dcraw/Makefile.am: + Make it to find the lcms from nonstandard places provided by user + via + --with-extra-* flags. Fixes detecting lcms installed from pkgsrc + package + system. + +2007-09-07 22:02 vfuoglio + + * [r709600] libkdcraw/ChangeLog, libkdcraw/configure.in.in, + libkdcraw/libkdcraw.lsm, prepare_libkdcraw.rb: + Preparing libkdcraw 0.1.2 release + + SNV_SILENT: + +---------------------------------------------------------------------------- +V 0.1.2 - 2007-09-07 +---------------------------------------------------------------------------- +2007-09-04 21:03 cgilles + + * [r708412] libkdcraw/AUTHORS: + fix email + +2007-09-04 09:57 cgilles + + * [r708249] libkdcraw/AUTHORS: + Add Guillaume as contributor + +2007-08-24 08:10 cgilles + + * [r704175] libkdcraw/configure.in.in: + fix ABI number for next release + +2007-08-23 11:07 cgilles + + * [r703805] libkdcraw/configure.in.in: + fix release number + +2007-08-22 13:58 cgilles + + * [r703433] libkdcraw/libkdcraw/kdcraw.cpp: + add comment + +2007-08-22 13:23 cgilles + + * [r703414] libkdcraw/libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/libkdcraw/dcrawsettingswidget.h, + libkdcraw/libkdcraw/kdcraw.cpp, + libkdcraw/libkdcraw/rawdecodingsettings.h: + libkdcraw from KDE3 branch : patch from Guillaume Castagnino + about to support new chromatic aberration reduction options + provided by dcraw 8.77 + CCBUGS: 148561 + CCMAIL: casta@xwing.info + +2007-08-22 04:33 cgilles + + * [r703160] libkdcraw/libkdcraw/dcrawinfocontainer.h, + libkdcraw/libkdcraw/kdcraw.cpp: + libkdcraw from KDE3 branch : like BC is broken with future + release, i backport "Picture Owner" extraction code from KDE4 + provided by new dcraw 8.77 + +2007-08-20 09:59 cgilles + + * [r702272] libkdcraw/libkdcraw/dcrawsettingswidget.cpp: + fix option + +2007-08-20 09:39 cgilles + + * [r702258] libkdcraw/libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/libkdcraw/rawdecodingsettings.h: + libkdcraw from KDE3 branch : patch from Guillaume Castagnino + about to handle RAW decoding quality settings properlly since + dcraw 8.73 include a new interpolation method named PPG + CCMAIL: kde-imaging@kde.org + CCMAIL: casta@xwing.info + +2007-07-25 14:37 cgilles + + * [r692427] libkdcraw/libkdcraw/dcrawsettingswidget.cpp: + fix typo + +2007-07-24 12:06 cgilles + + * [r691818] libkdcraw/libkdcraw/dcrawbinary.cpp: + fix internal dcraw version + +2007-07-24 11:57 cgilles + + * [r691813] libkdcraw/dcraw/CAMERALIST, libkdcraw/dcraw/dcraw.c, + libkdcraw/dcraw/kdcraw.1: + libkdcraw from KDE3 branch : + - update internal dcraw.c implementation from 8.76 to 8.77. + - new cameras RAW file supported : Leaf Aptus 54S and Leaf Aptus + 75S + - Binary compatibility respected. + - Changelog from dcraw repository : + * Reject 8-bit grayscale TIFFs. + * Decode raw CINE files, which may exceed 2GB. + * Error-check the "-s" option, and enable "-s all". + * Support camera WB for the Canon EOS-1D and EOS-1DS. + * Use full output range for "-H 2". + + CCMAIL: digikam-devel@kde.org + +2007-07-04 07:59 cgilles + + * [r683108] libkdcraw/libkdcraw/dcrawsettingswidget.cpp: + fix unclip color control with reconstruct setting + +2007-07-04 07:53 cgilles + + * [r683105] libkdcraw/AUTHORS, libkdcraw/NEWS, + libkdcraw/libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/libkdcraw/rawdecodingsettings.h: + libkdcraw from KDE3 branch: update setting widget to new dcraw + 8.76. + +2007-07-04 07:44 cgilles + + * [r683099] libkdcraw/libkdcraw/dcrawbinary.cpp: + update + +2007-07-04 07:41 cgilles + + * [r683096] libkdcraw/libkdcraw/version.h: + update + +2007-07-04 07:41 cgilles + + * [r683095] libkdcraw/libkdcraw.lsm, libkdcraw/libkdcraw.pc.in: + update + +2007-07-04 07:40 cgilles + + * [r683094] libkdcraw/dcraw/kdcraw.1: + update man page + +2007-07-04 07:39 cgilles + + * [r683093] libkdcraw/dcraw/CAMERALIST, libkdcraw/dcraw/README, + libkdcraw/dcraw/dcraw.c: + libkdcraw from KDE3 branch: update internal dcraw version from + 8.60 to 8.76. + + New digital still camera supported are given below : + + Apple QuickTake 100 + Apple QuickTake 150 + Canon PowerShot A630 + Canon PowerShot A640 + Canon PowerShot A710 IS + Canon EOS-1D Mark III + Casio QV-R41 + Fuji FinePix S5Pro + Hasselblad CFV + Kodak C330 + Mamiya ZD + Nikon D2Xs + Nikon D40X + Olympus E-410 + Olympus E-510 + Olympus SP510UZ + Olympus SP550UZ + Panasonic DMC-FZ8 + Pentax Optio 750Z + Samsung GX-10 + Sigma SD14 + + The current implementation of libkdcraw for KDE3 do not break + binary compatibility. RAW decoding settings still the same. Only + private methods have been fixed, especally the settings widget. + + I will break binary compatibility of libkdcraw with KDE4 port + where i will add new settings like chromatic aberration + correction for ex. + + CCBUGS: 142568 + CCMAIL: kde-imaging@kde.org + CCMAIL: digikam-devel@kde.org + CCMAIL: ach@mpe.mpg.de + CCMAIL: boud@valdyas.org + +2007-06-13 16:54 cgilles + + * [r674972] libkdcraw/libkdcraw/Makefile.am: + fix broken compilation about moc file + +2007-06-13 08:38 cgilles + + * [r674833] libkdcraw/libkdcraw/kdcraw.cpp: + no i18n here + +2007-06-13 06:49 cgilles + + * [r674798] libkdcraw/dcraw/CAMERALIST, libkdcraw/dcraw/cameralist: + rename + +2007-06-13 06:48 cgilles + + * [r674797] libkdcraw/libkdcraw/Makefile.am: + use CXXFLAGS instead INCLUDES to dispatch -D option suring + compilation + +---------------------------------------------------------------------------- +V 0.1.1 - 2007-06-13 +---------------------------------------------------------------------------- + +2007-06-12 22:32 ach + + * [r674731] libkdcraw/configure.in.in, libkdcraw/dcraw/Makefile.am, + libkdcraw/libkdcraw/Makefile.am, + libkdcraw/libkdcraw/dcrawbinary.cpp: + o install the '(dirty) implementation detail' kdcraw into a + directory that depends on the ABI_MAJOR. This allows + several libs with different ABI_MAJOR be installed at the + same time. + o don't install manpage. kdcraw is not for the user + +2007-06-12 21:15 anaselli + + * [r674703] libkdcraw/libkdcraw/Makefile.am: + Changed to add libtools version managing into prepare script + (hope this will avoid to forget it) + +2007-06-11 12:04 cgilles + + * [r673923] libkdcraw/libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/libkdcraw/dcrawsettingswidget.h: + new signal emit when sixteen bits options is toggled + +2007-06-07 15:12 cgilles + + * [r672576] libkdcraw/Makefile.am: + compile + +2007-06-07 15:12 cgilles + + * [r672575] libkdcraw/libkdcraw, libkdcraw/src: + compile + +2007-06-07 14:52 cgilles + + * [r672567] libkdcraw/Makefile.am, libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawbinary.h, libkdcraw/dcrawinfocontainer.h, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/kdcraw.h, libkdcraw/libkdcraw_export.h, + libkdcraw/rawdecodingsettings.h, libkdcraw/rawfiles.h, + libkdcraw/src, libkdcraw/src/Makefile.am, + libkdcraw/src/dcrawbinary.cpp, libkdcraw/src/dcrawbinary.h, + libkdcraw/src/dcrawinfocontainer.h, + libkdcraw/src/dcrawsettingswidget.cpp, + libkdcraw/src/dcrawsettingswidget.h, libkdcraw/src/kdcraw.cpp, + libkdcraw/src/kdcraw.h, libkdcraw/src/libkdcraw_export.h, + libkdcraw/src/rawdecodingsettings.h, libkdcraw/src/rawfiles.h, + libkdcraw/src/version.h, libkdcraw/version.h: + libkdcraw from KDE3 branch : move all source code files to "src" + sub dir + +2007-06-07 07:00 cgilles + + * [r672447] libkdcraw/rawdecodingsettings.h: + libkdraw from KDE3 branches : patch from Jakob Stergaard to + perform equality test between 2 rawdecoding settings. + CCBUGS: 146464 + +2007-06-05 09:33 vkrause + + * [r671669] libkdcraw/dcrawbinary.cpp: + compile, this is still Qt3 + +2007-06-05 09:12 cgilles + + * [r671664] libkdcraw/dcraw/Makefile.am: + digiKam => libkdcraw + +2007-06-05 08:20 cgilles + + * [r671639] libkdcraw/dcrawbinary.cpp: + krazy fix + +2007-06-12 08:39 mlaurent + + * [r674372] kipi-plugins/wallpaper/plugin_wallpaper.cpp, + libkdcraw/libkdcraw/CMakeLists.txt: + Fix compile/install + +2007-06-11 12:14 cgilles + + * [r673926] libkdcraw/libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/libkdcraw/dcrawsettingswidget.h: + new signal emit with sixteen bits option is toggled + +2007-06-10 21:01 cgilles + + * [r673688] kipi-plugins/CMakeLists.txt, + kipi-plugins/common/Makefile.am, + kipi-plugins/jpeglossless/utils.cpp, + libkdcraw/libkdcraw/kdcraw.cpp, libkexiv2/libkexiv2/kexiv2.cpp: + completeSuffix -> suffix + +2007-06-10 10:01 coolo + + * [r673456] libkdcraw/Messages.sh: + no files here + +2007-06-08 12:43 cgilles + + * [r672906] kipi-plugins/README, libkdcraw/README, + libkexiv2/README, libkipi/README: + add "export VERBOSE=1" in INSTALL section + +2007-06-08 12:30 cgilles + + * [r672897] libkdcraw/README: + update + +2007-06-07 15:19 cgilles + + * [r672581] libkdcraw/CMakeLists.txt, libkdcraw/libkdcraw, + libkdcraw/src, libkipi/CMakeLists.txt, libkipi/libkipi, + libkipi/src: + rename 'src' sub dir to libraries name + +2007-06-07 07:03 cgilles + + * [r672448] libkdcraw/src/rawdecodingsettings.h: + libkdcraw from trunk (KDE) : backport KDE3 patch from Jakob + CCBUGS: 146464 + +2007-06-06 10:48 mlaurent + + * [r672195] libkdcraw/CMakeLists.txt, + libkdcraw/dcraw/CMakeLists.txt, libkdcraw/src/CMakeLists.txt, + libkdcraw/src/dcrawbinary.cpp, libkdcraw/src/dcrawbinary.h, + libkdcraw/src/kdcraw.cpp, libkdcraw/src/kdcraw.h, + libkdcraw/src/version.h, libkdcraw/src/version.h.cmake: + Simplify it now when we change soname not necessary + to change in 3 files just into libkdcraw/CMakeLists.txt + +2007-06-06 10:09 cgilles + + * [r672188] libkdcraw/dcraw/CMakeLists.txt, + libkdcraw/src/dcrawbinary.cpp: + libkdcraw form trunk (KDE): first approach to introduce the + soname ID of libary like suffixe of kdcraw binary program. By + this way, we can install more than one libkdcraw version on the + same computer. + CCMAIL: ach@mpe.mpg.de + +2007-06-06 08:26 cgilles + + * [r672158] libkdcraw/cmake/modules/FindLCMS.cmake: + backport temporally FindLCMS from KDElibs. + Laurent, i will remove later... + +2007-06-06 08:22 cgilles + + * [r672156] libkdcraw/src/CMakeLists.txt: + no need to link with lcms. Only dcraw.c require it + +2007-06-06 07:26 mlaurent + + * [r672130] libkdcraw/CMakeLists.txt, + libkdcraw/dcraw/CMakeLists.txt, libkdcraw/src/CMakeLists.txt: + Use variable found by find_package + (search before to go into directory) + +2007-06-05 22:28 cgilles + + * [r671971] libkdcraw/src/CMakeLists.txt: + compile + +2007-06-05 22:19 cgilles + + * [r671968] libkdcraw/CMakeLists.txt, libkipi/src/CMakeLists.txt, + libkipi/src/plugin.cpp, libkipi/src/plugin.h: + compile + +2007-06-05 18:05 cgilles + + * [r671890] libkdcraw/CMakeLists.txt, libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawbinary.h, libkdcraw/dcrawinfocontainer.h, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/kdcraw.h, libkdcraw/libkdcraw_export.h, + libkdcraw/rawdecodingsettings.h, libkdcraw/rawfiles.h, + libkdcraw/src/CMakeLists.txt, libkdcraw/src/dcrawbinary.cpp, + libkdcraw/src/dcrawbinary.h, libkdcraw/src/dcrawinfocontainer.h, + libkdcraw/src/dcrawsettingswidget.cpp, + libkdcraw/src/dcrawsettingswidget.h, libkdcraw/src/kdcraw.cpp, + libkdcraw/src/kdcraw.h, libkdcraw/src/libkdcraw_export.h, + libkdcraw/src/rawdecodingsettings.h, libkdcraw/src/rawfiles.h, + libkdcraw/src/version.h, libkdcraw/version.h: + libkdcraw from trunk : polish sub-folders. Use 'src' to hosts all + source code files + +2007-06-05 17:58 cgilles + + * [r671888] libkdcraw/src: + add + +2007-06-05 17:18 cgilles + + * [r671880] libkdcraw/dcraw/CMakeLists.txt: + polish + +2007-06-05 17:16 cgilles + + * [r671877] libkdcraw/libkdcraw.kdevelop: + rm + +2007-06-05 17:13 cgilles + + * [r671876] libkdcraw/Makefile.am: + rm + +2007-06-05 17:11 cgilles + + * [r671872] libkdcraw/libkdcraw_export.h: + fix export symbol + +2007-06-05 16:48 cgilles + + * [r671862] libkdcraw/configure.in.bot, libkdcraw/configure.in.in: + rm old files + +2007-06-05 16:46 cgilles + + * [r671861] libkdcraw/Messages.sh: + i18n rules + +2007-06-05 14:39 mlaurent + + * [r671798] libkdcraw/cmake/modules/FindLCMS.cmake: + Move into kdelibs (now used by koffice/libdcraw and digikam for + the future) + +2007-06-05 13:30 cgilles + + * [r671739] libkdcraw/CMakeLists.txt, + libkdcraw/dcrawsettingswidget.cpp: + libkdcraw from trunk : port to CMake/Qt4/KDE4 complete ! + + CCMAIL: digikam-devel@kde.org + CCMAIL: kde-imaging@kde.org + CCMAIL: boud@valdyas.org + +2007-06-05 13:13 cgilles + + * [r671731] libkdcraw/dcraw/CMakeLists.txt: + do not use enablefinal mode to compile dcraw.c + +2007-06-05 12:06 cgilles + + * [r671702] libkdcraw/dcrawinfocontainer.h: + port to QT4/KDE4 + +2007-06-05 12:04 cgilles + + * [r671701] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + libkdcraw from trunk : porting to Qt4/KDE4 + +2007-06-05 10:48 cgilles + + * [r671692] libkdcraw/CMakeLists.txt, libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawbinary.h: + libkdcraw from trunk : port to KDE4/QT4 + +2007-06-05 09:43 cgilles + + * [r671676] libkdcraw/dcraw/CMakeLists.txt: + polish + +2007-06-05 09:42 cgilles + + * [r671675] libkdcraw/dcraw/Makefile.am: + this file is obsolete now + +2007-06-05 09:42 cgilles + + * [r671674] libkdcraw/dcraw/CMakeLists.txt: + install kcraw man page + +2007-06-05 09:37 cgilles + + * [r671671] libkdcraw/dcraw/CMakeLists.txt: + dcraw.c now compile with cmake + +2007-06-05 09:20 cgilles + + * [r671666] libkdcraw/dcraw/CMakeLists.txt: + port to cmake. Uncomplete + +2007-06-05 09:11 cgilles + + * [r671663] libkdcraw/dcraw/Makefile.am: + digiKam => libkdcraw + +2007-06-05 09:08 cgilles + + * [r671662] libkdcraw/CMakeLists.txt, + libkdcraw/icons/CMakeLists.txt, libkdcraw/icons/Makefile.am: + include icons sub-dir + +2007-06-05 09:04 cgilles + + * [r671661] libkdcraw/CMakeLists.txt: + include dcraw sub dir + +2007-06-05 09:00 cgilles + + * [r671660] libkdcraw/README: + update + +2007-06-05 08:58 cgilles + + * [r671658] libkdcraw/NEWS: + update + +2007-06-05 08:57 cgilles + + * [r671657] libkdcraw/libkdcraw.pc.cmake: + new line at EOF + +2007-06-05 08:50 cgilles + + * [r671655] libkdcraw/CMakeLists.txt: + cmake port continue + +2007-06-05 08:43 cgilles + + * [r671649] libkdcraw/libkdcraw.pc.cmake: + cmake port continue + +2007-06-05 08:41 cgilles + + * [r671647] libkdcraw/libkdcraw.pc.cmake, + libkdcraw/libkdcraw.pc.in: + port to cmake + +2007-06-05 08:35 cgilles + + * [r671646] libkdcraw/cmake, libkdcraw/cmake/modules, + libkdcraw/cmake/modules/FindLCMS.cmake, + libkdcraw/dcrawbinary.cpp, libkdcraw/libkdcraw.lsm, + libkdcraw/libkdcraw.pc.in, libkdcraw/version.h: + libkdcraw from trunk : start CMake port + +2007-06-05 06:13 cgilles + + * [r671600] libkdcraw: + CMake/QT4/KDE4 port + +2007-06-02 14:14 helio + + * [r670712] branches/extragear/kde3/libs, .: + - First directory to move. No 4.x apps here yet. + +2007-05-16 19:27 mwiesweg + + * [r665389] libkdcraw/kdcraw.cpp: + I think these lines got lost when splitting the methods... + +2007-05-16 08:51 cgilles + + * [r665231] libkdcraw/NEWS, libkdcraw/kdcraw.cpp, + libkdcraw/kdcraw.h: + libkdcraw from trunk : separate methods to extract RAW JPEG + preview and RAW half decoding + +2007-05-16 07:39 cgilles + + * [r665228] libkdcraw/NEWS: + updated + +2007-05-16 07:38 cgilles + + * [r665227] libkdcraw/dcrawinfocontainer.h: + added destructor. Fix API doc + +2007-05-16 07:31 cgilles + + * [r665226] libkdcraw/dcrawsettingswidget.h: + destructor is now virtual + +2007-05-16 07:30 cgilles + + * [r665225] libkdcraw/rawdecodingsettings.h: + destructor is now virtual + +2007-05-16 07:30 cgilles + + * [r665224] libkdcraw/version.h: + update + +2007-05-16 07:29 cgilles + + * [r665222] libkdcraw/libkdcraw.pc.in: + update + +2007-05-16 07:25 cgilles + + * [r665218] libkdcraw/libkdcraw.lsm: + update + +2007-05-16 07:24 cgilles + + * [r665217] libkdcraw/NEWS: + update + +2007-05-16 07:24 cgilles + + * [r665215] libkdcraw/kdcraw.h: + destructor is now virtual + +2007-05-16 07:22 cgilles + + * [r665213] libkdcraw/AUTHORS: + update + +2007-05-16 05:36 cgilles + + * [r665183] libkdcraw/NEWS: + update + +2007-05-16 05:34 cgilles + + * [r665182] libkdcraw/dcrawbinary.cpp: + libkdcraw from trunk : patch to compile under CYGWIN + BUG: 145482 + +2007-05-14 08:10 cgilles + + * [r664527] libkdcraw/README, libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawbinary.h, libkdcraw/dcrawinfocontainer.h, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/kdcraw.h, libkdcraw/libkdcraw_export.h, + libkdcraw/rawdecodingsettings.h, libkdcraw/rawfiles.h, + libkdcraw/version.h: + fix header + +2007-05-05 14:18 gkulzer + + * [r661421] libkdcraw/libkdcraw.pc.in: + 0.1.0 release, coordinated with digiKam 0.9.2-beta1 release + +2007-05-05 14:10 gkulzer + + * [r661419] libkdcraw/libkdcraw.lsm: + 0.1.3 release, coordinated with digiKam 0.9.2-beta1 release + +2007-05-05 14:07 gkulzer + + * [r661418] libkdcraw/version.h: + 0.1.3 release, coordinated with digiKam 0.9.2-beta1 release + +2007-05-05 14:07 gkulzer + + * [r661417] libkdcraw/dcraw/dcraw.c: + 0.1.3 release, coordinated with digiKam 0.9.2-beta1 release + +2007-05-02 07:09 cgilles + + * [r660284] libkdcraw/dcrawbinary.cpp, libkdcraw/dcrawbinary.h, + libkdcraw/dcrawinfocontainer.h, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/kdcraw.h, libkdcraw/libkdcraw_export.h, + libkdcraw/rawdecodingsettings.h, libkdcraw/rawfiles.h, + libkdcraw/version.h: + fix headers + +2007-04-21 20:26 mwiesweg + + * [r656606] libkdcraw/kdcraw.cpp: + Trying to fix crash: Do not wait on process exit here, and leave + setting + d->normalExit to slotProcessExited. + + This fixes the crash I was experiencing here. + + CCMAIL: caulier.gilles@gmail.com + +2007-03-14 12:00 cgilles + + * [r642424] libkdcraw/libkdcraw.lsm: + fix version + +2007-03-14 12:00 cgilles + + * [r642423] libkdcraw/libkdcraw.pc.in: + fix version + +2007-03-14 11:59 cgilles + + * [r642422] libkdcraw/version.h: + fix version + +2007-03-09 06:34 gkulzer + + * [r640778] libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h: + Disabling 'Brightness' slider when in 16bit mode, dcraw does not + support this. + CCMAIL:caulier.gilles@gmail.com + +2007-02-27 04:55 gkulzer + + * [r637623] libkdcraw/dcrawsettingswidget.cpp: + i18n strings polished + +2007-02-23 06:54 cgilles + + * [r636445] libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/libkdcraw.kdevelop, libkdcraw/rawdecodingsettings.h: + API doc + +2007-02-22 19:20 cgilles + + * [r636303] libkdcraw/dcrawsettingswidget.cpp: + fix interval + +2007-02-22 19:14 cgilles + + * [r636301] libkdcraw/dcrawsettingswidget.cpp: + fix + +2007-02-22 14:52 cgilles + + * [r636237] libkdcraw/dcrawsettingswidget.cpp: + added labels + +2007-02-22 12:13 cgilles + + * [r636213] libkdcraw/dcraw/README: + update + +2007-02-22 12:12 cgilles + + * [r636212] libkdcraw/dcraw/README, libkdcraw/dcraw/cameralist: + add camera list supported by current dcraw release. + +2007-02-22 12:01 cgilles + + * [r636211] kipi-plugins/kipiplugins.kdevelop, + kipi-plugins/rawconverter/batchdialog.cpp, + kipi-plugins/rawconverter/singledialog.cpp, + libkdcraw/dcraw/dcraw.c, libkdcraw/dcraw/kdcraw.1, + libkdcraw/dcrawbinary.cpp, libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/libkdcraw.kdevelop, libkdcraw/rawdecodingsettings.h, + libkexiv2/libkexiv2.kdevelop: + libkdcraw from trunk : backport last dcraw implementation "8.60" + : the old noise reduction algorithm used with 8.54 version have + been remplaced by a wavelet algorithm witch is more intuitive, + more easy to use (just one threshold setting) and very powerfull. + + Kipi-plugins RAWConverter from svn trunk is fixed. + The patch to use libkdcraw with current implementation of digiKam + have been updated : + + http://digikam3rdparty.free.fr/misc.tarballs/libkdcrawdigikamport.patch + + CCMAIL: digikam-users@kde.org + CCMAIL: digikam-devel@kde.org + CCMAIL: kde-imaging@kde.org + +2007-02-22 09:19 cgilles + + * [r636182] libkdcraw/libkdcraw.kdevelop: + update project + +2007-02-20 20:25 ach + + * [r635753] libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawsettingswidget.cpp, libkdcraw/kdcraw.cpp, + libkdcraw/kdcraw.h: + EBN: QString::null -> QString() and some spelling fixes + +2007-02-20 19:59 ach + + * [r635744] libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawsettingswidget.cpp: + EBN: isn't -> is not etc + +2007-02-20 19:12 ach + + * [r635732] libkdcraw/README: + polish README + +2007-02-20 19:03 ach + + * [r635729] libkdcraw/libkdcraw.pc.in: + libkdcraw: add homepage URL to pkg-config file + +2007-02-20 19:01 ach + + * [r635727] libkdcraw/libkdcraw.lsm, libkdcraw/libkdcraw.pc.in, + libkdcraw/version.h: + fix version 0.1.0 -> 0.1.0-beta1+svn + +2007-02-20 18:58 ach + + * [r635726] libkdcraw/dcrawbinary.cpp, libkdcraw/dcrawbinary.h, + libkdcraw/dcrawinfocontainer.h, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/kdcraw.h, libkdcraw/libkdcraw_export.h, + libkdcraw/rawdecodingsettings.h, libkdcraw/rawfiles.h, + libkdcraw/version.h: + libkdcraw: + o add email to copyright lines + o remove unnecessary line wrap in license + +2007-02-20 18:53 ach + + * [r635721] libkdcraw/dcraw/kdcraw.1: + libkdcraw: s/dcraw/kdcraw in manpage and add + e-mail to copyright line + +2007-02-20 14:20 cgilles + + * [r635648] kipi-plugins/rawconverter/batchdialog.cpp, + kipi-plugins/rawconverter/singledialog.cpp, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/rawdecodingsettings.h: + libkdcraw from trunk : introduce the color balance multipliers + settings + +2007-02-20 12:28 cgilles + + * [r635609] libkdcraw/dcrawsettingswidget.cpp: + polish + +2007-02-20 10:28 cgilles + + * [r635565] libkdcraw/dcrawsettingswidget.cpp: + fix layout + +2007-02-19 22:30 cgilles + + * [r635409] libkdcraw/dcrawsettingswidget.cpp: + fix layout + +2007-02-19 22:28 cgilles + + * [r635408] libkdcraw/dcrawsettingswidget.cpp: + fix layout + +2007-02-19 22:15 cgilles + + * [r635400] libkdcraw/dcrawsettingswidget.cpp: + fix layout + +2007-02-19 21:52 cgilles + + * [r635352] libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/libkdcraw.kdevelop: + use KtabWidget to separate Standard and Advanced settings + +2007-02-19 15:20 cgilles + + * [r635245] libkdcraw/dcrawsettingswidget.cpp: + fix i18n + +2007-02-19 15:05 cgilles + + * [r635242] kipi-plugins/rawconverter/batchdialog.cpp, + kipi-plugins/rawconverter/singledialog.cpp, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/rawdecodingsettings.h: + libkdcraw from trunk : introduce the blackpoint compensation + value settings + +2007-02-19 11:56 cgilles + + * [r635195] kipi-plugins/rawconverter/batchdialog.cpp, + kipi-plugins/rawconverter/singledialog.cpp, + libkdcraw/dcraw/README, libkdcraw/dcraw/dcraw.c, + libkdcraw/dcrawbinary.cpp, libkdcraw/dcrawbinary.h, + libkdcraw/dcrawinfocontainer.h, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/rawdecodingsettings.h: + After 8 days of intensive work, I'm very proud to announce the + first LibKdcraw shared library 0.1.0 beta release. + + LibKdcraw is a C++ interface around dcraw binary program used to + decode RAW picture files. This library is actually used by + kipi-plugins (trunk), and later by digiKam (with future 0.9.2 + release). + + http://digikam3rdparty.free.fr/Screenshots/newkipirawconverter.png + + The library documentation is available on header files. Check svn + trunk repository for details : + + http://websvn.kde.org/trunk/extragear/libs/libkdcraw + + Libkdcraw include the last dcraw program (version 8.54) from Dave + Coffin. It provide a kdcraw binary witch is used instead dcraw. + This way prevent _all_ compatibility problems with all options + see with dcraw. In fact the dcraw author to not respect a + compatibilty between dcraw release witch break all RAW workflow ! + Also, he won't provide dcraw as a shared library. We have lost a + waste a time with these problems in digiKam project. Using a + specific version of dcraw in the library, we will valid this one + with the library API and preserve the compatibility for the + future. + + The dcraw source code can be updated easily using the + libkdcraw/dcraw/README file where i have written a notice for + that. The library don't touch the content of dcraw source code. + It use it as well... + + With this library, you can extract preview image (used by camera + to display picture on TV screen) as a QImage, and extract all + informations given by dcraw to identify a RAW file. Of course, + you can decode and extract the RAW pictures with a lot of + settings. The image data (8 or 16 bits color depth) is returned + in a QByteArray container. The library include a widget to + control all RAW decoding settings in your application : + + http://digikam3rdparty.free.fr/Screenshots/rawsettings.png + + Using the last dcraw source code, the libary support all last + Camera models, especially all models out at Christmas 2006. The + complete list is given below : + + Adobe Digital Negative (DNG) + AVT F-145C + AVT F-201C + AVT F-510C + AVT F-810C + Canon PowerShot 600 + Canon PowerShot A5 + Canon PowerShot A5 Zoom + Canon PowerShot A50 + Canon PowerShot A610 + Canon PowerShot A620 + Canon PowerShot Pro70 + Canon PowerShot Pro90 IS + Canon PowerShot G1 + Canon PowerShot G2 + Canon PowerShot G3 + Canon PowerShot G5 + Canon PowerShot G6 + Canon PowerShot S2 IS + Canon PowerShot S3 IS + Canon PowerShot S30 + Canon PowerShot S40 + Canon PowerShot S45 + Canon PowerShot S50 + Canon PowerShot S60 + Canon PowerShot S70 + Canon PowerShot Pro1 + Canon EOS D30 + Canon EOS D60 + Canon EOS 5D + Canon EOS 10D + Canon EOS 20D + Canon EOS 30D + Canon EOS 300D / Digital Rebel / Kiss Digital + Canon EOS 350D / Digital Rebel XT / Kiss Digital N + Canon EOS 400D / Digital Rebel XTi / Kiss Digital X + Canon EOS D2000C + Canon EOS-1D + Canon EOS-1DS + Canon EOS-1D Mark II + Canon EOS-1D Mark II N + Canon EOS-1Ds Mark II + Casio QV-2000UX + Casio QV-3000EX + Casio QV-3500EX + Casio QV-4000 + Casio QV-5700 + Casio QV-R51 + Casio QV-R61 + Casio EX-S100 + Casio EX-Z4 + Casio EX-Z50 + Casio EX-Z55 + Casio Exlim Pro 505 + Casio Exlim Pro 600 + Casio Exlim Pro 700 + Contax N Digital + Creative PC-CAM 600 + Epson R-D1 + Foculus 531C + Fuji FinePix E550 + Fuji FinePix E900 + Fuji FinePix F700 + Fuji FinePix F710 + Fuji FinePix F800 + Fuji FinePix F810 + Fuji FinePix S2Pro + Fuji FinePix S3Pro + Fuji FinePix S20Pro + Fuji FinePix S5000 + Fuji FinePix S5100/S5500 + Fuji FinePix S5200/S5600 + Fuji FinePix S6000fd + Fuji FinePix S7000 + Fuji FinePix S9000/S9500 + Imacon Ixpress 16-megapixel + Imacon Ixpress 22-megapixel + Imacon Ixpress 39-megapixel + ISG 2020x1520 + Kodak DC20 (see Oliver Hartman's page) + Kodak DC25 (see Jun-ichiro Itoh's page) + Kodak DC40 + Kodak DC50 + Kodak DC120 (also try kdc2tiff) + Kodak DCS200 + Kodak DCS315C + Kodak DCS330C + Kodak DCS420 + Kodak DCS460 + Kodak DCS460A + Kodak DCS520C + Kodak DCS560C + Kodak DCS620C + Kodak DCS620X + Kodak DCS660C + Kodak DCS660M + Kodak DCS720X + Kodak DCS760C + Kodak DCS760M + Kodak EOSDCS1 + Kodak EOSDCS3B + Kodak NC2000F + Kodak ProBack + Kodak PB645C + Kodak PB645H + Kodak PB645M + Kodak DCS Pro 14n + Kodak DCS Pro 14nx + Kodak DCS Pro SLR/c + Kodak DCS Pro SLR/n + Kodak P850 + Kodak P880 + Kodak KAI-0340 + Konica KD-400Z + Konica KD-510Z + Leaf Aptus 17 + Leaf Aptus 22 + Leaf Aptus 65 + Leaf Aptus 75 + Leaf Cantare + Leaf CatchLight + Leaf CMost + Leaf DCB2 + Leaf Valeo 6 + Leaf Valeo 11 + Leaf Valeo 17 + Leaf Valeo 22 + Leaf Volare + Leica Digilux 2 + Leica Digilux 3 + Leica D-LUX2 + Leica D-LUX3 + Leica V-LUX1 + Logitech Fotoman Pixtura + Micron 2010 + Minolta RD175 + Minolta DiMAGE 5 + Minolta DiMAGE 7 + Minolta DiMAGE 7i + Minolta DiMAGE 7Hi + Minolta DiMAGE A1 + Minolta DiMAGE A2 + Minolta DiMAGE A200 + Minolta DiMAGE G400 + Minolta DiMAGE G500 + Minolta DiMAGE G530 + Minolta DiMAGE G600 + Minolta DiMAGE Z2 + Minolta Alpha/Dynax/Maxxum 5D + Minolta Alpha/Dynax/Maxxum 7D + Nikon D1 + Nikon D1H + Nikon D1X + Nikon D2H + Nikon D2Hs + Nikon D2X + Nikon D40 + Nikon D50 + Nikon D70 + Nikon D70s + Nikon D80 + Nikon D100 + Nikon D200 + Nikon E700 ("DIAG RAW" hack) + Nikon E800 ("DIAG RAW" hack) + Nikon E880 ("DIAG RAW" hack) + Nikon E900 ("DIAG RAW" hack) + Nikon E950 ("DIAG RAW" hack) + Nikon E990 ("DIAG RAW" hack) + Nikon E995 ("DIAG RAW" hack) + Nikon E2100 ("DIAG RAW" hack) + Nikon E2500 ("DIAG RAW" hack) + Nikon E3200 ("DIAG RAW" hack) + Nikon E3700 ("DIAG RAW" hack) + Nikon E4300 ("DIAG RAW" hack) + Nikon E4500 ("DIAG RAW" hack) + Nikon E5000 + Nikon E5400 + Nikon E5700 + Nikon E8400 + Nikon E8700 + Nikon E8800 + Olympus C3030Z + Olympus C5050Z + Olympus C5060WZ + Olympus C7070WZ + Olympus C70Z,C7000Z + Olympus C740UZ + Olympus C770UZ + Olympus C8080WZ + Olympus E-1 + Olympus E-10 + Olympus E-20 + Olympus E-300 + Olympus E-330 + Olympus E-400 + Olympus E-500 + Olympus SP310 + Olympus SP320 + Olympus SP350 + Olympus SP500UZ + Panasonic DMC-FZ30 + Panasonic DMC-FZ50 + Panasonic DMC-L1 + Panasonic DMC-LC1 + Panasonic DMC-LX1 + Panasonic DMC-LX2 + Pentax *ist D + Pentax *ist DL + Pentax *ist DL2 + Pentax *ist DS + Pentax *ist DS2 + Pentax K10D + Pentax K100D + Pentax Optio S + Pentax Optio S4 + Pentax Optio 33WR + Phase One LightPhase + Phase One H 10 + Phase One H 20 + Phase One H 25 + Phase One P 20 + Phase One P 25 + Phase One P 30 + Phase One P 45 + Pixelink A782 + Polaroid x530 + Rollei d530flex + RoverShot 3320af + Samsung GX-1S + Sarnoff 4096x5440 + Sigma SD9 + Sigma SD10 + Sinar 3072x2048 + Sinar 4080x4080 + Sinar 4080x5440 + Sinar STI format + SMaL Ultra-Pocket 3 + SMaL Ultra-Pocket 4 + SMaL Ultra-Pocket 5 + Sony DSC-F828 + Sony DSC-R1 + Sony DSC-V3 + Sony DSLR-A100 + Sony XCD-SX910CR + STV680 VGA + + About digiKam and this library, I have a big patch on my computer + to use this library with all RAW files. I will commit this code + in svn repository later digiKam 0.9.1 release. It will be + available for 0.9.2 release. If you is impatient to test it, the + patch against current svn implementation of digiKam can be + downloaded at this url : + + http://digikam3rdparty.free.fr/misc.tarballs/libkdcrawdigikamport.patch + + Of course, you need to checkout, compile and install LibKdcraw + first. It is stored on extragear/libs folder of svn trunk. + + All feedbacks are welcome, especially all RAW pictures sample + taken with a recent camera to perform advanced test. Thanks in + advance for your help... + + Gilles Caulier + digiKam team + + BUG: 140865 + CCBUG : 138744 + CCMAIL: digikam-users@kde.org, digikam-devel@kde.org, + kde-imaging@kde.org + +2007-02-19 09:05 cgilles + + * [r635146] libkdcraw/dcrawbinary.cpp: + fix test if version is right + +2007-02-19 09:03 cgilles + + * [r635144] libkdcraw/dcrawbinary.cpp: + fix test if version is right + +2007-02-19 08:56 cgilles + + * [r635141] libkdcraw/kdcraw.cpp: + be verboze during RAW decoding + +2007-02-19 08:32 cgilles + + * [r635135] libkdcraw/dcraw/Makefile.am, libkdcraw/dcraw/kdcraw.1: + added official dcraw manual page + +2007-02-19 07:34 cgilles + + * [r635123] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + API doc + polishing + +2007-02-19 06:53 cgilles + + * [r635114] libkdcraw/README: + update depencies + +2007-02-19 06:48 cgilles + + * [r635113] libkdcraw/Makefile.am, libkdcraw/icons, + libkdcraw/icons/Makefile.am, + libkdcraw/icons/hi128-app-kdcraw.png, + libkdcraw/icons/hi32-app-kdcraw.png, + libkdcraw/icons/hi48-app-kdcraw.png, + libkdcraw/icons/hi64-app-kdcraw.png: + kdcraw icons + +2007-02-18 20:05 cgilles + + * [r634923] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + API doc + +2007-02-18 18:16 cgilles + + * [r634885] libkdcraw/kdcraw.cpp: + libkdcraw : loading progress value will be continue now. We will + folowing the last progress value used by pseudo progress during + internal dcraw decoding loop and when you recieve data from + dcraw, we continue progress at this point. + + LibKDcraw shared library is now finalized. digiKam patch to used + it is ready for next 0.9.2 release. + + CCMAIL: marcel.wiesweg@gmx.de + +2007-02-18 16:27 cgilles + + * [r634858] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + give raw decoding settings protected + +2007-02-18 14:55 cgilles + + * [r634842] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + polish implementation + +2007-02-18 12:15 cgilles + + * [r634814] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + add new method to handle progress info in digiKam during RAW file + decoding + +2007-02-18 11:46 cgilles + + * [r634799] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + update to compile with digiKam + +2007-02-18 11:40 cgilles + + * [r634795] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + added new virtual method to cancel RAW decoding with digiKam + +2007-02-17 20:53 cgilles + + * [r634615] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + update to compile with digiKam + +2007-02-17 17:21 cgilles + + * [r634581] libkdcraw/dcrawbinary.cpp, libkdcraw/dcrawbinary.h: + update to compile with digiKam + +2007-02-17 16:40 cgilles + + * [r634572] libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h: + update to compile with digiKam + +2007-02-17 14:53 cgilles + + * [r634545] libkdcraw/Makefile.am: + compile + +2007-02-17 14:47 cgilles + + * [r634544] libkdcraw/dcrawinfocontainer.h: + compile + +2007-02-16 22:01 cgilles + + * [r634334] kipi-plugins/rawconverter/actionthread.cpp, + kipi-plugins/rawconverter/rawdecodingiface.cpp, + libkdcraw/kdcraw.cpp, libkexiv2/kexiv2.cpp: + fix comments + +2007-02-16 19:23 cgilles + + * [r634278] libkdcraw/rawdecodingsettings.h: + API doc + optimized time loading settings backported from digiKam + core + +2007-02-16 15:44 cgilles + + * [r634185] libkdcraw/libkdcraw.lsm: + fix email + +2007-02-16 15:41 cgilles + + * [r634183] libkdcraw/AUTHORS, libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawbinary.h, libkdcraw/dcrawinfocontainer.h, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h, libkdcraw/kdcraw.cpp, + libkdcraw/kdcraw.h, libkdcraw/rawdecodingsettings.h, + libkdcraw/rawfiles.h: + fix email + +2007-02-16 13:38 cgilles + + * [r634150] libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h: + add link to dcraw web page + +2007-02-16 12:54 cgilles + + * [r634137] libkdcraw/Makefile.am: + forget i18n rules + +2007-02-16 12:52 cgilles + + * [r634136] libkdcraw/dcrawinfocontainer.h, + libkdcraw/dcrawsettingswidget.h: + use LIBKDCRAW_EXPORT + +2007-02-16 12:48 cgilles + + * [r634134] libkdcraw/kdcraw.h: + polish + +2007-02-16 10:30 cgilles + + * [r634091] libkdcraw/Makefile.am, + libkdcraw/dcrawsettingswidget.cpp, + libkdcraw/dcrawsettingswidget.h: + libkdcraw from trunk : continue implementation. Still under + developement. Not yet suitable. + +2007-02-16 09:56 cgilles + + * [r634082] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + update API + +2007-02-16 09:39 cgilles + + * [r634076] libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + update API + +2007-02-16 09:07 cgilles + + * [r634066] libkdcraw/Makefile.am, libkdcraw/dcrawiface.cpp, + libkdcraw/dcrawiface.h, libkdcraw/kdcraw.cpp, libkdcraw/kdcraw.h: + polish + +2007-02-16 08:50 cgilles + + * [r634064] libkdcraw/dcrawbinary.cpp, libkdcraw/dcrawbinary.h, + libkdcraw/libkdcraw.kdevelop: + API doc + +2007-02-16 08:37 cgilles + + * [r634063] libkdcraw/dcrawbinary.h: + polish + +2007-02-16 08:05 cgilles + + * [r634059] libkdcraw/dcrawiface.cpp: + polish + +2007-02-16 07:57 cgilles + + * [r634058] libkdcraw/dcrawiface.cpp, + libkdcraw/rawdecodingsettings.h: + fix API + +2007-02-16 07:55 cgilles + + * [r634057] libkdcraw/dcrawiface.cpp, libkdcraw/dcrawiface.h: + fix API + +2007-02-15 17:56 cgilles + + * [r633901] libkdcraw/libkdcraw.kdevelop: + kdevelop project + +2007-02-15 15:14 cgilles + + * [r633865] libkdcraw/dcrawiface.h: + polish + +2007-02-15 15:08 cgilles + + * [r633863] libkdcraw/dcrawiface.cpp, libkdcraw/dcrawiface.h: + libkdcraw from trunk : continue implementation. Still under + developement. Not yet suitable. + +2007-02-15 14:43 cgilles + + * [r633856] libkdcraw/Makefile.am, libkdcraw/dcrawiface.cpp, + libkdcraw/dcrawiface.h, libkdcraw/dcrawinfocontainer.h, + libkdcraw/rawdecodingsettings.h: + libkdcraw from trunk : continue implementation. Still under + developement. Not yet suitable. + +2007-02-15 13:17 cgilles + + * [r633837] libkdcraw/rawfiles.h: + typo + +2007-02-15 13:16 cgilles + + * [r633836] libkdcraw/Makefile.am, libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawbinary.h, libkdcraw/dcrawiface.cpp, + libkdcraw/dcrawiface.h, libkdcraw/rawdecodingsettings.h: + libkdcraw from trunk : continue implementation. Still under + developement. Not yet suitable. + +2007-02-12 15:24 cgilles + + * [r632867] libkdcraw, libkdcraw/AUTHORS, libkdcraw/COPYING, + libkdcraw/ChangeLog, libkdcraw/INSTALL, libkdcraw/Makefile.am, + libkdcraw/NEWS, libkdcraw/README, libkdcraw/configure.in.bot, + libkdcraw/configure.in.in, libkdcraw/dcraw, + libkdcraw/dcraw/Makefile.am, libkdcraw/dcraw/README, + libkdcraw/dcraw/dcraw.c, libkdcraw/dcrawbinary.cpp, + libkdcraw/dcrawbinary.h, libkdcraw/libkdcraw.lsm, + libkdcraw/libkdcraw.pc.in, libkdcraw/libkdcraw_export.h, + libkdcraw/rawfiles.h, libkdcraw/version.h: + kipi-plugins from trunk : starting new shared library "libkdcraw" + based on digiKam core and RAW converter implementations. + + This library will provide a C++ interface to dcraw command line + program to decode RAW pictures. It will be used by digiKam and + kipi-plugins. A common implementation is require to prevent + duplicate source code. + + The library is not yet complete. I'm working on actually. + Compilation is disable by default. Future digiKam 0.9.2 release + will use it. + + CCMAIL: marcel.wiesweg@gmx.de, kde-imaging@kde.org, + digikam-devel@kde.org + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..28fadaa --- /dev/null +++ b/INSTALL @@ -0,0 +1,181 @@ +Basic Installation +================== + + These are generic installation instructions. + + 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, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + 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 at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' 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. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. 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. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +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 must use a version of `make' that +supports the `VPATH' variable, such as 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 `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have 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. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' 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. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +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 host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +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. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/Mainpage.dox b/Mainpage.dox new file mode 100644 index 0000000..d56bdb8 --- /dev/null +++ b/Mainpage.dox @@ -0,0 +1,7 @@ +/** @mainpage KDE Extragear Libraries +* +* The extragear-libs module collects libraries that are shared by +* more than one extragear application, or which are useful in their +* own right. +* +*/ diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..eea8893 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,7 @@ +AUTOMAKE_OPTIONS = foreign 1.6.1 + +include admin/deps.am +include admin/Doxyfile.am + +COMPILE_FIRST = libkexiv2 libkipi libkdcraw +SUBDIRS=$(TOPSUBDIRS) diff --git a/Makefile.am.in b/Makefile.am.in new file mode 100644 index 0000000..9f349d7 --- /dev/null +++ b/Makefile.am.in @@ -0,0 +1,6 @@ +AUTOMAKE_OPTIONS = foreign 1.6.1 + +include admin/deps.am +include admin/Doxyfile.am + +COMPILE_FIRST = libkexiv2 libkipi libkdcraw diff --git a/Makefile.cvs b/Makefile.cvs new file mode 100644 index 0000000..be59a86 --- /dev/null +++ b/Makefile.cvs @@ -0,0 +1,14 @@ +all: + @echo "This Makefile is only for the CVS repository" + @echo "This will be deleted before making the distribution" + @echo "" + @if test ! -d admin; then \ + echo "Please recheckout this module!" ;\ + echo "for cvs: use checkout once and after that update again" ;\ + echo "for cvsup: checkout kde-common from cvsup and" ;\ + echo " link kde-common/admin to ./admin" ;\ + exit 1 ;\ + fi + $(MAKE) -f admin/Makefile.common cvs + +.SILENT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..433d7b1 --- /dev/null +++ b/NEWS @@ -0,0 +1,53 @@ +0.1.4 +------------------------------------------------------------------------ +- updated dcraw to 8.83 + new cameras: Apple QuickTake 200, Fuji IS-1, Sony DSLR-A350, Pentax K20D, + Nokia N95, Canon PowerShots A460, Canon PowerShots A530, + Canon PowerShots A650. + no new options introduced. +- updated dcraw to 8.82 + new cameras: Sony DSLR-A200, Sony DSLR-A700, Sony XCD-SX910CR, STV680 VGA + no new options introduced. + +Bugs fixed from B.K.O (http://bugs.kde.org): +001 ==> 142055 : Which whitebalance is used. + +0.1.3 +------------------------------------------------------------------------ +- updated dcraw to 8.81 + new cameras: Canon G7, Fuji FinePix S9100/S9600, Olympus SP560UZ, Panasonic DMC-L10 + +- updated dcraw to 8.80 + new cameras: Hasselblad H3D, Olympus E-3, Canon EOS 40D, Canon PowerShot G9, + Canon EOS-1Ds Mark III, AVT F-080C, Nikon D3, Nikon D300, + Nikon Coolpix S6, Panasonic DMC-FZ18, Sony DSLR-A700 + + -m number_of_passes + After interpolation, clean up color artifacts by repeatedly applying a 3x3 + median filter to the R-G and B-G channels. + - Licence : is GPL compatible again == less wories) + +0.1.2 +------------------------------------------------------------------------ + +New features +- updated internal dcraw from 8.60 to 8.77. API changed. +- add new chromatic aberration reduction options (patch from Guillaume Castagnino). + +0.1.1 +------------------------------------------------------------------------ + +New features +- API changed: * KDcraw destructor is now virtual. + * Added DcrawSettingsContainer destructor. + * Separate embedded JPEG preview extraction and half decoding methods + to get a preview of RAW pictures. + +Bugs fixed from B.K.O (http://bugs.kde.org): +001 ==> 145482 : libkdraw compile fails on Cygwin. + +0.1.0 +------------------------------------------------------------------------ +First implementation + +For details and info about previous versions, see ChangeLog. diff --git a/PACKAGING b/PACKAGING new file mode 100644 index 0000000..6a66f27 --- /dev/null +++ b/PACKAGING @@ -0,0 +1,205 @@ +How to release kipi & co. +---------------------------------------- + +1. Before the final release +2. Release libkipi +3. Release libkexiv2 +4. Release kipi-plugins +5. Notes on svn2cl + + +---------------------------------------- +1. Before the final release +---------------------------------------- + +Some days before releasing the final, remember to announce +the translations commit deadline to kde-i18-doc@kde.org. + +---------------------------------------- +2. Release libkipi +---------------------------------------- + + a) Update release info + libkipi/libkipi.lsm + libkipi/libkipi/version.h + libkipi/libkipi.pc.in + + To do that you can use the "prepare_libkipi.rb" script, change the + release version ("version" and "version_n" fields) and run it. + Don't forget to commit your changes :) + + b) Update Changelog + - to do that use the "release_kipi_changelog.sh" script + release_kipi_changelog.sh libkipi oldest-revision-or-date new-release-version + - edit Changelog and modify the wrong lines (if any) + - Commit your changes + + c) Build the source tarball + - use the "release_libkipi.rb" + edit the script and change the "version" field + if you're releasing an svn snapshot set "usesvnver" to "yes" + run it and get libkipiXXX.tar.bz2 + + d) Uncompress and test the tarball + - check if all the files are right in + - check if the file RELEASE.rev is in and with the right revision number + - check if it builds correctly. + - diff headerfiles installed in /kde/libkipi/ with last release + and check for binary compatibility (see e.g., + http://developer.kde.org/documentation/other/binarycompatibility.html) + Every API change should be refleced in a changed version-info in + libkipi/libkipi/Makefile.am (see e.g., + http://www.gnu.org/software/libtool/manual.html#Versioning) + + e) Upload tarball for testing + Before an official release upload the tarball for testing used sites are + digikam3rdparty.free.fr or www.linux.it/~anaselli/kipi-plugins - depends + on who is releasing :) + Send a mail to kde-imaging@kde.org and digikam-devel@kde.org to have a + feedback from pakagers before posting an offical release annoucement. + + f) Upload tarbal on SF and update kipi site + official site for uploading the release is http://sourceforge.net/projects/kipi + web page to be update is http://extragear.kde.org/apps/kipi/ + to update this last you have to get, change and commit it from + XXX@svn.kde.org/home/kde/trunk/www/areas/extragear/apps/kipi + Send a mail to announce the official release. + +---------------------------------------- +3. Release libkexiv2 +---------------------------------------- + + a) Update release info + libkexiv2/libkexiv2.lsm + libkexiv2/version.h + libkexiv2/libkexiv2.pc.in + libkexiv2/Makefile.am + libkexiv2/ChangeLog + + To do that you can use the "prepare_libkexiv2.rb" script, change the + release version ("version", "version_n", "version_info" and "chlog_rev" fields) + and run it. + Don't forget to fix Changelog and commit your changes :) + + c) Build the source tarball + - use the "release_libkexiv2.rb" + edit the script and change the "version" field + if you're releasing an svn snapshot set "usesvnver" to "yes" + run it and get libkexiv2XXX.tar.bz2 + + d) Uncompress and test the tarball + - check if all the files are right in + - check if the file RELEASE.rev is in and with the right revision number + - check if it builds correctly. + - diff headerfiles installed in /kde/libkexiv2/ with last release + and check for binary compatibility (see e.g., + http://developer.kde.org/documentation/other/binarycompatibility.html) + Every API change should be refleced in a changed version-info in + libkexiv2/Makefile.am (see e.g., + http://www.gnu.org/software/libtool/manual.html#Versioning) + + e) Upload tarball for testing + Before an official release upload the tarball for testing used sites are + digikam3rdparty.free.fr or www.linux.it/~anaselli/kipi-plugins - depends + on who is releasing :) + Send a mail to kde-imaging@kde.org and digikam-devel@kde.org to have a + feedback from pakagers before posting an offical release annoucement. + + f) Upload tarbal on SF and update kipi site + official site for uploading the release is http://sourceforge.net/projects/kipi + web page to be update is http://extragear.kde.org/apps/kipi/ + to update this last you have to get, change and commit it from + XXX@svn.kde.org/home/kde/trunk/www/areas/extragear/apps/kipi + Send a mail to announce the official release. + +---------------------------------------- +4. Release kipi-plugins +---------------------------------------- + + a) Update release info + kipi-plugins/kipi-plugins.lsm + kipi-plugins/common/include/pluginsversion.h + (kipi-plugins/ChangeLog) + + To do that you can use the "prepare_kipiplugins.rb" script, change the + release version ("version" field) and run it. + + Using svn2cl (http://ch.tudelft.nl/~arthur/svn2cl/) you can + add ChangeLog info with this script as well, to do that + follow the instructions: + - set usesv2cl to "yes" + - set svn2cl, svnbase, svnroot according to your account + - set chlog_rev to the last revision (+1) of the last release + (look at ChangeLog file, last commit) + - use the script as usual and skip step b) + - edit ChangeLog and modify the wrong lines (if any) + + + Don't forget to commit your changes. + + b) Update ChangeLog + - if you're using svn2cl you can do that at step a) + - to do that use the "release_kipi_changelog.sh" script + release_kipi_changelog.sh kipi-plugins oldest-revision-or-date new-release-version + - edit Changelog and modify the wrong lines (if any) + - Commit your changes + + c) Build the source tarball + - use the "release_kipi-plugins.rb" + edit the script and change the "version" field and check the "addPo" one for po files + if you're releasing an svn snapshot set "usesvnver" to "yes" + run it and get kipi-pluginsXXX.tar.bz2 + + d) Uncompress and test the tarball + - check if all the files are right in + - check if the file RELEASE.rev is in and with the right revision number + - check if it builds correctly. + + e) Upload tarball for testing + Before an official release upload the tarball for testing used sites are + digikam3rdparty.free.fr or www.linux.it/~anaselli/kipi-plugins - depends + on who is releasing :) + Send a mail to kde-imaging@kde.org and digikam-devel@kde.org to have a + feedback from pakagers before posting an offical release annoucement. + + f) Upload tarbal on SF and update kipi site + official site for uploading the release is http://sourceforge.net/projects/kipi + web page to be update is http://extragear.kde.org/apps/kipi/ + to update this last you have to get, change and commit it from + XXX@svn.kde.org/home/kde/trunk/www/areas/extragear/apps/kipi + Send a mail to announce the official release at least to: + - kde-extra-gear@kde.org + - kde-announce@kde.org + - kde-imaging@kde.org + - digikam-devel@kde.org + - gwenview-general@lists.sourceforge.net + + +---------------------------------------- +5. Notes on svn2cl +---------------------------------------- + +Latest versions (>= 0.9) of svn2cl offer the --ignore-message-starting option +and --ignore-message-starting=SVN_SILENT should work. +Programmers often write SVN_SILENT or CVS_SILENT (obsolete) everywhere +in the commit comment, that means such an option could not work. +Moreover it can be used only once, so just to skip SVN_SILENT or CVS_SILENT +not both. + +The easiest way was to to hack into svn2cl.xsl (mine is /usr/share/svn2cl/svn2cl.xsl). +Add the following lines: + + + + + + + + +just before the template: + + + + ... + + diff --git a/README b/README new file mode 100644 index 0000000..9110a54 --- /dev/null +++ b/README @@ -0,0 +1,27 @@ +DCRAW program interface for KDE + +This library is a part of Kipi-Plugins project (http://www.kipi-plugins.org) + + +-- AUTHORS ----------------------------------------------------------- + +See AUTHORS file for details. + + +-- ABOUT ------------------------------------------------------------- + +Libkdcraw is a C++ interface around dcraw binary program used to decode RAW +picture files. The library documentation is available on header files. + +This library is used by kipi-plugins, digiKam and others kipi host programs. + + + +-- DEPENDENCIES ------------------------------------------------------- + +AutoConf >= 2.5.x http://www.gnu.org/software/autoconf +AutoMake >= 1.7.x http://www.gnu.org/software/automake +libqt >= 3.3.x http://www.trolltech.com +libkde >= 3.4.x (>=3.5.x recommended) http://www.kde.org +liblcms >= 1.14.x (used by dcraw.c) http://www.littlecms.com +libjpeg >= 6b (used by dcraw.c) http://www.ijg.org diff --git a/RELEASE.rev b/RELEASE.rev new file mode 100644 index 0000000..a3e58a3 --- /dev/null +++ b/RELEASE.rev @@ -0,0 +1,2 @@ +Last Changed Rev: 783789 +Last Changed Date: 2008-03-09 16:29:11 +0100 (Sun, 09 Mar 2008) diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..6b26319 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,11945 @@ +## -*- autoconf -*- + +dnl This file is part of the KDE libraries/packages +dnl Copyright (C) 1997 Janos Farkas (chexum@shadow.banki.hu) +dnl (C) 1997,98,99 Stephan Kulow (coolo@kde.org) + +dnl This file is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Library General Public +dnl License as published by the Free Software Foundation; either +dnl version 2 of the License, or (at your option) any later version. + +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Library General Public License for more details. + +dnl You should have received a copy of the GNU Library General Public License +dnl along with this library; see the file COPYING.LIB. If not, write to +dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +dnl Boston, MA 02110-1301, USA. + +dnl IMPORTANT NOTE: +dnl Please do not modify this file unless you expect your modifications to be +dnl carried into every other module in the repository. +dnl +dnl Single-module modifications are best placed in configure.in for kdelibs +dnl and kdebase or configure.in.in if present. + +# KDE_PATH_X_DIRECT +dnl Internal subroutine of AC_PATH_X. +dnl Set ac_x_includes and/or ac_x_libraries. +AC_DEFUN([KDE_PATH_X_DIRECT], +[ +AC_REQUIRE([KDE_CHECK_LIB64]) + +if test "$ac_x_includes" = NO; then + # Guess where to find include files, by looking for this one X11 .h file. + test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h + + # First, try using that file with no special directory specified. +AC_TRY_CPP([#include <$x_direct_test_include>], +[# We can compile using X headers with no special include directory. +ac_x_includes=], +[# Look for the header file in a standard set of common directories. +# Check X11 before X11Rn because it is often a symlink to the current release. + for ac_dir in \ + /usr/X11/include \ + /usr/X11R6/include \ + /usr/X11R5/include \ + /usr/X11R4/include \ + \ + /usr/include/X11 \ + /usr/include/X11R6 \ + /usr/include/X11R5 \ + /usr/include/X11R4 \ + \ + /usr/local/X11/include \ + /usr/local/X11R6/include \ + /usr/local/X11R5/include \ + /usr/local/X11R4/include \ + \ + /usr/local/include/X11 \ + /usr/local/include/X11R6 \ + /usr/local/include/X11R5 \ + /usr/local/include/X11R4 \ + \ + /usr/X386/include \ + /usr/x386/include \ + /usr/XFree86/include/X11 \ + \ + /usr/include \ + /usr/local/include \ + /usr/unsupported/include \ + /usr/athena/include \ + /usr/local/x11r5/include \ + /usr/lpp/Xamples/include \ + \ + /usr/openwin/include \ + /usr/openwin/share/include \ + ; \ + do + if test -r "$ac_dir/$x_direct_test_include"; then + ac_x_includes=$ac_dir + break + fi + done]) +fi # $ac_x_includes = NO + +if test "$ac_x_libraries" = NO; then + # Check for the libraries. + + test -z "$x_direct_test_library" && x_direct_test_library=Xt + test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc + + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS="$LIBS" + LIBS="-l$x_direct_test_library $LIBS" +AC_TRY_LINK([#include ], [${x_direct_test_function}(1)], +[LIBS="$ac_save_LIBS" +# We can link X programs with no special library path. +ac_x_libraries=], +[LIBS="$ac_save_LIBS" +# First see if replacing the include by lib works. +# Check X11 before X11Rn because it is often a symlink to the current release. +for ac_dir in `echo "$ac_x_includes" | sed s/include/lib${kdelibsuff}/` \ + /usr/X11/lib${kdelibsuff} \ + /usr/X11R6/lib${kdelibsuff} \ + /usr/X11R5/lib${kdelibsuff} \ + /usr/X11R4/lib${kdelibsuff} \ + \ + /usr/lib${kdelibsuff}/X11 \ + /usr/lib${kdelibsuff}/X11R6 \ + /usr/lib${kdelibsuff}/X11R5 \ + /usr/lib${kdelibsuff}/X11R4 \ + \ + /usr/local/X11/lib${kdelibsuff} \ + /usr/local/X11R6/lib${kdelibsuff} \ + /usr/local/X11R5/lib${kdelibsuff} \ + /usr/local/X11R4/lib${kdelibsuff} \ + \ + /usr/local/lib${kdelibsuff}/X11 \ + /usr/local/lib${kdelibsuff}/X11R6 \ + /usr/local/lib${kdelibsuff}/X11R5 \ + /usr/local/lib${kdelibsuff}/X11R4 \ + \ + /usr/X386/lib${kdelibsuff} \ + /usr/x386/lib${kdelibsuff} \ + /usr/XFree86/lib${kdelibsuff}/X11 \ + \ + /usr/lib${kdelibsuff} \ + /usr/local/lib${kdelibsuff} \ + /usr/unsupported/lib${kdelibsuff} \ + /usr/athena/lib${kdelibsuff} \ + /usr/local/x11r5/lib${kdelibsuff} \ + /usr/lpp/Xamples/lib${kdelibsuff} \ + /lib/usr/lib${kdelibsuff}/X11 \ + \ + /usr/openwin/lib${kdelibsuff} \ + /usr/openwin/share/lib${kdelibsuff} \ + ; \ +do +dnl Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl; do + if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done]) +fi # $ac_x_libraries = NO +]) + + +dnl ------------------------------------------------------------------------ +dnl Find a file (or one of more files in a list of dirs) +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_FIND_FILE], +[ +$3=NO +for i in $2; +do + for j in $1; + do + echo "configure: __oline__: $i/$j" >&AC_FD_CC + if test -r "$i/$j"; then + echo "taking that" >&AC_FD_CC + $3=$i + break 2 + fi + done +done +]) + +dnl KDE_FIND_PATH(program-name, variable-name, list-of-dirs, +dnl if-not-found, test-parameter, prepend-path) +dnl +dnl Look for program-name in list-of-dirs+$PATH. +dnl If prepend-path is set, look in $PATH+list-of-dirs instead. +dnl If found, $variable-name is set. If not, if-not-found is evaluated. +dnl test-parameter: if set, the program is executed with this arg, +dnl and only a successful exit code is required. +AC_DEFUN([KDE_FIND_PATH], +[ + AC_MSG_CHECKING([for $1]) + if test -n "$$2"; then + kde_cv_path="$$2"; + else + kde_cache=`echo $1 | sed 'y%./+-%__p_%'` + + AC_CACHE_VAL(kde_cv_path_$kde_cache, + [ + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + dirs="" + for dir in $PATH; do + dirs="$dirs $dir" + done + if test -z "$6"; then dnl Append dirs in PATH (default) + dirs="$3 $dirs" + else dnl Prepend dirs in PATH (if 6th arg is set) + dirs="$dirs $3" + fi + IFS=$kde_save_IFS + + for dir in $dirs; do + if test -x "$dir/$1"; then + if test -n "$5" + then + evalstr="$dir/$1 $5 2>&1 " + if eval $evalstr; then + kde_cv_path="$dir/$1" + break + fi + else + kde_cv_path="$dir/$1" + break + fi + fi + done + + eval "kde_cv_path_$kde_cache=$kde_cv_path" + + ]) + + eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\"" + + fi + + if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then + AC_MSG_RESULT(not found) + $4 + else + AC_MSG_RESULT($kde_cv_path) + $2=$kde_cv_path + + fi +]) + +AC_DEFUN([KDE_MOC_ERROR_MESSAGE], +[ + AC_MSG_ERROR([No Qt meta object compiler (moc) found! +Please check whether you installed Qt correctly. +You need to have a running moc binary. +configure tried to run $ac_cv_path_moc and the test didn't +succeed. If configure shouldn't have tried this one, set +the environment variable MOC to the right one before running +configure. +]) +]) + +AC_DEFUN([KDE_UIC_ERROR_MESSAGE], +[ + AC_MSG_WARN([No Qt ui compiler (uic) found! +Please check whether you installed Qt correctly. +You need to have a running uic binary. +configure tried to run $ac_cv_path_uic and the test didn't +succeed. If configure shouldn't have tried this one, set +the environment variable UIC to the right one before running +configure. +]) +]) + + +AC_DEFUN([KDE_CHECK_UIC_FLAG], +[ + AC_MSG_CHECKING([whether uic supports -$1 ]) + kde_cache=`echo $1 | sed 'y% .=/+-%____p_%'` + AC_CACHE_VAL(kde_cv_prog_uic_$kde_cache, + [ + cat >conftest.ui < +EOT + ac_uic_testrun="$UIC_PATH -$1 $2 conftest.ui >/dev/null" + if AC_TRY_EVAL(ac_uic_testrun); then + eval "kde_cv_prog_uic_$kde_cache=yes" + else + eval "kde_cv_prog_uic_$kde_cache=no" + fi + rm -f conftest* + ]) + + if eval "test \"`echo '$kde_cv_prog_uic_'$kde_cache`\" = yes"; then + AC_MSG_RESULT([yes]) + : + $3 + else + AC_MSG_RESULT([no]) + : + $4 + fi +]) + + +dnl ------------------------------------------------------------------------ +dnl Find the meta object compiler and the ui compiler in the PATH, +dnl in $QTDIR/bin, and some more usual places +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_PATH_QT_MOC_UIC], +[ + AC_REQUIRE([KDE_CHECK_PERL]) + qt_bindirs="" + for dir in $kde_qt_dirs; do + qt_bindirs="$qt_bindirs $dir/bin $dir/src/moc" + done + qt_bindirs="$qt_bindirs /usr/bin /usr/X11R6/bin /usr/local/qt/bin" + if test ! "$ac_qt_bindir" = "NO"; then + qt_bindirs="$ac_qt_bindir $qt_bindirs" + fi + + KDE_FIND_PATH(moc, MOC, [$qt_bindirs], [KDE_MOC_ERROR_MESSAGE]) + if test -z "$UIC_NOT_NEEDED"; then + KDE_FIND_PATH(uic, UIC_PATH, [$qt_bindirs], [UIC_PATH=""]) + if test -z "$UIC_PATH" ; then + KDE_UIC_ERROR_MESSAGE + exit 1 + else + UIC=$UIC_PATH + + if test $kde_qtver = 3; then + KDE_CHECK_UIC_FLAG(L,[/nonexistent],ac_uic_supports_libpath=yes,ac_uic_supports_libpath=no) + KDE_CHECK_UIC_FLAG(nounload,,ac_uic_supports_nounload=yes,ac_uic_supports_nounload=no) + + if test x$ac_uic_supports_libpath = xyes; then + UIC="$UIC -L \$(kde_widgetdir)" + fi + if test x$ac_uic_supports_nounload = xyes; then + UIC="$UIC -nounload" + fi + fi + fi + else + UIC="echo uic not available: " + fi + + AC_SUBST(MOC) + AC_SUBST(UIC) + + UIC_TR="i18n" + if test $kde_qtver = 3; then + UIC_TR="tr2i18n" + fi + + AC_SUBST(UIC_TR) +]) + +AC_DEFUN([KDE_1_CHECK_PATHS], +[ + KDE_1_CHECK_PATH_HEADERS + + KDE_TEST_RPATH= + + if test -n "$USE_RPATH"; then + + if test -n "$kde_libraries"; then + KDE_TEST_RPATH="-R $kde_libraries" + fi + + if test -n "$qt_libraries"; then + KDE_TEST_RPATH="$KDE_TEST_RPATH -R $qt_libraries" + fi + + if test -n "$x_libraries"; then + KDE_TEST_RPATH="$KDE_TEST_RPATH -R $x_libraries" + fi + + KDE_TEST_RPATH="$KDE_TEST_RPATH $KDE_EXTRA_RPATH" + fi + +AC_MSG_CHECKING([for KDE libraries installed]) +ac_link='$LIBTOOL_SHELL --silent --mode=link ${CXX-g++} -o conftest $CXXFLAGS $all_includes $CPPFLAGS $LDFLAGS $all_libraries conftest.$ac_ext $LIBS -lkdecore $LIBQT $KDE_TEST_RPATH 1>&5' + +if AC_TRY_EVAL(ac_link) && test -s conftest; then + AC_MSG_RESULT(yes) +else + AC_MSG_ERROR([your system fails at linking a small KDE application! +Check, if your compiler is installed correctly and if you have used the +same compiler to compile Qt and kdelibs as you did use now. +For more details about this problem, look at the end of config.log.]) +fi + +if eval `KDEDIR= ./conftest 2>&5`; then + kde_result=done +else + kde_result=problems +fi + +KDEDIR= ./conftest 2> /dev/null >&5 # make an echo for config.log +kde_have_all_paths=yes + +KDE_SET_PATHS($kde_result) + +]) + +AC_DEFUN([KDE_SET_PATHS], +[ + kde_cv_all_paths="kde_have_all_paths=\"yes\" \ + kde_htmldir=\"$kde_htmldir\" \ + kde_appsdir=\"$kde_appsdir\" \ + kde_icondir=\"$kde_icondir\" \ + kde_sounddir=\"$kde_sounddir\" \ + kde_datadir=\"$kde_datadir\" \ + kde_locale=\"$kde_locale\" \ + kde_cgidir=\"$kde_cgidir\" \ + kde_confdir=\"$kde_confdir\" \ + kde_kcfgdir=\"$kde_kcfgdir\" \ + kde_mimedir=\"$kde_mimedir\" \ + kde_toolbardir=\"$kde_toolbardir\" \ + kde_wallpaperdir=\"$kde_wallpaperdir\" \ + kde_templatesdir=\"$kde_templatesdir\" \ + kde_bindir=\"$kde_bindir\" \ + kde_servicesdir=\"$kde_servicesdir\" \ + kde_servicetypesdir=\"$kde_servicetypesdir\" \ + kde_moduledir=\"$kde_moduledir\" \ + kde_styledir=\"$kde_styledir\" \ + kde_widgetdir=\"$kde_widgetdir\" \ + xdg_appsdir=\"$xdg_appsdir\" \ + xdg_menudir=\"$xdg_menudir\" \ + xdg_directorydir=\"$xdg_directorydir\" \ + kde_result=$1" +]) + +AC_DEFUN([KDE_SET_DEFAULT_PATHS], +[ +if test "$1" = "default"; then + + if test -z "$kde_htmldir"; then + kde_htmldir='\${datadir}/doc/HTML' + fi + if test -z "$kde_appsdir"; then + kde_appsdir='\${datadir}/applnk' + fi + if test -z "$kde_icondir"; then + kde_icondir='\${datadir}/icons' + fi + if test -z "$kde_sounddir"; then + kde_sounddir='\${datadir}/sounds' + fi + if test -z "$kde_datadir"; then + kde_datadir='\${datadir}/apps' + fi + if test -z "$kde_locale"; then + kde_locale='\${datadir}/locale' + fi + if test -z "$kde_cgidir"; then + kde_cgidir='\${exec_prefix}/cgi-bin' + fi + if test -z "$kde_confdir"; then + kde_confdir='\${datadir}/config' + fi + if test -z "$kde_kcfgdir"; then + kde_kcfgdir='\${datadir}/config.kcfg' + fi + if test -z "$kde_mimedir"; then + kde_mimedir='\${datadir}/mimelnk' + fi + if test -z "$kde_toolbardir"; then + kde_toolbardir='\${datadir}/toolbar' + fi + if test -z "$kde_wallpaperdir"; then + kde_wallpaperdir='\${datadir}/wallpapers' + fi + if test -z "$kde_templatesdir"; then + kde_templatesdir='\${datadir}/templates' + fi + if test -z "$kde_bindir"; then + kde_bindir='\${exec_prefix}/bin' + fi + if test -z "$kde_servicesdir"; then + kde_servicesdir='\${datadir}/services' + fi + if test -z "$kde_servicetypesdir"; then + kde_servicetypesdir='\${datadir}/servicetypes' + fi + if test -z "$kde_moduledir"; then + if test "$kde_qtver" = "2"; then + kde_moduledir='\${libdir}/kde2' + else + kde_moduledir='\${libdir}/kde3' + fi + fi + if test -z "$kde_styledir"; then + kde_styledir='\${libdir}/kde3/plugins/styles' + fi + if test -z "$kde_widgetdir"; then + kde_widgetdir='\${libdir}/kde3/plugins/designer' + fi + if test -z "$xdg_appsdir"; then + xdg_appsdir='\${datadir}/applications/kde' + fi + if test -z "$xdg_menudir"; then + xdg_menudir='\${sysconfdir}/xdg/menus' + fi + if test -z "$xdg_directorydir"; then + xdg_directorydir='\${datadir}/desktop-directories' + fi + + KDE_SET_PATHS(defaults) + +else + + if test $kde_qtver = 1; then + AC_MSG_RESULT([compiling]) + KDE_1_CHECK_PATHS + else + AC_MSG_ERROR([path checking not yet supported for KDE 2]) + fi + +fi +]) + +AC_DEFUN([KDE_CHECK_PATHS_FOR_COMPLETENESS], +[ if test -z "$kde_htmldir" || test -z "$kde_appsdir" || + test -z "$kde_icondir" || test -z "$kde_sounddir" || + test -z "$kde_datadir" || test -z "$kde_locale" || + test -z "$kde_cgidir" || test -z "$kde_confdir" || + test -z "$kde_kcfgdir" || + test -z "$kde_mimedir" || test -z "$kde_toolbardir" || + test -z "$kde_wallpaperdir" || test -z "$kde_templatesdir" || + test -z "$kde_bindir" || test -z "$kde_servicesdir" || + test -z "$kde_servicetypesdir" || test -z "$kde_moduledir" || + test -z "$kde_styledir" || test -z "kde_widgetdir" || + test -z "$xdg_appsdir" || test -z "$xdg_menudir" || test -z "$xdg_directorydir" || + test "x$kde_have_all_paths" != "xyes"; then + kde_have_all_paths=no + fi +]) + +AC_DEFUN([KDE_MISSING_PROG_ERROR], +[ + AC_MSG_ERROR([The important program $1 was not found! +Please check whether you installed KDE correctly. +]) +]) + +AC_DEFUN([KDE_MISSING_ARTS_ERROR], +[ + AC_MSG_ERROR([The important program $1 was not found! +Please check whether you installed aRts correctly or use +--without-arts to compile without aRts support (this will remove functionality). +]) +]) + +AC_DEFUN([KDE_SET_DEFAULT_BINDIRS], +[ + kde_default_bindirs="/usr/bin /usr/local/bin /opt/local/bin /usr/X11R6/bin /opt/kde/bin /opt/kde3/bin /usr/kde/bin /usr/local/kde/bin" + test -n "$KDEDIR" && kde_default_bindirs="$KDEDIR/bin $kde_default_bindirs" + if test -n "$KDEDIRS"; then + kde_save_IFS=$IFS + IFS=: + for dir in $KDEDIRS; do + kde_default_bindirs="$dir/bin $kde_default_bindirs " + done + IFS=$kde_save_IFS + fi +]) + +AC_DEFUN([KDE_SUBST_PROGRAMS], +[ + AC_ARG_WITH(arts, + AC_HELP_STRING([--without-arts],[build without aRts [default=no]]), + [build_arts=$withval], + [build_arts=yes] + ) + AM_CONDITIONAL(include_ARTS, test "$build_arts" '!=' "no") + if test "$build_arts" = "no"; then + AC_DEFINE(WITHOUT_ARTS, 1, [Defined if compiling without arts]) + fi + + KDE_SET_DEFAULT_BINDIRS + kde_default_bindirs="$exec_prefix/bin $prefix/bin $kde_libs_prefix/bin $kde_default_bindirs" + KDE_FIND_PATH(dcopidl, DCOPIDL, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl)]) + KDE_FIND_PATH(dcopidl2cpp, DCOPIDL2CPP, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl2cpp)]) + if test "$build_arts" '!=' "no"; then + KDE_FIND_PATH(mcopidl, MCOPIDL, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(mcopidl)]) + KDE_FIND_PATH(artsc-config, ARTSCCONFIG, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(artsc-config)]) + fi + KDE_FIND_PATH(meinproc, MEINPROC, [$kde_default_bindirs]) + + kde32ornewer=1 + kde33ornewer=1 + if test -n "$kde_qtver" && test "$kde_qtver" -lt 3; then + kde32ornewer= + kde33ornewer= + else + if test "$kde_qtver" = "3"; then + if test "$kde_qtsubver" -le 1; then + kde32ornewer= + fi + if test "$kde_qtsubver" -le 2; then + kde33ornewer= + fi + if test "$KDECONFIG" != "compiled"; then + if test `$KDECONFIG --version | grep KDE | sed 's/KDE: \(...\).*/\1/'` = 3.2; then + kde33ornewer= + fi + fi + fi + fi + + if test -n "$kde32ornewer"; then + KDE_FIND_PATH(kconfig_compiler, KCONFIG_COMPILER, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kconfig_compiler)]) + KDE_FIND_PATH(dcopidlng, DCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)]) + fi + if test -n "$kde33ornewer"; then + KDE_FIND_PATH(makekdewidgets, MAKEKDEWIDGETS, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(makekdewidgets)]) + AC_SUBST(MAKEKDEWIDGETS) + fi + KDE_FIND_PATH(xmllint, XMLLINT, [${prefix}/bin ${exec_prefix}/bin], [XMLLINT=""]) + + if test -n "$MEINPROC" -a "$MEINPROC" != "compiled"; then + kde_sharedirs="/usr/share/kde /usr/local/share /usr/share /opt/kde3/share /opt/kde/share $prefix/share" + test -n "$KDEDIR" && kde_sharedirs="$KDEDIR/share $kde_sharedirs" + AC_FIND_FILE(apps/ksgmltools2/customization/kde-chunk.xsl, $kde_sharedirs, KDE_XSL_STYLESHEET) + if test "$KDE_XSL_STYLESHEET" = "NO"; then + KDE_XSL_STYLESHEET="" + else + KDE_XSL_STYLESHEET="$KDE_XSL_STYLESHEET/apps/ksgmltools2/customization/kde-chunk.xsl" + fi + fi + + DCOP_DEPENDENCIES='$(DCOPIDL)' + if test -n "$kde32ornewer"; then + KCFG_DEPENDENCIES='$(KCONFIG_COMPILER)' + DCOP_DEPENDENCIES='$(DCOPIDL) $(DCOPIDLNG)' + AC_SUBST(KCONFIG_COMPILER) + AC_SUBST(KCFG_DEPENDENCIES) + AC_SUBST(DCOPIDLNG) + fi + AC_SUBST(DCOPIDL) + AC_SUBST(DCOPIDL2CPP) + AC_SUBST(DCOP_DEPENDENCIES) + AC_SUBST(MCOPIDL) + AC_SUBST(ARTSCCONFIG) + AC_SUBST(MEINPROC) + AC_SUBST(KDE_XSL_STYLESHEET) + AC_SUBST(XMLLINT) +])dnl + +AC_DEFUN([AC_CREATE_KFSSTND], +[ +AC_REQUIRE([AC_CHECK_RPATH]) + +AC_MSG_CHECKING([for KDE paths]) +kde_result="" +kde_cached_paths=yes +AC_CACHE_VAL(kde_cv_all_paths, +[ + KDE_SET_DEFAULT_PATHS($1) + kde_cached_paths=no +]) +eval "$kde_cv_all_paths" +KDE_CHECK_PATHS_FOR_COMPLETENESS +if test "$kde_have_all_paths" = "no" && test "$kde_cached_paths" = "yes"; then + # wrong values were cached, may be, we can set better ones + kde_result= + kde_htmldir= kde_appsdir= kde_icondir= kde_sounddir= + kde_datadir= kde_locale= kde_cgidir= kde_confdir= kde_kcfgdir= + kde_mimedir= kde_toolbardir= kde_wallpaperdir= kde_templatesdir= + kde_bindir= kde_servicesdir= kde_servicetypesdir= kde_moduledir= + kde_have_all_paths= + kde_styledir= + kde_widgetdir= + xdg_appsdir = xdg_menudir= xdg_directorydir= + KDE_SET_DEFAULT_PATHS($1) + eval "$kde_cv_all_paths" + KDE_CHECK_PATHS_FOR_COMPLETENESS + kde_result="$kde_result (cache overridden)" +fi +if test "$kde_have_all_paths" = "no"; then + AC_MSG_ERROR([configure could not run a little KDE program to test the environment. +Since it had compiled and linked before, it must be a strange problem on your system. +Look at config.log for details. If you are not able to fix this, look at +http://www.kde.org/faq/installation.html or any www.kde.org mirror. +(If you're using an egcs version on Linux, you may update binutils!) +]) +else + rm -f conftest* + AC_MSG_RESULT($kde_result) +fi + +bindir=$kde_bindir + +KDE_SUBST_PROGRAMS + +]) + +AC_DEFUN([AC_SUBST_KFSSTND], +[ +AC_SUBST(kde_htmldir) +AC_SUBST(kde_appsdir) +AC_SUBST(kde_icondir) +AC_SUBST(kde_sounddir) +AC_SUBST(kde_datadir) +AC_SUBST(kde_locale) +AC_SUBST(kde_confdir) +AC_SUBST(kde_kcfgdir) +AC_SUBST(kde_mimedir) +AC_SUBST(kde_wallpaperdir) +AC_SUBST(kde_bindir) +dnl X Desktop Group standards +AC_SUBST(xdg_appsdir) +AC_SUBST(xdg_menudir) +AC_SUBST(xdg_directorydir) +dnl for KDE 2 +AC_SUBST(kde_templatesdir) +AC_SUBST(kde_servicesdir) +AC_SUBST(kde_servicetypesdir) +AC_SUBST(kde_moduledir) +AC_SUBST(kdeinitdir, '$(kde_moduledir)') +AC_SUBST(kde_styledir) +AC_SUBST(kde_widgetdir) +if test "$kde_qtver" = 1; then + kde_minidir="$kde_icondir/mini" +else +# for KDE 1 - this breaks KDE2 apps using minidir, but +# that's the plan ;-/ + kde_minidir="/dev/null" +fi +dnl AC_SUBST(kde_minidir) +dnl AC_SUBST(kde_cgidir) +dnl AC_SUBST(kde_toolbardir) +]) + +AC_DEFUN([KDE_MISC_TESTS], +[ + dnl Checks for libraries. + AC_CHECK_LIB(util, main, [LIBUTIL="-lutil"]) dnl for *BSD + AC_SUBST(LIBUTIL) + AC_CHECK_LIB(compat, main, [LIBCOMPAT="-lcompat"]) dnl for *BSD + AC_SUBST(LIBCOMPAT) + kde_have_crypt= + AC_CHECK_LIB(crypt, crypt, [LIBCRYPT="-lcrypt"; kde_have_crypt=yes], + AC_CHECK_LIB(c, crypt, [kde_have_crypt=yes], [ + AC_MSG_WARN([you have no crypt in either libcrypt or libc. +You should install libcrypt from another source or configure with PAM +support]) + kde_have_crypt=no + ])) + AC_SUBST(LIBCRYPT) + if test $kde_have_crypt = yes; then + AC_DEFINE_UNQUOTED(HAVE_CRYPT, 1, [Defines if your system has the crypt function]) + fi + AC_CHECK_SOCKLEN_T + AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"]) + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + AC_CHECK_LIB(dnet_stub, dnet_ntoa, + [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"]) + fi + AC_CHECK_FUNC(inet_ntoa) + if test $ac_cv_func_inet_ntoa = no; then + AC_CHECK_LIB(nsl, inet_ntoa, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl") + fi + AC_CHECK_FUNC(connect) + if test $ac_cv_func_connect = no; then + AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", , + $X_EXTRA_LIBS) + fi + + AC_CHECK_FUNC(remove) + if test $ac_cv_func_remove = no; then + AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix") + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + AC_CHECK_FUNC(shmat, , + AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc")) + + # more headers that need to be explicitly included on darwin + AC_CHECK_HEADERS(sys/types.h stdint.h) + + # sys/bitypes.h is needed for uint32_t and friends on Tru64 + AC_CHECK_HEADERS(sys/bitypes.h) + + # darwin requires a poll emulation library + AC_CHECK_LIB(poll, poll, LIB_POLL="-lpoll") + + # for some image handling on Mac OS X + AC_CHECK_HEADERS(Carbon/Carbon.h) + + # CoreAudio framework + AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [ + AC_DEFINE(HAVE_COREAUDIO, 1, [Define if you have the CoreAudio API]) + FRAMEWORK_COREAUDIO="-Wl,-framework,CoreAudio" + ]) + + AC_CHECK_RES_INIT + AC_SUBST(LIB_POLL) + AC_SUBST(FRAMEWORK_COREAUDIO) + LIBSOCKET="$X_EXTRA_LIBS" + AC_SUBST(LIBSOCKET) + AC_SUBST(X_EXTRA_LIBS) + AC_CHECK_LIB(ucb, killpg, [LIBUCB="-lucb"]) dnl for Solaris2.4 + AC_SUBST(LIBUCB) + + case $host in dnl this *is* LynxOS specific + *-*-lynxos* ) + AC_MSG_CHECKING([LynxOS header file wrappers]) + [CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"] + AC_MSG_RESULT(disabled) + AC_CHECK_LIB(bsd, gethostbyname, [LIBSOCKET="-lbsd"]) dnl for LynxOS + ;; + esac + + KDE_CHECK_TYPES + KDE_CHECK_LIBDL + KDE_CHECK_STRLCPY + KDE_CHECK_PIE_SUPPORT + +# darwin needs this to initialize the environment +AC_CHECK_HEADERS(crt_externs.h) +AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])]) + +AH_VERBATIM(_DARWIN_ENVIRON, +[ +#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H) +# include +# include +# define environ (*_NSGetEnviron()) +#endif +]) + +AH_VERBATIM(_AIX_STRINGS_H_BZERO, +[ +/* + * AIX defines FD_SET in terms of bzero, but fails to include + * that defines bzero. + */ + +#if defined(_AIX) +#include +#endif +]) + +AC_CHECK_FUNCS([vsnprintf snprintf]) + +AH_VERBATIM(_TRU64,[ +/* + * On HP-UX, the declaration of vsnprintf() is needed every time ! + */ + +#if !defined(HAVE_VSNPRINTF) || defined(hpux) +#if __STDC__ +#include +#include +#else +#include +#endif +#ifdef __cplusplus +extern "C" +#endif +int vsnprintf(char *str, size_t n, char const *fmt, va_list ap); +#ifdef __cplusplus +extern "C" +#endif +int snprintf(char *str, size_t n, char const *fmt, ...); +#endif +]) + +]) + +dnl ------------------------------------------------------------------------ +dnl Find the header files and libraries for X-Windows. Extended the +dnl macro AC_PATH_X +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([K_PATH_X], +[ +AC_REQUIRE([KDE_MISC_TESTS])dnl +AC_REQUIRE([KDE_CHECK_LIB64]) + +AC_ARG_ENABLE( + embedded, + AC_HELP_STRING([--enable-embedded],[link to Qt-embedded, don't use X]), + kde_use_qt_emb=$enableval, + kde_use_qt_emb=no +) + +AC_ARG_ENABLE( + qtopia, + AC_HELP_STRING([--enable-qtopia],[link to Qt-embedded, link to the Qtopia Environment]), + kde_use_qt_emb_palm=$enableval, + kde_use_qt_emb_palm=no +) + +AC_ARG_ENABLE( + mac, + AC_HELP_STRING([--enable-mac],[link to Qt/Mac (don't use X)]), + kde_use_qt_mac=$enableval, + kde_use_qt_mac=no +) + +# used to disable x11-specific stuff on special platforms +AM_CONDITIONAL(include_x11, test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no") + +if test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no"; then + +AC_MSG_CHECKING(for X) + +AC_CACHE_VAL(kde_cv_have_x, +[# One or both of the vars are not set, and there is no cached value. +if test "{$x_includes+set}" = set || test "$x_includes" = NONE; then + kde_x_includes=NO +else + kde_x_includes=$x_includes +fi +if test "{$x_libraries+set}" = set || test "$x_libraries" = NONE; then + kde_x_libraries=NO +else + kde_x_libraries=$x_libraries +fi + +# below we use the standard autoconf calls +ac_x_libraries=$kde_x_libraries +ac_x_includes=$kde_x_includes + +KDE_PATH_X_DIRECT +dnl AC_PATH_X_XMKMF picks /usr/lib as the path for the X libraries. +dnl Unfortunately, if compiling with the N32 ABI, this is not the correct +dnl location. The correct location is /usr/lib32 or an undefined value +dnl (the linker is smart enough to pick the correct default library). +dnl Things work just fine if you use just AC_PATH_X_DIRECT. +dnl Solaris has a similar problem. AC_PATH_X_XMKMF forces x_includes to +dnl /usr/openwin/include, which doesn't work. /usr/include does work, so +dnl x_includes should be left alone. +case "$host" in +mips-sgi-irix6*) + ;; +*-*-solaris*) + ;; +*) + _AC_PATH_X_XMKMF + if test -z "$ac_x_includes"; then + ac_x_includes="." + fi + if test -z "$ac_x_libraries"; then + ac_x_libraries="/usr/lib${kdelibsuff}" + fi +esac +#from now on we use our own again + +# when the user already gave --x-includes, we ignore +# what the standard autoconf macros told us. +if test "$kde_x_includes" = NO; then + kde_x_includes=$ac_x_includes +fi + +# for --x-libraries too +if test "$kde_x_libraries" = NO; then + kde_x_libraries=$ac_x_libraries +fi + +if test "$kde_x_includes" = NO; then + AC_MSG_ERROR([Can't find X includes. Please check your installation and add the correct paths!]) +fi + +if test "$kde_x_libraries" = NO; then + AC_MSG_ERROR([Can't find X libraries. Please check your installation and add the correct paths!]) +fi + +# Record where we found X for the cache. +kde_cv_have_x="have_x=yes \ + kde_x_includes=$kde_x_includes kde_x_libraries=$kde_x_libraries" +])dnl + +eval "$kde_cv_have_x" + +if test "$have_x" != yes; then + AC_MSG_RESULT($have_x) + no_x=yes +else + AC_MSG_RESULT([libraries $kde_x_libraries, headers $kde_x_includes]) +fi + +if test -z "$kde_x_includes" || test "x$kde_x_includes" = xNONE; then + X_INCLUDES="" + x_includes="."; dnl better than nothing :- + else + x_includes=$kde_x_includes + X_INCLUDES="-I$x_includes" +fi + +if test -z "$kde_x_libraries" || test "x$kde_x_libraries" = xNONE || test "$kde_x_libraries" = "/usr/lib"; then + X_LDFLAGS="" + x_libraries="/usr/lib"; dnl better than nothing :- + else + x_libraries=$kde_x_libraries + X_LDFLAGS="-L$x_libraries" +fi +all_includes="$X_INCLUDES" +all_libraries="$X_LDFLAGS $LDFLAGS_AS_NEEDED $LDFLAGS_NEW_DTAGS" + +# Check for libraries that X11R6 Xt/Xaw programs need. +ac_save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $X_LDFLAGS" +# SM needs ICE to (dynamically) link under SunOS 4.x (so we have to +# check for ICE first), but we must link in the order -lSM -lICE or +# we get undefined symbols. So assume we have SM if we have ICE. +# These have to be linked with before -lX11, unlike the other +# libraries we check for below, so use a different variable. +# --interran@uluru.Stanford.EDU, kb@cs.umb.edu. +AC_CHECK_LIB(ICE, IceConnectionNumber, + [LIBSM="-lSM -lICE"], , $X_EXTRA_LIBS) +LDFLAGS="$ac_save_LDFLAGS" + +LIB_X11='-lX11 $(LIBSOCKET)' + +AC_MSG_CHECKING(for libXext) +AC_CACHE_VAL(kde_cv_have_libXext, +[ +kde_ldflags_safe="$LDFLAGS" +kde_libs_safe="$LIBS" + +LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS" +LIBS="-lXext -lX11 $LIBSOCKET" + +AC_TRY_LINK([ +#include +#ifdef STDC_HEADERS +# include +#endif +], +[ +printf("hello Xext\n"); +], +kde_cv_have_libXext=yes, +kde_cv_have_libXext=no +) + +LDFLAGS=$kde_ldflags_safe +LIBS=$kde_libs_safe +]) + +AC_MSG_RESULT($kde_cv_have_libXext) + +if test "$kde_cv_have_libXext" = "no"; then + AC_MSG_ERROR([We need a working libXext to proceed. Since configure +can't find it itself, we stop here assuming that make wouldn't find +them either.]) +fi + +LIB_XEXT="-lXext" +QTE_NORTTI="" + +elif test "$kde_use_qt_emb" = "yes"; then + dnl We're using QT Embedded + CPPFLAGS=-DQWS + CXXFLAGS="$CXXFLAGS -fno-rtti" + QTE_NORTTI="-fno-rtti -DQWS" + X_PRE_LIBS="" + LIB_X11="" + LIB_XEXT="" + LIB_XRENDER="" + LIBSM="" + X_INCLUDES="" + X_LDFLAGS="" + x_includes="" + x_libraries="" +elif test "$kde_use_qt_mac" = "yes"; then + dnl We're using QT/Mac (I use QT_MAC so that qglobal.h doesn't *have* to + dnl be included to get the information) --Sam + CXXFLAGS="$CXXFLAGS -DQT_MAC -no-cpp-precomp" + CFLAGS="$CFLAGS -DQT_MAC -no-cpp-precomp" + X_PRE_LIBS="" + LIB_X11="" + LIB_XEXT="" + LIB_XRENDER="" + LIBSM="" + X_INCLUDES="" + X_LDFLAGS="" + x_includes="" + x_libraries="" +fi +AC_SUBST(X_PRE_LIBS) +AC_SUBST(LIB_X11) +AC_SUBST(LIB_XRENDER) +AC_SUBST(LIBSM) +AC_SUBST(X_INCLUDES) +AC_SUBST(X_LDFLAGS) +AC_SUBST(x_includes) +AC_SUBST(x_libraries) +AC_SUBST(QTE_NORTTI) +AC_SUBST(LIB_XEXT) + +]) + +AC_DEFUN([KDE_PRINT_QT_PROGRAM], +[ +AC_REQUIRE([KDE_USE_QT]) +cat > conftest.$ac_ext < +#include +EOF +if test "$kde_qtver" = "2"; then +cat >> conftest.$ac_ext < +#include +#include +EOF + +if test $kde_qtsubver -gt 0; then +cat >> conftest.$ac_ext <> conftest.$ac_ext < +#include +#include +EOF +fi + +echo "#if ! ($kde_qt_verstring)" >> conftest.$ac_ext +cat >> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <> conftest.$ac_ext <&AC_FD_CC + cat conftest.$ac_ext >&AC_FD_CC +fi + +rm -f conftest* +CXXFLAGS="$ac_cxxflags_safe" +LDFLAGS="$ac_ldflags_safe" +LIBS="$ac_libs_safe" + +LD_LIBRARY_PATH="$ac_LD_LIBRARY_PATH_safe" +export LD_LIBRARY_PATH +LIBRARY_PATH="$ac_LIBRARY_PATH" +export LIBRARY_PATH +AC_LANG_RESTORE +]) + +if test "$kde_cv_qt_direct" = "yes"; then + AC_MSG_RESULT(yes) + $1 +else + AC_MSG_RESULT(no) + $2 +fi +]) + +dnl ------------------------------------------------------------------------ +dnl Try to find the Qt headers and libraries. +dnl $(QT_LDFLAGS) will be -Lqtliblocation (if needed) +dnl and $(QT_INCLUDES) will be -Iqthdrlocation (if needed) +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_PATH_QT_1_3], +[ +AC_REQUIRE([K_PATH_X]) +AC_REQUIRE([KDE_USE_QT]) +AC_REQUIRE([KDE_CHECK_LIB64]) + +dnl ------------------------------------------------------------------------ +dnl Add configure flag to enable linking to MT version of Qt library. +dnl ------------------------------------------------------------------------ + +AC_ARG_ENABLE( + mt, + AC_HELP_STRING([--disable-mt],[link to non-threaded Qt (deprecated)]), + kde_use_qt_mt=$enableval, + [ + if test $kde_qtver = 3; then + kde_use_qt_mt=yes + else + kde_use_qt_mt=no + fi + ] +) + +USING_QT_MT="" + +dnl ------------------------------------------------------------------------ +dnl If we not get --disable-qt-mt then adjust some vars for the host. +dnl ------------------------------------------------------------------------ + +KDE_MT_LDFLAGS= +KDE_MT_LIBS= +if test "x$kde_use_qt_mt" = "xyes"; then + KDE_CHECK_THREADING + if test "x$kde_use_threading" = "xyes"; then + CPPFLAGS="$USE_THREADS -DQT_THREAD_SUPPORT $CPPFLAGS" + KDE_MT_LDFLAGS="$USE_THREADS" + KDE_MT_LIBS="$LIBPTHREAD" + else + kde_use_qt_mt=no + fi +fi +AC_SUBST(KDE_MT_LDFLAGS) +AC_SUBST(KDE_MT_LIBS) + +kde_qt_was_given=yes + +dnl ------------------------------------------------------------------------ +dnl If we haven't been told how to link to Qt, we work it out for ourselves. +dnl ------------------------------------------------------------------------ +if test -z "$LIBQT_GLOB"; then + if test "x$kde_use_qt_emb" = "xyes"; then + LIBQT_GLOB="libqte.*" + else + LIBQT_GLOB="libqt.*" + fi +fi + +dnl ------------------------------------------------------------ +dnl If we got --enable-embedded then adjust the Qt library name. +dnl ------------------------------------------------------------ +if test "x$kde_use_qt_emb" = "xyes"; then + qtlib="qte" +else + qtlib="qt" +fi + +kde_int_qt="-l$qtlib" + +if test -z "$LIBQPE"; then +dnl ------------------------------------------------------------ +dnl If we got --enable-palmtop then add -lqpe to the link line +dnl ------------------------------------------------------------ + if test "x$kde_use_qt_emb" = "xyes"; then + if test "x$kde_use_qt_emb_palm" = "xyes"; then + LIB_QPE="-lqpe" + else + LIB_QPE="" + fi + else + LIB_QPE="" + fi +fi + +dnl ------------------------------------------------------------------------ +dnl If we got --enable-qt-mt then adjust the Qt library name for the host. +dnl ------------------------------------------------------------------------ + +if test "x$kde_use_qt_mt" = "xyes"; then + LIBQT="-l$qtlib-mt" + kde_int_qt="-l$qtlib-mt" + LIBQT_GLOB="lib$qtlib-mt.*" + USING_QT_MT="using -mt" +else + LIBQT="-l$qtlib" +fi + +if test $kde_qtver != 1; then + + AC_REQUIRE([AC_FIND_PNG]) + AC_REQUIRE([AC_FIND_JPEG]) + LIBQT="$LIBQT $LIBPNG $LIBJPEG" +fi + +if test $kde_qtver = 3; then + AC_REQUIRE([KDE_CHECK_LIBDL]) + LIBQT="$LIBQT $LIBDL" +fi + +AC_MSG_CHECKING([for Qt]) + +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBQT="$LIBQT $X_PRE_LIBS -lXext -lX11 $LIBSM $LIBSOCKET" +fi +ac_qt_includes=NO ac_qt_libraries=NO ac_qt_bindir=NO +qt_libraries="" +qt_includes="" +AC_ARG_WITH(qt-dir, + AC_HELP_STRING([--with-qt-dir=DIR],[where the root of Qt is installed ]), + [ ac_qt_includes="$withval"/include + ac_qt_libraries="$withval"/lib${kdelibsuff} + ac_qt_bindir="$withval"/bin + ]) + +AC_ARG_WITH(qt-includes, + AC_HELP_STRING([--with-qt-includes=DIR],[where the Qt includes are. ]), + [ + ac_qt_includes="$withval" + ]) + +kde_qt_libs_given=no + +AC_ARG_WITH(qt-libraries, + AC_HELP_STRING([--with-qt-libraries=DIR],[where the Qt library is installed.]), + [ ac_qt_libraries="$withval" + kde_qt_libs_given=yes + ]) + +AC_CACHE_VAL(ac_cv_have_qt, +[#try to guess Qt locations + +qt_incdirs="" +for dir in $kde_qt_dirs; do + qt_incdirs="$qt_incdirs $dir/include $dir" +done +if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) +fi +if test "$PKG_CONFIG" != "no" ; then + if $PKG_CONFIG --exists qt-mt ; then + qt_incdirs="$qt_incdirs `$PKG_CONFIG --variable=includedir qt-mt`" + fi +fi +qt_incdirs="$QTINC $qt_incdirs /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/X11R6/include/qt2 /usr/include/qt3 $x_includes" +if test ! "$ac_qt_includes" = "NO"; then + qt_incdirs="$ac_qt_includes $qt_incdirs" +fi + +if test "$kde_qtver" != "1"; then + kde_qt_header=qstyle.h +else + kde_qt_header=qglobal.h +fi + +AC_FIND_FILE($kde_qt_header, $qt_incdirs, qt_incdir) +ac_qt_includes="$qt_incdir" + +qt_libdirs="" +for dir in $kde_qt_dirs; do + qt_libdirs="$qt_libdirs $dir/lib${kdelibsuff} $dir/lib $dir" +done +if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) +fi +if test "$PKG_CONFIG" != "no" ; then + if $PKG_CONFIG --exists qt-mt ; then + qt_libdirs="$qt_incdirs `$PKG_CONFIG --variable=libdir qt-mt`" + fi +fi +qt_libdirs="$QTLIB $qt_libdirs /usr/X11R6/lib /usr/lib /usr/local/qt/lib $x_libraries" +if test ! "$ac_qt_libraries" = "NO"; then + qt_libdir=$ac_qt_libraries +else + qt_libdirs="$ac_qt_libraries $qt_libdirs" + # if the Qt was given, the chance is too big that libqt.* doesn't exist + qt_libdir=NONE + for dir in $qt_libdirs; do + try="ls -1 $dir/${LIBQT_GLOB}" + if test -n "`$try 2> /dev/null`"; then qt_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi + done +fi +for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do + if test -e "$a"; then + LIBQT="$LIBQT ${kde_int_qt}_incremental" + break + fi +done + +ac_qt_libraries="$qt_libdir" + +AC_LANG_SAVE +AC_LANG_CPLUSPLUS + +ac_cxxflags_safe="$CXXFLAGS" +ac_ldflags_safe="$LDFLAGS" +ac_libs_safe="$LIBS" + +CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes" +LDFLAGS="$LDFLAGS -L$qt_libdir $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS" +LIBS="$LIBS $LIBQT $KDE_MT_LIBS" + +KDE_PRINT_QT_PROGRAM + +if AC_TRY_EVAL(ac_link) && test -s conftest; then + rm -f conftest* +else + echo "configure: failed program was:" >&AC_FD_CC + cat conftest.$ac_ext >&AC_FD_CC + ac_qt_libraries="NO" +fi +rm -f conftest* +CXXFLAGS="$ac_cxxflags_safe" +LDFLAGS="$ac_ldflags_safe" +LIBS="$ac_libs_safe" + +AC_LANG_RESTORE +if test "$ac_qt_includes" = NO || test "$ac_qt_libraries" = NO; then + ac_cv_have_qt="have_qt=no" + ac_qt_notfound="" + missing_qt_mt="" + if test "$ac_qt_includes" = NO; then + if test "$ac_qt_libraries" = NO; then + ac_qt_notfound="(headers and libraries)"; + else + ac_qt_notfound="(headers)"; + fi + else + if test "x$kde_use_qt_mt" = "xyes"; then + missing_qt_mt=" +Make sure that you have compiled Qt with thread support!" + ac_qt_notfound="(library $qtlib-mt)"; + else + ac_qt_notfound="(library $qtlib)"; + fi + fi + + AC_MSG_ERROR([Qt ($kde_qt_minversion) $ac_qt_notfound not found. Please check your installation! +For more details about this problem, look at the end of config.log.$missing_qt_mt]) +else + have_qt="yes" +fi +]) + +eval "$ac_cv_have_qt" + +if test "$have_qt" != yes; then + AC_MSG_RESULT([$have_qt]); +else + ac_cv_have_qt="have_qt=yes \ + ac_qt_includes=$ac_qt_includes ac_qt_libraries=$ac_qt_libraries" + AC_MSG_RESULT([libraries $ac_qt_libraries, headers $ac_qt_includes $USING_QT_MT]) + + qt_libraries="$ac_qt_libraries" + qt_includes="$ac_qt_includes" +fi + +if test ! "$kde_qt_libs_given" = "yes" && test ! "$kde_qtver" = 3; then + KDE_CHECK_QT_DIRECT(qt_libraries= ,[]) +fi + +AC_SUBST(qt_libraries) +AC_SUBST(qt_includes) + +if test "$qt_includes" = "$x_includes" || test -z "$qt_includes"; then + QT_INCLUDES="" +else + QT_INCLUDES="-I$qt_includes" + all_includes="$QT_INCLUDES $all_includes" +fi + +if test "$qt_libraries" = "$x_libraries" || test -z "$qt_libraries"; then + QT_LDFLAGS="" +else + QT_LDFLAGS="-L$qt_libraries" + all_libraries="$QT_LDFLAGS $all_libraries" +fi +test -z "$KDE_MT_LDFLAGS" || all_libraries="$all_libraries $KDE_MT_LDFLAGS" + +AC_SUBST(QT_INCLUDES) +AC_SUBST(QT_LDFLAGS) +AC_PATH_QT_MOC_UIC + +KDE_CHECK_QT_JPEG + +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG) -lXext $(LIB_X11) $(LIBSM)' +else +LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG)' +fi +test -z "$KDE_MT_LIBS" || LIB_QT="$LIB_QT $KDE_MT_LIBS" +for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do + if test -e "$a"; then + LIB_QT="$LIB_QT ${kde_int_qt}_incremental" + break + fi +done + +AC_SUBST(LIB_QT) +AC_SUBST(LIB_QPE) + +AC_SUBST(kde_qtver) +]) + +AC_DEFUN([AC_PATH_QT], +[ +AC_PATH_QT_1_3 +]) + +AC_DEFUN([KDE_CHECK_UIC_PLUGINS], +[ +AC_REQUIRE([AC_PATH_QT_MOC_UIC]) + +if test x$ac_uic_supports_libpath = xyes; then + +AC_MSG_CHECKING([if UIC has KDE plugins available]) +AC_CACHE_VAL(kde_cv_uic_plugins, +[ +cat > actest.ui << EOF + +NewConnectionDialog + + + + testInput + + + + +EOF + + + +kde_cv_uic_plugins=no +kde_line="$UIC_PATH -L $kde_widgetdir" +if test x$ac_uic_supports_nounload = xyes; then + kde_line="$kde_line -nounload" +fi +kde_line="$kde_line -impl actest.h actest.ui > actest.cpp" +if AC_TRY_EVAL(kde_line); then + # if you're trying to debug this check and think it's incorrect, + # better check your installation. The check _is_ correct - your + # installation is not. + if test -f actest.cpp && grep klineedit actest.cpp > /dev/null; then + kde_cv_uic_plugins=yes + fi +fi +rm -f actest.ui actest.cpp +]) + +AC_MSG_RESULT([$kde_cv_uic_plugins]) +if test "$kde_cv_uic_plugins" != yes; then + AC_MSG_ERROR([ +you need to install kdelibs first. + +If you did install kdelibs, then the Qt version that is picked up by +this configure is not the same version you used to compile kdelibs. +The Qt Plugin installed by kdelibs is *ONLY* loadable if it is the +_same Qt version_, compiled with the _same compiler_ and the same Qt +configuration settings. +]) +fi +fi +]) + +AC_DEFUN([KDE_CHECK_FINAL], +[ + AC_ARG_ENABLE(final, + AC_HELP_STRING([--enable-final], + [build size optimized apps (experimental - needs lots of memory)]), + kde_use_final=$enableval, kde_use_final=no) + + if test "x$kde_use_final" = "xyes"; then + KDE_USE_FINAL_TRUE="" + KDE_USE_FINAL_FALSE="#" + else + KDE_USE_FINAL_TRUE="#" + KDE_USE_FINAL_FALSE="" + fi + AC_SUBST(KDE_USE_FINAL_TRUE) + AC_SUBST(KDE_USE_FINAL_FALSE) +]) + +AC_DEFUN([KDE_CHECK_CLOSURE], +[ + AC_ARG_ENABLE(closure, + AC_HELP_STRING([--enable-closure],[delay template instantiation]), + kde_use_closure=$enableval, kde_use_closure=no) + + KDE_NO_UNDEFINED="" + if test "x$kde_use_closure" = "xyes"; then + KDE_USE_CLOSURE_TRUE="" + KDE_USE_CLOSURE_FALSE="#" +# CXXFLAGS="$CXXFLAGS $REPO" + else + KDE_USE_CLOSURE_TRUE="#" + KDE_USE_CLOSURE_FALSE="" + KDE_NO_UNDEFINED="" + case $host in + *-*-linux-gnu) + KDE_CHECK_COMPILER_FLAG([Wl,--no-undefined], + [KDE_CHECK_COMPILER_FLAG([Wl,--allow-shlib-undefined], + [KDE_NO_UNDEFINED="-Wl,--no-undefined -Wl,--allow-shlib-undefined"], + [KDE_NO_UNDEFINED=""])], + [KDE_NO_UNDEFINED=""]) + ;; + esac + fi + AC_SUBST(KDE_USE_CLOSURE_TRUE) + AC_SUBST(KDE_USE_CLOSURE_FALSE) + AC_SUBST(KDE_NO_UNDEFINED) +]) + +dnl Check if the linker supports --enable-new-dtags and --as-needed +AC_DEFUN([KDE_CHECK_NEW_LDFLAGS], +[ + AC_ARG_ENABLE(new_ldflags, + AC_HELP_STRING([--enable-new-ldflags], + [enable the new linker flags]), + kde_use_new_ldflags=$enableval, + kde_use_new_ldflags=no) + + LDFLAGS_AS_NEEDED="" + LDFLAGS_NEW_DTAGS="" + if test "x$kde_use_new_ldflags" = "xyes"; then + LDFLAGS_NEW_DTAGS="" + KDE_CHECK_COMPILER_FLAG([Wl,--enable-new-dtags], + [LDFLAGS_NEW_DTAGS="-Wl,--enable-new-dtags"],) + + KDE_CHECK_COMPILER_FLAG([Wl,--as-needed], + [LDFLAGS_AS_NEEDED="-Wl,--as-needed"],) + fi + AC_SUBST(LDFLAGS_AS_NEEDED) + AC_SUBST(LDFLAGS_NEW_DTAGS) +]) + +AC_DEFUN([KDE_CHECK_NMCHECK], +[ + AC_ARG_ENABLE(nmcheck,AC_HELP_STRING([--enable-nmcheck],[enable automatic namespace cleanness check]), + kde_use_nmcheck=$enableval, kde_use_nmcheck=no) + + if test "$kde_use_nmcheck" = "yes"; then + KDE_USE_NMCHECK_TRUE="" + KDE_USE_NMCHECK_FALSE="#" + else + KDE_USE_NMCHECK_TRUE="#" + KDE_USE_NMCHECK_FALSE="" + fi + AC_SUBST(KDE_USE_NMCHECK_TRUE) + AC_SUBST(KDE_USE_NMCHECK_FALSE) +]) + +AC_DEFUN([KDE_EXPAND_MAKEVAR], [ +savex=$exec_prefix +test "x$exec_prefix" = xNONE && exec_prefix=$prefix +tmp=$$2 +while $1=`eval echo "$tmp"`; test "x$$1" != "x$tmp"; do tmp=$$1; done +exec_prefix=$savex +]) + +dnl ------------------------------------------------------------------------ +dnl Now, the same with KDE +dnl $(KDE_LDFLAGS) will be the kdeliblocation (if needed) +dnl and $(kde_includes) will be the kdehdrlocation (if needed) +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_BASE_PATH_KDE], +[ +AC_REQUIRE([KDE_CHECK_STL]) +AC_REQUIRE([AC_PATH_QT])dnl +AC_REQUIRE([KDE_CHECK_LIB64]) + +AC_CHECK_RPATH +AC_MSG_CHECKING([for KDE]) + +if test "${prefix}" != NONE; then + kde_includes=${includedir} + KDE_EXPAND_MAKEVAR(ac_kde_includes, includedir) + + kde_libraries=${libdir} + KDE_EXPAND_MAKEVAR(ac_kde_libraries, libdir) + +else + ac_kde_includes= + ac_kde_libraries= + kde_libraries="" + kde_includes="" +fi + +AC_CACHE_VAL(ac_cv_have_kde, +[#try to guess kde locations + +if test "$kde_qtver" = 1; then + kde_check_header="ksock.h" + kde_check_lib="libkdecore.la" +else + kde_check_header="ksharedptr.h" + kde_check_lib="libkio.la" +fi + +if test -z "$1"; then + +kde_incdirs="$kde_libs_prefix/include /usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde3/include /opt/kde/include $x_includes $qt_includes" +test -n "$KDEDIR" && kde_incdirs="$KDEDIR/include $KDEDIR/include/kde $KDEDIR $kde_incdirs" +kde_incdirs="$ac_kde_includes $kde_incdirs" +AC_FIND_FILE($kde_check_header, $kde_incdirs, kde_incdir) +ac_kde_includes="$kde_incdir" + +if test -n "$ac_kde_includes" && test ! -r "$ac_kde_includes/$kde_check_header"; then + AC_MSG_ERROR([ +in the prefix, you've chosen, are no KDE headers installed. This will fail. +So, check this please and use another prefix!]) +fi + +kde_libdirs="$kde_libs_prefix/lib${kdelibsuff} /usr/lib/kde/lib${kdelibsuff} /usr/local/kde/lib${kdelibsuff} /usr/kde/lib${kdelibsuff} /usr/lib${kdelibsuff}/kde /usr/lib${kdelibsuff}/kde3 /usr/lib${kdelibsuff} /usr/X11R6/lib${kdelibsuff} /usr/local/lib${kdelibsuff} /opt/kde3/lib${kdelibsuff} /opt/kde/lib${kdelibsuff} /usr/X11R6/kde/lib${kdelibsuff}" +test -n "$KDEDIR" && kde_libdirs="$KDEDIR/lib${kdelibsuff} $KDEDIR $kde_libdirs" +kde_libdirs="$ac_kde_libraries $libdir $kde_libdirs" +AC_FIND_FILE($kde_check_lib, $kde_libdirs, kde_libdir) +ac_kde_libraries="$kde_libdir" + +kde_widgetdir=NO +dnl this might be somewhere else +AC_FIND_FILE("kde3/plugins/designer/kdewidgets.la", $kde_libdirs, kde_widgetdir) + +if test -n "$ac_kde_libraries" && test ! -r "$ac_kde_libraries/$kde_check_lib"; then +AC_MSG_ERROR([ +in the prefix, you've chosen, are no KDE libraries installed. This will fail. +So, check this please and use another prefix!]) +fi + +if test -n "$kde_widgetdir" && test ! -r "$kde_widgetdir/kde3/plugins/designer/kdewidgets.la"; then +AC_MSG_ERROR([ +I can't find the designer plugins. These are required and should have been installed +by kdelibs]) +fi + +if test -n "$kde_widgetdir"; then + kde_widgetdir="$kde_widgetdir/kde3/plugins/designer" +fi + + +if test "$ac_kde_includes" = NO || test "$ac_kde_libraries" = NO || test "$kde_widgetdir" = NO; then + ac_cv_have_kde="have_kde=no" +else + ac_cv_have_kde="have_kde=yes \ + ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries" +fi + +else dnl test -z $1, e.g. from kdelibs + + ac_cv_have_kde="have_kde=no" + +fi +])dnl + +eval "$ac_cv_have_kde" + +if test "$have_kde" != "yes"; then + if test "${prefix}" = NONE; then + ac_kde_prefix="$ac_default_prefix" + else + ac_kde_prefix="$prefix" + fi + if test "$exec_prefix" = NONE; then + ac_kde_exec_prefix="$ac_kde_prefix" + AC_MSG_RESULT([will be installed in $ac_kde_prefix]) + else + ac_kde_exec_prefix="$exec_prefix" + AC_MSG_RESULT([will be installed in $ac_kde_prefix and $ac_kde_exec_prefix]) + fi + + kde_libraries="${libdir}" + kde_includes="${includedir}" + +else + ac_cv_have_kde="have_kde=yes \ + ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries" + AC_MSG_RESULT([libraries $ac_kde_libraries, headers $ac_kde_includes]) + + kde_libraries="$ac_kde_libraries" + kde_includes="$ac_kde_includes" +fi +AC_SUBST(kde_libraries) +AC_SUBST(kde_includes) + +if test "$kde_includes" = "$x_includes" || test "$kde_includes" = "$qt_includes" || test "$kde_includes" = "/usr/include"; then + KDE_INCLUDES="" +else + KDE_INCLUDES="-I$kde_includes" + all_includes="$KDE_INCLUDES $all_includes" +fi + +KDE_DEFAULT_CXXFLAGS="-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION" + +KDE_LDFLAGS="-L$kde_libraries" +if test ! "$kde_libraries" = "$x_libraries" && test ! "$kde_libraries" = "$qt_libraries" ; then + all_libraries="$KDE_LDFLAGS $all_libraries" +fi + +AC_SUBST(KDE_LDFLAGS) +AC_SUBST(KDE_INCLUDES) + +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + +all_libraries="$all_libraries $USER_LDFLAGS" +all_includes="$all_includes $USER_INCLUDES" +AC_SUBST(all_includes) +AC_SUBST(all_libraries) + +if test -z "$1"; then +KDE_CHECK_UIC_PLUGINS +fi + +ac_kde_libraries="$kde_libdir" + +AC_SUBST(AUTODIRS) + + +]) + +AC_DEFUN([KDE_CHECK_EXTRA_LIBS], +[ +AC_MSG_CHECKING(for extra includes) +AC_ARG_WITH(extra-includes,AC_HELP_STRING([--with-extra-includes=DIR],[adds non standard include paths]), + kde_use_extra_includes="$withval", + kde_use_extra_includes=NONE +) +kde_extra_includes= +if test -n "$kde_use_extra_includes" && \ + test "$kde_use_extra_includes" != "NONE"; then + + ac_save_ifs=$IFS + IFS=':' + for dir in $kde_use_extra_includes; do + kde_extra_includes="$kde_extra_includes $dir" + USER_INCLUDES="$USER_INCLUDES -I$dir" + done + IFS=$ac_save_ifs + kde_use_extra_includes="added" +else + kde_use_extra_includes="no" +fi +AC_SUBST(USER_INCLUDES) + +AC_MSG_RESULT($kde_use_extra_includes) + +kde_extra_libs= +AC_MSG_CHECKING(for extra libs) +AC_ARG_WITH(extra-libs,AC_HELP_STRING([--with-extra-libs=DIR],[adds non standard library paths]), + kde_use_extra_libs=$withval, + kde_use_extra_libs=NONE +) +if test -n "$kde_use_extra_libs" && \ + test "$kde_use_extra_libs" != "NONE"; then + + ac_save_ifs=$IFS + IFS=':' + for dir in $kde_use_extra_libs; do + kde_extra_libs="$kde_extra_libs $dir" + KDE_EXTRA_RPATH="$KDE_EXTRA_RPATH -R $dir" + USER_LDFLAGS="$USER_LDFLAGS -L$dir" + done + IFS=$ac_save_ifs + kde_use_extra_libs="added" +else + kde_use_extra_libs="no" +fi + +AC_SUBST(USER_LDFLAGS) + +AC_MSG_RESULT($kde_use_extra_libs) + +]) + +AC_DEFUN([KDE_1_CHECK_PATH_HEADERS], +[ + AC_MSG_CHECKING([for KDE headers installed]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS +cat > conftest.$ac_ext < +#endif +#include +#include "confdefs.h" +#include + +int main() { + printf("kde_htmldir=\\"%s\\"\n", KApplication::kde_htmldir().data()); + printf("kde_appsdir=\\"%s\\"\n", KApplication::kde_appsdir().data()); + printf("kde_icondir=\\"%s\\"\n", KApplication::kde_icondir().data()); + printf("kde_sounddir=\\"%s\\"\n", KApplication::kde_sounddir().data()); + printf("kde_datadir=\\"%s\\"\n", KApplication::kde_datadir().data()); + printf("kde_locale=\\"%s\\"\n", KApplication::kde_localedir().data()); + printf("kde_cgidir=\\"%s\\"\n", KApplication::kde_cgidir().data()); + printf("kde_confdir=\\"%s\\"\n", KApplication::kde_configdir().data()); + printf("kde_mimedir=\\"%s\\"\n", KApplication::kde_mimedir().data()); + printf("kde_toolbardir=\\"%s\\"\n", KApplication::kde_toolbardir().data()); + printf("kde_wallpaperdir=\\"%s\\"\n", + KApplication::kde_wallpaperdir().data()); + printf("kde_bindir=\\"%s\\"\n", KApplication::kde_bindir().data()); + printf("kde_partsdir=\\"%s\\"\n", KApplication::kde_partsdir().data()); + printf("kde_servicesdir=\\"/tmp/dummy\\"\n"); + printf("kde_servicetypesdir=\\"/tmp/dummy\\"\n"); + printf("kde_moduledir=\\"/tmp/dummy\\"\n"); + printf("kde_styledir=\\"/tmp/dummy\\"\n"); + printf("kde_widgetdir=\\"/tmp/dummy\\"\n"); + printf("xdg_appsdir=\\"/tmp/dummy\\"\n"); + printf("xdg_menudir=\\"/tmp/dummy\\"\n"); + printf("xdg_directorydir=\\"/tmp/dummy\\"\n"); + printf("kde_kcfgdir=\\"/tmp/dummy\\"\n"); + return 0; + } +EOF + + ac_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$all_includes $CPPFLAGS" + if AC_TRY_EVAL(ac_compile); then + AC_MSG_RESULT(yes) + else + AC_MSG_ERROR([your system is not able to compile a small KDE application! +Check, if you installed the KDE header files correctly. +For more details about this problem, look at the end of config.log.]) + fi + CPPFLAGS=$ac_save_CPPFLAGS + + AC_LANG_RESTORE +]) + +AC_DEFUN([KDE_CHECK_KDEQTADDON], +[ +AC_MSG_CHECKING(for kde-qt-addon) +AC_CACHE_VAL(kde_cv_have_kdeqtaddon, +[ + kde_ldflags_safe="$LDFLAGS" + kde_libs_safe="$LIBS" + kde_cxxflags_safe="$CXXFLAGS" + + LIBS="-lkde-qt-addon $LIBQT $LIBS" + CXXFLAGS="$CXXFLAGS -I$prefix/include -I$prefix/include/kde $all_includes" + LDFLAGS="$LDFLAGS $all_libraries $USER_LDFLAGS" + + AC_TRY_LINK([ + #include + ], + [ + QDomDocument doc; + ], + kde_cv_have_kdeqtaddon=yes, + kde_cv_have_kdeqtaddon=no + ) + + LDFLAGS=$kde_ldflags_safe + LIBS=$kde_libs_safe + CXXFLAGS=$kde_cxxflags_safe +]) + +AC_MSG_RESULT($kde_cv_have_kdeqtaddon) + +if test "$kde_cv_have_kdeqtaddon" = "no"; then + AC_MSG_ERROR([Can't find libkde-qt-addon. You need to install it first. +It is a separate package (and CVS module) named kde-qt-addon.]) +fi +]) + +AC_DEFUN([KDE_CREATE_LIBS_ALIASES], +[ + AC_REQUIRE([KDE_MISC_TESTS]) + AC_REQUIRE([KDE_CHECK_LIBDL]) + AC_REQUIRE([K_PATH_X]) + +if test $kde_qtver = 3; then + case $host in + *cygwin*) lib_kded="-lkdeinit_kded" ;; + *) lib_kded="" ;; + esac + AC_SUBST(LIB_KDED, $lib_kded) + AC_SUBST(LIB_KDECORE, "-lkdecore") + AC_SUBST(LIB_KDEUI, "-lkdeui") + AC_SUBST(LIB_KIO, "-lkio") + AC_SUBST(LIB_KJS, "-lkjs") + AC_SUBST(LIB_SMB, "-lsmb") + AC_SUBST(LIB_KAB, "-lkab") + AC_SUBST(LIB_KABC, "-lkabc") + AC_SUBST(LIB_KHTML, "-lkhtml") + AC_SUBST(LIB_KSPELL, "-lkspell") + AC_SUBST(LIB_KPARTS, "-lkparts") + AC_SUBST(LIB_KDEPRINT, "-lkdeprint") + AC_SUBST(LIB_KUTILS, "-lkutils") + AC_SUBST(LIB_KDEPIM, "-lkdepim") + AC_SUBST(LIB_KIMPROXY, "-lkimproxy") + AC_SUBST(LIB_KNEWSTUFF, "-lknewstuff") + AC_SUBST(LIB_KDNSSD, "-lkdnssd") + AC_SUBST(LIB_KUNITTEST, "-lkunittest") +# these are for backward compatibility + AC_SUBST(LIB_KSYCOCA, "-lkio") + AC_SUBST(LIB_KFILE, "-lkio") +elif test $kde_qtver = 2; then + AC_SUBST(LIB_KDECORE, "-lkdecore") + AC_SUBST(LIB_KDEUI, "-lkdeui") + AC_SUBST(LIB_KIO, "-lkio") + AC_SUBST(LIB_KSYCOCA, "-lksycoca") + AC_SUBST(LIB_SMB, "-lsmb") + AC_SUBST(LIB_KFILE, "-lkfile") + AC_SUBST(LIB_KAB, "-lkab") + AC_SUBST(LIB_KHTML, "-lkhtml") + AC_SUBST(LIB_KSPELL, "-lkspell") + AC_SUBST(LIB_KPARTS, "-lkparts") + AC_SUBST(LIB_KDEPRINT, "-lkdeprint") +else + AC_SUBST(LIB_KDECORE, "-lkdecore -lXext $(LIB_QT)") + AC_SUBST(LIB_KDEUI, "-lkdeui $(LIB_KDECORE)") + AC_SUBST(LIB_KFM, "-lkfm $(LIB_KDECORE)") + AC_SUBST(LIB_KFILE, "-lkfile $(LIB_KFM) $(LIB_KDEUI)") + AC_SUBST(LIB_KAB, "-lkab $(LIB_KIMGIO) $(LIB_KDECORE)") +fi +]) + +AC_DEFUN([AC_PATH_KDE], +[ + AC_BASE_PATH_KDE + AC_ARG_ENABLE(path-check,AC_HELP_STRING([--disable-path-check],[don't try to find out, where to install]), + [ + if test "$enableval" = "no"; + then ac_use_path_checking="default" + else ac_use_path_checking="" + fi + ], + [ + if test "$kde_qtver" = 1; + then ac_use_path_checking="" + else ac_use_path_checking="default" + fi + ] + ) + + AC_CREATE_KFSSTND($ac_use_path_checking) + + AC_SUBST_KFSSTND + KDE_CREATE_LIBS_ALIASES +]) + +dnl KDE_CHECK_FUNC_EXT(, [headers], [sample-use], [C prototype], [autoheader define], [call if found]) +AC_DEFUN([KDE_CHECK_FUNC_EXT], +[ +AC_MSG_CHECKING(for $1) +AC_CACHE_VAL(kde_cv_func_$1, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +save_CXXFLAGS="$CXXFLAGS" +kde_safe_LIBS="$LIBS" +LIBS="$LIBS $X_EXTRA_LIBS" +if test "$GXX" = "yes"; then +CXXFLAGS="$CXXFLAGS -pedantic-errors" +fi +AC_TRY_COMPILE([ +$2 +], +[ +$3 +], +kde_cv_func_$1=yes, +kde_cv_func_$1=no) +CXXFLAGS="$save_CXXFLAGS" +LIBS="$kde_safe_LIBS" +AC_LANG_RESTORE +]) + +AC_MSG_RESULT($kde_cv_func_$1) + +AC_MSG_CHECKING([if $1 needs custom prototype]) +AC_CACHE_VAL(kde_cv_proto_$1, +[ +if test "x$kde_cv_func_$1" = xyes; then + kde_cv_proto_$1=no +else + case "$1" in + setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat) + kde_cv_proto_$1="yes - in libkdefakes" + ;; + *) + kde_cv_proto_$1=unknown + ;; + esac +fi + +if test "x$kde_cv_proto_$1" = xunknown; then + +AC_LANG_SAVE +AC_LANG_CPLUSPLUS + kde_safe_libs=$LIBS + LIBS="$LIBS $X_EXTRA_LIBS" + AC_TRY_LINK([ +$2 + +extern "C" $4; +], +[ +$3 +], +[ kde_cv_func_$1=yes + kde_cv_proto_$1=yes ], + [kde_cv_proto_$1="$1 unavailable"] +) +LIBS=$kde_safe_libs +AC_LANG_RESTORE +fi +]) +AC_MSG_RESULT($kde_cv_proto_$1) + +if test "x$kde_cv_func_$1" = xyes; then + AC_DEFINE(HAVE_$5, 1, [Define if you have $1]) + $6 +fi +if test "x$kde_cv_proto_$1" = xno; then + AC_DEFINE(HAVE_$5_PROTO, 1, + [Define if you have the $1 prototype]) +fi + +AH_VERBATIM([_HAVE_$5_PROTO], +[ +#if !defined(HAVE_$5_PROTO) +#ifdef __cplusplus +extern "C" { +#endif +$4; +#ifdef __cplusplus +} +#endif +#endif +]) +]) + +AC_DEFUN([AC_CHECK_SETENV], +[ + KDE_CHECK_FUNC_EXT(setenv, [ +#include +], + [setenv("VAR", "VALUE", 1);], + [int setenv (const char *, const char *, int)], + [SETENV]) +]) + +AC_DEFUN([AC_CHECK_UNSETENV], +[ + KDE_CHECK_FUNC_EXT(unsetenv, [ +#include +], + [unsetenv("VAR");], + [void unsetenv (const char *)], + [UNSETENV]) +]) + +AC_DEFUN([AC_CHECK_GETDOMAINNAME], +[ + KDE_CHECK_FUNC_EXT(getdomainname, [ +#include +#include +#include +], + [ +char buffer[200]; +getdomainname(buffer, 200); +], + [#include + int getdomainname (char *, size_t)], + [GETDOMAINNAME]) +]) + +AC_DEFUN([AC_CHECK_GETHOSTNAME], +[ + KDE_CHECK_FUNC_EXT(gethostname, [ +#include +#include +], + [ +char buffer[200]; +gethostname(buffer, 200); +], + [int gethostname (char *, unsigned int)], + [GETHOSTNAME]) +]) + +AC_DEFUN([AC_CHECK_USLEEP], +[ + KDE_CHECK_FUNC_EXT(usleep, [ +#include +], + [ +usleep(200); +], + [int usleep (unsigned int)], + [USLEEP]) +]) + + +AC_DEFUN([AC_CHECK_RANDOM], +[ + KDE_CHECK_FUNC_EXT(random, [ +#include +], + [ +random(); +], + [long int random(void)], + [RANDOM]) + + KDE_CHECK_FUNC_EXT(srandom, [ +#include +], + [ +srandom(27); +], + [void srandom(unsigned int)], + [SRANDOM]) + +]) + +AC_DEFUN([AC_CHECK_INITGROUPS], +[ + KDE_CHECK_FUNC_EXT(initgroups, [ +#include +#include +#include +], + [ +char buffer[200]; +initgroups(buffer, 27); +], + [int initgroups(const char *, gid_t)], + [INITGROUPS]) +]) + +AC_DEFUN([AC_CHECK_MKSTEMPS], +[ + KDE_CHECK_FUNC_EXT(mkstemps, [ +#include +#include +], + [ +mkstemps("/tmp/aaaXXXXXX", 6); +], + [int mkstemps(char *, int)], + [MKSTEMPS]) +]) + +AC_DEFUN([AC_CHECK_MKSTEMP], +[ + KDE_CHECK_FUNC_EXT(mkstemp, [ +#include +#include +], + [ +mkstemp("/tmp/aaaXXXXXX"); +], + [int mkstemp(char *)], + [MKSTEMP]) +]) + +AC_DEFUN([AC_CHECK_MKDTEMP], +[ + KDE_CHECK_FUNC_EXT(mkdtemp, [ +#include +#include +], + [ +mkdtemp("/tmp/aaaXXXXXX"); +], + [char *mkdtemp(char *)], + [MKDTEMP]) +]) + + +AC_DEFUN([AC_CHECK_RES_INIT], +[ + AC_MSG_CHECKING([if res_init needs -lresolv]) + kde_libs_safe="$LIBS" + LIBS="$LIBS $X_EXTRA_LIBS -lresolv" + AC_TRY_LINK( + [ +#include +#include +#include +#include + ], + [ + res_init(); + ], + [ + LIBRESOLV="-lresolv" + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_RES_INIT, 1, [Define if you have the res_init function]) + ], + [ AC_MSG_RESULT(no) ] + ) + LIBS=$kde_libs_safe + AC_SUBST(LIBRESOLV) + + KDE_CHECK_FUNC_EXT(res_init, + [ +#include +#include +#include +#include + ], + [res_init()], + [int res_init(void)], + [RES_INIT]) +]) + +AC_DEFUN([AC_CHECK_STRLCPY], +[ + KDE_CHECK_FUNC_EXT(strlcpy, [ +#include +], +[ char buf[20]; + strlcpy(buf, "KDE function test", sizeof(buf)); +], + [unsigned long strlcpy(char*, const char*, unsigned long)], + [STRLCPY]) +]) + +AC_DEFUN([AC_CHECK_STRLCAT], +[ + KDE_CHECK_FUNC_EXT(strlcat, [ +#include +], +[ char buf[20]; + buf[0]='\0'; + strlcat(buf, "KDE function test", sizeof(buf)); +], + [unsigned long strlcat(char*, const char*, unsigned long)], + [STRLCAT]) +]) + +AC_DEFUN([AC_CHECK_RES_QUERY], +[ + KDE_CHECK_FUNC_EXT(res_query, [ +#include +#include +#include +#include +#include +], +[ +res_query(NULL, 0, 0, NULL, 0); +], + [int res_query(const char *, int, int, unsigned char *, int)], + [RES_QUERY]) +]) + +AC_DEFUN([AC_CHECK_DN_SKIPNAME], +[ + KDE_CHECK_FUNC_EXT(dn_skipname, [ +#include +#include +#include +#include +], +[ +dn_skipname (NULL, NULL); +], + [int dn_skipname (unsigned char *, unsigned char *)], + [DN_SKIPNAME]) +]) + + +AC_DEFUN([AC_FIND_GIF], + [AC_MSG_CHECKING([for giflib]) +AC_CACHE_VAL(ac_cv_lib_gif, +[ac_save_LIBS="$LIBS" +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBS="$all_libraries -lgif -lX11 $LIBSOCKET" +else +LIBS="$all_libraries -lgif" +fi +AC_TRY_LINK(dnl +[ +#ifdef __cplusplus +extern "C" { +#endif +int GifLastError(void); +#ifdef __cplusplus +} +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +], + [return GifLastError();], + eval "ac_cv_lib_gif=yes", + eval "ac_cv_lib_gif=no") +LIBS="$ac_save_LIBS" +])dnl +if eval "test \"`echo $ac_cv_lib_gif`\" = yes"; then + AC_MSG_RESULT(yes) + AC_DEFINE_UNQUOTED(HAVE_LIBGIF, 1, [Define if you have libgif]) +else + AC_MSG_ERROR(You need giflib30. Please install the kdesupport package) +fi +]) + +AC_DEFUN([KDE_FIND_JPEG_HELPER], +[ +AC_MSG_CHECKING([for libjpeg$2]) +AC_CACHE_VAL(ac_cv_lib_jpeg_$1, +[ +ac_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -ljpeg$2 -lm" +ac_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +AC_TRY_LINK( +[ +#ifdef __cplusplus +extern "C" { +#endif +void jpeg_CreateDecompress(); +#ifdef __cplusplus +} +#endif +], +[jpeg_CreateDecompress();], + eval "ac_cv_lib_jpeg_$1=-ljpeg$2", + eval "ac_cv_lib_jpeg_$1=no") +LIBS="$ac_save_LIBS" +CFLAGS="$ac_save_CFLAGS" +]) + +if eval "test ! \"`echo $ac_cv_lib_jpeg_$1`\" = no"; then + LIBJPEG="$ac_cv_lib_jpeg_$1" + AC_MSG_RESULT($ac_cv_lib_jpeg_$1) +else + AC_MSG_RESULT(no) + $3 +fi + +]) + +AC_DEFUN([AC_FIND_JPEG], +[ +dnl first look for libraries +KDE_FIND_JPEG_HELPER(6b, 6b, + KDE_FIND_JPEG_HELPER(normal, [], + [ + LIBJPEG= + ] + ) +) + +dnl then search the headers (can't use simply AC_TRY_xxx, as jpeglib.h +dnl requires system dependent includes loaded before it) +jpeg_incdirs="$includedir /usr/include /usr/local/include $kde_extra_includes" +AC_FIND_FILE(jpeglib.h, $jpeg_incdirs, jpeg_incdir) +test "x$jpeg_incdir" = xNO && jpeg_incdir= + +dnl if headers _and_ libraries are missing, this is no error, and we +dnl continue with a warning (the user will get no jpeg support in khtml) +dnl if only one is missing, it means a configuration error, but we still +dnl only warn +if test -n "$jpeg_incdir" && test -n "$LIBJPEG" ; then + AC_DEFINE_UNQUOTED(HAVE_LIBJPEG, 1, [Define if you have libjpeg]) +else + if test -n "$jpeg_incdir" || test -n "$LIBJPEG" ; then + AC_MSG_WARN([ +There is an installation error in jpeg support. You seem to have only one +of either the headers _or_ the libraries installed. You may need to either +provide correct --with-extra-... options, or the development package of +libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/ +Disabling JPEG support. +]) + else + AC_MSG_WARN([libjpeg not found. disable JPEG support.]) + fi + jpeg_incdir= + LIBJPEG= +fi + +AC_SUBST(LIBJPEG) +AH_VERBATIM(_AC_CHECK_JPEG, +[/* + * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system + * headers and I'm too lazy to write a configure test as long as only + * unixware is related + */ +#ifdef _UNIXWARE +#define HAVE_BOOLEAN +#endif +]) +]) + +AC_DEFUN([KDE_CHECK_QT_JPEG], +[ +if test -n "$LIBJPEG"; then +AC_MSG_CHECKING([if Qt needs $LIBJPEG]) +AC_CACHE_VAL(kde_cv_qt_jpeg, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +ac_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS $LIBQT" +LIBS=`echo $LIBS | sed "s/$LIBJPEG//"` +ac_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES" +AC_TRY_LINK( +[#include ], + [ + int argc; + char** argv; + QApplication app(argc, argv);], + eval "kde_cv_qt_jpeg=no", + eval "kde_cv_qt_jpeg=yes") +LIBS="$ac_save_LIBS" +CXXFLAGS="$ac_save_CXXFLAGS" +AC_LANG_RESTORE +fi +]) + +if eval "test ! \"`echo $kde_cv_qt_jpeg`\" = no"; then + AC_MSG_RESULT(yes) + LIBJPEG_QT='$(LIBJPEG)' +else + AC_MSG_RESULT(no) + LIBJPEG_QT= +fi + +]) + +AC_DEFUN([AC_FIND_ZLIB], +[ +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_MSG_CHECKING([for libz]) +AC_CACHE_VAL(ac_cv_lib_z, +[ +kde_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -lz $LIBSOCKET" +kde_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" +AC_TRY_LINK(dnl +[ +#include +#include +], +[ + char buf[42]; + gzFile f = (gzFile) 0; + /* this would segfault.. but we only link, don't run */ + (void) gzgets(f, buf, sizeof(buf)); + + return (strcmp(zlibVersion(), ZLIB_VERSION) == 0); +], + eval "ac_cv_lib_z='-lz'", + eval "ac_cv_lib_z=no") +LIBS="$kde_save_LIBS" +CFLAGS="$kde_save_CFLAGS" +])dnl +if test ! "$ac_cv_lib_z" = no; then + AC_DEFINE_UNQUOTED(HAVE_LIBZ, 1, [Define if you have libz]) + LIBZ="$ac_cv_lib_z" + AC_MSG_RESULT($ac_cv_lib_z) +else + AC_MSG_ERROR(not found. + Possibly configure picks up an outdated version + installed by XFree86. Remove it from your system. + + Check your installation and look into config.log) + LIBZ="" +fi +AC_SUBST(LIBZ) +]) + +AC_DEFUN([KDE_TRY_TIFFLIB], +[ +AC_MSG_CHECKING([for libtiff $1]) + +AC_CACHE_VAL(kde_cv_libtiff_$1, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +kde_save_LIBS="$LIBS" +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lX11 $LIBSOCKET -lm" +else +LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lm" +fi +kde_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES" + +AC_TRY_LINK(dnl +[ +#include +], + [return (TIFFOpen( "", "r") == 0); ], +[ + kde_cv_libtiff_$1="-l$1 $LIBJPEG $LIBZ" +], [ + kde_cv_libtiff_$1=no +]) + +LIBS="$kde_save_LIBS" +CXXFLAGS="$kde_save_CXXFLAGS" +AC_LANG_RESTORE +]) + +if test "$kde_cv_libtiff_$1" = "no"; then + AC_MSG_RESULT(no) + LIBTIFF="" + $3 +else + LIBTIFF="$kde_cv_libtiff_$1" + AC_MSG_RESULT(yes) + AC_DEFINE_UNQUOTED(HAVE_LIBTIFF, 1, [Define if you have libtiff]) + $2 +fi + +]) + +AC_DEFUN([AC_FIND_TIFF], +[ +AC_REQUIRE([K_PATH_X]) +AC_REQUIRE([AC_FIND_ZLIB]) +AC_REQUIRE([AC_FIND_JPEG]) +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + +KDE_TRY_TIFFLIB(tiff, [], + KDE_TRY_TIFFLIB(tiff34)) + +AC_SUBST(LIBTIFF) +]) + +AC_DEFUN([KDE_FIND_LIBEXR], +[ +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_REQUIRE([AC_FIND_ZLIB]) +AC_CACHE_VAL(ac_cv_libexr, +[ + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + AC_MSG_CHECKING([for OpenEXR libraries]) + + if test "$PKG_CONFIG" = "no" ; then + AC_MSG_RESULT(no) + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + if ! $PKG_CONFIG --exists OpenEXR ; then + AC_MSG_RESULT(no) + EXRSTATUS=no + else + if ! $PKG_CONFIG --atleast-version="1.1.1" OpenEXR ; then + AC_MSG_RESULT(no) + EXRSTATUS=old + else + kde_save_LIBS="$LIBS" + LIBS="$LIBS $all_libraries $USER_LDFLAGS `pkg-config --libs OpenEXR` $LIBZ" + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + kde_save_CXXFLAGS="$CXXFLAGS" + EXR_FLAGS=`$PKG_CONFIG --cflags OpenEXR` + CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES $EXR_FLAGS" + + AC_TRY_LINK(dnl + [ + #include + ], + [ + using namespace Imf; + RgbaInputFile file ("dummy"); + return 0; + ], + eval "ac_cv_libexr='`pkg-config --libs OpenEXR`'", + eval "ac_cv_libexr=no" + ) + LIBS="$kde_save_LIBS" + CXXFLAGS="$kde_save_CXXFLAGS" + AC_LANG_RESTORE + ])dnl + if eval "test ! \"`echo $ac_cv_libexr`\" = no"; then + AC_DEFINE_UNQUOTED(HAVE_EXR, 1, [Define if you have OpenEXR]) + LIB_EXR="$ac_cv_libexr" + AC_MSG_RESULT($ac_cv_libexr) + else + AC_MSG_RESULT(no) + LIB_EXR="" + fi + fi + fi + fi + AC_SUBST(LIB_EXR) + AC_SUBST(EXR_FLAGS) +]) + + + +AC_DEFUN([AC_FIND_PNG], +[ +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_REQUIRE([AC_FIND_ZLIB]) +AC_MSG_CHECKING([for libpng]) +AC_CACHE_VAL(ac_cv_lib_png, +[ +kde_save_LIBS="$LIBS" +if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then +LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm -lX11 $LIBSOCKET" +else +LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm" +fi +kde_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" + +AC_TRY_LINK(dnl + [ + #include + ], + [ + png_structp png_ptr = png_create_read_struct( /* image ptr */ + PNG_LIBPNG_VER_STRING, 0, 0, 0 ); + return( png_ptr != 0 ); + ], + eval "ac_cv_lib_png='-lpng $LIBZ -lm'", + eval "ac_cv_lib_png=no" +) +LIBS="$kde_save_LIBS" +CFLAGS="$kde_save_CFLAGS" +])dnl +if eval "test ! \"`echo $ac_cv_lib_png`\" = no"; then + AC_DEFINE_UNQUOTED(HAVE_LIBPNG, 1, [Define if you have libpng]) + LIBPNG="$ac_cv_lib_png" + AC_SUBST(LIBPNG) + AC_MSG_RESULT($ac_cv_lib_png) +else + AC_MSG_RESULT(no) + LIBPNG="" + AC_SUBST(LIBPNG) +fi +]) + + +AC_DEFUN([AC_FIND_JASPER], +[ +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_REQUIRE([AC_FIND_JPEG]) +AC_MSG_CHECKING([for jasper]) +AC_CACHE_VAL(ac_cv_jasper, +[ +kde_save_LIBS="$LIBS" +LIBS="$LIBS $all_libraries $USER_LDFLAGS -ljasper $LIBJPEG -lm" +kde_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $all_includes $USER_INCLUDES" + +AC_TRY_LINK(dnl + [ + #include + ], + [ + return( jas_init() ); + ], + eval "ac_cv_jasper='-ljasper $LIBJPEG -lm'", + eval "ac_cv_jasper=no" +) +LIBS="$kde_save_LIBS" +CFLAGS="$kde_save_CFLAGS" +])dnl +if eval "test ! \"`echo $ac_cv_jasper`\" = no"; then + AC_DEFINE_UNQUOTED(HAVE_JASPER, 1, [Define if you have jasper]) + LIB_JASPER="$ac_cv_jasper" + AC_MSG_RESULT($ac_cv_jasper) +else + AC_MSG_RESULT(no) + LIB_JASPER="" +fi +AC_SUBST(LIB_JASPER) +]) + +AC_DEFUN([AC_CHECK_BOOL], +[ + AC_DEFINE_UNQUOTED(HAVE_BOOL, 1, [You _must_ have bool]) +]) + +AC_DEFUN([AC_CHECK_GNU_EXTENSIONS], +[ +AC_MSG_CHECKING(if you need GNU extensions) +AC_CACHE_VAL(ac_cv_gnu_extensions, +[ +cat > conftest.c << EOF +#include + +#ifdef __GNU_LIBRARY__ +yes +#endif +EOF + +if (eval "$ac_cpp conftest.c") 2>&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_gnu_extensions=yes +else + ac_cv_gnu_extensions=no +fi +]) + +AC_MSG_RESULT($ac_cv_gnu_extensions) +if test "$ac_cv_gnu_extensions" = "yes"; then + AC_DEFINE_UNQUOTED(_GNU_SOURCE, 1, [Define if you need to use the GNU extensions]) +fi +]) + +AC_DEFUN([KDE_CHECK_COMPILER_FLAG], +[ +AC_MSG_CHECKING([whether $CXX supports -$1]) +kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'` +AC_CACHE_VAL(kde_cv_prog_cxx_$kde_cache, +[ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -$1" + AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cxx_$kde_cache=yes"], []) + CXXFLAGS="$save_CXXFLAGS" + AC_LANG_RESTORE +]) +if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then + AC_MSG_RESULT(yes) + : + $2 +else + AC_MSG_RESULT(no) + : + $3 +fi +]) + +AC_DEFUN([KDE_CHECK_C_COMPILER_FLAG], +[ +AC_MSG_CHECKING([whether $CC supports -$1]) +kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'` +AC_CACHE_VAL(kde_cv_prog_cc_$kde_cache, +[ + AC_LANG_SAVE + AC_LANG_C + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -$1" + AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cc_$kde_cache=yes"], []) + CFLAGS="$save_CFLAGS" + AC_LANG_RESTORE +]) +if eval "test \"`echo '$kde_cv_prog_cc_'$kde_cache`\" = yes"; then + AC_MSG_RESULT(yes) + : + $2 +else + AC_MSG_RESULT(no) + : + $3 +fi +]) + + +dnl AC_REMOVE_FORBIDDEN removes forbidden arguments from variables +dnl use: AC_REMOVE_FORBIDDEN(CC, [-forbid -bad-option whatever]) +dnl it's all white-space separated +AC_DEFUN([AC_REMOVE_FORBIDDEN], +[ __val=$$1 + __forbid=" $2 " + if test -n "$__val"; then + __new="" + ac_save_IFS=$IFS + IFS=" " + for i in $__val; do + case "$__forbid" in + *" $i "*) AC_MSG_WARN([found forbidden $i in $1, removing it]) ;; + *) # Careful to not add spaces, where there were none, because otherwise + # libtool gets confused, if we change e.g. CXX + if test -z "$__new" ; then __new=$i ; else __new="$__new $i" ; fi ;; + esac + done + IFS=$ac_save_IFS + $1=$__new + fi +]) + + +AC_DEFUN([KDE_CHECK_FOR_BAD_COMPILER], +[ + AC_MSG_CHECKING([whether $CC is blacklisted]) + + dnl In theory we have tu run this test against $CC and $CXX + dnl in C and in C++ mode, because its perfectly legal for + dnl the user to mix compiler versions, since C has a defined + dnl ABI. + dnl + dnl For now, we assume the user is not on crack. + + AC_TRY_COMPILE([ +#ifdef __GNUC__ +#if __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 0 +choke me +#endif +#endif +], , + kde_bad_compiler=no, + kde_bad_compiler=yes +) + + AC_MSG_RESULT($kde_bad_compiler) + +if test "$kde_bad_compiler" = "yes"; then + AC_MSG_ERROR([ + +This particular compiler version is blacklisted because it +is known to miscompile KDE. Please use a newer version, or +if that is not yet available, choose an older version. + +Please do not report a bug or bother us reporting this +configure error. We know about it, and we introduced +it by intention to avoid untraceable bugs or crashes in KDE. + +]) +fi + +]) + + +AC_DEFUN([KDE_CHECK_FOR_OPT_NOINLINE_MATCH], +[ + AC_CACHE_CHECK([whether system headers can cope with -O2 -fno-inline], + kde_cv_opt_noinline_match, + [ + kde_cv_opt_noinline_match=irrelevant + dnl if we don't use both -O2 and -fno-inline, this check is moot + if echo "$CFLAGS" | grep -e -O2 >/dev/null 2>/dev/null \ + && echo "$CFLAGS" | grep -e -fno-inline >/dev/null 2>/dev/null ; then + + ac_cflags_save="$CFLAGS" + CFLAGS="$CFLAGS -D_USE_GNU" + + AC_TRY_LINK([ + #include +], [ const char *pt, *et; + et = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p ( ";," ) && ((size_t)(const void *)(( ";," )+ 1) - (size_t)(const void *)( ";," ) == 1) ? ((__a0 =((__const char *) ( ";," ))[0], __a0 == '\0') ? ((void) ( pt ),((void *)0) ) : ((__a1 = ((__const char *) ( ";," ))[1], __a1== '\0') ? (__extension__ (__builtin_constant_p ( __a0 ) && ( __a0 ) == '\0' ? (char *) __rawmemchr ( pt , __a0) : strchr( pt , __a0 ))) : ((__a2 = ((__const char *) ( ";," ))[2], __a2 == '\0') ? __strpbrk_c2 ( pt , __a0, __a1) :(((__const char *) ( ";," ))[3] == '\0' ? __strpbrk_c3 ( pt ,__a0, __a1, __a2): strpbrk ( pt , ";," ))))) : strpbrk ( pt , ";," )); }) ; +], + kde_cv_opt_noinline_match=yes, + kde_cv_opt_noinline_match=no + ) + + CFLAGS="$ac_cflags_save" + fi + ]) +]) + + +dnl AC_VALIDIFY_CXXFLAGS checks for forbidden flags the user may have given +AC_DEFUN([AC_VALIDIFY_CXXFLAGS], +[dnl +if test "x$kde_use_qt_emb" != "xyes"; then + AC_REMOVE_FORBIDDEN(CXX, [-fno-rtti -rpath]) + AC_REMOVE_FORBIDDEN(CXXFLAGS, [-fno-rtti -rpath]) +else + AC_REMOVE_FORBIDDEN(CXX, [-rpath]) + AC_REMOVE_FORBIDDEN(CXXFLAGS, [-rpath]) +fi +]) + +AC_DEFUN([AC_CHECK_COMPILERS], +[ + AC_ARG_ENABLE(debug, + AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]), + [ + case $enableval in + yes) + kde_use_debug_code="yes" + kde_use_debug_define=no + ;; + full) + kde_use_debug_code="full" + kde_use_debug_define=no + ;; + *) + kde_use_debug_code="no" + kde_use_debug_define=yes + ;; + esac + ], + [kde_use_debug_code="no" + kde_use_debug_define=no + ]) + + dnl Just for configure --help + AC_ARG_ENABLE(dummyoption, + AC_HELP_STRING([--disable-debug], + [disables debug output and debug symbols [default=no]]), + [],[]) + + AC_ARG_ENABLE(strict, + AC_HELP_STRING([--enable-strict], + [compiles with strict compiler options (may not work!)]), + [ + if test $enableval = "no"; then + kde_use_strict_options="no" + else + kde_use_strict_options="yes" + fi + ], [kde_use_strict_options="no"]) + + AC_ARG_ENABLE(warnings,AC_HELP_STRING([--disable-warnings],[disables compilation with -Wall and similar]), + [ + if test $enableval = "no"; then + kde_use_warnings="no" + else + kde_use_warnings="yes" + fi + ], [kde_use_warnings="yes"]) + + dnl enable warnings for debug build + if test "$kde_use_debug_code" != "no"; then + kde_use_warnings=yes + fi + + AC_ARG_ENABLE(profile,AC_HELP_STRING([--enable-profile],[creates profiling infos [default=no]]), + [kde_use_profiling=$enableval], + [kde_use_profiling="no"] + ) + + dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS + CFLAGS=" $CFLAGS" + + AC_PROG_CC + + AC_PROG_CPP + + if test "$GCC" = "yes"; then + if test "$kde_use_debug_code" != "no"; then + if test $kde_use_debug_code = "full"; then + CFLAGS="-g3 -fno-inline $CFLAGS" + else + CFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CFLAGS" + fi + else + CFLAGS="-O2 $CFLAGS" + fi + fi + + if test "$kde_use_debug_define" = "yes"; then + CFLAGS="-DNDEBUG $CFLAGS" + fi + + + case "$host" in + *-*-sysv4.2uw*) CFLAGS="-D_UNIXWARE $CFLAGS";; + *-*-sysv5uw7*) CFLAGS="-D_UNIXWARE7 $CFLAGS";; + esac + + if test -z "$LDFLAGS" && test "$kde_use_debug_code" = "no" && test "$GCC" = "yes"; then + LDFLAGS="" + fi + + CXXFLAGS=" $CXXFLAGS" + + AC_PROG_CXX + + KDE_CHECK_FOR_BAD_COMPILER + + if test "$GXX" = "yes" || test "$CXX" = "KCC"; then + if test "$kde_use_debug_code" != "no"; then + if test "$CXX" = "KCC"; then + CXXFLAGS="+K0 -Wall -pedantic -W -Wpointer-arith -Wwrite-strings $CXXFLAGS" + else + if test "$kde_use_debug_code" = "full"; then + CXXFLAGS="-g3 -fno-inline $CXXFLAGS" + else + CXXFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CXXFLAGS" + fi + fi + KDE_CHECK_COMPILER_FLAG(fno-builtin,[CXXFLAGS="-fno-builtin $CXXFLAGS"]) + + dnl convenience compiler flags + KDE_CHECK_COMPILER_FLAG(Woverloaded-virtual, [WOVERLOADED_VIRTUAL="-Woverloaded-virtual"], [WOVERLOADED_VRITUAL=""]) + AC_SUBST(WOVERLOADED_VIRTUAL) + else + if test "$CXX" = "KCC"; then + CXXFLAGS="+K3 $CXXFLAGS" + else + CXXFLAGS="-O2 $CXXFLAGS" + fi + fi + fi + + if test "$kde_use_debug_define" = "yes"; then + CXXFLAGS="-DNDEBUG -DNO_DEBUG $CXXFLAGS" + fi + + if test "$kde_use_profiling" = "yes"; then + KDE_CHECK_COMPILER_FLAG(pg, + [ + CFLAGS="-pg $CFLAGS" + CXXFLAGS="-pg $CXXFLAGS" + ]) + fi + + if test "$kde_use_warnings" = "yes"; then + if test "$GCC" = "yes"; then + CXXFLAGS="-Wall -W -Wpointer-arith $CXXFLAGS" + case $host in + *-*-linux-gnu) + CFLAGS="-std=iso9899:1990 -W -Wall -Wchar-subscripts -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -D_XOPEN_SOURCE=500 -D_BSD_SOURCE $CFLAGS" + CXXFLAGS="-ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wchar-subscripts $CXXFLAGS" + KDE_CHECK_COMPILER_FLAG(Wmissing-format-attribute, [CXXFLAGS="$CXXFLAGS -Wformat-security -Wmissing-format-attribute"]) + KDE_CHECK_C_COMPILER_FLAG(Wmissing-format-attribute, [CFLAGS="$CFLAGS -Wformat-security -Wmissing-format-attribute"]) + ;; + esac + KDE_CHECK_COMPILER_FLAG(Wundef,[CXXFLAGS="-Wundef $CXXFLAGS"]) + KDE_CHECK_COMPILER_FLAG(Wno-long-long,[CXXFLAGS="-Wno-long-long $CXXFLAGS"]) + dnl ### FIXME: revert for KDE 4 + KDE_CHECK_COMPILER_FLAG(Wno-non-virtual-dtor,[CXXFLAGS="$CXXFLAGS -Wno-non-virtual-dtor"]) + fi + fi + + if test "$GXX" = "yes" && test "$kde_use_strict_options" = "yes"; then + CXXFLAGS="-Wcast-qual -Wshadow -Wcast-align $CXXFLAGS" + fi + + AC_ARG_ENABLE(pch, + AC_HELP_STRING([--enable-pch], + [enables precompiled header support (currently only KCC or gcc >=3.4+unsermake) [default=no]]), + [ kde_use_pch=$enableval ],[ kde_use_pch=no ]) + + HAVE_GCC_VISIBILITY=0 + AC_SUBST([HAVE_GCC_VISIBILITY]) + + if test "$GXX" = "yes"; then + gcc_no_reorder_blocks=NO + KDE_CHECK_COMPILER_FLAG(fno-reorder-blocks,[gcc_no_reorder_blocks=YES]) + if test $kde_use_debug_code != "no" && \ + test $kde_use_debug_code != "full" && \ + test "YES" = "$gcc_no_reorder_blocks" ; then + CXXFLAGS="$CXXFLAGS -fno-reorder-blocks" + CFLAGS="$CFLAGS -fno-reorder-blocks" + fi + KDE_CHECK_COMPILER_FLAG(fno-exceptions,[CXXFLAGS="$CXXFLAGS -fno-exceptions"]) + KDE_CHECK_COMPILER_FLAG(fno-check-new, [CXXFLAGS="$CXXFLAGS -fno-check-new"]) + KDE_CHECK_COMPILER_FLAG(fno-common, [CXXFLAGS="$CXXFLAGS -fno-common"]) + KDE_CHECK_COMPILER_FLAG(fexceptions, [USE_EXCEPTIONS="-fexceptions"], USE_EXCEPTIONS= ) + ENABLE_PERMISSIVE_FLAG="-fpermissive" + + if test "$kde_use_pch" = "yes"; then + AC_MSG_CHECKING(whether gcc supports precompiling c header files) + echo >conftest.h + if $CC -x c-header conftest.h >/dev/null 2>/dev/null; then + kde_gcc_supports_pch=yes + AC_MSG_RESULT(yes) + else + kde_gcc_supports_pch=no + AC_MSG_RESULT(no) + fi + if test "$kde_gcc_supports_pch" = "yes"; then + AC_MSG_CHECKING(whether gcc supports precompiling c++ header files) + if $CXX -x c++-header conftest.h >/dev/null 2>/dev/null; then + kde_gcc_supports_pch=yes + AC_MSG_RESULT(yes) + else + kde_gcc_supports_pch=no + AC_MSG_RESULT(no) + fi + fi + rm -f conftest.h conftest.h.gch + fi + + KDE_CHECK_FOR_OPT_NOINLINE_MATCH + if test "x$kde_cv_opt_noinline_match" = "xno" ; then + CFLAGS="`echo "$CFLAGS" | sed "s/ -fno-inline//"`" + fi + fi + AM_CONDITIONAL(unsermake_enable_pch, test "$kde_use_pch" = "yes" && test "$kde_gcc_supports_pch" = "yes") + if test "$CXX" = "KCC"; then + dnl unfortunately we currently cannot disable exception support in KCC + dnl because doing so is binary incompatible and Qt by default links with exceptions :-( + dnl KDE_CHECK_COMPILER_FLAG(-no_exceptions,[CXXFLAGS="$CXXFLAGS --no_exceptions"]) + dnl KDE_CHECK_COMPILER_FLAG(-exceptions, [USE_EXCEPTIONS="--exceptions"], USE_EXCEPTIONS= ) + + if test "$kde_use_pch" = "yes"; then + dnl TODO: support --pch-dir! + KDE_CHECK_COMPILER_FLAG(-pch,[CXXFLAGS="$CXXFLAGS --pch"]) + dnl the below works (but the dir must exist), but it's + dnl useless for a whole package. + dnl The are precompiled headers for each source file, so when compiling + dnl from scratch, it doesn't make a difference, and they take up + dnl around ~5Mb _per_ sourcefile. + dnl KDE_CHECK_COMPILER_FLAG(-pch_dir /tmp, + dnl [CXXFLAGS="$CXXFLAGS --pch_dir `pwd`/pcheaders"]) + fi + dnl this flag controls inlining. by default KCC inlines in optimisation mode + dnl all implementations that are defined inside the class {} declaration. + dnl because of templates-compatibility with broken gcc compilers, this + dnl can cause excessive inlining. This flag limits it to a sane level + KDE_CHECK_COMPILER_FLAG(-inline_keyword_space_time=6,[CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6"]) + KDE_CHECK_COMPILER_FLAG(-inline_auto_space_time=2,[CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2"]) + KDE_CHECK_COMPILER_FLAG(-inline_implicit_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0"]) + KDE_CHECK_COMPILER_FLAG(-inline_generated_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0"]) + dnl Some source files are shared between multiple executables + dnl (or libraries) and some of those need template instantiations. + dnl In that case KCC needs to compile those sources with + dnl --one_instantiation_per_object. To make it easy for us we compile + dnl _all_ objects with that flag (--one_per is a shorthand). + KDE_CHECK_COMPILER_FLAG(-one_per, [CXXFLAGS="$CXXFLAGS --one_per"]) + fi + AC_SUBST(USE_EXCEPTIONS) + dnl obsolete macro - provided to keep things going + USE_RTTI= + AC_SUBST(USE_RTTI) + + case "$host" in + *-*-irix*) test "$GXX" = yes && CXXFLAGS="-D_LANGUAGE_C_PLUS_PLUS -D__LANGUAGE_C_PLUS_PLUS $CXXFLAGS" ;; + *-*-sysv4.2uw*) CXXFLAGS="-D_UNIXWARE $CXXFLAGS";; + *-*-sysv5uw7*) CXXFLAGS="-D_UNIXWARE7 $CXXFLAGS";; + *-*-solaris*) + if test "$GXX" = yes; then + libstdcpp=`$CXX -print-file-name=libstdc++.so` + if test ! -f $libstdcpp; then + AC_MSG_ERROR([You've compiled gcc without --enable-shared. This doesn't work with KDE. Please recompile gcc with --enable-shared to receive a libstdc++.so]) + fi + fi + ;; + esac + + AC_VALIDIFY_CXXFLAGS + + AC_PROG_CXXCPP + + if test "$GCC" = yes; then + NOOPT_CFLAGS=-O0 + fi + KDE_CHECK_COMPILER_FLAG(O0,[NOOPT_CXXFLAGS=-O0]) + + AC_ARG_ENABLE(coverage, + AC_HELP_STRING([--enable-coverage],[use gcc coverage testing]), [ + if test "$am_cv_CC_dependencies_compiler_type" = "gcc3"; then + ac_coverage_compiler="-fprofile-arcs -ftest-coverage" + ac_coverage_linker="-lgcc" + elif test "$am_cv_CC_dependencies_compiler_type" = "gcc"; then + ac_coverage_compiler="-fprofile-arcs -ftest-coverage" + ac_coverage_linker="" + else + AC_MSG_ERROR([coverage with your compiler is not supported]) + fi + CFLAGS="$CFLAGS $ac_coverage_compiler" + CXXFLAGS="$CXXFLAGS $ac_coverage_compiler" + LDFLAGS="$LDFLAGS $ac_coverage_linker" + ]) + + AC_SUBST(NOOPT_CXXFLAGS) + AC_SUBST(NOOPT_CFLAGS) + AC_SUBST(ENABLE_PERMISSIVE_FLAG) + + KDE_CHECK_NEW_LDFLAGS + KDE_CHECK_FINAL + KDE_CHECK_CLOSURE + KDE_CHECK_NMCHECK + + ifdef([AM_DEPENDENCIES], AC_REQUIRE([KDE_ADD_DEPENDENCIES]), []) +]) + +AC_DEFUN([KDE_CHECK_VISIBILITY_GCC_BUG], + [ + AC_CACHE_CHECK([for gcc -fvisibility-inlines-hidden bug], kde_cv_val_gcc_visibility_bug, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + safe_CXXFLAGS=$CXXFLAGS + safe_LDFLAGS=$LDFLAGS + CXXFLAGS="$CXXFLAGS -fPIC -fvisibility-inlines-hidden -O0" + LDFLAGS="$LDFLAGS -shared -fPIC" + + AC_TRY_LINK( + [ + /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19664 */ + #include + int some_function( void ) __attribute__ ((visibility("default"))); + int some_function( void ) + { + std::string s("blafasel"); + return 0; + } + ], [/* elvis is alive */], + kde_cv_val_gcc_visibility_bug=no, kde_cv_val_gcc_visibility_bug=yes) + + CXXFLAGS=$safe_CXXFLAGS + LDFLAGS=$safe_LDFLAGS + AC_LANG_RESTORE + ] + ) + + if test x$kde_cv_val_gcc_visibility_bug = xno; then + CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden" + fi + ] +) + +AC_DEFUN([KDE_ENABLE_HIDDEN_VISIBILITY], +[ + AC_BEFORE([AC_PATH_QT_1_3], [KDE_ENABLE_HIDDEN_VISIBILITY]) + + AC_MSG_CHECKING([grepping for visibility push/pop in headers]) + + if test "x$GXX" = "xyes"; then + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_EGREP_CPP( + [GCC visibility push], + [ #include + ], + [ + AC_MSG_RESULT(yes) + kde_stdc_visibility_patched=yes ], + [ + AC_MSG_RESULT(no) + AC_MSG_WARN([Your libstdc++ doesn't appear to be patched for + visibility support. Disabling -fvisibility=hidden]) + + kde_stdc_visibility_patched=no ]) + + AC_LANG_RESTORE + + kde_have_gcc_visibility=no + KDE_CHECK_COMPILER_FLAG(fvisibility=hidden, + [ + kde_have_gcc_visibility=yes + dnl the whole toolchain is just a mess, gcc is just too buggy + dnl to handle STL with visibility enabled. Lets reconsider + dnl when gcc 4.2 is out or when things get fixed in the compiler. + dnl Contact mueller@kde.org for details. + AC_ARG_ENABLE(gcc-hidden-visibility, + AC_HELP_STRING([--enable-gcc-hidden-visibility],[toolchain hidden visibility [default=no]]), + [kde_have_gcc_visibility=$enableval], + [kde_have_gcc_visibility=no]) + + AC_CACHE_CHECK([if Qt is patched for -fvisibility], kde_cv_val_qt_gcc_visibility_patched, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + safe_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $all_includes" + + AC_TRY_COMPILE( + [ +#include +#if Q_EXPORT - 0 != 0 +/* if this compiles, then Q_EXPORT is undefined */ +/* if Q_EXPORT is nonempty, this will break compilation */ +#endif + ], [/* elvis is alive */], + kde_cv_val_qt_gcc_visibility_patched=no, kde_cv_val_qt_gcc_visibility_patched=yes) + + CXXFLAGS=$safe_CXXFLAGS + AC_LANG_RESTORE + ] + ) + + if test x$kde_have_gcc_visibility = "xyes" && test x$kde_stdc_visibility_patched = "xyes" && test x$kde_cv_val_qt_gcc_visibility_patched = "xyes"; then + CXXFLAGS="$CXXFLAGS -fvisibility=hidden" + KDE_CHECK_VISIBILITY_GCC_BUG + HAVE_GCC_VISIBILITY=1 + AC_DEFINE_UNQUOTED(__KDE_HAVE_GCC_VISIBILITY, "$HAVE_GCC_VISIBILITY", [define to 1 if -fvisibility is supported]) + fi + ]) + fi +]) + +AC_DEFUN([KDE_ADD_DEPENDENCIES], +[ + [A]M_DEPENDENCIES(CC) + [A]M_DEPENDENCIES(CXX) +]) + +dnl just a wrapper to clean up configure.in +AC_DEFUN([KDE_PROG_LIBTOOL], +[ +AC_REQUIRE([AC_CHECK_COMPILERS]) +AC_REQUIRE([AC_ENABLE_SHARED]) +AC_REQUIRE([AC_ENABLE_STATIC]) + +AC_REQUIRE([AC_LIBTOOL_DLOPEN]) +AC_REQUIRE([KDE_CHECK_LIB64]) + +AC_OBJEXT +AC_EXEEXT + +AM_PROG_LIBTOOL +AC_LIBTOOL_CXX + +LIBTOOL_SHELL="/bin/sh ./libtool" +# LIBTOOL="$LIBTOOL --silent" +KDE_PLUGIN="-avoid-version -module -no-undefined \$(KDE_NO_UNDEFINED) \$(KDE_RPATH) \$(KDE_MT_LDFLAGS)" +AC_SUBST(KDE_PLUGIN) + +# This hack ensures that libtool creates shared libs for kunittest plugins. By default check_LTLIBRARIES makes static libs. +KDE_CHECK_PLUGIN="\$(KDE_PLUGIN) -rpath \$(libdir)" +AC_SUBST(KDE_CHECK_PLUGIN) + +# we patch configure quite some so we better keep that consistent for incremental runs +AC_SUBST(AUTOCONF,'$(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure') +]) + +AC_DEFUN([KDE_CHECK_LIB64], +[ + AC_ARG_ENABLE(libsuffix, + AC_HELP_STRING([--enable-libsuffix], + [/lib directory suffix (64,32,none,auto[=default])]), + kdelibsuff=$enableval, kdelibsuff="auto") + + if test "$kdelibsuff" = "auto"; then + +cat > conftest.c << EOF +#include +int main() { + return 0; +} +EOF + kdelibsuff=`$CC conftest.c -o conftest.out; ldd conftest.out |sed -ne '/libc.so/{ + s,.*/lib\([[^\/]]*\)/.*,\1, + p +}'` + rm -rf conftest.* + fi + + if test "$kdelibsuff" = "no" || test "$kdelibsuff" = "none"; then + kdelibsuff= + fi + if test -z "$kdelibsuff"; then + AC_MSG_RESULT([not using lib directory suffix]) + AC_DEFINE(KDELIBSUFF, [""], Suffix for lib directories) + else + if test "$libdir" = '${exec_prefix}/lib'; then + libdir="$libdir${kdelibsuff}" + AC_SUBST([libdir], ["$libdir"]) dnl ugly hack for lib64 platforms + fi + AC_DEFINE_UNQUOTED(KDELIBSUFF, ["${kdelibsuff}"], Suffix for lib directories) + AC_MSG_RESULT([using lib directory suffix $kdelibsuff]) + fi +]) + +AC_DEFUN([KDE_CHECK_TYPES], +[ AC_CHECK_SIZEOF(int, 4)dnl + AC_CHECK_SIZEOF(short)dnl + AC_CHECK_SIZEOF(long, 4)dnl + AC_CHECK_SIZEOF(char *, 4)dnl +])dnl + +dnl Not used - kept for compat only? +AC_DEFUN([KDE_DO_IT_ALL], +[ +AC_CANONICAL_SYSTEM +AC_ARG_PROGRAM +AM_INIT_AUTOMAKE($1, $2) +AM_DISABLE_LIBRARIES +AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde}) +AC_CHECK_COMPILERS +KDE_PROG_LIBTOOL +AM_KDE_WITH_NLS +AC_PATH_KDE +]) + +AC_DEFUN([AC_CHECK_RPATH], +[ +AC_MSG_CHECKING(for rpath) +AC_ARG_ENABLE(rpath, + AC_HELP_STRING([--disable-rpath],[do not use the rpath feature of ld]), + USE_RPATH=$enableval, USE_RPATH=yes) + +if test -z "$KDE_RPATH" && test "$USE_RPATH" = "yes"; then + + KDE_RPATH="-R \$(libdir)" + + if test "$kde_libraries" != "$libdir"; then + KDE_RPATH="$KDE_RPATH -R \$(kde_libraries)" + fi + + if test -n "$qt_libraries"; then + KDE_RPATH="$KDE_RPATH -R \$(qt_libraries)" + fi + dnl $x_libraries is set to /usr/lib in case + if test -n "$X_LDFLAGS"; then + X_RPATH="-R \$(x_libraries)" + KDE_RPATH="$KDE_RPATH $X_RPATH" + fi + if test -n "$KDE_EXTRA_RPATH"; then + KDE_RPATH="$KDE_RPATH \$(KDE_EXTRA_RPATH)" + fi +fi +AC_SUBST(KDE_EXTRA_RPATH) +AC_SUBST(KDE_RPATH) +AC_SUBST(X_RPATH) +AC_MSG_RESULT($USE_RPATH) +]) + +dnl Check for the type of the third argument of getsockname +AC_DEFUN([AC_CHECK_SOCKLEN_T], +[ + AC_MSG_CHECKING(for socklen_t) + AC_CACHE_VAL(kde_cv_socklen_t, + [ + AC_LANG_PUSH(C++) + kde_cv_socklen_t=no + AC_TRY_COMPILE([ + #include + #include + ], + [ + socklen_t len; + getpeername(0,0,&len); + ], + [ + kde_cv_socklen_t=yes + kde_cv_socklen_t_equiv=socklen_t + ]) + AC_LANG_POP(C++) + ]) + AC_MSG_RESULT($kde_cv_socklen_t) + if test $kde_cv_socklen_t = no; then + AC_MSG_CHECKING([for socklen_t equivalent for socket functions]) + AC_CACHE_VAL(kde_cv_socklen_t_equiv, + [ + kde_cv_socklen_t_equiv=int + AC_LANG_PUSH(C++) + for t in int size_t unsigned long "unsigned long"; do + AC_TRY_COMPILE([ + #include + #include + ], + [ + $t len; + getpeername(0,0,&len); + ], + [ + kde_cv_socklen_t_equiv="$t" + break + ]) + done + AC_LANG_POP(C++) + ]) + AC_MSG_RESULT($kde_cv_socklen_t_equiv) + fi + AC_DEFINE_UNQUOTED(kde_socklen_t, $kde_cv_socklen_t_equiv, + [type to use in place of socklen_t if not defined]) + AC_DEFINE_UNQUOTED(ksize_t, $kde_cv_socklen_t_equiv, + [type to use in place of socklen_t if not defined (deprecated, use kde_socklen_t)]) +]) + +dnl This is a merge of some macros out of the gettext aclocal.m4 +dnl since we don't need anything, I took the things we need +dnl the copyright for them is: +dnl > +dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +dnl This Makefile.in is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. +dnl > +dnl for this file it is relicensed under LGPL + +AC_DEFUN([AM_KDE_WITH_NLS], + [ + dnl If we use NLS figure out what method + + AM_PATH_PROG_WITH_TEST_KDE(MSGFMT, msgfmt, + [test -n "`$ac_dir/$ac_word --version 2>&1 | grep 'GNU gettext'`"], msgfmt) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + if test -z "`$GMSGFMT --version 2>&1 | grep 'GNU gettext'`"; then + AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + MSGFMT=$GMSGFMT + AC_SUBST(GMSGFMT) + AC_SUBST(MSGFMT) + + AM_PATH_PROG_WITH_TEST_KDE(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext programs is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + AC_SUBST(XGETTEXT) + + ]) + +# Search path for a program which passes the given test. +# Ulrich Drepper , 1996. + +# serial 1 +# Stephan Kulow: I appended a _KDE against name conflicts + +dnl AM_PATH_PROG_WITH_TEST_KDE(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST_KDE], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test -n "[$]$1"; then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + + +# Check whether LC_MESSAGES is available in . +# Ulrich Drepper , 1995. + +# serial 1 + +AC_DEFUN([AM_LC_MESSAGES], + [if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your locale.h file contains LC_MESSAGES]) + fi + fi]) + +dnl From Jim Meyering. +dnl FIXME: migrate into libit. + +AC_DEFUN([AM_FUNC_OBSTACK], +[AC_CACHE_CHECK([for obstacks], am_cv_func_obstack, + [AC_TRY_LINK([#include "obstack.h"], + [struct obstack *mem;obstack_free(mem,(char *) 0)], + am_cv_func_obstack=yes, + am_cv_func_obstack=no)]) + if test $am_cv_func_obstack = yes; then + AC_DEFINE(HAVE_OBSTACK) + else + LIBOBJS="$LIBOBJS obstack.o" + fi +]) + +dnl From Jim Meyering. Use this if you use the GNU error.[ch]. +dnl FIXME: Migrate into libit + +AC_DEFUN([AM_FUNC_ERROR_AT_LINE], +[AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line, + [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");], + am_cv_lib_error_at_line=yes, + am_cv_lib_error_at_line=no)]) + if test $am_cv_lib_error_at_line = no; then + LIBOBJS="$LIBOBJS error.o" + fi + AC_SUBST(LIBOBJS)dnl +]) + +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995. + +# serial 1 +# Stephan Kulow: I put a KDE in it to avoid name conflicts + +AC_DEFUN([AM_KDE_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([AM_KDE_WITH_NLS])dnl + AC_CHECK_HEADERS([limits.h locale.h nl_types.h string.h values.h alloca.h]) + AC_CHECK_FUNCS([getcwd munmap putenv setlocale strchr strcasecmp \ +__argz_count __argz_stringify __argz_next]) + + AC_MSG_CHECKING(for stpcpy) + AC_CACHE_VAL(kde_cv_func_stpcpy, + [ + kde_safe_cxxflags=$CXXFLAGS + CXXFLAGS="-Werror" + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([ + #include + ], + [ + char buffer[200]; + stpcpy(buffer, buffer); + ], + kde_cv_func_stpcpy=yes, + kde_cv_func_stpcpy=no) + AC_LANG_RESTORE + CXXFLAGS=$kde_safe_cxxflags + ]) + AC_MSG_RESULT($kde_cv_func_stpcpy) + if eval "test \"`echo $kde_cv_func_stpcpy`\" = yes"; then + AC_DEFINE(HAVE_STPCPY, 1, [Define if you have stpcpy]) + fi + + AM_LC_MESSAGES + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in + *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; + esac + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + ]) + +AC_DEFUN([AC_HAVE_XPM], + [AC_REQUIRE_CPP()dnl + AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + + test -z "$XPM_LDFLAGS" && XPM_LDFLAGS= + test -z "$XPM_INCLUDE" && XPM_INCLUDE= + + AC_ARG_WITH(xpm,AC_HELP_STRING([--without-xpm],[disable color pixmap XPM tests]), + xpm_test=$withval, xpm_test="yes") + if test "x$xpm_test" = xno; then + ac_cv_have_xpm=no + else + AC_MSG_CHECKING(for XPM) + AC_CACHE_VAL(ac_cv_have_xpm, + [ + ac_save_ldflags="$LDFLAGS" + ac_save_cflags="$CFLAGS" + if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then + LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm -lX11 -lXext $LIBZ $LIBSOCKET" + else + LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm $LIBZ $LIBSOCKET" + fi + CFLAGS="$CFLAGS $X_INCLUDES $USER_INCLUDES" + test -n "$XPM_INCLUDE" && CFLAGS="-I$XPM_INCLUDE $CFLAGS" + AC_TRY_LINK([#include ],[], + ac_cv_have_xpm="yes",ac_cv_have_xpm="no") + LDFLAGS="$ac_save_ldflags" + CFLAGS="$ac_save_cflags" + ])dnl + + if test "$ac_cv_have_xpm" = no; then + AC_MSG_RESULT(no) + XPM_LDFLAGS="" + XPMINC="" + $2 + else + AC_DEFINE(HAVE_XPM, 1, [Define if you have XPM support]) + if test "$XPM_LDFLAGS" = ""; then + XPMLIB='-lXpm $(LIB_X11)' + else + XPMLIB="-L$XPM_LDFLAGS -lXpm "'$(LIB_X11)' + fi + if test "$XPM_INCLUDE" = ""; then + XPMINC="" + else + XPMINC="-I$XPM_INCLUDE" + fi + AC_MSG_RESULT(yes) + $1 + fi + fi + AC_SUBST(XPMINC) + AC_SUBST(XPMLIB) +]) + +AC_DEFUN([AC_HAVE_DPMS], + [AC_REQUIRE_CPP()dnl + AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + + test -z "$DPMS_LDFLAGS" && DPMS_LDFLAGS= + test -z "$DPMS_INCLUDE" && DPMS_INCLUDE= + DPMS_LIB= + + AC_ARG_WITH(dpms,AC_HELP_STRING([--without-dpms],[disable DPMS power saving]), + dpms_test=$withval, dpms_test="yes") + if test "x$dpms_test" = xno; then + ac_cv_have_dpms=no + else + AC_MSG_CHECKING(for DPMS) + dnl Note: ac_cv_have_dpms can be no, yes, or -lXdpms. + dnl 'yes' means DPMS_LIB="", '-lXdpms' means DPMS_LIB="-lXdpms". + AC_CACHE_VAL(ac_cv_have_dpms, + [ + if test "x$kde_use_qt_emb" = "xyes" || test "x$kde_use_qt_mac" = "xyes"; then + AC_MSG_RESULT(no) + ac_cv_have_dpms="no" + else + ac_save_ldflags="$LDFLAGS" + ac_save_cflags="$CFLAGS" + ac_save_libs="$LIBS" + LDFLAGS="$LDFLAGS $DPMS_LDFLAGS $all_libraries" + LIBS="-lX11 -lXext $LIBSOCKET" + CFLAGS="$CFLAGS $X_INCLUDES" + test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS" + AC_TRY_LINK([ + #include + #include + #include + #include + int foo_test_dpms() + { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[], + ac_cv_have_dpms="yes", [ + LIBS="-lXdpms $LIBS" + AC_TRY_LINK([ + #include + #include + #include + #include + int foo_test_dpms() + { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[], + [ + ac_cv_have_dpms="-lXdpms" + ],ac_cv_have_dpms="no") + ]) + LDFLAGS="$ac_save_ldflags" + CFLAGS="$ac_save_cflags" + LIBS="$ac_save_libs" + fi + ])dnl + + if test "$ac_cv_have_dpms" = no; then + AC_MSG_RESULT(no) + DPMS_LDFLAGS="" + DPMSINC="" + $2 + else + AC_DEFINE(HAVE_DPMS, 1, [Define if you have DPMS support]) + if test "$ac_cv_have_dpms" = "-lXdpms"; then + DPMS_LIB="-lXdpms" + fi + if test "$DPMS_LDFLAGS" = ""; then + DPMSLIB="$DPMS_LIB "'$(LIB_X11)' + else + DPMSLIB="$DPMS_LDFLAGS $DPMS_LIB "'$(LIB_X11)' + fi + if test "$DPMS_INCLUDE" = ""; then + DPMSINC="" + else + DPMSINC="-I$DPMS_INCLUDE" + fi + AC_MSG_RESULT(yes) + $1 + fi + fi + ac_save_cflags="$CFLAGS" + CFLAGS="$CFLAGS $X_INCLUDES" + test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS" + AH_TEMPLATE(HAVE_DPMSCAPABLE_PROTO, + [Define if you have the DPMSCapable prototype in ]) + AC_CHECK_DECL(DPMSCapable, + AC_DEFINE(HAVE_DPMSCAPABLE_PROTO),, + [#include + #include ]) + AH_TEMPLATE(HAVE_DPMSINFO_PROTO, + [Define if you have the DPMSInfo prototype in ]) + AC_CHECK_DECL(DPMSInfo, + AC_DEFINE(HAVE_DPMSINFO_PROTO),, + [#include + #include ]) + CFLAGS="$ac_save_cflags" + AC_SUBST(DPMSINC) + AC_SUBST(DPMSLIB) +]) + +AC_DEFUN([AC_HAVE_GL], + [AC_REQUIRE_CPP()dnl + AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) + + test -z "$GL_LDFLAGS" && GL_LDFLAGS= + test -z "$GL_INCLUDE" && GL_INCLUDE= + + AC_ARG_WITH(gl,AC_HELP_STRING([--without-gl],[disable 3D GL modes]), + gl_test=$withval, gl_test="yes") + if test "x$kde_use_qt_emb" = "xyes"; then + # GL and Qt Embedded is a no-go for now. + ac_cv_have_gl=no + elif test "x$gl_test" = xno; then + ac_cv_have_gl=no + else + AC_MSG_CHECKING(for GL) + AC_CACHE_VAL(ac_cv_have_gl, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_ldflags=$LDFLAGS + ac_save_cxxflags=$CXXFLAGS + ac_save_libs=$LIBS + LDFLAGS="$LDFLAGS $GL_LDFLAGS $X_LDFLAGS $all_libraries" + LIBS="$LIBS -lGL -lGLU" + test "x$kde_use_qt_mac" != xyes && test "x$kde_use_qt_emb" != xyes && LIBS="$LIBS -lX11" + LIBS="$LIBS $LIB_XEXT -lm $LIBSOCKET" + CXXFLAGS="$CFLAGS $X_INCLUDES" + test -n "$GL_INCLUDE" && CFLAGS="-I$GL_INCLUDE $CFLAGS" + AC_TRY_LINK([#include +#include +], [], + ac_cv_have_gl="yes", ac_cv_have_gl="no") + AC_LANG_RESTORE + LDFLAGS=$ac_save_ldflags + CXXFLAGS=$ac_save_cxxflags + LIBS=$ac_save_libs + ])dnl + + if test "$ac_cv_have_gl" = "no"; then + AC_MSG_RESULT(no) + GL_LDFLAGS="" + GLINC="" + $2 + else + AC_DEFINE(HAVE_GL, 1, [Defines if you have GL (Mesa, OpenGL, ...)]) + if test "$GL_LDFLAGS" = ""; then + GLLIB='-lGLU -lGL $(LIB_X11)' + else + GLLIB="$GL_LDFLAGS -lGLU -lGL "'$(LIB_X11)' + fi + if test "$GL_INCLUDE" = ""; then + GLINC="" + else + GLINC="-I$GL_INCLUDE" + fi + AC_MSG_RESULT($ac_cv_have_gl) + $1 + fi + fi + AC_SUBST(GLINC) + AC_SUBST(GLLIB) +]) + + + dnl shadow password and PAM magic - maintained by ossi@kde.org + +AC_DEFUN([KDE_PAM], [ + AC_REQUIRE([KDE_CHECK_LIBDL]) + + want_pam= + AC_ARG_WITH(pam, + AC_HELP_STRING([--with-pam[=ARG]],[enable support for PAM: ARG=[yes|no|service name]]), + [ if test "x$withval" = "xyes"; then + want_pam=yes + pam_service=kde + elif test "x$withval" = "xno"; then + want_pam=no + else + want_pam=yes + pam_service=$withval + fi + ], [ pam_service=kde ]) + + use_pam= + PAMLIBS= + if test "x$want_pam" != xno; then + AC_CHECK_LIB(pam, pam_start, [ + AC_CHECK_HEADER(security/pam_appl.h, + [ pam_header=security/pam_appl.h ], + [ AC_CHECK_HEADER(pam/pam_appl.h, + [ pam_header=pam/pam_appl.h ], + [ + AC_MSG_WARN([PAM detected, but no headers found! +Make sure you have the necessary development packages installed.]) + ] + ) + ] + ) + ], , $LIBDL) + if test -z "$pam_header"; then + if test "x$want_pam" = xyes; then + AC_MSG_ERROR([--with-pam was specified, but cannot compile with PAM!]) + fi + else + AC_DEFINE(HAVE_PAM, 1, [Defines if you have PAM (Pluggable Authentication Modules)]) + PAMLIBS="$PAM_MISC_LIB -lpam $LIBDL" + use_pam=yes + + dnl darwin claims to be something special + if test "$pam_header" = "pam/pam_appl.h"; then + AC_DEFINE(HAVE_PAM_PAM_APPL_H, 1, [Define if your PAM headers are in pam/ instead of security/]) + fi + + dnl test whether struct pam_message is const (Linux) or not (Sun) + AC_MSG_CHECKING(for const pam_message) + AC_EGREP_HEADER([struct pam_message], $pam_header, + [ AC_EGREP_HEADER([const struct pam_message], $pam_header, + [AC_MSG_RESULT([const: Linux-type PAM])], + [AC_MSG_RESULT([nonconst: Sun-type PAM]) + AC_DEFINE(PAM_MESSAGE_NONCONST, 1, [Define if your PAM support takes non-const arguments (Solaris)])] + )], + [AC_MSG_RESULT([not found - assume const, Linux-type PAM])]) + fi + fi + + AC_SUBST(PAMLIBS) +]) + +dnl DEF_PAM_SERVICE(arg name, full name, define name) +AC_DEFUN([DEF_PAM_SERVICE], [ + AC_ARG_WITH($1-pam, + AC_HELP_STRING([--with-$1-pam=[val]],[override PAM service from --with-pam for $2]), + [ if test "x$use_pam" = xyes; then + $3_PAM_SERVICE=$withval + else + AC_MSG_ERROR([Cannot use use --with-$1-pam, as no PAM was detected. +You may want to enforce it by using --with-pam.]) + fi + ], + [ if test "x$use_pam" = xyes; then + $3_PAM_SERVICE="$pam_service" + fi + ]) + if test -n "$$3_PAM_SERVICE"; then + AC_MSG_RESULT([The PAM service used by $2 will be $$3_PAM_SERVICE]) + AC_DEFINE_UNQUOTED($3_PAM_SERVICE, "$$3_PAM_SERVICE", [The PAM service to be used by $2]) + fi + AC_SUBST($3_PAM_SERVICE) +]) + +AC_DEFUN([KDE_SHADOWPASSWD], [ + AC_REQUIRE([KDE_PAM]) + + AC_CHECK_LIB(shadow, getspent, + [ LIBSHADOW="-lshadow" + ac_use_shadow=yes + ], + [ dnl for UnixWare + AC_CHECK_LIB(gen, getspent, + [ LIBGEN="-lgen" + ac_use_shadow=yes + ], + [ AC_CHECK_FUNC(getspent, + [ ac_use_shadow=yes ], + [ ac_use_shadow=no ]) + ]) + ]) + AC_SUBST(LIBSHADOW) + AC_SUBST(LIBGEN) + + AC_MSG_CHECKING([for shadow passwords]) + + AC_ARG_WITH(shadow, + AC_HELP_STRING([--with-shadow],[If you want shadow password support]), + [ if test "x$withval" != "xno"; then + use_shadow=yes + else + use_shadow=no + fi + ], [ + use_shadow="$ac_use_shadow" + ]) + + if test "x$use_shadow" = xyes; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SHADOW, 1, [Define if you use shadow passwords]) + else + AC_MSG_RESULT(no) + LIBSHADOW= + LIBGEN= + fi + + dnl finally make the relevant binaries setuid root, if we have shadow passwds. + dnl this still applies, if we could use it indirectly through pam. + if test "x$use_shadow" = xyes || + ( test "x$use_pam" = xyes && test "x$ac_use_shadow" = xyes ); then + case $host in + *-*-freebsd* | *-*-netbsd* | *-*-openbsd*) + SETUIDFLAGS="-m 4755 -o root";; + *) + SETUIDFLAGS="-m 4755";; + esac + fi + AC_SUBST(SETUIDFLAGS) + +]) + +AC_DEFUN([KDE_PASSWDLIBS], [ + AC_REQUIRE([KDE_MISC_TESTS]) dnl for LIBCRYPT + AC_REQUIRE([KDE_PAM]) + AC_REQUIRE([KDE_SHADOWPASSWD]) + + if test "x$use_pam" = "xyes"; then + PASSWDLIBS="$PAMLIBS" + else + PASSWDLIBS="$LIBCRYPT $LIBSHADOW $LIBGEN" + fi + + dnl FreeBSD uses a shadow-like setup, where /etc/passwd holds the users, but + dnl /etc/master.passwd holds the actual passwords. /etc/master.passwd requires + dnl root to read, so kcheckpass needs to be root (even when using pam, since pam + dnl may need to read /etc/master.passwd). + case $host in + *-*-freebsd*) + SETUIDFLAGS="-m 4755 -o root" + ;; + *) + ;; + esac + + AC_SUBST(PASSWDLIBS) +]) + +AC_DEFUN([KDE_CHECK_LIBDL], +[ +AC_CHECK_LIB(dl, dlopen, [ +LIBDL="-ldl" +ac_cv_have_dlfcn=yes +]) + +AC_CHECK_LIB(dld, shl_unload, [ +LIBDL="-ldld" +ac_cv_have_shload=yes +]) + +AC_SUBST(LIBDL) +]) + +AC_DEFUN([KDE_CHECK_DLOPEN], +[ +KDE_CHECK_LIBDL +AC_CHECK_HEADERS(dlfcn.h dl.h) +if test "$ac_cv_header_dlfcn_h" = "no"; then + ac_cv_have_dlfcn=no +fi + +if test "$ac_cv_header_dl_h" = "no"; then + ac_cv_have_shload=no +fi + +dnl XXX why change enable_dlopen? its already set by autoconf's AC_ARG_ENABLE +dnl (MM) +AC_ARG_ENABLE(dlopen, +AC_HELP_STRING([--disable-dlopen],[link statically [default=no]]), +enable_dlopen=$enableval, +enable_dlopen=yes) + +# override the user's opinion, if we know it better ;) +if test "$ac_cv_have_dlfcn" = "no" && test "$ac_cv_have_shload" = "no"; then + enable_dlopen=no +fi + +if test "$ac_cv_have_dlfcn" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_DLFCN, 1, [Define if you have dlfcn]) +fi + +if test "$ac_cv_have_shload" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_SHLOAD, 1, [Define if you have shload]) +fi + +if test "$enable_dlopen" = no ; then + test -n "$1" && eval $1 +else + test -n "$2" && eval $2 +fi + +]) + +AC_DEFUN([KDE_CHECK_DYNAMIC_LOADING], +[ +KDE_CHECK_DLOPEN(libtool_enable_shared=yes, libtool_enable_static=no) +KDE_PROG_LIBTOOL +AC_MSG_CHECKING([dynamic loading]) +eval "`egrep '^build_libtool_libs=' libtool`" +if test "$build_libtool_libs" = "yes" && test "$enable_dlopen" = "yes"; then + dynamic_loading=yes + AC_DEFINE_UNQUOTED(HAVE_DYNAMIC_LOADING) +else + dynamic_loading=no +fi +AC_MSG_RESULT($dynamic_loading) +if test "$dynamic_loading" = "yes"; then + $1 +else + $2 +fi +]) + +AC_DEFUN([KDE_ADD_INCLUDES], +[ +if test -z "$1"; then + test_include="Pix.h" +else + test_include="$1" +fi + +AC_MSG_CHECKING([for libg++ ($test_include)]) + +AC_CACHE_VAL(kde_cv_libgpp_includes, +[ +kde_cv_libgpp_includes=no + + for ac_dir in \ + \ + /usr/include/g++ \ + /usr/include \ + /usr/unsupported/include \ + /opt/include \ + $extra_include \ + ; \ + do + if test -r "$ac_dir/$test_include"; then + kde_cv_libgpp_includes=$ac_dir + break + fi + done +]) + +AC_MSG_RESULT($kde_cv_libgpp_includes) +if test "$kde_cv_libgpp_includes" != "no"; then + all_includes="-I$kde_cv_libgpp_includes $all_includes $USER_INCLUDES" +fi +]) +]) + +AC_DEFUN([KDE_CHECK_LIBPTHREAD], +[ + dnl This code is here specifically to handle the + dnl various flavors of threading library on FreeBSD + dnl 4-, 5-, and 6-, and the (weird) rules around it. + dnl There may be an environment PTHREAD_LIBS that + dnl specifies what to use; otherwise, search for it. + dnl -pthread is special cased and unsets LIBPTHREAD + dnl below if found. + LIBPTHREAD="" + + if test -n "$PTHREAD_LIBS"; then + if test "x$PTHREAD_LIBS" = "x-pthread" ; then + LIBPTHREAD="PTHREAD" + else + PTHREAD_LIBS_save="$PTHREAD_LIBS" + PTHREAD_LIBS=`echo "$PTHREAD_LIBS_save" | sed -e 's,^-l,,g'` + AC_MSG_CHECKING([for pthread_create in $PTHREAD_LIBS]) + KDE_CHECK_LIB($PTHREAD_LIBS, pthread_create, [ + LIBPTHREAD="$PTHREAD_LIBS_save"]) + PTHREAD_LIBS="$PTHREAD_LIBS_save" + fi + fi + + dnl Is this test really needed, in the face of the Tru64 test below? + if test -z "$LIBPTHREAD"; then + AC_CHECK_LIB(pthread, pthread_create, [LIBPTHREAD="-lpthread"]) + fi + + dnl This is a special Tru64 check, see BR 76171 issue #18. + if test -z "$LIBPTHREAD" ; then + AC_MSG_CHECKING([for pthread_create in -lpthread]) + kde_safe_libs=$LIBS + LIBS="$LIBS -lpthread" + AC_TRY_LINK([#include ],[(void)pthread_create(0,0,0,0);],[ + AC_MSG_RESULT(yes) + LIBPTHREAD="-lpthread"],[ + AC_MSG_RESULT(no)]) + LIBS=$kde_safe_libs + fi + + dnl Un-special-case for FreeBSD. + if test "x$LIBPTHREAD" = "xPTHREAD" ; then + LIBPTHREAD="" + fi + + AC_SUBST(LIBPTHREAD) +]) + +AC_DEFUN([KDE_CHECK_PTHREAD_OPTION], +[ + USE_THREADS="" + if test -z "$LIBPTHREAD"; then + KDE_CHECK_COMPILER_FLAG(pthread, [USE_THREADS="-D_THREAD_SAFE -pthread"]) + fi + + AH_VERBATIM(__svr_define, [ +#if defined(__SVR4) && !defined(__svr4__) +#define __svr4__ 1 +#endif +]) + case $host_os in + solaris*) + KDE_CHECK_COMPILER_FLAG(mt, [USE_THREADS="-mt"]) + CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_SOLARIS -DSVR4" + ;; + freebsd*) + CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE $PTHREAD_CFLAGS" + ;; + aix*) + CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" + LIBPTHREAD="$LIBPTHREAD -lc_r" + ;; + linux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" + if test "$CXX" = "KCC"; then + CXXFLAGS="$CXXFLAGS --thread_safe" + NOOPT_CXXFLAGS="$NOOPT_CXXFLAGS --thread_safe" + fi + ;; + *) + ;; + esac + AC_SUBST(USE_THREADS) + AC_SUBST(LIBPTHREAD) +]) + +AC_DEFUN([KDE_CHECK_THREADING], +[ + AC_REQUIRE([KDE_CHECK_LIBPTHREAD]) + AC_REQUIRE([KDE_CHECK_PTHREAD_OPTION]) + dnl default is yes if libpthread is found and no if no libpthread is available + if test -z "$LIBPTHREAD"; then + if test -z "$USE_THREADS"; then + kde_check_threading_default=no + else + kde_check_threading_default=yes + fi + else + kde_check_threading_default=yes + fi + AC_ARG_ENABLE(threading,AC_HELP_STRING([--disable-threading],[disables threading even if libpthread found]), + kde_use_threading=$enableval, kde_use_threading=$kde_check_threading_default) + if test "x$kde_use_threading" = "xyes"; then + AC_DEFINE(HAVE_LIBPTHREAD, 1, [Define if you have a working libpthread (will enable threaded code)]) + fi +]) + +AC_DEFUN([KDE_TRY_LINK_PYTHON], +[ +if test "$kde_python_link_found" = no; then + +if test "$1" = normal; then + AC_MSG_CHECKING(if a Python application links) +else + AC_MSG_CHECKING(if Python depends on $2) +fi + +AC_CACHE_VAL(kde_cv_try_link_python_$1, +[ +kde_save_cflags="$CFLAGS" +CFLAGS="$CFLAGS $PYTHONINC" +kde_save_libs="$LIBS" +LIBS="$LIBS $LIBPYTHON $2 $LIBDL $LIBSOCKET" +kde_save_ldflags="$LDFLAGS" +LDFLAGS="$LDFLAGS $PYTHONLIB" + +AC_TRY_LINK( +[ +#include +],[ + PySys_SetArgv(1, 0); +], + [kde_cv_try_link_python_$1=yes], + [kde_cv_try_link_python_$1=no] +) +CFLAGS="$kde_save_cflags" +LIBS="$kde_save_libs" +LDFLAGS="$kde_save_ldflags" +]) + +if test "$kde_cv_try_link_python_$1" = "yes"; then + AC_MSG_RESULT(yes) + kde_python_link_found=yes + if test ! "$1" = normal; then + LIBPYTHON="$LIBPYTHON $2" + fi + $3 +else + AC_MSG_RESULT(no) + $4 +fi + +fi + +]) + +AC_DEFUN([KDE_CHECK_PYTHON_DIR], +[ +AC_MSG_CHECKING([for Python directory]) + +AC_CACHE_VAL(kde_cv_pythondir, +[ + if test -z "$PYTHONDIR"; then + kde_cv_pythondir=/usr/local + else + kde_cv_pythondir="$PYTHONDIR" + fi +]) + +AC_ARG_WITH(pythondir, +AC_HELP_STRING([--with-pythondir=pythondir],[use python installed in pythondir]), +[ + ac_python_dir=$withval +], ac_python_dir=$kde_cv_pythondir +) + +AC_MSG_RESULT($ac_python_dir) +]) + +AC_DEFUN([KDE_CHECK_PYTHON_INTERN], +[ +AC_REQUIRE([KDE_CHECK_LIBDL]) +AC_REQUIRE([KDE_CHECK_LIBPTHREAD]) +AC_REQUIRE([KDE_CHECK_PYTHON_DIR]) + +if test -z "$1"; then + version="1.5" +else + version="$1" +fi + +AC_MSG_CHECKING([for Python$version]) + +python_incdirs="$ac_python_dir/include /usr/include /usr/local/include/ $kde_extra_includes" +AC_FIND_FILE(Python.h, $python_incdirs, python_incdir) +if test ! -r $python_incdir/Python.h; then + AC_FIND_FILE(python$version/Python.h, $python_incdirs, python_incdir) + python_incdir=$python_incdir/python$version + if test ! -r $python_incdir/Python.h; then + python_incdir=no + fi +fi + +PYTHONINC=-I$python_incdir + +python_libdirs="$ac_python_dir/lib$kdelibsuff /usr/lib$kdelibsuff /usr/local /usr/lib$kdelibsuff $kde_extra_libs" +AC_FIND_FILE(libpython$version.so, $python_libdirs, python_libdir) +if test ! -r $python_libdir/libpython$version.so; then + AC_FIND_FILE(libpython$version.a, $python_libdirs, python_libdir) + if test ! -r $python_libdir/libpython$version.a; then + AC_FIND_FILE(python$version/config/libpython$version.a, $python_libdirs, python_libdir) + python_libdir=$python_libdir/python$version/config + if test ! -r $python_libdir/libpython$version.a; then + python_libdir=no + fi + fi +fi + +PYTHONLIB=-L$python_libdir +kde_orig_LIBPYTHON=$LIBPYTHON +if test -z "$LIBPYTHON"; then + LIBPYTHON=-lpython$version +fi + +AC_FIND_FILE(python$version/copy.py, $python_libdirs, python_moddir) +python_moddir=$python_moddir/python$version +if test ! -r $python_moddir/copy.py; then + python_moddir=no +fi + +PYTHONMODDIR=$python_moddir + +AC_MSG_RESULT(header $python_incdir library $python_libdir modules $python_moddir) + +if test x$python_incdir = xno || test x$python_libdir = xno || test x$python_moddir = xno; then + LIBPYTHON=$kde_orig_LIBPYTHON + test "x$PYTHONLIB" = "x-Lno" && PYTHONLIB="" + test "x$PYTHONINC" = "x-Ino" && PYTHONINC="" + $2 +else + dnl Note: this test is very weak + kde_python_link_found=no + KDE_TRY_LINK_PYTHON(normal) + KDE_TRY_LINK_PYTHON(m, -lm) + KDE_TRY_LINK_PYTHON(pthread, $LIBPTHREAD) + KDE_TRY_LINK_PYTHON(tcl, -ltcl) + KDE_TRY_LINK_PYTHON(db2, -ldb2) + KDE_TRY_LINK_PYTHON(m_and_thread, [$LIBPTHREAD -lm]) + KDE_TRY_LINK_PYTHON(m_and_thread_and_util, [$LIBPTHREAD -lm -lutil]) + KDE_TRY_LINK_PYTHON(m_and_thread_and_db3, [$LIBPTHREAD -lm -ldb-3 -lutil]) + KDE_TRY_LINK_PYTHON(pthread_and_db3, [$LIBPTHREAD -ldb-3]) + KDE_TRY_LINK_PYTHON(m_and_thread_and_db, [$LIBPTHREAD -lm -ldb -ltermcap -lutil]) + KDE_TRY_LINK_PYTHON(pthread_and_dl, [$LIBPTHREAD $LIBDL -lutil -lreadline -lncurses -lm]) + KDE_TRY_LINK_PYTHON(pthread_and_panel_curses, [$LIBPTHREAD $LIBDL -lm -lpanel -lcurses]) + KDE_TRY_LINK_PYTHON(m_and_thread_and_db_special, [$LIBPTHREAD -lm -ldb -lutil], [], + [AC_MSG_WARN([it seems, Python depends on another library. + Please set LIBPYTHON to '-lpython$version -lotherlib' before calling configure to fix this + and contact the authors to let them know about this problem]) + ]) + + LIBPYTHON="$LIBPYTHON $LIBDL $LIBSOCKET" + AC_SUBST(PYTHONINC) + AC_SUBST(PYTHONLIB) + AC_SUBST(LIBPYTHON) + AC_SUBST(PYTHONMODDIR) + AC_DEFINE(HAVE_PYTHON, 1, [Define if you have the development files for python]) +fi + +]) + + +AC_DEFUN([KDE_CHECK_PYTHON], +[ + KDE_CHECK_PYTHON_INTERN("2.5", + [KDE_CHECK_PYTHON_INTERN("2.4", + [KDE_CHECK_PYTHON_INTERN("2.3", + [KDE_CHECK_PYTHON_INTERN("2.2", + [KDE_CHECK_PYTHON_INTERN("2.1", + [KDE_CHECK_PYTHON_INTERN("2.0", + [KDE_CHECK_PYTHON_INTERN($1, $2) ]) + ]) + ]) + ]) + ]) + ]) +]) + +AC_DEFUN([KDE_CHECK_STL], +[ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="`echo $CXXFLAGS | sed s/-fno-exceptions//`" + + AC_MSG_CHECKING([if C++ programs can be compiled]) + AC_CACHE_VAL(kde_cv_stl_works, + [ + AC_TRY_COMPILE([ +#include +using namespace std; +],[ + string astring="Hallo Welt."; + astring.erase(0, 6); // now astring is "Welt" + return 0; +], kde_cv_stl_works=yes, + kde_cv_stl_works=no) +]) + + AC_MSG_RESULT($kde_cv_stl_works) + + if test "$kde_cv_stl_works" = "yes"; then + # back compatible + AC_DEFINE_UNQUOTED(HAVE_SGI_STL, 1, [Define if you have a STL implementation by SGI]) + else + AC_MSG_ERROR([Your Installation isn't able to compile simple C++ programs. +Check config.log for details - if you're using a Linux distribution you might miss +a package named similar to libstdc++-dev.]) + fi + + CXXFLAGS="$ac_save_CXXFLAGS" + AC_LANG_RESTORE +]) + +AC_DEFUN([AC_FIND_QIMGIO], + [AC_REQUIRE([AC_FIND_JPEG]) +AC_REQUIRE([KDE_CHECK_EXTRA_LIBS]) +AC_MSG_CHECKING([for qimgio]) +AC_CACHE_VAL(ac_cv_lib_qimgio, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +ac_save_LIBS="$LIBS" +ac_save_CXXFLAGS="$CXXFLAGS" +LIBS="$all_libraries -lqimgio -lpng -lz $LIBJPEG $LIBQT" +CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes" +AC_TRY_RUN(dnl +[ +#include +#include +int main() { + QString t = "hallo"; + t.fill('t'); + qInitImageIO(); +} +], + ac_cv_lib_qimgio=yes, + ac_cv_lib_qimgio=no, + ac_cv_lib_qimgio=no) +LIBS="$ac_save_LIBS" +CXXFLAGS="$ac_save_CXXFLAGS" +AC_LANG_RESTORE +])dnl +if eval "test \"`echo $ac_cv_lib_qimgio`\" = yes"; then + LIBQIMGIO="-lqimgio -lpng -lz $LIBJPEG" + AC_MSG_RESULT(yes) + AC_DEFINE_UNQUOTED(HAVE_QIMGIO, 1, [Define if you have the Qt extension qimgio available]) + AC_SUBST(LIBQIMGIO) +else + AC_MSG_RESULT(not found) +fi +]) + +AC_DEFUN([AM_DISABLE_LIBRARIES], +[ + AC_PROVIDE([AM_ENABLE_STATIC]) + AC_PROVIDE([AM_ENABLE_SHARED]) + enable_static=no + enable_shared=yes +]) + + +AC_DEFUN([AC_CHECK_UTMP_FILE], +[ + AC_MSG_CHECKING([for utmp file]) + + AC_CACHE_VAL(kde_cv_utmp_file, + [ + kde_cv_utmp_file=no + + for ac_file in \ + \ + /var/run/utmp \ + /var/adm/utmp \ + /etc/utmp \ + ; \ + do + if test -r "$ac_file"; then + kde_cv_utmp_file=$ac_file + break + fi + done + ]) + + if test "$kde_cv_utmp_file" != "no"; then + AC_DEFINE_UNQUOTED(UTMP, "$kde_cv_utmp_file", [Define the file for utmp entries]) + $1 + AC_MSG_RESULT($kde_cv_utmp_file) + else + $2 + AC_MSG_RESULT([non found]) + fi +]) + + +AC_DEFUN([KDE_CREATE_SUBDIRSLIST], +[ + +DO_NOT_COMPILE="$DO_NOT_COMPILE CVS debian bsd-port admin" +TOPSUBDIRS="" + +if test ! -s $srcdir/subdirs; then + dnl Note: Makefile.common creates subdirs, so this is just a fallback + files=`cd $srcdir && ls -1` + dirs=`for i in $files; do if test -d $i; then echo $i; fi; done` + for i in $dirs; do + echo $i >> $srcdir/subdirs + done +fi + +ac_topsubdirs= +if test -s $srcdir/inst-apps; then + ac_topsubdirs="`cat $srcdir/inst-apps`" +elif test -s $srcdir/subdirs; then + ac_topsubdirs="`cat $srcdir/subdirs`" +fi + +for i in $ac_topsubdirs; do + AC_MSG_CHECKING([if $i should be compiled]) + if test -d $srcdir/$i; then + install_it="yes" + for j in $DO_NOT_COMPILE; do + if test $i = $j; then + install_it="no" + fi + done + else + install_it="no" + fi + AC_MSG_RESULT($install_it) + vari=`echo $i | sed -e 's,[[-+.@]],_,g'` + if test $install_it = "yes"; then + TOPSUBDIRS="$TOPSUBDIRS $i" + eval "$vari""_SUBDIR_included=yes" + else + eval "$vari""_SUBDIR_included=no" + fi +done + +AC_SUBST(TOPSUBDIRS) +]) + +AC_DEFUN([KDE_CHECK_NAMESPACES], +[ +AC_MSG_CHECKING(whether C++ compiler supports namespaces) +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_TRY_COMPILE([ +], +[ +namespace Foo { + extern int i; + namespace Bar { + extern int i; + } +} + +int Foo::i = 0; +int Foo::Bar::i = 1; +],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_NAMESPACES) +], [ +AC_MSG_RESULT(no) +]) +AC_LANG_RESTORE +]) + +dnl ------------------------------------------------------------------------ +dnl Check for S_ISSOCK macro. Doesn't exist on Unix SCO. faure@kde.org +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_CHECK_S_ISSOCK], +[ +AC_MSG_CHECKING(for S_ISSOCK) +AC_CACHE_VAL(ac_cv_have_s_issock, +[ +AC_TRY_LINK( +[ +#include +], +[ +struct stat buff; +int b = S_ISSOCK( buff.st_mode ); +], +ac_cv_have_s_issock=yes, +ac_cv_have_s_issock=no) +]) +AC_MSG_RESULT($ac_cv_have_s_issock) +if test "$ac_cv_have_s_issock" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_S_ISSOCK, 1, [Define if sys/stat.h declares S_ISSOCK.]) +fi + +AH_VERBATIM(_ISSOCK, +[ +#ifndef HAVE_S_ISSOCK +#define HAVE_S_ISSOCK +#define S_ISSOCK(mode) (1==0) +#endif +]) + +]) + +dnl ------------------------------------------------------------------------ +dnl Check for MAXPATHLEN macro, defines KDEMAXPATHLEN. faure@kde.org +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([AC_CHECK_KDEMAXPATHLEN], +[ +AC_MSG_CHECKING(for MAXPATHLEN) +AC_CACHE_VAL(ac_cv_maxpathlen, +[ +cat > conftest.$ac_ext < +#endif +#include +#include +#ifndef MAXPATHLEN +#define MAXPATHLEN 1024 +#endif + +KDE_HELLO MAXPATHLEN + +EOF + +ac_try="$ac_cpp conftest.$ac_ext 2>/dev/null | grep '^KDE_HELLO' >conftest.out" + +if AC_TRY_EVAL(ac_try) && test -s conftest.out; then + ac_cv_maxpathlen=`sed 's#KDE_HELLO ##' conftest.out` +else + ac_cv_maxpathlen=1024 +fi + +rm conftest.* + +]) +AC_MSG_RESULT($ac_cv_maxpathlen) +AC_DEFINE_UNQUOTED(KDEMAXPATHLEN,$ac_cv_maxpathlen, [Define a safe value for MAXPATHLEN] ) +]) + +AC_DEFUN([KDE_CHECK_HEADER], +[ + kde_safe_cppflags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $all_includes" + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_CHECK_HEADER([$1], [$2], [$3], [$4]) + AC_LANG_RESTORE + CPPFLAGS=$kde_safe_cppflags +]) + +AC_DEFUN([KDE_CHECK_HEADERS], +[ + AH_CHECK_HEADERS([$1]) + AC_LANG_SAVE + kde_safe_cppflags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $all_includes" + AC_LANG_CPLUSPLUS + AC_CHECK_HEADERS([$1], [$2], [$3], [$4]) + CPPFLAGS=$kde_safe_cppflags + AC_LANG_RESTORE +]) + +AC_DEFUN([KDE_FAST_CONFIGURE], +[ + dnl makes configure fast (needs perl) + AC_ARG_ENABLE(fast-perl, AC_HELP_STRING([--disable-fast-perl],[disable fast Makefile generation (needs perl)]), + with_fast_perl=$enableval, with_fast_perl=yes) +]) + +AC_DEFUN([KDE_CONF_FILES], +[ + val= + if test -f $srcdir/configure.files ; then + val=`sed -e 's%^%\$(top_srcdir)/%' $srcdir/configure.files` + fi + CONF_FILES= + if test -n "$val" ; then + for i in $val ; do + CONF_FILES="$CONF_FILES $i" + done + fi + AC_SUBST(CONF_FILES) +])dnl + +dnl This sets the prefix, for arts and kdelibs +dnl Do NOT use in any other module. +dnl It only looks at --prefix, KDEDIR and falls back to /usr/local/kde +AC_DEFUN([KDE_SET_PREFIX_CORE], +[ + unset CDPATH + dnl make $KDEDIR the default for the installation + AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde}) + + if test "x$prefix" = "xNONE"; then + prefix=$ac_default_prefix + ac_configure_args="$ac_configure_args --prefix=$prefix" + fi + # And delete superfluous '/' to make compares easier + prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + + kde_libs_prefix='$(prefix)' + kde_libs_htmldir='$(kde_htmldir)' + AC_SUBST(kde_libs_prefix) + AC_SUBST(kde_libs_htmldir) + KDE_FAST_CONFIGURE + KDE_CONF_FILES +]) + + +AC_DEFUN([KDE_SET_PREFIX], +[ + unset CDPATH + dnl We can't give real code to that macro, only a value. + dnl It only matters for --help, since we set the prefix in this function anyway. + AC_PREFIX_DEFAULT(${KDEDIR:-the kde prefix}) + + KDE_SET_DEFAULT_BINDIRS + if test "x$prefix" = "xNONE"; then + dnl no prefix given: look for kde-config in the PATH and deduce the prefix from it + KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend) + else + dnl prefix given: look for kde-config, preferrably in prefix, otherwise in PATH + kde_save_PATH="$PATH" + PATH="$exec_prefix/bin:$prefix/bin:$PATH" + KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend) + PATH="$kde_save_PATH" + fi + + kde_libs_prefix=`$KDECONFIG --prefix` + if test -z "$kde_libs_prefix" || test ! -x "$kde_libs_prefix"; then + AC_MSG_ERROR([$KDECONFIG --prefix outputed the non existant prefix '$kde_libs_prefix' for kdelibs. + This means it has been moved since you installed it. + This won't work. Please recompile kdelibs for the new prefix. + ]) + fi + kde_libs_htmldir=`$KDECONFIG --install html --expandvars` + + AC_MSG_CHECKING([where to install]) + if test "x$prefix" = "xNONE"; then + prefix=$kde_libs_prefix + AC_MSG_RESULT([$prefix (as returned by kde-config)]) + else + dnl --prefix was given. Compare prefixes and warn (in configure.in.bot.end) if different + given_prefix=$prefix + AC_MSG_RESULT([$prefix (as requested)]) + fi + + # And delete superfluous '/' to make compares easier + prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + given_prefix=`echo "$given_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + + AC_SUBST(KDECONFIG) + AC_SUBST(kde_libs_prefix) + AC_SUBST(kde_libs_htmldir) + + KDE_FAST_CONFIGURE + KDE_CONF_FILES +]) + +pushdef([AC_PROG_INSTALL], +[ + dnl our own version, testing for a -p flag + popdef([AC_PROG_INSTALL]) + dnl as AC_PROG_INSTALL works as it works we first have + dnl to save if the user didn't specify INSTALL, as the + dnl autoconf one overwrites INSTALL and we have no chance to find + dnl out afterwards + test -n "$INSTALL" && kde_save_INSTALL_given=$INSTALL + test -n "$INSTALL_PROGRAM" && kde_save_INSTALL_PROGRAM_given=$INSTALL_PROGRAM + test -n "$INSTALL_SCRIPT" && kde_save_INSTALL_SCRIPT_given=$INSTALL_SCRIPT + AC_PROG_INSTALL + + if test -z "$kde_save_INSTALL_given" ; then + # OK, user hasn't given any INSTALL, autoconf found one for us + # now we test, if it supports the -p flag + AC_MSG_CHECKING(for -p flag to install) + rm -f confinst.$$.* > /dev/null 2>&1 + echo "Testtest" > confinst.$$.orig + ac_res=no + if ${INSTALL} -p confinst.$$.orig confinst.$$.new > /dev/null 2>&1 ; then + if test -f confinst.$$.new ; then + # OK, -p seems to do no harm to install + INSTALL="${INSTALL} -p" + ac_res=yes + fi + fi + rm -f confinst.$$.* + AC_MSG_RESULT($ac_res) + fi + dnl the following tries to resolve some signs and wonders coming up + dnl with different autoconf/automake versions + dnl e.g.: + dnl *automake 1.4 install-strip sets A_M_INSTALL_PROGRAM_FLAGS to -s + dnl and has INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(A_M_INSTALL_PROGRAM_FLAGS) + dnl it header-vars.am, so there the actual INSTALL_PROGRAM gets the -s + dnl *automake 1.4a (and above) use INSTALL_STRIP_FLAG and only has + dnl INSTALL_PROGRAM = @INSTALL_PROGRAM@ there, but changes the + dnl install-@DIR@PROGRAMS targets to explicitly use that flag + dnl *autoconf 2.13 is dumb, and thinks it can use INSTALL_PROGRAM as + dnl INSTALL_SCRIPT, which breaks with automake <= 1.4 + dnl *autoconf >2.13 (since 10.Apr 1999) has not that failure + dnl *sometimes KDE does not use the install-@DIR@PROGRAM targets from + dnl automake (due to broken Makefile.am or whatever) to install programs, + dnl and so does not see the -s flag in automake > 1.4 + dnl to clean up that mess we: + dnl +set INSTALL_PROGRAM to use INSTALL_STRIP_FLAG + dnl which cleans KDE's program with automake > 1.4; + dnl +set INSTALL_SCRIPT to only use INSTALL, to clean up autoconf's problems + dnl with automake<=1.4 + dnl note that dues to this sometimes two '-s' flags are used (if KDE + dnl properly uses install-@DIR@PROGRAMS, but I don't care + dnl + dnl And to all this comes, that I even can't write in comments variable + dnl names used by automake, because it is so stupid to think I wanted to + dnl _use_ them, therefor I have written A_M_... instead of AM_ + dnl hmm, I wanted to say something ... ahh yes: Arghhh. + + if test -z "$kde_save_INSTALL_PROGRAM_given" ; then + INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)' + fi + if test -z "$kde_save_INSTALL_SCRIPT_given" ; then + INSTALL_SCRIPT='${INSTALL}' + fi +])dnl + +AC_DEFUN([KDE_LANG_CPLUSPLUS], +[AC_LANG_CPLUSPLUS +ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC' +pushdef([AC_LANG_CPLUSPLUS], [popdef([AC_LANG_CPLUSPLUS]) KDE_LANG_CPLUSPLUS]) +]) + +pushdef([AC_LANG_CPLUSPLUS], +[popdef([AC_LANG_CPLUSPLUS]) +KDE_LANG_CPLUSPLUS +]) + +AC_DEFUN([KDE_CHECK_LONG_LONG], +[ +AC_MSG_CHECKING(for long long) +AC_CACHE_VAL(kde_cv_c_long_long, +[ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_LINK([], [ + long long foo = 0; + foo = foo+1; + ], + kde_cv_c_long_long=yes, kde_cv_c_long_long=no) + AC_LANG_RESTORE +]) +AC_MSG_RESULT($kde_cv_c_long_long) +if test "$kde_cv_c_long_long" = yes; then + AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have long long as datatype]) +fi +]) + +AC_DEFUN([KDE_CHECK_LIB], +[ + kde_save_LDFLAGS="$LDFLAGS" + dnl AC_CHECK_LIB modifies LIBS, so save it here + kde_save_LIBS="$LIBS" + LDFLAGS="$LDFLAGS $all_libraries" + case $host_os in + aix*) LDFLAGS="-brtl $LDFLAGS" + test "$GCC" = yes && LDFLAGS="-Wl,$LDFLAGS" + ;; + esac + AC_CHECK_LIB($1, $2, $3, $4, $5) + LDFLAGS="$kde_save_LDFLAGS" + LIBS="$kde_save_LIBS" +]) + +AC_DEFUN([KDE_JAVA_PREFIX], +[ + dir=`dirname "$1"` + base=`basename "$1"` + list=`ls -1 $dir 2> /dev/null` + for entry in $list; do + if test -d $dir/$entry/bin; then + case $entry in + $base) + javadirs="$javadirs $dir/$entry/bin" + ;; + esac + elif test -d $dir/$entry/jre/bin; then + case $entry in + $base) + javadirs="$javadirs $dir/$entry/jre/bin" + ;; + esac + fi + done +]) + +dnl KDE_CHEC_JAVA_DIR(onlyjre) +AC_DEFUN([KDE_CHECK_JAVA_DIR], +[ + +AC_ARG_WITH(java, +AC_HELP_STRING([--with-java=javadir],[use java installed in javadir, --without-java disables]), +[ ac_java_dir=$withval +], ac_java_dir="" +) + +AC_MSG_CHECKING([for Java]) + +dnl at this point ac_java_dir is either a dir, 'no' to disable, or '' to say look in $PATH +if test "x$ac_java_dir" = "xno"; then + kde_java_bindir=no + kde_java_includedir=no + kde_java_libjvmdir=no + kde_java_libgcjdir=no + kde_java_libhpidir=no +else + if test "x$ac_java_dir" = "x"; then + + + dnl No option set -> collect list of candidate paths + if test -n "$JAVA_HOME"; then + KDE_JAVA_PREFIX($JAVA_HOME) + fi + KDE_JAVA_PREFIX(/usr/j2se) + KDE_JAVA_PREFIX(/usr/lib/j2se) + KDE_JAVA_PREFIX(/usr/j*dk*) + KDE_JAVA_PREFIX(/usr/lib/j*dk*) + KDE_JAVA_PREFIX(/opt/j*sdk*) + KDE_JAVA_PREFIX(/usr/lib/java*) + KDE_JAVA_PREFIX(/usr/java*) + KDE_JAVA_PREFIX(/usr/java/j*dk*) + KDE_JAVA_PREFIX(/usr/java/j*re*) + KDE_JAVA_PREFIX(/usr/lib/SunJava2*) + KDE_JAVA_PREFIX(/usr/lib/SunJava*) + KDE_JAVA_PREFIX(/usr/lib/IBMJava2*) + KDE_JAVA_PREFIX(/usr/lib/IBMJava*) + KDE_JAVA_PREFIX(/opt/java*) + + kde_cv_path="NONE" + kde_save_IFS=$IFS + IFS=':' + for dir in $PATH; do + if test -d "$dir"; then + javadirs="$javadirs $dir" + fi + done + IFS=$kde_save_IFS + jredirs= + + dnl Now javadirs contains a list of paths that exist, all ending with bin/ + for dir in $javadirs; do + dnl Check for the java executable + if test -x "$dir/java"; then + sane_path=$(cd $dir; /bin/pwd) + dnl And also check for a libjvm.so somewhere under there + dnl Since we have to go to the parent dir, /usr/bin is excluded, /usr is too big. + if test "$sane_path" != "/usr/bin"; then + libjvmdir=`find $dir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1` + if test ! -f $libjvmdir/libjvm.so; then continue; fi + jredirs="$jredirs $dir" + fi + fi + done + + dnl Now jredirs contains a reduced list, of paths where both java and ../**/libjvm.so was found + JAVAC= + JAVA= + kde_java_bindir=no + for dir in $jredirs; do + JAVA="$dir/java" + kde_java_bindir=$dir + if test -x "$dir/javac"; then + JAVAC="$dir/javac" + break + fi + done + + if test -n "$JAVAC"; then + dnl this substitution might not work - well, we test for jni.h below + kde_java_includedir=`echo $JAVAC | sed -e 's,bin/javac$,include/,'` + else + kde_java_includedir=no + fi + else + dnl config option set + kde_java_bindir=$ac_java_dir/bin + if test -x $ac_java_dir/bin/java && test ! -x $ac_java_dir/bin/javac; then + kde_java_includedir=no + else + kde_java_includedir=$ac_java_dir/include + fi + fi +fi + +dnl At this point kde_java_bindir and kde_java_includedir are either set or "no" +if test "x$kde_java_bindir" != "xno"; then + + dnl Look for libjvm.so + kde_java_libjvmdir=`find $kde_java_bindir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1` + dnl Look for libgcj.so + kde_java_libgcjdir=`find $kde_java_bindir/.. -name libgcj.so | sed 's,libgcj.so,,'|head -n 1` + dnl Look for libhpi.so and avoid green threads + kde_java_libhpidir=`find $kde_java_bindir/.. -name libhpi.so | grep -v green | sed 's,libhpi.so,,' | head -n 1` + + dnl Now check everything's fine under there + dnl the include dir is our flag for having the JDK + if test -d "$kde_java_includedir"; then + if test ! -x "$kde_java_bindir/javac"; then + AC_MSG_ERROR([javac not found under $kde_java_bindir - it seems you passed a wrong --with-java.]) + fi + if test ! -x "$kde_java_bindir/javah"; then + AC_MSG_ERROR([javah not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.]) + fi + if test ! -x "$kde_java_bindir/jar"; then + AC_MSG_ERROR([jar not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.]) + fi + if test ! -r "$kde_java_includedir/jni.h"; then + AC_MSG_ERROR([jni.h not found under $kde_java_includedir. Use --with-java or --without-java.]) + fi + + jni_includes="-I$kde_java_includedir" + dnl Strange thing, jni.h requires jni_md.h which is under genunix here.. + dnl and under linux here.. + + dnl not needed for gcj + + if test "x$kde_java_libgcjdir" = "x"; then + test -d "$kde_java_includedir/linux" && jni_includes="$jni_includes -I$kde_java_includedir/linux" + test -d "$kde_java_includedir/solaris" && jni_includes="$jni_includes -I$kde_java_includedir/solaris" + test -d "$kde_java_includedir/genunix" && jni_includes="$jni_includes -I$kde_java_includedir/genunix" + fi + + else + JAVAC= + jni_includes= + fi + + if test "x$kde_java_libgcjdir" = "x"; then + if test ! -r "$kde_java_libjvmdir/libjvm.so"; then + AC_MSG_ERROR([libjvm.so not found under $kde_java_libjvmdir. Use --without-java.]) + fi + else + if test ! -r "$kde_java_libgcjdir/libgcj.so"; then + AC_MSG_ERROR([libgcj.so not found under $kde_java_libgcjdir. Use --without-java.]) + fi + fi + + if test ! -x "$kde_java_bindir/java"; then + AC_MSG_ERROR([java not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.]) + fi + + dnl not needed for gcj compile + + if test "x$kde_java_libgcjdir" = "x"; then + if test ! -r "$kde_java_libhpidir/libhpi.so"; then + AC_MSG_ERROR([libhpi.so not found under $kde_java_libhpidir. Use --without-java.]) + fi + fi + + if test -n "$jni_includes"; then + dnl Check for JNI version + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_cxxflags_safe="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $all_includes $jni_includes" + + AC_TRY_COMPILE([ + #include + ], + [ + #ifndef JNI_VERSION_1_2 + Syntax Error + #endif + ],[ kde_jni_works=yes ], + [ kde_jni_works=no ]) + + if test $kde_jni_works = no; then + AC_MSG_ERROR([Incorrect version of $kde_java_includedir/jni.h. + You need to have Java Development Kit (JDK) version 1.2. + + Use --with-java to specify another location. + Use --without-java to configure without java support. + Or download a newer JDK and try again. + See e.g. http://java.sun.com/products/jdk/1.2 ]) + fi + + CXXFLAGS="$ac_cxxflags_safe" + AC_LANG_RESTORE + + dnl All tests ok, inform and subst the variables + + JAVAC=$kde_java_bindir/javac + JAVAH=$kde_java_bindir/javah + JAR=$kde_java_bindir/jar + AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is]) + if test "x$kde_java_libgcjdir" = "x"; then + JVMLIBS="-L$kde_java_libjvmdir -ljvm -L$kde_java_libhpidir -lhpi" + else + JVMLIBS="-L$kde_java_libgcjdir -lgcj" + fi + AC_MSG_RESULT([java JDK in $kde_java_bindir]) + + else + AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is]) + AC_MSG_RESULT([java JRE in $kde_java_bindir]) + fi +elif test -d "/Library/Java/Home"; then + kde_java_bindir="/Library/Java/Home/bin" + jni_includes="-I/Library/Java/Home/include" + + JAVAC=$kde_java_bindir/javac + JAVAH=$kde_java_bindir/javah + JAR=$kde_java_bindir/jar + JVMLIBS="-Wl,-framework,JavaVM" + + AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is]) + AC_MSG_RESULT([Apple Java Framework]) +else + AC_MSG_RESULT([none found]) +fi + +AC_SUBST(JAVAC) +AC_SUBST(JAVAH) +AC_SUBST(JAR) +AC_SUBST(JVMLIBS) +AC_SUBST(jni_includes) + +# for backward compat +kde_cv_java_includedir=$kde_java_includedir +kde_cv_java_bindir=$kde_java_bindir +]) + +dnl this is a redefinition of autoconf 2.5x's AC_FOREACH. +dnl When the argument list becomes big, as in KDE for AC_OUTPUT in +dnl big packages, m4_foreach is dog-slow. So use our own version of +dnl it. (matz@kde.org) +m4_define([mm_foreach], +[m4_pushdef([$1])_mm_foreach($@)m4_popdef([$1])]) +m4_define([mm_car], [[$1]]) +m4_define([mm_car2], [[$@]]) +m4_define([_mm_foreach], +[m4_if(m4_quote($2), [], [], + [m4_define([$1], mm_car($2))$3[]_mm_foreach([$1], + mm_car2(m4_shift($2)), + [$3])])]) +m4_define([AC_FOREACH], +[mm_foreach([$1], m4_split(m4_normalize([$2])), [$3])]) + +AC_DEFUN([KDE_NEED_FLEX], +[ +kde_libs_safe=$LIBS +LIBS="$LIBS $USER_LDFLAGS" +AM_PROG_LEX +LIBS=$kde_libs_safe +if test -z "$LEXLIB"; then + AC_MSG_ERROR([You need to have flex installed.]) +fi +AC_SUBST(LEXLIB) +]) + +AC_DEFUN([AC_PATH_QTOPIA], +[ + dnl TODO: use AC_CACHE_VAL + + if test -z "$1"; then + qtopia_minver_maj=1 + qtopia_minver_min=5 + qtopia_minver_pat=0 + else + qtopia_minver_maj=`echo "$1" | sed -e "s/^\(.*\)\..*\..*$/\1/"` + qtopia_minver_min=`echo "$1" | sed -e "s/^.*\.\(.*\)\..*$/\1/"` + qtopia_minver_pat=`echo "$1" | sed -e "s/^.*\..*\.\(.*\)$/\1/"` + fi + + qtopia_minver="$qtopia_minver_maj$qtopia_minver_min$qtopia_minver_pat" + qtopia_minverstr="$qtopia_minver_maj.$qtopia_minver_min.$qtopia_minver_pat" + + AC_REQUIRE([AC_PATH_QT]) + + AC_MSG_CHECKING([for Qtopia]) + + LIB_QTOPIA="-lqpe" + AC_SUBST(LIB_QTOPIA) + + kde_qtopia_dirs="$QPEDIR /opt/Qtopia" + + ac_qtopia_incdir=NO + + AC_ARG_WITH(qtopia-dir, + AC_HELP_STRING([--with-qtopia-dir=DIR],[where the root of Qtopia is installed]), + [ ac_qtopia_incdir="$withval"/include] ) + + qtopia_incdirs="" + for dir in $kde_qtopia_dirs; do + qtopia_incdirs="$qtopia_incdirs $dir/include" + done + + if test ! "$ac_qtopia_incdir" = "NO"; then + qtopia_incdirs="$ac_qtopia_incdir $qtopia_incdirs" + fi + + qtopia_incdir="" + AC_FIND_FILE(qpe/qpeapplication.h, $qtopia_incdirs, qtopia_incdir) + ac_qtopia_incdir="$qtopia_incdir" + + if test -z "$qtopia_incdir"; then + AC_MSG_ERROR([Cannot find Qtopia headers. Please check your installation.]) + fi + + qtopia_ver_maj=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION "\(.*\)\..*\..*".*,\1,p'`; + qtopia_ver_min=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\.\(.*\)\..*".*,\1,p'`; + qtopia_ver_pat=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\..*\.\(.*\)".*,\1,p'`; + + qtopia_ver="$qtopia_ver_maj$qtopia_ver_min$qtopia_ver_pat" + qtopia_verstr="$qtopia_ver_maj.$qtopia_ver_min.$qtopia_ver_pat" + if test "$qtopia_ver" -lt "$qtopia_minver"; then + AC_MSG_ERROR([found Qtopia version $qtopia_verstr but version $qtopia_minverstr +is required.]) + fi + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + ac_cxxflags_safe="$CXXFLAGS" + ac_ldflags_safe="$LDFLAGS" + ac_libs_safe="$LIBS" + + CXXFLAGS="$CXXFLAGS -I$qtopia_incdir $all_includes" + LDFLAGS="$LDFLAGS $QT_LDFLAGS $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS" + LIBS="$LIBS $LIB_QTOPIA $LIBQT" + + cat > conftest.$ac_ext < +#include + +int main( int argc, char **argv ) +{ + QPEApplication app( argc, argv ); + return 0; +} +EOF + + if AC_TRY_EVAL(ac_link) && test -s conftest; then + rm -f conftest* + else + rm -f conftest* + AC_MSG_ERROR([Cannot link small Qtopia Application. For more details look at +the end of config.log]) + fi + + CXXFLAGS="$ac_cxxflags_safe" + LDFLAGS="$ac_ldflags_safe" + LIBS="$ac_libs_safe" + + AC_LANG_RESTORE + + QTOPIA_INCLUDES="-I$qtopia_incdir" + AC_SUBST(QTOPIA_INCLUDES) + + AC_MSG_RESULT([found version $qtopia_verstr with headers at $qtopia_incdir]) +]) + + +AC_DEFUN([KDE_INIT_DOXYGEN], +[ +AC_MSG_CHECKING([for Qt docs]) +kde_qtdir= +if test "${with_qt_dir+set}" = set; then + kde_qtdir="$with_qt_dir" +fi + +AC_FIND_FILE(qsql.html, [ $kde_qtdir/doc/html $QTDIR/doc/html /usr/share/doc/packages/qt3/html /usr/lib/qt/doc /usr/lib/qt3/doc /usr/lib/qt3/doc/html /usr/doc/qt3/html /usr/doc/qt3 /usr/share/doc/qt3-doc /usr/share/qt3/doc/html /usr/X11R6/share/doc/qt/html ], QTDOCDIR) +AC_MSG_RESULT($QTDOCDIR) + +AC_SUBST(QTDOCDIR) + +KDE_FIND_PATH(dot, DOT, [], []) +if test -n "$DOT"; then + KDE_HAVE_DOT="YES" +else + KDE_HAVE_DOT="NO" +fi +AC_SUBST(KDE_HAVE_DOT) +KDE_FIND_PATH(doxygen, DOXYGEN, [], []) +AC_SUBST(DOXYGEN) + +DOXYGEN_PROJECT_NAME="$1" +DOXYGEN_PROJECT_NUMBER="$2" +AC_SUBST(DOXYGEN_PROJECT_NAME) +AC_SUBST(DOXYGEN_PROJECT_NUMBER) + +KDE_HAS_DOXYGEN=no +if test -n "$DOXYGEN" && test -x "$DOXYGEN" && test -f $QTDOCDIR/qsql.html; then + KDE_HAS_DOXYGEN=yes +fi +AC_SUBST(KDE_HAS_DOXYGEN) + +]) + + +AC_DEFUN([AC_FIND_BZIP2], +[ +AC_MSG_CHECKING([for bzDecompress in libbz2]) +AC_CACHE_VAL(ac_cv_lib_bzip2, +[ +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +kde_save_LIBS="$LIBS" +LIBS="$all_libraries $USER_LDFLAGS -lbz2 $LIBSOCKET" +kde_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES" +AC_TRY_LINK(dnl +[ +#define BZ_NO_STDIO +#include +], + [ bz_stream s; (void) bzDecompress(&s); ], + eval "ac_cv_lib_bzip2='-lbz2'", + eval "ac_cv_lib_bzip2=no") +LIBS="$kde_save_LIBS" +CXXFLAGS="$kde_save_CXXFLAGS" +AC_LANG_RESTORE +])dnl +AC_MSG_RESULT($ac_cv_lib_bzip2) + +if test ! "$ac_cv_lib_bzip2" = no; then + BZIP2DIR=bzip2 + + LIBBZ2="$ac_cv_lib_bzip2" + AC_SUBST(LIBBZ2) + +else + + cxx_shared_flag= + ld_shared_flag= + KDE_CHECK_COMPILER_FLAG(shared, [ + ld_shared_flag="-shared" + ]) + KDE_CHECK_COMPILER_FLAG(fPIC, [ + cxx_shared_flag="-fPIC" + ]) + + AC_MSG_CHECKING([for BZ2_bzDecompress in (shared) libbz2]) + AC_CACHE_VAL(ac_cv_lib_bzip2_prefix, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + kde_save_LIBS="$LIBS" + LIBS="$all_libraries $USER_LDFLAGS $ld_shared_flag -lbz2 $LIBSOCKET" + kde_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CFLAGS $cxx_shared_flag $all_includes $USER_INCLUDES" + + AC_TRY_LINK(dnl + [ + #define BZ_NO_STDIO + #include + ], + [ bz_stream s; (void) BZ2_bzDecompress(&s); ], + eval "ac_cv_lib_bzip2_prefix='-lbz2'", + eval "ac_cv_lib_bzip2_prefix=no") + LIBS="$kde_save_LIBS" + CXXFLAGS="$kde_save_CXXFLAGS" + AC_LANG_RESTORE + ])dnl + + AC_MSG_RESULT($ac_cv_lib_bzip2_prefix) + + if test ! "$ac_cv_lib_bzip2_prefix" = no; then + BZIP2DIR=bzip2 + + LIBBZ2="$ac_cv_lib_bzip2_prefix" + AC_SUBST(LIBBZ2) + + AC_DEFINE(NEED_BZ2_PREFIX, 1, [Define if the libbz2 functions need the BZ2_ prefix]) + dnl else, we just ignore this + fi + +fi +AM_CONDITIONAL(include_BZIP2, test -n "$BZIP2DIR") +]) + +dnl ------------------------------------------------------------------------ +dnl Try to find the SSL headers and libraries. +dnl $(SSL_LDFLAGS) will be -Lsslliblocation (if needed) +dnl and $(SSL_INCLUDES) will be -Isslhdrlocation (if needed) +dnl ------------------------------------------------------------------------ +dnl +AC_DEFUN([KDE_CHECK_SSL], +[ +LIBSSL="-lssl -lcrypto" +AC_REQUIRE([KDE_CHECK_LIB64]) + +ac_ssl_includes=NO ac_ssl_libraries=NO +ssl_libraries="" +ssl_includes="" +AC_ARG_WITH(ssl-dir, + AC_HELP_STRING([--with-ssl-dir=DIR],[where the root of OpenSSL is installed]), + [ ac_ssl_includes="$withval"/include + ac_ssl_libraries="$withval"/lib$kdelibsuff + ]) + +want_ssl=yes +AC_ARG_WITH(ssl, + AC_HELP_STRING([--without-ssl],[disable SSL checks]), + [want_ssl=$withval]) + +if test $want_ssl = yes; then + +AC_MSG_CHECKING(for OpenSSL) + +AC_CACHE_VAL(ac_cv_have_ssl, +[#try to guess OpenSSL locations + + ssl_incdirs="/usr/include /usr/local/include /usr/ssl/include /usr/local/ssl/include $prefix/include $kde_extra_includes" + ssl_incdirs="$ac_ssl_includes $ssl_incdirs" + AC_FIND_FILE(openssl/ssl.h, $ssl_incdirs, ssl_incdir) + ac_ssl_includes="$ssl_incdir" + + ssl_libdirs="/usr/lib$kdelibsuff /usr/local/lib$kdelibsuff /usr/ssl/lib$kdelibsuff /usr/local/ssl/lib$kdelibsuff $libdir $prefix/lib$kdelibsuff $exec_prefix/lib$kdelibsuff $kde_extra_libs" + if test ! "$ac_ssl_libraries" = "NO"; then + ssl_libdirs="$ac_ssl_libraries $ssl_libdirs" + fi + + test=NONE + ssl_libdir=NONE + for dir in $ssl_libdirs; do + try="ls -1 $dir/libssl*" + if test=`eval $try 2> /dev/null`; then ssl_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi + done + + ac_ssl_libraries="$ssl_libdir" + + ac_ldflags_safe="$LDFLAGS" + ac_libs_safe="$LIBS" + + LDFLAGS="$LDFLAGS -L$ssl_libdir $all_libraries" + LIBS="$LIBS $LIBSSL -lRSAglue -lrsaref" + + AC_TRY_LINK(,void RSAPrivateEncrypt(void);RSAPrivateEncrypt();, + ac_ssl_rsaref="yes" + , + ac_ssl_rsaref="no" + ) + + LDFLAGS="$ac_ldflags_safe" + LIBS="$ac_libs_safe" + + if test "$ac_ssl_includes" = NO || test "$ac_ssl_libraries" = NO; then + have_ssl=no + else + have_ssl=yes; + fi + + ]) + + eval "$ac_cv_have_ssl" + + AC_MSG_RESULT([libraries $ac_ssl_libraries, headers $ac_ssl_includes]) + + AC_MSG_CHECKING([whether OpenSSL uses rsaref]) + AC_MSG_RESULT($ac_ssl_rsaref) + + AC_MSG_CHECKING([for easter eggs]) + AC_MSG_RESULT([none found]) + +else + have_ssl=no +fi + +if test "$have_ssl" = yes; then + AC_MSG_CHECKING(for OpenSSL version) + dnl Check for SSL version + AC_CACHE_VAL(ac_cv_ssl_version, + [ + + cat >conftest.$ac_ext < +#include + int main() { + +#ifndef OPENSSL_VERSION_NUMBER + printf("ssl_version=\\"error\\"\n"); +#else + if (OPENSSL_VERSION_NUMBER < 0x00906000) + printf("ssl_version=\\"old\\"\n"); + else + printf("ssl_version=\\"ok\\"\n"); +#endif + return (0); + } +EOF + + ac_save_CPPFLAGS=$CPPFLAGS + if test "$ac_ssl_includes" != "/usr/include"; then + CPPFLAGS="$CPPFLAGS -I$ac_ssl_includes" + fi + + if AC_TRY_EVAL(ac_link); then + + if eval `./conftest 2>&5`; then + if test $ssl_version = error; then + AC_MSG_ERROR([$ssl_incdir/openssl/opensslv.h doesn't define OPENSSL_VERSION_NUMBER !]) + else + if test $ssl_version = old; then + AC_MSG_WARN([OpenSSL version too old. Upgrade to 0.9.6 at least, see http://www.openssl.org. SSL support disabled.]) + have_ssl=no + fi + fi + ac_cv_ssl_version="ssl_version=$ssl_version" + else + AC_MSG_ERROR([Your system couldn't run a small SSL test program. + Check config.log, and if you can't figure it out, send a mail to + David Faure , attaching your config.log]) + fi + + else + AC_MSG_ERROR([Your system couldn't link a small SSL test program. + Check config.log, and if you can't figure it out, send a mail to + David Faure , attaching your config.log]) + fi + CPPFLAGS=$ac_save_CPPFLAGS + + ]) + + eval "$ac_cv_ssl_version" + AC_MSG_RESULT($ssl_version) +fi + +if test "$have_ssl" != yes; then + LIBSSL=""; +else + AC_DEFINE(HAVE_SSL, 1, [If we are going to use OpenSSL]) + ac_cv_have_ssl="have_ssl=yes \ + ac_ssl_includes=$ac_ssl_includes ac_ssl_libraries=$ac_ssl_libraries ac_ssl_rsaref=$ac_ssl_rsaref" + + + ssl_libraries="$ac_ssl_libraries" + ssl_includes="$ac_ssl_includes" + + if test "$ac_ssl_rsaref" = yes; then + LIBSSL="-lssl -lcrypto -lRSAglue -lrsaref" + fi + + if test $ssl_version = "old"; then + AC_DEFINE(HAVE_OLD_SSL_API, 1, [Define if you have OpenSSL < 0.9.6]) + fi +fi + +SSL_INCLUDES= + +if test "$ssl_includes" = "/usr/include"; then + if test -f /usr/kerberos/include/krb5.h; then + SSL_INCLUDES="-I/usr/kerberos/include" + fi +elif test "$ssl_includes" != "/usr/local/include" && test -n "$ssl_includes"; then + SSL_INCLUDES="-I$ssl_includes" +fi + +if test "$ssl_libraries" = "/usr/lib" || test "$ssl_libraries" = "/usr/local/lib" || test -z "$ssl_libraries" || test "$ssl_libraries" = "NONE"; then + SSL_LDFLAGS="" +else + SSL_LDFLAGS="-L$ssl_libraries -R$ssl_libraries" +fi + +AC_SUBST(SSL_INCLUDES) +AC_SUBST(SSL_LDFLAGS) +AC_SUBST(LIBSSL) +]) + +AC_DEFUN([KDE_CHECK_STRLCPY], +[ + AC_REQUIRE([AC_CHECK_STRLCAT]) + AC_REQUIRE([AC_CHECK_STRLCPY]) + AC_CHECK_SIZEOF(size_t) + AC_CHECK_SIZEOF(unsigned long) + + AC_MSG_CHECKING([sizeof size_t == sizeof unsigned long]) + AC_TRY_COMPILE(,[ + #if SIZEOF_SIZE_T != SIZEOF_UNSIGNED_LONG + choke me + #endif + ],AC_MSG_RESULT([yes]),[ + AC_MSG_RESULT(no) + AC_MSG_ERROR([ + Apparently on your system our assumption sizeof size_t == sizeof unsigned long + does not apply. Please mail kde-devel@kde.org with a description of your system! + ]) + ]) +]) + +AC_DEFUN([KDE_CHECK_BINUTILS], +[ + AC_MSG_CHECKING([if ld supports unversioned version maps]) + + kde_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" + echo "{ local: extern \"C++\" { foo }; };" > conftest.map + AC_TRY_LINK([int foo;], +[ +#ifdef __INTEL_COMPILER +icc apparently does not support libtools version-info and version-script +at the same time. Dunno where the bug is, but until somebody figured out, +better disable the optional version scripts. +#endif + + foo = 42; +], kde_supports_versionmaps=yes, kde_supports_versionmaps=no) + LDFLAGS="$kde_save_LDFLAGS" + rm -f conftest.map + AM_CONDITIONAL(include_VERSION_SCRIPT, + [test "$kde_supports_versionmaps" = "yes" && test "$kde_use_debug_code" = "no"]) + + AC_MSG_RESULT($kde_supports_versionmaps) +]) + +AC_DEFUN([AM_PROG_OBJC],[ +AC_CHECK_PROGS(OBJC, gcc, gcc) +test -z "$OBJC" && AC_MSG_ERROR([no acceptable objective-c gcc found in \$PATH]) +if test "x${OBJCFLAGS-unset}" = xunset; then + OBJCFLAGS="-g -O2" +fi +AC_SUBST(OBJCFLAGS) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(OBJC)]) +]) + +AC_DEFUN([KDE_CHECK_PERL], +[ + KDE_FIND_PATH(perl, PERL, [$bindir $exec_prefix/bin $prefix/bin], [ + AC_MSG_ERROR([No Perl found in your $PATH. +We need perl to generate some code.]) + ]) + AC_SUBST(PERL) +]) + +AC_DEFUN([KDE_CHECK_LARGEFILE], +[ +AC_SYS_LARGEFILE +if test "$ac_cv_sys_file_offset_bits" != no; then + CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits" +fi + +if test "x$ac_cv_sys_large_files" != "xno"; then + CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=1" +fi + +]) + +dnl A small extension to PKG_CHECK_MODULES (defined in pkg.m4.in) +dnl which allows to search for libs that get installed into the KDE prefix. +dnl +dnl Syntax: KDE_PKG_CHECK_MODULES(KSTUFF, libkexif >= 0.2 glib = 1.3.4, action-if, action-not) +dnl defines KSTUFF_LIBS, KSTUFF_CFLAGS, see pkg-config man page +dnl also defines KSTUFF_PKG_ERRORS on error +AC_DEFUN([KDE_PKG_CHECK_MODULES], [ + + PKG_CONFIG_PATH="$prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH" + if test "$prefix" != "$kde_libs_prefix"; then + PKG_CONFIG_PATH="$kde_libs_prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH" + fi + export PKG_CONFIG_PATH + PKG_CHECK_MODULES([$1],[$2],[$3],[$4]) +]) + + +dnl Check for PIE support in the compiler and linker +AC_DEFUN([KDE_CHECK_PIE_SUPPORT], +[ + AC_CACHE_CHECK([for PIE support], kde_cv_val_pie_support, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + safe_CXXFLAGS=$CXXFLAGS + safe_LDFLAGS=$LDFLAGS + CXXFLAGS="$CXXFLAGS -fPIE" + LDFLAGS="$LDFLAGS -pie" + + AC_TRY_LINK([int foo;], [], [kde_cv_val_pie_support=yes], [kde_cv_val_pie_support=no]) + + CXXFLAGS=$safe_CXXFLAGS + LDFLAGS=$safe_LDFLAGS + AC_LANG_RESTORE + ]) + + AC_MSG_CHECKING(if enabling -pie/fPIE support) + + AC_ARG_ENABLE(pie, + AC_HELP_STRING([--enable-pie],[platform supports PIE linking [default=detect]]), + [kde_has_pie_support=$enableval], + [kde_has_pie_support=detect]) + + if test "$kde_has_pie_support" = "detect"; then + kde_has_pie_support=$kde_cv_val_pie_support + fi + + AC_MSG_RESULT([$kde_has_pie_support]) + + KDE_USE_FPIE="" + KDE_USE_PIE="" + + AC_SUBST([KDE_USE_FPIE]) + AC_SUBST([KDE_USE_PIE]) + + if test "$kde_has_pie_support" = "yes"; then + KDE_USE_FPIE="-fPIE" + KDE_USE_PIE="-pie" + fi +]) +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +## Copyright 1996, 1997, 1998, 1999, 2000, 2001 +## Free Software Foundation, Inc. +## Originally by Gordon Matzigkeit , 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 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. + +# serial 47 AC_PROG_LIBTOOL + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool --silent' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_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. +Xsed='sed -e s/^X//' +[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 avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_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=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_AC_SYS_LIBPATH_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. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# 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 '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_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. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${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 </dev/null && + echo_test_string="`eval $cmd`" && + (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. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|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*) + LINUX_64_MODE="32" + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*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*) + LINUX_64_MODE="64" + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + 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_TRY_LINK([],[],[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 + ;; +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$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}? :&$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 + if test ! -s conftest.err; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler 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 + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# 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 + testring="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*) + # 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; + ;; + + *) + # 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"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \ + = "XX$testring") >/dev/null 2>&1 && + new_result=`expr "X$testring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + testring=$testring$testring + done + testring= + # 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` + ;; + 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 +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_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 < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#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); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_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*) + 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="-dld"], + [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="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + 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" + 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_AC_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 + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_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 +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + # According to Tom Tromey, Ian Lance Taylor reported there are C compilers + # that will create temporary files in the current directory regardless of + # the output directory. Thus, making CWD read-only will cause this test + # to fail, enabling locking or at least warning the user not to do parallel + # builds. + chmod -w . + + 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}? :&$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 + if test ! -s out/conftest.err; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . + $rm conftest* out/* + rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_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 +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_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 +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_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_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; 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 +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[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" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext=".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" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/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' + ;; + +aix4* | aix5*) + 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.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + 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' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + 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*) + version_type=windows + shrext=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + 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' + 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*) + # 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}${versuffix}$shared_ext ${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='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + 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 + ;; + +kfreebsd*-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='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + 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 + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + 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='.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='.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='.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' + ;; + +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*) + 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' + libsuff= + if test "x$LINUX_64_MODE" = x64; then + # Some platforms are per default 64-bit, so there's no /lib64 + if test -d /lib64 -a ! -h /lib64; then + libsuff=64 + fi + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + # 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 + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${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=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 + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + 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=".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" + ;; + +sco3.2v5*) + version_type=osf + 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 + ;; + +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.2uw2* | sysv4.3* | sysv5*) + 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 + export_dynamic_flag_spec='${wl}-Blargedynsym' + 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 + ;; + +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 +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 dll's +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_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=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +#- set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_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=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_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=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_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="ifelse([$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 <&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 + +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 +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_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 + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_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]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])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 GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; 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)/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 + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + irix5* | nonstopux*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1" + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + case $host_cpu in + alpha* | hppa* | i*86 | ia64* | m68* | mips* | powerpc* | sparc* | s390* | sh* | x86_64* ) + lt_cv_deplibs_check_method=pass_all ;; + # the debian people say, arm and glibc 2.3.1 works for them with pass_all + arm* ) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + 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 + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + 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 +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}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" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[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_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided and an installed libltdl is not found, it is +# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' +# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single +# quotes!). If your package is not flat and you're not using automake, +# define top_builddir and top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# -------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[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_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# +# Check for any special shared library compilation flags. +# +_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac +fi +if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) + + +## 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... +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +# Report which librarie types wil 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 + ;; + +aix4*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=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]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# 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 + 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 + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -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_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + 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 + # KDE requires run time linking. Make it the default. + aix_use_runtimelinking=yes + 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_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + 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 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + 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='-qmkshrobj ${wl}-G' + else + shared_flag='-qmkshrobj' + fi + fi + fi + + # Let the compiler handle the export list. + _LT_AC_TAGVAR(always_export_symbols, $1)=no + 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_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '" $shared_flag" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=no + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~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 $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects' + ;; + 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 $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux*) + 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_AC_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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --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 $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_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 $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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::"' + ;; + osf3*) + 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_AC_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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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 $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + 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_AC_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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + _LT_AC_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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_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 $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects' + _LT_AC_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} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + # 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 -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # 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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib' + _LT_AC_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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$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_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib' + _LT_AC_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 $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_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... +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +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 +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([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. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +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... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 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 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. + +# 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 s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext='$shrext' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# 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 + +# 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 + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# 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 + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# 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 + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# 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 + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $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. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# 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=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# 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 + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\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 +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + test -f Makefile && make "$ltmain" +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# 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]]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# 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 + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGISTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $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 < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +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_AC_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 -f 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 +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # 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*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx) + # Digital/Compaq C++ + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # 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_AC_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_AC_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_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_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_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # 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. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # 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 + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_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}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&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. + +EOF + fi + ;; + + amigaos*) + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=no + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_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 $compiler_flags $libobjs $deplibs -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&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. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + 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_AC_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_AC_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 + + # KDE requires run time linking. Make it the default. + aix_use_runtimelinking=yes + 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_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + 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 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + 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='-qmkshrobj ${wl}-G' + else + shared_flag='-qmkshrobj' + fi + fi + fi + + # Let the compiler handle the export list. + _LT_AC_TAGVAR(always_export_symbols, $1)=no + 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_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '" $shared_flag" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi4*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # 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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=no + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $compiler_flags $libobjs `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $compiler_flags $libobjs $deplibs' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $libobjs $deplibs~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $libobjs $deplibs' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_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 $compiler_flags $libobjs $deplibs$output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $libobjs $deplibs ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $libobjs $deplibs ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_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~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + _LT_AC_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}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs~$rm $lib.exp' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_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' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + esac + _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $compiler_flags $libobjs $deplibs' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_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' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = 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 + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_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* + printf "$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_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +############################################################ +# 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. # +############################################################ +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_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 +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 && break + 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_MSG_RESULT([$SED]) +]) + +dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) +dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page +dnl also defines GSTUFF_PKG_ERRORS on error +AC_DEFUN([PKG_CHECK_MODULES], [ + succeeded=no + + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + AC_MSG_CHECKING(for $2) + + if $PKG_CONFIG --exists "$2" ; then + AC_MSG_RESULT(yes) + succeeded=yes + + AC_MSG_CHECKING($1_CFLAGS) + $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` + AC_MSG_RESULT($$1_CFLAGS) + + AC_MSG_CHECKING($1_LIBS) + $1_LIBS=`$PKG_CONFIG --libs "$2"` + AC_MSG_RESULT($$1_LIBS) + else + $1_CFLAGS="" + $1_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + ifelse([$4], ,echo $$1_PKG_ERRORS,) + fi + + AC_SUBST($1_CFLAGS) + AC_SUBST($1_LIBS) + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + ifelse([$3], , :, [$3]) + else + ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) + fi +]) + + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..5d6a272 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,909 @@ +# generated automatically by aclocal 1.10 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_if(m4_PACKAGE_VERSION, [2.61],, +[m4_fatal([this file was generated for autoconf 2.61. +You have another version of autoconf. If you want to use that, +you should regenerate the build system entirely.], [63])]) + +# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.10' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.10])dnl +_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + 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 + + case $depmode in + 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 + ;; + none) break ;; + esac + # 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. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} 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 sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; 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 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # 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_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.60])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# 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". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([acinclude.m4]) diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..6030134 --- /dev/null +++ b/bootstrap @@ -0,0 +1,4 @@ +#!/bin/sh +make -f Makefile.cvs +./configure --enable-debug=full + diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..1888b13 --- /dev/null +++ b/config.h.in @@ -0,0 +1,249 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_CARBON_CARBON_H + +/* Define if you have the CoreAudio API */ +#undef HAVE_COREAUDIO + +/* Define to 1 if you have the header file. */ +#undef HAVE_CRT_EXTERNS_H + +/* Defines if your system has the crypt function */ +#undef HAVE_CRYPT + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define if you have libjpeg */ +#undef HAVE_LIBJPEG + +/* Define if you have libpng */ +#undef HAVE_LIBPNG + +/* Define if you have a working libpthread (will enable threaded code) */ +#undef HAVE_LIBPTHREAD + +/* Define if you have libz */ +#undef HAVE_LIBZ + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define if your system needs _NSGetEnviron to set up the environment */ +#undef HAVE_NSGETENVIRON + +/* Define if you have res_init */ +#undef HAVE_RES_INIT + +/* Define if you have the res_init prototype */ +#undef HAVE_RES_INIT_PROTO + +/* Define if you have a STL implementation by SGI */ +#undef HAVE_SGI_STL + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define if you have strlcat */ +#undef HAVE_STRLCAT + +/* Define if you have the strlcat prototype */ +#undef HAVE_STRLCAT_PROTO + +/* Define if you have strlcpy */ +#undef HAVE_STRLCPY + +/* Define if you have the strlcpy prototype */ +#undef HAVE_STRLCPY_PROTO + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_BITYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF + +/* Suffix for lib directories */ +#undef KDELIBSUFF + +/* kdemacros.h usable */ +#undef KDEMACROS_USABLE + +/* The correct header */ +#undef LCMS_HEADER + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* 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 version of this package. */ +#undef PACKAGE_VERSION + +/* The size of `char *', as computed by sizeof. */ +#undef SIZEOF_CHAR_P + +/* The size of `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of `size_t', as computed by sizeof. */ +#undef SIZEOF_SIZE_T + +/* The size of `unsigned long', as computed by sizeof. */ +#undef SIZEOF_UNSIGNED_LONG + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Defined if compiling without arts */ +#undef WITHOUT_ARTS + +/* + * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system + * headers and I'm too lazy to write a configure test as long as only + * unixware is related + */ +#ifdef _UNIXWARE +#define HAVE_BOOLEAN +#endif + + + +/* + * AIX defines FD_SET in terms of bzero, but fails to include + * that defines bzero. + */ + +#if defined(_AIX) +#include +#endif + + + +#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H) +# include +# include +# define environ (*_NSGetEnviron()) +#endif + + + +#if !defined(HAVE_RES_INIT_PROTO) +#ifdef __cplusplus +extern "C" { +#endif +int res_init(void); +#ifdef __cplusplus +} +#endif +#endif + + + +#if !defined(HAVE_STRLCAT_PROTO) +#ifdef __cplusplus +extern "C" { +#endif +unsigned long strlcat(char*, const char*, unsigned long); +#ifdef __cplusplus +} +#endif +#endif + + + +#if !defined(HAVE_STRLCPY_PROTO) +#ifdef __cplusplus +extern "C" { +#endif +unsigned long strlcpy(char*, const char*, unsigned long); +#ifdef __cplusplus +} +#endif +#endif + + + +/* + * On HP-UX, the declaration of vsnprintf() is needed every time ! + */ + +#if !defined(HAVE_VSNPRINTF) || defined(hpux) +#if __STDC__ +#include +#include +#else +#include +#endif +#ifdef __cplusplus +extern "C" +#endif +int vsnprintf(char *str, size_t n, char const *fmt, va_list ap); +#ifdef __cplusplus +extern "C" +#endif +int snprintf(char *str, size_t n, char const *fmt, ...); +#endif + + +/* define to 1 if -fvisibility is supported */ +#undef __KDE_HAVE_GCC_VISIBILITY + + +#if defined(__SVR4) && !defined(__svr4__) +#define __svr4__ 1 +#endif + + +/* type to use in place of socklen_t if not defined */ +#undef kde_socklen_t + +/* type to use in place of socklen_t if not defined (deprecated, use + kde_socklen_t) */ +#undef ksize_t diff --git a/configure.files b/configure.files new file mode 100644 index 0000000..f254450 --- /dev/null +++ b/configure.files @@ -0,0 +1,4 @@ +./admin/configure.in.min +configure.in.in +./libkdcraw/configure.in.bot +./libkdcraw/configure.in.in diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..e773857 --- /dev/null +++ b/configure.in @@ -0,0 +1,270 @@ +dnl ======================================================= +dnl FILE: ./admin/configure.in.min +dnl ======================================================= + +dnl This file is part of the KDE libraries/packages +dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org) + +dnl This file is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Library General Public +dnl License as published by the Free Software Foundation; either +dnl version 2 of the License, or (at your option) any later version. + +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Library General Public License for more details. + +dnl You should have received a copy of the GNU Library General Public License +dnl along with this library; see the file COPYING.LIB. If not, write to +dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +dnl Boston, MA 02110-1301, USA. + +# Original Author was Kalle@kde.org +# I lifted it in some mater. (Stephan Kulow) +# I used much code from Janos Farkas + +dnl Process this file with autoconf to produce a configure script. + +AC_INIT(acinclude.m4) dnl a source file from your sub dir + +dnl This is so we can use kde-common +AC_CONFIG_AUX_DIR(admin) + +dnl This ksh/zsh feature conflicts with `cd blah ; pwd` +unset CDPATH + +dnl Checking host/target/build systems, for make, install etc. +AC_CANONICAL_SYSTEM +dnl Perform program name transformation +AC_ARG_PROGRAM + +dnl Automake doc recommends to do this only here. (Janos) +AM_INIT_AUTOMAKE(libkdcraw-0.1.4, "3.5.9") dnl searches for some needed programs + +KDE_SET_PREFIX + +dnl generate the config header +AM_CONFIG_HEADER(config.h) dnl at the distribution this done + +dnl Checks for programs. +AC_CHECK_COMPILERS +AC_ENABLE_SHARED(yes) +AC_ENABLE_STATIC(no) +KDE_PROG_LIBTOOL + +dnl for NLS support. Call them in this order! +dnl WITH_NLS is for the po files +AM_KDE_WITH_NLS + +KDE_USE_QT(3.2) +AC_PATH_KDE +dnl ======================================================= +dnl FILE: configure.in.in +dnl ======================================================= + +#MIN_CONFIG(3.2) +CXXFLAGS="$CXXFLAGS $KDE_DEFAULT_CXXFLAGS" + +KDE_ENABLE_HIDDEN_VISIBILITY + +KDE_INIT_DOXYGEN([KEG Libraries API Reference], [Version $VERSION]) + +dnl ======================================================= +dnl FILE: ./libkdcraw/configure.in.in +dnl ======================================================= + +AC_ARG_VAR(PKGCONFIGFOUND, [Path to pkg-config]) +AC_CHECK_PROG(PKGCONFIGFOUND, pkg-config,[yes]) + +#----------------------------------------------------------------- +# Library API version +# ----------------------------------------------------------------- + +ABI_MAJOR=3 +VERSION_INFO="3:0:0" + +AC_SUBST(ABI_MAJOR) +AC_SUBST(VERSION_INFO) + +KDCRAW_DIR="\$(libdir)/libkdcraw\$(ABI_MAJOR)" +AC_SUBST(KDCRAW_DIR) +# AM_PROG_CC_C_O to avoid that automake complains for it +AM_PROG_CC_C_O + +# ----------------------------------------------------------------- +# lcms check +# ----------------------------------------------------------------- + +have_lcms_header='no' +KDE_CHECK_HEADER(lcms/lcms.h,have_lcms_header='yes',,) +if test "$have_lcms_header" = 'yes' +then + AC_DEFINE(LCMS_HEADER, , [The correct header]) +else + # Alternative! Debian does it this way... + KDE_CHECK_HEADER(lcms.h,have_lcms_header='yes',,) + if test "$have_lcms_header" = 'yes' + then + AC_DEFINE(LCMS_HEADER, , [The correct header]) + fi +fi + +LCMS_LIBS='' +have_lcms='no' +if test "$have_lcms_header" = 'yes' +then + saved_cflags="$CFLAGS" + saved_ldflags="$LDFLAGS" + saved_libs=$LIBS + LIBS="$LIBS -llcms" + CFLAGS="$CFLAGS $all_includes" + LDFLAGS="$LDFLAGS $all_libraries" + + AC_TRY_LINK([ +#define inline __inline /* gcc is in ansi mode */ +#include LCMS_HEADER +#if LCMS_VERSION < 112 +choke! +#endif +], [ +cmsOpenProfileFromFile("foo", "r"); +], + [LCMS_LIBS='-llcms'; have_lcms='yes']) + LIBS=$saved_libs + CFLAGS=$saved_cflags + LDFLAGS=$saved_ldflags +fi + +if test -z "$LCMS_LIBS"; then + DO_NOT_COMPILE="$DO_NOT_COMPILE libkdcraw" +fi + +AC_SUBST(LCMS_LIBS) + +#AM_CONDITIONAL(compile_LIBKDCRAW, [test x$have_lcms != xyes]) + +AC_OUTPUT([ libkdcraw/libkdcraw.pc ]) + +# ----------------------------------------------------------------- +# enable hidden visibility only if kde >= 3.3.2 and kdelibs has +# been compiled with visibility enabled +# ----------------------------------------------------------------- + +AC_LANG_PUSH(C++) +libkdcraw_kdemacros_cppflags=$CPPFLAGS +CPPFLAGS="$CPPFLAGS $all_includes" +AC_MSG_CHECKING([if kdemacros.h is usable]) +AC_COMPILE_IFELSE( + [ + #include + #include + int other_func( void ) KDE_EXPORT; + int other_func( void ) + { + std::string s("KDE_EXPORT"); + return 0; + } + ], + [ AC_MSG_RESULT([yes]) + AC_DEFINE(KDEMACROS_USABLE, 1, [kdemacros.h usable]) ], + [ AC_MSG_RESULT([no]) ] +) +CPPFLAGS=$libkdcraw_kdemacros_cppflags +AC_LANG_POP(C++) +KDE_CREATE_SUBDIRSLIST +AM_CONDITIONAL(libkexiv2_SUBDIR_included, test "x$libkexiv2_SUBDIR_included" = xyes) +AM_CONDITIONAL(libkipi_SUBDIR_included, test "x$libkipi_SUBDIR_included" = xyes) +AM_CONDITIONAL(libkdcraw_SUBDIR_included, test "x$libkdcraw_SUBDIR_included" = xyes) +AM_CONDITIONAL(po_SUBDIR_included, test "x$po_SUBDIR_included" = xyes) +AC_CONFIG_FILES([ Makefile ]) +AC_CONFIG_FILES([ libkdcraw/Makefile ]) +AC_CONFIG_FILES([ libkdcraw/dcraw/Makefile ]) +AC_CONFIG_FILES([ libkdcraw/icons/Makefile ]) +AC_CONFIG_FILES([ libkdcraw/libkdcraw/Makefile ]) +AC_CONFIG_FILES([ po/Makefile ]) +AC_CONFIG_FILES([ po/ca/Makefile ]) +AC_CONFIG_FILES([ po/da/Makefile ]) +AC_CONFIG_FILES([ po/de/Makefile ]) +AC_CONFIG_FILES([ po/el/Makefile ]) +AC_CONFIG_FILES([ po/es/Makefile ]) +AC_CONFIG_FILES([ po/et/Makefile ]) +AC_CONFIG_FILES([ po/is/Makefile ]) +AC_CONFIG_FILES([ po/it/Makefile ]) +AC_CONFIG_FILES([ po/ja/Makefile ]) +AC_CONFIG_FILES([ po/ms/Makefile ]) +AC_CONFIG_FILES([ po/nds/Makefile ]) +AC_CONFIG_FILES([ po/nl/Makefile ]) +AC_CONFIG_FILES([ po/pa/Makefile ]) +AC_CONFIG_FILES([ po/pt/Makefile ]) +AC_CONFIG_FILES([ po/sk/Makefile ]) +AC_CONFIG_FILES([ po/sr/Makefile ]) +AC_CONFIG_FILES([ po/sr@Latn/Makefile ]) +AC_CONFIG_FILES([ po/sv/Makefile ]) +AC_CONFIG_FILES([ po/th/Makefile ]) +AC_CONFIG_FILES([ po/uk/Makefile ]) +AC_OUTPUT +dnl Put here things to be done at the very end - telling users +dnl about additional packages to install. + +echo "" +echo "-- libkdcraw configure results -------------------" + +if test "x$have_lcms" != "xyes"; then + echo "-- lcms found..................... NO" + echo "" + echo "libkdcraw needs Lcms library. You need to install the lcms development package." + echo "Lcms website is at http://www.littlecms.com" + echo "" + all_tests=bad +else + echo "-- lcms found..................... YES" +fi + + + +# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure +if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then + # And if so, warn when they don't match + if test "$kde_libs_prefix" != "$given_prefix"; then + # And if kde doesn't know about the prefix yet + echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null + if test $? -ne 0; then + echo "" + echo "Warning: you chose to install this package in $given_prefix," + echo "but KDE was found in $kde_libs_prefix." + echo "For this to work, you will need to tell KDE about the new prefix, by ensuring" + echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix" + echo "Then restart KDE." + echo "" + fi + fi +fi + +if test x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then + echo "" + echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility" + echo "was not included. Therefore, GCC symbol visibility support remains disabled." + echo "" + echo "For better performance, consider including the Qt visibility supporting patch" + echo "located at:" + echo "" + echo "http://bugs.kde.org/show_bug.cgi?id=109386" + echo "" + echo "and recompile all of Qt and KDE. Note, this is entirely optional and" + echo "everything will continue to work just fine without it." + echo "" +fi + +if test "$all_tests" = "bad"; then + if test ! "$cache_file" = "/dev/null"; then + echo "" + echo "Please remove the file $cache_file after changing your setup" + echo "so that configure will find the changes next time." + echo "" + fi +else + echo "" + echo "Good - your configure finished. Start make now" + echo "" +fi diff --git a/configure.in.in b/configure.in.in new file mode 100644 index 0000000..f0179ae --- /dev/null +++ b/configure.in.in @@ -0,0 +1,7 @@ +#MIN_CONFIG(3.2) +CXXFLAGS="$CXXFLAGS $KDE_DEFAULT_CXXFLAGS" + +KDE_ENABLE_HIDDEN_VISIBILITY + +KDE_INIT_DOXYGEN([KEG Libraries API Reference], [Version $VERSION]) + diff --git a/libkdcraw.lsm b/libkdcraw.lsm new file mode 100644 index 0000000..95e79c6 --- /dev/null +++ b/libkdcraw.lsm @@ -0,0 +1,15 @@ +Begin4 +Title: libkdcraw +Version: 0.1.4 +Entered-date: 2008-03-09 +Description: An library to decode RAW picture files using dcraw command line program +Keywords: kde image raw decode dcraw digikam kipi-plugins +Author: caulier dot gilles at gmail dot com (Gilles Caulier) + marcel dot wiesweg at gmx dot de (Marcel Wiesweg) +Maintained-by: +Primary-site: http://www.kipi-plugins.org +Alternate-site: +Original-site: +Platforms: +Copying-policy: GPL +End diff --git a/libkdcraw/Makefile.am b/libkdcraw/Makefile.am new file mode 100644 index 0000000..2ee9f96 --- /dev/null +++ b/libkdcraw/Makefile.am @@ -0,0 +1,12 @@ +SUBDIRS = dcraw icons libkdcraw + +libkdcrawpkgconfigdir = $(libdir)/pkgconfig +libkdcrawpkgconfig_DATA = libkdcraw.pc +EXTRA_DIST = libkdcraw.pc.in + +# i18n translation messages +messages: + LIST=`find . -name \*.h -o -name \*.hh -o -name \*.H -o -name \*.hxx -o -name \*.hpp -o -name \*.cpp -o -name \*.cc -o -name \*.cxx -o -name \*.ecpp -o -name \*.C`; \ + if test -n "$$LIST"; then \ + $(XGETTEXT) $$LIST -o $(podir)/libkdcraw.pot; \ + fi \ No newline at end of file diff --git a/libkdcraw/configure.in.bot b/libkdcraw/configure.in.bot new file mode 100644 index 0000000..1f250da --- /dev/null +++ b/libkdcraw/configure.in.bot @@ -0,0 +1,19 @@ +dnl Put here things to be done at the very end - telling users +dnl about additional packages to install. + +echo "" +echo "-- libkdcraw configure results -------------------" + +if test "x$have_lcms" != "xyes"; then + echo "-- lcms found..................... NO" + echo "" + echo "libkdcraw needs Lcms library. You need to install the lcms development package." + echo "Lcms website is at http://www.littlecms.com" + echo "" + all_tests=bad +else + echo "-- lcms found..................... YES" +fi + + + diff --git a/libkdcraw/configure.in.in b/libkdcraw/configure.in.in new file mode 100644 index 0000000..34c437d --- /dev/null +++ b/libkdcraw/configure.in.in @@ -0,0 +1,98 @@ +AC_ARG_VAR(PKGCONFIGFOUND, [Path to pkg-config]) +AC_CHECK_PROG(PKGCONFIGFOUND, pkg-config,[yes]) + +#----------------------------------------------------------------- +# Library API version +# ----------------------------------------------------------------- + +ABI_MAJOR=3 +VERSION_INFO="3:0:0" + +AC_SUBST(ABI_MAJOR) +AC_SUBST(VERSION_INFO) + +KDCRAW_DIR="\$(libdir)/libkdcraw\$(ABI_MAJOR)" +AC_SUBST(KDCRAW_DIR) +# AM_PROG_CC_C_O to avoid that automake complains for it +AM_PROG_CC_C_O + +# ----------------------------------------------------------------- +# lcms check +# ----------------------------------------------------------------- + +have_lcms_header='no' +KDE_CHECK_HEADER(lcms/lcms.h,have_lcms_header='yes',,) +if test "$have_lcms_header" = 'yes' +then + AC_DEFINE(LCMS_HEADER, , [The correct header]) +else + # Alternative! Debian does it this way... + KDE_CHECK_HEADER(lcms.h,have_lcms_header='yes',,) + if test "$have_lcms_header" = 'yes' + then + AC_DEFINE(LCMS_HEADER, , [The correct header]) + fi +fi + +LCMS_LIBS='' +have_lcms='no' +if test "$have_lcms_header" = 'yes' +then + saved_cflags="$CFLAGS" + saved_ldflags="$LDFLAGS" + saved_libs=$LIBS + LIBS="$LIBS -llcms" + CFLAGS="$CFLAGS $all_includes" + LDFLAGS="$LDFLAGS $all_libraries" + + AC_TRY_LINK([ +#define inline __inline /* gcc is in ansi mode */ +#include LCMS_HEADER +#if LCMS_VERSION < 112 +choke! +#endif +], [ +cmsOpenProfileFromFile("foo", "r"); +], + [LCMS_LIBS='-llcms'; have_lcms='yes']) + LIBS=$saved_libs + CFLAGS=$saved_cflags + LDFLAGS=$saved_ldflags +fi + +if test -z "$LCMS_LIBS"; then + DO_NOT_COMPILE="$DO_NOT_COMPILE libkdcraw" +fi + +AC_SUBST(LCMS_LIBS) + +#AM_CONDITIONAL(compile_LIBKDCRAW, [test x$have_lcms != xyes]) + +AC_OUTPUT([ libkdcraw/libkdcraw.pc ]) + +# ----------------------------------------------------------------- +# enable hidden visibility only if kde >= 3.3.2 and kdelibs has +# been compiled with visibility enabled +# ----------------------------------------------------------------- + +AC_LANG_PUSH(C++) +libkdcraw_kdemacros_cppflags=$CPPFLAGS +CPPFLAGS="$CPPFLAGS $all_includes" +AC_MSG_CHECKING([if kdemacros.h is usable]) +AC_COMPILE_IFELSE( + [ + #include + #include + int other_func( void ) KDE_EXPORT; + int other_func( void ) + { + std::string s("KDE_EXPORT"); + return 0; + } + ], + [ AC_MSG_RESULT([yes]) + AC_DEFINE(KDEMACROS_USABLE, 1, [kdemacros.h usable]) ], + [ AC_MSG_RESULT([no]) ] +) +CPPFLAGS=$libkdcraw_kdemacros_cppflags +AC_LANG_POP(C++) diff --git a/libkdcraw/dcraw/CAMERALIST b/libkdcraw/dcraw/CAMERALIST new file mode 100644 index 0000000..432e69e --- /dev/null +++ b/libkdcraw/dcraw/CAMERALIST @@ -0,0 +1,296 @@ +Adobe Digital Negative (DNG) +Apple QuickTake 100 +Apple QuickTake 150 +Apple QuickTake 200 +AVT F-080C +AVT F-145C +AVT F-201C +AVT F-510C +AVT F-810C +Canon PowerShot 600 +Canon PowerShot A5 +Canon PowerShot A5 Zoom +Canon PowerShot A50 +Canon PowerShot A460 (CHDK hack) +Canon PowerShot A530 (CHDK hack) +Canon PowerShot A610 (CHDK hack) +Canon PowerShot A620 (CHDK hack) +Canon PowerShot A630 (CHDK hack) +Canon PowerShot A640 (CHDK hack) +Canon PowerShot A650 (CHDK hack) +Canon PowerShot A710 IS (CHDK hack) +Canon PowerShot A720 IS (CHDK hack) +Canon PowerShot Pro70 +Canon PowerShot Pro90 IS +Canon PowerShot G1 +Canon PowerShot G2 +Canon PowerShot G3 +Canon PowerShot G5 +Canon PowerShot G6 +Canon PowerShot G7 (CHDK hack) +Canon PowerShot G9 +Canon PowerShot S2 IS (CHDK hack) +Canon PowerShot S3 IS (CHDK hack) +Canon PowerShot S5 IS (CHDK hack) +Canon PowerShot S30 +Canon PowerShot S40 +Canon PowerShot S45 +Canon PowerShot S50 +Canon PowerShot S60 +Canon PowerShot S70 +Canon PowerShot Pro1 +Canon EOS D30 +Canon EOS D60 +Canon EOS 5D +Canon EOS 10D +Canon EOS 20D +Canon EOS 30D +Canon EOS 40D +Canon EOS 300D / Digital Rebel / Kiss Digital +Canon EOS 350D / Digital Rebel XT / Kiss Digital N +Canon EOS 400D / Digital Rebel XTi / Kiss Digital X +Canon EOS D2000C +Canon EOS-1D +Canon EOS-1DS +Canon EOS-1D Mark II +Canon EOS-1D Mark III +Canon EOS-1D Mark II N +Canon EOS-1Ds Mark II +Canon EOS-1Ds Mark III +Casio QV-2000UX +Casio QV-3000EX +Casio QV-3500EX +Casio QV-4000 +Casio QV-5700 +Casio QV-R41 +Casio QV-R51 +Casio QV-R61 +Casio EX-S100 +Casio EX-Z4 +Casio EX-Z50 +Casio EX-Z55 +Casio Exlim Pro 505 +Casio Exlim Pro 600 +Casio Exlim Pro 700 +Contax N Digital +Creative PC-CAM 600 +Epson R-D1 +Foculus 531C +Fuji FinePix E550 +Fuji FinePix E900 +Fuji FinePix F700 +Fuji FinePix F710 +Fuji FinePix F800 +Fuji FinePix F810 +Fuji FinePix S2Pro +Fuji FinePix S3Pro +Fuji FinePix S5Pro +Fuji FinePix S20Pro +Fuji FinePix S5000 +Fuji FinePix S5100/S5500 +Fuji FinePix S5200/S5600 +Fuji FinePix S6000fd +Fuji FinePix S7000 +Fuji FinePix S9000/S9500 +Fuji FinePix S9100/S9600 +Fuji IS-1 +Hasselblad CFV +Hasselblad H3D +Imacon Ixpress 16-megapixel +Imacon Ixpress 22-megapixel +Imacon Ixpress 39-megapixel +ISG 2020x1520 +Kodak DC20 (see Oliver Hartman's page) +Kodak DC25 (see Jun-ichiro Itoh's page) +Kodak DC40 +Kodak DC50 +Kodak DC120 (also try kdc2tiff) +Kodak DCS200 +Kodak DCS315C +Kodak DCS330C +Kodak DCS420 +Kodak DCS460 +Kodak DCS460A +Kodak DCS520C +Kodak DCS560C +Kodak DCS620C +Kodak DCS620X +Kodak DCS660C +Kodak DCS660M +Kodak DCS720X +Kodak DCS760C +Kodak DCS760M +Kodak EOSDCS1 +Kodak EOSDCS3B +Kodak NC2000F +Kodak ProBack +Kodak PB645C +Kodak PB645H +Kodak PB645M +Kodak DCS Pro 14n +Kodak DCS Pro 14nx +Kodak DCS Pro SLR/c +Kodak DCS Pro SLR/n +Kodak C330 +Kodak P850 +Kodak P880 +Kodak KAI-0340 +Konica KD-400Z +Konica KD-510Z +Leaf Aptus 17 +Leaf Aptus 22 +Leaf Aptus 54S +Leaf Aptus 65 +Leaf Aptus 75 +Leaf Aptus 75S +Leaf Cantare +Leaf CatchLight +Leaf CMost +Leaf DCB2 +Leaf Valeo 6 +Leaf Valeo 11 +Leaf Valeo 17 +Leaf Valeo 22 +Leaf Volare +Leica Digilux 2 +Leica Digilux 3 +Leica D-LUX2 +Leica D-LUX3 +Leica V-LUX1 +Logitech Fotoman Pixtura +Mamiya ZD +Micron 2010 +Minolta RD175 +Minolta DiMAGE 5 +Minolta DiMAGE 7 +Minolta DiMAGE 7i +Minolta DiMAGE 7Hi +Minolta DiMAGE A1 +Minolta DiMAGE A2 +Minolta DiMAGE A200 +Minolta DiMAGE G400 +Minolta DiMAGE G500 +Minolta DiMAGE G530 +Minolta DiMAGE G600 +Minolta DiMAGE Z2 +Minolta Alpha/Dynax/Maxxum 5D +Minolta Alpha/Dynax/Maxxum 7D +Nikon D1 +Nikon D1H +Nikon D1X +Nikon D2H +Nikon D2Hs +Nikon D2X +Nikon D2Xs +Nikon D3 +Nikon D40 +Nikon D40X +Nikon D50 +Nikon D70 +Nikon D70s +Nikon D80 +Nikon D100 +Nikon D200 +Nikon D300 +Nikon E700 ("DIAG RAW" hack) +Nikon E800 ("DIAG RAW" hack) +Nikon E880 ("DIAG RAW" hack) +Nikon E900 ("DIAG RAW" hack) +Nikon E950 ("DIAG RAW" hack) +Nikon E990 ("DIAG RAW" hack) +Nikon E995 ("DIAG RAW" hack) +Nikon E2100 ("DIAG RAW" hack) +Nikon E2500 ("DIAG RAW" hack) +Nikon E3200 ("DIAG RAW" hack) +Nikon E3700 ("DIAG RAW" hack) +Nikon E4300 ("DIAG RAW" hack) +Nikon E4500 ("DIAG RAW" hack) +Nikon E5000 +Nikon E5400 +Nikon E5700 +Nikon E8400 +Nikon E8700 +Nikon E8800 +Nikon Coolpix S6 ("DIAG RAW" hack) +Nokia N95 +Olympus C3030Z +Olympus C5050Z +Olympus C5060WZ +Olympus C7070WZ +Olympus C70Z,C7000Z +Olympus C740UZ +Olympus C770UZ +Olympus C8080WZ +Olympus E-1 +Olympus E-3 +Olympus E-10 +Olympus E-20 +Olympus E-300 +Olympus E-330 +Olympus E-400 +Olympus E-410 +Olympus E-500 +Olympus E-510 +Olympus SP310 +Olympus SP320 +Olympus SP350 +Olympus SP500UZ +Olympus SP510UZ +Olympus SP550UZ +Olympus SP560UZ +Panasonic DMC-FZ8 +Panasonic DMC-FZ18 +Panasonic DMC-FZ30 +Panasonic DMC-FZ50 +Panasonic DMC-L1 +Panasonic DMC-L10 +Panasonic DMC-LC1 +Panasonic DMC-LX1 +Panasonic DMC-LX2 +Pentax *ist D +Pentax *ist DL +Pentax *ist DL2 +Pentax *ist DS +Pentax *ist DS2 +Pentax K10D +Pentax K20D +Pentax K100D +Pentax K100D Super +Pentax Optio S +Pentax Optio S4 +Pentax Optio 33WR +Pentax Optio 750Z +Phase One LightPhase +Phase One H 10 +Phase One H 20 +Phase One H 25 +Phase One P 20 +Phase One P 25 +Phase One P 30 +Phase One P 45 +Pixelink A782 +Polaroid x530 +Rollei d530flex +RoverShot 3320af +Samsung GX-1S +Samsung GX-10 +Sarnoff 4096x5440 +Sigma SD9 +Sigma SD10 +Sigma SD14 +Sinar 3072x2048 +Sinar 4080x4080 +Sinar 4080x5440 +Sinar STI format +SMaL Ultra-Pocket 3 +SMaL Ultra-Pocket 4 +SMaL Ultra-Pocket 5 +Sony DSC-F828 +Sony DSC-R1 +Sony DSC-V3 +Sony DSLR-A100 +Sony DSLR-A200 +Sony DSLR-A350 +Sony DSLR-A700 +Sony XCD-SX910CR +STV680 VGA \ No newline at end of file diff --git a/libkdcraw/dcraw/Makefile.am b/libkdcraw/dcraw/Makefile.am new file mode 100644 index 0000000..1a5e241 --- /dev/null +++ b/libkdcraw/dcraw/Makefile.am @@ -0,0 +1,38 @@ +# Requires by dcraw.c implementation. +KDE_OPTIONS = nofinal + +METASOURCES = AUTO + +#-- dcraw binary ------------------------------------------------- + +# libkdcraw use a dedicaced dcraw binary program to run. This is mandatory +# since dcraw author have broken the command line options +# compatibility with the 8.x serie. +# Also, dcraw is not available like a library. +# The dcraw.c source code is just a copy of official implementation, but +# this one have been completly tested with libkdcraw core. +# Note: dcraw project page is http://cybercom.net/~dcoffin + +bin_PROGRAMS = kdcraw +bindir = $(KDCRAW_DIR) + +# The manual page of binary program. (Don't install manpage of a library +# internal helper app +#man_MANS = kdcraw.1 + +# This line is require to prevent broken compilation with -std=iso9899:1990 gcc option. +# In fact, dcraw.c use lcms.h witch use the "inline" keyword witch do not exist in pure C +# implementation. The -Dinline option please compiler to see inline with this option. +# Note : using -std-c99 instead -std=iso9899:1990 is not possible because some compiler +# do not support it. +# Thanks to Andras Mantia for this tip. +kdcraw_CFLAGS = -Dinline= -w $(all_includes) + +kdcraw_SOURCES = dcraw.c + +kdcraw_LDFLAGS = $(all_libraries) $(LIBJPEG) $(LCMS_LIBS) + +# Install Camera list supported by dcraw. +cameralistdir = $(KDCRAW_DIR) +cameralist_DATA = CAMERALIST + diff --git a/libkdcraw/dcraw/README b/libkdcraw/dcraw/README new file mode 100644 index 0000000..fb24651 --- /dev/null +++ b/libkdcraw/dcraw/README @@ -0,0 +1,64 @@ +DCRAW BACKPORT GUIDELINE. +----------------------------- + +1/ Backport "dcraw.c" source code. + +The dcraw.c file must be updated periodically to support new RAW files format. +The current implementation can be found at this url: + +http://cybercom.net/~dcoffin/dcraw/dcraw.c + +Following lines need to be changed in dcraw.c : + +==> With "-i -v" options to report Make and Model identification properly using separate lines + on the console a printf need to be added like this: + +int CLASS main (int argc, char **argv) +{ +... + /* NOTE: digiKam Fix : separate output of "make" and "model" information. + printf (_("Camera: %s %s\n"), make, model); */ + printf (_("Camera: %s\n"), make); + printf (_("Model: %s\n"), model); +... +} + +These information are used by KDcraw class to give some metadata with Exiv2 unsupported RAW file formats. + +No others part in dcraw.c source must be changed. This is not the goal to libkdcraw to re-implement RAW file decoding algorithms. + +Rename the old "dcraw.c" from svn to "dcraw-old.c" before to update it. + + +2/ Backport "dcraw.1" man page. + +wget http://www.cybercom.net/~dcoffin/dcraw/dcraw.1 + +Just copying the new dcraw man page from Dave Coffin web site. Renaming it to "kdcraw.1". Nothing must be changed in this file. + + +3/ Check new options. + +Look into "int CLASS main (int argc, char **argv)" method from new "dcraw.c". +Compare it to "dcraw-old.c", about: + +-the new options provided to decoding RAW file pictures. The option list is given on the console when kdcraw is invoked from command line without arguments. Look into the detailed description of all options using man page. The DcrawSettingsWidget, RawDecodingSettings, and KDcraw class need to be updated accordingly, especially the KDcraw::loadFromDcraw() method. + +-the new information provided by -i -v command line options. The KDcraw::rawFileIdentify() method and the DcrawInfoContainer need to be updated accordingly. + + +4/ Regression tests. + +Recompile libkdcraw, Raw Converter kipi-plugin, and digiKam. All must work fine to use RAW file decoding into digiKam image editor and RAW Converter tool. + + +5/ Clean up. + +Remove the "dcraw-old.c" file. Not need to archive it in svn. + + +6/ Update the internal dcraw version number returned by KDcraw::DcrawBinary::InternalVersion() method + (Check the "#define VERSION ..." string from dcraw.c). + +7/ On DCRaw project page (http://cybercom.net/~dcoffin/dcraw), extract the current camera list + supported and update the file "CAMERALIST". diff --git a/libkdcraw/dcraw/dcraw.c b/libkdcraw/dcraw/dcraw.c new file mode 100644 index 0000000..3953574 --- /dev/null +++ b/libkdcraw/dcraw/dcraw.c @@ -0,0 +1,8482 @@ +/* + dcraw.c -- Dave Coffin's raw photo decoder + Copyright 1997-2008 by Dave Coffin, dcoffin a cybercom o net + + This is a command-line ANSI C program to convert raw photos from + any digital camera on any computer running any operating system. + + No license is required to download and use dcraw.c. However, + to lawfully redistribute dcraw, you must either (a) offer, at + no extra charge, full source code* for all executable files + containing RESTRICTED functions, (b) distribute this code under + the GPL Version 2 or later, (c) remove all RESTRICTED functions, + re-implement them, or copy them from an earlier, unrestricted + Revision of dcraw.c, or (d) purchase a license from the author. + + The functions that process Foveon images have been RESTRICTED + since Revision 1.237. All other code remains free for all uses. + + *If you have not modified dcraw.c in any way, a link to my + homepage qualifies as "full source code". + + $Revision: 1.399 $ + $Date: 2008/03/05 01:29:34 $ + */ + +#define VERSION "8.83" + +#define _GNU_SOURCE +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/* + NO_JPEG disables decoding of compressed Kodak DC120 files. + NO_LCMS disables the "-p" option. + */ +#ifndef NO_JPEG +#include +#endif +#ifndef NO_LCMS +#include +#endif +#ifdef LOCALEDIR +#include +#define _(String) gettext(String) +#else +#define _(String) (String) +#endif +#ifdef DJGPP +#define fseeko fseek +#define ftello ftell +#else +#define fgetc getc_unlocked +#endif +#ifdef __CYGWIN__ +#include +#endif +#ifdef WIN32 +#include +#include +#pragma comment(lib, "ws2_32.lib") +#define snprintf _snprintf +#define strcasecmp stricmp +#define strncasecmp strnicmp +typedef __int64 INT64; +typedef unsigned __int64 UINT64; +#else +#include +#include +#include +typedef long long INT64; +typedef unsigned long long UINT64; +#endif + +#ifdef LJPEG_DECODE +#error Please compile dcraw.c by itself. +#error Do not link it with ljpeg_decode. +#endif + +#ifndef LONG_BIT +#define LONG_BIT (8 * sizeof (long)) +#endif + +#define ushort UshORt +typedef unsigned char uchar; +typedef unsigned short ushort; + +/* + All global variables are defined here, and all functions that + access them are prefixed with "CLASS". Note that a thread-safe + C++ class cannot have non-const static local variables. + */ +FILE *ifp; +short order; +char *ifname, *meta_data; +char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; +float flash_used, canon_ev, iso_speed, shutter, aperture, focal_len; +time_t timestamp; +unsigned shot_order, kodak_cbpp, filters, exif_cfa, unique_id; +off_t strip_offset, data_offset; +off_t thumb_offset, meta_offset, profile_offset; +unsigned thumb_length, meta_length, profile_length; +unsigned thumb_misc, *oprof, fuji_layout, shot_select=0, multi_out=0; +unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress; +unsigned black, maximum, mix_green, raw_color, use_gamma, zero_is_bad; +unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error; +unsigned tile_width, tile_length, gpsdata[32]; +ushort raw_height, raw_width, height, width, top_margin, left_margin; +ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height; +int flip, tiff_flip, colors; +double pixel_aspect, aber[4]={1,1,1,1}; +ushort (*image)[4], white[8][8], curve[0x4001], cr2_slice[3], sraw_mul[4]; +float bright=1, user_mul[4]={0,0,0,0}, threshold=0; +int half_size=0, four_color_rgb=0, document_mode=0, highlight=0; +int verbose=0, use_auto_wb=0, use_camera_wb=0, use_camera_matrix=-1; +int output_color=1, output_bps=8, output_tiff=0, med_passes=0; +int no_auto_bright=0; +unsigned greybox[4] = { 0, 0, UINT_MAX, UINT_MAX }; +float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; +const double xyz_rgb[3][3] = { /* XYZ from RGB */ + { 0.412453, 0.357580, 0.180423 }, + { 0.212671, 0.715160, 0.072169 }, + { 0.019334, 0.119193, 0.950227 } }; +const float d65_white[3] = { 0.950456, 1, 1.088754 }; +int histogram[4][0x2000]; +void (*write_thumb)(FILE *), (*write_fun)(FILE *); +void (*load_raw)(), (*thumb_load_raw)(); +jmp_buf failure; + +struct decode { + struct decode *branch[2]; + int leaf; +} first_decode[2048], *second_decode, *free_decode; + +struct { + int width, height, bps, comp, phint, offset, flip, samples, bytes; +} tiff_ifd[10]; + +struct { + int format, key_off, black, black_off, split_col, tag_21a; + float tag_210; +} ph1; + +#define CLASS + +#define FORC(cnt) for (c=0; c < cnt; c++) +#define FORC3 FORC(3) +#define FORC4 FORC(4) +#define FORCC FORC(colors) + +#define SQR(x) ((x)*(x)) +#define ABS(x) (((int)(x) ^ ((int)(x) >> 31)) - ((int)(x) >> 31)) +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#define LIM(x,min,max) MAX(min,MIN(x,max)) +#define ULIM(x,y,z) ((y) < (z) ? LIM(x,y,z) : LIM(x,z,y)) +#define CLIP(x) LIM(x,0,65535) +#define SWAP(a,b) { a ^= b; a ^= (b ^= a); } + +/* + In order to inline this calculation, I make the risky + assumption that all filter patterns can be described + by a repeating pattern of eight rows and two columns + + Do not use the FC or BAYER macros with the Leaf CatchLight, + because its pattern is 16x16, not 2x8. + + Return values are either 0/1/2/3 = G/M/C/Y or 0/1/2/3 = R/G1/B/G2 + + PowerShot 600 PowerShot A50 PowerShot Pro70 Pro90 & G1 + 0xe1e4e1e4: 0x1b4e4b1e: 0x1e4b4e1b: 0xb4b4b4b4: + + 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 + 0 G M G M G M 0 C Y C Y C Y 0 Y C Y C Y C 0 G M G M G M + 1 C Y C Y C Y 1 M G M G M G 1 M G M G M G 1 Y C Y C Y C + 2 M G M G M G 2 Y C Y C Y C 2 C Y C Y C Y + 3 C Y C Y C Y 3 G M G M G M 3 G M G M G M + 4 C Y C Y C Y 4 Y C Y C Y C + PowerShot A5 5 G M G M G M 5 G M G M G M + 0x1e4e1e4e: 6 Y C Y C Y C 6 C Y C Y C Y + 7 M G M G M G 7 M G M G M G + 0 1 2 3 4 5 + 0 C Y C Y C Y + 1 G M G M G M + 2 C Y C Y C Y + 3 M G M G M G + + All RGB cameras use one of these Bayer grids: + + 0x16161616: 0x61616161: 0x49494949: 0x94949494: + + 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 + 0 B G B G B G 0 G R G R G R 0 G B G B G B 0 R G R G R G + 1 G R G R G R 1 B G B G B G 1 R G R G R G 1 G B G B G B + 2 B G B G B G 2 G R G R G R 2 G B G B G B 2 R G R G R G + 3 G R G R G R 3 B G B G B G 3 R G R G R G 3 G B G B G B + */ + +#define FC(row,col) \ + (filters >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3) + +#define BAYER(row,col) \ + image[((row) >> shrink)*iwidth + ((col) >> shrink)][FC(row,col)] + +#define BAYER2(row,col) \ + image[((row) >> shrink)*iwidth + ((col) >> shrink)][fc(row,col)] + +int CLASS fc (int row, int col) +{ + static const char filter[16][16] = + { { 2,1,1,3,2,3,2,0,3,2,3,0,1,2,1,0 }, + { 0,3,0,2,0,1,3,1,0,1,1,2,0,3,3,2 }, + { 2,3,3,2,3,1,1,3,3,1,2,1,2,0,0,3 }, + { 0,1,0,1,0,2,0,2,2,0,3,0,1,3,2,1 }, + { 3,1,1,2,0,1,0,2,1,3,1,3,0,1,3,0 }, + { 2,0,0,3,3,2,3,1,2,0,2,0,3,2,2,1 }, + { 2,3,3,1,2,1,2,1,2,1,1,2,3,0,0,1 }, + { 1,0,0,2,3,0,0,3,0,3,0,3,2,1,2,3 }, + { 2,3,3,1,1,2,1,0,3,2,3,0,2,3,1,3 }, + { 1,0,2,0,3,0,3,2,0,1,1,2,0,1,0,2 }, + { 0,1,1,3,3,2,2,1,1,3,3,0,2,1,3,2 }, + { 2,3,2,0,0,1,3,0,2,0,1,2,3,0,1,0 }, + { 1,3,1,2,3,2,3,2,0,2,0,1,1,0,3,0 }, + { 0,2,0,3,1,0,0,1,1,3,3,2,3,2,2,1 }, + { 2,1,3,2,3,1,2,1,0,3,0,2,0,2,0,2 }, + { 0,3,1,0,0,2,0,3,2,1,3,1,1,3,1,3 } }; + + if (filters != 1) return FC(row,col); + return filter[(row+top_margin) & 15][(col+left_margin) & 15]; +} + +#ifndef __GLIBC__ +char *my_memmem (char *haystack, size_t haystacklen, + char *needle, size_t needlelen) +{ + char *c; + for (c = haystack; c <= haystack + haystacklen - needlelen; c++) + if (!memcmp (c, needle, needlelen)) + return c; + return 0; +} +#define memmem my_memmem +#endif + +void CLASS merror (void *ptr, char *where) +{ + if (ptr) return; + fprintf (stderr,_("%s: Out of memory in %s\n"), ifname, where); + longjmp (failure, 1); +} + +void CLASS derror() +{ + if (!data_error) { + fprintf (stderr, "%s: ", ifname); + if (feof(ifp)) + fprintf (stderr,_("Unexpected end of file\n")); + else + fprintf (stderr,_("Corrupt data near 0x%llx\n"), (INT64) ftello(ifp)); + } + data_error = 1; +} + +ushort CLASS sget2 (uchar *s) +{ + if (order == 0x4949) /* "II" means little-endian */ + return s[0] | s[1] << 8; + else /* "MM" means big-endian */ + return s[0] << 8 | s[1]; +} + +ushort CLASS get2() +{ + uchar str[2] = { 0xff,0xff }; + fread (str, 1, 2, ifp); + return sget2(str); +} + +unsigned CLASS sget4 (uchar *s) +{ + if (order == 0x4949) + return s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24; + else + return s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]; +} +#define sget4(s) sget4((uchar *)s) + +unsigned CLASS get4() +{ + uchar str[4] = { 0xff,0xff,0xff,0xff }; + fread (str, 1, 4, ifp); + return sget4(str); +} + +unsigned CLASS getint (int type) +{ + return type == 3 ? get2() : get4(); +} + +float CLASS int_to_float (int i) +{ + union { int i; float f; } u; + u.i = i; + return u.f; +} + +double CLASS getreal (int type) +{ + union { char c[8]; double d; } u; + int i, rev; + + switch (type) { + case 3: return (unsigned short) get2(); + case 4: return (unsigned int) get4(); + case 5: u.d = (unsigned int) get4(); + return u.d / (unsigned int) get4(); + case 8: return (signed short) get2(); + case 9: return (signed int) get4(); + case 10: u.d = (signed int) get4(); + return u.d / (signed int) get4(); + case 11: return int_to_float (get4()); + case 12: + rev = 7 * ((order == 0x4949) == (ntohs(0x1234) == 0x1234)); + for (i=0; i < 8; i++) + u.c[i ^ rev] = fgetc(ifp); + return u.d; + default: return fgetc(ifp); + } +} + +void CLASS read_shorts (ushort *pixel, int count) +{ + if (fread (pixel, 2, count, ifp) < count) derror(); + if ((order == 0x4949) == (ntohs(0x1234) == 0x1234)) + swab (pixel, pixel, count*2); +} + +void CLASS canon_600_fixed_wb (int temp) +{ + static const short mul[4][5] = { + { 667, 358,397,565,452 }, + { 731, 390,367,499,517 }, + { 1119, 396,348,448,537 }, + { 1399, 485,431,508,688 } }; + int lo, hi, i; + float frac=0; + + for (lo=4; --lo; ) + if (*mul[lo] <= temp) break; + for (hi=0; hi < 3; hi++) + if (*mul[hi] >= temp) break; + if (lo != hi) + frac = (float) (temp - *mul[lo]) / (*mul[hi] - *mul[lo]); + for (i=1; i < 5; i++) + pre_mul[i-1] = 1 / (frac * mul[hi][i] + (1-frac) * mul[lo][i]); +} + +/* Return values: 0 = white 1 = near white 2 = not white */ +int CLASS canon_600_color (int ratio[2], int mar) +{ + int clipped=0, target, miss; + + if (flash_used) { + if (ratio[1] < -104) + { ratio[1] = -104; clipped = 1; } + if (ratio[1] > 12) + { ratio[1] = 12; clipped = 1; } + } else { + if (ratio[1] < -264 || ratio[1] > 461) return 2; + if (ratio[1] < -50) + { ratio[1] = -50; clipped = 1; } + if (ratio[1] > 307) + { ratio[1] = 307; clipped = 1; } + } + target = flash_used || ratio[1] < 197 + ? -38 - (398 * ratio[1] >> 10) + : -123 + (48 * ratio[1] >> 10); + if (target - mar <= ratio[0] && + target + 20 >= ratio[0] && !clipped) return 0; + miss = target - ratio[0]; + if (abs(miss) >= mar*4) return 2; + if (miss < -20) miss = -20; + if (miss > mar) miss = mar; + ratio[0] = target - miss; + return 1; +} + +void CLASS canon_600_auto_wb() +{ + int mar, row, col, i, j, st, count[] = { 0,0 }; + int test[8], total[2][8], ratio[2][2], stat[2]; + + memset (&total, 0, sizeof total); + i = canon_ev + 0.5; + if (i < 10) mar = 150; + else if (i > 12) mar = 20; + else mar = 280 - 20 * i; + if (flash_used) mar = 80; + for (row=14; row < height-14; row+=4) + for (col=10; col < width; col+=2) { + for (i=0; i < 8; i++) + test[(i & 4) + FC(row+(i >> 1),col+(i & 1))] = + BAYER(row+(i >> 1),col+(i & 1)); + for (i=0; i < 8; i++) + if (test[i] < 150 || test[i] > 1500) goto next; + for (i=0; i < 4; i++) + if (abs(test[i] - test[i+4]) > 50) goto next; + for (i=0; i < 2; i++) { + for (j=0; j < 4; j+=2) + ratio[i][j >> 1] = ((test[i*4+j+1]-test[i*4+j]) << 10) / test[i*4+j]; + stat[i] = canon_600_color (ratio[i], mar); + } + if ((st = stat[0] | stat[1]) > 1) goto next; + for (i=0; i < 2; i++) + if (stat[i]) + for (j=0; j < 2; j++) + test[i*4+j*2+1] = test[i*4+j*2] * (0x400 + ratio[i][j]) >> 10; + for (i=0; i < 8; i++) + total[st][i] += test[i]; + count[st]++; +next: ; + } + if (count[0] | count[1]) { + st = count[0]*200 < count[1]; + for (i=0; i < 4; i++) + pre_mul[i] = 1.0 / (total[st][i] + total[st][i+4]); + } +} + +void CLASS canon_600_coeff() +{ + static const short table[6][12] = { + { -190,702,-1878,2390, 1861,-1349,905,-393, -432,944,2617,-2105 }, + { -1203,1715,-1136,1648, 1388,-876,267,245, -1641,2153,3921,-3409 }, + { -615,1127,-1563,2075, 1437,-925,509,3, -756,1268,2519,-2007 }, + { -190,702,-1886,2398, 2153,-1641,763,-251, -452,964,3040,-2528 }, + { -190,702,-1878,2390, 1861,-1349,905,-393, -432,944,2617,-2105 }, + { -807,1319,-1785,2297, 1388,-876,769,-257, -230,742,2067,-1555 } }; + int t=0, i, c; + float mc, yc; + + mc = pre_mul[1] / pre_mul[2]; + yc = pre_mul[3] / pre_mul[2]; + if (mc > 1 && mc <= 1.28 && yc < 0.8789) t=1; + if (mc > 1.28 && mc <= 2) { + if (yc < 0.8789) t=3; + else if (yc <= 2) t=4; + } + if (flash_used) t=5; + for (raw_color = i=0; i < 3; i++) + FORCC rgb_cam[i][c] = table[t][i*4 + c] / 1024.0; +} + +void CLASS canon_600_load_raw() +{ + uchar data[1120], *dp; + ushort pixel[896], *pix; + int irow, row, col, val; + static const short mul[4][2] = + { { 1141,1145 }, { 1128,1109 }, { 1178,1149 }, { 1128,1109 } }; + + for (irow=row=0; irow < height; irow++) { + if (fread (data, 1, raw_width*5/4, ifp) < raw_width*5/4) derror(); + for (dp=data, pix=pixel; dp < data+1120; dp+=10, pix+=8) { + pix[0] = (dp[0] << 2) + (dp[1] >> 6 ); + pix[1] = (dp[2] << 2) + (dp[1] >> 4 & 3); + pix[2] = (dp[3] << 2) + (dp[1] >> 2 & 3); + pix[3] = (dp[4] << 2) + (dp[1] & 3); + pix[4] = (dp[5] << 2) + (dp[9] & 3); + pix[5] = (dp[6] << 2) + (dp[9] >> 2 & 3); + pix[6] = (dp[7] << 2) + (dp[9] >> 4 & 3); + pix[7] = (dp[8] << 2) + (dp[9] >> 6 ); + } + for (col=0; col < width; col++) + BAYER(row,col) = pixel[col]; + for (col=width; col < raw_width; col++) + black += pixel[col]; + if ((row+=2) > height) row = 1; + } + if (raw_width > width) + black = black / ((raw_width - width) * height) - 4; + for (row=0; row < height; row++) + for (col=0; col < width; col++) { + if ((val = BAYER(row,col) - black) < 0) val = 0; + val = val * mul[row & 3][col & 1] >> 9; + BAYER(row,col) = val; + } + canon_600_fixed_wb(1311); + canon_600_auto_wb(); + canon_600_coeff(); + maximum = (0x3ff - black) * 1109 >> 9; + black = 0; +} + +void CLASS remove_zeroes() +{ + unsigned row, col, tot, n, r, c; + + for (row=0; row < height; row++) + for (col=0; col < width; col++) + if (BAYER(row,col) == 0) { + tot = n = 0; + for (r = row-2; r <= row+2; r++) + for (c = col-2; c <= col+2; c++) + if (r < height && c < width && + FC(r,c) == FC(row,col) && BAYER(r,c)) + tot += (n++,BAYER(r,c)); + if (n) BAYER(row,col) = tot/n; + } +} + +int CLASS canon_s2is() +{ + unsigned row; + + for (row=0; row < 100; row++) { + fseek (ifp, row*3340 + 3284, SEEK_SET); + if (getc(ifp) > 15) return 1; + } + return 0; +} + +void CLASS canon_a5_load_raw() +{ + ushort data[2565], *dp, pixel; + int vbits=0, buf=0, row, col, bc=0; + + order = 0x4949; + for (row=-top_margin; row < raw_height-top_margin; row++) { + read_shorts (dp=data, raw_width * 10 / 16); + for (col=-left_margin; col < raw_width-left_margin; col++) { + if (vbits < 10) + buf = (vbits += 16, (buf << 16) + *dp++); + pixel = buf >> (vbits -= 10) & 0x3ff; + if ((unsigned) row < height && (unsigned) col < width) + BAYER(row,col) = pixel; + else if (col > 1-left_margin && col != width) + black += (bc++,pixel); + } + } + if (bc) black /= bc; + maximum = 0x3ff; + if (raw_width > 1600) remove_zeroes(); +} + +/* + getbits(-1) initializes the buffer + getbits(n) where 0 <= n <= 25 returns an n-bit integer + */ +unsigned CLASS getbits (int nbits) +{ + static unsigned bitbuf=0; + static int vbits=0, reset=0; + unsigned c; + + if (nbits == -1) + return bitbuf = vbits = reset = 0; + if (nbits == 0 || reset) return 0; + while (vbits < nbits) { + if ((c = fgetc(ifp)) == EOF) derror(); + if ((reset = zero_after_ff && c == 0xff && fgetc(ifp))) return 0; + bitbuf = (bitbuf << 8) + (uchar) c; + vbits += 8; + } + vbits -= nbits; + return bitbuf << (32-nbits-vbits) >> (32-nbits); +} + +void CLASS init_decoder() +{ + memset (first_decode, 0, sizeof first_decode); + free_decode = first_decode; +} + +/* + Construct a decode tree according the specification in *source. + The first 16 bytes specify how many codes should be 1-bit, 2-bit + 3-bit, etc. Bytes after that are the leaf values. + + For example, if the source is + + { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, + 0x04,0x03,0x05,0x06,0x02,0x07,0x01,0x08,0x09,0x00,0x0a,0x0b,0xff }, + + then the code is + + 00 0x04 + 010 0x03 + 011 0x05 + 100 0x06 + 101 0x02 + 1100 0x07 + 1101 0x01 + 11100 0x08 + 11101 0x09 + 11110 0x00 + 111110 0x0a + 1111110 0x0b + 1111111 0xff + */ +uchar * CLASS make_decoder (const uchar *source, int level) +{ + struct decode *cur; + static int leaf; + int i, next; + + if (level==0) leaf=0; + cur = free_decode++; + if (free_decode > first_decode+2048) { + fprintf (stderr,_("%s: decoder table overflow\n"), ifname); + longjmp (failure, 2); + } + for (i=next=0; i <= leaf && next < 16; ) + i += source[next++]; + if (i > leaf) { + if (level < next) { + cur->branch[0] = free_decode; + make_decoder (source, level+1); + cur->branch[1] = free_decode; + make_decoder (source, level+1); + } else + cur->leaf = source[16 + leaf++]; + } + return (uchar *) source + 16 + leaf; +} + +void CLASS crw_init_tables (unsigned table) +{ + static const uchar first_tree[3][29] = { + { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, + 0x04,0x03,0x05,0x06,0x02,0x07,0x01,0x08,0x09,0x00,0x0a,0x0b,0xff }, + { 0,2,2,3,1,1,1,1,2,0,0,0,0,0,0,0, + 0x03,0x02,0x04,0x01,0x05,0x00,0x06,0x07,0x09,0x08,0x0a,0x0b,0xff }, + { 0,0,6,3,1,1,2,0,0,0,0,0,0,0,0,0, + 0x06,0x05,0x07,0x04,0x08,0x03,0x09,0x02,0x00,0x0a,0x01,0x0b,0xff }, + }; + static const uchar second_tree[3][180] = { + { 0,2,2,2,1,4,2,1,2,5,1,1,0,0,0,139, + 0x03,0x04,0x02,0x05,0x01,0x06,0x07,0x08, + 0x12,0x13,0x11,0x14,0x09,0x15,0x22,0x00,0x21,0x16,0x0a,0xf0, + 0x23,0x17,0x24,0x31,0x32,0x18,0x19,0x33,0x25,0x41,0x34,0x42, + 0x35,0x51,0x36,0x37,0x38,0x29,0x79,0x26,0x1a,0x39,0x56,0x57, + 0x28,0x27,0x52,0x55,0x58,0x43,0x76,0x59,0x77,0x54,0x61,0xf9, + 0x71,0x78,0x75,0x96,0x97,0x49,0xb7,0x53,0xd7,0x74,0xb6,0x98, + 0x47,0x48,0x95,0x69,0x99,0x91,0xfa,0xb8,0x68,0xb5,0xb9,0xd6, + 0xf7,0xd8,0x67,0x46,0x45,0x94,0x89,0xf8,0x81,0xd5,0xf6,0xb4, + 0x88,0xb1,0x2a,0x44,0x72,0xd9,0x87,0x66,0xd4,0xf5,0x3a,0xa7, + 0x73,0xa9,0xa8,0x86,0x62,0xc7,0x65,0xc8,0xc9,0xa1,0xf4,0xd1, + 0xe9,0x5a,0x92,0x85,0xa6,0xe7,0x93,0xe8,0xc1,0xc6,0x7a,0x64, + 0xe1,0x4a,0x6a,0xe6,0xb3,0xf1,0xd3,0xa5,0x8a,0xb2,0x9a,0xba, + 0x84,0xa4,0x63,0xe5,0xc5,0xf3,0xd2,0xc4,0x82,0xaa,0xda,0xe4, + 0xf2,0xca,0x83,0xa3,0xa2,0xc3,0xea,0xc2,0xe2,0xe3,0xff,0xff }, + { 0,2,2,1,4,1,4,1,3,3,1,0,0,0,0,140, + 0x02,0x03,0x01,0x04,0x05,0x12,0x11,0x06, + 0x13,0x07,0x08,0x14,0x22,0x09,0x21,0x00,0x23,0x15,0x31,0x32, + 0x0a,0x16,0xf0,0x24,0x33,0x41,0x42,0x19,0x17,0x25,0x18,0x51, + 0x34,0x43,0x52,0x29,0x35,0x61,0x39,0x71,0x62,0x36,0x53,0x26, + 0x38,0x1a,0x37,0x81,0x27,0x91,0x79,0x55,0x45,0x28,0x72,0x59, + 0xa1,0xb1,0x44,0x69,0x54,0x58,0xd1,0xfa,0x57,0xe1,0xf1,0xb9, + 0x49,0x47,0x63,0x6a,0xf9,0x56,0x46,0xa8,0x2a,0x4a,0x78,0x99, + 0x3a,0x75,0x74,0x86,0x65,0xc1,0x76,0xb6,0x96,0xd6,0x89,0x85, + 0xc9,0xf5,0x95,0xb4,0xc7,0xf7,0x8a,0x97,0xb8,0x73,0xb7,0xd8, + 0xd9,0x87,0xa7,0x7a,0x48,0x82,0x84,0xea,0xf4,0xa6,0xc5,0x5a, + 0x94,0xa4,0xc6,0x92,0xc3,0x68,0xb5,0xc8,0xe4,0xe5,0xe6,0xe9, + 0xa2,0xa3,0xe3,0xc2,0x66,0x67,0x93,0xaa,0xd4,0xd5,0xe7,0xf8, + 0x88,0x9a,0xd7,0x77,0xc4,0x64,0xe2,0x98,0xa5,0xca,0xda,0xe8, + 0xf3,0xf6,0xa9,0xb2,0xb3,0xf2,0xd2,0x83,0xba,0xd3,0xff,0xff }, + { 0,0,6,2,1,3,3,2,5,1,2,2,8,10,0,117, + 0x04,0x05,0x03,0x06,0x02,0x07,0x01,0x08, + 0x09,0x12,0x13,0x14,0x11,0x15,0x0a,0x16,0x17,0xf0,0x00,0x22, + 0x21,0x18,0x23,0x19,0x24,0x32,0x31,0x25,0x33,0x38,0x37,0x34, + 0x35,0x36,0x39,0x79,0x57,0x58,0x59,0x28,0x56,0x78,0x27,0x41, + 0x29,0x77,0x26,0x42,0x76,0x99,0x1a,0x55,0x98,0x97,0xf9,0x48, + 0x54,0x96,0x89,0x47,0xb7,0x49,0xfa,0x75,0x68,0xb6,0x67,0x69, + 0xb9,0xb8,0xd8,0x52,0xd7,0x88,0xb5,0x74,0x51,0x46,0xd9,0xf8, + 0x3a,0xd6,0x87,0x45,0x7a,0x95,0xd5,0xf6,0x86,0xb4,0xa9,0x94, + 0x53,0x2a,0xa8,0x43,0xf5,0xf7,0xd4,0x66,0xa7,0x5a,0x44,0x8a, + 0xc9,0xe8,0xc8,0xe7,0x9a,0x6a,0x73,0x4a,0x61,0xc7,0xf4,0xc6, + 0x65,0xe9,0x72,0xe6,0x71,0x91,0x93,0xa6,0xda,0x92,0x85,0x62, + 0xf3,0xc5,0xb2,0xa4,0x84,0xba,0x64,0xa5,0xb3,0xd2,0x81,0xe5, + 0xd3,0xaa,0xc4,0xca,0xf2,0xb1,0xe4,0xd1,0x83,0x63,0xea,0xc3, + 0xe2,0x82,0xf1,0xa3,0xc2,0xa1,0xc1,0xe3,0xa2,0xe1,0xff,0xff } + }; + if (table > 2) table = 2; + init_decoder(); + make_decoder ( first_tree[table], 0); + second_decode = free_decode; + make_decoder (second_tree[table], 0); +} + +/* + Return 0 if the image starts with compressed data, + 1 if it starts with uncompressed low-order bits. + + In Canon compressed data, 0xff is always followed by 0x00. + */ +int CLASS canon_has_lowbits() +{ + uchar test[0x4000]; + int ret=1, i; + + fseek (ifp, 0, SEEK_SET); + fread (test, 1, sizeof test, ifp); + for (i=540; i < sizeof test - 1; i++) + if (test[i] == 0xff) { + if (test[i+1]) return 1; + ret=0; + } + return ret; +} + +void CLASS canon_compressed_load_raw() +{ + ushort *pixel, *prow; + int nblocks, lowbits, i, row, r, col, save, val; + unsigned irow, icol; + struct decode *decode, *dindex; + int block, diffbuf[64], leaf, len, diff, carry=0, pnum=0, base[2]; + uchar c; + + crw_init_tables (tiff_compress); + pixel = (ushort *) calloc (raw_width*8, sizeof *pixel); + merror (pixel, "canon_compressed_load_raw()"); + lowbits = canon_has_lowbits(); + if (!lowbits) maximum = 0x3ff; + fseek (ifp, 540 + lowbits*raw_height*raw_width/4, SEEK_SET); + zero_after_ff = 1; + getbits(-1); + for (row=0; row < raw_height; row+=8) { + nblocks = MIN (8, raw_height-row) * raw_width >> 6; + for (block=0; block < nblocks; block++) { + memset (diffbuf, 0, sizeof diffbuf); + decode = first_decode; + for (i=0; i < 64; i++ ) { + for (dindex=decode; dindex->branch[0]; ) + dindex = dindex->branch[getbits(1)]; + leaf = dindex->leaf; + decode = second_decode; + if (leaf == 0 && i) break; + if (leaf == 0xff) continue; + i += leaf >> 4; + len = leaf & 15; + if (len == 0) continue; + diff = getbits(len); + if ((diff & (1 << (len-1))) == 0) + diff -= (1 << len) - 1; + if (i < 64) diffbuf[i] = diff; + } + diffbuf[0] += carry; + carry = diffbuf[0]; + for (i=0; i < 64; i++ ) { + if (pnum++ % raw_width == 0) + base[0] = base[1] = 512; + if ((pixel[(block << 6) + i] = base[i & 1] += diffbuf[i]) >> 10) + derror(); + } + } + if (lowbits) { + save = ftell(ifp); + fseek (ifp, 26 + row*raw_width/4, SEEK_SET); + for (prow=pixel, i=0; i < raw_width*2; i++) { + c = fgetc(ifp); + for (r=0; r < 8; r+=2, prow++) { + val = (*prow << 2) + ((c >> r) & 3); + if (raw_width == 2672 && val < 512) val += 2; + *prow = val; + } + } + fseek (ifp, save, SEEK_SET); + } + for (r=0; r < 8; r++) { + irow = row - top_margin + r; + if (irow >= height) continue; + for (col=0; col < raw_width; col++) { + icol = col - left_margin; + if (icol < width) + BAYER(irow,icol) = pixel[r*raw_width+col]; + else + black += pixel[r*raw_width+col]; + } + } + } + free (pixel); + if (raw_width > width) + black /= (raw_width - width) * height; +} + +/* + Not a full implementation of Lossless JPEG, just + enough to decode Canon, Kodak and Adobe DNG images. + */ +struct jhead { + int bits, high, wide, clrs, psv, restart, vpred[4]; + struct CLASS decode *huff[4]; + ushort *row; +}; + +int CLASS ljpeg_start (struct jhead *jh, int info_only) +{ + int i, tag, len; + uchar data[0x10000], *dp; + + init_decoder(); + memset (jh, 0, sizeof *jh); + for (i=0; i < 4; i++) + jh->huff[i] = free_decode; + jh->restart = INT_MAX; + fread (data, 2, 1, ifp); + if (data[1] != 0xd8) return 0; + do { + fread (data, 2, 2, ifp); + tag = data[0] << 8 | data[1]; + len = (data[2] << 8 | data[3]) - 2; + if (tag <= 0xff00) return 0; + fread (data, 1, len, ifp); + switch (tag) { + case 0xffc0: data[7] = 0; + case 0xffc3: + jh->bits = data[0]; + jh->high = data[1] << 8 | data[2]; + jh->wide = data[3] << 8 | data[4]; + jh->clrs = data[5] + (data[7] == 0x21); + if (len == 9 && !dng_version) getc(ifp); + break; + case 0xffc4: + if (info_only) break; + for (dp = data; dp < data+len && *dp < 4; ) { + jh->huff[*dp] = free_decode; + dp = make_decoder (++dp, 0); + } + break; + case 0xffda: + jh->psv = data[1+data[0]*2]; + break; + case 0xffdd: + jh->restart = data[0] << 8 | data[1]; + } + } while (tag != 0xffda); + if (info_only) return 1; + if (jh->clrs == 4) { + jh->huff[3] = jh->huff[2] = jh->huff[1]; + jh->huff[1] = jh->huff[0]; + } + jh->row = (ushort *) calloc (jh->wide*jh->clrs, 4); + merror (jh->row, "ljpeg_start()"); + return zero_after_ff = 1; +} + +int CLASS ljpeg_diff (struct decode *dindex) +{ + int len, diff; + + while (dindex->branch[0]) + dindex = dindex->branch[getbits(1)]; + len = dindex->leaf; + if (len == 16 && (!dng_version || dng_version >= 0x1010000)) + return -32768; + diff = getbits(len); + if ((diff & (1 << (len-1))) == 0) + diff -= (1 << len) - 1; + return diff; +} + +ushort * CLASS ljpeg_row (int jrow, struct jhead *jh) +{ + int col, c, diff, pred; + ushort mark=0, *row[3]; + + if (jrow * jh->wide % jh->restart == 0) { + FORC4 jh->vpred[c] = 1 << (jh->bits-1); + if (jrow) + do mark = (mark << 8) + (c = fgetc(ifp)); + while (c != EOF && mark >> 4 != 0xffd); + getbits(-1); + } + FORC3 row[c] = jh->row + jh->wide*jh->clrs*((jrow+c) & 1); + for (col=0; col < jh->wide; col++) + FORC(jh->clrs) { + diff = ljpeg_diff (jh->huff[c]); + if (jh->clrs == 4 && c < 2 && (col | c)) + pred = row[0][(c << 1)-3]; + else if (col) pred = row[0][-jh->clrs]; + else pred = (jh->vpred[c] += diff) - diff; + if (jrow && col) switch (jh->psv) { + case 1: break; + case 2: pred = row[1][0]; break; + case 3: pred = row[1][-jh->clrs]; break; + case 4: pred = pred + row[1][0] - row[1][-jh->clrs]; break; + case 5: pred = pred + ((row[1][0] - row[1][-jh->clrs]) >> 1); break; + case 6: pred = row[1][0] + ((pred - row[1][-jh->clrs]) >> 1); break; + case 7: pred = (pred + row[1][0]) >> 1; break; + default: pred = 0; + } + if ((**row = pred + diff) >> jh->bits) derror(); + row[0]++; row[1]++; + } + return row[2]; +} + +void CLASS lossless_jpeg_load_raw() +{ + int jwide, jrow, jcol, val, jidx, i, j, row=0, col=0; + struct jhead jh; + int min=INT_MAX; + ushort *rp; + + if (!ljpeg_start (&jh, 0)) return; + jwide = jh.wide * jh.clrs; + + for (jrow=0; jrow < jh.high; jrow++) { + rp = ljpeg_row (jrow, &jh); + for (jcol=0; jcol < jwide; jcol++) { + val = *rp++; + if (jh.bits <= 12) + val = curve[val]; + if (cr2_slice[0]) { + jidx = jrow*jwide + jcol; + i = jidx / (cr2_slice[1]*jh.high); + if ((j = i >= cr2_slice[0])) + i = cr2_slice[0]; + jidx -= i * (cr2_slice[1]*jh.high); + row = jidx / cr2_slice[1+j]; + col = jidx % cr2_slice[1+j] + i*cr2_slice[1]; + } + if (raw_width == 3984 && (col -= 2) < 0) + col += (row--,raw_width); + if ((unsigned) (row-top_margin) < height) { + if ((unsigned) (col-left_margin) < width) { + BAYER(row-top_margin,col-left_margin) = val; + if (min > val) min = val; + } else black += val; + } + if (++col >= raw_width) + col = (row++,0); + } + } + free (jh.row); + if (raw_width > width) + black /= (raw_width - width) * height; + if (!strcasecmp(make,"KODAK")) + black = min; +} + +void CLASS canon_sraw_load_raw() +{ + struct jhead jh; + short *rp=0, *ip; + int jwide, slice, scol, ecol, row, col, jrow=0, jcol=0, pix[3], c; + + if (!ljpeg_start (&jh, 0)) return; + jwide = (jh.wide >>= 1) * 4; + + for (ecol=slice=0; slice <= cr2_slice[0]; slice++) { + scol = ecol; + ecol += cr2_slice[1] >> 1; + if (!cr2_slice[0] || ecol > width-1) ecol = width & -2; + for (row=0; row < height; row++) { + ip = (short *) image[row*width+scol]; + for (col=scol; col < ecol; col+=2, jcol+=4, ip+=8) { + if ((jcol %= jwide) == 0) + rp = (short *) ljpeg_row (jrow++, &jh); + ip[0] = rp[jcol]; + ip[4] = rp[jcol+1]; + ip[1] = (short) (rp[jcol+2] << 2) >> 2; + ip[2] = (short) (rp[jcol+3] << 2) >> 2; + } + } + } + for (row=0; row < height; row++) { + ip = (short *) image[row*width+1]; + for (col=1; col < width-1; col+=2, ip+=8) { + ip[1] = (ip[-3] + ip[5] + 1) >> 1; + ip[2] = (ip[-2] + ip[6] + 1) >> 1; + } + if (col < width) { ip[1] = ip[-3]; ip[2] = ip[-2]; } + ip = (short *) image[row*width]; + for (col=0; col < width; col++, ip+=4) { + pix[0] = ip[2] + ip[0]; + pix[2] = ip[1] + ip[0]; + pix[1] = ((ip[0] << 12) - ip[1]*778 - (ip[2] << 11)) >> 12; + FORC3 ip[c] = CLIP((pix[c] - 512) * sraw_mul[c] >> 10); + } + } + free (jh.row); + maximum = 0x3fff; +} + +void CLASS adobe_copy_pixel (int row, int col, ushort **rp) +{ + unsigned r, c; + + r = row -= top_margin; + c = col -= left_margin; + if (is_raw == 2 && shot_select) (*rp)++; + if (filters) { + if (fuji_width) { + r = row + fuji_width - 1 - (col >> 1); + c = row + ((col+1) >> 1); + } + if (r < height && c < width) + BAYER(r,c) = **rp < 0x1000 ? curve[**rp] : **rp; + *rp += is_raw; + } else { + if (r < height && c < width) + FORC(tiff_samples) + image[row*width+col][c] = (*rp)[c] < 0x1000 ? curve[(*rp)[c]]:(*rp)[c]; + *rp += tiff_samples; + } + if (is_raw == 2 && shot_select) (*rp)--; +} + +void CLASS adobe_dng_load_raw_lj() +{ + unsigned save, trow=0, tcol=0, jwide, jrow, jcol, row, col; + struct jhead jh; + ushort *rp; + + while (trow < raw_height) { + save = ftell(ifp); + if (tile_length < INT_MAX) + fseek (ifp, get4(), SEEK_SET); + if (!ljpeg_start (&jh, 0)) break; + jwide = jh.wide; + if (filters) jwide *= jh.clrs; + jwide /= is_raw; + for (row=col=jrow=0; jrow < jh.high; jrow++) { + rp = ljpeg_row (jrow, &jh); + for (jcol=0; jcol < jwide; jcol++) { + adobe_copy_pixel (trow+row, tcol+col, &rp); + if (++col >= tile_width || col >= raw_width) + row += 1 + (col = 0); + } + } + fseek (ifp, save+4, SEEK_SET); + if ((tcol += tile_width) >= raw_width) + trow += tile_length + (tcol = 0); + free (jh.row); + } +} + +void CLASS adobe_dng_load_raw_nc() +{ + ushort *pixel, *rp; + int row, col; + + pixel = (ushort *) calloc (raw_width * tiff_samples, sizeof *pixel); + merror (pixel, "adobe_dng_load_raw_nc()"); + for (row=0; row < raw_height; row++) { + if (tiff_bps == 16) + read_shorts (pixel, raw_width * tiff_samples); + else { + getbits(-1); + for (col=0; col < raw_width * tiff_samples; col++) + pixel[col] = getbits(tiff_bps); + } + for (rp=pixel, col=0; col < raw_width; col++) + adobe_copy_pixel (row, col, &rp); + } + free (pixel); +} + +void CLASS pentax_k10_load_raw() +{ + static const uchar pentax_tree[] = + { 0,2,3,1,1,1,1,1,1,2,0,0,0,0,0,0, + 3,4,2,5,1,6,0,7,8,9,10,11,12 }; + int row, col, diff; + ushort vpred[2][2] = {{0,0},{0,0}}, hpred[2]; + + init_decoder(); + make_decoder (pentax_tree, 0); + getbits(-1); + for (row=0; row < height; row++) + for (col=0; col < raw_width; col++) { + diff = ljpeg_diff (first_decode); + if (col < 2) hpred[col] = vpred[row & 1][col] += diff; + else hpred[col & 1] += diff; + if (col < width) + BAYER(row,col) = hpred[col & 1]; + if (hpred[col & 1] >> 12) derror(); + } +} + +void CLASS nikon_compressed_load_raw() +{ + static const uchar nikon_tree[][32] = { + { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy */ + 5,4,3,6,2,7,1,0,8,9,11,10,12 }, + { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy after split */ + 0x39,0x5a,0x38,0x27,0x16,5,4,3,2,1,0,11,12,12 }, + { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, /* 12-bit lossless */ + 5,4,6,3,7,2,8,1,9,0,10,11,12 }, + { 0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0, /* 14-bit lossy */ + 5,6,4,7,8,3,9,2,1,0,10,11,12,13,14 }, + { 0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0, /* 14-bit lossy after split */ + 8,0x5c,0x4b,0x3a,0x29,7,6,5,4,3,2,1,0,13,14 }, + { 0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0, /* 14-bit lossless */ + 7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 } }; + struct decode *dindex; + ushort ver0, ver1, vpred[2][2], hpred[2], csize; + int i, max, step=0, huff=0, split=0, row, col, len, shl, diff; + + fseek (ifp, meta_offset, SEEK_SET); + ver0 = fgetc(ifp); + ver1 = fgetc(ifp); + if (ver0 == 0x49 || ver1 == 0x58) + fseek (ifp, 2110, SEEK_CUR); + if (ver0 == 0x46) huff = 2; + if (tiff_bps == 14) huff += 3; + read_shorts (vpred[0], 4); + max = 1 << tiff_bps & 0x7fff; + if ((csize = get2()) > 1) + step = max / (csize-1); + if (ver0 == 0x44 && ver1 == 0x20 && step > 0) { + for (i=0; i < csize; i++) + curve[i*step] = get2(); + for (i=0; i < max; i++) + curve[i] = ( curve[i-i%step]*(step-i%step) + + curve[i-i%step+step]*(i%step) ) / step; + fseek (ifp, meta_offset+562, SEEK_SET); + split = get2(); + } else if (ver0 != 0x46 && csize <= 0x4001) + read_shorts (curve, max=csize); + init_decoder(); + make_decoder (nikon_tree[huff], 0); + fseek (ifp, data_offset, SEEK_SET); + getbits(-1); + for (row=0; row < height; row++) { + if (split && row == split) { + init_decoder(); + make_decoder (nikon_tree[huff+1], 0); + } + for (col=0; col < raw_width; col++) { + for (dindex=first_decode; dindex->branch[0]; ) + dindex = dindex->branch[getbits(1)]; + len = dindex->leaf & 15; + shl = dindex->leaf >> 4; + diff = ((getbits(len-shl) << 1) + 1) << shl >> 1; + if ((diff & (1 << (len-1))) == 0) + diff -= (1 << len) - !shl; + if (col < 2) hpred[col] = vpred[row & 1][col] += diff; + else hpred[col & 1] += diff; + if (hpred[col & 1] >= max) derror(); + if ((unsigned) (col-left_margin) < width) + BAYER(row,col-left_margin) = curve[hpred[col & 1] & 0x3fff]; + } + } +} + +void CLASS nikon_load_raw() +{ + int irow, row, col, i; + + getbits(-1); + for (irow=0; irow < height; irow++) { + row = irow; + if (make[0] == 'O' || model[0] == 'E') { + row = irow * 2 % height + irow / (height/2); + if (row == 1 && data_offset == 0) { + fseek (ifp, 0, SEEK_END); + fseek (ifp, ftell(ifp)/2, SEEK_SET); + getbits(-1); + } + } + for (col=0; col < raw_width; col++) { + i = getbits(12); + if ((unsigned) (col-left_margin) < width) + BAYER(row,col-left_margin) = i; + if (tiff_compress > 32768 && (col % 10) == 9) + if (getbits(8)) derror(); + } + } +} + +/* + Figure out if a NEF file is compressed. These fancy heuristics + are only needed for the D100, thanks to a bug in some cameras + that tags all images as "compressed". + */ +int CLASS nikon_is_compressed() +{ + uchar test[256]; + int i; + + fseek (ifp, data_offset, SEEK_SET); + fread (test, 1, 256, ifp); + for (i=15; i < 256; i+=16) + if (test[i]) return 1; + return 0; +} + +/* + Returns 1 for a Coolpix 995, 0 for anything else. + */ +int CLASS nikon_e995() +{ + int i, histo[256]; + const uchar often[] = { 0x00, 0x55, 0xaa, 0xff }; + + memset (histo, 0, sizeof histo); + fseek (ifp, -2000, SEEK_END); + for (i=0; i < 2000; i++) + histo[fgetc(ifp)]++; + for (i=0; i < 4; i++) + if (histo[often[i]] < 200) + return 0; + return 1; +} + +/* + Returns 1 for a Coolpix 2100, 0 for anything else. + */ +int CLASS nikon_e2100() +{ + uchar t[12]; + int i; + + fseek (ifp, 0, SEEK_SET); + for (i=0; i < 1024; i++) { + fread (t, 1, 12, ifp); + if (((t[2] & t[4] & t[7] & t[9]) >> 4 + & t[1] & t[6] & t[8] & t[11] & 3) != 3) + return 0; + } + return 1; +} + +void CLASS nikon_3700() +{ + int bits, i; + uchar dp[24]; + static const struct { + int bits; + char make[12], model[15]; + } table[] = { + { 0x00, "PENTAX", "Optio 33WR" }, + { 0x03, "NIKON", "E3200" }, + { 0x32, "NIKON", "E3700" }, + { 0x33, "OLYMPUS", "C740UZ" } }; + + fseek (ifp, 3072, SEEK_SET); + fread (dp, 1, 24, ifp); + bits = (dp[8] & 3) << 4 | (dp[20] & 3); + for (i=0; i < sizeof table / sizeof *table; i++) + if (bits == table[i].bits) { + strcpy (make, table[i].make ); + strcpy (model, table[i].model); + } +} + +/* + Separates a Minolta DiMAGE Z2 from a Nikon E4300. + */ +int CLASS minolta_z2() +{ + int i; + char tail[424]; + + fseek (ifp, -sizeof tail, SEEK_END); + fread (tail, 1, sizeof tail, ifp); + for (i=0; i < sizeof tail; i++) + if (tail[i]) return 1; + return 0; +} + +/* Here raw_width is in bytes, not pixels. */ +void CLASS nikon_e900_load_raw() +{ + int offset=0, irow, row, col; + + for (irow=0; irow < height; irow++) { + row = irow * 2 % height; + if (row == 1) + offset = - (-offset & -4096); + fseek (ifp, offset, SEEK_SET); + offset += raw_width; + getbits(-1); + for (col=0; col < width; col++) + BAYER(row,col) = getbits(10); + } +} + +void CLASS nikon_e2100_load_raw() +{ + uchar data[4608], *dp; + ushort pixel[3072], *pix; + int row, col; + + for (row=0; row <= height; row+=2) { + if (row == height) { + fseek (ifp, 0, SEEK_END); + fseek (ifp, ftell(ifp)/2, SEEK_SET); + row = 1; + } + fread (data, 1, width*3/2, ifp); + for (dp=data, pix=pixel; pix < pixel+width; dp+=12, pix+=8) { + pix[0] = (dp[2] >> 4) + (dp[ 3] << 4); + pix[1] = (dp[2] << 8) + dp[ 1]; + pix[2] = (dp[7] >> 4) + (dp[ 0] << 4); + pix[3] = (dp[7] << 8) + dp[ 6]; + pix[4] = (dp[4] >> 4) + (dp[ 5] << 4); + pix[5] = (dp[4] << 8) + dp[11]; + pix[6] = (dp[9] >> 4) + (dp[10] << 4); + pix[7] = (dp[9] << 8) + dp[ 8]; + } + for (col=0; col < width; col++) + BAYER(row,col) = (pixel[col] & 0xfff); + } +} + +/* + The Fuji Super CCD is just a Bayer grid rotated 45 degrees. + */ +void CLASS fuji_load_raw() +{ + ushort *pixel; + int wide, row, col, r, c; + + fseek (ifp, (top_margin*raw_width + left_margin) * 2, SEEK_CUR); + wide = fuji_width << !fuji_layout; + pixel = (ushort *) calloc (wide, sizeof *pixel); + merror (pixel, "fuji_load_raw()"); + for (row=0; row < raw_height; row++) { + read_shorts (pixel, wide); + fseek (ifp, 2*(raw_width - wide), SEEK_CUR); + for (col=0; col < wide; col++) { + if (fuji_layout) { + r = fuji_width - 1 - col + (row >> 1); + c = col + ((row+1) >> 1); + } else { + r = fuji_width - 1 + row - (col >> 1); + c = row + ((col+1) >> 1); + } + BAYER(r,c) = pixel[col]; + } + } + free (pixel); +} + +void CLASS jpeg_thumb (FILE *tfp); + +void CLASS ppm_thumb (FILE *tfp) +{ + char *thumb; + thumb_length = thumb_width*thumb_height*3; + thumb = (char *) malloc (thumb_length); + merror (thumb, "ppm_thumb()"); + fprintf (tfp, "P6\n%d %d\n255\n", thumb_width, thumb_height); + fread (thumb, 1, thumb_length, ifp); + fwrite (thumb, 1, thumb_length, tfp); + free (thumb); +} + +void CLASS layer_thumb (FILE *tfp) +{ + int i, c; + char *thumb, map[][4] = { "012","102" }; + + colors = thumb_misc >> 5 & 7; + thumb_length = thumb_width*thumb_height; + thumb = (char *) calloc (colors, thumb_length); + merror (thumb, "layer_thumb()"); + fprintf (tfp, "P%d\n%d %d\n255\n", + 5 + (colors >> 1), thumb_width, thumb_height); + fread (thumb, thumb_length, colors, ifp); + for (i=0; i < thumb_length; i++) + FORCC putc (thumb[i+thumb_length*(map[thumb_misc >> 8][c]-'0')], tfp); + free (thumb); +} + +void CLASS rollei_thumb (FILE *tfp) +{ + unsigned i; + ushort *thumb; + + thumb_length = thumb_width * thumb_height; + thumb = (ushort *) calloc (thumb_length, 2); + merror (thumb, "rollei_thumb()"); + fprintf (tfp, "P6\n%d %d\n255\n", thumb_width, thumb_height); + read_shorts (thumb, thumb_length); + for (i=0; i < thumb_length; i++) { + putc (thumb[i] << 3, tfp); + putc (thumb[i] >> 5 << 2, tfp); + putc (thumb[i] >> 11 << 3, tfp); + } + free (thumb); +} + +void CLASS rollei_load_raw() +{ + uchar pixel[10]; + unsigned iten=0, isix, i, buffer=0, row, col, todo[16]; + + isix = raw_width * raw_height * 5 / 8; + while (fread (pixel, 1, 10, ifp) == 10) { + for (i=0; i < 10; i+=2) { + todo[i] = iten++; + todo[i+1] = pixel[i] << 8 | pixel[i+1]; + buffer = pixel[i] >> 2 | buffer << 6; + } + for ( ; i < 16; i+=2) { + todo[i] = isix++; + todo[i+1] = buffer >> (14-i)*5; + } + for (i=0; i < 16; i+=2) { + row = todo[i] / raw_width - top_margin; + col = todo[i] % raw_width - left_margin; + if (row < height && col < width) + BAYER(row,col) = (todo[i+1] & 0x3ff); + } + } + maximum = 0x3ff; +} + +int CLASS bayer (unsigned row, unsigned col) +{ + return (row < height && col < width) ? BAYER(row,col) : 0; +} + +void CLASS phase_one_flat_field (int is_float, int nc) +{ + ushort head[8]; + unsigned wide, y, x, c, rend, cend, row, col; + float *mrow, num, mult[4]; + + read_shorts (head, 8); + wide = head[2] / head[4]; + mrow = (float *) calloc (nc*wide, sizeof *mrow); + merror (mrow, "phase_one_flat_field()"); + for (y=0; y < head[3] / head[5]; y++) { + for (x=0; x < wide; x++) + for (c=0; c < nc; c+=2) { + num = is_float ? getreal(11) : get2()/32768.0; + if (y==0) mrow[c*wide+x] = num; + else mrow[(c+1)*wide+x] = (num - mrow[c*wide+x]) / head[5]; + } + if (y==0) continue; + rend = head[1]-top_margin + y*head[5]; + for (row = rend-head[5]; row < height && row < rend; row++) { + for (x=1; x < wide; x++) { + for (c=0; c < nc; c+=2) { + mult[c] = mrow[c*wide+x-1]; + mult[c+1] = (mrow[c*wide+x] - mult[c]) / head[4]; + } + cend = head[0]-left_margin + x*head[4]; + for (col = cend-head[4]; col < width && col < cend; col++) { + c = nc > 2 ? FC(row,col) : 0; + if (!(c & 1)) { + c = BAYER(row,col) * mult[c]; + BAYER(row,col) = LIM(c,0,65535); + } + for (c=0; c < nc; c+=2) + mult[c] += mult[c+1]; + } + } + for (x=0; x < wide; x++) + for (c=0; c < nc; c+=2) + mrow[c*wide+x] += mrow[(c+1)*wide+x]; + } + } + free (mrow); +} + +void CLASS phase_one_correct() +{ + unsigned entries, tag, data, save, col, row, type; + int len, i, j, k, cip, val[4], dev[4], sum, max; + int head[9], diff, mindiff=INT_MAX, off_412=0; + static const signed char dir[12][2] = + { {-1,-1}, {-1,1}, {1,-1}, {1,1}, {-2,0}, {0,-2}, {0,2}, {2,0}, + {-2,-2}, {-2,2}, {2,-2}, {2,2} }; + float poly[8], num, cfrac, frac, mult[2], *yval[2]; + ushort curve[0x10000], *xval[2]; + + if (half_size || !meta_length) return; + if (verbose) fprintf (stderr,_("Phase One correction...\n")); + fseek (ifp, meta_offset, SEEK_SET); + order = get2(); + fseek (ifp, 6, SEEK_CUR); + fseek (ifp, meta_offset+get4(), SEEK_SET); + entries = get4(); get4(); + while (entries--) { + tag = get4(); + len = get4(); + data = get4(); + save = ftell(ifp); + fseek (ifp, meta_offset+data, SEEK_SET); + if (tag == 0x419) { /* Polynomial curve */ + for (get4(), i=0; i < 8; i++) + poly[i] = getreal(11); + poly[3] += (ph1.tag_210 - poly[7]) * poly[6] + 1; + for (i=0; i < 0x10000; i++) { + num = (poly[5]*i + poly[3])*i + poly[1]; + curve[i] = LIM(num,0,65535); + } goto apply; /* apply to right half */ + } else if (tag == 0x41a) { /* Polynomial curve */ + for (i=0; i < 4; i++) + poly[i] = getreal(11); + for (i=0; i < 0x10000; i++) { + for (num=0, j=4; j--; ) + num = num * i + poly[j]; + curve[i] = LIM(num+i,0,65535); + } apply: /* apply to whole image */ + for (row=0; row < height; row++) + for (col = (tag & 1)*ph1.split_col; col < width; col++) + BAYER(row,col) = curve[BAYER(row,col)]; + } else if (tag == 0x400) { /* Sensor defects */ + while ((len -= 8) >= 0) { + col = get2() - left_margin; + row = get2() - top_margin; + type = get2(); get2(); + if (col >= width) continue; + if (type == 131) /* Bad column */ + for (row=0; row < height; row++) + if (FC(row,col) == 1) { + for (sum=i=0; i < 4; i++) + sum += val[i] = bayer (row+dir[i][0], col+dir[i][1]); + for (max=i=0; i < 4; i++) { + dev[i] = abs((val[i] << 2) - sum); + if (dev[max] < dev[i]) max = i; + } + BAYER(row,col) = (sum - val[max])/3.0 + 0.5; + } else { + for (sum=0, i=8; i < 12; i++) + sum += bayer (row+dir[i][0], col+dir[i][1]); + BAYER(row,col) = 0.5 + sum * 0.0732233 + + (bayer(row,col-2) + bayer(row,col+2)) * 0.3535534; + } + else if (type == 129) { /* Bad pixel */ + if (row >= height) continue; + j = (FC(row,col) != 1) * 4; + for (sum=0, i=j; i < j+8; i++) + sum += bayer (row+dir[i][0], col+dir[i][1]); + BAYER(row,col) = (sum + 4) >> 3; + } + } + } else if (tag == 0x401) { /* All-color flat fields */ + phase_one_flat_field (1, 2); + } else if (tag == 0x416 || tag == 0x410) { + phase_one_flat_field (0, 2); + } else if (tag == 0x40b) { /* Red+blue flat field */ + phase_one_flat_field (0, 4); + } else if (tag == 0x412) { + fseek (ifp, 36, SEEK_CUR); + diff = abs (get2() - ph1.tag_21a); + if (mindiff > diff) { + mindiff = diff; + off_412 = ftell(ifp) - 38; + } + } + fseek (ifp, save, SEEK_SET); + } + if (off_412) { + fseek (ifp, off_412, SEEK_SET); + for (i=0; i < 9; i++) head[i] = get4() & 0x7fff; + yval[0] = (float *) calloc (head[1]*head[3] + head[2]*head[4], 6); + merror (yval[0], "phase_one_correct()"); + yval[1] = (float *) (yval[0] + head[1]*head[3]); + xval[0] = (ushort *) (yval[1] + head[2]*head[4]); + xval[1] = (ushort *) (xval[0] + head[1]*head[3]); + get2(); + for (i=0; i < 2; i++) + for (j=0; j < head[i+1]*head[i+3]; j++) + yval[i][j] = getreal(11); + for (i=0; i < 2; i++) + for (j=0; j < head[i+1]*head[i+3]; j++) + xval[i][j] = get2(); + for (row=0; row < height; row++) + for (col=0; col < width; col++) { + cfrac = (float) col * head[3] / raw_width; + cfrac -= cip = cfrac; + num = BAYER(row,col) * 0.5; + for (i=cip; i < cip+2; i++) { + for (k=j=0; j < head[1]; j++) + if (num < xval[0][k = head[1]*i+j]) break; + frac = (j == 0 || j == head[1]) ? 0 : + (xval[0][k] - num) / (xval[0][k] - xval[0][k-1]); + mult[i-cip] = yval[0][k-1] * frac + yval[0][k] * (1-frac); + } + i = ((mult[0] * (1-cfrac) + mult[1] * cfrac) + * (row + top_margin) + num) * 2; + BAYER(row,col) = LIM(i,0,65535); + } + free (yval[0]); + } +} + +void CLASS phase_one_load_raw() +{ + int row, col, a, b; + ushort *pixel, akey, bkey, mask; + + fseek (ifp, ph1.key_off, SEEK_SET); + akey = get2(); + bkey = get2(); + mask = ph1.format == 1 ? 0x5555:0x1354; + fseek (ifp, data_offset + top_margin*raw_width*2, SEEK_SET); + pixel = (ushort *) calloc (raw_width, sizeof *pixel); + merror (pixel, "phase_one_load_raw()"); + for (row=0; row < height; row++) { + read_shorts (pixel, raw_width); + for (col=0; col < raw_width; col+=2) { + a = pixel[col+0] ^ akey; + b = pixel[col+1] ^ bkey; + pixel[col+0] = (a & mask) | (b & ~mask); + pixel[col+1] = (b & mask) | (a & ~mask); + } + for (col=0; col < width; col++) + BAYER(row,col) = pixel[col+left_margin]; + } + free (pixel); + phase_one_correct(); +} + +unsigned CLASS ph1_bits (int nbits) +{ + static UINT64 bitbuf=0; + static int vbits=0; + + if (nbits == -1) + return bitbuf = vbits = 0; + if (nbits == 0) return 0; + if (vbits < nbits) { + bitbuf = bitbuf << 32 | get4(); + vbits += 32; + } + vbits -= nbits; + return bitbuf << (64-nbits-vbits) >> (64-nbits); +} + +void CLASS phase_one_load_raw_c() +{ + static const int length[] = { 8,7,6,9,11,10,5,12,14,13 }; + int *offset, len[2], pred[2], row, col, i, j; + ushort *pixel; + short (*black)[2]; + + pixel = (ushort *) calloc (raw_width + raw_height*4, 2); + merror (pixel, "phase_one_load_raw_c()"); + offset = (int *) (pixel + raw_width); + fseek (ifp, strip_offset, SEEK_SET); + for (row=0; row < raw_height; row++) + offset[row] = get4(); + black = (short (*)[2]) offset + raw_height; + fseek (ifp, ph1.black_off, SEEK_SET); + if (ph1.black_off) + read_shorts ((ushort *) black[0], raw_height*2); + for (i=0; i < 256; i++) + curve[i] = i*i / 3.969 + 0.5; + for (row=0; row < raw_height; row++) { + fseek (ifp, data_offset + offset[row], SEEK_SET); + ph1_bits(-1); + pred[0] = pred[1] = 0; + for (col=0; col < raw_width; col++) { + if (col >= (raw_width & -8)) + len[0] = len[1] = 14; + else if ((col & 7) == 0) + for (i=0; i < 2; i++) { + for (j=0; j < 5 && !ph1_bits(1); j++); + if (j--) len[i] = length[j*2 + ph1_bits(1)]; + } + if ((i = len[col & 1]) == 14) + pixel[col] = pred[col & 1] = ph1_bits(16); + else + pixel[col] = pred[col & 1] += ph1_bits(i) + 1 - (1 << (i - 1)); + if (pred[col & 1] >> 16) derror(); + if (ph1.format == 5 && pixel[col] < 256) + pixel[col] = curve[pixel[col]]; + } + if ((unsigned) (row-top_margin) < height) + for (col=0; col < width; col++) { + i = (pixel[col+left_margin] << 2) + - ph1.black + black[row][col >= ph1.split_col]; + if (i > 0) BAYER(row-top_margin,col) = i; + } + } + free (pixel); + phase_one_correct(); + maximum = 0xfffc - ph1.black; +} + +void CLASS hasselblad_load_raw() +{ + struct jhead jh; + struct decode *dindex; + int row, col, pred[2], len[2], diff, i; + + if (!ljpeg_start (&jh, 0)) return; + free (jh.row); + ph1_bits(-1); + for (row=-top_margin; row < height; row++) { + pred[0] = pred[1] = 0x8000; + for (col=-left_margin; col < raw_width-left_margin; col+=2) { + for (i=0; i < 2; i++) { + for (dindex=jh.huff[0]; dindex->branch[0]; ) + dindex = dindex->branch[ph1_bits(1)]; + len[i] = dindex->leaf; + } + for (i=0; i < 2; i++) { + diff = ph1_bits(len[i]); + if ((diff & (1 << (len[i]-1))) == 0) + diff -= (1 << len[i]) - 1; + pred[i] += diff; + if (row >= 0 && (unsigned)(col+i) < width) + BAYER(row,col+i) = pred[i]; + } + } + } + maximum = 0xffff; +} + +void CLASS leaf_hdr_load_raw() +{ + ushort *pixel; + unsigned tile=0, r, c, row, col; + + pixel = (ushort *) calloc (raw_width, sizeof *pixel); + merror (pixel, "leaf_hdr_load_raw()"); + FORC(tiff_samples) + for (r=0; r < raw_height; r++) { + if (r % tile_length == 0) { + fseek (ifp, data_offset + 4*tile++, SEEK_SET); + fseek (ifp, get4() + 2*left_margin, SEEK_SET); + } + if (filters && c != shot_select) continue; + read_shorts (pixel, raw_width); + if ((row = r - top_margin) >= height) continue; + for (col=0; col < width; col++) + if (filters) BAYER(row,col) = pixel[col]; + else image[row*width+col][c] = pixel[col]; + } + free (pixel); + if (!filters) { + maximum = 0xffff; + raw_color = 1; + } +} + +void CLASS unpacked_load_raw(); + +void CLASS sinar_4shot_load_raw() +{ + ushort *pixel; + unsigned shot, row, col, r, c; + + if ((shot = shot_select) || half_size) { + if (shot) shot--; + if (shot > 3) shot = 3; + fseek (ifp, data_offset + shot*4, SEEK_SET); + fseek (ifp, get4(), SEEK_SET); + unpacked_load_raw(); + return; + } + free (image); + image = (ushort (*)[4]) + calloc ((iheight=height)*(iwidth=width), sizeof *image); + merror (image, "sinar_4shot_load_raw()"); + pixel = (ushort *) calloc (raw_width, sizeof *pixel); + merror (pixel, "sinar_4shot_load_raw()"); + for (shot=0; shot < 4; shot++) { + fseek (ifp, data_offset + shot*4, SEEK_SET); + fseek (ifp, get4(), SEEK_SET); + for (row=0; row < raw_height; row++) { + read_shorts (pixel, raw_width); + if ((r = row-top_margin - (shot >> 1 & 1)) >= height) continue; + for (col=0; col < raw_width; col++) { + if ((c = col-left_margin - (shot & 1)) >= width) continue; + image[r*width+c][FC(row,col)] = pixel[col]; + } + } + } + free (pixel); + shrink = filters = 0; +} + +void CLASS imacon_full_load_raw() +{ + int row, col; + + for (row=0; row < height; row++) + for (col=0; col < width; col++) + read_shorts (image[row*width+col], 3); +} + +void CLASS packed_12_load_raw() +{ + int row, col; + + if (raw_width * 2 < width * 3) + raw_width = raw_width * 3 / 2; /* Convert raw_width to bytes */ + getbits(-1); + for (row=0; row < height; row++) { + for (col=0; col < left_margin; col++) + getbits(12); + for (col=0; col < width; col++) + BAYER(row,col) = getbits(12); + for (col = (width+left_margin)*3/2; col < raw_width; col++) + if (getbits(8) && raw_width-col < 35 && width != 3896) derror(); + } +} + +void CLASS unpacked_load_raw() +{ + ushort *pixel; + int row, col, bits=0; + + while (1 << ++bits < maximum); + fseek (ifp, (top_margin*raw_width + left_margin) * 2, SEEK_CUR); + pixel = (ushort *) calloc (width, sizeof *pixel); + merror (pixel, "unpacked_load_raw()"); + for (row=0; row < height; row++) { + read_shorts (pixel, width); + fseek (ifp, 2*(raw_width - width), SEEK_CUR); + for (col=0; col < width; col++) + if ((BAYER2(row,col) = pixel[col]) >> bits) derror(); + } + free (pixel); +} + +void CLASS nokia_load_raw() +{ + uchar *data, *dp; + ushort *pixel, *pix; + int dwide, row, c; + + dwide = raw_width * 5 / 4; + data = (uchar *) malloc (dwide + raw_width*2); + merror (data, "nokia_load_raw()"); + pixel = (ushort *) (data + dwide); + for (row=0; row < raw_height; row++) { + if (fread (data, 1, dwide, ifp) < dwide) derror(); + for (dp=data, pix=pixel; pix < pixel+raw_width; dp+=5, pix+=4) + FORC4 pix[c] = (dp[c] << 2) | (dp[4] >> (c << 1) & 3); + if (row < top_margin) + FORC(width) black += pixel[c]; + else + FORC(width) BAYER(row-top_margin,c) = pixel[c]; + } + free (data); + if (top_margin) black /= top_margin * width; + maximum = 0x3ff; +} + +unsigned CLASS pana_bits (int nbits) +{ + static uchar buf[16], vbits=0; + + if (!vbits && fread (buf, 1, 16, ifp) < 16) derror(); + vbits = (vbits - nbits) & 127; + return (buf[(vbits >> 3)+1] << 8 | buf[vbits >> 3]) + >> (vbits & 7) & ~(-1 << nbits); +} + +void CLASS panasonic_load_raw() +{ + int row, col, i, j, sh=0, pred[2], nonz[2]; + + raw_width = (raw_width+13)/14*14; + for (row=0; row < height; row++) + for (col=0; col < raw_width; col++) { + if ((i = col % 14) < 2) + nonz[i] = pred[i] = pana_bits(12); + else { + if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); + if ((j = pana_bits(8))) { + if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) + pred[i & 1] &= ~(-1 << sh); + pred[i & 1] += nonz[i & 1] ? j << sh : j; + nonz[i & 1] = 1; + } + } + if (col < width) + if ((BAYER(row,col) = pred[col & 1]) >> 12) derror(); + } + maximum = 0xf96; + black = 15; +} + +void CLASS olympus_e300_load_raw() +{ + uchar *data, *dp; + ushort *pixel, *pix; + int dwide, row, col; + + dwide = raw_width * 16 / 10; + fseek (ifp, dwide*top_margin, SEEK_CUR); + data = (uchar *) malloc (dwide + raw_width*2); + merror (data, "olympus_e300_load_raw()"); + pixel = (ushort *) (data + dwide); + for (row=0; row < height; row++) { + if (fread (data, 1, dwide, ifp) < dwide) derror(); + for (dp=data, pix=pixel; pix < pixel+raw_width; dp+=3, pix+=2) { + if (((dp-data) & 15) == 15) + if (*dp++ && pix < pixel+width+left_margin) derror(); + pix[0] = dp[1] << 8 | dp[0]; + pix[1] = dp[2] << 4 | dp[1] >> 4; + } + for (col=0; col < width; col++) + BAYER(row,col) = (pixel[col+left_margin] & 0xfff); + } + free (data); + maximum >>= 4; + black >>= 4; +} + +void CLASS olympus_e410_load_raw() +{ + int row, col, nbits, sign, low, high, i, w, n, nw; + int acarry[2][3], *carry, pred, diff; + + fseek (ifp, 7, SEEK_CUR); + getbits(-1); + for (row=0; row < height; row++) { + memset (acarry, 0, sizeof acarry); + for (col=0; col < width; col++) { + carry = acarry[col & 1]; + i = 2 * (carry[2] < 3); + for (nbits=2+i; (ushort) carry[0] >> (nbits+i); nbits++); + sign = getbits(1) * -1; + low = getbits(2); + for (high=0; high < 12; high++) + if (getbits(1)) break; + if (high == 12) + high = getbits(16-nbits) >> 1; + carry[0] = (high << nbits) | getbits(nbits); + diff = (carry[0] ^ sign) + carry[1]; + carry[1] = (diff*3 + carry[1]) >> 5; + carry[2] = carry[0] > 16 ? 0 : carry[2]+1; + if (row < 2 && col < 2) pred = 0; + else if (row < 2) pred = BAYER(row,col-2); + else if (col < 2) pred = BAYER(row-2,col); + else { + w = BAYER(row,col-2); + n = BAYER(row-2,col); + nw = BAYER(row-2,col-2); + if ((w < nw && nw < n) || (n < nw && nw < w)) { + if (ABS(w-nw) > 32 || ABS(n-nw) > 32) + pred = w + n - nw; + else pred = (w + n) >> 1; + } else pred = ABS(w-nw) > ABS(n-nw) ? w : n; + } + if ((BAYER(row,col) = pred + ((diff << 2) | low)) >> 12) derror(); + } + } +} + +void CLASS olympus_cseries_load_raw() +{ + int irow, row, col; + + for (irow=0; irow < height; irow++) { + row = irow * 2 % height + irow / (height/2); + if (row < 2) { + fseek (ifp, data_offset - row*(-width*height*3/4 & -2048), SEEK_SET); + getbits(-1); + } + for (col=0; col < width; col++) + BAYER(row,col) = getbits(12); + } + black >>= 4; +} + +void CLASS minolta_rd175_load_raw() +{ + uchar pixel[768]; + unsigned irow, box, row, col; + + for (irow=0; irow < 1481; irow++) { + if (fread (pixel, 1, 768, ifp) < 768) derror(); + box = irow / 82; + row = irow % 82 * 12 + ((box < 12) ? box | 1 : (box-12)*2); + switch (irow) { + case 1477: case 1479: continue; + case 1476: row = 984; break; + case 1480: row = 985; break; + case 1478: row = 985; box = 1; + } + if ((box < 12) && (box & 1)) { + for (col=0; col < 1533; col++, row ^= 1) + if (col != 1) BAYER(row,col) = (col+1) & 2 ? + pixel[col/2-1] + pixel[col/2+1] : pixel[col/2] << 1; + BAYER(row,1) = pixel[1] << 1; + BAYER(row,1533) = pixel[765] << 1; + } else + for (col=row & 1; col < 1534; col+=2) + BAYER(row,col) = pixel[col/2] << 1; + } + maximum = 0xff << 1; +} + +void CLASS casio_qv5700_load_raw() +{ + uchar data[3232], *dp; + ushort pixel[2576], *pix; + int row, col; + + for (row=0; row < height; row++) { + fread (data, 1, 3232, ifp); + for (dp=data, pix=pixel; dp < data+3220; dp+=5, pix+=4) { + pix[0] = (dp[0] << 2) + (dp[1] >> 6); + pix[1] = (dp[1] << 4) + (dp[2] >> 4); + pix[2] = (dp[2] << 6) + (dp[3] >> 2); + pix[3] = (dp[3] << 8) + (dp[4] ); + } + for (col=0; col < width; col++) + BAYER(row,col) = (pixel[col] & 0x3ff); + } + maximum = 0x3fc; +} + +void CLASS quicktake_100_load_raw() +{ + uchar pixel[484][644]; + static const short gstep[16] = + { -89,-60,-44,-32,-22,-15,-8,-2,2,8,15,22,32,44,60,89 }; + static const short rstep[6][4] = + { { -3,-1,1,3 }, { -5,-1,1,5 }, { -8,-2,2,8 }, + { -13,-3,3,13 }, { -19,-4,4,19 }, { -28,-6,6,28 } }; + static const short curve[256] = + { 0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27, + 28,29,30,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,53, + 54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74,75,76,77,78, + 79,80,81,82,83,84,86,88,90,92,94,97,99,101,103,105,107,110,112,114,116, + 118,120,123,125,127,129,131,134,136,138,140,142,144,147,149,151,153,155, + 158,160,162,164,166,168,171,173,175,177,179,181,184,186,188,190,192,195, + 197,199,201,203,205,208,210,212,214,216,218,221,223,226,230,235,239,244, + 248,252,257,261,265,270,274,278,283,287,291,296,300,305,309,313,318,322, + 326,331,335,339,344,348,352,357,361,365,370,374,379,383,387,392,396,400, + 405,409,413,418,422,426,431,435,440,444,448,453,457,461,466,470,474,479, + 483,487,492,496,500,508,519,531,542,553,564,575,587,598,609,620,631,643, + 654,665,676,687,698,710,721,732,743,754,766,777,788,799,810,822,833,844, + 855,866,878,889,900,911,922,933,945,956,967,978,989,1001,1012,1023 }; + int rb, row, col, sharp, val=0; + + getbits(-1); + memset (pixel, 0x80, sizeof pixel); + for (row=2; row < height+2; row++) { + for (col=2+(row & 1); col < width+2; col+=2) { + val = ((pixel[row-1][col-1] + 2*pixel[row-1][col+1] + + pixel[row][col-2]) >> 2) + gstep[getbits(4)]; + pixel[row][col] = val = LIM(val,0,255); + if (col < 4) + pixel[row][col-2] = pixel[row+1][~row & 1] = val; + if (row == 2) + pixel[row-1][col+1] = pixel[row-1][col+3] = val; + } + pixel[row][col] = val; + } + for (rb=0; rb < 2; rb++) + for (row=2+rb; row < height+2; row+=2) + for (col=3-(row & 1); col < width+2; col+=2) { + if (row < 4 || col < 4) sharp = 2; + else { + val = ABS(pixel[row-2][col] - pixel[row][col-2]) + + ABS(pixel[row-2][col] - pixel[row-2][col-2]) + + ABS(pixel[row][col-2] - pixel[row-2][col-2]); + sharp = val < 4 ? 0 : val < 8 ? 1 : val < 16 ? 2 : + val < 32 ? 3 : val < 48 ? 4 : 5; + } + val = ((pixel[row-2][col] + pixel[row][col-2]) >> 1) + + rstep[sharp][getbits(2)]; + pixel[row][col] = val = LIM(val,0,255); + if (row < 4) pixel[row-2][col+2] = val; + if (col < 4) pixel[row+2][col-2] = val; + } + for (row=2; row < height+2; row++) + for (col=3-(row & 1); col < width+2; col+=2) { + val = ((pixel[row][col-1] + (pixel[row][col] << 2) + + pixel[row][col+1]) >> 1) - 0x100; + pixel[row][col] = LIM(val,0,255); + } + for (row=0; row < height; row++) + for (col=0; col < width; col++) + BAYER(row,col) = curve[pixel[row+2][col+2]]; + maximum = 0x3ff; +} + +const int * CLASS make_decoder_int (const int *source, int level) +{ + struct decode *cur; + + cur = free_decode++; + if (level < source[0]) { + cur->branch[0] = free_decode; + source = make_decoder_int (source, level+1); + cur->branch[1] = free_decode; + source = make_decoder_int (source, level+1); + } else { + cur->leaf = source[1]; + source += 2; + } + return source; +} + +int CLASS radc_token (int tree) +{ + int t; + static struct decode *dstart[18], *dindex; + static const int *s, source[] = { + 1,1, 2,3, 3,4, 4,2, 5,7, 6,5, 7,6, 7,8, + 1,0, 2,1, 3,3, 4,4, 5,2, 6,7, 7,6, 8,5, 8,8, + 2,1, 2,3, 3,0, 3,2, 3,4, 4,6, 5,5, 6,7, 6,8, + 2,0, 2,1, 2,3, 3,2, 4,4, 5,6, 6,7, 7,5, 7,8, + 2,1, 2,4, 3,0, 3,2, 3,3, 4,7, 5,5, 6,6, 6,8, + 2,3, 3,1, 3,2, 3,4, 3,5, 3,6, 4,7, 5,0, 5,8, + 2,3, 2,6, 3,0, 3,1, 4,4, 4,5, 4,7, 5,2, 5,8, + 2,4, 2,7, 3,3, 3,6, 4,1, 4,2, 4,5, 5,0, 5,8, + 2,6, 3,1, 3,3, 3,5, 3,7, 3,8, 4,0, 5,2, 5,4, + 2,0, 2,1, 3,2, 3,3, 4,4, 4,5, 5,6, 5,7, 4,8, + 1,0, 2,2, 2,-2, + 1,-3, 1,3, + 2,-17, 2,-5, 2,5, 2,17, + 2,-7, 2,2, 2,9, 2,18, + 2,-18, 2,-9, 2,-2, 2,7, + 2,-28, 2,28, 3,-49, 3,-9, 3,9, 4,49, 5,-79, 5,79, + 2,-1, 2,13, 2,26, 3,39, 4,-16, 5,55, 6,-37, 6,76, + 2,-26, 2,-13, 2,1, 3,-39, 4,16, 5,-55, 6,-76, 6,37 + }; + + if (free_decode == first_decode) + for (s=source, t=0; t < 18; t++) { + dstart[t] = free_decode; + s = make_decoder_int (s, 0); + } + if (tree == 18) { + if (kodak_cbpp == 243) + return (getbits(6) << 2) + 2; /* most DC50 photos */ + else + return (getbits(5) << 3) + 4; /* DC40, Fotoman Pixtura */ + } + for (dindex = dstart[tree]; dindex->branch[0]; ) + dindex = dindex->branch[getbits(1)]; + return dindex->leaf; +} + +#define FORYX for (y=1; y < 3; y++) for (x=col+1; x >= col; x--) + +#define PREDICTOR (c ? (buf[c][y-1][x] + buf[c][y][x+1]) / 2 \ +: (buf[c][y-1][x+1] + 2*buf[c][y-1][x] + buf[c][y][x+1]) / 4) + +void CLASS kodak_radc_load_raw() +{ + int row, col, tree, nreps, rep, step, i, c, s, r, x, y, val; + short last[3] = { 16,16,16 }, mul[3], buf[3][3][386]; + + init_decoder(); + getbits(-1); + for (i=0; i < sizeof(buf)/sizeof(short); i++) + buf[0][0][i] = 2048; + for (row=0; row < height; row+=4) { + FORC3 mul[c] = getbits(6); + FORC3 { + val = ((0x1000000/last[c] + 0x7ff) >> 12) * mul[c]; + s = val > 65564 ? 10:12; + x = ~(-1 << (s-1)); + val <<= 12-s; + for (i=0; i < sizeof(buf[0])/sizeof(short); i++) + buf[c][0][i] = (buf[c][0][i] * val + x) >> s; + last[c] = mul[c]; + for (r=0; r <= !c; r++) { + buf[c][1][width/2] = buf[c][2][width/2] = mul[c] << 7; + for (tree=1, col=width/2; col > 0; ) { + if ((tree = radc_token(tree))) { + col -= 2; + if (tree == 8) + FORYX buf[c][y][x] = radc_token(tree+10) * mul[c]; + else + FORYX buf[c][y][x] = radc_token(tree+10) * 16 + PREDICTOR; + } else + do { + nreps = (col > 2) ? radc_token(9) + 1 : 1; + for (rep=0; rep < 8 && rep < nreps && col > 0; rep++) { + col -= 2; + FORYX buf[c][y][x] = PREDICTOR; + if (rep & 1) { + step = radc_token(10) << 4; + FORYX buf[c][y][x] += step; + } + } + } while (nreps == 9); + } + for (y=0; y < 2; y++) + for (x=0; x < width/2; x++) { + val = (buf[c][y+1][x] << 4) / mul[c]; + if (val < 0) val = 0; + if (c) BAYER(row+y*2+c-1,x*2+2-c) = val; + else BAYER(row+r*2+y,x*2+y) = val; + } + memcpy (buf[c][0]+!c, buf[c][2], sizeof buf[c][0]-2*!c); + } + } + for (y=row; y < row+4; y++) + for (x=0; x < width; x++) + if ((x+y) & 1) { + r = x ? x-1 : x+1; + s = x+1 < width ? x+1 : x-1; + val = (BAYER(y,x)-2048)*2 + (BAYER(y,r)+BAYER(y,s))/2; + if (val < 0) val = 0; + BAYER(y,x) = val; + } + } + maximum = 0xfff; + use_gamma = 0; +} + +#undef FORYX +#undef PREDICTOR + +#ifdef NO_JPEG +void CLASS kodak_jpeg_load_raw() {} +#else + +METHODDEF(boolean) +fill_input_buffer (j_decompress_ptr cinfo) +{ + static uchar jpeg_buffer[4096]; + size_t nbytes; + + nbytes = fread (jpeg_buffer, 1, 4096, ifp); + swab (jpeg_buffer, jpeg_buffer, nbytes); + cinfo->src->next_input_byte = jpeg_buffer; + cinfo->src->bytes_in_buffer = nbytes; + return TRUE; +} + +void CLASS kodak_jpeg_load_raw() +{ + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; + JSAMPARRAY buf; + JSAMPLE (*pixel)[3]; + int row, col; + + cinfo.err = jpeg_std_error (&jerr); + jpeg_create_decompress (&cinfo); + jpeg_stdio_src (&cinfo, ifp); + cinfo.src->fill_input_buffer = fill_input_buffer; + jpeg_read_header (&cinfo, TRUE); + jpeg_start_decompress (&cinfo); + if ((cinfo.output_width != width ) || + (cinfo.output_height*2 != height ) || + (cinfo.output_components != 3 )) { + fprintf (stderr,_("%s: incorrect JPEG dimensions\n"), ifname); + jpeg_destroy_decompress (&cinfo); + longjmp (failure, 3); + } + buf = (*cinfo.mem->alloc_sarray) + ((j_common_ptr) &cinfo, JPOOL_IMAGE, width*3, 1); + + while (cinfo.output_scanline < cinfo.output_height) { + row = cinfo.output_scanline * 2; + jpeg_read_scanlines (&cinfo, buf, 1); + pixel = (JSAMPLE (*)[3]) buf[0]; + for (col=0; col < width; col+=2) { + BAYER(row+0,col+0) = pixel[col+0][1] << 1; + BAYER(row+1,col+1) = pixel[col+1][1] << 1; + BAYER(row+0,col+1) = pixel[col][0] + pixel[col+1][0]; + BAYER(row+1,col+0) = pixel[col][2] + pixel[col+1][2]; + } + } + jpeg_finish_decompress (&cinfo); + jpeg_destroy_decompress (&cinfo); + maximum = 0xff << 1; +} +#endif + +void CLASS kodak_dc120_load_raw() +{ + static const int mul[4] = { 162, 192, 187, 92 }; + static const int add[4] = { 0, 636, 424, 212 }; + uchar pixel[848]; + int row, shift, col; + + for (row=0; row < height; row++) { + if (fread (pixel, 1, 848, ifp) < 848) derror(); + shift = row * mul[row & 3] + add[row & 3]; + for (col=0; col < width; col++) + BAYER(row,col) = (ushort) pixel[(col + shift) % 848]; + } + maximum = 0xff; +} + +void CLASS eight_bit_load_raw() +{ + uchar *pixel; + unsigned row, col, val, lblack=0; + + pixel = (uchar *) calloc (raw_width, sizeof *pixel); + merror (pixel, "eight_bit_load_raw()"); + fseek (ifp, top_margin*raw_width, SEEK_CUR); + for (row=0; row < height; row++) { + if (fread (pixel, 1, raw_width, ifp) < raw_width) derror(); + for (col=0; col < raw_width; col++) { + val = curve[pixel[col]]; + if ((unsigned) (col-left_margin) < width) + BAYER(row,col-left_margin) = val; + else lblack += val; + } + } + free (pixel); + if (raw_width > width+1) + black = lblack / ((raw_width - width) * height); + if (!strncmp(model,"DC2",3)) + black = 0; + maximum = curve[0xff]; +} + +void CLASS kodak_262_load_raw() +{ + static const uchar kodak_tree[2][26] = + { { 0,1,5,1,1,2,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9 }, + { 0,3,1,1,1,1,1,2,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9 } }; + struct decode *decode[2]; + uchar *pixel; + int *strip, ns, i, row, col, chess, pi=0, pi1, pi2, pred, val; + + init_decoder(); + for (i=0; i < 2; i++) { + decode[i] = free_decode; + make_decoder (kodak_tree[i], 0); + } + ns = (raw_height+63) >> 5; + pixel = (uchar *) malloc (raw_width*32 + ns*4); + merror (pixel, "kodak_262_load_raw()"); + strip = (int *) (pixel + raw_width*32); + order = 0x4d4d; + for (i=0; i < ns; i++) + strip[i] = get4(); + for (row=0; row < raw_height; row++) { + if ((row & 31) == 0) { + fseek (ifp, strip[row >> 5], SEEK_SET); + getbits(-1); + pi = 0; + } + for (col=0; col < raw_width; col++) { + chess = (row + col) & 1; + pi1 = chess ? pi-2 : pi-raw_width-1; + pi2 = chess ? pi-2*raw_width : pi-raw_width+1; + if (col <= chess) pi1 = -1; + if (pi1 < 0) pi1 = pi2; + if (pi2 < 0) pi2 = pi1; + if (pi1 < 0 && col > 1) pi1 = pi2 = pi-2; + pred = (pi1 < 0) ? 0 : (pixel[pi1] + pixel[pi2]) >> 1; + pixel[pi] = val = pred + ljpeg_diff (decode[chess]); + if (val >> 8) derror(); + val = curve[pixel[pi++]]; + if ((unsigned) (col-left_margin) < width) + BAYER(row,col-left_margin) = val; + else black += val; + } + } + free (pixel); + if (raw_width > width) + black /= (raw_width - width) * height; +} + +int CLASS kodak_65000_decode (short *out, int bsize) +{ + uchar c, blen[768]; + ushort raw[6]; + INT64 bitbuf=0; + int save, bits=0, i, j, len, diff; + + save = ftell(ifp); + bsize = (bsize + 3) & -4; + for (i=0; i < bsize; i+=2) { + c = fgetc(ifp); + if ((blen[i ] = c & 15) > 12 || + (blen[i+1] = c >> 4) > 12 ) { + fseek (ifp, save, SEEK_SET); + for (i=0; i < bsize; i+=8) { + read_shorts (raw, 6); + out[i ] = raw[0] >> 12 << 8 | raw[2] >> 12 << 4 | raw[4] >> 12; + out[i+1] = raw[1] >> 12 << 8 | raw[3] >> 12 << 4 | raw[5] >> 12; + for (j=0; j < 6; j++) + out[i+2+j] = raw[j] & 0xfff; + } + return 1; + } + } + if ((bsize & 7) == 4) { + bitbuf = fgetc(ifp) << 8; + bitbuf += fgetc(ifp); + bits = 16; + } + for (i=0; i < bsize; i++) { + len = blen[i]; + if (bits < len) { + for (j=0; j < 32; j+=8) + bitbuf += (INT64) fgetc(ifp) << (bits+(j^8)); + bits += 32; + } + diff = bitbuf & (0xffff >> (16-len)); + bitbuf >>= len; + bits -= len; + if ((diff & (1 << (len-1))) == 0) + diff -= (1 << len) - 1; + out[i] = diff; + } + return 0; +} + +void CLASS kodak_65000_load_raw() +{ + short buf[256]; + int row, col, len, pred[2], ret, i; + + for (row=0; row < height; row++) + for (col=0; col < width; col+=256) { + pred[0] = pred[1] = 0; + len = MIN (256, width-col); + ret = kodak_65000_decode (buf, len); + for (i=0; i < len; i++) + if ((BAYER(row,col+i) = curve[ret ? buf[i] : + (pred[i & 1] += buf[i])]) >> 12) derror(); + } +} + +void CLASS kodak_ycbcr_load_raw() +{ + short buf[384], *bp; + int row, col, len, c, i, j, k, y[2][2], cb, cr, rgb[3]; + ushort *ip; + + for (row=0; row < height; row+=2) + for (col=0; col < width; col+=128) { + len = MIN (128, width-col); + kodak_65000_decode (buf, len*3); + y[0][1] = y[1][1] = cb = cr = 0; + for (bp=buf, i=0; i < len; i+=2, bp+=2) { + cb += bp[4]; + cr += bp[5]; + rgb[1] = -((cb + cr + 2) >> 2); + rgb[2] = rgb[1] + cb; + rgb[0] = rgb[1] + cr; + for (j=0; j < 2; j++) + for (k=0; k < 2; k++) { + if ((y[j][k] = y[j][k^1] + *bp++) >> 10) derror(); + ip = image[(row+j)*width + col+i+k]; + FORC3 ip[c] = curve[LIM(y[j][k]+rgb[c], 0, 0xfff)]; + } + } + } +} + +void CLASS kodak_rgb_load_raw() +{ + short buf[768], *bp; + int row, col, len, c, i, rgb[3]; + ushort *ip=image[0]; + + for (row=0; row < height; row++) + for (col=0; col < width; col+=256) { + len = MIN (256, width-col); + kodak_65000_decode (buf, len*3); + memset (rgb, 0, sizeof rgb); + for (bp=buf, i=0; i < len; i++, ip+=4) + FORC3 if ((ip[c] = rgb[c] += *bp++) >> 12) derror(); + } +} + +void CLASS kodak_thumb_load_raw() +{ + int row, col; + colors = thumb_misc >> 5; + for (row=0; row < height; row++) + for (col=0; col < width; col++) + read_shorts (image[row*width+col], colors); + maximum = (1 << (thumb_misc & 31)) - 1; +} + +void CLASS sony_decrypt (unsigned *data, int len, int start, int key) +{ + static unsigned pad[128], p; + + if (start) { + for (p=0; p < 4; p++) + pad[p] = key = key * 48828125 + 1; + pad[3] = pad[3] << 1 | (pad[0]^pad[2]) >> 31; + for (p=4; p < 127; p++) + pad[p] = (pad[p-4]^pad[p-2]) << 1 | (pad[p-3]^pad[p-1]) >> 31; + for (p=0; p < 127; p++) + pad[p] = htonl(pad[p]); + } + while (len--) + *data++ ^= pad[p++ & 127] = pad[(p+1) & 127] ^ pad[(p+65) & 127]; +} + +void CLASS sony_load_raw() +{ + uchar head[40]; + ushort *pixel; + unsigned i, key, row, col; + + fseek (ifp, 200896, SEEK_SET); + fseek (ifp, (unsigned) fgetc(ifp)*4 - 1, SEEK_CUR); + order = 0x4d4d; + key = get4(); + fseek (ifp, 164600, SEEK_SET); + fread (head, 1, 40, ifp); + sony_decrypt ((unsigned int *) head, 10, 1, key); + for (i=26; i-- > 22; ) + key = key << 8 | head[i]; + fseek (ifp, data_offset, SEEK_SET); + pixel = (ushort *) calloc (raw_width, sizeof *pixel); + merror (pixel, "sony_load_raw()"); + for (row=0; row < height; row++) { + if (fread (pixel, 2, raw_width, ifp) < raw_width) derror(); + sony_decrypt ((unsigned int *) pixel, raw_width/2, !row, key); + for (col=9; col < left_margin; col++) + black += ntohs(pixel[col]); + for (col=0; col < width; col++) + if ((BAYER(row,col) = ntohs(pixel[col+left_margin])) >> 14) + derror(); + } + free (pixel); + if (left_margin > 9) + black /= (left_margin-9) * height; + maximum = 0x3ff0; +} + +void CLASS sony_arw_load_raw() +{ + int col, row, len, diff, sum=0; + + getbits(-1); + for (col = raw_width; col--; ) + for (row=0; row < raw_height+1; row+=2) { + if (row == raw_height) row = 1; + len = 4 - getbits(2); + if (len == 3 && getbits(1)) len = 0; + if (len == 4) + while (len < 17 && !getbits(1)) len++; + diff = getbits(len); + if ((diff & (1 << (len-1))) == 0) + diff -= (1 << len) - 1; + if ((sum += diff) >> 12) derror(); + if (row < height) BAYER(row,col) = sum; + } +} + +void CLASS sony_arw2_load_raw() +{ + uchar *data, *dp; + ushort pix[16]; + int row, col, val, max, min, imax, imin, sh, bit, i; + + data = (uchar *) malloc (raw_width*tiff_bps >> 3); + merror (data, "sony_arw2_load_raw()"); + for (row=0; row < height; row++) { + fread (data, 1, raw_width*tiff_bps >> 3, ifp); + if (tiff_bps == 8) { + for (dp=data, col=0; col < width-30; dp+=16) { + max = 0x7ff & (val = sget4(dp)); + min = 0x7ff & val >> 11; + imax = 0x0f & val >> 22; + imin = 0x0f & val >> 26; + for (sh=0; sh < 4 && 0x80 << sh <= max-min; sh++); + for (bit=30, i=0; i < 16; i++) + if (i == imax) pix[i] = max; + else if (i == imin) pix[i] = min; + else { + pix[i] = ((sget2(dp+(bit >> 3)) >> (bit & 7) & 0x7f) << sh) + min; + if (pix[i] > 0x7ff) pix[i] = 0x7ff; + bit += 7; + } + for (i=0; i < 16; i++, col+=2) + BAYER(row,col) = curve[pix[i] << 1] >> 1; + col -= col & 1 ? 1:31; + } + } else if (tiff_bps == 12) + for (dp=data, col=0; col < width; dp+=3, col+=2) { + BAYER(row,col) = ((dp[1] << 8 | dp[0]) & 0xfff) << 1; + BAYER(row,col+1) = (dp[2] << 4 | dp[1] >> 4) << 1; + } + } + free (data); + maximum = 0x1fff; +} + +#define HOLE(row) ((holes >> (((row) - raw_height) & 7)) & 1) + +/* Kudos to Rich Taylor for figuring out SMaL's compression algorithm. */ +void CLASS smal_decode_segment (unsigned seg[2][2], int holes) +{ + uchar hist[3][13] = { + { 7, 7, 0, 0, 63, 55, 47, 39, 31, 23, 15, 7, 0 }, + { 7, 7, 0, 0, 63, 55, 47, 39, 31, 23, 15, 7, 0 }, + { 3, 3, 0, 0, 63, 47, 31, 15, 0 } }; + int low, high=0xff, carry=0, nbits=8; + int s, count, bin, next, i, sym[3]; + uchar diff, pred[]={0,0}; + ushort data=0, range=0; + unsigned pix, row, col; + + fseek (ifp, seg[0][1]+1, SEEK_SET); + getbits(-1); + for (pix=seg[0][0]; pix < seg[1][0]; pix++) { + for (s=0; s < 3; s++) { + data = data << nbits | getbits(nbits); + if (carry < 0) + carry = (nbits += carry+1) < 1 ? nbits-1 : 0; + while (--nbits >= 0) + if ((data >> nbits & 0xff) == 0xff) break; + if (nbits > 0) + data = ((data & ((1 << (nbits-1)) - 1)) << 1) | + ((data + (((data & (1 << (nbits-1)))) << 1)) & (-1 << nbits)); + if (nbits >= 0) { + data += getbits(1); + carry = nbits - 8; + } + count = ((((data-range+1) & 0xffff) << 2) - 1) / (high >> 4); + for (bin=0; hist[s][bin+5] > count; bin++); + low = hist[s][bin+5] * (high >> 4) >> 2; + if (bin) high = hist[s][bin+4] * (high >> 4) >> 2; + high -= low; + for (nbits=0; high << nbits < 128; nbits++); + range = (range+low) << nbits; + high <<= nbits; + next = hist[s][1]; + if (++hist[s][2] > hist[s][3]) { + next = (next+1) & hist[s][0]; + hist[s][3] = (hist[s][next+4] - hist[s][next+5]) >> 2; + hist[s][2] = 1; + } + if (hist[s][hist[s][1]+4] - hist[s][hist[s][1]+5] > 1) { + if (bin < hist[s][1]) + for (i=bin; i < hist[s][1]; i++) hist[s][i+5]--; + else if (next <= bin) + for (i=hist[s][1]; i < bin; i++) hist[s][i+5]++; + } + hist[s][1] = next; + sym[s] = bin; + } + diff = sym[2] << 5 | sym[1] << 2 | (sym[0] & 3); + if (sym[0] & 4) + diff = diff ? -diff : 0x80; + if (ftell(ifp) + 12 >= seg[1][1]) + diff = 0; + pred[pix & 1] += diff; + row = pix / raw_width - top_margin; + col = pix % raw_width - left_margin; + if (row < height && col < width) + BAYER(row,col) = pred[pix & 1]; + if (!(pix & 1) && HOLE(row)) pix += 2; + } + maximum = 0xff; +} + +void CLASS smal_v6_load_raw() +{ + unsigned seg[2][2]; + + fseek (ifp, 16, SEEK_SET); + seg[0][0] = 0; + seg[0][1] = get2(); + seg[1][0] = raw_width * raw_height; + seg[1][1] = INT_MAX; + smal_decode_segment (seg, 0); + use_gamma = 0; +} + +int CLASS median4 (int *p) +{ + int min, max, sum, i; + + min = max = sum = p[0]; + for (i=1; i < 4; i++) { + sum += p[i]; + if (min > p[i]) min = p[i]; + if (max < p[i]) max = p[i]; + } + return (sum - min - max) >> 1; +} + +void CLASS fill_holes (int holes) +{ + int row, col, val[4]; + + for (row=2; row < height-2; row++) { + if (!HOLE(row)) continue; + for (col=1; col < width-1; col+=4) { + val[0] = BAYER(row-1,col-1); + val[1] = BAYER(row-1,col+1); + val[2] = BAYER(row+1,col-1); + val[3] = BAYER(row+1,col+1); + BAYER(row,col) = median4(val); + } + for (col=2; col < width-2; col+=4) + if (HOLE(row-2) || HOLE(row+2)) + BAYER(row,col) = (BAYER(row,col-2) + BAYER(row,col+2)) >> 1; + else { + val[0] = BAYER(row,col-2); + val[1] = BAYER(row,col+2); + val[2] = BAYER(row-2,col); + val[3] = BAYER(row+2,col); + BAYER(row,col) = median4(val); + } + } +} + +void CLASS smal_v9_load_raw() +{ + unsigned seg[256][2], offset, nseg, holes, i; + + fseek (ifp, 67, SEEK_SET); + offset = get4(); + nseg = fgetc(ifp); + fseek (ifp, offset, SEEK_SET); + for (i=0; i < nseg*2; i++) + seg[0][i] = get4() + data_offset*(i & 1); + fseek (ifp, 78, SEEK_SET); + holes = fgetc(ifp); + fseek (ifp, 88, SEEK_SET); + seg[nseg][0] = raw_height * raw_width; + seg[nseg][1] = get4() + data_offset; + for (i=0; i < nseg; i++) + smal_decode_segment (seg+i, holes); + if (holes) fill_holes (holes); +} + +/* RESTRICTED code starts here */ + +void CLASS foveon_decoder (unsigned size, unsigned code) +{ + static unsigned huff[1024]; + struct decode *cur; + int i, len; + + if (!code) { + for (i=0; i < size; i++) + huff[i] = get4(); + init_decoder(); + } + cur = free_decode++; + if (free_decode > first_decode+2048) { + fprintf (stderr,_("%s: decoder table overflow\n"), ifname); + longjmp (failure, 2); + } + if (code) + for (i=0; i < size; i++) + if (huff[i] == code) { + cur->leaf = i; + return; + } + if ((len = code >> 27) > 26) return; + code = (len+1) << 27 | (code & 0x3ffffff) << 1; + + cur->branch[0] = free_decode; + foveon_decoder (size, code); + cur->branch[1] = free_decode; + foveon_decoder (size, code+1); +} + +void CLASS foveon_thumb (FILE *tfp) +{ + unsigned bwide, row, col, bitbuf=0, bit=1, c, i; + char *buf; + struct decode *dindex; + short pred[3]; + + bwide = get4(); + fprintf (tfp, "P6\n%d %d\n255\n", thumb_width, thumb_height); + if (bwide > 0) { + if (bwide < thumb_width*3) return; + buf = (char *) malloc (bwide); + merror (buf, "foveon_thumb()"); + for (row=0; row < thumb_height; row++) { + fread (buf, 1, bwide, ifp); + fwrite (buf, 3, thumb_width, tfp); + } + free (buf); + return; + } + foveon_decoder (256, 0); + + for (row=0; row < thumb_height; row++) { + memset (pred, 0, sizeof pred); + if (!bit) get4(); + for (bit=col=0; col < thumb_width; col++) + FORC3 { + for (dindex=first_decode; dindex->branch[0]; ) { + if ((bit = (bit-1) & 31) == 31) + for (i=0; i < 4; i++) + bitbuf = (bitbuf << 8) + fgetc(ifp); + dindex = dindex->branch[bitbuf >> bit & 1]; + } + pred[c] += dindex->leaf; + fputc (pred[c], tfp); + } + } +} + +void CLASS foveon_load_camf() +{ + unsigned key, i, val; + + fseek (ifp, meta_offset, SEEK_SET); + key = get4(); + fread (meta_data, 1, meta_length, ifp); + for (i=0; i < meta_length; i++) { + key = (key * 1597 + 51749) % 244944; + val = key * (INT64) 301593171 >> 24; + meta_data[i] ^= ((((key << 8) - val) >> 1) + val) >> 17; + } +} + +void CLASS foveon_load_raw() +{ + struct decode *dindex; + short diff[1024]; + unsigned bitbuf=0; + int pred[3], fixed, row, col, bit=-1, c, i; + + fixed = get4(); + read_shorts ((ushort *) diff, 1024); + if (!fixed) foveon_decoder (1024, 0); + + for (row=0; row < height; row++) { + memset (pred, 0, sizeof pred); + if (!bit && !fixed && atoi(model+2) < 14) get4(); + for (col=bit=0; col < width; col++) { + if (fixed) { + bitbuf = get4(); + FORC3 pred[2-c] += diff[bitbuf >> c*10 & 0x3ff]; + } + else FORC3 { + for (dindex=first_decode; dindex->branch[0]; ) { + if ((bit = (bit-1) & 31) == 31) + for (i=0; i < 4; i++) + bitbuf = (bitbuf << 8) + fgetc(ifp); + dindex = dindex->branch[bitbuf >> bit & 1]; + } + pred[c] += diff[dindex->leaf]; + if (pred[c] >> 16 && ~pred[c] >> 16) derror(); + } + FORC3 image[row*width+col][c] = pred[c]; + } + } + if (document_mode) + for (i=0; i < height*width*4; i++) + if ((short) image[0][i] < 0) image[0][i] = 0; + foveon_load_camf(); +} + +const char * CLASS foveon_camf_param (const char *block, const char *param) +{ + unsigned idx, num; + char *pos, *cp, *dp; + + for (idx=0; idx < meta_length; idx += sget4(pos+8)) { + pos = meta_data + idx; + if (strncmp (pos, "CMb", 3)) break; + if (pos[3] != 'P') continue; + if (strcmp (block, pos+sget4(pos+12))) continue; + cp = pos + sget4(pos+16); + num = sget4(cp); + dp = pos + sget4(cp+4); + while (num--) { + cp += 8; + if (!strcmp (param, dp+sget4(cp))) + return dp+sget4(cp+4); + } + } + return 0; +} + +void * CLASS foveon_camf_matrix (unsigned dim[3], const char *name) +{ + unsigned i, idx, type, ndim, size, *mat; + char *pos, *cp, *dp; + double dsize; + + for (idx=0; idx < meta_length; idx += sget4(pos+8)) { + pos = meta_data + idx; + if (strncmp (pos, "CMb", 3)) break; + if (pos[3] != 'M') continue; + if (strcmp (name, pos+sget4(pos+12))) continue; + dim[0] = dim[1] = dim[2] = 1; + cp = pos + sget4(pos+16); + type = sget4(cp); + if ((ndim = sget4(cp+4)) > 3) break; + dp = pos + sget4(cp+8); + for (i=ndim; i--; ) { + cp += 12; + dim[i] = sget4(cp); + } + if ((dsize = (double) dim[0]*dim[1]*dim[2]) > meta_length/4) break; + mat = (unsigned *) malloc ((size = dsize) * 4); + merror (mat, "foveon_camf_matrix()"); + for (i=0; i < size; i++) + if (type && type != 6) + mat[i] = sget4(dp + i*4); + else + mat[i] = sget4(dp + i*2) & 0xffff; + return mat; + } + fprintf (stderr,_("%s: \"%s\" matrix not found!\n"), ifname, name); + return 0; +} + +int CLASS foveon_fixed (void *ptr, int size, const char *name) +{ + void *dp; + unsigned dim[3]; + + dp = foveon_camf_matrix (dim, name); + if (!dp) return 0; + memcpy (ptr, dp, size*4); + free (dp); + return 1; +} + +float CLASS foveon_avg (short *pix, int range[2], float cfilt) +{ + int i; + float val, min=FLT_MAX, max=-FLT_MAX, sum=0; + + for (i=range[0]; i <= range[1]; i++) { + sum += val = pix[i*4] + (pix[i*4]-pix[(i-1)*4]) * cfilt; + if (min > val) min = val; + if (max < val) max = val; + } + if (range[1] - range[0] == 1) return sum/2; + return (sum - min - max) / (range[1] - range[0] - 1); +} + +short * CLASS foveon_make_curve (double max, double mul, double filt) +{ + short *curve; + unsigned i, size; + double x; + + if (!filt) filt = 0.8; + size = 4*M_PI*max / filt; + if (size == UINT_MAX) size--; + curve = (short *) calloc (size+1, sizeof *curve); + merror (curve, "foveon_make_curve()"); + curve[0] = size; + for (i=0; i < size; i++) { + x = i*filt/max/4; + curve[i+1] = (cos(x)+1)/2 * tanh(i*filt/mul) * mul + 0.5; + } + return curve; +} + +void CLASS foveon_make_curves + (short **curvep, float dq[3], float div[3], float filt) +{ + double mul[3], max=0; + int c; + + FORC3 mul[c] = dq[c]/div[c]; + FORC3 if (max < mul[c]) max = mul[c]; + FORC3 curvep[c] = foveon_make_curve (max, mul[c], filt); +} + +int CLASS foveon_apply_curve (short *curve, int i) +{ + if (abs(i) >= curve[0]) return 0; + return i < 0 ? -curve[1-i] : curve[1+i]; +} + +#define image ((short (*)[4]) image) + +void CLASS foveon_interpolate() +{ + static const short hood[] = { -1,-1, -1,0, -1,1, 0,-1, 0,1, 1,-1, 1,0, 1,1 }; + short *pix, prev[3], *curve[8], (*shrink)[3]; + float cfilt=0, ddft[3][3][2], ppm[3][3][3]; + float cam_xyz[3][3], correct[3][3], last[3][3], trans[3][3]; + float chroma_dq[3], color_dq[3], diag[3][3], div[3]; + float (*black)[3], (*sgain)[3], (*sgrow)[3]; + float fsum[3], val, frow, num; + int row, col, c, i, j, diff, sgx, irow, sum, min, max, limit; + int dscr[2][2], dstb[4], (*smrow[7])[3], total[4], ipix[3]; + int work[3][3], smlast, smred, smred_p=0, dev[3]; + int satlev[3], keep[4], active[4]; + unsigned dim[3], *badpix; + double dsum=0, trsum[3]; + char str[128]; + const char* cp; + + if (verbose) + fprintf (stderr,_("Foveon interpolation...\n")); + + foveon_fixed (dscr, 4, "DarkShieldColRange"); + foveon_fixed (ppm[0][0], 27, "PostPolyMatrix"); + foveon_fixed (satlev, 3, "SaturationLevel"); + foveon_fixed (keep, 4, "KeepImageArea"); + foveon_fixed (active, 4, "ActiveImageArea"); + foveon_fixed (chroma_dq, 3, "ChromaDQ"); + foveon_fixed (color_dq, 3, + foveon_camf_param ("IncludeBlocks", "ColorDQ") ? + "ColorDQ" : "ColorDQCamRGB"); + if (foveon_camf_param ("IncludeBlocks", "ColumnFilter")) + foveon_fixed (&cfilt, 1, "ColumnFilter"); + + memset (ddft, 0, sizeof ddft); + if (!foveon_camf_param ("IncludeBlocks", "DarkDrift") + || !foveon_fixed (ddft[1][0], 12, "DarkDrift")) + for (i=0; i < 2; i++) { + foveon_fixed (dstb, 4, i ? "DarkShieldBottom":"DarkShieldTop"); + for (row = dstb[1]; row <= dstb[3]; row++) + for (col = dstb[0]; col <= dstb[2]; col++) + FORC3 ddft[i+1][c][1] += (short) image[row*width+col][c]; + FORC3 ddft[i+1][c][1] /= (dstb[3]-dstb[1]+1) * (dstb[2]-dstb[0]+1); + } + + if (!(cp = foveon_camf_param ("WhiteBalanceIlluminants", model2))) + { fprintf (stderr,_("%s: Invalid white balance \"%s\"\n"), ifname, model2); + return; } + foveon_fixed (cam_xyz, 9, cp); + foveon_fixed (correct, 9, + foveon_camf_param ("WhiteBalanceCorrections", model2)); + memset (last, 0, sizeof last); + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + FORC3 last[i][j] += correct[i][c] * cam_xyz[c][j]; + + #define LAST(x,y) last[(i+x)%3][(c+y)%3] + for (i=0; i < 3; i++) + FORC3 diag[c][i] = LAST(1,1)*LAST(2,2) - LAST(1,2)*LAST(2,1); + #undef LAST + FORC3 div[c] = diag[c][0]*0.3127 + diag[c][1]*0.329 + diag[c][2]*0.3583; + sprintf (str, "%sRGBNeutral", model2); + if (foveon_camf_param ("IncludeBlocks", str)) + foveon_fixed (div, 3, str); + num = 0; + FORC3 if (num < div[c]) num = div[c]; + FORC3 div[c] /= num; + + memset (trans, 0, sizeof trans); + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + FORC3 trans[i][j] += rgb_cam[i][c] * last[c][j] * div[j]; + FORC3 trsum[c] = trans[c][0] + trans[c][1] + trans[c][2]; + dsum = (6*trsum[0] + 11*trsum[1] + 3*trsum[2]) / 20; + for (i=0; i < 3; i++) + FORC3 last[i][c] = trans[i][c] * dsum / trsum[i]; + memset (trans, 0, sizeof trans); + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + FORC3 trans[i][j] += (i==c ? 32 : -1) * last[c][j] / 30; + + foveon_make_curves (curve, color_dq, div, cfilt); + FORC3 chroma_dq[c] /= 3; + foveon_make_curves (curve+3, chroma_dq, div, cfilt); + FORC3 dsum += chroma_dq[c] / div[c]; + curve[6] = foveon_make_curve (dsum, dsum, cfilt); + curve[7] = foveon_make_curve (dsum*2, dsum*2, cfilt); + + sgain = (float (*)[3]) foveon_camf_matrix (dim, "SpatialGain"); + if (!sgain) return; + sgrow = (float (*)[3]) calloc (dim[1], sizeof *sgrow); + sgx = (width + dim[1]-2) / (dim[1]-1); + + black = (float (*)[3]) calloc (height, sizeof *black); + for (row=0; row < height; row++) { + for (i=0; i < 6; i++) + ddft[0][0][i] = ddft[1][0][i] + + row / (height-1.0) * (ddft[2][0][i] - ddft[1][0][i]); + FORC3 black[row][c] = + ( foveon_avg (image[row*width]+c, dscr[0], cfilt) + + foveon_avg (image[row*width]+c, dscr[1], cfilt) * 3 + - ddft[0][c][0] ) / 4 - ddft[0][c][1]; + } + memcpy (black, black+8, sizeof *black*8); + memcpy (black+height-11, black+height-22, 11*sizeof *black); + memcpy (last, black, sizeof last); + + for (row=1; row < height-1; row++) { + FORC3 if (last[1][c] > last[0][c]) { + if (last[1][c] > last[2][c]) + black[row][c] = (last[0][c] > last[2][c]) ? last[0][c]:last[2][c]; + } else + if (last[1][c] < last[2][c]) + black[row][c] = (last[0][c] < last[2][c]) ? last[0][c]:last[2][c]; + memmove (last, last+1, 2*sizeof last[0]); + memcpy (last[2], black[row+1], sizeof last[2]); + } + FORC3 black[row][c] = (last[0][c] + last[1][c])/2; + FORC3 black[0][c] = (black[1][c] + black[3][c])/2; + + val = 1 - exp(-1/24.0); + memcpy (fsum, black, sizeof fsum); + for (row=1; row < height; row++) + FORC3 fsum[c] += black[row][c] = + (black[row][c] - black[row-1][c])*val + black[row-1][c]; + memcpy (last[0], black[height-1], sizeof last[0]); + FORC3 fsum[c] /= height; + for (row = height; row--; ) + FORC3 last[0][c] = black[row][c] = + (black[row][c] - fsum[c] - last[0][c])*val + last[0][c]; + + memset (total, 0, sizeof total); + for (row=2; row < height; row+=4) + for (col=2; col < width; col+=4) { + FORC3 total[c] += (short) image[row*width+col][c]; + total[3]++; + } + for (row=0; row < height; row++) + FORC3 black[row][c] += fsum[c]/2 + total[c]/(total[3]*100.0); + + for (row=0; row < height; row++) { + for (i=0; i < 6; i++) + ddft[0][0][i] = ddft[1][0][i] + + row / (height-1.0) * (ddft[2][0][i] - ddft[1][0][i]); + pix = image[row*width]; + memcpy (prev, pix, sizeof prev); + frow = row / (height-1.0) * (dim[2]-1); + if ((irow = frow) == dim[2]-1) irow--; + frow -= irow; + for (i=0; i < dim[1]; i++) + FORC3 sgrow[i][c] = sgain[ irow *dim[1]+i][c] * (1-frow) + + sgain[(irow+1)*dim[1]+i][c] * frow; + for (col=0; col < width; col++) { + FORC3 { + diff = pix[c] - prev[c]; + prev[c] = pix[c]; + ipix[c] = pix[c] + floor ((diff + (diff*diff >> 14)) * cfilt + - ddft[0][c][1] - ddft[0][c][0] * ((float) col/width - 0.5) + - black[row][c] ); + } + FORC3 { + work[0][c] = ipix[c] * ipix[c] >> 14; + work[2][c] = ipix[c] * work[0][c] >> 14; + work[1][2-c] = ipix[(c+1) % 3] * ipix[(c+2) % 3] >> 14; + } + FORC3 { + for (val=i=0; i < 3; i++) + for ( j=0; j < 3; j++) + val += ppm[c][i][j] * work[i][j]; + ipix[c] = floor ((ipix[c] + floor(val)) * + ( sgrow[col/sgx ][c] * (sgx - col%sgx) + + sgrow[col/sgx+1][c] * (col%sgx) ) / sgx / div[c]); + if (ipix[c] > 32000) ipix[c] = 32000; + pix[c] = ipix[c]; + } + pix += 4; + } + } + free (black); + free (sgrow); + free (sgain); + + if ((badpix = (unsigned int *) foveon_camf_matrix (dim, "BadPixels"))) { + for (i=0; i < dim[0]; i++) { + col = (badpix[i] >> 8 & 0xfff) - keep[0]; + row = (badpix[i] >> 20 ) - keep[1]; + if ((unsigned)(row-1) > height-3 || (unsigned)(col-1) > width-3) + continue; + memset (fsum, 0, sizeof fsum); + for (sum=j=0; j < 8; j++) + if (badpix[i] & (1 << j)) { + FORC3 fsum[c] += (short) + image[(row+hood[j*2])*width+col+hood[j*2+1]][c]; + sum++; + } + if (sum) FORC3 image[row*width+col][c] = fsum[c]/sum; + } + free (badpix); + } + + /* Array for 5x5 Gaussian averaging of red values */ + smrow[6] = (int (*)[3]) calloc (width*5, sizeof **smrow); + merror (smrow[6], "foveon_interpolate()"); + for (i=0; i < 5; i++) + smrow[i] = smrow[6] + i*width; + + /* Sharpen the reds against these Gaussian averages */ + for (smlast=-1, row=2; row < height-2; row++) { + while (smlast < row+2) { + for (i=0; i < 6; i++) + smrow[(i+5) % 6] = smrow[i]; + pix = image[++smlast*width+2]; + for (col=2; col < width-2; col++) { + smrow[4][col][0] = + (pix[0]*6 + (pix[-4]+pix[4])*4 + pix[-8]+pix[8] + 8) >> 4; + pix += 4; + } + } + pix = image[row*width+2]; + for (col=2; col < width-2; col++) { + smred = ( 6 * smrow[2][col][0] + + 4 * (smrow[1][col][0] + smrow[3][col][0]) + + smrow[0][col][0] + smrow[4][col][0] + 8 ) >> 4; + if (col == 2) + smred_p = smred; + i = pix[0] + ((pix[0] - ((smred*7 + smred_p) >> 3)) >> 3); + if (i > 32000) i = 32000; + pix[0] = i; + smred_p = smred; + pix += 4; + } + } + + /* Adjust the brighter pixels for better linearity */ + min = 0xffff; + FORC3 { + i = satlev[c] / div[c]; + if (min > i) min = i; + } + limit = min * 9 >> 4; + for (pix=image[0]; pix < image[height*width]; pix+=4) { + if (pix[0] <= limit || pix[1] <= limit || pix[2] <= limit) + continue; + min = max = pix[0]; + for (c=1; c < 3; c++) { + if (min > pix[c]) min = pix[c]; + if (max < pix[c]) max = pix[c]; + } + if (min >= limit*2) { + pix[0] = pix[1] = pix[2] = max; + } else { + i = 0x4000 - ((min - limit) << 14) / limit; + i = 0x4000 - (i*i >> 14); + i = i*i >> 14; + FORC3 pix[c] += (max - pix[c]) * i >> 14; + } + } +/* + Because photons that miss one detector often hit another, + the sum R+G+B is much less noisy than the individual colors. + So smooth the hues without smoothing the total. + */ + for (smlast=-1, row=2; row < height-2; row++) { + while (smlast < row+2) { + for (i=0; i < 6; i++) + smrow[(i+5) % 6] = smrow[i]; + pix = image[++smlast*width+2]; + for (col=2; col < width-2; col++) { + FORC3 smrow[4][col][c] = (pix[c-4]+2*pix[c]+pix[c+4]+2) >> 2; + pix += 4; + } + } + pix = image[row*width+2]; + for (col=2; col < width-2; col++) { + FORC3 dev[c] = -foveon_apply_curve (curve[7], pix[c] - + ((smrow[1][col][c] + 2*smrow[2][col][c] + smrow[3][col][c]) >> 2)); + sum = (dev[0] + dev[1] + dev[2]) >> 3; + FORC3 pix[c] += dev[c] - sum; + pix += 4; + } + } + for (smlast=-1, row=2; row < height-2; row++) { + while (smlast < row+2) { + for (i=0; i < 6; i++) + smrow[(i+5) % 6] = smrow[i]; + pix = image[++smlast*width+2]; + for (col=2; col < width-2; col++) { + FORC3 smrow[4][col][c] = + (pix[c-8]+pix[c-4]+pix[c]+pix[c+4]+pix[c+8]+2) >> 2; + pix += 4; + } + } + pix = image[row*width+2]; + for (col=2; col < width-2; col++) { + for (total[3]=375, sum=60, c=0; c < 3; c++) { + for (total[c]=i=0; i < 5; i++) + total[c] += smrow[i][col][c]; + total[3] += total[c]; + sum += pix[c]; + } + if (sum < 0) sum = 0; + j = total[3] > 375 ? (sum << 16) / total[3] : sum * 174; + FORC3 pix[c] += foveon_apply_curve (curve[6], + ((j*total[c] + 0x8000) >> 16) - pix[c]); + pix += 4; + } + } + + /* Transform the image to a different colorspace */ + for (pix=image[0]; pix < image[height*width]; pix+=4) { + FORC3 pix[c] -= foveon_apply_curve (curve[c], pix[c]); + sum = (pix[0]+pix[1]+pix[1]+pix[2]) >> 2; + FORC3 pix[c] -= foveon_apply_curve (curve[c], pix[c]-sum); + FORC3 { + for (dsum=i=0; i < 3; i++) + dsum += trans[c][i] * pix[i]; + if (dsum < 0) dsum = 0; + if (dsum > 24000) dsum = 24000; + ipix[c] = dsum + 0.5; + } + FORC3 pix[c] = ipix[c]; + } + + /* Smooth the image bottom-to-top and save at 1/4 scale */ + shrink = (short (*)[3]) calloc ((width/4) * (height/4), sizeof *shrink); + merror (shrink, "foveon_interpolate()"); + for (row = height/4; row--; ) + for (col=0; col < width/4; col++) { + ipix[0] = ipix[1] = ipix[2] = 0; + for (i=0; i < 4; i++) + for (j=0; j < 4; j++) + FORC3 ipix[c] += image[(row*4+i)*width+col*4+j][c]; + FORC3 + if (row+2 > height/4) + shrink[row*(width/4)+col][c] = ipix[c] >> 4; + else + shrink[row*(width/4)+col][c] = + (shrink[(row+1)*(width/4)+col][c]*1840 + ipix[c]*141 + 2048) >> 12; + } + /* From the 1/4-scale image, smooth right-to-left */ + for (row=0; row < (height & ~3); row++) { + ipix[0] = ipix[1] = ipix[2] = 0; + if ((row & 3) == 0) + for (col = width & ~3 ; col--; ) + FORC3 smrow[0][col][c] = ipix[c] = + (shrink[(row/4)*(width/4)+col/4][c]*1485 + ipix[c]*6707 + 4096) >> 13; + + /* Then smooth left-to-right */ + ipix[0] = ipix[1] = ipix[2] = 0; + for (col=0; col < (width & ~3); col++) + FORC3 smrow[1][col][c] = ipix[c] = + (smrow[0][col][c]*1485 + ipix[c]*6707 + 4096) >> 13; + + /* Smooth top-to-bottom */ + if (row == 0) + memcpy (smrow[2], smrow[1], sizeof **smrow * width); + else + for (col=0; col < (width & ~3); col++) + FORC3 smrow[2][col][c] = + (smrow[2][col][c]*6707 + smrow[1][col][c]*1485 + 4096) >> 13; + + /* Adjust the chroma toward the smooth values */ + for (col=0; col < (width & ~3); col++) { + for (i=j=30, c=0; c < 3; c++) { + i += smrow[2][col][c]; + j += image[row*width+col][c]; + } + j = (j << 16) / i; + for (sum=c=0; c < 3; c++) { + ipix[c] = foveon_apply_curve (curve[c+3], + ((smrow[2][col][c] * j + 0x8000) >> 16) - image[row*width+col][c]); + sum += ipix[c]; + } + sum >>= 3; + FORC3 { + i = image[row*width+col][c] + ipix[c] - sum; + if (i < 0) i = 0; + image[row*width+col][c] = i; + } + } + } + free (shrink); + free (smrow[6]); + for (i=0; i < 8; i++) + free (curve[i]); + + /* Trim off the black border */ + active[1] -= keep[1]; + active[3] -= 2; + i = active[2] - active[0]; + for (row=0; row < active[3]-active[1]; row++) + memcpy (image[row*i], image[(row+active[1])*width+active[0]], + i * sizeof *image); + width = i; + height = row; +} +#undef image + +/* RESTRICTED code ends here */ + +/* + Seach from the current directory up to the root looking for + a ".badpixels" file, and fix those pixels now. + */ +void CLASS bad_pixels (char *fname) +{ + FILE *fp=0; + char *cp, line[128]; + int len, time, row, col, r, c, rad, tot, n, fixed=0; + + if (!filters) return; + if (fname) + fp = fopen (fname, "r"); + else { + for (len=32 ; ; len *= 2) { + fname = (char *) malloc (len); + if (!fname) return; + if (getcwd (fname, len-16)) break; + free (fname); + if (errno != ERANGE) return; + } +#if defined(WIN32) || defined(DJGPP) + if (fname[1] == ':') + memmove (fname, fname+2, len-2); + for (cp=fname; *cp; cp++) + if (*cp == '\\') *cp = '/'; +#endif + cp = fname + strlen(fname); + if (cp[-1] == '/') cp--; + while (*fname == '/') { + strcpy (cp, "/.badpixels"); + if ((fp = fopen (fname, "r"))) break; + if (cp == fname) break; + while (*--cp != '/'); + } + free (fname); + } + if (!fp) return; + while (fgets (line, 128, fp)) { + cp = strchr (line, '#'); + if (cp) *cp = 0; + if (sscanf (line, "%d %d %d", &col, &row, &time) != 3) continue; + if ((unsigned) col >= width || (unsigned) row >= height) continue; + if (time > timestamp) continue; + for (tot=n=0, rad=1; rad < 3 && n==0; rad++) + for (r = row-rad; r <= row+rad; r++) + for (c = col-rad; c <= col+rad; c++) + if ((unsigned) r < height && (unsigned) c < width && + (r != row || c != col) && fc(r,c) == fc(row,col)) { + tot += BAYER2(r,c); + n++; + } + BAYER2(row,col) = tot/n; + if (verbose) { + if (!fixed++) + fprintf (stderr,_("Fixed dead pixels at:")); + fprintf (stderr, " %d,%d", col, row); + } + } + if (fixed) fputc ('\n', stderr); + fclose (fp); +} + +void CLASS subtract (char *fname) +{ + FILE *fp; + int dim[3]={0,0,0}, comment=0, number=0, error=0, nd=0, c, row, col; + ushort *pixel; + + if (!(fp = fopen (fname, "rb"))) { + perror (fname); return; + } + if (fgetc(fp) != 'P' || fgetc(fp) != '5') error = 1; + while (!error && nd < 3 && (c = fgetc(fp)) != EOF) { + if (c == '#') comment = 1; + if (c == '\n') comment = 0; + if (comment) continue; + if (isdigit(c)) number = 1; + if (number) { + if (isdigit(c)) dim[nd] = dim[nd]*10 + c -'0'; + else if (isspace(c)) { + number = 0; nd++; + } else error = 1; + } + } + if (error || nd < 3) { + fprintf (stderr,_("%s is not a valid PGM file!\n"), fname); + fclose (fp); return; + } else if (dim[0] != width || dim[1] != height || dim[2] != 65535) { + fprintf (stderr,_("%s has the wrong dimensions!\n"), fname); + fclose (fp); return; + } + pixel = (ushort *) calloc (width, sizeof *pixel); + merror (pixel, "subtract()"); + for (row=0; row < height; row++) { + fread (pixel, 2, width, fp); + for (col=0; col < width; col++) + BAYER(row,col) = MAX (BAYER(row,col) - ntohs(pixel[col]), 0); + } + free (pixel); + black = 0; +} + +void CLASS pseudoinverse (double (*in)[3], double (*out)[3], int size) +{ + double work[3][6], num; + int i, j, k; + + for (i=0; i < 3; i++) { + for (j=0; j < 6; j++) + work[i][j] = j == i+3; + for (j=0; j < 3; j++) + for (k=0; k < size; k++) + work[i][j] += in[k][i] * in[k][j]; + } + for (i=0; i < 3; i++) { + num = work[i][i]; + for (j=0; j < 6; j++) + work[i][j] /= num; + for (k=0; k < 3; k++) { + if (k==i) continue; + num = work[k][i]; + for (j=0; j < 6; j++) + work[k][j] -= work[i][j] * num; + } + } + for (i=0; i < size; i++) + for (j=0; j < 3; j++) + for (out[i][j]=k=0; k < 3; k++) + out[i][j] += work[j][k+3] * in[i][k]; +} + +void CLASS cam_xyz_coeff (double cam_xyz[4][3]) +{ + double cam_rgb[4][3], inverse[4][3], num; + int i, j, k; + + for (i=0; i < colors; i++) /* Multiply out XYZ colorspace */ + for (j=0; j < 3; j++) + for (cam_rgb[i][j] = k=0; k < 3; k++) + cam_rgb[i][j] += cam_xyz[i][k] * xyz_rgb[k][j]; + + for (i=0; i < colors; i++) { /* Normalize cam_rgb so that */ + for (num=j=0; j < 3; j++) /* cam_rgb * (1,1,1) is (1,1,1,1) */ + num += cam_rgb[i][j]; + for (j=0; j < 3; j++) + cam_rgb[i][j] /= num; + pre_mul[i] = 1 / num; + } + pseudoinverse (cam_rgb, inverse, colors); + for (raw_color = i=0; i < 3; i++) + for (j=0; j < colors; j++) + rgb_cam[i][j] = inverse[j][i]; +} + +#ifdef COLORCHECK +void CLASS colorcheck() +{ +#define NSQ 24 +// Coordinates of the GretagMacbeth ColorChecker squares +// width, height, 1st_column, 1st_row + static const int cut[NSQ][4] = { + { 241, 231, 234, 274 }, + { 251, 235, 534, 274 }, + { 255, 239, 838, 272 }, + { 255, 240, 1146, 274 }, + { 251, 237, 1452, 278 }, + { 243, 238, 1758, 288 }, + { 253, 253, 218, 558 }, + { 255, 249, 524, 562 }, + { 261, 253, 830, 562 }, + { 260, 255, 1144, 564 }, + { 261, 255, 1450, 566 }, + { 247, 247, 1764, 576 }, + { 255, 251, 212, 862 }, + { 259, 259, 518, 862 }, + { 263, 261, 826, 864 }, + { 265, 263, 1138, 866 }, + { 265, 257, 1450, 872 }, + { 257, 255, 1762, 874 }, + { 257, 253, 212, 1164 }, + { 262, 251, 516, 1172 }, + { 263, 257, 826, 1172 }, + { 263, 255, 1136, 1176 }, + { 255, 252, 1452, 1182 }, + { 257, 253, 1760, 1180 } }; +// ColorChecker Chart under 6500-kelvin illumination + static const double gmb_xyY[NSQ][3] = { + { 0.400, 0.350, 10.1 }, // Dark Skin + { 0.377, 0.345, 35.8 }, // Light Skin + { 0.247, 0.251, 19.3 }, // Blue Sky + { 0.337, 0.422, 13.3 }, // Foliage + { 0.265, 0.240, 24.3 }, // Blue Flower + { 0.261, 0.343, 43.1 }, // Bluish Green + { 0.506, 0.407, 30.1 }, // Orange + { 0.211, 0.175, 12.0 }, // Purplish Blue + { 0.453, 0.306, 19.8 }, // Moderate Red + { 0.285, 0.202, 6.6 }, // Purple + { 0.380, 0.489, 44.3 }, // Yellow Green + { 0.473, 0.438, 43.1 }, // Orange Yellow + { 0.187, 0.129, 6.1 }, // Blue + { 0.305, 0.478, 23.4 }, // Green + { 0.539, 0.313, 12.0 }, // Red + { 0.448, 0.470, 59.1 }, // Yellow + { 0.364, 0.233, 19.8 }, // Magenta + { 0.196, 0.252, 19.8 }, // Cyan + { 0.310, 0.316, 90.0 }, // White + { 0.310, 0.316, 59.1 }, // Neutral 8 + { 0.310, 0.316, 36.2 }, // Neutral 6.5 + { 0.310, 0.316, 19.8 }, // Neutral 5 + { 0.310, 0.316, 9.0 }, // Neutral 3.5 + { 0.310, 0.316, 3.1 } }; // Black + double gmb_cam[NSQ][4], gmb_xyz[NSQ][3]; + double inverse[NSQ][3], cam_xyz[4][3], num; + int c, i, j, k, sq, row, col, count[4]; + + memset (gmb_cam, 0, sizeof gmb_cam); + for (sq=0; sq < NSQ; sq++) { + FORCC count[c] = 0; + for (row=cut[sq][3]; row < cut[sq][3]+cut[sq][1]; row++) + for (col=cut[sq][2]; col < cut[sq][2]+cut[sq][0]; col++) { + c = FC(row,col); + if (c >= colors) c -= 2; + gmb_cam[sq][c] += BAYER(row,col); + count[c]++; + } + FORCC gmb_cam[sq][c] = gmb_cam[sq][c]/count[c] - black; + gmb_xyz[sq][0] = gmb_xyY[sq][2] * gmb_xyY[sq][0] / gmb_xyY[sq][1]; + gmb_xyz[sq][1] = gmb_xyY[sq][2]; + gmb_xyz[sq][2] = gmb_xyY[sq][2] * + (1 - gmb_xyY[sq][0] - gmb_xyY[sq][1]) / gmb_xyY[sq][1]; + } + pseudoinverse (gmb_xyz, inverse, NSQ); + for (i=0; i < colors; i++) + for (j=0; j < 3; j++) + for (cam_xyz[i][j] = k=0; k < NSQ; k++) + cam_xyz[i][j] += gmb_cam[k][i] * inverse[k][j]; + cam_xyz_coeff (cam_xyz); + if (verbose) { + printf (" { \"%s %s\", %d,\n\t{", make, model, black); + num = 10000 / (cam_xyz[1][0] + cam_xyz[1][1] + cam_xyz[1][2]); + FORCC for (j=0; j < 3; j++) + printf ("%c%d", (c | j) ? ',':' ', (int) (cam_xyz[c][j] * num + 0.5)); + puts (" } },"); + } +#undef NSQ +} +#endif + +void CLASS hat_transform (float *temp, float *base, int st, int size, int sc) +{ + int i; + for (i=0; i < sc; i++) + temp[i] = 2*base[st*i] + base[st*(sc-i)] + base[st*(i+sc)]; + for (; i+sc < size; i++) + temp[i] = 2*base[st*i] + base[st*(i-sc)] + base[st*(i+sc)]; + for (; i < size; i++) + temp[i] = 2*base[st*i] + base[st*(i-sc)] + base[st*(2*size-2-(i+sc))]; +} + +void CLASS wavelet_denoise() +{ + float *fimg=0, *temp, thold, mul[2], avg, diff; + int scale=1, size, lev, hpass, lpass, row, col, nc, c, i, wlast; + ushort *window[4]; + static const float noise[] = + { 0.8002,0.2735,0.1202,0.0585,0.0291,0.0152,0.0080,0.0044 }; + + if (verbose) fprintf (stderr,_("Wavelet denoising...\n")); + + while (maximum << scale < 0x10000) scale++; + maximum <<= --scale; + black <<= scale; + if ((size = iheight*iwidth) < 0x15550000) + fimg = (float *) malloc ((size*3 + iheight + iwidth) * sizeof *fimg); + merror (fimg, "wavelet_denoise()"); + temp = fimg + size*3; + if ((nc = colors) == 3 && filters) nc++; + FORC(nc) { /* denoise R,G1,B,G3 individually */ + for (i=0; i < size; i++) + fimg[i] = sqrt((unsigned) (image[i][c] << (scale+16))); + for (hpass=lev=0; lev < 5; lev++) { + lpass = size*((lev & 1)+1); + for (row=0; row < iheight; row++) { + hat_transform (temp, fimg+hpass+row*iwidth, 1, iwidth, 1 << lev); + for (col=0; col < iwidth; col++) + fimg[lpass + row*iwidth + col] = temp[col] * 0.25; + } + for (col=0; col < iwidth; col++) { + hat_transform (temp, fimg+lpass+col, iwidth, iheight, 1 << lev); + for (row=0; row < iheight; row++) + fimg[lpass + row*iwidth + col] = temp[row] * 0.25; + } + thold = threshold * noise[lev]; + for (i=0; i < size; i++) { + fimg[hpass+i] -= fimg[lpass+i]; + if (fimg[hpass+i] < -thold) fimg[hpass+i] += thold; + else if (fimg[hpass+i] > thold) fimg[hpass+i] -= thold; + else fimg[hpass+i] = 0; + if (hpass) fimg[i] += fimg[hpass+i]; + } + hpass = lpass; + } + for (i=0; i < size; i++) + image[i][c] = CLIP(SQR(fimg[i]+fimg[lpass+i])/0x10000); + } + if (filters && colors == 3) { /* pull G1 and G3 closer together */ + for (row=0; row < 2; row++) + mul[row] = 0.125 * pre_mul[FC(row+1,0) | 1] / pre_mul[FC(row,0) | 1]; + for (i=0; i < 4; i++) + window[i] = (ushort *) fimg + width*i; + for (wlast=-1, row=1; row < height-1; row++) { + while (wlast < row+1) { + for (wlast++, i=0; i < 4; i++) + window[(i+3) & 3] = window[i]; + for (col = FC(wlast,1) & 1; col < width; col+=2) + window[2][col] = BAYER(wlast,col); + } + thold = threshold/512; + for (col = (FC(row,0) & 1)+1; col < width-1; col+=2) { + avg = ( window[0][col-1] + window[0][col+1] + + window[2][col-1] + window[2][col+1] - black*4 ) + * mul[row & 1] + (window[1][col] - black) * 0.5 + black; + avg = avg < 0 ? 0 : sqrt(avg); + diff = sqrt(BAYER(row,col)) - avg; + if (diff < -thold) diff += thold; + else if (diff > thold) diff -= thold; + else diff = 0; + BAYER(row,col) = CLIP(SQR(avg+diff) + 0.5); + } + } + } + free (fimg); +} + +void CLASS scale_colors() +{ + unsigned bottom, right, size, row, col, ur, uc, i, x, y, c, sum[8]; + int val, dark, sat; + double dsum[8], dmin, dmax; + float scale_mul[4], fr, fc; + ushort *img=0, *pix; + + if (user_mul[0]) + memcpy (pre_mul, user_mul, sizeof pre_mul); + if (use_auto_wb || (use_camera_wb && cam_mul[0] == -1)) { + memset (dsum, 0, sizeof dsum); + bottom = MIN (greybox[1]+greybox[3], height); + right = MIN (greybox[0]+greybox[2], width); + for (row=greybox[1]; row < bottom; row += 8) + for (col=greybox[0]; col < right; col += 8) { + memset (sum, 0, sizeof sum); + for (y=row; y < row+8 && y < bottom; y++) + for (x=col; x < col+8 && x < right; x++) + FORC4 { + if (filters) { + c = FC(y,x); + val = BAYER(y,x); + } else + val = image[y*width+x][c]; + if (val > maximum-25) goto skip_block; + if ((val -= black) < 0) val = 0; + sum[c] += val; + sum[c+4]++; + if (filters) break; + } + FORC(8) dsum[c] += sum[c]; +skip_block: ; + } + FORC4 if (dsum[c]) pre_mul[c] = dsum[c+4] / dsum[c]; + } + if (use_camera_wb && cam_mul[0] != -1) { + memset (sum, 0, sizeof sum); + for (row=0; row < 8; row++) + for (col=0; col < 8; col++) { + c = FC(row,col); + if ((val = white[row][col] - black) > 0) + sum[c] += val; + sum[c+4]++; + } + if (sum[0] && sum[1] && sum[2] && sum[3]) + FORC4 pre_mul[c] = (float) sum[c+4] / sum[c]; + else if (cam_mul[0] && cam_mul[2]) + memcpy (pre_mul, cam_mul, sizeof pre_mul); + else + fprintf (stderr,_("%s: Cannot use camera white balance.\n"), ifname); + } + if (pre_mul[3] == 0) pre_mul[3] = colors < 4 ? pre_mul[1] : 1; + dark = black; + sat = maximum; + if (threshold) wavelet_denoise(); + maximum -= black; + for (dmin=DBL_MAX, dmax=c=0; c < 4; c++) { + if (dmin > pre_mul[c]) + dmin = pre_mul[c]; + if (dmax < pre_mul[c]) + dmax = pre_mul[c]; + } + if (!highlight) dmax = dmin; + FORC4 scale_mul[c] = (pre_mul[c] /= dmax) * 65535.0 / maximum; + if (verbose) { + fprintf (stderr, + _("Scaling with darkness %d, saturation %d, and\nmultipliers"), dark, sat); + FORC4 fprintf (stderr, " %f", pre_mul[c]); + fputc ('\n', stderr); + } + size = iheight*iwidth; + for (i=0; i < size*4; i++) { + val = image[0][i]; + if (!val) continue; + val -= black; + val *= scale_mul[i & 3]; + image[0][i] = CLIP(val); + } + if ((aber[0] != 1 || aber[2] != 1) && colors == 3) { + if (verbose) + fprintf (stderr,_("Correcting chromatic aberration...\n")); + for (c=0; c < 4; c+=2) { + if (aber[c] == 1) continue; + img = (ushort *) malloc (size * sizeof *img); + merror (img, "scale_colors()"); + for (i=0; i < size; i++) + img[i] = image[i][c]; + for (row=0; row < iheight; row++) { + ur = fr = (row - iheight*0.5) * aber[c] + iheight*0.5; + if (ur > iheight-2) continue; + fr -= ur; + for (col=0; col < iwidth; col++) { + uc = fc = (col - iwidth*0.5) * aber[c] + iwidth*0.5; + if (uc > iwidth-2) continue; + fc -= uc; + pix = img + ur*iwidth + uc; + image[row*iwidth+col][c] = + (pix[ 0]*(1-fc) + pix[ 1]*fc) * (1-fr) + + (pix[iwidth]*(1-fc) + pix[iwidth+1]*fc) * fr; + } + } + free(img); + } + } +} + +void CLASS pre_interpolate() +{ + ushort (*img)[4]; + int row, col, c; + + if (shrink) { + if (half_size) { + height = iheight; + width = iwidth; + } else { + img = (ushort (*)[4]) calloc (height*width, sizeof *img); + merror (img, "unshrink()"); + for (row=0; row < height; row++) + for (col=0; col < width; col++) { + c = fc(row,col); + img[row*width+col][c] = image[(row >> 1)*iwidth+(col >> 1)][c]; + } + free (image); + image = img; + shrink = 0; + } + } + if (filters && colors == 3) { + if ((mix_green = four_color_rgb)) colors++; + else { + for (row = FC(1,0) >> 1; row < height; row+=2) + for (col = FC(row,1) & 1; col < width; col+=2) + image[row*width+col][1] = image[row*width+col][3]; + filters &= ~((filters & 0x55555555) << 1); + } + } + if (half_size) filters = 0; +} + +void CLASS border_interpolate (int border) +{ + unsigned row, col, y, x, f, c, sum[8]; + + for (row=0; row < height; row++) + for (col=0; col < width; col++) { + if (col==border && row >= border && row < height-border) + col = width-border; + memset (sum, 0, sizeof sum); + for (y=row-1; y != row+2; y++) + for (x=col-1; x != col+2; x++) + if (y < height && x < width) { + f = fc(y,x); + sum[f] += image[y*width+x][f]; + sum[f+4]++; + } + f = fc(row,col); + FORCC if (c != f && sum[c+4]) + image[row*width+col][c] = sum[c] / sum[c+4]; + } +} + +void CLASS lin_interpolate() +{ + int code[16][16][32], *ip, sum[4]; + int c, i, x, y, row, col, shift, color; + ushort *pix; + + if (verbose) fprintf (stderr,_("Bilinear interpolation...\n")); + + border_interpolate(1); + for (row=0; row < 16; row++) + for (col=0; col < 16; col++) { + ip = code[row][col]; + memset (sum, 0, sizeof sum); + for (y=-1; y <= 1; y++) + for (x=-1; x <= 1; x++) { + shift = (y==0) + (x==0); + if (shift == 2) continue; + color = fc(row+y,col+x); + *ip++ = (width*y + x)*4 + color; + *ip++ = shift; + *ip++ = color; + sum[color] += 1 << shift; + } + FORCC + if (c != fc(row,col)) { + *ip++ = c; + *ip++ = 256 / sum[c]; + } + } + for (row=1; row < height-1; row++) + for (col=1; col < width-1; col++) { + pix = image[row*width+col]; + ip = code[row & 15][col & 15]; + memset (sum, 0, sizeof sum); + for (i=8; i--; ip+=3) + sum[ip[2]] += pix[ip[0]] << ip[1]; + for (i=colors; --i; ip+=2) + pix[ip[0]] = sum[ip[0]] * ip[1] >> 8; + } +} + +/* + This algorithm is officially called: + + "Interpolation using a Threshold-based variable number of gradients" + + described in http://scien.stanford.edu/class/psych221/projects/99/tingchen/algodep/vargra.html + + I've extended the basic idea to work with non-Bayer filter arrays. + Gradients are numbered clockwise from NW=0 to W=7. + */ +void CLASS vng_interpolate() +{ + static const signed char *cp, terms[] = { + -2,-2,+0,-1,0,0x01, -2,-2,+0,+0,1,0x01, -2,-1,-1,+0,0,0x01, + -2,-1,+0,-1,0,0x02, -2,-1,+0,+0,0,0x03, -2,-1,+0,+1,1,0x01, + -2,+0,+0,-1,0,0x06, -2,+0,+0,+0,1,0x02, -2,+0,+0,+1,0,0x03, + -2,+1,-1,+0,0,0x04, -2,+1,+0,-1,1,0x04, -2,+1,+0,+0,0,0x06, + -2,+1,+0,+1,0,0x02, -2,+2,+0,+0,1,0x04, -2,+2,+0,+1,0,0x04, + -1,-2,-1,+0,0,0x80, -1,-2,+0,-1,0,0x01, -1,-2,+1,-1,0,0x01, + -1,-2,+1,+0,1,0x01, -1,-1,-1,+1,0,0x88, -1,-1,+1,-2,0,0x40, + -1,-1,+1,-1,0,0x22, -1,-1,+1,+0,0,0x33, -1,-1,+1,+1,1,0x11, + -1,+0,-1,+2,0,0x08, -1,+0,+0,-1,0,0x44, -1,+0,+0,+1,0,0x11, + -1,+0,+1,-2,1,0x40, -1,+0,+1,-1,0,0x66, -1,+0,+1,+0,1,0x22, + -1,+0,+1,+1,0,0x33, -1,+0,+1,+2,1,0x10, -1,+1,+1,-1,1,0x44, + -1,+1,+1,+0,0,0x66, -1,+1,+1,+1,0,0x22, -1,+1,+1,+2,0,0x10, + -1,+2,+0,+1,0,0x04, -1,+2,+1,+0,1,0x04, -1,+2,+1,+1,0,0x04, + +0,-2,+0,+0,1,0x80, +0,-1,+0,+1,1,0x88, +0,-1,+1,-2,0,0x40, + +0,-1,+1,+0,0,0x11, +0,-1,+2,-2,0,0x40, +0,-1,+2,-1,0,0x20, + +0,-1,+2,+0,0,0x30, +0,-1,+2,+1,1,0x10, +0,+0,+0,+2,1,0x08, + +0,+0,+2,-2,1,0x40, +0,+0,+2,-1,0,0x60, +0,+0,+2,+0,1,0x20, + +0,+0,+2,+1,0,0x30, +0,+0,+2,+2,1,0x10, +0,+1,+1,+0,0,0x44, + +0,+1,+1,+2,0,0x10, +0,+1,+2,-1,1,0x40, +0,+1,+2,+0,0,0x60, + +0,+1,+2,+1,0,0x20, +0,+1,+2,+2,0,0x10, +1,-2,+1,+0,0,0x80, + +1,-1,+1,+1,0,0x88, +1,+0,+1,+2,0,0x08, +1,+0,+2,-1,0,0x40, + +1,+0,+2,+1,0,0x10 + }, chood[] = { -1,-1, -1,0, -1,+1, 0,+1, +1,+1, +1,0, +1,-1, 0,-1 }; + ushort (*brow[5])[4], *pix; + int prow=7, pcol=1, *ip, *code[16][16], gval[8], gmin, gmax, sum[4]; + int row, col, x, y, x1, x2, y1, y2, t, weight, grads, color, diag; + int g, diff, thold, num, c; + + lin_interpolate(); + if (verbose) fprintf (stderr,_("VNG interpolation...\n")); + + if (filters == 1) prow = pcol = 15; + ip = (int *) calloc ((prow+1)*(pcol+1), 1280); + merror (ip, "vng_interpolate()"); + for (row=0; row <= prow; row++) /* Precalculate for VNG */ + for (col=0; col <= pcol; col++) { + code[row][col] = ip; + for (cp=terms, t=0; t < 64; t++) { + y1 = *cp++; x1 = *cp++; + y2 = *cp++; x2 = *cp++; + weight = *cp++; + grads = *cp++; + color = fc(row+y1,col+x1); + if (fc(row+y2,col+x2) != color) continue; + diag = (fc(row,col+1) == color && fc(row+1,col) == color) ? 2:1; + if (abs(y1-y2) == diag && abs(x1-x2) == diag) continue; + *ip++ = (y1*width + x1)*4 + color; + *ip++ = (y2*width + x2)*4 + color; + *ip++ = weight; + for (g=0; g < 8; g++) + if (grads & 1< gval[g]) gmin = gval[g]; + if (gmax < gval[g]) gmax = gval[g]; + } + if (gmax == 0) { + memcpy (brow[2][col], pix, sizeof *image); + continue; + } + thold = gmin + (gmax >> 1); + memset (sum, 0, sizeof sum); + color = fc(row,col); + for (num=g=0; g < 8; g++,ip+=2) { /* Average the neighbors */ + if (gval[g] <= thold) { + FORCC + if (c == color && ip[1]) + sum[c] += (pix[c] + pix[ip[1]]) >> 1; + else + sum[c] += pix[ip[0] + c]; + num++; + } + } + FORCC { /* Save to buffer */ + t = pix[color]; + if (c != color) + t += (sum[c] - sum[color]) / num; + brow[2][col][c] = CLIP(t); + } + } + if (row > 3) /* Write buffer to image */ + memcpy (image[(row-2)*width+2], brow[0]+2, (width-4)*sizeof *image); + for (g=0; g < 4; g++) + brow[(g-1) & 3] = brow[g]; + } + memcpy (image[(row-2)*width+2], brow[0]+2, (width-4)*sizeof *image); + memcpy (image[(row-1)*width+2], brow[1]+2, (width-4)*sizeof *image); + free (brow[4]); + free (code[0][0]); +} + +/* + Patterned Pixel Grouping Interpolation by Alain Desbiolles +*/ +void CLASS ppg_interpolate() +{ + int gr[4], dir[5] = { 1, width, -1, -width, 1 }; + int row, col, avg, diff[2], guess[2], c, d, i; + static const short sort[] = { 0,2,1,3,0,1,2,3 }; + ushort (*pix)[4]; + + border_interpolate(3); + if (verbose) fprintf (stderr,_("PPG interpolation...\n")); + +/* Fill in the green layer with gradients and pattern recognition: */ + for (row=3; row < height-3; row++) + for (col=3+(FC(row,3) & 1), c=FC(row,col); col < width-3; col+=2) { + pix = image + row*width+col; + for (avg=i=0; i < 4; i++) + avg += gr[i] = pix[dir[i]][1] << 2; + avg >>= 2; + for (i=0; i < 8; i+=2) + if (gr[sort[i]] > gr[sort[i+1]]) + SWAP(gr[sort[i]],gr[sort[i+1]]) + for (d=0; d < 4; d++) { + for (i=-2; i < 2; i++) + if (pix[i*dir[d] + (i+1)*dir[d+1]][1] <= avg) break; + if (i == 2) { + pix[0][1] = (gr[1]+gr[2]) >> 3; + goto next_pixel; + } + } + for (i=0; (d=dir[i]) > 0; i++) { + guess[i] = (pix[-d][1] + pix[0][c] + pix[d][1]) * 2 + - pix[-2*d][c] - pix[2*d][c]; + diff[i] = ( ABS(pix[-2*d][c] - pix[ 0][c]) + + ABS(pix[ 2*d][c] - pix[ 0][c]) + + ABS(pix[ -d][1] - pix[ d][1]) ) * 3 + + ( ABS(pix[ 3*d][1] - pix[ d][1]) + + ABS(pix[-3*d][1] - pix[-d][1]) ) * 2; + } + d = dir[i = diff[0] > diff[1]]; + pix[0][1] = ULIM(guess[i] >> 2, pix[d][1], pix[-d][1]); +next_pixel: ; + } +/* Calculate red and blue for each green pixel: */ + for (row=1; row < height-1; row++) + for (col=1+(FC(row,2) & 1), c=FC(row,col+1); col < width-1; col+=2) { + pix = image + row*width+col; + for (i=0; (d=dir[i]) > 0; c=2-c, i++) + pix[0][c] = CLIP((pix[-d][c] + pix[d][c] + 2*pix[0][1] + - pix[-d][1] - pix[d][1]) >> 1); + } +/* Calculate blue for red pixels and vice versa: */ + for (row=1; row < height-1; row++) + for (col=1+(FC(row,1) & 1), c=2-FC(row,col); col < width-1; col+=2) { + pix = image + row*width+col; + for (i=0; (d=dir[i]+dir[i+1]) > 0; i++) { + diff[i] = ABS(pix[-d][c] - pix[d][c]) + + ABS(pix[-d][1] - pix[0][1]) + + ABS(pix[ d][1] - pix[0][1]); + guess[i] = pix[-d][c] + pix[d][c] + 2*pix[0][1] + - pix[-d][1] - pix[d][1]; + } + if (diff[0] != diff[1]) + pix[0][c] = CLIP(guess[diff[0] > diff[1]] >> 1); + else + pix[0][c] = CLIP((guess[0]+guess[1]) >> 2); + } +} + +/* + Adaptive Homogeneity-Directed interpolation is based on + the work of Keigo Hirakawa, Thomas Parks, and Paul Lee. + */ +#define TS 256 /* Tile Size */ + +void CLASS ahd_interpolate() +{ + int i, j, k, top, left, row, col, tr, tc, c, d, val, hm[2]; + ushort (*pix)[4], (*rix)[3]; + static const int dir[4] = { -1, 1, -TS, TS }; + unsigned ldiff[2][4], abdiff[2][4], leps, abeps; + float r, cbrt[0x10000], xyz[3], xyz_cam[3][4]; + ushort (*rgb)[TS][TS][3]; + short (*lab)[TS][TS][3], (*lix)[3]; + char (*homo)[TS][TS], *buffer; + + if (verbose) fprintf (stderr,_("AHD interpolation...\n")); + + for (i=0; i < 0x10000; i++) { + r = i / 65535.0; + cbrt[i] = r > 0.008856 ? pow(r,1/3.0) : 7.787*r + 16/116.0; + } + for (i=0; i < 3; i++) + for (j=0; j < colors; j++) + for (xyz_cam[i][j] = k=0; k < 3; k++) + xyz_cam[i][j] += xyz_rgb[i][k] * rgb_cam[k][j] / d65_white[i]; + + border_interpolate(5); + buffer = (char *) malloc (26*TS*TS); /* 1664 kB */ + merror (buffer, "ahd_interpolate()"); + rgb = (ushort(*)[TS][TS][3]) buffer; + lab = (short (*)[TS][TS][3])(buffer + 12*TS*TS); + homo = (char (*)[TS][TS]) (buffer + 24*TS*TS); + + for (top=2; top < height-5; top += TS-6) + for (left=2; left < width-5; left += TS-6) { + +/* Interpolate green horizontally and vertically: */ + for (row = top; row < top+TS && row < height-2; row++) { + col = left + (FC(row,left) & 1); + for (c = FC(row,col); col < left+TS && col < width-2; col+=2) { + pix = image + row*width+col; + val = ((pix[-1][1] + pix[0][c] + pix[1][1]) * 2 + - pix[-2][c] - pix[2][c]) >> 2; + rgb[0][row-top][col-left][1] = ULIM(val,pix[-1][1],pix[1][1]); + val = ((pix[-width][1] + pix[0][c] + pix[width][1]) * 2 + - pix[-2*width][c] - pix[2*width][c]) >> 2; + rgb[1][row-top][col-left][1] = ULIM(val,pix[-width][1],pix[width][1]); + } + } +/* Interpolate red and blue, and convert to CIELab: */ + for (d=0; d < 2; d++) + for (row=top+1; row < top+TS-1 && row < height-3; row++) + for (col=left+1; col < left+TS-1 && col < width-3; col++) { + pix = image + row*width+col; + rix = &rgb[d][row-top][col-left]; + lix = &lab[d][row-top][col-left]; + if ((c = 2 - FC(row,col)) == 1) { + c = FC(row+1,col); + val = pix[0][1] + (( pix[-1][2-c] + pix[1][2-c] + - rix[-1][1] - rix[1][1] ) >> 1); + rix[0][2-c] = CLIP(val); + val = pix[0][1] + (( pix[-width][c] + pix[width][c] + - rix[-TS][1] - rix[TS][1] ) >> 1); + } else + val = rix[0][1] + (( pix[-width-1][c] + pix[-width+1][c] + + pix[+width-1][c] + pix[+width+1][c] + - rix[-TS-1][1] - rix[-TS+1][1] + - rix[+TS-1][1] - rix[+TS+1][1] + 1) >> 2); + rix[0][c] = CLIP(val); + c = FC(row,col); + rix[0][c] = pix[0][c]; + xyz[0] = xyz[1] = xyz[2] = 0.5; + FORCC { + xyz[0] += xyz_cam[0][c] * rix[0][c]; + xyz[1] += xyz_cam[1][c] * rix[0][c]; + xyz[2] += xyz_cam[2][c] * rix[0][c]; + } + xyz[0] = cbrt[CLIP((int) xyz[0])]; + xyz[1] = cbrt[CLIP((int) xyz[1])]; + xyz[2] = cbrt[CLIP((int) xyz[2])]; + lix[0][0] = 64 * (116 * xyz[1] - 16); + lix[0][1] = 64 * 500 * (xyz[0] - xyz[1]); + lix[0][2] = 64 * 200 * (xyz[1] - xyz[2]); + } +/* Build homogeneity maps from the CIELab images: */ + memset (homo, 0, 2*TS*TS); + for (row=top+2; row < top+TS-2 && row < height-4; row++) { + tr = row-top; + for (col=left+2; col < left+TS-2 && col < width-4; col++) { + tc = col-left; + for (d=0; d < 2; d++) { + lix = &lab[d][tr][tc]; + for (i=0; i < 4; i++) { + ldiff[d][i] = ABS(lix[0][0]-lix[dir[i]][0]); + abdiff[d][i] = SQR(lix[0][1]-lix[dir[i]][1]) + + SQR(lix[0][2]-lix[dir[i]][2]); + } + } + leps = MIN(MAX(ldiff[0][0],ldiff[0][1]), + MAX(ldiff[1][2],ldiff[1][3])); + abeps = MIN(MAX(abdiff[0][0],abdiff[0][1]), + MAX(abdiff[1][2],abdiff[1][3])); + for (d=0; d < 2; d++) + for (i=0; i < 4; i++) + if (ldiff[d][i] <= leps && abdiff[d][i] <= abeps) + homo[d][tr][tc]++; + } + } +/* Combine the most homogenous pixels for the final result: */ + for (row=top+3; row < top+TS-3 && row < height-5; row++) { + tr = row-top; + for (col=left+3; col < left+TS-3 && col < width-5; col++) { + tc = col-left; + for (d=0; d < 2; d++) + for (hm[d]=0, i=tr-1; i <= tr+1; i++) + for (j=tc-1; j <= tc+1; j++) + hm[d] += homo[d][i][j]; + if (hm[0] != hm[1]) + FORC3 image[row*width+col][c] = rgb[hm[1] > hm[0]][tr][tc][c]; + else + FORC3 image[row*width+col][c] = + (rgb[0][tr][tc][c] + rgb[1][tr][tc][c]) >> 1; + } + } + } + free (buffer); +} +#undef TS + +void CLASS median_filter () +{ + ushort (*pix)[4]; + int pass, c, i, j, k, med[9]; + static const uchar opt[] = /* Optimal 9-element median search */ + { 1,2, 4,5, 7,8, 0,1, 3,4, 6,7, 1,2, 4,5, 7,8, + 0,3, 5,8, 4,7, 3,6, 1,4, 2,5, 4,7, 4,2, 6,4, 4,2 }; + + for (pass=1; pass <= med_passes; pass++) { + if (verbose) + fprintf (stderr,_("Median filter pass %d...\n"), pass); + for (c=0; c < 3; c+=2) { + for (pix = image; pix < image+width*height; pix++) + pix[0][3] = pix[0][c]; + for (pix = image+width; pix < image+width*(height-1); pix++) { + if ((pix-image+1) % width < 2) continue; + for (k=0, i = -width; i <= width; i += width) + for (j = i-1; j <= i+1; j++) + med[k++] = pix[j][3] - pix[j][1]; + for (i=0; i < sizeof opt; i+=2) + if (med[opt[i]] > med[opt[i+1]]) + SWAP (med[opt[i]] , med[opt[i+1]]); + pix[0][c] = CLIP(med[4] + pix[0][1]); + } + } + } +} + +void CLASS blend_highlights() +{ + int clip=INT_MAX, row, col, c, i, j; + static const float trans[2][4][4] = + { { { 1,1,1 }, { 1.7320508,-1.7320508,0 }, { -1,-1,2 } }, + { { 1,1,1,1 }, { 1,-1,1,-1 }, { 1,1,-1,-1 }, { 1,-1,-1,1 } } }; + static const float itrans[2][4][4] = + { { { 1,0.8660254,-0.5 }, { 1,-0.8660254,-0.5 }, { 1,0,1 } }, + { { 1,1,1,1 }, { 1,-1,1,-1 }, { 1,1,-1,-1 }, { 1,-1,-1,1 } } }; + float cam[2][4], lab[2][4], sum[2], chratio; + + if ((unsigned) (colors-3) > 1) return; + if (verbose) fprintf (stderr,_("Blending highlights...\n")); + FORCC if (clip > (i = 65535*pre_mul[c])) clip = i; + for (row=0; row < height; row++) + for (col=0; col < width; col++) { + FORCC if (image[row*width+col][c] > clip) break; + if (c == colors) continue; + FORCC { + cam[0][c] = image[row*width+col][c]; + cam[1][c] = MIN(cam[0][c],clip); + } + for (i=0; i < 2; i++) { + FORCC for (lab[i][c]=j=0; j < colors; j++) + lab[i][c] += trans[colors-3][c][j] * cam[i][j]; + for (sum[i]=0,c=1; c < colors; c++) + sum[i] += SQR(lab[i][c]); + } + chratio = sqrt(sum[1]/sum[0]); + for (c=1; c < colors; c++) + lab[0][c] *= chratio; + FORCC for (cam[0][c]=j=0; j < colors; j++) + cam[0][c] += itrans[colors-3][c][j] * lab[0][j]; + FORCC image[row*width+col][c] = cam[0][c] / colors; + } +} + +#define SCALE (4 >> shrink) +void CLASS recover_highlights() +{ + float *map, sum, wgt, grow; + int hsat[4], count, spread, change, val, i; + unsigned high, wide, mrow, mcol, row, col, kc, c, d, y, x; + ushort *pixel; + static const signed char dir[8][2] = + { {-1,-1}, {-1,0}, {-1,1}, {0,1}, {1,1}, {1,0}, {1,-1}, {0,-1} }; + + if (verbose) fprintf (stderr,_("Rebuilding highlights...\n")); + + grow = pow (2, 4-highlight); + FORCC hsat[c] = 32000 * pre_mul[c]; + for (kc=0, c=1; c < colors; c++) + if (pre_mul[kc] < pre_mul[c]) kc = c; + high = height / SCALE; + wide = width / SCALE; + map = (float *) calloc (high*wide, sizeof *map); + merror (map, "recover_highlights()"); + FORCC if (c != kc) { + memset (map, 0, high*wide*sizeof *map); + for (mrow=0; mrow < high; mrow++) + for (mcol=0; mcol < wide; mcol++) { + sum = wgt = count = 0; + for (row = mrow*SCALE; row < (mrow+1)*SCALE; row++) + for (col = mcol*SCALE; col < (mcol+1)*SCALE; col++) { + pixel = image[row*width+col]; + if (pixel[c] / hsat[c] == 1 && pixel[kc] > 24000) { + sum += pixel[c]; + wgt += pixel[kc]; + count++; + } + } + if (count == SCALE*SCALE) + map[mrow*wide+mcol] = sum / wgt; + } + for (spread = 32/grow; spread--; ) { + for (mrow=0; mrow < high; mrow++) + for (mcol=0; mcol < wide; mcol++) { + if (map[mrow*wide+mcol]) continue; + sum = count = 0; + for (d=0; d < 8; d++) { + y = mrow + dir[d][0]; + x = mcol + dir[d][1]; + if (y < high && x < wide && map[y*wide+x] > 0) { + sum += (1 + (d & 1)) * map[y*wide+x]; + count += 1 + (d & 1); + } + } + if (count > 3) + map[mrow*wide+mcol] = - (sum+grow) / (count+grow); + } + for (change=i=0; i < high*wide; i++) + if (map[i] < 0) { + map[i] = -map[i]; + change = 1; + } + if (!change) break; + } + for (i=0; i < high*wide; i++) + if (map[i] == 0) map[i] = 1; + for (mrow=0; mrow < high; mrow++) + for (mcol=0; mcol < wide; mcol++) { + for (row = mrow*SCALE; row < (mrow+1)*SCALE; row++) + for (col = mcol*SCALE; col < (mcol+1)*SCALE; col++) { + pixel = image[row*width+col]; + if (pixel[c] / hsat[c] > 1) { + val = pixel[kc] * map[mrow*wide+mcol]; + if (pixel[c] < val) pixel[c] = CLIP(val); + } + } + } + } + free (map); +} +#undef SCALE + +void CLASS tiff_get (unsigned base, + unsigned *tag, unsigned *type, unsigned *len, unsigned *save) +{ + *tag = get2(); + *type = get2(); + *len = get4(); + *save = ftell(ifp) + 4; + if (*len * ("11124811248488"[*type < 14 ? *type:0]-'0') > 4) + fseek (ifp, get4()+base, SEEK_SET); +} + +void CLASS parse_thumb_note (int base, unsigned toff, unsigned tlen) +{ + unsigned entries, tag, type, len, save; + + entries = get2(); + while (entries--) { + tiff_get (base, &tag, &type, &len, &save); + if (tag == toff) thumb_offset = get4()+base; + if (tag == tlen) thumb_length = get4(); + fseek (ifp, save, SEEK_SET); + } +} + +int CLASS parse_tiff_ifd (int base); + +void CLASS parse_makernote (int base, int uptag) +{ + static const uchar xlat[2][256] = { + { 0xc1,0xbf,0x6d,0x0d,0x59,0xc5,0x13,0x9d,0x83,0x61,0x6b,0x4f,0xc7,0x7f,0x3d,0x3d, + 0x53,0x59,0xe3,0xc7,0xe9,0x2f,0x95,0xa7,0x95,0x1f,0xdf,0x7f,0x2b,0x29,0xc7,0x0d, + 0xdf,0x07,0xef,0x71,0x89,0x3d,0x13,0x3d,0x3b,0x13,0xfb,0x0d,0x89,0xc1,0x65,0x1f, + 0xb3,0x0d,0x6b,0x29,0xe3,0xfb,0xef,0xa3,0x6b,0x47,0x7f,0x95,0x35,0xa7,0x47,0x4f, + 0xc7,0xf1,0x59,0x95,0x35,0x11,0x29,0x61,0xf1,0x3d,0xb3,0x2b,0x0d,0x43,0x89,0xc1, + 0x9d,0x9d,0x89,0x65,0xf1,0xe9,0xdf,0xbf,0x3d,0x7f,0x53,0x97,0xe5,0xe9,0x95,0x17, + 0x1d,0x3d,0x8b,0xfb,0xc7,0xe3,0x67,0xa7,0x07,0xf1,0x71,0xa7,0x53,0xb5,0x29,0x89, + 0xe5,0x2b,0xa7,0x17,0x29,0xe9,0x4f,0xc5,0x65,0x6d,0x6b,0xef,0x0d,0x89,0x49,0x2f, + 0xb3,0x43,0x53,0x65,0x1d,0x49,0xa3,0x13,0x89,0x59,0xef,0x6b,0xef,0x65,0x1d,0x0b, + 0x59,0x13,0xe3,0x4f,0x9d,0xb3,0x29,0x43,0x2b,0x07,0x1d,0x95,0x59,0x59,0x47,0xfb, + 0xe5,0xe9,0x61,0x47,0x2f,0x35,0x7f,0x17,0x7f,0xef,0x7f,0x95,0x95,0x71,0xd3,0xa3, + 0x0b,0x71,0xa3,0xad,0x0b,0x3b,0xb5,0xfb,0xa3,0xbf,0x4f,0x83,0x1d,0xad,0xe9,0x2f, + 0x71,0x65,0xa3,0xe5,0x07,0x35,0x3d,0x0d,0xb5,0xe9,0xe5,0x47,0x3b,0x9d,0xef,0x35, + 0xa3,0xbf,0xb3,0xdf,0x53,0xd3,0x97,0x53,0x49,0x71,0x07,0x35,0x61,0x71,0x2f,0x43, + 0x2f,0x11,0xdf,0x17,0x97,0xfb,0x95,0x3b,0x7f,0x6b,0xd3,0x25,0xbf,0xad,0xc7,0xc5, + 0xc5,0xb5,0x8b,0xef,0x2f,0xd3,0x07,0x6b,0x25,0x49,0x95,0x25,0x49,0x6d,0x71,0xc7 }, + { 0xa7,0xbc,0xc9,0xad,0x91,0xdf,0x85,0xe5,0xd4,0x78,0xd5,0x17,0x46,0x7c,0x29,0x4c, + 0x4d,0x03,0xe9,0x25,0x68,0x11,0x86,0xb3,0xbd,0xf7,0x6f,0x61,0x22,0xa2,0x26,0x34, + 0x2a,0xbe,0x1e,0x46,0x14,0x68,0x9d,0x44,0x18,0xc2,0x40,0xf4,0x7e,0x5f,0x1b,0xad, + 0x0b,0x94,0xb6,0x67,0xb4,0x0b,0xe1,0xea,0x95,0x9c,0x66,0xdc,0xe7,0x5d,0x6c,0x05, + 0xda,0xd5,0xdf,0x7a,0xef,0xf6,0xdb,0x1f,0x82,0x4c,0xc0,0x68,0x47,0xa1,0xbd,0xee, + 0x39,0x50,0x56,0x4a,0xdd,0xdf,0xa5,0xf8,0xc6,0xda,0xca,0x90,0xca,0x01,0x42,0x9d, + 0x8b,0x0c,0x73,0x43,0x75,0x05,0x94,0xde,0x24,0xb3,0x80,0x34,0xe5,0x2c,0xdc,0x9b, + 0x3f,0xca,0x33,0x45,0xd0,0xdb,0x5f,0xf5,0x52,0xc3,0x21,0xda,0xe2,0x22,0x72,0x6b, + 0x3e,0xd0,0x5b,0xa8,0x87,0x8c,0x06,0x5d,0x0f,0xdd,0x09,0x19,0x93,0xd0,0xb9,0xfc, + 0x8b,0x0f,0x84,0x60,0x33,0x1c,0x9b,0x45,0xf1,0xf0,0xa3,0x94,0x3a,0x12,0x77,0x33, + 0x4d,0x44,0x78,0x28,0x3c,0x9e,0xfd,0x65,0x57,0x16,0x94,0x6b,0xfb,0x59,0xd0,0xc8, + 0x22,0x36,0xdb,0xd2,0x63,0x98,0x43,0xa1,0x04,0x87,0x86,0xf7,0xa6,0x26,0xbb,0xd6, + 0x59,0x4d,0xbf,0x6a,0x2e,0xaa,0x2b,0xef,0xe6,0x78,0xb6,0x4e,0xe0,0x2f,0xdc,0x7c, + 0xbe,0x57,0x19,0x32,0x7e,0x2a,0xd0,0xb8,0xba,0x29,0x00,0x3c,0x52,0x7d,0xa8,0x49, + 0x3b,0x2d,0xeb,0x25,0x49,0xfa,0xa3,0xaa,0x39,0xa7,0xc5,0xa7,0x50,0x11,0x36,0xfb, + 0xc6,0x67,0x4a,0xf5,0xa5,0x12,0x65,0x7e,0xb0,0xdf,0xaf,0x4e,0xb3,0x61,0x7f,0x2f } }; + unsigned offset=0, entries, tag, type, len, save, c; + unsigned ver97=0, serial=0, i, wbi=0, wb[4]={0,0,0,0}; + uchar buf97[324], ci, cj, ck; + short sorder=order; + char buf[10]; +/* + The MakerNote might have its own TIFF header (possibly with + its own byte-order!), or it might just be a table. + */ + fread (buf, 1, 10, ifp); + if (!strncmp (buf,"KDK" ,3) || /* these aren't TIFF tables */ + !strncmp (buf,"VER" ,3) || + !strncmp (buf,"IIII",4) || + !strncmp (buf,"MMMM",4)) return; + if (!strncmp (buf,"KC" ,2) || /* Konica KD-400Z, KD-510Z */ + !strncmp (buf,"MLY" ,3)) { /* Minolta DiMAGE G series */ + order = 0x4d4d; + while ((i=ftell(ifp)) < data_offset && i < 16384) { + wb[0] = wb[2]; wb[2] = wb[1]; wb[1] = wb[3]; + wb[3] = get2(); + if (wb[1] == 256 && wb[3] == 256 && + wb[0] > 256 && wb[0] < 640 && wb[2] > 256 && wb[2] < 640) + FORC4 cam_mul[c] = wb[c]; + } + goto quit; + } + if (!strcmp (buf,"Nikon")) { + base = ftell(ifp); + order = get2(); + if (get2() != 42) goto quit; + offset = get4(); + fseek (ifp, offset-8, SEEK_CUR); + } else if (!strcmp (buf,"OLYMPUS")) { + base = ftell(ifp)-10; + fseek (ifp, -2, SEEK_CUR); + order = get2(); get2(); + } else if (!strncmp (buf,"FUJIFILM",8) || + !strncmp (buf,"SONY",4) || + !strcmp (buf,"Panasonic")) { + order = 0x4949; + fseek (ifp, 2, SEEK_CUR); + } else if (!strcmp (buf,"OLYMP") || + !strcmp (buf,"LEICA") || + !strcmp (buf,"Ricoh") || + !strcmp (buf,"EPSON")) + fseek (ifp, -2, SEEK_CUR); + else if (!strcmp (buf,"AOC") || + !strcmp (buf,"QVC")) + fseek (ifp, -4, SEEK_CUR); + else fseek (ifp, -10, SEEK_CUR); + + entries = get2(); + if (entries > 1000) return; + while (entries--) { + tiff_get (base, &tag, &type, &len, &save); + tag |= uptag << 16; + if (tag == 2 && strstr(make,"NIKON")) + iso_speed = (get2(),get2()); + if (tag == 4 && len > 26 && len < 35) { + iso_speed = 50 * pow (2, (get4(),get2())/32.0 - 4); + if ((i=(get2(),get2())) != 0x7fff) + aperture = pow (2, i/64.0); + if ((i=get2()) != 0xffff) + shutter = pow (2, (short) i/-32.0); + wbi = (get2(),get2()); + shot_order = (get2(),get2()); + } + if (tag == 8 && type == 4) + shot_order = get4(); + if (tag == 9 && !strcmp(make,"Canon")) + fread (artist, 64, 1, ifp); + if (tag == 0xc && len == 4) { + cam_mul[0] = getreal(type); + cam_mul[2] = getreal(type); + } + if (tag == 0x10 && type == 4) + unique_id = get4(); + if (tag == 0x11 && is_raw && !strncmp(make,"NIKON",5)) { + fseek (ifp, get4()+base, SEEK_SET); + parse_tiff_ifd (base); + } + if (tag == 0x14 && len == 2560 && type == 7) { + fseek (ifp, 1248, SEEK_CUR); + goto get2_256; + } + if (tag == 0x15 && type == 2 && is_raw) + fread (model, 64, 1, ifp); + if (strstr(make,"PENTAX")) { + if (tag == 0x1b) tag = 0x1018; + if (tag == 0x1c) tag = 0x1017; + } + if (tag == 0x1d) + while ((c = fgetc(ifp)) && c != EOF) + serial = serial*10 + (isdigit(c) ? c - '0' : c % 10); + if (tag == 0x81 && type == 4) { + data_offset = get4(); + fseek (ifp, data_offset + 41, SEEK_SET); + raw_height = get2() * 2; + raw_width = get2(); + filters = 0x61616161; + } + if (tag == 0x29 && type == 1) { + c = wbi < 18 ? "012347800000005896"[wbi]-'0' : 0; + fseek (ifp, 8 + c*32, SEEK_CUR); + FORC4 cam_mul[c ^ (c >> 1) ^ 1] = get4(); + } + if ((tag == 0x81 && type == 7) || + (tag == 0x100 && type == 7) || + (tag == 0x280 && type == 1)) { + thumb_offset = ftell(ifp); + thumb_length = len; + } + if (tag == 0x88 && type == 4 && (thumb_offset = get4())) + thumb_offset += base; + if (tag == 0x89 && type == 4) + thumb_length = get4(); + if (tag == 0x8c || tag == 0x96) + meta_offset = ftell(ifp); + if (tag == 0x97) { + for (i=0; i < 4; i++) + ver97 = (ver97 << 4) + fgetc(ifp)-'0'; + switch (ver97) { + case 0x100: + fseek (ifp, 68, SEEK_CUR); + FORC4 cam_mul[(c >> 1) | ((c & 1) << 1)] = get2(); + break; + case 0x102: + fseek (ifp, 6, SEEK_CUR); + goto get2_rggb; + case 0x103: + fseek (ifp, 16, SEEK_CUR); + FORC4 cam_mul[c] = get2(); + } + if (ver97 >> 8 == 2) { + if (ver97 != 0x205) fseek (ifp, 280, SEEK_CUR); + fread (buf97, 324, 1, ifp); + } + } + if (tag == 0xa4 && type == 3) { + fseek (ifp, wbi*48, SEEK_CUR); + FORC3 cam_mul[c] = get2(); + } + if (tag == 0xa7 && ver97 >> 8 == 2) { + ci = xlat[0][serial & 0xff]; + cj = xlat[1][fgetc(ifp)^fgetc(ifp)^fgetc(ifp)^fgetc(ifp)]; + ck = 0x60; + for (i=0; i < 324; i++) + buf97[i] ^= (cj += ci * ck++); + FORC4 cam_mul[c ^ (c >> 1)] = + sget2 (buf97 + (ver97 == 0x205 ? 14:6) + c*2); + if (ver97 == 0x209) + FORC4 cam_mul[c ^ (c >> 1) ^ 1] = + sget2 (buf97 + 10 + c*2); + } + if (tag == 0x200 && len == 3) + shot_order = (get4(),get4()); + if (tag == 0x200 && len == 4) + black = (get2()+get2()+get2()+get2())/4; + if (tag == 0x201 && len == 4) + goto get2_rggb; + if (tag == 0x401 && len == 4) { + black = (get4()+get4()+get4()+get4())/4; + } + if (tag == 0xe01) { /* Nikon Capture Note */ + type = order; + order = 0x4949; + fseek (ifp, 22, SEEK_CUR); + for (offset=22; offset+22 < len; offset += 22+i) { + tag = get4(); + fseek (ifp, 14, SEEK_CUR); + i = get4()-4; + if (tag == 0x76a43207) flip = get2(); + else fseek (ifp, i, SEEK_CUR); + } + order = type; + } + if (tag == 0xe80 && len == 256 && type == 7) { + fseek (ifp, 48, SEEK_CUR); + cam_mul[0] = get2() * 508 * 1.078 / 0x10000; + cam_mul[2] = get2() * 382 * 1.173 / 0x10000; + } + if (tag == 0xf00 && type == 7) { + if (len == 614) + fseek (ifp, 176, SEEK_CUR); + else if (len == 734 || len == 1502) + fseek (ifp, 148, SEEK_CUR); + else goto next; + goto get2_256; + } + if ((tag == 0x1011 && len == 9) || tag == 0x20400200) + for (i=0; i < 3; i++) + FORC3 cmatrix[i][c] = ((short) get2()) / 256.0; + if ((tag == 0x1012 || tag == 0x20400600) && len == 4) + for (black = i=0; i < 4; i++) + black += get2() << 2; + if (tag == 0x1017 || tag == 0x20400100) + cam_mul[0] = get2() / 256.0; + if (tag == 0x1018 || tag == 0x20400100) + cam_mul[2] = get2() / 256.0; + if (tag == 0x2011 && len == 2) { +get2_256: + order = 0x4d4d; + cam_mul[0] = get2() / 256.0; + cam_mul[2] = get2() / 256.0; + } + if (tag == 0x2020) + parse_thumb_note (base, 257, 258); + if (tag == 0x2040) + parse_makernote (base, 0x2040); + if (tag == 0xb028) { + fseek (ifp, get4(), SEEK_SET); + parse_thumb_note (base, 136, 137); + } + if (tag == 0x4001 && type == 3) { + i = len == 582 ? 50 : len == 653 ? 68 : 126; + fseek (ifp, i, SEEK_CUR); +get2_rggb: + FORC4 cam_mul[c ^ (c >> 1)] = get2(); + fseek (ifp, 22, SEEK_CUR); + FORC4 sraw_mul[c ^ (c >> 1)] = get2(); + } +next: + fseek (ifp, save, SEEK_SET); + } +quit: + order = sorder; +} + +/* + Since the TIFF DateTime string has no timezone information, + assume that the camera's clock was set to Universal Time. + */ +void CLASS get_timestamp (int reversed) +{ + struct tm t; + char str[20]; + int i; + + str[19] = 0; + if (reversed) + for (i=19; i--; ) str[i] = fgetc(ifp); + else + fread (str, 19, 1, ifp); + memset (&t, 0, sizeof t); + if (sscanf (str, "%d:%d:%d %d:%d:%d", &t.tm_year, &t.tm_mon, + &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec) != 6) + return; + t.tm_year -= 1900; + t.tm_mon -= 1; + if (mktime(&t) > 0) + timestamp = mktime(&t); +} + +void CLASS parse_exif (int base) +{ + unsigned kodak, entries, tag, type, len, save, c; + double expo; + + kodak = !strncmp(make,"EASTMAN",7); + entries = get2(); + while (entries--) { + tiff_get (base, &tag, &type, &len, &save); + switch (tag) { + case 33434: shutter = getreal(type); break; + case 33437: aperture = getreal(type); break; + case 34855: iso_speed = get2(); break; + case 36867: + case 36868: get_timestamp(0); break; + case 37377: if ((expo = -getreal(type)) < 128) + shutter = pow (2, expo); break; + case 37378: aperture = pow (2, getreal(type)/2); break; + case 37386: focal_len = getreal(type); break; + case 37500: parse_makernote (base, 0); break; + case 40962: if (kodak) raw_width = get4(); break; + case 40963: if (kodak) raw_height = get4(); break; + case 41730: + if (get4() == 0x20002) + for (exif_cfa=c=0; c < 8; c+=2) + exif_cfa |= fgetc(ifp) * 0x01010101 << c; + } + fseek (ifp, save, SEEK_SET); + } +} + +void CLASS parse_gps (int base) +{ + unsigned entries, tag, type, len, save, c; + + entries = get2(); + while (entries--) { + tiff_get (base, &tag, &type, &len, &save); + switch (tag) { + case 1: case 3: case 5: + gpsdata[29+tag/2] = getc(ifp); break; + case 2: case 4: case 7: + FORC(6) gpsdata[tag/3*6+c] = get4(); break; + case 6: + FORC(2) gpsdata[18+c] = get4(); break; + case 18: case 29: + fgets ((char *) (gpsdata+14+tag/3), MIN(len,12), ifp); + } + fseek (ifp, save, SEEK_SET); + } +} + +void CLASS romm_coeff (float romm_cam[3][3]) +{ + static const float rgb_romm[3][3] = /* ROMM == Kodak ProPhoto */ + { { 2.034193, -0.727420, -0.306766 }, + { -0.228811, 1.231729, -0.002922 }, + { -0.008565, -0.153273, 1.161839 } }; + int i, j, k; + + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + for (cmatrix[i][j] = k=0; k < 3; k++) + cmatrix[i][j] += rgb_romm[i][k] * romm_cam[k][j]; +} + +void CLASS parse_mos (int offset) +{ + char data[40]; + int skip, from, i, c, neut[4], planes=0, frot=0; + static const char *mod[] = + { "","DCB2","Volare","Cantare","CMost","Valeo 6","Valeo 11","Valeo 22", + "Valeo 11p","Valeo 17","","Aptus 17","Aptus 22","Aptus 75","Aptus 65", + "Aptus 54S","Aptus 65S","Aptus 75S" }; + float romm_cam[3][3]; + + fseek (ifp, offset, SEEK_SET); + while (1) { + if (get4() != 0x504b5453) break; + get4(); + fread (data, 1, 40, ifp); + skip = get4(); + from = ftell(ifp); + if (!strcmp(data,"JPEG_preview_data")) { + thumb_offset = from; + thumb_length = skip; + } + if (!strcmp(data,"icc_camera_profile")) { + profile_offset = from; + profile_length = skip; + } + if (!strcmp(data,"ShootObj_back_type")) { + fscanf (ifp, "%d", &i); + if ((unsigned) i < sizeof mod / sizeof (*mod)) + strcpy (model, mod[i]); + } + if (!strcmp(data,"icc_camera_to_tone_matrix")) { + for (i=0; i < 9; i++) + romm_cam[0][i] = int_to_float(get4()); + romm_coeff (romm_cam); + } + if (!strcmp(data,"CaptProf_color_matrix")) { + for (i=0; i < 9; i++) + fscanf (ifp, "%f", &romm_cam[0][i]); + romm_coeff (romm_cam); + } + if (!strcmp(data,"CaptProf_number_of_planes")) + fscanf (ifp, "%d", &planes); + if (!strcmp(data,"CaptProf_raw_data_rotation")) + fscanf (ifp, "%d", &flip); + if (!strcmp(data,"CaptProf_mosaic_pattern")) + FORC4 { + fscanf (ifp, "%d", &i); + if (i == 1) frot = c ^ (c >> 1); + } + if (!strcmp(data,"ImgProf_rotation_angle")) { + fscanf (ifp, "%d", &i); + flip = i - flip; + } + if (!strcmp(data,"NeutObj_neutrals") && !cam_mul[0]) { + FORC4 fscanf (ifp, "%d", neut+c); + FORC3 cam_mul[c] = (float) neut[0] / neut[c+1]; + } + parse_mos (from); + fseek (ifp, skip+from, SEEK_SET); + } + if (planes) + filters = (planes == 1) * 0x01010101 * + (uchar) "\x94\x61\x16\x49"[(flip/90 + frot) & 3]; +} + +void CLASS linear_table (unsigned len) +{ + int i; + if (len > 0x1000) len = 0x1000; + read_shorts (curve, len); + for (i=len; i < 0x1000; i++) + curve[i] = curve[i-1]; + maximum = curve[0xfff]; +} + +void CLASS parse_kodak_ifd (int base) +{ + unsigned entries, tag, type, len, save; + int i, c, wbi=-2, wbtemp=6500; + float mul[3], num; + + entries = get2(); + if (entries > 1024) return; + while (entries--) { + tiff_get (base, &tag, &type, &len, &save); + if (tag == 1020) wbi = getint(type); + if (tag == 1021 && len == 72) { /* WB set in software */ + fseek (ifp, 40, SEEK_CUR); + FORC3 cam_mul[c] = 2048.0 / get2(); + wbi = -2; + } + if (tag == 2118) wbtemp = getint(type); + if (tag == 2130 + wbi) + FORC3 mul[c] = getreal(type); + if (tag == 2140 + wbi && wbi >= 0) + FORC3 { + for (num=i=0; i < 4; i++) + num += getreal(type) * pow (wbtemp/100.0, i); + cam_mul[c] = 2048 / (num * mul[c]); + } + if (tag == 2317) linear_table (len); + if (tag == 6020) iso_speed = getint(type); + fseek (ifp, save, SEEK_SET); + } +} + +void CLASS parse_minolta (int base); + +int CLASS parse_tiff_ifd (int base) +{ + unsigned entries, tag, type, len, plen=16, save; + int ifd, use_cm=0, cfa, i, j, c, ima_len=0; + char software[64], *cbuf, *cp; + uchar cfa_pat[16], cfa_pc[] = { 0,1,2,3 }, tab[256]; + double dblack, cc[4][4], cm[4][3], cam_xyz[4][3], num; + double ab[]={ 1,1,1,1 }, asn[] = { 0,0,0,0 }, xyz[] = { 1,1,1 }; + unsigned sony_curve[] = { 0,0,0,0,0,4095 }; + unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; + struct jhead jh; + FILE *sfp; + + if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0]) + return 1; + ifd = tiff_nifds++; + for (j=0; j < 4; j++) + for (i=0; i < 4; i++) + cc[j][i] = i == j; + entries = get2(); + if (entries > 512) return 1; + while (entries--) { + tiff_get (base, &tag, &type, &len, &save); + switch (tag) { + case 17: case 18: + if (type == 3 && len == 1) + cam_mul[(tag-17)*2] = get2() / 256.0; + break; + case 23: + if (type == 3) iso_speed = get2(); + break; + case 36: case 37: case 38: + cam_mul[tag-0x24] = get2(); + break; + case 39: + if (len < 50 || cam_mul[0]) break; + fseek (ifp, 12, SEEK_CUR); + FORC3 cam_mul[c] = get2(); + break; + case 46: + if (type != 7 || fgetc(ifp) != 0xff || fgetc(ifp) != 0xd8) break; + thumb_offset = ftell(ifp) - 2; + thumb_length = len; + break; + case 2: case 256: /* ImageWidth */ + tiff_ifd[ifd].width = getint(type); + break; + case 3: case 257: /* ImageHeight */ + tiff_ifd[ifd].height = getint(type); + break; + case 258: /* BitsPerSample */ + tiff_ifd[ifd].samples = len & 7; + tiff_ifd[ifd].bps = get2(); + break; + case 259: /* Compression */ + tiff_ifd[ifd].comp = get2(); + break; + case 262: /* PhotometricInterpretation */ + tiff_ifd[ifd].phint = get2(); + break; + case 270: /* ImageDescription */ + fread (desc, 512, 1, ifp); + break; + case 271: /* Make */ + fgets (make, 64, ifp); + break; + case 272: /* Model */ + fgets (model, 64, ifp); + break; + case 273: /* StripOffset */ + case 513: + tiff_ifd[ifd].offset = get4()+base; + if (!tiff_ifd[ifd].bps) { + fseek (ifp, tiff_ifd[ifd].offset, SEEK_SET); + if (ljpeg_start (&jh, 1)) { + tiff_ifd[ifd].comp = 6; + tiff_ifd[ifd].width = jh.wide << (jh.clrs == 2); + tiff_ifd[ifd].height = jh.high; + tiff_ifd[ifd].bps = jh.bits; + tiff_ifd[ifd].samples = jh.clrs; + } + } + break; + case 274: /* Orientation */ + tiff_ifd[ifd].flip = "50132467"[get2() & 7]-'0'; + break; + case 277: /* SamplesPerPixel */ + tiff_ifd[ifd].samples = getint(type) & 7; + break; + case 279: /* StripByteCounts */ + case 514: + tiff_ifd[ifd].bytes = get4(); + break; + case 305: /* Software */ + fgets (software, 64, ifp); + if (!strncmp(software,"Adobe",5) || + !strncmp(software,"dcraw",5) || + !strncmp(software,"Bibble",6) || + !strncmp(software,"Nikon Scan",10) || + !strcmp (software,"Digital Photo Professional")) + is_raw = 0; + break; + case 306: /* DateTime */ + get_timestamp(0); + break; + case 315: /* Artist */ + fread (artist, 64, 1, ifp); + break; + case 322: /* TileWidth */ + tile_width = getint(type); + break; + case 323: /* TileLength */ + tile_length = getint(type); + break; + case 324: /* TileOffsets */ + tiff_ifd[ifd].offset = len > 1 ? ftell(ifp) : get4(); + if (len == 4) { + load_raw = &CLASS sinar_4shot_load_raw; + is_raw = 5; + } + break; + case 330: /* SubIFDs */ + if (!strcmp(model,"DSLR-A100") && tiff_ifd[ifd].width == 3872) { + data_offset = get4()+base; + ifd++; break; + } + while (len--) { + i = ftell(ifp); + fseek (ifp, get4()+base, SEEK_SET); + if (parse_tiff_ifd (base)) break; + fseek (ifp, i+4, SEEK_SET); + } + break; + case 400: + strcpy (make, "Sarnoff"); + maximum = 0xfff; + break; + case 28688: + FORC4 sony_curve[c+1] = get2() >> 2 & 0xfff; + for (i=0; i < 5; i++) + for (j = sony_curve[i]+1; j <= sony_curve[i+1]; j++) + curve[j] = curve[j-1] + (1 << i); + break; + case 29184: sony_offset = get4(); break; + case 29185: sony_length = get4(); break; + case 29217: sony_key = get4(); break; + case 29264: + parse_minolta (ftell(ifp)); + raw_width = 0; + break; + case 29443: + FORC4 cam_mul[c ^ (c < 2)] = get2(); + break; + case 33405: /* Model2 */ + fgets (model2, 64, ifp); + break; + case 33422: /* CFAPattern */ + case 64777: /* Kodak P-series */ + if ((plen=len) > 16) plen = 16; + fread (cfa_pat, 1, plen, ifp); + for (colors=cfa=i=0; i < plen; i++) { + colors += !(cfa & (1 << cfa_pat[i])); + cfa |= 1 << cfa_pat[i]; + } + if (cfa == 070) memcpy (cfa_pc,"\003\004\005",3); /* CMY */ + if (cfa == 072) memcpy (cfa_pc,"\005\003\004\001",4); /* GMCY */ + goto guess_cfa_pc; + case 33424: + fseek (ifp, get4()+base, SEEK_SET); + parse_kodak_ifd (base); + break; + case 33434: /* ExposureTime */ + shutter = getreal(type); + break; + case 33437: /* FNumber */ + aperture = getreal(type); + break; + case 34306: /* Leaf white balance */ + FORC4 cam_mul[c ^ 1] = 4096.0 / get2(); + break; + case 34307: /* Leaf CatchLight color matrix */ + fread (software, 1, 7, ifp); + if (strncmp(software,"MATRIX",6)) break; + colors = 4; + for (raw_color = i=0; i < 3; i++) { + FORC4 fscanf (ifp, "%f", &rgb_cam[i][c^1]); + if (!use_camera_wb) continue; + num = 0; + FORC4 num += rgb_cam[i][c]; + FORC4 rgb_cam[i][c] /= num; + } + break; + case 34310: /* Leaf metadata */ + parse_mos (ftell(ifp)); + case 34303: + strcpy (make, "Leaf"); + break; + case 34665: /* EXIF tag */ + fseek (ifp, get4()+base, SEEK_SET); + parse_exif (base); + break; + case 34853: /* GPSInfo tag */ + fseek (ifp, get4()+base, SEEK_SET); + parse_gps (base); + break; + case 34675: /* InterColorProfile */ + case 50831: /* AsShotICCProfile */ + profile_offset = ftell(ifp); + profile_length = len; + break; + case 37122: /* CompressedBitsPerPixel */ + kodak_cbpp = get4(); + break; + case 37386: /* FocalLength */ + focal_len = getreal(type); + break; + case 37393: /* ImageNumber */ + shot_order = getint(type); + break; + case 37400: /* old Kodak KDC tag */ + for (raw_color = i=0; i < 3; i++) { + getreal(type); + FORC3 rgb_cam[i][c] = getreal(type); + } + break; + case 46275: /* Imacon tags */ + strcpy (make, "Imacon"); + data_offset = ftell(ifp); + ima_len = len; + break; + case 46279: + fseek (ifp, 78, SEEK_CUR); + raw_width = get4(); + raw_height = get4(); + left_margin = get4() & 7; + width = raw_width - left_margin - (get4() & 7); + top_margin = get4() & 7; + height = raw_height - top_margin - (get4() & 7); + if (raw_width == 7262) { + height = 5444; + width = 7244; + left_margin = 7; + } + fseek (ifp, 52, SEEK_CUR); + FORC3 cam_mul[c] = getreal(11); + fseek (ifp, 114, SEEK_CUR); + flip = (get2() >> 7) * 90; + if (width * height * 6 == ima_len) { + if (flip % 180 == 90) SWAP(width,height); + filters = flip = 0; + } + sprintf (model, "Ixpress %d-Mp", height*width/1000000); + load_raw = &CLASS imacon_full_load_raw; + if (filters) { + if (left_margin & 1) filters = 0x61616161; + load_raw = &CLASS unpacked_load_raw; + } + maximum = 0xffff; + break; + case 50454: /* Sinar tag */ + case 50455: + if (!(cbuf = (char *) malloc(len))) break; + fread (cbuf, 1, len, ifp); + for (cp = cbuf-1; cp && cp < cbuf+len; cp = strchr(cp,'\n')) + if (!strncmp (++cp,"Neutral ",8)) + sscanf (cp+8, "%f %f %f", cam_mul, cam_mul+1, cam_mul+2); + free (cbuf); + break; + case 50459: /* Hasselblad tag */ + i = order; + j = ftell(ifp); + c = tiff_nifds; + order = get2(); + fseek (ifp, j+(get2(),get4()), SEEK_SET); + parse_tiff_ifd (j); + maximum = 0xffff; + tiff_nifds = c; + order = i; + break; + case 50706: /* DNGVersion */ + FORC4 dng_version = (dng_version << 8) + fgetc(ifp); + break; + case 50710: /* CFAPlaneColor */ + if (len > 4) len = 4; + colors = len; + fread (cfa_pc, 1, colors, ifp); +guess_cfa_pc: + FORCC tab[cfa_pc[c]] = c; + cdesc[c] = 0; + for (i=16; i--; ) + filters = filters << 2 | tab[cfa_pat[i % plen]]; + break; + case 50711: /* CFALayout */ + if (get2() == 2) { + fuji_width = 1; + filters = 0x49494949; + } + break; + case 291: + case 50712: /* LinearizationTable */ + linear_table (len); + break; + case 50714: /* BlackLevel */ + case 50715: /* BlackLevelDeltaH */ + case 50716: /* BlackLevelDeltaV */ + for (dblack=i=0; i < len; i++) + dblack += getreal(type); + black += dblack/len + 0.5; + break; + case 50717: /* WhiteLevel */ + maximum = getint(type); + break; + case 50718: /* DefaultScale */ + pixel_aspect = getreal(type); + pixel_aspect /= getreal(type); + break; + case 50721: /* ColorMatrix1 */ + case 50722: /* ColorMatrix2 */ + FORCC for (j=0; j < 3; j++) + cm[c][j] = getreal(type); + use_cm = 1; + break; + case 50723: /* CameraCalibration1 */ + case 50724: /* CameraCalibration2 */ + for (i=0; i < colors; i++) + FORCC cc[i][c] = getreal(type); + case 50727: /* AnalogBalance */ + FORCC ab[c] = getreal(type); + break; + case 50728: /* AsShotNeutral */ + FORCC asn[c] = getreal(type); + break; + case 50729: /* AsShotWhiteXY */ + xyz[0] = getreal(type); + xyz[1] = getreal(type); + xyz[2] = 1 - xyz[0] - xyz[1]; + FORC3 xyz[c] /= d65_white[c]; + break; + case 50740: /* DNGPrivateData */ + if (dng_version) break; + parse_minolta (j = get4()+base); + fseek (ifp, j, SEEK_SET); + parse_tiff_ifd (base); + break; + case 50752: + read_shorts (cr2_slice, 3); + break; + case 50829: /* ActiveArea */ + top_margin = getint(type); + left_margin = getint(type); + height = getint(type) - top_margin; + width = getint(type) - left_margin; + break; + case 64772: /* Kodak P-series */ + fseek (ifp, 16, SEEK_CUR); + data_offset = get4(); + fseek (ifp, 28, SEEK_CUR); + data_offset += get4(); + load_raw = &CLASS packed_12_load_raw; + } + fseek (ifp, save, SEEK_SET); + } + if (sony_length && (buf = (unsigned *) malloc(sony_length))) { + fseek (ifp, sony_offset, SEEK_SET); + fread (buf, sony_length, 1, ifp); + sony_decrypt (buf, sony_length/4, 1, sony_key); + sfp = ifp; + if ((ifp = tmpfile())) { + fwrite (buf, sony_length, 1, ifp); + fseek (ifp, 0, SEEK_SET); + parse_tiff_ifd (-sony_offset); + fclose (ifp); + } + ifp = sfp; + free (buf); + } + for (i=0; i < colors; i++) + FORCC cc[i][c] *= ab[i]; + if (use_cm) { + FORCC for (i=0; i < 3; i++) + for (cam_xyz[c][i]=j=0; j < colors; j++) + cam_xyz[c][i] += cc[c][j] * cm[j][i] * xyz[i]; + cam_xyz_coeff (cam_xyz); + } + if (asn[0]) { + cam_mul[3] = 0; + FORCC cam_mul[c] = 1 / asn[c]; + } + if (!use_cm) + FORCC pre_mul[c] /= cc[c][c]; + return 0; +} + +void CLASS parse_tiff (int base) +{ + int doff, max_samp=0, raw=-1, thm=-1, i; + struct jhead jh; + + fseek (ifp, base, SEEK_SET); + order = get2(); + if (order != 0x4949 && order != 0x4d4d) return; + get2(); + memset (tiff_ifd, 0, sizeof tiff_ifd); + tiff_nifds = 0; + while ((doff = get4())) { + fseek (ifp, doff+base, SEEK_SET); + if (parse_tiff_ifd (base)) break; + } + thumb_misc = 16; + if (thumb_offset) { + fseek (ifp, thumb_offset, SEEK_SET); + if (ljpeg_start (&jh, 1)) { + thumb_misc = jh.bits; + thumb_width = jh.wide; + thumb_height = jh.high; + } + } + for (i=0; i < tiff_nifds; i++) { + if (max_samp < tiff_ifd[i].samples) + max_samp = tiff_ifd[i].samples; + if (max_samp > 3) max_samp = 3; + if ((tiff_ifd[i].comp != 6 || tiff_ifd[i].samples != 3) && + tiff_ifd[i].width*tiff_ifd[i].height > raw_width*raw_height) { + raw_width = tiff_ifd[i].width; + raw_height = tiff_ifd[i].height; + tiff_bps = tiff_ifd[i].bps; + tiff_compress = tiff_ifd[i].comp; + data_offset = tiff_ifd[i].offset; + tiff_flip = tiff_ifd[i].flip; + tiff_samples = tiff_ifd[i].samples; + raw = i; + } + } + fuji_width *= (raw_width+1)/2; + if (tiff_ifd[0].flip) tiff_flip = tiff_ifd[0].flip; + if (raw >= 0 && !load_raw) + switch (tiff_compress) { + case 0: case 1: + switch (tiff_bps) { + case 8: load_raw = &CLASS eight_bit_load_raw; break; + case 12: load_raw = &CLASS packed_12_load_raw; + if (!strncmp(make,"NIKON",5)) + load_raw = &CLASS nikon_load_raw; + if (strncmp(make,"PENTAX",6)) break; + case 14: + case 16: load_raw = &CLASS unpacked_load_raw; break; + } + if (tiff_ifd[raw].bytes * 5 == raw_width * raw_height * 8) + load_raw = &CLASS olympus_e300_load_raw; + if (tiff_bps == 12 && tiff_ifd[raw].phint == 2) + load_raw = &CLASS olympus_cseries_load_raw; + break; + case 6: case 7: case 99: + load_raw = &CLASS lossless_jpeg_load_raw; break; + case 262: + load_raw = &CLASS kodak_262_load_raw; break; + case 32767: + load_raw = &CLASS sony_arw2_load_raw; break; + case 32769: + load_raw = &CLASS nikon_load_raw; break; + case 32773: + load_raw = &CLASS packed_12_load_raw; break; + case 34713: + load_raw = &CLASS nikon_compressed_load_raw; break; + case 65535: + load_raw = &CLASS pentax_k10_load_raw; break; + case 65000: + switch (tiff_ifd[raw].phint) { + case 2: load_raw = &CLASS kodak_rgb_load_raw; filters = 0; break; + case 6: load_raw = &CLASS kodak_ycbcr_load_raw; filters = 0; break; + case 32803: load_raw = &CLASS kodak_65000_load_raw; + } + case 32867: break; + default: is_raw = 0; + } + if (!dng_version && tiff_samples == 3) + if (tiff_ifd[raw].bytes && tiff_bps != 14 && tiff_bps != 2048) + is_raw = 0; + if (!dng_version && tiff_bps == 8 && tiff_compress == 1 && + tiff_ifd[raw].phint == 1) is_raw = 0; + for (i=0; i < tiff_nifds; i++) + if (i != raw && tiff_ifd[i].samples == max_samp && + tiff_ifd[i].width * tiff_ifd[i].height / SQR(tiff_ifd[i].bps+1) > + thumb_width * thumb_height / SQR(thumb_misc+1)) { + thumb_width = tiff_ifd[i].width; + thumb_height = tiff_ifd[i].height; + thumb_offset = tiff_ifd[i].offset; + thumb_length = tiff_ifd[i].bytes; + thumb_misc = tiff_ifd[i].bps; + thm = i; + } + if (thm >= 0) { + thumb_misc |= tiff_ifd[thm].samples << 5; + switch (tiff_ifd[thm].comp) { + case 0: + write_thumb = &CLASS layer_thumb; + break; + case 1: + if (tiff_ifd[thm].bps > 8) + thumb_load_raw = &CLASS kodak_thumb_load_raw; + else + write_thumb = &CLASS ppm_thumb; + break; + case 65000: + thumb_load_raw = tiff_ifd[thm].phint == 6 ? + &CLASS kodak_ycbcr_load_raw : &CLASS kodak_rgb_load_raw; + } + } +} + +void CLASS parse_minolta (int base) +{ + int save, tag, len, offset, high=0, wide=0, i, c; + short sorder=order; + + fseek (ifp, base, SEEK_SET); + if (fgetc(ifp) || fgetc(ifp)-'M' || fgetc(ifp)-'R') return; + order = fgetc(ifp) * 0x101; + offset = base + get4() + 8; + while ((save=ftell(ifp)) < offset) { + for (tag=i=0; i < 4; i++) + tag = tag << 8 | fgetc(ifp); + len = get4(); + switch (tag) { + case 0x505244: /* PRD */ + fseek (ifp, 8, SEEK_CUR); + high = get2(); + wide = get2(); + break; + case 0x574247: /* WBG */ + get4(); + i = strstr(model,"A200") ? 3:0; + FORC4 cam_mul[c ^ (c >> 1) ^ i] = get2(); + break; + case 0x545457: /* TTW */ + parse_tiff (ftell(ifp)); + data_offset = offset; + } + fseek (ifp, save+len+8, SEEK_SET); + } + raw_height = high; + raw_width = wide; + order = sorder; +} + +/* + Many cameras have a "debug mode" that writes JPEG and raw + at the same time. The raw file has no header, so try to + to open the matching JPEG file and read its metadata. + */ +void CLASS parse_external_jpeg() +{ + char *file, *ext, *jname, *jfile, *jext; + FILE *save=ifp; + + ext = strrchr (ifname, '.'); + file = strrchr (ifname, '/'); + if (!file) file = strrchr (ifname, '\\'); + if (!file) file = ifname-1; + file++; + if (!ext || strlen(ext) != 4 || ext-file != 8) return; + jname = (char *) malloc (strlen(ifname) + 1); + merror (jname, "parse_external()"); + strcpy (jname, ifname); + jfile = file - ifname + jname; + jext = ext - ifname + jname; + if (strcasecmp (ext, ".jpg")) { + strcpy (jext, isupper(ext[1]) ? ".JPG":".jpg"); + memcpy (jfile, file+4, 4); + memcpy (jfile+4, file, 4); + } else + while (isdigit(*--jext)) { + if (*jext != '9') { + (*jext)++; + break; + } + *jext = '0'; + } + if (strcmp (jname, ifname)) { + if ((ifp = fopen (jname, "rb"))) { + if (verbose) + fprintf (stderr,_("Reading metadata from %s ...\n"), jname); + parse_tiff (12); + thumb_offset = 0; + is_raw = 1; + fclose (ifp); + } + } + if (!timestamp) + fprintf (stderr,_("Failed to read metadata from %s\n"), jname); + free (jname); + ifp = save; +} + +/* + CIFF block 0x1030 contains an 8x8 white sample. + Load this into white[][] for use in scale_colors(). + */ +void CLASS ciff_block_1030() +{ + static const ushort key[] = { 0x410, 0x45f3 }; + int i, bpp, row, col, vbits=0; + unsigned long bitbuf=0; + + if ((get2(),get4()) != 0x80008 || !get4()) return; + bpp = get2(); + if (bpp != 10 && bpp != 12) return; + for (i=row=0; row < 8; row++) + for (col=0; col < 8; col++) { + if (vbits < bpp) { + bitbuf = bitbuf << 16 | (get2() ^ key[i++ & 1]); + vbits += 16; + } + white[row][col] = + bitbuf << (LONG_BIT - vbits) >> (LONG_BIT - bpp); + vbits -= bpp; + } +} + +/* + Parse a CIFF file, better known as Canon CRW format. + */ +void CLASS parse_ciff (int offset, int length) +{ + int tboff, nrecs, c, type, len, save, wbi=-1; + ushort key[] = { 0x410, 0x45f3 }; + + fseek (ifp, offset+length-4, SEEK_SET); + tboff = get4() + offset; + fseek (ifp, tboff, SEEK_SET); + nrecs = get2(); + if (nrecs > 100) return; + while (nrecs--) { + type = get2(); + len = get4(); + save = ftell(ifp) + 4; + fseek (ifp, offset+get4(), SEEK_SET); + if ((((type >> 8) + 8) | 8) == 0x38) + parse_ciff (ftell(ifp), len); /* Parse a sub-table */ + + if (type == 0x0810) + fread (artist, 64, 1, ifp); + if (type == 0x080a) { + fread (make, 64, 1, ifp); + fseek (ifp, strlen(make) - 63, SEEK_CUR); + fread (model, 64, 1, ifp); + } + if (type == 0x1810) { + fseek (ifp, 12, SEEK_CUR); + flip = get4(); + } + if (type == 0x1835) /* Get the decoder table */ + tiff_compress = get4(); + if (type == 0x2007) { + thumb_offset = ftell(ifp); + thumb_length = len; + } + if (type == 0x1818) { + shutter = pow (2, -int_to_float((get4(),get4()))); + aperture = pow (2, int_to_float(get4())/2); + } + if (type == 0x102a) { + iso_speed = pow (2, (get4(),get2())/32.0 - 4) * 50; + aperture = pow (2, (get2(),(short)get2())/64.0); + shutter = pow (2,-((short)get2())/32.0); + wbi = (get2(),get2()); + if (wbi > 17) wbi = 0; + fseek (ifp, 32, SEEK_CUR); + if (shutter > 1e6) shutter = get2()/10.0; + } + if (type == 0x102c) { + if (get2() > 512) { /* Pro90, G1 */ + fseek (ifp, 118, SEEK_CUR); + FORC4 cam_mul[c ^ 2] = get2(); + } else { /* G2, S30, S40 */ + fseek (ifp, 98, SEEK_CUR); + FORC4 cam_mul[c ^ (c >> 1) ^ 1] = get2(); + } + } + if (type == 0x0032) { + if (len == 768) { /* EOS D30 */ + fseek (ifp, 72, SEEK_CUR); + FORC4 cam_mul[c ^ (c >> 1)] = 1024.0 / get2(); + if (!wbi) cam_mul[0] = -1; /* use my auto white balance */ + } else if (!cam_mul[0]) { + if (get2() == key[0]) /* Pro1, G6, S60, S70 */ + c = (strstr(model,"Pro1") ? + "012346000000000000":"01345:000000006008")[wbi]-'0'+ 2; + else { /* G3, G5, S45, S50 */ + c = "023457000000006000"[wbi]-'0'; + key[0] = key[1] = 0; + } + fseek (ifp, 78 + c*8, SEEK_CUR); + FORC4 cam_mul[c ^ (c >> 1) ^ 1] = get2() ^ key[c & 1]; + if (!wbi) cam_mul[0] = -1; + } + } + if (type == 0x10a9) { /* D60, 10D, 300D, and clones */ + if (len > 66) wbi = "0134567028"[wbi]-'0'; + fseek (ifp, 2 + wbi*8, SEEK_CUR); + FORC4 cam_mul[c ^ (c >> 1)] = get2(); + } + if (type == 0x1030 && (0x18040 >> wbi & 1)) + ciff_block_1030(); /* all that don't have 0x10a9 */ + if (type == 0x1031) { + raw_width = (get2(),get2()); + raw_height = get2(); + } + if (type == 0x5029) { + focal_len = len >> 16; + if ((len & 0xffff) == 2) focal_len /= 32; + } + if (type == 0x5813) flash_used = int_to_float(len); + if (type == 0x5814) canon_ev = int_to_float(len); + if (type == 0x5817) shot_order = len; + if (type == 0x5834) unique_id = len; + if (type == 0x580e) timestamp = len; + if (type == 0x180e) timestamp = get4(); +#ifdef LOCALTIME + if ((type | 0x4000) == 0x580e) + timestamp = mktime (gmtime (×tamp)); +#endif + fseek (ifp, save, SEEK_SET); + } +} + +void CLASS parse_rollei() +{ + char line[128], *val; + struct tm t; + + fseek (ifp, 0, SEEK_SET); + memset (&t, 0, sizeof t); + do { + fgets (line, 128, ifp); + if ((val = strchr(line,'='))) + *val++ = 0; + else + val = line + strlen(line); + if (!strcmp(line,"DAT")) + sscanf (val, "%d.%d.%d", &t.tm_mday, &t.tm_mon, &t.tm_year); + if (!strcmp(line,"TIM")) + sscanf (val, "%d:%d:%d", &t.tm_hour, &t.tm_min, &t.tm_sec); + if (!strcmp(line,"HDR")) + thumb_offset = atoi(val); + if (!strcmp(line,"X ")) + raw_width = atoi(val); + if (!strcmp(line,"Y ")) + raw_height = atoi(val); + if (!strcmp(line,"TX ")) + thumb_width = atoi(val); + if (!strcmp(line,"TY ")) + thumb_height = atoi(val); + } while (strncmp(line,"EOHD",4)); + data_offset = thumb_offset + thumb_width * thumb_height * 2; + t.tm_year -= 1900; + t.tm_mon -= 1; + if (mktime(&t) > 0) + timestamp = mktime(&t); + strcpy (make, "Rollei"); + strcpy (model,"d530flex"); + write_thumb = &CLASS rollei_thumb; +} + +void CLASS parse_sinar_ia() +{ + int entries, off; + char str[8], *cp; + + order = 0x4949; + fseek (ifp, 4, SEEK_SET); + entries = get4(); + fseek (ifp, get4(), SEEK_SET); + while (entries--) { + off = get4(); get4(); + fread (str, 8, 1, ifp); + if (!strcmp(str,"META")) meta_offset = off; + if (!strcmp(str,"THUMB")) thumb_offset = off; + if (!strcmp(str,"RAW0")) data_offset = off; + } + fseek (ifp, meta_offset+20, SEEK_SET); + fread (make, 64, 1, ifp); + make[63] = 0; + if ((cp = strchr(make,' '))) { + strcpy (model, cp+1); + *cp = 0; + } + raw_width = get2(); + raw_height = get2(); + load_raw = &CLASS unpacked_load_raw; + thumb_width = (get4(),get2()); + thumb_height = get2(); + write_thumb = &CLASS ppm_thumb; + maximum = 0x3fff; +} + +void CLASS parse_phase_one (int base) +{ + unsigned entries, tag, type, len, data, save, i, c; + float romm_cam[3][3]; + char *cp; + + memset (&ph1, 0, sizeof ph1); + fseek (ifp, base, SEEK_SET); + order = get4() & 0xffff; + if (get4() >> 8 != 0x526177) return; /* "Raw" */ + fseek (ifp, base+get4(), SEEK_SET); + entries = get4(); + get4(); + while (entries--) { + tag = get4(); + type = get4(); + len = get4(); + data = get4(); + save = ftell(ifp); + fseek (ifp, base+data, SEEK_SET); + switch (tag) { + case 0x100: flip = "0653"[data & 3]-'0'; break; + case 0x106: + for (i=0; i < 9; i++) + romm_cam[0][i] = getreal(11); + romm_coeff (romm_cam); + break; + case 0x107: + FORC3 cam_mul[c] = getreal(11); + break; + case 0x108: raw_width = data; break; + case 0x109: raw_height = data; break; + case 0x10a: left_margin = data; break; + case 0x10b: top_margin = data; break; + case 0x10c: width = data; break; + case 0x10d: height = data; break; + case 0x10e: ph1.format = data; break; + case 0x10f: data_offset = data+base; break; + case 0x110: meta_offset = data+base; + meta_length = len; break; + case 0x112: ph1.key_off = save - 4; break; + case 0x210: ph1.tag_210 = int_to_float(data); break; + case 0x21a: ph1.tag_21a = data; break; + case 0x21c: strip_offset = data+base; break; + case 0x21d: ph1.black = data; break; + case 0x222: ph1.split_col = data - left_margin; break; + case 0x223: ph1.black_off = data+base; break; + case 0x301: + model[63] = 0; + fread (model, 1, 63, ifp); + if ((cp = strstr(model," camera"))) *cp = 0; + } + fseek (ifp, save, SEEK_SET); + } + load_raw = ph1.format < 3 ? + &CLASS phase_one_load_raw : &CLASS phase_one_load_raw_c; + maximum = 0xffff; + strcpy (make, "Phase One"); + if (model[0]) return; + switch (raw_height) { + case 2060: strcpy (model,"LightPhase"); break; + case 2682: strcpy (model,"H 10"); break; + case 4128: strcpy (model,"H 20"); break; + case 5488: strcpy (model,"H 25"); break; + } +} + +void CLASS parse_fuji (int offset) +{ + unsigned entries, tag, len, save, c; + + fseek (ifp, offset, SEEK_SET); + entries = get4(); + if (entries > 255) return; + while (entries--) { + tag = get2(); + len = get2(); + save = ftell(ifp); + if (tag == 0x100) { + raw_height = get2(); + raw_width = get2(); + } else if (tag == 0x121) { + height = get2(); + if ((width = get2()) == 4284) width += 3; + } else if (tag == 0x130) + fuji_layout = fgetc(ifp) >> 7; + if (tag == 0x2ff0) + FORC4 cam_mul[c ^ 1] = get2(); + fseek (ifp, save+len, SEEK_SET); + } + height <<= fuji_layout; + width >>= fuji_layout; +} + +int CLASS parse_jpeg (int offset) +{ + int len, save, hlen, mark; + + fseek (ifp, offset, SEEK_SET); + if (fgetc(ifp) != 0xff || fgetc(ifp) != 0xd8) return 0; + + while (fgetc(ifp) == 0xff && (mark = fgetc(ifp)) != 0xda) { + order = 0x4d4d; + len = get2() - 2; + save = ftell(ifp); + if (mark == 0xc0 || mark == 0xc3) { + fgetc(ifp); + raw_height = get2(); + raw_width = get2(); + } + order = get2(); + hlen = get4(); + if (get4() == 0x48454150) /* "HEAP" */ + parse_ciff (save+hlen, len-hlen); + parse_tiff (save+6); + fseek (ifp, save+len, SEEK_SET); + } + return 1; +} + +void CLASS parse_riff() +{ + unsigned i, size, end; + char tag[4], date[64], month[64]; + static const char mon[12][4] = + { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; + struct tm t; + + order = 0x4949; + fread (tag, 4, 1, ifp); + size = get4(); + if (!memcmp(tag,"RIFF",4) || !memcmp(tag,"LIST",4)) { + end = ftell(ifp) + size; + get4(); + while (ftell(ifp) < end) + parse_riff(); + } else if (!memcmp(tag,"IDIT",4) && size < 64) { + fread (date, 64, 1, ifp); + date[size] = 0; + memset (&t, 0, sizeof t); + if (sscanf (date, "%*s %s %d %d:%d:%d %d", month, &t.tm_mday, + &t.tm_hour, &t.tm_min, &t.tm_sec, &t.tm_year) == 6) { + for (i=0; i < 12 && strcmp(mon[i],month); i++); + t.tm_mon = i; + t.tm_year -= 1900; + if (mktime(&t) > 0) + timestamp = mktime(&t); + } + } else + fseek (ifp, size, SEEK_CUR); +} + +void CLASS parse_smal (int offset, int fsize) +{ + int ver; + + fseek (ifp, offset+2, SEEK_SET); + order = 0x4949; + ver = fgetc(ifp); + if (ver == 6) + fseek (ifp, 5, SEEK_CUR); + if (get4() != fsize) return; + if (ver > 6) data_offset = get4(); + raw_height = height = get2(); + raw_width = width = get2(); + strcpy (make, "SMaL"); + sprintf (model, "v%d %dx%d", ver, width, height); + if (ver == 6) load_raw = &CLASS smal_v6_load_raw; + if (ver == 9) load_raw = &CLASS smal_v9_load_raw; +} + +void CLASS parse_cine() +{ + unsigned off_head, off_setup, off_image, i; + + order = 0x4949; + fseek (ifp, 4, SEEK_SET); + is_raw = get2() == 2; + fseek (ifp, 14, SEEK_CUR); + is_raw *= get4(); + off_head = get4(); + off_setup = get4(); + off_image = get4(); + timestamp = get4(); + if ((i = get4())) timestamp = i; + fseek (ifp, off_head+4, SEEK_SET); + raw_width = get4(); + raw_height = get4(); + switch (get2(),get2()) { + case 8: load_raw = &CLASS eight_bit_load_raw; break; + case 16: load_raw = &CLASS unpacked_load_raw; + } + fseek (ifp, off_setup+792, SEEK_SET); + strcpy (make, "CINE"); + sprintf (model, "%d", get4()); + fseek (ifp, 12, SEEK_CUR); + switch ((i=get4()) & 0xffffff) { + case 3: filters = 0x94949494; break; + case 4: filters = 0x49494949; break; + default: is_raw = 0; + } + fseek (ifp, 72, SEEK_CUR); + switch ((get4()+3600) % 360) { + case 270: flip = 4; break; + case 180: flip = 1; break; + case 90: flip = 7; break; + case 0: flip = 2; + } + cam_mul[0] = getreal(11); + cam_mul[2] = getreal(11); + maximum = ~(-1 << get4()); + fseek (ifp, 668, SEEK_CUR); + shutter = get4()/1000000000.0; + fseek (ifp, off_image, SEEK_SET); + if (shot_select < is_raw) + fseek (ifp, shot_select*8, SEEK_CUR); + data_offset = (INT64) get4() + 8; + data_offset += (INT64) get4() << 32; +} + +char * CLASS foveon_gets (int offset, char *str, int len) +{ + int i; + fseek (ifp, offset, SEEK_SET); + for (i=0; i < len-1; i++) + if ((str[i] = get2()) == 0) break; + str[i] = 0; + return str; +} + +void CLASS parse_foveon() +{ + int entries, img=0, off, len, tag, save, i, wide, high, pent, poff[256][2]; + char name[64], value[64]; + + order = 0x4949; /* Little-endian */ + fseek (ifp, 36, SEEK_SET); + flip = get4(); + fseek (ifp, -4, SEEK_END); + fseek (ifp, get4(), SEEK_SET); + if (get4() != 0x64434553) return; /* SECd */ + entries = (get4(),get4()); + while (entries--) { + off = get4(); + len = get4(); + tag = get4(); + save = ftell(ifp); + fseek (ifp, off, SEEK_SET); + if (get4() != (0x20434553 | (tag << 24))) return; + switch (tag) { + case 0x47414d49: /* IMAG */ + case 0x32414d49: /* IMA2 */ + fseek (ifp, 12, SEEK_CUR); + wide = get4(); + high = get4(); + if (wide > raw_width && high > raw_height) { + raw_width = wide; + raw_height = high; + data_offset = off+24; + } + fseek (ifp, off+28, SEEK_SET); + if (fgetc(ifp) == 0xff && fgetc(ifp) == 0xd8) { + thumb_offset = off+28; + thumb_length = len-28; + write_thumb = &CLASS jpeg_thumb; + } + if (++img == 2 && !thumb_length) { + thumb_offset = off+24; + thumb_width = wide; + thumb_height = high; + write_thumb = &CLASS foveon_thumb; + } + break; + case 0x464d4143: /* CAMF */ + meta_offset = off+24; + meta_length = len-28; + if (meta_length > 0x20000) + meta_length = 0x20000; + break; + case 0x504f5250: /* PROP */ + pent = (get4(),get4()); + fseek (ifp, 12, SEEK_CUR); + off += pent*8 + 24; + if ((unsigned) pent > 256) pent=256; + for (i=0; i < pent*2; i++) + poff[0][i] = off + get4()*2; + for (i=0; i < pent; i++) { + foveon_gets (poff[i][0], name, 64); + foveon_gets (poff[i][1], value, 64); + if (!strcmp (name, "ISO")) + iso_speed = atoi(value); + if (!strcmp (name, "CAMMANUF")) + strcpy (make, value); + if (!strcmp (name, "CAMMODEL")) + strcpy (model, value); + if (!strcmp (name, "WB_DESC")) + strcpy (model2, value); + if (!strcmp (name, "TIME")) + timestamp = atoi(value); + if (!strcmp (name, "EXPTIME")) + shutter = atoi(value) / 1000000.0; + if (!strcmp (name, "APERTURE")) + aperture = atof(value); + if (!strcmp (name, "FLENGTH")) + focal_len = atof(value); + } +#ifdef LOCALTIME + timestamp = mktime (gmtime (×tamp)); +#endif + } + fseek (ifp, save, SEEK_SET); + } + is_foveon = 1; +} + +/* + Thanks to Adobe for providing these excellent CAM -> XYZ matrices! + */ +void CLASS adobe_coeff (char *make, char *model) +{ + static const struct { + const char *prefix; + short black, trans[12]; + } table[] = { + { "Apple QuickTake", 0, /* DJC */ + { 17576,-3191,-3318,5210,6733,-1942,9031,1280,-124 } }, + { "Canon EOS D2000", 0, + { 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 } }, + { "Canon EOS D6000", 0, + { 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } }, + { "Canon EOS D30", 0, + { 9805,-2689,-1312,-5803,13064,3068,-2438,3075,8775 } }, + { "Canon EOS D60", 0, + { 6188,-1341,-890,-7168,14489,2937,-2640,3228,8483 } }, + { "Canon EOS 5D", 0, + { 6347,-479,-972,-8297,15954,2480,-1968,2131,7649 } }, + { "Canon EOS 20Da", 0, + { 14155,-5065,-1382,-6550,14633,2039,-1623,1824,6561 } }, + { "Canon EOS 20D", 0, + { 6599,-537,-891,-8071,15783,2424,-1983,2234,7462 } }, + { "Canon EOS 30D", 0, + { 6257,-303,-1000,-7880,15621,2396,-1714,1904,7046 } }, + { "Canon EOS 40D", 0, + { 6071,-747,-856,-7653,15365,2441,-2025,2553,7315 } }, + { "Canon EOS 350D", 0, + { 6018,-617,-965,-8645,15881,2975,-1530,1719,7642 } }, + { "Canon EOS 400D", 0, + { 7054,-1501,-990,-8156,15544,2812,-1278,1414,7796 } }, + { "Canon EOS-1Ds Mark III", 0, + { 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } }, + { "Canon EOS-1Ds Mark II", 0, + { 6517,-602,-867,-8180,15926,2378,-1618,1771,7633 } }, + { "Canon EOS-1D Mark II N", 0, + { 6240,-466,-822,-8180,15825,2500,-1801,1938,8042 } }, + { "Canon EOS-1D Mark III", 0, + { 6291,-540,-976,-8350,16145,2311,-1714,1858,7326 } }, + { "Canon EOS-1D Mark II", 0, + { 6264,-582,-724,-8312,15948,2504,-1744,1919,8664 } }, + { "Canon EOS-1DS", 0, + { 4374,3631,-1743,-7520,15212,2472,-2892,3632,8161 } }, + { "Canon EOS-1D", 0, + { 6806,-179,-1020,-8097,16415,1687,-3267,4236,7690 } }, + { "Canon EOS", 0, + { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, + { "Canon PowerShot A50", 0, + { -5300,9846,1776,3436,684,3939,-5540,9879,6200,-1404,11175,217 } }, + { "Canon PowerShot A5", 0, + { -4801,9475,1952,2926,1611,4094,-5259,10164,5947,-1554,10883,547 } }, + { "Canon PowerShot G1", 0, + { -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } }, + { "Canon PowerShot G2", 0, + { 9087,-2693,-1049,-6715,14382,2537,-2291,2819,7790 } }, + { "Canon PowerShot G3", 0, + { 9212,-2781,-1073,-6573,14189,2605,-2300,2844,7664 } }, + { "Canon PowerShot G5", 0, + { 9757,-2872,-933,-5972,13861,2301,-1622,2328,7212 } }, + { "Canon PowerShot G6", 0, + { 9877,-3775,-871,-7613,14807,3072,-1448,1305,7485 } }, + { "Canon PowerShot G9", 0, + { 7368,-2141,-598,-5621,13254,2625,-1418,1696,5743 } }, + { "Canon PowerShot Pro1", 0, + { 10062,-3522,-999,-7643,15117,2730,-765,817,7323 } }, + { "Canon PowerShot Pro70", 34, + { -4155,9818,1529,3939,-25,4522,-5521,9870,6610,-2238,10873,1342 } }, + { "Canon PowerShot Pro90", 0, + { -4963,9896,2235,4642,-987,4294,-5162,10011,5859,-1770,11230,577 } }, + { "Canon PowerShot S30", 0, + { 10566,-3652,-1129,-6552,14662,2006,-2197,2581,7670 } }, + { "Canon PowerShot S40", 0, + { 8510,-2487,-940,-6869,14231,2900,-2318,2829,9013 } }, + { "Canon PowerShot S45", 0, + { 8163,-2333,-955,-6682,14174,2751,-2077,2597,8041 } }, + { "Canon PowerShot S50", 0, + { 8882,-2571,-863,-6348,14234,2288,-1516,2172,6569 } }, + { "Canon PowerShot S60", 0, + { 8795,-2482,-797,-7804,15403,2573,-1422,1996,7082 } }, + { "Canon PowerShot S70", 0, + { 9976,-3810,-832,-7115,14463,2906,-901,989,7889 } }, + { "Canon PowerShot A610", 0, /* DJC */ + { 15591,-6402,-1592,-5365,13198,2168,-1300,1824,5075 } }, + { "Canon PowerShot A620", 0, /* DJC */ + { 15265,-6193,-1558,-4125,12116,2010,-888,1639,5220 } }, + { "Canon PowerShot A640", 0, /* DJC */ + { 13124,-5329,-1390,-3602,11658,1944,-1612,2863,4885 } }, + { "Canon PowerShot A650", 0, /* DJC */ + { 9427,-3036,-959,-2581,10671,1911,-1039,1982,4430 } }, + { "Canon PowerShot S3 IS", 0, /* DJC */ + { 14062,-5199,-1446,-4712,12470,2243,-1286,2028,4836 } }, + { "CINE 650", 0, + { 3390,480,-500,-800,3610,340,-550,2336,1192 } }, + { "CINE 660", 0, + { 3390,480,-500,-800,3610,340,-550,2336,1192 } }, + { "CINE", 0, + { 20183,-4295,-423,-3940,15330,3985,-280,4870,9800 } }, + { "Contax N Digital", 0, + { 7777,1285,-1053,-9280,16543,2916,-3677,5679,7060 } }, + { "EPSON R-D1", 0, + { 6827,-1878,-732,-8429,16012,2564,-704,592,7145 } }, + { "FUJIFILM FinePix E550", 0, + { 11044,-3888,-1120,-7248,15168,2208,-1531,2277,8069 } }, + { "FUJIFILM FinePix E900", 0, + { 9183,-2526,-1078,-7461,15071,2574,-2022,2440,8639 } }, + { "FUJIFILM FinePix F8", 0, + { 11044,-3888,-1120,-7248,15168,2208,-1531,2277,8069 } }, + { "FUJIFILM FinePix F7", 0, + { 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } }, + { "FUJIFILM FinePix S20Pro", 0, + { 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } }, + { "FUJIFILM FinePix S2Pro", 128, + { 12492,-4690,-1402,-7033,15423,1647,-1507,2111,7697 } }, + { "FUJIFILM FinePix S3Pro", 0, + { 11807,-4612,-1294,-8927,16968,1988,-2120,2741,8006 } }, + { "FUJIFILM FinePix S5Pro", 0, + { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } }, + { "FUJIFILM FinePix S5000", 0, + { 8754,-2732,-1019,-7204,15069,2276,-1702,2334,6982 } }, + { "FUJIFILM FinePix S5100", 0, + { 11940,-4431,-1255,-6766,14428,2542,-993,1165,7421 } }, + { "FUJIFILM FinePix S5500", 0, + { 11940,-4431,-1255,-6766,14428,2542,-993,1165,7421 } }, + { "FUJIFILM FinePix S5200", 0, + { 9636,-2804,-988,-7442,15040,2589,-1803,2311,8621 } }, + { "FUJIFILM FinePix S5600", 0, + { 9636,-2804,-988,-7442,15040,2589,-1803,2311,8621 } }, + { "FUJIFILM FinePix S6", 0, + { 12628,-4887,-1401,-6861,14996,1962,-2198,2782,7091 } }, + { "FUJIFILM FinePix S7000", 0, + { 10190,-3506,-1312,-7153,15051,2238,-2003,2399,7505 } }, + { "FUJIFILM FinePix S9000", 0, + { 10491,-3423,-1145,-7385,15027,2538,-1809,2275,8692 } }, + { "FUJIFILM FinePix S9500", 0, + { 10491,-3423,-1145,-7385,15027,2538,-1809,2275,8692 } }, + { "FUJIFILM FinePix S9100", 0, + { 12343,-4515,-1285,-7165,14899,2435,-1895,2496,8800 } }, + { "FUJIFILM FinePix S9600", 0, + { 12343,-4515,-1285,-7165,14899,2435,-1895,2496,8800 } }, + { "FUJIFILM IS-1", 0, + { 21461,-10807,-1441,-2332,10599,1999,289,875,7703 } }, + { "Imacon Ixpress", 0, /* DJC */ + { 7025,-1415,-704,-5188,13765,1424,-1248,2742,6038 } }, + { "KODAK NC2000", 0, + { 13891,-6055,-803,-465,9919,642,2121,82,1291 } }, + { "Kodak DCS315C", 8, + { 17523,-4827,-2510,756,8546,-137,6113,1649,2250 } }, + { "Kodak DCS330C", 8, + { 20620,-7572,-2801,-103,10073,-396,3551,-233,2220 } }, + { "KODAK DCS420", 0, + { 10868,-1852,-644,-1537,11083,484,2343,628,2216 } }, + { "KODAK DCS460", 0, + { 10592,-2206,-967,-1944,11685,230,2206,670,1273 } }, + { "KODAK EOSDCS1", 0, + { 10592,-2206,-967,-1944,11685,230,2206,670,1273 } }, + { "KODAK EOSDCS3B", 0, + { 9898,-2700,-940,-2478,12219,206,1985,634,1031 } }, + { "Kodak DCS520C", 180, + { 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 } }, + { "Kodak DCS560C", 188, + { 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } }, + { "Kodak DCS620C", 180, + { 23617,-10175,-3149,-2054,11749,-272,2586,-489,3453 } }, + { "Kodak DCS620X", 185, + { 13095,-6231,154,12221,-21,-2137,895,4602,2258 } }, + { "Kodak DCS660C", 214, + { 18244,-6351,-2739,-791,11193,-521,3711,-129,2802 } }, + { "Kodak DCS720X", 0, + { 11775,-5884,950,9556,1846,-1286,-1019,6221,2728 } }, + { "Kodak DCS760C", 0, + { 16623,-6309,-1411,-4344,13923,323,2285,274,2926 } }, + { "Kodak DCS Pro SLR", 0, + { 5494,2393,-232,-6427,13850,2846,-1876,3997,5445 } }, + { "Kodak DCS Pro 14nx", 0, + { 5494,2393,-232,-6427,13850,2846,-1876,3997,5445 } }, + { "Kodak DCS Pro 14", 0, + { 7791,3128,-776,-8588,16458,2039,-2455,4006,6198 } }, + { "Kodak ProBack645", 0, + { 16414,-6060,-1470,-3555,13037,473,2545,122,4948 } }, + { "Kodak ProBack", 0, + { 21179,-8316,-2918,-915,11019,-165,3477,-180,4210 } }, + { "KODAK P712", 0, + { 9658,-3314,-823,-5163,12695,2768,-1342,1843,6044 } }, + { "KODAK P850", 0, + { 10511,-3836,-1102,-6946,14587,2558,-1481,1792,6246 } }, + { "KODAK P880", 0, + { 12805,-4662,-1376,-7480,15267,2360,-1626,2194,7904 } }, + { "Leaf CMost", 0, + { 3952,2189,449,-6701,14585,2275,-4536,7349,6536 } }, + { "Leaf Valeo 6", 0, + { 3952,2189,449,-6701,14585,2275,-4536,7349,6536 } }, + { "Leaf Aptus 54S", 0, + { 8236,1746,-1314,-8251,15953,2428,-3673,5786,5771 } }, + { "Leaf Aptus 65", 0, + { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } }, + { "Leaf Aptus 75", 0, + { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } }, + { "Leaf", 0, + { 8236,1746,-1314,-8251,15953,2428,-3673,5786,5771 } }, + { "Mamiya ZD", 0, + { 7645,2579,-1363,-8689,16717,2015,-3712,5941,5961 } }, + { "Micron 2010", 110, /* DJC */ + { 16695,-3761,-2151,155,9682,163,3433,951,4904 } }, + { "Minolta DiMAGE 5", 0, + { 8983,-2942,-963,-6556,14476,2237,-2426,2887,8014 } }, + { "Minolta DiMAGE 7Hi", 0, + { 11368,-3894,-1242,-6521,14358,2339,-2475,3056,7285 } }, + { "Minolta DiMAGE 7", 0, + { 9144,-2777,-998,-6676,14556,2281,-2470,3019,7744 } }, + { "Minolta DiMAGE A1", 0, + { 9274,-2547,-1167,-8220,16323,1943,-2273,2720,8340 } }, + { "MINOLTA DiMAGE A200", 0, + { 8560,-2487,-986,-8112,15535,2771,-1209,1324,7743 } }, + { "Minolta DiMAGE A2", 0, + { 9097,-2726,-1053,-8073,15506,2762,-966,981,7763 } }, + { "Minolta DiMAGE Z2", 0, /* DJC */ + { 11280,-3564,-1370,-4655,12374,2282,-1423,2168,5396 } }, + { "MINOLTA DYNAX 5", 0, + { 10284,-3283,-1086,-7957,15762,2316,-829,882,6644 } }, + { "MINOLTA DYNAX 7", 0, + { 10239,-3104,-1099,-8037,15727,2451,-927,925,6871 } }, + { "NIKON D100", 0, + { 5902,-933,-782,-8983,16719,2354,-1402,1455,6464 } }, + { "NIKON D1H", 0, + { 7577,-2166,-926,-7454,15592,1934,-2377,2808,8606 } }, + { "NIKON D1X", 0, + { 7702,-2245,-975,-9114,17242,1875,-2679,3055,8521 } }, + { "NIKON D1", 0, /* multiplied by 2.218750, 1.0, 1.148438 */ + { 16772,-4726,-2141,-7611,15713,1972,-2846,3494,9521 } }, + { "NIKON D2H", 0, + { 5710,-901,-615,-8594,16617,2024,-2975,4120,6830 } }, + { "NIKON D2X", 0, + { 10231,-2769,-1255,-8301,15900,2552,-797,680,7148 } }, + { "NIKON D40X", 0, + { 8819,-2543,-911,-9025,16928,2151,-1329,1213,8449 } }, + { "NIKON D40", 0, + { 6992,-1668,-806,-8138,15748,2543,-874,850,7897 } }, + { "NIKON D50", 0, + { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, + { "NIKON D70", 0, + { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, + { "NIKON D80", 0, + { 8629,-2410,-883,-9055,16940,2171,-1490,1363,8520 } }, + { "NIKON D200", 0, + { 8367,-2248,-763,-8758,16447,2422,-1527,1550,8053 } }, + { "NIKON D300", 0, + { 9030,-1992,-715,-8465,16302,2255,-2689,3217,8069 } }, + { "NIKON D3", 0, + { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } }, + { "NIKON E950", 0, /* DJC */ + { -3746,10611,1665,9621,-1734,2114,-2389,7082,3064,3406,6116,-244 } }, + { "NIKON E995", 0, /* copied from E5000 */ + { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, + { "NIKON E2100", 0, /* copied from Z2, new white balance */ + { 13142,-4152,-1596,-4655,12374,2282,-1769,2696,6711} }, + { "NIKON E2500", 0, + { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, + { "NIKON E4300", 0, /* copied from Minolta DiMAGE Z2 */ + { 11280,-3564,-1370,-4655,12374,2282,-1423,2168,5396 } }, + { "NIKON E4500", 0, + { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, + { "NIKON E5000", 0, + { -5547,11762,2189,5814,-558,3342,-4924,9840,5949,688,9083,96 } }, + { "NIKON E5400", 0, + { 9349,-2987,-1001,-7919,15766,2266,-2098,2680,6839 } }, + { "NIKON E5700", 0, + { -5368,11478,2368,5537,-113,3148,-4969,10021,5782,778,9028,211 } }, + { "NIKON E8400", 0, + { 7842,-2320,-992,-8154,15718,2599,-1098,1342,7560 } }, + { "NIKON E8700", 0, + { 8489,-2583,-1036,-8051,15583,2643,-1307,1407,7354 } }, + { "NIKON E8800", 0, + { 7971,-2314,-913,-8451,15762,2894,-1442,1520,7610 } }, + { "OLYMPUS C5050", 0, + { 10508,-3124,-1273,-6079,14294,1901,-1653,2306,6237 } }, + { "OLYMPUS C5060", 0, + { 10445,-3362,-1307,-7662,15690,2058,-1135,1176,7602 } }, + { "OLYMPUS C7070", 0, + { 10252,-3531,-1095,-7114,14850,2436,-1451,1723,6365 } }, + { "OLYMPUS C70", 0, + { 10793,-3791,-1146,-7498,15177,2488,-1390,1577,7321 } }, + { "OLYMPUS C80", 0, + { 8606,-2509,-1014,-8238,15714,2703,-942,979,7760 } }, + { "OLYMPUS E-10", 0, + { 12745,-4500,-1416,-6062,14542,1580,-1934,2256,6603 } }, + { "OLYMPUS E-1", 0, + { 11846,-4767,-945,-7027,15878,1089,-2699,4122,8311 } }, + { "OLYMPUS E-20", 0, + { 13173,-4732,-1499,-5807,14036,1895,-2045,2452,7142 } }, + { "OLYMPUS E-300", 0, + { 7828,-1761,-348,-5788,14071,1830,-2853,4518,6557 } }, + { "OLYMPUS E-330", 0, + { 8961,-2473,-1084,-7979,15990,2067,-2319,3035,8249 } }, + { "OLYMPUS E-3", 0, + { 9487,-2875,-1115,-7533,15606,2010,-1618,2100,7389 } }, + { "OLYMPUS E-400", 0, + { 6169,-1483,-21,-7107,14761,2536,-2904,3580,8568 } }, + { "OLYMPUS E-410", 0, + { 8856,-2582,-1026,-7761,15766,2082,-2009,2575,7469 } }, + { "OLYMPUS E-500", 0, + { 8136,-1968,-299,-5481,13742,1871,-2556,4205,6630 } }, + { "OLYMPUS E-510", 0, + { 8785,-2529,-1033,-7639,15624,2112,-1783,2300,7817 } }, + { "OLYMPUS SP350", 0, + { 12078,-4836,-1069,-6671,14306,2578,-786,939,7418 } }, + { "OLYMPUS SP3", 0, + { 11766,-4445,-1067,-6901,14421,2707,-1029,1217,7572 } }, + { "OLYMPUS SP500UZ", 0, + { 9493,-3415,-666,-5211,12334,3260,-1548,2262,6482 } }, + { "OLYMPUS SP510UZ", 0, + { 10593,-3607,-1010,-5881,13127,3084,-1200,1805,6721 } }, + { "OLYMPUS SP550UZ", 0, + { 11597,-4006,-1049,-5432,12799,2957,-1029,1750,6516 } }, + { "OLYMPUS SP560UZ", 0, + { 10915,-3677,-982,-5587,12986,2911,-1168,1968,6223 } }, + { "PENTAX *ist DL2", 0, + { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, + { "PENTAX *ist DL", 0, + { 10829,-2838,-1115,-8339,15817,2696,-837,680,11939 } }, + { "PENTAX *ist DS2", 0, + { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, + { "PENTAX *ist DS", 0, + { 10371,-2333,-1206,-8688,16231,2602,-1230,1116,11282 } }, + { "PENTAX *ist D", 0, + { 9651,-2059,-1189,-8881,16512,2487,-1460,1345,10687 } }, + { "PENTAX K10D", 0, + { 9566,-2863,-803,-7170,15172,2112,-818,803,9705 } }, + { "PENTAX K1", 0, + { 11095,-3157,-1324,-8377,15834,2720,-1108,947,11688 } }, + { "Panasonic DMC-FZ8", 0, + { 8986,-2755,-802,-6341,13575,3077,-1476,2144,6379 } }, + { "Panasonic DMC-FZ18", 0, + { 9932,-3060,-935,-5809,13331,2753,-1267,2155,5575 } }, + { "Panasonic DMC-FZ30", 0, + { 10976,-4029,-1141,-7918,15491,2600,-1670,2071,8246 } }, + { "Panasonic DMC-FZ50", 0, /* aka "LEICA V-LUX1" */ + { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, + { "Panasonic DMC-L10", 0, + { 8025,-1942,-1050,-7920,15904,2100,-2456,3005,7039 } }, + { "Panasonic DMC-L1", 0, /* aka "LEICA DIGILUX 3" */ + { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, + { "Panasonic DMC-LC1", 0, /* aka "LEICA DIGILUX 2" */ + { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, + { "Panasonic DMC-LX1", 0, /* aka "LEICA D-LUX2" */ + { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, + { "Panasonic DMC-LX2", 0, /* aka "LEICA D-LUX3" */ + { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, + { "Phase One H 20", 0, /* DJC */ + { 1313,1855,-109,-6715,15908,808,-327,1840,6020 } }, + { "Phase One P 2", 0, + { 2905,732,-237,-8134,16626,1476,-3038,4253,7517 } }, + { "Phase One P 30", 0, + { 4516,-245,-37,-7020,14976,2173,-3206,4671,7087 } }, + { "Phase One P 45", 0, + { 5053,-24,-117,-5684,14076,1702,-2619,4492,5849 } }, + { "SAMSUNG GX-1", 0, + { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, + { "Sinar", 0, /* DJC */ + { 16442,-2956,-2422,-2877,12128,750,-1136,6066,4559 } }, + { "SONY DSC-F828", 491, + { 7924,-1910,-777,-8226,15459,2998,-1517,2199,6818,-7242,11401,3481 } }, + { "SONY DSC-R1", 512, + { 8512,-2641,-694,-8042,15670,2526,-1821,2117,7414 } }, + { "SONY DSC-V3", 0, + { 7511,-2571,-692,-7894,15088,3060,-948,1111,8128 } }, + { "SONY DSLR-A100", 0, + { 9437,-2811,-774,-8405,16215,2290,-710,596,7181 } }, + { "SONY DSLR-A200", 0, + { 9847,-3091,-928,-8485,16345,2225,-715,595,7103 } }, + { "SONY DSLR-A350", 0, /* copied from above */ + { 9847,-3091,-928,-8485,16345,2225,-715,595,7103 } }, + { "SONY DSLR-A700", 254, + { 5775,-805,-359,-8574,16295,2391,-1943,2341,7249 } } + }; + double cam_xyz[4][3]; + char name[130]; + int i, j; + + sprintf (name, "%s %s", make, model); + for (i=0; i < sizeof table / sizeof *table; i++) + if (!strncmp (name, table[i].prefix, strlen(table[i].prefix))) { + if (table[i].black) + black = table[i].black; + for (j=0; j < 12; j++) + cam_xyz[0][j] = table[i].trans[j] / 10000.0; + cam_xyz_coeff (cam_xyz); + break; + } +} + +void CLASS simple_coeff (int index) +{ + static const float table[][12] = { + /* index 0 -- all Foveon cameras */ + { 1.4032,-0.2231,-0.1016,-0.5263,1.4816,0.017,-0.0112,0.0183,0.9113 }, + /* index 1 -- Kodak DC20 and DC25 */ + { 2.25,0.75,-1.75,-0.25,-0.25,0.75,0.75,-0.25,-0.25,-1.75,0.75,2.25 }, + /* index 2 -- Logitech Fotoman Pixtura */ + { 1.893,-0.418,-0.476,-0.495,1.773,-0.278,-1.017,-0.655,2.672 }, + /* index 3 -- Nikon E880, E900, and E990 */ + { -1.936280, 1.800443, -1.448486, 2.584324, + 1.405365, -0.524955, -0.289090, 0.408680, + -1.204965, 1.082304, 2.941367, -1.818705 } + }; + int i, c; + + for (raw_color = i=0; i < 3; i++) + FORCC rgb_cam[i][c] = table[index][i*colors+c]; +} + +short CLASS guess_byte_order (int words) +{ + uchar test[4][2]; + int t=2, msb; + double diff, sum[2] = {0,0}; + + fread (test[0], 2, 2, ifp); + for (words-=2; words--; ) { + fread (test[t], 2, 1, ifp); + for (msb=0; msb < 2; msb++) { + diff = (test[t^2][msb] << 8 | test[t^2][!msb]) + - (test[t ][msb] << 8 | test[t ][!msb]); + sum[msb] += diff*diff; + } + t = (t+1) & 3; + } + return sum[0] < sum[1] ? 0x4d4d : 0x4949; +} + +/* + Identify which camera created this file, and set global variables + accordingly. + */ +void CLASS identify() +{ + char head[32], *cp; + unsigned hlen, fsize, i, c, is_canon; + struct jhead jh; + static const struct { + int fsize; + char make[12], model[19], withjpeg; + } table[] = { + { 62464, "Kodak", "DC20" ,0 }, + { 124928, "Kodak", "DC20" ,0 }, + { 1652736, "Kodak", "DCS200" ,0 }, + { 4159302, "Kodak", "C330" ,0 }, + { 4162462, "Kodak", "C330" ,0 }, + { 311696, "ST Micro", "STV680 VGA" ,0 }, /* SPYz */ + { 614400, "Kodak", "KAI-0340" ,0 }, + { 787456, "Creative", "PC-CAM 600" ,0 }, + { 1138688, "Minolta", "RD175" ,0 }, + { 3840000, "Foculus", "531C" ,0 }, + { 786432, "AVT", "F-080C" ,0 }, + { 1447680, "AVT", "F-145C" ,0 }, + { 1920000, "AVT", "F-201C" ,0 }, + { 5067304, "AVT", "F-510C" ,0 }, + { 10134608, "AVT", "F-510C" ,0 }, + { 16157136, "AVT", "F-810C" ,0 }, + { 1409024, "Sony", "XCD-SX910CR",0 }, + { 2818048, "Sony", "XCD-SX910CR",0 }, + { 3884928, "Micron", "2010" ,0 }, + { 6624000, "Pixelink", "A782" ,0 }, + { 13248000, "Pixelink", "A782" ,0 }, + { 6291456, "RoverShot","3320AF" ,0 }, + { 6553440, "Canon", "PowerShot A460",0 }, + { 6653280, "Canon", "PowerShot A530",0 }, + { 6573120, "Canon", "PowerShot A610",0 }, + { 9219600, "Canon", "PowerShot A620",0 }, + { 10341600, "Canon", "PowerShot A720",0 }, + { 10383120, "Canon", "PowerShot A630",0 }, + { 12945240, "Canon", "PowerShot A640",0 }, + { 15636240, "Canon", "PowerShot A650",0 }, + { 7710960, "Canon", "PowerShot S3 IS",0 }, + { 5939200, "OLYMPUS", "C770UZ" ,0 }, + { 1581060, "NIKON", "E900" ,1 }, /* or E900s,E910 */ + { 2465792, "NIKON", "E950" ,1 }, /* or E800,E700 */ + { 2940928, "NIKON", "E2100" ,1 }, /* or E2500 */ + { 4771840, "NIKON", "E990" ,1 }, /* or E995, Oly C3030Z */ + { 4775936, "NIKON", "E3700" ,1 }, /* or Optio 33WR */ + { 5869568, "NIKON", "E4300" ,1 }, /* or DiMAGE Z2 */ + { 5865472, "NIKON", "E4500" ,1 }, + { 7438336, "NIKON", "E5000" ,1 }, /* or E5700 */ + { 8998912, "NIKON", "COOLPIX S6" ,1 }, + { 1976352, "CASIO", "QV-2000UX" ,1 }, + { 3217760, "CASIO", "QV-3*00EX" ,1 }, + { 6218368, "CASIO", "QV-5700" ,1 }, + { 6054400, "CASIO", "QV-R41" ,1 }, + { 7530816, "CASIO", "QV-R51" ,1 }, + { 7684000, "CASIO", "QV-4000" ,1 }, + { 4948608, "CASIO", "EX-S100" ,1 }, + { 7542528, "CASIO", "EX-Z50" ,1 }, + { 7753344, "CASIO", "EX-Z55" ,1 }, + { 7426656, "CASIO", "EX-P505" ,1 }, + { 9313536, "CASIO", "EX-P600" ,1 }, + { 10979200, "CASIO", "EX-P700" ,1 }, + { 3178560, "PENTAX", "Optio S" ,1 }, + { 4841984, "PENTAX", "Optio S" ,1 }, + { 6114240, "PENTAX", "Optio S4" ,1 }, /* or S4i, CASIO EX-Z4 */ + { 10702848, "PENTAX", "Optio 750Z" ,1 }, + { 12582980, "Sinar", "" ,0 }, + { 33292868, "Sinar", "" ,0 }, + { 44390468, "Sinar", "" ,0 } }; + static const char *corp[] = + { "Canon", "NIKON", "EPSON", "KODAK", "Kodak", "OLYMPUS", "PENTAX", + "MINOLTA", "Minolta", "Konica", "CASIO", "Sinar", "Phase One", + "SAMSUNG", "Mamiya" }; + + tiff_flip = flip = filters = -1; /* 0 is valid, so -1 is unknown */ + raw_height = raw_width = fuji_width = fuji_layout = cr2_slice[0] = 0; + maximum = height = width = top_margin = left_margin = 0; + cdesc[0] = desc[0] = artist[0] = make[0] = model[0] = model2[0] = 0; + iso_speed = shutter = aperture = focal_len = unique_id = 0; + memset (gpsdata, 0, sizeof gpsdata); + memset (white, 0, sizeof white); + thumb_offset = thumb_length = thumb_width = thumb_height = 0; + load_raw = thumb_load_raw = 0; + write_thumb = &CLASS jpeg_thumb; + data_offset = meta_length = tiff_bps = tiff_compress = 0; + kodak_cbpp = zero_after_ff = dng_version = 0; + timestamp = shot_order = tiff_samples = black = is_foveon = 0; + mix_green = profile_length = data_error = zero_is_bad = 0; + pixel_aspect = is_raw = raw_color = use_gamma = 1; + tile_width = tile_length = INT_MAX; + for (i=0; i < 4; i++) { + cam_mul[i] = i == 1; + pre_mul[i] = i < 3; + FORC3 cmatrix[c][i] = 0; + FORC3 rgb_cam[c][i] = c == i; + } + colors = 3; + tiff_bps = 12; + for (i=0; i < 0x4000; i++) curve[i] = i; + + order = get2(); + hlen = get4(); + fseek (ifp, 0, SEEK_SET); + fread (head, 1, 32, ifp); + fseek (ifp, 0, SEEK_END); + fsize = ftell(ifp); + if ((cp = (char *) memmem (head, 32, "MMMM", 4)) || + (cp = (char *) memmem (head, 32, "IIII", 4))) { + parse_phase_one (cp-head); + if (cp-head) parse_tiff(0); + } else if (order == 0x4949 || order == 0x4d4d) { + if (!memcmp (head+6,"HEAPCCDR",8)) { + data_offset = hlen; + parse_ciff (hlen, fsize - hlen); + } else { + parse_tiff(0); + } + } else if (!memcmp (head,"\xff\xd8\xff\xe1",4) && + !memcmp (head+6,"Exif",4)) { + fseek (ifp, 4, SEEK_SET); + data_offset = 4 + get2(); + fseek (ifp, data_offset, SEEK_SET); + if (fgetc(ifp) != 0xff) + parse_tiff(12); + thumb_offset = 0; + } else if (!memcmp (head+25,"ARECOYK",7)) { + strcpy (make, "Contax"); + strcpy (model,"N Digital"); + fseek (ifp, 33, SEEK_SET); + get_timestamp(1); + fseek (ifp, 60, SEEK_SET); + FORC4 cam_mul[c ^ (c >> 1)] = get4(); + } else if (!strcmp (head, "PXN")) { + strcpy (make, "Logitech"); + strcpy (model,"Fotoman Pixtura"); + } else if (!strcmp (head, "qktk")) { + strcpy (make, "Apple"); + strcpy (model,"QuickTake 100"); + } else if (!strcmp (head, "qktn")) { + strcpy (make, "Apple"); + strcpy (model,"QuickTake 150"); + } else if (!memcmp (head,"FUJIFILM",8)) { + fseek (ifp, 84, SEEK_SET); + thumb_offset = get4(); + thumb_length = get4(); + fseek (ifp, 92, SEEK_SET); + parse_fuji (get4()); + if (thumb_offset > 120) { + fseek (ifp, 120, SEEK_SET); + is_raw += (i = get4()) && 1; + if (is_raw == 2 && shot_select) + parse_fuji (i); + } + fseek (ifp, 100, SEEK_SET); + data_offset = get4(); + parse_tiff (thumb_offset+12); + } else if (!memcmp (head,"RIFF",4)) { + fseek (ifp, 0, SEEK_SET); + parse_riff(); + } else if (!memcmp (head,"\0\001\0\001\0@",6)) { + fseek (ifp, 6, SEEK_SET); + fread (make, 1, 8, ifp); + fread (model, 1, 8, ifp); + fread (model2, 1, 16, ifp); + data_offset = get2(); + get2(); + raw_width = get2(); + raw_height = get2(); + load_raw = nokia_load_raw; + filters = 0x61616161; + } else if (!memcmp (head,"DSC-Image",9)) + parse_rollei(); + else if (!memcmp (head,"PWAD",4)) + parse_sinar_ia(); + else if (!memcmp (head,"\0MRM",4)) + parse_minolta(0); + else if (!memcmp (head,"FOVb",4)) + parse_foveon(); + else if (!memcmp (head,"CI",2)) + parse_cine(); + else + for (i=0; i < sizeof table / sizeof *table; i++) + if (fsize == table[i].fsize) { + strcpy (make, table[i].make ); + strcpy (model, table[i].model); + if (table[i].withjpeg) + parse_external_jpeg(); + } + if (make[0] == 0) parse_smal (0, fsize); + if (make[0] == 0) parse_jpeg (is_raw = 0); + + for (i=0; i < sizeof corp / sizeof *corp; i++) + if (strstr (make, corp[i])) /* Simplify company names */ + strcpy (make, corp[i]); + if (!strncmp (make,"KODAK",5)) + make[16] = model[16] = 0; + cp = make + strlen(make); /* Remove trailing spaces */ + while (*--cp == ' ') *cp = 0; + cp = model + strlen(model); + while (*--cp == ' ') *cp = 0; + i = strlen(make); /* Remove make from model */ + if (!strncasecmp (model, make, i) && model[i++] == ' ') + memmove (model, model+i, 64-i); + if (!strncmp (model,"Digital Camera ",15)) + strcpy (model, model+15); + desc[511] = artist[63] = make[63] = model[63] = model2[63] = 0; + if (!is_raw) goto notraw; + + if (!maximum) maximum = (1 << tiff_bps) - 1; + if (!height) height = raw_height; + if (!width) width = raw_width; + if (fuji_width) { + width = height + fuji_width; + height = width - 1; + pixel_aspect = 1; + } + if (height == 2624 && width == 3936) /* Pentax K10D and Samsung GX10 */ + { height = 2616; width = 3896; } + if (height == 3136 && width == 4864) /* Pentax K20D */ + { height = 3124; width = 4688; } + if (dng_version) { + if (filters == UINT_MAX) filters = 0; + if (filters) is_raw = tiff_samples; + else colors = tiff_samples; + if (tiff_compress == 1) + load_raw = &CLASS adobe_dng_load_raw_nc; + if (tiff_compress == 7) + load_raw = &CLASS adobe_dng_load_raw_lj; + goto dng_skip; + } + if ((is_canon = !strcmp(make,"Canon"))) { + load_raw = memcmp (head+6,"HEAPCCDR",8) ? + &CLASS lossless_jpeg_load_raw : &CLASS canon_compressed_load_raw; + maximum = 0xfff; + } + if (!strcmp(make,"NIKON") && !load_raw) + load_raw = &CLASS nikon_load_raw; + +/* Set parameters based on camera name (for non-DNG files). */ + + if (is_foveon) { + if (height*2 < width) pixel_aspect = 0.5; + if (height > width) pixel_aspect = 2; + filters = 0; + load_raw = &CLASS foveon_load_raw; + simple_coeff(0); + } else if (is_canon && tiff_samples == 4) { + filters = 0; + load_raw = &CLASS canon_sraw_load_raw; + } else if (!strcmp(model,"PowerShot 600")) { + height = 613; + width = 854; + raw_width = 896; + pixel_aspect = 607/628.0; + colors = 4; + filters = 0xe1e4e1e4; + load_raw = &CLASS canon_600_load_raw; + } else if (!strcmp(model,"PowerShot A5") || + !strcmp(model,"PowerShot A5 Zoom")) { + height = 773; + width = 960; + raw_width = 992; + pixel_aspect = 256/235.0; + colors = 4; + filters = 0x1e4e1e4e; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot A50")) { + height = 968; + width = 1290; + raw_width = 1320; + colors = 4; + filters = 0x1b4e4b1e; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot Pro70")) { + height = 1024; + width = 1552; + colors = 4; + filters = 0x1e4b4e1b; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot A460")) { + height = 1960; + width = 2616; + raw_height = 1968; + raw_width = 2664; + top_margin = 4; + left_margin = 4; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot A530")) { + height = 1984; + width = 2620; + raw_height = 1992; + raw_width = 2672; + top_margin = 6; + left_margin = 10; + load_raw = &CLASS canon_a5_load_raw; + raw_color = 0; + } else if (!strcmp(model,"PowerShot A610")) { + if (canon_s2is()) strcpy (model+10, "S2 IS"); + height = 1960; + width = 2616; + raw_height = 1968; + raw_width = 2672; + top_margin = 8; + left_margin = 12; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot A620")) { + height = 2328; + width = 3112; + raw_height = 2340; + raw_width = 3152; + top_margin = 12; + left_margin = 36; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot A720")) { + height = 2472; + width = 3298; + raw_height = 2480; + raw_width = 3336; + top_margin = 5; + left_margin = 6; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot A630")) { + height = 2472; + width = 3288; + raw_height = 2484; + raw_width = 3344; + top_margin = 6; + left_margin = 12; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot A640")) { + height = 2760; + width = 3672; + raw_height = 2772; + raw_width = 3736; + top_margin = 6; + left_margin = 12; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot A650")) { + height = 3024; + width = 4032; + raw_height = 3048; + raw_width = 4104; + top_margin = 12; + left_margin = 48; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot S3 IS")) { + height = 2128; + width = 2840; + raw_height = 2136; + raw_width = 2888; + top_margin = 8; + left_margin = 44; + load_raw = &CLASS canon_a5_load_raw; + } else if (!strcmp(model,"PowerShot Pro90 IS")) { + width = 1896; + colors = 4; + filters = 0xb4b4b4b4; + } else if (is_canon && raw_width == 2144) { + height = 1550; + width = 2088; + top_margin = 8; + left_margin = 4; + if (!strcmp(model,"PowerShot G1")) { + colors = 4; + filters = 0xb4b4b4b4; + } + } else if (is_canon && raw_width == 2224) { + height = 1448; + width = 2176; + top_margin = 6; + left_margin = 48; + } else if (is_canon && raw_width == 2376) { + height = 1720; + width = 2312; + top_margin = 6; + left_margin = 12; + } else if (is_canon && raw_width == 2672) { + height = 1960; + width = 2616; + top_margin = 6; + left_margin = 12; + } else if (is_canon && raw_width == 3152) { + height = 2056; + width = 3088; + top_margin = 12; + left_margin = 64; + if (unique_id == 0x80000170) + adobe_coeff ("Canon","EOS 300D"); + maximum = 0xfa0; + } else if (is_canon && raw_width == 3160) { + height = 2328; + width = 3112; + top_margin = 12; + left_margin = 44; + } else if (is_canon && raw_width == 3344) { + height = 2472; + width = 3288; + top_margin = 6; + left_margin = 4; + } else if (!strcmp(model,"EOS D2000C")) { + filters = 0x61616161; + black = curve[200]; + } else if (is_canon && raw_width == 3516) { + top_margin = 14; + left_margin = 42; + if (unique_id == 0x80000189) + adobe_coeff ("Canon","EOS 350D"); + goto canon_cr2; + } else if (is_canon && raw_width == 3596) { + top_margin = 12; + left_margin = 74; + goto canon_cr2; + } else if (is_canon && raw_width == 3944) { + height = 2602; + width = 3908; + top_margin = 18; + left_margin = 30; + maximum = 0x3f60; + } else if (is_canon && raw_width == 3948) { + top_margin = 18; + left_margin = 42; + height -= 2; + if (unique_id == 0x80000236) + adobe_coeff ("Canon","EOS 400D"); + goto canon_cr2; + } else if (is_canon && raw_width == 3984) { + top_margin = 20; + left_margin = 76; + height -= 2; + maximum = 0x3bb0; + goto canon_cr2; + } else if (is_canon && raw_width == 4104) { + height = 3024; + width = 4032; + top_margin = 12; + left_margin = 48; + } else if (is_canon && raw_width == 4476) { + top_margin = 34; + left_margin = 90; + maximum = 0xe6c; + goto canon_cr2; + } else if (is_canon && raw_width == 5108) { + top_margin = 13; + left_margin = 98; + maximum = 0xe80; +canon_cr2: + height -= top_margin; + width -= left_margin; + } else if (is_canon && raw_width == 5712) { + height = 3752; + width = 5640; + top_margin = 20; + left_margin = 62; + maximum = 0x3bb0; + } else if (!strcmp(model,"D1")) { + cam_mul[0] *= 256/527.0; + cam_mul[2] *= 256/317.0; + } else if (!strcmp(model,"D1X")) { + width -= 4; + pixel_aspect = 0.5; + } else if (!strcmp(model,"D40X") || + !strcmp(model,"D80")) { + height -= 3; + width -= 4; + } else if (!strncmp(model,"D40",3) || + !strncmp(model,"D50",3) || + !strncmp(model,"D70",3)) { + width--; + } else if (!strcmp(model,"D100")) { + if (tiff_compress == 34713 && !nikon_is_compressed()) { + load_raw = &CLASS nikon_load_raw; + raw_width = (width += 3) + 3; + } + maximum = 0xf44; + } else if (!strcmp(model,"D200")) { + left_margin = 1; + width -= 4; + maximum = 0xfbc; + filters = 0x94949494; + } else if (!strncmp(model,"D2H",3)) { + left_margin = 6; + width -= 14; + } else if (!strcmp(model,"D2X")) { + width -= 8; + maximum = 0xf35; + } else if (!strcmp(model,"D3")) { + width -= 4; + left_margin = 2; + } else if (!strcmp(model,"D300")) { + width -= 32; + } else if (fsize == 1581060) { + height = 963; + width = 1287; + raw_width = 1632; + load_raw = &CLASS nikon_e900_load_raw; + maximum = 0x3f4; + colors = 4; + filters = 0x1e1e1e1e; + simple_coeff(3); + pre_mul[0] = 1.2085; + pre_mul[1] = 1.0943; + pre_mul[3] = 1.1103; + } else if (fsize == 2465792) { + height = 1203; + width = 1616; + raw_width = 2048; + load_raw = &CLASS nikon_e900_load_raw; + maximum = 0x3dd; + colors = 4; + filters = 0x4b4b4b4b; + adobe_coeff ("NIKON","E950"); + } else if (fsize == 4771840) { + height = 1540; + width = 2064; + colors = 4; + filters = 0xe1e1e1e1; + load_raw = &CLASS nikon_load_raw; + if (!timestamp && nikon_e995()) + strcpy (model, "E995"); + if (strcmp(model,"E995")) { + filters = 0xb4b4b4b4; + simple_coeff(3); + pre_mul[0] = 1.196; + pre_mul[1] = 1.246; + pre_mul[2] = 1.018; + } + } else if (!strcmp(model,"E2100")) { + if (!timestamp && !nikon_e2100()) goto cp_e2500; + height = 1206; + width = 1616; + load_raw = &CLASS nikon_e2100_load_raw; + } else if (!strcmp(model,"E2500")) { +cp_e2500: + strcpy (model, "E2500"); + height = 1204; + width = 1616; + colors = 4; + filters = 0x4b4b4b4b; + } else if (fsize == 4775936) { + height = 1542; + width = 2064; + load_raw = &CLASS nikon_e2100_load_raw; + pre_mul[0] = 1.818; + pre_mul[2] = 1.618; + if (!timestamp) nikon_3700(); + if (model[0] == 'E' && atoi(model+1) < 3700) + filters = 0x49494949; + if (!strcmp(model,"Optio 33WR")) { + flip = 1; + filters = 0x16161616; + pre_mul[0] = 1.331; + pre_mul[2] = 1.820; + } + } else if (fsize == 5869568) { + height = 1710; + width = 2288; + filters = 0x16161616; + if (!timestamp && minolta_z2()) { + strcpy (make, "Minolta"); + strcpy (model,"DiMAGE Z2"); + } + if (make[0] == 'M') + load_raw = &CLASS nikon_e2100_load_raw; + } else if (!strcmp(model,"E4500")) { + height = 1708; + width = 2288; + colors = 4; + filters = 0xb4b4b4b4; + } else if (fsize == 7438336) { + height = 1924; + width = 2576; + colors = 4; + filters = 0xb4b4b4b4; + } else if (fsize == 8998912) { + height = 2118; + width = 2832; + maximum = 0xf83; + load_raw = &CLASS nikon_e2100_load_raw; + } else if (!strcmp(model,"FinePix S5100") || + !strcmp(model,"FinePix S5500")) { + load_raw = &CLASS unpacked_load_raw; + maximum = 0x3e00; + } else if (!strcmp(make,"FUJIFILM")) { + if (!strcmp(model+7,"S2Pro")) { + strcpy (model+7," S2Pro"); + height = 2144; + width = 2880; + flip = 6; + } else + maximum = 0x3e00; + if (is_raw == 2 && shot_select) + maximum = 0x2f00; + top_margin = (raw_height - height)/2; + left_margin = (raw_width - width )/2; + if (is_raw == 2) + data_offset += (shot_select > 0) * ( fuji_layout ? + (raw_width *= 2) : raw_height*raw_width*2 ); + fuji_width = width >> !fuji_layout; + width = (height >> fuji_layout) + fuji_width; + raw_height = height; + height = width - 1; + load_raw = &CLASS fuji_load_raw; + if (!(fuji_width & 1)) filters = 0x49494949; + } else if (!strcmp(model,"RD175")) { + height = 986; + width = 1534; + data_offset = 513; + filters = 0x61616161; + load_raw = &CLASS minolta_rd175_load_raw; + } else if (!strcmp(model,"KD-400Z")) { + height = 1712; + width = 2312; + raw_width = 2336; + goto konica_400z; + } else if (!strcmp(model,"KD-510Z")) { + goto konica_510z; + } else if (!strcasecmp(make,"MINOLTA")) { + load_raw = &CLASS unpacked_load_raw; + maximum = 0xf7d; + if (!strncmp(model,"DiMAGE A",8)) { + if (!strcmp(model,"DiMAGE A200")) + filters = 0x49494949; + load_raw = &CLASS packed_12_load_raw; + maximum = model[8] == '1' ? 0xf8b : 0xfff; + } else if (!strncmp(model,"ALPHA",5) || + !strncmp(model,"DYNAX",5) || + !strncmp(model,"MAXXUM",6)) { + sprintf (model+20, "DYNAX %-10s", model+6+(model[0]=='M')); + adobe_coeff (make, model+20); + load_raw = &CLASS packed_12_load_raw; + maximum = 0xffb; + } else if (!strncmp(model,"DiMAGE G",8)) { + if (model[8] == '4') { + height = 1716; + width = 2304; + } else if (model[8] == '5') { +konica_510z: + height = 1956; + width = 2607; + raw_width = 2624; + } else if (model[8] == '6') { + height = 2136; + width = 2848; + } + data_offset += 14; + filters = 0x61616161; +konica_400z: + load_raw = &CLASS unpacked_load_raw; + maximum = 0x3df; + order = 0x4d4d; + } + } else if (!strcmp(model,"*ist DS")) { + height -= 2; + } else if (!strcmp(model,"K20D")) { + filters = 0x16161616; + } else if (!strcmp(model,"Optio S")) { + if (fsize == 3178560) { + height = 1540; + width = 2064; + load_raw = &CLASS eight_bit_load_raw; + cam_mul[0] *= 4; + cam_mul[2] *= 4; + pre_mul[0] = 1.391; + pre_mul[2] = 1.188; + } else { + height = 1544; + width = 2068; + raw_width = 3136; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf7c; + pre_mul[0] = 1.137; + pre_mul[2] = 1.453; + } + } else if (fsize == 6114240) { + height = 1737; + width = 2324; + raw_width = 3520; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf7a; + pre_mul[0] = 1.980; + pre_mul[2] = 1.570; + } else if (!strcmp(model,"Optio 750Z")) { + height = 2302; + width = 3072; + load_raw = &CLASS nikon_e2100_load_raw; + } else if (!strcmp(model,"STV680 VGA")) { + height = 484; + width = 644; + load_raw = &CLASS eight_bit_load_raw; + flip = 2; + filters = 0x16161616; + black = 16; + pre_mul[0] = 1.097; + pre_mul[2] = 1.128; + } else if (!strcmp(model,"KAI-0340")) { + height = 477; + width = 640; + order = 0x4949; + data_offset = 3840; + load_raw = &CLASS unpacked_load_raw; + pre_mul[0] = 1.561; + pre_mul[2] = 2.454; + } else if (!strcmp(model,"N95")) { + height = raw_height - (top_margin = 2); + } else if (!strcmp(model,"531C")) { + height = 1200; + width = 1600; + load_raw = &CLASS unpacked_load_raw; + filters = 0x49494949; + pre_mul[1] = 1.218; + } else if (!strcmp(model,"F-080C")) { + height = 768; + width = 1024; + load_raw = &CLASS eight_bit_load_raw; + } else if (!strcmp(model,"F-145C")) { + height = 1040; + width = 1392; + load_raw = &CLASS eight_bit_load_raw; + } else if (!strcmp(model,"F-201C")) { + height = 1200; + width = 1600; + load_raw = &CLASS eight_bit_load_raw; + } else if (!strcmp(model,"F-510C")) { + height = 1958; + width = 2588; + load_raw = fsize < 7500000 ? + &CLASS eight_bit_load_raw : &CLASS unpacked_load_raw; + maximum = 0xfff0; + } else if (!strcmp(model,"F-810C")) { + height = 2469; + width = 3272; + load_raw = &CLASS unpacked_load_raw; + maximum = 0xfff0; + } else if (!strcmp(model,"XCD-SX910CR")) { + height = 1024; + width = 1375; + raw_width = 1376; + filters = 0x49494949; + maximum = 0x3ff; + load_raw = fsize < 2000000 ? + &CLASS eight_bit_load_raw : &CLASS unpacked_load_raw; + } else if (!strcmp(model,"2010")) { + height = 1207; + width = 1608; + order = 0x4949; + filters = 0x16161616; + data_offset = 3212; + maximum = 0x3ff; + load_raw = &CLASS unpacked_load_raw; + } else if (!strcmp(model,"A782")) { + height = 3000; + width = 2208; + filters = 0x61616161; + load_raw = fsize < 10000000 ? + &CLASS eight_bit_load_raw : &CLASS unpacked_load_raw; + maximum = 0xffc0; + } else if (!strcmp(model,"3320AF")) { + height = 1536; + raw_width = width = 2048; + filters = 0x61616161; + load_raw = &CLASS unpacked_load_raw; + maximum = 0x3ff; + pre_mul[0] = 1.717; + pre_mul[2] = 1.138; + fseek (ifp, 0x300000, SEEK_SET); + if ((order = guess_byte_order(0x10000)) == 0x4d4d) { + height -= (top_margin = 16); + width -= (left_margin = 28); + maximum = 0xf5c0; + strcpy (make, "ISG"); + model[0] = 0; + } + } else if (!strcmp(make,"Hasselblad")) { + if (load_raw == &CLASS lossless_jpeg_load_raw) + load_raw = &CLASS hasselblad_load_raw; + if (raw_width == 7262) { + height = 5444; + width = 7248; + top_margin = 4; + left_margin = 7; + filters = 0x61616161; + } + } else if (!strcmp(make,"Sinar")) { + if (!memcmp(head,"8BPS",4)) { + fseek (ifp, 14, SEEK_SET); + height = get4(); + width = get4(); + filters = 0x61616161; + data_offset = 68; + } + if (!load_raw) load_raw = &CLASS unpacked_load_raw; + maximum = 0x3fff; + } else if (!strcmp(make,"Leaf")) { + maximum = 0x3fff; + if (tiff_samples > 1) filters = 0; + if (tiff_samples > 1 || tile_length < raw_height) + load_raw = &CLASS leaf_hdr_load_raw; + if ((width | height) == 2048) { + if (tiff_samples == 1) { + filters = 1; + strcpy (cdesc, "RBTG"); + strcpy (model, "CatchLight"); + top_margin = 8; left_margin = 18; height = 2032; width = 2016; + } else { + strcpy (model, "DCB2"); + top_margin = 10; left_margin = 16; height = 2028; width = 2022; + } + } else if (width+height == 3144+2060) { + if (!model[0]) strcpy (model, "Cantare"); + if (width > height) { + top_margin = 6; left_margin = 32; height = 2048; width = 3072; + filters = 0x61616161; + } else { + left_margin = 6; top_margin = 32; width = 2048; height = 3072; + filters = 0x16161616; + } + if (!cam_mul[0] || model[0] == 'V') filters = 0; + else is_raw = tiff_samples; + } else if (width == 2116) { + strcpy (model, "Valeo 6"); + height -= 2 * (top_margin = 30); + width -= 2 * (left_margin = 55); + filters = 0x49494949; + } else if (width == 3171) { + strcpy (model, "Valeo 6"); + height -= 2 * (top_margin = 24); + width -= 2 * (left_margin = 24); + filters = 0x16161616; + } + } else if (!strcmp(make,"LEICA") || !strcmp(make,"Panasonic")) { + maximum = 0xfff0; + if ((fsize-data_offset) / (width*8/7) == height) + load_raw = &CLASS panasonic_load_raw; + if (!load_raw) load_raw = &CLASS unpacked_load_raw; + switch (width) { + case 2568: + adobe_coeff ("Panasonic","DMC-LC1"); break; + case 3130: + left_margin = -14; + case 3170: + left_margin += 18; + width = 3096; + if (height > 2326) { + height = 2326; + top_margin = 13; + filters = 0x49494949; + } + maximum = 0xf7f0; + zero_is_bad = 1; + adobe_coeff ("Panasonic","DMC-FZ8"); break; + case 3177: + width -= 10; + filters = 0x49494949; + maximum = 0xf7fc; + zero_is_bad = 1; + adobe_coeff ("Panasonic","DMC-L1"); break; + case 3304: + width -= 16; + maximum = 0xf94c; + zero_is_bad = 1; + adobe_coeff ("Panasonic","DMC-FZ30"); break; + case 3330: + width = 3291; + left_margin = 9; + maximum = 0xf7f0; + goto fz18; + case 3370: + width = 3288; + left_margin = 15; +fz18: if (height > 2480) + height = 2480 - (top_margin = 10); + filters = 0x49494949; + zero_is_bad = 1; + break; + case 3690: + height += 36; + left_margin = -14; + filters = 0x49494949; + maximum = 0xf7f0; + case 3770: + width = 3672; + if ((height -= 39) == 2760) + top_margin = 15; + left_margin += 17; + zero_is_bad = 1; + adobe_coeff ("Panasonic","DMC-FZ50"); break; + case 3710: + width = 3682; + filters = 0x49494949; + break; + case 3880: + width -= 22; + left_margin = 6; + maximum = 0xf7f0; + zero_is_bad = 1; + adobe_coeff ("Panasonic","DMC-LX1"); break; + case 4290: + height += 38; + left_margin = -14; + filters = 0x49494949; + case 4330: + width = 4248; + if ((height -= 39) == 2400) + top_margin = 15; + left_margin += 17; + adobe_coeff ("Panasonic","DMC-LX2"); break; + } + } else if (!strcmp(model,"C770UZ")) { + height = 1718; + width = 2304; + filters = 0x16161616; + load_raw = &CLASS nikon_e2100_load_raw; + } else if (!strcmp(make,"OLYMPUS")) { + height += height & 1; + filters = exif_cfa; + if (!strcmp(model,"E-1") || + !strcmp(model,"E-400")) { + maximum = 0xfff0; + } else if (!strcmp(model,"E-10") || + !strncmp(model,"E-20",4)) { + maximum = 0xffc0; + black <<= 2; + } else if (!strcmp(model,"E-300") || + !strcmp(model,"E-500")) { + width -= 20; + if (load_raw == &CLASS unpacked_load_raw) { + maximum = 0xfc30; + black = 0; + } + } else if (!strcmp(model,"E-330")) { + width -= 30; + if (load_raw == &CLASS unpacked_load_raw) + maximum = 0xf790; + } else if (!strcmp(model,"E-3")) { + maximum = 0xf99; + goto e410; + } else if (!strcmp(model,"E-410") || + !strcmp(model,"E-510")) { + maximum = 0xf6a; +e410: load_raw = &CLASS olympus_e410_load_raw; + black >>= 4; + } else if (!strcmp(model,"SP550UZ")) { + thumb_length = fsize - (thumb_offset = 0xa39800); + thumb_height = 480; + thumb_width = 640; + } + } else if (!strcmp(model,"N Digital")) { + height = 2047; + width = 3072; + filters = 0x61616161; + data_offset = 0x1a00; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf1e; + } else if (!strcmp(model,"DSC-F828")) { + width = 3288; + left_margin = 5; + data_offset = 862144; + load_raw = &CLASS sony_load_raw; + filters = 0x9c9c9c9c; + colors = 4; + strcpy (cdesc, "RGBE"); + } else if (!strcmp(model,"DSC-V3")) { + width = 3109; + left_margin = 59; + data_offset = 787392; + load_raw = &CLASS sony_load_raw; + } else if (!strcmp(make,"SONY") && raw_width == 3984) { + adobe_coeff ("SONY","DSC-R1"); + width = 3925; + order = 0x4d4d; + } else if (!strcmp(model,"DSLR-A100")) { + height--; + load_raw = &CLASS sony_arw_load_raw; + maximum = 0xfeb; + } else if (!strcmp(model,"DSLR-A200")) { + height = raw_height += 8; + load_raw = &CLASS sony_arw_load_raw; + } else if (!strcmp(model,"DSLR-A350")) { + height = (raw_height += 8) - 4; + load_raw = &CLASS sony_arw_load_raw; + maximum = 0x1ffe; + } else if (!strncmp(model,"P850",4)) { + maximum = 0xf7c; + } else if (!strcmp(model,"C330")) { + height = 1744; + width = 2336; + raw_height = 1779; + raw_width = 2338; + top_margin = 33; + left_margin = 1; + order = 0x4949; + if ((data_offset = fsize - raw_height*raw_width)) { + fseek (ifp, 168, SEEK_SET); + read_shorts (curve, 256); + } else use_gamma = 0; + load_raw = &CLASS eight_bit_load_raw; + } else if (!strcasecmp(make,"KODAK")) { + if (filters == UINT_MAX) filters = 0x61616161; + if (!strncmp(model,"NC2000",6)) { + width -= 4; + left_margin = 2; + } else if (!strcmp(model,"EOSDCS3B")) { + width -= 4; + left_margin = 2; + } else if (!strcmp(model,"EOSDCS1")) { + width -= 4; + left_margin = 2; + } else if (!strcmp(model,"DCS420")) { + width -= 4; + left_margin = 2; + } else if (!strcmp(model,"DCS460")) { + width -= 4; + left_margin = 2; + } else if (!strcmp(model,"DCS460A")) { + width -= 4; + left_margin = 2; + colors = 1; + filters = 0; + } else if (!strcmp(model,"DCS660M")) { + black = 214; + colors = 1; + filters = 0; + } else if (!strcmp(model,"DCS760M")) { + colors = 1; + filters = 0; + } + if (strstr(model,"DC25")) { + strcpy (model, "DC25"); + data_offset = 15424; + } + if (!strncmp(model,"DC2",3)) { + height = 242; + if (fsize < 100000) { + raw_width = 256; width = 249; + pixel_aspect = (4.0*height) / (3.0*width); + } else { + raw_width = 512; width = 501; + pixel_aspect = (493.0*height) / (373.0*width); + } + data_offset += raw_width + 1; + colors = 4; + filters = 0x8d8d8d8d; + simple_coeff(1); + pre_mul[1] = 1.179; + pre_mul[2] = 1.209; + pre_mul[3] = 1.036; + load_raw = &CLASS eight_bit_load_raw; + } else if (!strcmp(model,"40")) { + strcpy (model, "DC40"); + height = 512; + width = 768; + data_offset = 1152; + load_raw = &CLASS kodak_radc_load_raw; + } else if (strstr(model,"DC50")) { + strcpy (model, "DC50"); + height = 512; + width = 768; + data_offset = 19712; + load_raw = &CLASS kodak_radc_load_raw; + } else if (strstr(model,"DC120")) { + strcpy (model, "DC120"); + height = 976; + width = 848; + pixel_aspect = height/0.75/width; + load_raw = tiff_compress == 7 ? + &CLASS kodak_jpeg_load_raw : &CLASS kodak_dc120_load_raw; + } else if (!strcmp(model,"DCS200")) { + thumb_height = 128; + thumb_width = 192; + thumb_offset = 6144; + thumb_misc = 360; + write_thumb = &CLASS layer_thumb; + height = 1024; + width = 1536; + data_offset = 79872; + load_raw = &CLASS eight_bit_load_raw; + black = 17; + } + } else if (!strcmp(model,"Fotoman Pixtura")) { + height = 512; + width = 768; + data_offset = 3632; + load_raw = &CLASS kodak_radc_load_raw; + filters = 0x61616161; + simple_coeff(2); + } else if (!strcmp(model,"QuickTake 100")) { + data_offset = 736; + load_raw = &CLASS quicktake_100_load_raw; + goto qt_common; + } else if (!strcmp(model,"QuickTake 150")) { + data_offset = 738 - head[5]; + if (head[5]) strcpy (model+10, "200"); + load_raw = &CLASS kodak_radc_load_raw; +qt_common: + height = 480; + width = 640; + filters = 0x61616161; + } else if (!strcmp(make,"Rollei") && !load_raw) { + switch (raw_width) { + case 1316: + height = 1030; + width = 1300; + top_margin = 1; + left_margin = 6; + break; + case 2568: + height = 1960; + width = 2560; + top_margin = 2; + left_margin = 8; + } + filters = 0x16161616; + load_raw = &CLASS rollei_load_raw; + pre_mul[0] = 1.8; + pre_mul[2] = 1.3; + } else if (!strcmp(model,"PC-CAM 600")) { + height = 768; + data_offset = width = 1024; + filters = 0x49494949; + load_raw = &CLASS eight_bit_load_raw; + pre_mul[0] = 1.14; + pre_mul[2] = 2.73; + } else if (!strcmp(model,"QV-2000UX")) { + height = 1208; + width = 1632; + data_offset = width * 2; + load_raw = &CLASS eight_bit_load_raw; + } else if (fsize == 3217760) { + height = 1546; + width = 2070; + raw_width = 2080; + load_raw = &CLASS eight_bit_load_raw; + } else if (!strcmp(model,"QV-4000")) { + height = 1700; + width = 2260; + load_raw = &CLASS unpacked_load_raw; + maximum = 0xffff; + } else if (!strcmp(model,"QV-5700")) { + height = 1924; + width = 2576; + load_raw = &CLASS casio_qv5700_load_raw; + } else if (!strcmp(model,"QV-R41")) { + height = 1720; + width = 2312; + raw_width = 3520; + left_margin = 2; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf7f; + } else if (!strcmp(model,"QV-R51")) { + height = 1926; + width = 2580; + raw_width = 3904; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf7f; + pre_mul[0] = 1.340; + pre_mul[2] = 1.672; + } else if (!strcmp(model,"EX-S100")) { + height = 1544; + width = 2058; + raw_width = 3136; + load_raw = &CLASS packed_12_load_raw; + pre_mul[0] = 1.631; + pre_mul[2] = 1.106; + } else if (!strcmp(model,"EX-Z50")) { + height = 1931; + width = 2570; + raw_width = 3904; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf7f; + pre_mul[0] = 2.529; + pre_mul[2] = 1.185; + } else if (!strcmp(model,"EX-Z55")) { + height = 1960; + width = 2570; + raw_width = 3904; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf7f; + pre_mul[0] = 1.520; + pre_mul[2] = 1.316; + } else if (!strcmp(model,"EX-P505")) { + height = 1928; + width = 2568; + raw_width = 3852; + load_raw = &CLASS packed_12_load_raw; + pre_mul[0] = 2.07; + pre_mul[2] = 1.88; + } else if (fsize == 9313536) { /* EX-P600 or QV-R61 */ + height = 2142; + width = 2844; + raw_width = 4288; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf7f; + pre_mul[0] = 1.797; + pre_mul[2] = 1.219; + } else if (!strcmp(model,"EX-P700")) { + height = 2318; + width = 3082; + raw_width = 4672; + load_raw = &CLASS packed_12_load_raw; + maximum = 0xf7f; + pre_mul[0] = 1.758; + pre_mul[2] = 1.504; + } + if (!model[0]) + sprintf (model, "%dx%d", width, height); + if (filters == UINT_MAX) filters = 0x94949494; + if (raw_color) adobe_coeff (make, model); + if (thumb_offset && !thumb_height) { + fseek (ifp, thumb_offset, SEEK_SET); + if (ljpeg_start (&jh, 1)) { + thumb_width = jh.wide; + thumb_height = jh.high; + } + } +dng_skip: + if (!load_raw || height < 22) is_raw = 0; +#ifdef NO_JPEG + if (load_raw == kodak_jpeg_load_raw) { + fprintf (stderr,_("%s: You must link dcraw with libjpeg!!\n"), ifname); + is_raw = 0; + } +#endif + if (!cdesc[0]) + strcpy (cdesc, colors == 3 ? "RGB":"GMCY"); + if (!raw_height) raw_height = height; + if (!raw_width ) raw_width = width; + if (filters && colors == 3) + for (i=0; i < 32; i+=4) { + if ((filters >> i & 15) == 9) + filters |= 2 << i; + if ((filters >> i & 15) == 6) + filters |= 8 << i; + } +notraw: + if (flip == -1) flip = tiff_flip; + if (flip == -1) flip = 0; +} + +#ifndef NO_LCMS +void CLASS apply_profile (char *input, char *output) +{ + char *prof; + cmsHPROFILE hInProfile=0, hOutProfile=0; + cmsHTRANSFORM hTransform; + FILE *fp; + unsigned size; + + cmsErrorAction (LCMS_ERROR_SHOW); + if (strcmp (input, "embed")) + hInProfile = cmsOpenProfileFromFile (input, "r"); + else if (profile_length) { + prof = (char *) malloc (profile_length); + merror (prof, "apply_profile()"); + fseek (ifp, profile_offset, SEEK_SET); + fread (prof, 1, profile_length, ifp); + hInProfile = cmsOpenProfileFromMem (prof, profile_length); + free (prof); + } else + fprintf (stderr,_("%s has no embedded profile.\n"), ifname); + if (!hInProfile) return; + if (!output) + hOutProfile = cmsCreate_sRGBProfile(); + else if ((fp = fopen (output, "rb"))) { + fread (&size, 4, 1, fp); + fseek (fp, 0, SEEK_SET); + oprof = (unsigned *) malloc (size = ntohl(size)); + merror (oprof, "apply_profile()"); + fread (oprof, 1, size, fp); + fclose (fp); + if (!(hOutProfile = cmsOpenProfileFromMem (oprof, size))) { + free (oprof); + oprof = 0; + } + } else + fprintf (stderr,_("Cannot open file %s!\n"), output); + if (!hOutProfile) goto quit; + if (verbose) + fprintf (stderr,_("Applying color profile...\n")); + hTransform = cmsCreateTransform (hInProfile, TYPE_RGBA_16, + hOutProfile, TYPE_RGBA_16, INTENT_PERCEPTUAL, 0); + cmsDoTransform (hTransform, image, image, width*height); + raw_color = 1; /* Don't use rgb_cam with a profile */ + cmsDeleteTransform (hTransform); + cmsCloseProfile (hOutProfile); +quit: + cmsCloseProfile (hInProfile); +} +#endif + +void CLASS convert_to_rgb() +{ + int row, col, c, i, j, k; + ushort *img; + float out[3], out_cam[3][4]; + double num, inverse[3][3]; + static const double xyzd50_srgb[3][3] = + { { 0.436083, 0.385083, 0.143055 }, + { 0.222507, 0.716888, 0.060608 }, + { 0.013930, 0.097097, 0.714022 } }; + static const double rgb_rgb[3][3] = + { { 1,0,0 }, { 0,1,0 }, { 0,0,1 } }; + static const double adobe_rgb[3][3] = + { { 0.715146, 0.284856, 0.000000 }, + { 0.000000, 1.000000, 0.000000 }, + { 0.000000, 0.041166, 0.958839 } }; + static const double wide_rgb[3][3] = + { { 0.593087, 0.404710, 0.002206 }, + { 0.095413, 0.843149, 0.061439 }, + { 0.011621, 0.069091, 0.919288 } }; + static const double prophoto_rgb[3][3] = + { { 0.529317, 0.330092, 0.140588 }, + { 0.098368, 0.873465, 0.028169 }, + { 0.016879, 0.117663, 0.865457 } }; + static const double (*out_rgb[])[3] = + { rgb_rgb, adobe_rgb, wide_rgb, prophoto_rgb, xyz_rgb }; + static const char *name[] = + { "sRGB", "Adobe RGB (1998)", "WideGamut D65", "ProPhoto D65", "XYZ" }; + static const unsigned phead[] = + { 1024, 0, 0x2100000, 0x6d6e7472, 0x52474220, 0x58595a20, 0, 0, 0, + 0x61637370, 0, 0, 0x6e6f6e65, 0, 0, 0, 0, 0xf6d6, 0x10000, 0xd32d }; + unsigned pbody[] = + { 10, 0x63707274, 0, 36, /* cprt */ + 0x64657363, 0, 40, /* desc */ + 0x77747074, 0, 20, /* wtpt */ + 0x626b7074, 0, 20, /* bkpt */ + 0x72545243, 0, 14, /* rTRC */ + 0x67545243, 0, 14, /* gTRC */ + 0x62545243, 0, 14, /* bTRC */ + 0x7258595a, 0, 20, /* rXYZ */ + 0x6758595a, 0, 20, /* gXYZ */ + 0x6258595a, 0, 20 }; /* bXYZ */ + static const unsigned pwhite[] = { 0xf351, 0x10000, 0x116cc }; + unsigned pcurve[] = { 0x63757276, 0, 1, 0x1000000 }; + + memcpy (out_cam, rgb_cam, sizeof out_cam); + raw_color |= colors == 1 || document_mode || + output_color < 1 || output_color > 5; + if (!raw_color) { + oprof = (unsigned *) calloc (phead[0], 1); + merror (oprof, "convert_to_rgb()"); + memcpy (oprof, phead, sizeof phead); + if (output_color == 5) oprof[4] = oprof[5]; + oprof[0] = 132 + 12*pbody[0]; + for (i=0; i < pbody[0]; i++) { + oprof[oprof[0]/4] = i ? (i > 1 ? 0x58595a20 : 0x64657363) : 0x74657874; + pbody[i*3+2] = oprof[0]; + oprof[0] += (pbody[i*3+3] + 3) & -4; + } + memcpy (oprof+32, pbody, sizeof pbody); + oprof[pbody[5]/4+2] = strlen(name[output_color-1]) + 1; + memcpy ((char *)oprof+pbody[8]+8, pwhite, sizeof pwhite); + if (output_bps == 8) +#ifdef SRGB_GAMMA + pcurve[3] = 0x2330000; +#else + pcurve[3] = 0x1f00000; +#endif + for (i=4; i < 7; i++) + memcpy ((char *)oprof+pbody[i*3+2], pcurve, sizeof pcurve); + pseudoinverse ((double (*)[3]) out_rgb[output_color-1], inverse, 3); + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) { + for (num = k=0; k < 3; k++) + num += xyzd50_srgb[i][k] * inverse[j][k]; + oprof[pbody[j*3+23]/4+i+2] = num * 0x10000 + 0.5; + } + for (i=0; i < phead[0]/4; i++) + oprof[i] = htonl(oprof[i]); + strcpy ((char *)oprof+pbody[2]+8, "auto-generated by dcraw"); + strcpy ((char *)oprof+pbody[5]+12, name[output_color-1]); + for (i=0; i < 3; i++) + for (j=0; j < colors; j++) + for (out_cam[i][j] = k=0; k < 3; k++) + out_cam[i][j] += out_rgb[output_color-1][i][k] * rgb_cam[k][j]; + } + if (verbose) + fprintf (stderr, raw_color ? _("Building histograms...\n") : + _("Converting to %s colorspace...\n"), name[output_color-1]); + + memset (histogram, 0, sizeof histogram); + for (img=image[0], row=0; row < height; row++) + for (col=0; col < width; col++, img+=4) { + if (!raw_color) { + out[0] = out[1] = out[2] = 0; + FORCC { + out[0] += out_cam[0][c] * img[c]; + out[1] += out_cam[1][c] * img[c]; + out[2] += out_cam[2][c] * img[c]; + } + FORC3 img[c] = CLIP((int) out[c]); + } + else if (document_mode) + img[0] = img[FC(row,col)]; + FORCC histogram[c][img[c] >> 3]++; + } + if (colors == 4 && output_color) colors = 3; + if (document_mode && filters) colors = 1; +} + +void CLASS fuji_rotate() +{ + int i, row, col; + double step; + float r, c, fr, fc; + unsigned ur, uc; + ushort wide, high, (*img)[4], (*pix)[4]; + + if (!fuji_width) return; + if (verbose) + fprintf (stderr,_("Rotating image 45 degrees...\n")); + fuji_width = (fuji_width - 1 + shrink) >> shrink; + step = sqrt(0.5); + wide = fuji_width / step; + high = (height - fuji_width) / step; + img = (ushort (*)[4]) calloc (wide*high, sizeof *img); + merror (img, "fuji_rotate()"); + + for (row=0; row < high; row++) + for (col=0; col < wide; col++) { + ur = r = fuji_width + (row-col)*step; + uc = c = (row+col)*step; + if (ur > height-2 || uc > width-2) continue; + fr = r - ur; + fc = c - uc; + pix = image + ur*width + uc; + for (i=0; i < colors; i++) + img[row*wide+col][i] = + (pix[ 0][i]*(1-fc) + pix[ 1][i]*fc) * (1-fr) + + (pix[width][i]*(1-fc) + pix[width+1][i]*fc) * fr; + } + free (image); + width = wide; + height = high; + image = img; + fuji_width = 0; +} + +void CLASS stretch() +{ + ushort newdim, (*img)[4], *pix0, *pix1; + int row, col, c; + double rc, frac; + + if (pixel_aspect == 1) return; + if (verbose) fprintf (stderr,_("Stretching the image...\n")); + if (pixel_aspect < 1) { + newdim = height / pixel_aspect + 0.5; + img = (ushort (*)[4]) calloc (width*newdim, sizeof *img); + merror (img, "stretch()"); + for (rc=row=0; row < newdim; row++, rc+=pixel_aspect) { + frac = rc - (c = rc); + pix0 = pix1 = image[c*width]; + if (c+1 < height) pix1 += width*4; + for (col=0; col < width; col++, pix0+=4, pix1+=4) + FORCC img[row*width+col][c] = pix0[c]*(1-frac) + pix1[c]*frac + 0.5; + } + height = newdim; + } else { + newdim = width * pixel_aspect + 0.5; + img = (ushort (*)[4]) calloc (height*newdim, sizeof *img); + merror (img, "stretch()"); + for (rc=col=0; col < newdim; col++, rc+=1/pixel_aspect) { + frac = rc - (c = rc); + pix0 = pix1 = image[c]; + if (c+1 < width) pix1 += 4; + for (row=0; row < height; row++, pix0+=width*4, pix1+=width*4) + FORCC img[row*newdim+col][c] = pix0[c]*(1-frac) + pix1[c]*frac + 0.5; + } + width = newdim; + } + free (image); + image = img; +} + +int CLASS flip_index (int row, int col) +{ + if (flip & 4) SWAP(row,col); + if (flip & 2) row = iheight - 1 - row; + if (flip & 1) col = iwidth - 1 - col; + return row * iwidth + col; +} + +void CLASS gamma_lut (uchar lut[0x10000]) +{ + int perc, c, val, total, i; + float white=0, r; + + perc = width * height * 0.01; /* 99th percentile white level */ + if (fuji_width) perc /= 2; + if ((highlight & ~2) || no_auto_bright) perc = -1; + FORCC { + for (val=0x2000, total=0; --val > 32; ) + if ((total += histogram[c][val]) > perc) break; + if (white < val) white = val; + } + white *= 8 / bright; + for (i=0; i < 0x10000; i++) { + r = i / white; + val = 256 * ( !use_gamma ? r : +#ifdef SRGB_GAMMA + r <= 0.00304 ? r*12.92 : pow(r,2.5/6)*1.055-0.055 ); +#else + r <= 0.018 ? r*4.5 : pow(r,0.45)*1.099-0.099 ); +#endif + if (val > 255) val = 255; + lut[i] = val; + } +} + +struct tiff_tag { + ushort tag, type; + int count; + union { char c[4]; short s[2]; int i; } val; +}; + +struct tiff_hdr { + ushort order, magic; + int ifd; + ushort pad, ntag; + struct tiff_tag tag[23]; + int nextifd; + ushort pad2, nexif; + struct tiff_tag exif[4]; + ushort pad3, ngps; + struct tiff_tag gpst[10]; + short bps[4]; + int rat[10]; + unsigned gps[26]; + char desc[512], make[64], model[64], soft[32], date[20], artist[64]; +}; + +void CLASS tiff_set (ushort *ntag, + ushort tag, ushort type, int count, int val) +{ + struct tiff_tag *tt; + int c; + + tt = (struct tiff_tag *)(ntag+1) + (*ntag)++; + tt->tag = tag; + tt->type = type; + tt->count = count; + if (type < 3 && count <= 4) + FORC(4) tt->val.c[c] = val >> (c << 3); + else if (type == 3 && count <= 2) + FORC(2) tt->val.s[c] = val >> (c << 4); + else tt->val.i = val; +} + +#define TOFF(ptr) ((char *)(&(ptr)) - (char *)th) + +void CLASS tiff_head (struct tiff_hdr *th, int full) +{ + int c, psize=0; + struct tm *t; + + memset (th, 0, sizeof *th); + th->order = htonl(0x4d4d4949) >> 16; + th->magic = 42; + th->ifd = 10; + if (full) { + tiff_set (&th->ntag, 254, 4, 1, 0); + tiff_set (&th->ntag, 256, 4, 1, width); + tiff_set (&th->ntag, 257, 4, 1, height); + tiff_set (&th->ntag, 258, 3, colors, output_bps); + if (colors > 2) + th->tag[th->ntag-1].val.i = TOFF(th->bps); + FORC4 th->bps[c] = output_bps; + tiff_set (&th->ntag, 259, 3, 1, 1); + tiff_set (&th->ntag, 262, 3, 1, 1 + (colors > 1)); + } + tiff_set (&th->ntag, 270, 2, 512, TOFF(th->desc)); + tiff_set (&th->ntag, 271, 2, 64, TOFF(th->make)); + tiff_set (&th->ntag, 272, 2, 64, TOFF(th->model)); + if (full) { + if (oprof) psize = ntohl(oprof[0]); + tiff_set (&th->ntag, 273, 4, 1, sizeof *th + psize); + tiff_set (&th->ntag, 277, 3, 1, colors); + tiff_set (&th->ntag, 278, 4, 1, height); + tiff_set (&th->ntag, 279, 4, 1, height*width*colors*output_bps/8); + } else + tiff_set (&th->ntag, 274, 3, 1, "12435867"[flip]-'0'); + tiff_set (&th->ntag, 282, 5, 1, TOFF(th->rat[0])); + tiff_set (&th->ntag, 283, 5, 1, TOFF(th->rat[2])); + tiff_set (&th->ntag, 284, 3, 1, 1); + tiff_set (&th->ntag, 296, 3, 1, 2); + tiff_set (&th->ntag, 305, 2, 32, TOFF(th->soft)); + tiff_set (&th->ntag, 306, 2, 20, TOFF(th->date)); + tiff_set (&th->ntag, 315, 2, 64, TOFF(th->artist)); + tiff_set (&th->ntag, 34665, 4, 1, TOFF(th->nexif)); + if (psize) tiff_set (&th->ntag, 34675, 7, psize, sizeof *th); + tiff_set (&th->nexif, 33434, 5, 1, TOFF(th->rat[4])); + tiff_set (&th->nexif, 33437, 5, 1, TOFF(th->rat[6])); + tiff_set (&th->nexif, 34855, 3, 1, iso_speed); + tiff_set (&th->nexif, 37386, 5, 1, TOFF(th->rat[8])); + if (gpsdata[1]) { + tiff_set (&th->ntag, 34853, 4, 1, TOFF(th->ngps)); + tiff_set (&th->ngps, 0, 1, 4, 0x202); + tiff_set (&th->ngps, 1, 2, 2, gpsdata[29]); + tiff_set (&th->ngps, 2, 5, 3, TOFF(th->gps[0])); + tiff_set (&th->ngps, 3, 2, 2, gpsdata[30]); + tiff_set (&th->ngps, 4, 5, 3, TOFF(th->gps[6])); + tiff_set (&th->ngps, 5, 1, 1, gpsdata[31]); + tiff_set (&th->ngps, 6, 5, 1, TOFF(th->gps[18])); + tiff_set (&th->ngps, 7, 5, 3, TOFF(th->gps[12])); + tiff_set (&th->ngps, 18, 2, 12, TOFF(th->gps[20])); + tiff_set (&th->ngps, 29, 2, 12, TOFF(th->gps[23])); + memcpy (th->gps, gpsdata, sizeof th->gps); + } + th->rat[0] = th->rat[2] = 300; + th->rat[1] = th->rat[3] = 1; + FORC(6) th->rat[4+c] = 1000000; + th->rat[4] *= shutter; + th->rat[6] *= aperture; + th->rat[8] *= focal_len; + strncpy (th->desc, desc, 512); + strncpy (th->make, make, 64); + strncpy (th->model, model, 64); + strcpy (th->soft, "dcraw v"VERSION); + t = gmtime (×tamp); + sprintf (th->date, "%04d:%02d:%02d %02d:%02d:%02d", + t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); + strncpy (th->artist, artist, 64); +} + +void CLASS jpeg_thumb (FILE *tfp) +{ + char *thumb; + ushort exif[5]; + struct tiff_hdr th; + + thumb = (char *) malloc (thumb_length); + merror (thumb, "jpeg_thumb()"); + fread (thumb, 1, thumb_length, ifp); + fputc (0xff, tfp); + fputc (0xd8, tfp); + if (strcmp (thumb+6, "Exif")) { + memcpy (exif, "\xff\xe1 Exif\0\0", 10); + exif[1] = htons (8 + sizeof th); + fwrite (exif, 1, sizeof exif, tfp); + tiff_head (&th, 0); + fwrite (&th, 1, sizeof th, tfp); + } + fwrite (thumb+2, 1, thumb_length-2, tfp); + free (thumb); +} + +void CLASS write_ppm_tiff (FILE *ofp) +{ + struct tiff_hdr th; + uchar *ppm, lut[0x10000]; + ushort *ppm2; + int c, row, col, soff, rstep, cstep; + + iheight = height; + iwidth = width; + if (flip & 4) SWAP(height,width); + ppm = (uchar *) calloc (width, colors*output_bps/8); + ppm2 = (ushort *) ppm; + merror (ppm, "write_ppm_tiff()"); + if (output_tiff) { + tiff_head (&th, 1); + fwrite (&th, sizeof th, 1, ofp); + if (oprof) + fwrite (oprof, ntohl(oprof[0]), 1, ofp); + } else if (colors > 3) + fprintf (ofp, + "P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL %d\nTUPLTYPE %s\nENDHDR\n", + width, height, colors, (1 << output_bps)-1, cdesc); + else + fprintf (ofp, "P%d\n%d %d\n%d\n", + colors/2+5, width, height, (1 << output_bps)-1); + + if (output_bps == 8) gamma_lut (lut); + soff = flip_index (0, 0); + cstep = flip_index (0, 1) - soff; + rstep = flip_index (1, 0) - flip_index (0, width); + for (row=0; row < height; row++, soff += rstep) { + for (col=0; col < width; col++, soff += cstep) + if (output_bps == 8) + FORCC ppm [col*colors+c] = lut[image[soff][c]]; + else FORCC ppm2[col*colors+c] = image[soff][c]; + if (output_bps == 16 && !output_tiff && htons(0x55aa) != 0x55aa) + swab (ppm2, ppm2, width*colors*2); + fwrite (ppm, colors*output_bps/8, width, ofp); + } + free (ppm); +} + +int CLASS main (int argc, char **argv) +{ + int arg, status=0; + int timestamp_only=0, thumbnail_only=0, identify_only=0; + int user_qual=-1, user_black=-1, user_sat=-1, user_flip=-1; + int use_fuji_rotate=1, write_to_stdout=0, quality, i, c; + char opm, opt, *ofname, *sp, *cp, *bpfile=0, *dark_frame=0; + const char *write_ext; + struct utimbuf ut; + FILE *ofp; +#ifndef NO_LCMS + char *cam_profile=0, *out_profile=0; +#endif + +#ifndef LOCALTIME + putenv ("TZ=UTC"); +#endif +#ifdef LOCALEDIR + setlocale (LC_CTYPE, ""); + setlocale (LC_MESSAGES, ""); + bindtextdomain ("dcraw", LOCALEDIR); + textdomain ("dcraw"); +#endif + + if (argc == 1) { + printf(_("\nRaw photo decoder \"dcraw\" v%s"), VERSION); + printf(_("\nby Dave Coffin, dcoffin a cybercom o net\n")); + printf(_("\nUsage: %s [OPTION]... [FILE]...\n\n"), argv[0]); + puts(_("-v Print verbose messages")); + puts(_("-c Write image data to standard output")); + puts(_("-e Extract embedded thumbnail image")); + puts(_("-i Identify files without decoding them")); + puts(_("-i -v Identify files and show metadata")); + puts(_("-z Change file dates to camera timestamp")); + puts(_("-w Use camera white balance, if possible")); + puts(_("-a Average the whole image for white balance")); + puts(_("-A Average a grey box for white balance")); + puts(_("-r Set custom white balance")); + puts(_("+M/-M Use/don't use an embedded color matrix")); + puts(_("-C Correct chromatic aberration")); + puts(_("-P Fix the dead pixels listed in this file")); + puts(_("-K Subtract dark frame (16-bit raw PGM)")); + puts(_("-k Set the darkness level")); + puts(_("-S Set the saturation level")); + puts(_("-n Set threshold for wavelet denoising")); + puts(_("-H [0-9] Highlight mode (0=clip, 1=unclip, 2=blend, 3+=rebuild)")); + puts(_("-t [0-7] Flip image (0=none, 3=180, 5=90CCW, 6=90CW)")); + puts(_("-o [0-5] Output colorspace (raw,sRGB,Adobe,Wide,ProPhoto,XYZ)")); +#ifndef NO_LCMS + puts(_("-o Apply output ICC profile from file")); + puts(_("-p Apply camera ICC profile from file or \"embed\"")); +#endif + puts(_("-d Document mode (no color, no interpolation)")); + puts(_("-D Document mode without scaling (totally raw)")); + puts(_("-j Don't stretch or rotate raw pixels")); + puts(_("-W Don't automatically brighten the image")); + puts(_("-b Adjust brightness (default = 1.0)")); + puts(_("-q [0-3] Set the interpolation quality")); + puts(_("-h Half-size color image (twice as fast as \"-q 0\")")); + puts(_("-f Interpolate RGGB as four colors")); + puts(_("-m Apply a 3x3 median filter to R-G and B-G")); + puts(_("-s [0..N-1] Select one raw image or \"all\" from each file")); + puts(_("-4 Write 16-bit linear instead of 8-bit with gamma")); + puts(_("-T Write TIFF instead of PPM")); + puts(""); + return 1; + } + argv[argc] = ""; + for (arg=1; (((opm = argv[arg][0]) - 2) | 2) == '+'; ) { + opt = argv[arg++][1]; + if ((cp = strchr (sp="nbrkStqmHAC", opt))) + for (i=0; i < "11411111142"[cp-sp]-'0'; i++) + if (!isdigit(argv[arg+i][0])) { + fprintf (stderr,_("Non-numeric argument to \"-%c\"\n"), opt); + return 1; + } + switch (opt) { + case 'n': threshold = atof(argv[arg++]); break; + case 'b': bright = atof(argv[arg++]); break; + case 'r': + FORC4 user_mul[c] = atof(argv[arg++]); break; + case 'C': aber[0] = 1 / atof(argv[arg++]); + aber[2] = 1 / atof(argv[arg++]); break; + case 'k': user_black = atoi(argv[arg++]); break; + case 'S': user_sat = atoi(argv[arg++]); break; + case 't': user_flip = atoi(argv[arg++]); break; + case 'q': user_qual = atoi(argv[arg++]); break; + case 'm': med_passes = atoi(argv[arg++]); break; + case 'H': highlight = atoi(argv[arg++]); break; + case 's': + shot_select = abs(atoi(argv[arg])); + multi_out = !strcmp(argv[arg++],"all"); + break; + case 'o': + if (isdigit(argv[arg][0]) && !argv[arg][1]) + output_color = atoi(argv[arg++]); +#ifndef NO_LCMS + else out_profile = argv[arg++]; + break; + case 'p': cam_profile = argv[arg++]; +#endif + break; + case 'P': bpfile = argv[arg++]; break; + case 'K': dark_frame = argv[arg++]; break; + case 'z': timestamp_only = 1; break; + case 'e': thumbnail_only = 1; break; + case 'i': identify_only = 1; break; + case 'c': write_to_stdout = 1; break; + case 'v': verbose = 1; break; + case 'h': half_size = 1; /* "-h" implies "-f" */ + case 'f': four_color_rgb = 1; break; + case 'A': FORC4 greybox[c] = atoi(argv[arg++]); + case 'a': use_auto_wb = 1; break; + case 'w': use_camera_wb = 1; break; + case 'M': use_camera_matrix = (opm == '+'); break; + case 'D': + case 'd': document_mode = 1 + (opt == 'D'); + case 'j': use_fuji_rotate = 0; break; + case 'W': no_auto_bright = 1; break; + case 'T': output_tiff = 1; break; + case '4': output_bps = 16; break; + default: + fprintf (stderr,_("Unknown option \"-%c\".\n"), opt); + return 1; + } + } + if (use_camera_matrix < 0) + use_camera_matrix = use_camera_wb; + if (arg == argc) { + fprintf (stderr,_("No files to process.\n")); + return 1; + } + if (write_to_stdout) { + if (isatty(1)) { + fprintf (stderr,_("Will not write an image to the terminal!\n")); + return 1; + } +#if defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) + if (setmode(1,O_BINARY) < 0) { + perror ("setmode()"); + return 1; + } +#endif + } + for ( ; arg < argc; arg++) { + status = 1; + image = 0; + oprof = 0; + meta_data = ofname = 0; + ofp = stdout; + if (setjmp (failure)) { + if (fileno(ifp) > 2) fclose(ifp); + if (fileno(ofp) > 2) fclose(ofp); + status = 1; + goto cleanup; + } + ifname = argv[arg]; + if (!(ifp = fopen (ifname, "rb"))) { + perror (ifname); + continue; + } + status = (identify(),!is_raw); + if (user_flip >= 0) + flip = user_flip; + switch ((flip+3600) % 360) { + case 270: flip = 5; break; + case 180: flip = 3; break; + case 90: flip = 6; + } + if (timestamp_only) { + if ((status = !timestamp)) + fprintf (stderr,_("%s has no timestamp.\n"), ifname); + else if (identify_only) + printf ("%10ld%10d %s\n", (long) timestamp, shot_order, ifname); + else { + if (verbose) + fprintf (stderr,_("%s time set to %d.\n"), ifname, (int) timestamp); + ut.actime = ut.modtime = timestamp; + utime (ifname, &ut); + } + goto next; + } + write_fun = &CLASS write_ppm_tiff; + if (thumbnail_only) { + if ((status = !thumb_offset)) { + fprintf (stderr,_("%s has no thumbnail.\n"), ifname); + goto next; + } else if (thumb_load_raw) { + load_raw = thumb_load_raw; + data_offset = thumb_offset; + height = thumb_height; + width = thumb_width; + filters = 0; + } else { + fseek (ifp, thumb_offset, SEEK_SET); + write_fun = write_thumb; + goto thumbnail; + } + } + if (load_raw == &CLASS kodak_ycbcr_load_raw) { + height += height & 1; + width += width & 1; + } + if (identify_only && verbose && make[0]) { + printf (_("\nFilename: %s\n"), ifname); + printf (_("Timestamp: %s"), ctime(×tamp)); + printf (_("Camera: %s\n"), make); + printf (_("Model: %s\n"), model); + if (artist[0]) + printf (_("Owner: %s\n"), artist); + if (dng_version) { + printf (_("DNG Version: ")); + for (i=24; i >= 0; i -= 8) + printf ("%d%c", dng_version >> i & 255, i ? '.':'\n'); + } + printf (_("ISO speed: %d\n"), (int) iso_speed); + printf (_("Shutter: ")); + if (shutter > 0 && shutter < 1) + shutter = (printf ("1/"), 1 / shutter); + printf (_("%0.1f sec\n"), shutter); + printf (_("Aperture: f/%0.1f\n"), aperture); + printf (_("Focal length: %0.1f mm\n"), focal_len); + printf (_("Embedded ICC profile: %s\n"), profile_length ? _("yes"):_("no")); + printf (_("Number of raw images: %d\n"), is_raw); + if (pixel_aspect != 1) + printf (_("Pixel Aspect Ratio: %0.6f\n"), pixel_aspect); + if (thumb_offset) + printf (_("Thumb size: %4d x %d\n"), thumb_width, thumb_height); + printf (_("Full size: %4d x %d\n"), raw_width, raw_height); + } else if (!is_raw) + fprintf (stderr,_("Cannot decode file %s\n"), ifname); + if (!is_raw) goto next; + shrink = filters && + (half_size || threshold || aber[0] != 1 || aber[2] != 1); + iheight = (height + shrink) >> shrink; + iwidth = (width + shrink) >> shrink; + if (identify_only) { + if (verbose) { + if (use_fuji_rotate) { + if (fuji_width) { + fuji_width = (fuji_width - 1 + shrink) >> shrink; + iwidth = fuji_width / sqrt(0.5); + iheight = (iheight - fuji_width) / sqrt(0.5); + } else { + if (pixel_aspect < 1) iheight = iheight / pixel_aspect + 0.5; + if (pixel_aspect > 1) iwidth = iwidth * pixel_aspect + 0.5; + } + } + if (flip & 4) + SWAP(iheight,iwidth); + printf (_("Image size: %4d x %d\n"), width, height); + printf (_("Output size: %4d x %d\n"), iwidth, iheight); + printf (_("Raw colors: %d"), colors); + if (filters) { + printf (_("\nFilter pattern: ")); + if (!cdesc[3]) cdesc[3] = 'G'; + for (i=0; i < 16; i++) + putchar (cdesc[fc(i >> 1,i & 1)]); + } + printf (_("\nDaylight multipliers:")); + FORCC printf (" %f", pre_mul[c]); + if (cam_mul[0] > 0) { + printf (_("\nCamera multipliers:")); + FORC4 printf (" %f", cam_mul[c]); + } + putchar ('\n'); + } else + printf (_("%s is a %s %s image.\n"), ifname, make, model); +next: + fclose(ifp); + continue; + } + if (use_camera_matrix && cmatrix[0][0] > 0.25) { + memcpy (rgb_cam, cmatrix, sizeof cmatrix); + raw_color = 0; + } + image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image); + merror (image, "main()"); + if (meta_length) { + meta_data = (char *) malloc (meta_length); + merror (meta_data, "main()"); + } + if (verbose) + fprintf (stderr,_("Loading %s %s image from %s ...\n"), + make, model, ifname); + if (shot_select >= is_raw) + fprintf (stderr,_("%s: \"-s %d\" requests a nonexistent image!\n"), + ifname, shot_select); + fseeko (ifp, data_offset, SEEK_SET); + (*load_raw)(); + if (zero_is_bad) remove_zeroes(); + bad_pixels (bpfile); + if (dark_frame) subtract (dark_frame); + quality = 2 + !fuji_width; + if (user_qual >= 0) quality = user_qual; + if (user_black >= 0) black = user_black; + if (user_sat > 0) maximum = user_sat; +#ifdef COLORCHECK + colorcheck(); +#endif + if (is_foveon && !document_mode) foveon_interpolate(); + if (!is_foveon && document_mode < 2) scale_colors(); + pre_interpolate(); + if (filters && !document_mode) { + if (quality == 0) + lin_interpolate(); + else if (quality == 1 || colors > 3) + vng_interpolate(); + else if (quality == 2) + ppg_interpolate(); + else ahd_interpolate(); + } + if (mix_green) + for (colors=3, i=0; i < height*width; i++) + image[i][1] = (image[i][1] + image[i][3]) >> 1; + if (!is_foveon && colors == 3) median_filter(); + if (!is_foveon && highlight == 2) blend_highlights(); + if (!is_foveon && highlight > 2) recover_highlights(); + if (use_fuji_rotate) fuji_rotate(); +#ifndef NO_LCMS + if (cam_profile) apply_profile (cam_profile, out_profile); +#endif + convert_to_rgb(); + if (use_fuji_rotate) stretch(); +thumbnail: + if (write_fun == &CLASS jpeg_thumb) + write_ext = ".jpg"; + else if (output_tiff && write_fun == &CLASS write_ppm_tiff) + write_ext = ".tiff"; + else + write_ext = ".pgm\0.ppm\0.ppm\0.pam" + colors*5-5; + ofname = (char *) malloc (strlen(ifname) + 64); + merror (ofname, "main()"); + if (write_to_stdout) + strcpy (ofname,_("standard output")); + else { + strcpy (ofname, ifname); + if ((cp = strrchr (ofname, '.'))) *cp = 0; + if (multi_out) + sprintf (ofname+strlen(ofname), "_%0*d", + snprintf(0,0,"%d",is_raw-1), shot_select); + if (thumbnail_only) + strcat (ofname, ".thumb"); + strcat (ofname, write_ext); + ofp = fopen (ofname, "wb"); + if (!ofp) { + status = 1; + perror (ofname); + goto cleanup; + } + } + if (verbose) + fprintf (stderr,_("Writing data to %s ...\n"), ofname); + (*write_fun)(ofp); + fclose(ifp); + if (ofp != stdout) fclose(ofp); +cleanup: + if (meta_data) free (meta_data); + if (ofname) free (ofname); + if (oprof) free (oprof); + if (image) free (image); + if (multi_out) { + if (++shot_select < is_raw) arg--; + else shot_select = 0; + } + } + return status; +} diff --git a/libkdcraw/dcraw/kdcraw.1 b/libkdcraw/dcraw/kdcraw.1 new file mode 100644 index 0000000..90b2346 --- /dev/null +++ b/libkdcraw/dcraw/kdcraw.1 @@ -0,0 +1,267 @@ +.\" +.\" Man page for dcraw +.\" +.\" Copyright (c) 2008 by David Coffin +.\" +.\" You may distribute without restriction. +.\" +.\" David Coffin +.\" dcoffin a cybercom o net +.\" http://www.cybercom.net/~dcoffin +.\" +.TH dcraw 1 "February 6, 2008" +.LO 1 +.SH NAME +dcraw - command-line decoder for raw digital photos +.SH SYNOPSIS +.B dcraw +[\fIOPTION\fR]... [\fIFILE\fR]... +.SH DESCRIPTION +.B dcraw +decodes raw photos, displays metadata, and extracts thumbnails. +.SH GENERAL OPTIONS +.TP +.B -v +Print verbose messages, not just warnings and errors. +.TP +.B -c +Write decoded images or thumbnails to standard output. +.TP +.B -e +Extract the camera-generated thumbnail, not the raw image. +You'll get either a JPEG or a PPM file, depending on the camera. +.TP +.B -z +Change the access and modification times of an AVI, JPEG, TIFF or raw +file to when the photo was taken, assuming that the camera clock +was set to Universal Time. +.TP +.B -i +Identify files but don't decode them. +Exit status is 0 if +.B dcraw +can decode the last file, 1 if it can't. +.B -i -v +shows metadata. +.TP +.B "" +.B dcraw +cannot decode JPEG files!! +.SH REPAIR OPTIONS +.TP +.B -P deadpixels.txt +Read the dead pixel list from this file instead of ".badpixels". +See +.B FILES +for a description of the format. +.TP +.B -K darkframe.pgm +Subtract a dark frame from the raw data. To generate a +dark frame, shoot a raw photo with no light and do +.BR dcraw\ -D\ -4\ -j\ -t\ 0 . +.TP +.B -k darkness +When shadows appear foggy, you need to raise the darkness level. +To measure this, apply +.B pamsumm -mean +to the dark frame generated above. +.TP +.B -S saturation +When highlights appear pink, you need to lower the saturation level. +To measure this, take a picture of something shiny and do +.B dcraw -D -4 -j -c +photo.raw +.B | pamsumm -max +.TP +.B "" +The default darkness and saturation are usually correct. +.TP +.B -n noise_threshold +Use wavelets to erase noise while preserving real detail. +The best threshold should be somewhere between 100 and 1000. +.TP +.B -C red_mag blue_mag +Enlarge the raw red and blue layers by the given factors, +typically 0.999 to 1.001, to correct chromatic aberration. +.TP +.B -H 0 +Clip all highlights to solid white (default). +.TP +.B -H 1 +Leave highlights unclipped in various shades of pink. +.TP +.B -H 2 +Blend clipped and unclipped values together for a gradual fade +to white. +.TP +.B -H 3+ +Reconstruct highlights. Low numbers favor whites; high numbers +favor colors. Try +.B -H 5 +as a compromise. If that's not good enough, do +.BR -H\ 9 , +cut out the non-white highlights, and paste them into an image +generated with +.BR -H\ 3 . +.SH COLOR OPTIONS +By default, +.B dcraw +uses a fixed white balance based on a color chart illuminated +with a standard D65 lamp. +.TP +.B -w +Use the white balance specified by the camera. +If this is not found, print a warning and use another method. +.TP +.B -a +Calculate the white balance by averaging the entire image. +.TP +.B -A left top width height +Calculate the white balance by averaging a rectangular area. +First do +.B dcraw\ -j\ -t\ 0 +and select an area of neutral grey color. +.TP +.B -r mul0 mul1 mul2 mul3 +Specify your own raw white balance. +These multipliers can be cut and pasted from the output of +.BR dcraw\ -v . +.TP +.BR +M " or " -M +Use (or don't use) any color matrix from the camera metadata. +The default is +.B +M +if +.B -w +is set, +.B -M +otherwise. +This option only affects Olympus, Leaf, and Phase One cameras. +.TP +.B -o [0-5] +Select the output colorspace when the +.B -p +option is not used: + +.B \t0 +\ \ Raw color (unique to each camera) +.br +.B \t1 +\ \ sRGB D65 (default) +.br +.B \t2 +\ \ Adobe RGB (1998) D65 +.br +.B \t3 +\ \ Wide Gamut RGB D65 +.br +.B \t4 +\ \ Kodak ProPhoto RGB D65 +.br +.B \t5 +\ \ XYZ +.TP +.BR -p\ camera.icm \ [\ -o\ output.icm \ ] +Use ICC profiles to define the camera's raw colorspace and the +desired output colorspace (sRGB by default). +.TP +.B -p embed +Use the ICC profile embedded in the raw photo. +.SH INTERPOLATION OPTIONS +.TP +.B -d +Show the raw data as a grayscale image with no interpolation. +Good for photographing black-and-white documents. +.TP +.B -D +Same as +.BR -d , +but totally raw (no color scaling). +.TP +.B -h +Output a half-size color image. Twice as fast as +.BR -q\ 0 . +.TP +.B -q 0 +Use high-speed, low-quality bilinear interpolation. +.TP +.B -q 1 +Use Variable Number of Gradients (VNG) interpolation. +.TP +.B -q 2 +Use Patterned Pixel Grouping (PPG) interpolation. +.TP +.B -q 3 +Use Adaptive Homogeneity-Directed (AHD) interpolation. +.TP +.B -f +Interpolate RGB as four colors. Use this if the output shows +false 2x2 meshes with VNG or mazes with AHD. +.TP +.B -m number_of_passes +After interpolation, clean up color artifacts by repeatedly +applying a 3x3 median filter to the R-G and B-G channels. +.SH OUTPUT OPTIONS +By default, +.B dcraw +writes PGM/PPM/PAM with 8-bit samples, a BT.709 gamma curve, +a histogram-based white level, and no metadata. +.TP +.B -W +Use a fixed white level, ignoring the image histogram. +.TP +.B -b brightness +Divide the white level by this number, 1.0 by default. +.TP +.B -4 +Write 16-bit linear samples (fixed white level, no gamma). +.TP +.B -T +Write TIFF with metadata instead of PGM/PPM/PAM. +.TP +.B -t [0-7,90,180,270] +Flip the output image. By default, +.B dcraw +applies the flip specified by the camera. +.B -t 0 +disables all flipping. +.TP +.B -j +For Fuji\ Super\ CCD cameras, show the image tilted 45 degrees. +For cameras with non-square pixels, do not stretch the image to +its correct aspect ratio. In any case, this option guarantees +that each output pixel corresponds to one raw pixel. +.TP +.BR "-s [0..N-1]" " or " "-s all" +If a file contains N raw images, choose one or "all" to decode. +For example, Fuji\ Super\ CCD\ SR cameras generate a second image +underexposed four stops to show detail in the highlights. +.SH FILES +.TP +\:./.badpixels, ../.badpixels, ../../.badpixels, ... +List of your camera's dead pixels, so that +.B dcraw +can interpolate around them. Each line specifies the column, +row, and UNIX time of death for one pixel. For example: +.sp 1 +.nf + 962 91 1028350000 # died between August 1 and 4, 2002 +1285 1067 0 # don't know when this pixel died +.fi +.sp 1 +These coordinates are before any cropping or rotation, so use +.B dcraw -j -t 0 +to locate dead pixels. +.SH "SEE ALSO" +.BR pgm (5), +.BR ppm (5), +.BR pam (5), +.BR pamsumm (1), +.BR pnmgamma (1), +.BR pnmtotiff (1), +.BR pnmtopng (1), +.BR gphoto2 (1), +.BR cjpeg (1), +.BR djpeg (1) +.SH AUTHOR +Written by David Coffin, dcoffin a cybercom o net diff --git a/libkdcraw/icons/Makefile.am b/libkdcraw/icons/Makefile.am new file mode 100644 index 0000000..8ab548d --- /dev/null +++ b/libkdcraw/icons/Makefile.am @@ -0,0 +1 @@ +KDE_ICON = kdcraw diff --git a/libkdcraw/icons/hi128-app-kdcraw.png b/libkdcraw/icons/hi128-app-kdcraw.png new file mode 100644 index 0000000..9dd7d3e Binary files /dev/null and b/libkdcraw/icons/hi128-app-kdcraw.png differ diff --git a/libkdcraw/icons/hi32-app-kdcraw.png b/libkdcraw/icons/hi32-app-kdcraw.png new file mode 100644 index 0000000..ce2e42d Binary files /dev/null and b/libkdcraw/icons/hi32-app-kdcraw.png differ diff --git a/libkdcraw/icons/hi48-app-kdcraw.png b/libkdcraw/icons/hi48-app-kdcraw.png new file mode 100644 index 0000000..061e2f5 Binary files /dev/null and b/libkdcraw/icons/hi48-app-kdcraw.png differ diff --git a/libkdcraw/icons/hi64-app-kdcraw.png b/libkdcraw/icons/hi64-app-kdcraw.png new file mode 100644 index 0000000..9e94236 Binary files /dev/null and b/libkdcraw/icons/hi64-app-kdcraw.png differ diff --git a/libkdcraw/libkdcraw.kdevelop b/libkdcraw/libkdcraw.kdevelop new file mode 100644 index 0000000..b48a188 --- /dev/null +++ b/libkdcraw/libkdcraw.kdevelop @@ -0,0 +1,213 @@ + + + + Caulier Gilles + caulier dot gilles at kdemail dot net + $VERSION$ + KDevAutoProject + C + + . + false + + + + + + src/libkdcraw + default + + + /home/gilles/Documents/Devel/SVN/trunk/extragear/libs/libkdcraw/dcraw/kdcraw + custom + /home/gilles/Documents/Devel/SVN/trunk/extragear/libs/libkdcraw/dcraw/ + -v -5 ./photo.mrw + false + true + + + + + optimized + GccOptions + GppOptions + G77Options + -O2 -g0 + + + --enable-debug=full + + kdevgccoptions + kdevgppoptions + kdevpgf77options + -O0 -g3 + + ../ + + + + + + + + + + + --enable-debug=full + + ../ + + + kdevgccoptions + kdevgppoptions + kdevpgf77options + + + + + + + + + + + + + + true + false + 1 + false + + 0 + + + + + libtool + -v -5 ./photo.mrw + + + + + true + false + false + + + false + true + 10 + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + kde2book + libstdc++ + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + qt-kdev3 + ruby + ruby_bugs + sdl + stl + sw + w3c-dom-level2-html + w3c-svg + w3c-uaag10 + wxwidgets_bugs + + + Guide to the Qt Translation Tools + Qt Assistant Manual + Qt Designer Manual + Qt Reference Documentation + qmake User Guide + + + KDE Libraries (Doxygen) + + + + + + + + + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + false + 3 + /usr/lib/qt3/ + + + + set + m_,_ + theValue + true + true + + + + + false + false + + + *.o,*.lo,CVS + false + + + + + .h + .cpp + + + + + + + + + + + + + + diff --git a/libkdcraw/libkdcraw.pc.in b/libkdcraw/libkdcraw.pc.in new file mode 100644 index 0000000..87b3128 --- /dev/null +++ b/libkdcraw/libkdcraw.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libkdcraw +Description: KDE interface library for dcraw command line program to decode RAW picture files +URL: http://www.kipi-plugins.org +Requires: +Version: 0.1.4 +Libs: -L${libdir} -lkdcraw +Cflags: -I${includedir} diff --git a/libkdcraw/libkdcraw/Makefile.am b/libkdcraw/libkdcraw/Makefile.am new file mode 100644 index 0000000..204f578 --- /dev/null +++ b/libkdcraw/libkdcraw/Makefile.am @@ -0,0 +1,18 @@ +METASOURCES = AUTO + +KDE_CXXFLAGS = -DKDCRAW_DIR='"$(KDCRAW_DIR)"' + +INCLUDES= $(all_includes) + +lib_LTLIBRARIES = libkdcraw.la + +libkdcraw_la_SOURCES = dcrawbinary.cpp kdcraw.cpp dcrawsettingswidget.cpp + +libkdcraw_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -version-info $(VERSION_INFO) -no-undefined +libkdcraw_la_LIBADD = $(LIB_KDEUI) $(LIB_KDECORE) $(LIB_QT) + +libkdcrawinclude_HEADERS = rawdecodingsettings.h kdcraw.h dcrawbinary.h dcrawsettingswidget.h \ + dcrawinfocontainer.h rawfiles.h libkdcraw_export.h version.h + +libkdcrawincludedir = $(includedir)/libkdcraw + diff --git a/libkdcraw/libkdcraw/dcrawbinary.cpp b/libkdcraw/libkdcraw/dcrawbinary.cpp new file mode 100644 index 0000000..33ed117 --- /dev/null +++ b/libkdcraw/libkdcraw/dcrawbinary.cpp @@ -0,0 +1,208 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2006-04-13 + * Description : detection of dcraw binary program + * + * Copyright (C) 2006-2008 by Gilles Caulier + * Copyright (C) 2006-2008 by Marcel Wiesweg + * + * 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. + * + * ============================================================ */ + +// Qt includes. + +#include + +// KDE includes + +#include +#include +#include +#include +#include +#include + +// Local includes + +#include "rawfiles.h" +#include "dcrawbinary.h" +#include "dcrawbinary.moc" + +namespace KDcrawIface +{ + +class DcrawBinaryPriv +{ +public: + + DcrawBinaryPriv() + { + available = false; + version = QString::null; + } + + bool available; + + QString version; +}; + +DcrawBinary *DcrawBinary::m_instance = 0; + +DcrawBinary::DcrawBinary() + : QObject() +{ + d = new DcrawBinaryPriv; +} + +DcrawBinary::~DcrawBinary() +{ + m_instance = 0; + delete d; +} + +DcrawBinary *DcrawBinary::instance() +{ + if (!m_instance) + m_instance = new DcrawBinary; + return m_instance; +} + +void DcrawBinary::cleanUp() +{ + delete m_instance; +} + +void DcrawBinary::checkSystem() +{ + KProcess process; + process.clearArguments(); + process << path(); + + connect(&process, SIGNAL(receivedStdout(KProcess *, char*, int)), + this, SLOT(slotReadStdoutFromDcraw(KProcess*, char*, int))); + + d->available = process.start(KProcess::Block, KProcess::Stdout); +} + +void DcrawBinary::slotReadStdoutFromDcraw(KProcess*, char* buffer, int buflen) +{ + // The dcraw output looks like this : Raw photo decoder "dcraw" v8.54... + QString dcrawHeader("Raw photo decoder \"dcraw\" v"); + + QString dcrawOut = QString::fromLocal8Bit(buffer, buflen); + QString firstLine = dcrawOut.section('\n', 1, 1); + + if (firstLine.startsWith(dcrawHeader)) + { + d->version = firstLine.remove(0, dcrawHeader.length()); + qDebug("Found dcraw version: %s", version().ascii()); + } +} + +const char *DcrawBinary::path() +{ + return KDCRAW_DIR "/kdcraw"; +} + +const char *DcrawBinary::rawFiles() +{ + return raw_file_extentions; +} + +bool DcrawBinary::isAvailable() const +{ + return d->available; +} + +QString DcrawBinary::version() const +{ + return d->version; +} + +QString DcrawBinary::internalVersion() +{ + // The version of dcraw include with this library. + // Look into dcraw/dcraw.c implementation. + return QString("8.83"); +} + +bool DcrawBinary::versionIsRight() const +{ + if (d->version.isNull() || !isAvailable()) + return false; + + if (d->version.toFloat() >= internalVersion().toFloat()) + return true; + + return false; +} + +void DcrawBinary::checkReport() +{ + QString appName = KGlobal::instance()->aboutData()->programName(); + + if (!isAvailable()) + { + KMessageBox::information( + kapp->activeWindow(), + i18n("

Unable to find the %1 executable:
" + "This binary program is required to support Raw file formats. " + "You can continue, but you will not be able " + "to handle any Raw images. " + "Please check the installation of libkdcraw package on your computer.") + .arg(path()), + QString(), + i18n("Do not show this message again"), + KMessageBox::Notify | KMessageBox::AllowLink); + return; + } + + if (!versionIsRight()) + { + KMessageBox::information( + kapp->activeWindow(), + i18n("

%1 executable is not up to date:
" + "The version %2 of this binary program have been found on your computer. " + "This version is too old to run properly. " + "You can continue, but you will not be able " + "to handle any Raw images. " + "Please check the installation of libkdcraw package on your computer.") + .arg(path()) + .arg(version()), + QString(), + i18n("Do not show this message again"), + KMessageBox::Notify | KMessageBox::AllowLink); + } +} + +QStringList DcrawBinary::supportedCamera() +{ + QFileInfo fi(path()); + QFile file(fi.dirPath() + QString("/CAMERALIST")); + if ( !file.open(IO_ReadOnly) ) + return QStringList(); + + QByteArray data; + data.resize(file.size()); + QDataStream stream( &file ); + stream.readRawBytes(data.data(), data.size()); + file.close(); + + QString tmp(data); + QStringList list = QStringList::split('\n', tmp); + return list; +} + +} // namespace KDcrawIface diff --git a/libkdcraw/libkdcraw/dcrawbinary.h b/libkdcraw/libkdcraw/dcrawbinary.h new file mode 100644 index 0000000..56d061e --- /dev/null +++ b/libkdcraw/libkdcraw/dcrawbinary.h @@ -0,0 +1,99 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2006-04-13 + * Description : detection of dcraw binary program + * + * Copyright (C) 2006-2008 by Gilles Caulier + * Copyright (C) 2006-2008 by Marcel Wiesweg + * + * 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. + * + * ============================================================ */ + +#ifndef DCRAW_BINARY_H +#define DCRAW_BINARY_H + +// Qt includes. + +#include +#include + +// Local Includes. + +#include "libkdcraw_export.h" + +class KProcess; + +namespace KDcrawIface +{ + +class DcrawBinaryPriv; + +class LIBKDCRAW_EXPORT DcrawBinary : public QObject +{ + Q_OBJECT + +public: + + static DcrawBinary *instance(); + static void cleanUp(); + + /** Return the RAW decoding program name. */ + static const char *path(); + + /** Return the string of all RAW file type mime supported. */ + static const char *rawFiles(); + + /** Return the RAW decoding program version included in this library. */ + static QString internalVersion(); + + /** Return 'true' if RAW decoding program have be found in your system. */ + bool isAvailable() const; + + /** Return the RAW decoding program version found in your system. */ + QString version() const; + + /** Return 'true' if RAW decoding program version found in your system is + the same than the version provided by this library. */ + bool versionIsRight() const; + + /** Check your system to see if RAW decoding program is available. */ + void checkSystem(); + + /** Report any errors on a message box if RAW decoding program detection + on your system failed. */ + void checkReport(); + + /** Provide a list of supported RAW Camera name. */ + QStringList supportedCamera(); + +private slots: + + void slotReadStdoutFromDcraw(KProcess*, char*, int); + +private: + + DcrawBinary(); + ~DcrawBinary(); + +private: + + static DcrawBinary *m_instance; + + DcrawBinaryPriv *d; +}; + +} // namespace KDcrawIface + +#endif // DCRAW_BINARY_H diff --git a/libkdcraw/libkdcraw/dcrawinfocontainer.h b/libkdcraw/libkdcraw/dcrawinfocontainer.h new file mode 100644 index 0000000..1c699ed --- /dev/null +++ b/libkdcraw/libkdcraw/dcrawinfocontainer.h @@ -0,0 +1,135 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2007-05-02 + * Description : RAW file identification information container + * + * Copyright (C) 2007-2008 by Gilles Caulier + * + * 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. + * + * ============================================================ */ + +#ifndef DCRAW_INFO_CONTAINER_H +#define DCRAW_INFO_CONTAINER_H + +// QT includes. + +#include +#include +#include + +// Local Includes. + +#include "libkdcraw_export.h" + +namespace KDcrawIface +{ + +class LIBKDCRAW_EXPORT DcrawInfoContainer +{ + +public: + + /** Standard constructor */ + DcrawInfoContainer() + { + sensitivity = -1; + exposureTime = -1.0; + aperture = -1.0; + focalLength = -1.0; + pixelAspectRatio = 1.0; // Default value. This can be unavailable (depending of camera model). + rawColors = -1; + hasIccProfile = false; + isDecodable = false; + hasSecondaryPixel = false; + daylightMult[0] = 0.0; + daylightMult[1] = 0.0; + daylightMult[2] = 0.0; + cameraMult[0] = 0.0; + cameraMult[1] = 0.0; + cameraMult[2] = 0.0; + cameraMult[3] = 0.0; + }; + + /** Standard destructor */ + virtual ~DcrawInfoContainer(){} + + /** return 'true' if container is empty, else 'false' */ + bool isEmpty() + { + if ( make.isEmpty() && + model.isEmpty() && + filterPattern.isEmpty() && + DNGVersion.isEmpty() && + exposureTime == -1.0 && + aperture == -1.0 && + focalLength == -1.0 && + pixelAspectRatio == 1.0 && + sensitivity == -1 && + rawColors == -1 && + !dateTime.isValid() && + !imageSize.isValid() ) + return true; + else + return false; + }; + + /** True if camera sensor use a secondary pixel. */ + bool hasSecondaryPixel; + /** True if RAW file include an ICC color profile. */ + bool hasIccProfile; + /** True is RAW file is decodable by dcraw. */ + bool isDecodable; + + /** The number of RAW colors. */ + int rawColors; + + /** The sensitivity in ISO used by camera to take the picture. */ + long sensitivity; + + /** ==> 1/exposureTime = exposure time in seconds. */ + float exposureTime; + /** ==> Aperture value in APEX. */ + float aperture; + /** ==> Focal Length value in mm. */ + float focalLength; + /** The pixel Aspect Ratio if != 1.0. NOTE: if == 1.0, dcraw do not show this value. */ + float pixelAspectRatio; + + /** White color balance settings. */ + double daylightMult[3]; + /** Camera multipliers used for White Balance adjustements */ + double cameraMult[4]; + + /** The camera maker. */ + QString make; + /** The camera model. */ + QString model; + /** The artist name who have picture owner. */ + QString owner; + /** The demosaising filter pattern. */ + QString filterPattern; + /** The DNG version. NOTE: its only show with DNG RAW files. */ + QString DNGVersion; + + /** Date & time when have been taken the picture. */ + QDateTime dateTime; + + /** The image dimensions in pixels. */ + QSize imageSize; +}; + +} // namespace KDcrawIface + +#endif /* DCRAW_INFO_CONTAINER_H */ diff --git a/libkdcraw/libkdcraw/dcrawsettingswidget.cpp b/libkdcraw/libkdcraw/dcrawsettingswidget.cpp new file mode 100644 index 0000000..11ec681 --- /dev/null +++ b/libkdcraw/libkdcraw/dcrawsettingswidget.cpp @@ -0,0 +1,835 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2006-09-13 + * Description : dcraw settings widgets + * + * Copyright (C) 2006-2008 by Gilles Caulier + * Copyright (C) 2006-2008 by Marcel Wiesweg + * Copyright (C) 2007-2008 by Guillaume Castagnino + * + * 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. + * + * ============================================================ */ + +// Qt includes. + +#include +#include +#include +#include +#include +#include +#include +#include + +// KDE includes. + +#include +#include +#include +#include +#include + +// Local includes. + +#include "dcrawbinary.h" +#include "dcrawsettingswidget.h" +#include "dcrawsettingswidget.moc" + +namespace KDcrawIface +{ + +class DcrawSettingsWidgetPriv +{ +public: + + DcrawSettingsWidgetPriv() + { + sixteenBitsImage = 0; + fourColorCheckBox = 0; + brightnessLabel = 0; + brightnessSpinBox = 0; + blackPointCheckBox = 0; + blackPointSpinBox = 0; + whiteBalanceComboBox = 0; + whiteBalanceLabel = 0; + customWhiteBalanceSpinBox = 0; + customWhiteBalanceLabel = 0; + customWhiteBalanceGreenSpinBox = 0; + customWhiteBalanceGreenLabel = 0; + unclipColorLabel = 0; + dontStretchPixelsCheckBox = 0; + RAWQualityComboBox = 0; + RAWQualityLabel = 0; + enableNoiseReduction = 0; + NRThresholdSpinBox = 0; + NRThresholdLabel = 0; + enableCACorrection = 0; + caRedMultSpinBox = 0; + caBlueMultSpinBox = 0; + caRedMultLabel = 0; + caBlueMultLabel = 0; + unclipColorComboBox = 0; + reconstructLabel = 0; + reconstructSpinBox = 0; + outputColorSpaceLabel = 0; + outputColorSpaceComboBox = 0; + stdSettings = 0; + advSettings = 0; + } + + QWidget *stdSettings; + QWidget *advSettings; + + QLabel *whiteBalanceLabel; + QLabel *customWhiteBalanceLabel; + QLabel *customWhiteBalanceGreenLabel; + QLabel *brightnessLabel; + QLabel *RAWQualityLabel; + QLabel *NRThresholdLabel; + QLabel *caRedMultLabel; + QLabel *caBlueMultLabel; + QLabel *unclipColorLabel; + QLabel *reconstructLabel; + QLabel *outputColorSpaceLabel; + + QComboBox *whiteBalanceComboBox; + QComboBox *RAWQualityComboBox; + QComboBox *unclipColorComboBox; + QComboBox *outputColorSpaceComboBox; + + QCheckBox *blackPointCheckBox; + QCheckBox *sixteenBitsImage; + QCheckBox *fourColorCheckBox; + QCheckBox *customWhiteBalanceCheckBox; + QCheckBox *dontStretchPixelsCheckBox; + QCheckBox *enableNoiseReduction; + QCheckBox *enableCACorrection; + + KIntNumInput *customWhiteBalanceSpinBox; + KIntNumInput *reconstructSpinBox; + KIntNumInput *blackPointSpinBox; + KIntNumInput *NRThresholdSpinBox; + + KDoubleNumInput *customWhiteBalanceGreenSpinBox; + KDoubleNumInput *caRedMultSpinBox; + KDoubleNumInput *caBlueMultSpinBox; + KDoubleNumInput *brightnessSpinBox; +}; + +DcrawSettingsWidget::DcrawSettingsWidget(QWidget *parent, bool sixteenBitsOption, + bool outputColorSpaceOption, bool showAdvancedOptions) + : KTabWidget(parent) +{ + d = new DcrawSettingsWidgetPriv; + setMargin(0); + + d->stdSettings = new QWidget(this); + QGridLayout* settingsBoxLayout = new QGridLayout(d->stdSettings, 11, 2, KDialog::spacingHint()); + + // --------------------------------------------------------------- + + int line = 0; + + d->sixteenBitsImage = new QCheckBox(i18n("16 bits color depth"), d->stdSettings); + QWhatsThis::add( d->sixteenBitsImage, i18n("

If enabled, all RAW files will be decoded in 16-bit " + "color depth using a linear gamma curve. To prevent dark " + "picture rendering in the editor, it is recommended to use " + "Color Management in this mode.

" + "If disabled, all RAW files will be decoded in 8-bit " + "color depth with a BT.709 gamma curve and a 99th-percentile " + "white point. This mode is faster than 16-bit decoding.")); + settingsBoxLayout->addMultiCellWidget(d->sixteenBitsImage, 0, 0, 0, 0); + + if (sixteenBitsOption) + { + d->sixteenBitsImage->show(); + line = 1; + } + else + { + d->sixteenBitsImage->hide(); + } + + // --------------------------------------------------------------- + + d->fourColorCheckBox = new QCheckBox(i18n("Interpolate RGB as four colors"), d->stdSettings); + QWhatsThis::add(d->fourColorCheckBox, i18n("

Interpolate RGB as four colors

" + "The default is to assume that all green " + "pixels are the same. If even-row green " + "pixels are more sensitive to ultraviolet light " + "than odd-row this difference causes a mesh " + "pattern in the output; using this option solves " + "this problem with minimal loss of detail.

" + "To resume, this option blurs the image " + "a little, but it eliminates false 2x2 mesh patterns " + "with VNG quality method or mazes with AHD quality method.")); + settingsBoxLayout->addMultiCellWidget(d->fourColorCheckBox, line, line, 0, 0); + line++; + + // --------------------------------------------------------------- + + KURLLabel *dcrawVersion = new KURLLabel("http://cybercom.net/~dcoffin/dcraw", i18n("dcraw %1") + .arg(DcrawBinary::internalVersion()), d->stdSettings); + dcrawVersion->setAlignment(Qt::AlignRight); + QToolTip::add(dcrawVersion, i18n("Visit dcraw project website")); + settingsBoxLayout->addMultiCellWidget(dcrawVersion, 0, 0, 2, 2); + + // --------------------------------------------------------------- + + d->whiteBalanceLabel = new QLabel(i18n("White Balance:"), d->stdSettings); + d->whiteBalanceComboBox = new QComboBox( false, d->stdSettings ); + d->whiteBalanceComboBox->insertItem( i18n("Default D65 White Balance"), 0 ); + d->whiteBalanceComboBox->insertItem( i18n("Camera White Balance"), 1 ); + d->whiteBalanceComboBox->insertItem( i18n("Automatic White Balance"), 2 ); + d->whiteBalanceComboBox->insertItem( i18n("Manual White balance"), 3 ); + QWhatsThis::add( d->whiteBalanceComboBox, i18n("

White Balance

" + "Configure the raw white balance :

" + "Default D65 White Balance: Use a standard daylight D65 white balance (dcraw defaults)

" + "Camera White Balance: Use the white balance specified by the camera. " + "If not available, reverts to default neutral white balance

" + "Automatic White Balance: Calculates an automatic white balance " + "averaging the entire image

" + "Manual White balance: Set a custom temperature and green level values")); + settingsBoxLayout->addMultiCellWidget(d->whiteBalanceLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->whiteBalanceComboBox, line, line, 1, 2); + line++; + + d->customWhiteBalanceSpinBox = new KIntNumInput(d->stdSettings); + d->customWhiteBalanceSpinBox->setRange(2000, 12000, 10, true); + d->customWhiteBalanceLabel = new QLabel(i18n("Temperature (K):"), d->stdSettings); + QWhatsThis::add( d->customWhiteBalanceSpinBox, i18n("

Temperature

" + "Set here the color temperature.")); + settingsBoxLayout->addMultiCellWidget(d->customWhiteBalanceLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->customWhiteBalanceSpinBox, line, line, 1, 2); + line++; + + d->customWhiteBalanceGreenSpinBox = new KDoubleNumInput(d->stdSettings); + d->customWhiteBalanceGreenSpinBox->setPrecision(2); + d->customWhiteBalanceGreenSpinBox->setRange(0.2, 2.5, 0.01, true); + d->customWhiteBalanceGreenLabel = new QLabel(i18n("Green:"), d->stdSettings); + QWhatsThis::add( d->customWhiteBalanceGreenSpinBox, i18n("

Set here the green component to set magenta color " + "cast removal level.")); + settingsBoxLayout->addMultiCellWidget(d->customWhiteBalanceGreenLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->customWhiteBalanceGreenSpinBox, line, line, 1, 2); + line++; + + // --------------------------------------------------------------- + + d->unclipColorLabel = new QLabel(i18n("Highlights:"), d->stdSettings); + d->unclipColorComboBox = new QComboBox( false, d->stdSettings ); + d->unclipColorComboBox->insertItem( i18n("Solid white"), 0 ); + d->unclipColorComboBox->insertItem( i18n("Unclip"), 1 ); + d->unclipColorComboBox->insertItem( i18n("Blend"), 2 ); + d->unclipColorComboBox->insertItem( i18n("Rebuild"), 3 ); + QWhatsThis::add( d->unclipColorComboBox, i18n("

Highlights

" + "Select here the highlight clipping method:

" + "Solid white: clip all highlights to solid white

" + "Unclip: leave highlights unclipped in various " + "shades of pink

" + "Blend:Blend clipped and unclipped values together for a gradual fade to white

" + "Rebuild: reconstruct highlights using a " + "level value")); + settingsBoxLayout->addMultiCellWidget(d->unclipColorLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->unclipColorComboBox, line, line, 1, 2); + line++; + + d->reconstructLabel = new QLabel(i18n("Level:"), d->stdSettings); + d->reconstructSpinBox = new KIntNumInput(d->stdSettings); + d->reconstructSpinBox->setRange(0, 6, 1, true); + QWhatsThis::add(d->reconstructSpinBox, i18n("

Level

" + "Specify the reconstruct highlight level. " + "Low values favor whites and high values favor colors.")); + settingsBoxLayout->addMultiCellWidget(d->reconstructLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->reconstructSpinBox, line, line, 1, 2); + line++; + + // --------------------------------------------------------------- + + d->brightnessLabel = new QLabel(i18n("Brightness:"), d->stdSettings); + d->brightnessSpinBox = new KDoubleNumInput(d->stdSettings); + d->brightnessSpinBox->setPrecision(2); + d->brightnessSpinBox->setRange(0.0, 10.0, 0.01, true); + QWhatsThis::add(d->brightnessSpinBox, i18n("

Brighness

" + "Specify the brightness level of output image." + "The default value is 1.0 (works in 8-bit mode only).

")); + settingsBoxLayout->addMultiCellWidget(d->brightnessLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->brightnessSpinBox, line, line, 1, 2); + line++; + + // --------------------------------------------------------------- + + d->RAWQualityLabel = new QLabel(i18n("Quality (interpolation):"), d->stdSettings); + d->RAWQualityComboBox = new QComboBox( false, d->stdSettings ); + d->RAWQualityComboBox->insertItem( i18n("Bilinear"), 0 ); + d->RAWQualityComboBox->insertItem( i18n("VNG"), 1 ); + d->RAWQualityComboBox->insertItem( i18n("PPG"), 2 ); + d->RAWQualityComboBox->insertItem( i18n("AHD"), 3 ); + QWhatsThis::add( d->RAWQualityComboBox, i18n("

Quality

" + "Select here the demosaicing RAW images decoding " + "interpolation method. A demosaicing algorithm is a digital image process used to " + "interpolate a complete image from the partial raw data received from the color-filtered " + "image sensor internal to many digital cameras in form of a matrix of colored pixels. " + "Also known as CFA interpolation or color reconstruction, another common spelling " + "is demosaicing. There are 3 methods to demosaicing RAW images:

" + "Bilinear: use high-speed but low-quality bilinear " + "interpolation (default - for slow computer). In this method, " + "the red value of a non-red pixel is computed as the average of " + "the adjacent red pixels, and similar for blue and green.

" + "VNG: use Variable Number of Gradients interpolation. " + "This method computes gradients near the pixel of interest and uses " + "the lower gradients (representing smoother and more similar parts " + "of the image) to make an estimate.

" + "PPG: use Patterned Pixel Grouping interpolation. " + "Pixel Grouping uses assumptions about natural scenery in making estimates. " + "It has fewer color artifacts on natural images than the Variable Number of " + "Gradients method.

" + "AHD: use Adaptive Homogeneity-Directed interpolation. " + "This method selects the direction of interpolation so as to " + "maximize a homogeneity metric, thus typically minimizing color artifacts.

")); + settingsBoxLayout->addMultiCellWidget(d->RAWQualityLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->RAWQualityComboBox, line, line, 1, 2); + line++; + + // --------------------------------------------------------------- + + d->enableNoiseReduction = new QCheckBox(i18n("Enable noise reduction"), d->stdSettings); + QWhatsThis::add( d->enableNoiseReduction, i18n("

Enable Noise Reduction

" + "Use wavelets to erase noise while preserving real detail.

")); + settingsBoxLayout->addMultiCellWidget(d->enableNoiseReduction, line, line, 0, 2); + line++; + + d->NRThresholdSpinBox = new KIntNumInput(d->stdSettings); + d->NRThresholdSpinBox->setRange(10, 1000, 1, true); + d->NRThresholdLabel = new QLabel(i18n("Threshold:"), d->stdSettings); + QWhatsThis::add( d->NRThresholdSpinBox, i18n("

Threshold

" + "Set here the noise reduction threshold value to use.")); + settingsBoxLayout->addMultiCellWidget(d->NRThresholdLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->NRThresholdSpinBox, line, line, 1, 2); + line++; + + // --------------------------------------------------------------- + + d->enableCACorrection = new QCheckBox(i18n("Enable Chromatic Aberration correction"), d->stdSettings); + QWhatsThis::add( d->enableCACorrection, i18n("

Enable Chromatic Aberration correction

" + "Enlarge the raw red and blue layers by the given factors, " + "typically 0.999 to 1.001, to correct chromatic aberration.

")); + settingsBoxLayout->addMultiCellWidget(d->enableCACorrection, line, line, 0, 2); + line++; + + d->caRedMultLabel = new QLabel(i18n("Red multiplier:"), d->stdSettings); + d->caRedMultSpinBox = new KDoubleNumInput(d->stdSettings); + d->caRedMultSpinBox->setPrecision(5); + d->caRedMultSpinBox->setRange(0.00001, 2.0, 0.001, true); + QWhatsThis::add( d->caRedMultSpinBox, i18n("

Red multiplier

" + "Set here the magnification factor of the red layer")); + + d->caBlueMultLabel = new QLabel(i18n("Blue multiplier:"), d->stdSettings); + d->caBlueMultSpinBox = new KDoubleNumInput(d->stdSettings); + d->caBlueMultSpinBox->setPrecision(5); + d->caBlueMultSpinBox->setRange(0.00001, 2.0, 0.001, true); + QWhatsThis::add( d->caBlueMultSpinBox, i18n("

Blue multiplier

" + "Set here the magnification factor of the blue layer")); + + settingsBoxLayout->addMultiCellWidget(d->caRedMultLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->caRedMultSpinBox, line, line, 1, 2); + line++; + settingsBoxLayout->addMultiCellWidget(d->caBlueMultLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->caBlueMultSpinBox, line, line, 1, 2); + line++; + + // --------------------------------------------------------------- + + d->outputColorSpaceLabel = new QLabel(i18n("Color space:"), d->stdSettings); + d->outputColorSpaceComboBox = new QComboBox( false, d->stdSettings ); + d->outputColorSpaceComboBox->insertItem( i18n("Raw (linear)"), 0 ); + d->outputColorSpaceComboBox->insertItem( i18n("sRGB"), 1 ); + d->outputColorSpaceComboBox->insertItem( i18n("Adobe RGB"), 2 ); + d->outputColorSpaceComboBox->insertItem( i18n("Wide Gamut"), 3 ); + d->outputColorSpaceComboBox->insertItem( i18n("Pro-Photo"), 4 ); + QWhatsThis::add( d->outputColorSpaceComboBox, i18n("

Color space

" + "Select here the output color space used to decode RAW data.

" + "Raw (linear): in this mode, no output color space is used " + "during RAW decoding.

" + "sRGB: this is a RGB color space, created " + "cooperatively by Hewlett-Packard and Microsoft. It is the " + "best choice for images destined for the Web and portrait photography.

" + "Adobe RGB: this color space is an extended RGB color space, developed by " + "Adobe. It is used for photography applications such as advertising " + "and fine art.

" + "Wide Gamut: this color space is an expanded version of the " + "Adobe RGB color space.

" + "Pro-Photo: this color space is an RGB color space, developed by " + "Kodak, that offers an especially large gamut designed for use with " + "photographic outputs in mind.")); + + settingsBoxLayout->addMultiCellWidget(d->outputColorSpaceLabel, line, line, 0, 0); + settingsBoxLayout->addMultiCellWidget(d->outputColorSpaceComboBox, line, line, 1, 2); + + if (outputColorSpaceOption) + { + d->outputColorSpaceLabel->show(); + d->outputColorSpaceComboBox->show(); + } + else + { + d->outputColorSpaceLabel->hide(); + d->outputColorSpaceComboBox->hide(); + } + + insertTab(d->stdSettings, i18n("Standard")); + + // --------------------------------------------------------------- + + d->advSettings = new QWidget(this); + QGridLayout* settingsBoxLayout2 = new QGridLayout(d->advSettings, 7, 2, KDialog::spacingHint()); + + d->dontStretchPixelsCheckBox = new QCheckBox(i18n("Do not stretch or rotate pixels"), d->advSettings); + QWhatsThis::add( d->dontStretchPixelsCheckBox, i18n("

Do not stretch or rotate pixels

" + "For Fuji Super CCD cameras, show the image tilted 45 " + "degrees. For cameras with non-square pixels, do not " + "stretch the image to its correct aspect ratio. In any " + "case, this option guarantees that each output pixel " + "corresponds to one RAW pixel.

")); + settingsBoxLayout2->addMultiCellWidget(d->dontStretchPixelsCheckBox, 0, 0, 0, 2); + + // --------------------------------------------------------------- + + d->blackPointCheckBox = new QCheckBox(i18n("Black point"), d->advSettings); + QWhatsThis::add( d->blackPointCheckBox, i18n("

Black point

" + "Use a specific black point value to decode RAW pictures. " + "If you set this option to off, the Black Point value will be " + "automatically computed.

")); + d->blackPointSpinBox = new KIntNumInput(d->advSettings); + d->blackPointSpinBox->setRange(0, 1000, 1, true); + QWhatsThis::add(d->blackPointSpinBox, i18n("

Black point value

" + "Specify specific black point value of the output image.

")); + settingsBoxLayout2->addMultiCellWidget(d->blackPointCheckBox, 1, 1, 0, 0); + settingsBoxLayout2->addMultiCellWidget(d->blackPointSpinBox, 1, 1, 1, 2); + + // --------------------------------------------------------------- + + settingsBoxLayout2->setRowStretch(7, 10); + insertTab(d->advSettings, i18n("Advanced")); + + if (!showAdvancedOptions) + { + removePage(d->advSettings); + setTabBarHidden(true); + } + + // --------------------------------------------------------------- + + connect(d->unclipColorComboBox, SIGNAL(activated(int)), + this, SLOT(slotUnclipColorActivated(int))); + + connect(d->whiteBalanceComboBox, SIGNAL(activated(int)), + this, SLOT(slotWhiteBalanceToggled(int))); + + connect(d->enableNoiseReduction, SIGNAL(toggled(bool)), + this, SLOT(slotNoiseReductionToggled(bool))); + + connect(d->enableCACorrection, SIGNAL(toggled(bool)), + this, SLOT(slotCACorrectionToggled(bool))); + + connect(d->blackPointCheckBox, SIGNAL(toggled(bool)), + d->blackPointSpinBox, SLOT(setEnabled(bool))); + + connect(d->sixteenBitsImage, SIGNAL(toggled(bool)), + this, SLOT(slotsixteenBitsImageToggled(bool))); + + connect(dcrawVersion, SIGNAL(leftClickedURL(const QString&)), + this, SLOT(processDcrawURL(const QString&))); +} + +DcrawSettingsWidget::~DcrawSettingsWidget() +{ + delete d; +} + +void DcrawSettingsWidget::processDcrawURL(const QString& url) +{ + KApplication::kApplication()->invokeBrowser(url); +} + +void DcrawSettingsWidget::setDefaultSettings() +{ + setWhiteBalance(RawDecodingSettings::CAMERA); + setCustomWhiteBalance(6500); + setCustomWhiteBalanceGreen(1.0); + setFourColor(false); + setUnclipColor(0); + setDontStretchPixels(false); + setNoiseReduction(false); + setUseCACorrection(false); + setcaRedMultiplier(1.0); + setcaBlueMultiplier(1.0); + setBrightness(1.0); + setUseBlackPoint(false); + setBlackPoint(0); + setNRThreshold(100); + setQuality(RawDecodingSettings::BILINEAR); + setOutputColorSpace(RawDecodingSettings::SRGB); +} + +void DcrawSettingsWidget::slotsixteenBitsImageToggled(bool b) +{ + d->brightnessLabel->setDisabled(b); + d->brightnessSpinBox->setDisabled(b); + emit signalSixteenBitsImageToggled(d->sixteenBitsImage->isChecked()); +} + +void DcrawSettingsWidget::slotWhiteBalanceToggled(int v) +{ + if (v == 3) + { + d->customWhiteBalanceSpinBox->setEnabled(true); + d->customWhiteBalanceGreenSpinBox->setEnabled(true); + d->customWhiteBalanceLabel->setEnabled(true); + d->customWhiteBalanceGreenLabel->setEnabled(true); + } + else + { + d->customWhiteBalanceSpinBox->setEnabled(false); + d->customWhiteBalanceGreenSpinBox->setEnabled(false); + d->customWhiteBalanceLabel->setEnabled(false); + d->customWhiteBalanceGreenLabel->setEnabled(false); + } +} + +void DcrawSettingsWidget::slotUnclipColorActivated(int v) +{ + if (v == 3) // Reconstruct Highlight method + { + d->reconstructLabel->setEnabled(true); + d->reconstructSpinBox->setEnabled(true); + } + else + { + d->reconstructLabel->setEnabled(false); + d->reconstructSpinBox->setEnabled(false); + } +} + +void DcrawSettingsWidget::slotNoiseReductionToggled(bool b) +{ + d->NRThresholdSpinBox->setEnabled(b); + d->NRThresholdLabel->setEnabled(b); +} + +void DcrawSettingsWidget::slotCACorrectionToggled(bool b) +{ + d->caRedMultSpinBox->setEnabled(b); + d->caBlueMultSpinBox->setEnabled(b); + d->caRedMultLabel->setEnabled(b); + d->caBlueMultLabel->setEnabled(b); +} + +// --------------------------------------------------------------- + +bool DcrawSettingsWidget::sixteenBits() +{ + return d->sixteenBitsImage->isChecked(); +} + +void DcrawSettingsWidget::setSixteenBits(bool b) +{ + d->sixteenBitsImage->setChecked(b); +} + +// --------------------------------------------------------------- + +RawDecodingSettings::WhiteBalance DcrawSettingsWidget::whiteBalance() +{ + switch(d->whiteBalanceComboBox->currentItem()) + { + case 1: + return RawDecodingSettings::CAMERA; + break; + case 2: + return RawDecodingSettings::AUTO; + break; + case 3: + return RawDecodingSettings::CUSTOM; + break; + default: + return RawDecodingSettings::NONE; + break; + } +} + +void DcrawSettingsWidget::setWhiteBalance(RawDecodingSettings::WhiteBalance v) +{ + switch(v) + { + case RawDecodingSettings::CAMERA: + d->whiteBalanceComboBox->setCurrentItem(1); + break; + case RawDecodingSettings::AUTO: + d->whiteBalanceComboBox->setCurrentItem(2); + break; + case RawDecodingSettings::CUSTOM: + d->whiteBalanceComboBox->setCurrentItem(3); + break; + default: + d->whiteBalanceComboBox->setCurrentItem(0); + break; + } + slotWhiteBalanceToggled(d->whiteBalanceComboBox->currentItem()); +} + + +// --------------------------------------------------------------- + +int DcrawSettingsWidget::customWhiteBalance() +{ + return d->customWhiteBalanceSpinBox->value(); +} + +void DcrawSettingsWidget::setCustomWhiteBalance(int v) +{ + d->customWhiteBalanceSpinBox->setValue(v); +} + +// --------------------------------------------------------------- + +double DcrawSettingsWidget::customWhiteBalanceGreen() +{ + return d->customWhiteBalanceGreenSpinBox->value(); +} + +void DcrawSettingsWidget::setCustomWhiteBalanceGreen(double v) +{ + d->customWhiteBalanceGreenSpinBox->setValue(v); +} + +// --------------------------------------------------------------- + +bool DcrawSettingsWidget::useFourColor() +{ + return d->fourColorCheckBox->isChecked(); +} + +void DcrawSettingsWidget::setFourColor(bool b) +{ + d->fourColorCheckBox->setChecked(b); +} + +// --------------------------------------------------------------- + +int DcrawSettingsWidget::unclipColor() +{ + switch(d->unclipColorComboBox->currentItem()) + { + case 0: + return 0; + break; + case 1: + return 1; + break; + case 2: + return 2; + break; + default: // Reconstruct Highlight method + return d->reconstructSpinBox->value()+3; + break; + } +} + +void DcrawSettingsWidget::setUnclipColor(int v) +{ + switch(v) + { + case 0: + d->unclipColorComboBox->setCurrentItem(0); + break; + case 1: + d->unclipColorComboBox->setCurrentItem(1); + break; + case 2: + d->unclipColorComboBox->setCurrentItem(2); + break; + default: // Reconstruct Highlight method + d->unclipColorComboBox->setCurrentItem(3); + d->reconstructSpinBox->setValue(v-3); + break; + } + + slotUnclipColorActivated(d->unclipColorComboBox->currentItem()); +} + +// --------------------------------------------------------------- + +bool DcrawSettingsWidget::useDontStretchPixels() +{ + return d->dontStretchPixelsCheckBox->isChecked(); +} + +void DcrawSettingsWidget::setDontStretchPixels(bool b) +{ + d->dontStretchPixelsCheckBox->setChecked(b); +} + +// --------------------------------------------------------------- + +double DcrawSettingsWidget::brightness() +{ + return d->brightnessSpinBox->value(); +} + +void DcrawSettingsWidget::setBrightness(double b) +{ + d->brightnessSpinBox->setValue(b); +} + +// --------------------------------------------------------------- + +bool DcrawSettingsWidget::useBlackPoint() +{ + return d->blackPointCheckBox->isChecked(); +} + +void DcrawSettingsWidget::setUseBlackPoint(bool b) +{ + d->blackPointCheckBox->setChecked(b); + d->blackPointSpinBox->setEnabled(b); +} + +// --------------------------------------------------------------- + +int DcrawSettingsWidget::blackPoint() +{ + return d->blackPointSpinBox->value(); +} + +void DcrawSettingsWidget::setBlackPoint(int b) +{ + d->blackPointSpinBox->setValue(b); +} + +// --------------------------------------------------------------- + +RawDecodingSettings::DecodingQuality DcrawSettingsWidget::quality() +{ + switch(d->RAWQualityComboBox->currentItem()) + { + case 1: + return RawDecodingSettings::VNG; + break; + case 2: + return RawDecodingSettings::PPG; + break; + case 3: + return RawDecodingSettings::AHD; + break; + default: + return RawDecodingSettings::BILINEAR; + break; + } +} + +void DcrawSettingsWidget::setQuality(RawDecodingSettings::DecodingQuality q) +{ + switch(q) + { + case RawDecodingSettings::VNG: + d->RAWQualityComboBox->setCurrentItem(1); + break; + case RawDecodingSettings::PPG: + d->RAWQualityComboBox->setCurrentItem(2); + break; + case RawDecodingSettings::AHD: + d->RAWQualityComboBox->setCurrentItem(3); + break; + default: + d->RAWQualityComboBox->setCurrentItem(0); + break; + } +} + +// --------------------------------------------------------------- + +RawDecodingSettings::OutputColorSpace DcrawSettingsWidget::outputColorSpace() +{ + return (RawDecodingSettings::OutputColorSpace)(d->outputColorSpaceComboBox->currentItem()); +} + +void DcrawSettingsWidget::setOutputColorSpace(RawDecodingSettings::OutputColorSpace c) +{ + d->outputColorSpaceComboBox->setCurrentItem((int)c); +} + +// --------------------------------------------------------------- + +bool DcrawSettingsWidget::useNoiseReduction() +{ + return d->enableNoiseReduction->isChecked(); +} + +void DcrawSettingsWidget::setNoiseReduction(bool b) +{ + d->enableNoiseReduction->setChecked(b); + slotNoiseReductionToggled(b); +} + +// --------------------------------------------------------------- + +int DcrawSettingsWidget::NRThreshold() +{ + return d->NRThresholdSpinBox->value(); +} + +void DcrawSettingsWidget::setNRThreshold(int b) +{ + d->NRThresholdSpinBox->setValue(b); +} + +// --------------------------------------------------------------- + +bool DcrawSettingsWidget::useCACorrection() +{ + return d->enableCACorrection->isChecked(); +} + +void DcrawSettingsWidget::setUseCACorrection(bool b) +{ + d->enableCACorrection->setChecked(b); + slotCACorrectionToggled(b); +} + +// --------------------------------------------------------------- + +double DcrawSettingsWidget::caRedMultiplier() +{ + return d->caRedMultSpinBox->value(); +} + +void DcrawSettingsWidget::setcaRedMultiplier(double b) +{ + d->caRedMultSpinBox->setValue(b); +} + +// --------------------------------------------------------------- + +double DcrawSettingsWidget::caBlueMultiplier() +{ + return d->caBlueMultSpinBox->value(); +} + +void DcrawSettingsWidget::setcaBlueMultiplier(double b) +{ + d->caBlueMultSpinBox->setValue(b); +} + +} // NameSpace KDcrawIface diff --git a/libkdcraw/libkdcraw/dcrawsettingswidget.h b/libkdcraw/libkdcraw/dcrawsettingswidget.h new file mode 100644 index 0000000..3c69b64 --- /dev/null +++ b/libkdcraw/libkdcraw/dcrawsettingswidget.h @@ -0,0 +1,114 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2006-09-13 + * Description : dcraw settings widgets + * + * Copyright (C) 2006-2008 by Gilles Caulier + * Copyright (C) 2006-2008 by Marcel Wiesweg + * Copyright (C) 2007-2008 by Guillaume Castagnino + * + * 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. + * + * ============================================================ */ + +#ifndef DCRAW_SETTINGS_WIDGET_H +#define DCRAW_SETTINGS_WIDGET_H + +// KDE includes. + +#include + +// Local Includes. + +#include "libkdcraw_export.h" +#include "rawdecodingsettings.h" + +namespace KDcrawIface +{ + +class DcrawSettingsWidgetPriv; + +class LIBKDCRAW_EXPORT DcrawSettingsWidget : public KTabWidget +{ + Q_OBJECT + +public: + + DcrawSettingsWidget(QWidget *parent, + bool sixteenBitsOption=false, + bool outputColorSpaceOption=true, + bool showAdvancedOptions=false); + virtual ~DcrawSettingsWidget(); + + bool sixteenBits(); + int customWhiteBalance(); + double customWhiteBalanceGreen(); + bool useFourColor(); + bool useDontStretchPixels(); + bool useNoiseReduction(); + bool useCACorrection(); + bool useBlackPoint(); + int unclipColor(); + double brightness(); + int blackPoint(); + int NRThreshold(); + double caRedMultiplier(); + double caBlueMultiplier(); + + RawDecodingSettings::WhiteBalance whiteBalance(); + RawDecodingSettings::DecodingQuality quality(); + RawDecodingSettings::OutputColorSpace outputColorSpace(); + + void setSixteenBits(bool b); + void setCameraWB(bool b); + void setWhiteBalance(RawDecodingSettings::WhiteBalance v); + void setCustomWhiteBalance(int v); + void setCustomWhiteBalanceGreen(double v); + void setFourColor(bool b); + void setDontStretchPixels(bool b); + void setNoiseReduction(bool b); + void setUseCACorrection(bool b); + void setUseBlackPoint(bool b); + void setUnclipColor(int v); + void setBrightness(double b); + void setBlackPoint(int b); + void setNRThreshold(int b); + void setcaRedMultiplier(double b); + void setcaBlueMultiplier(double b); + void setQuality(RawDecodingSettings::DecodingQuality q); + void setOutputColorSpace(RawDecodingSettings::OutputColorSpace c); + + void setDefaultSettings(); + +signals: + + void signalSixteenBitsImageToggled(bool); + +private slots: + + void slotWhiteBalanceToggled(int); + void slotsixteenBitsImageToggled(bool); + void slotUnclipColorActivated(int); + void slotNoiseReductionToggled(bool); + void slotCACorrectionToggled(bool); + void processDcrawURL(const QString&); + +private: + + DcrawSettingsWidgetPriv* d; +}; + +} // NameSpace KDcrawIface + +#endif /* DCRAW_SETTINGS_WIDGET_H */ diff --git a/libkdcraw/libkdcraw/kdcraw.cpp b/libkdcraw/libkdcraw/kdcraw.cpp new file mode 100644 index 0000000..ebfd0ac --- /dev/null +++ b/libkdcraw/libkdcraw/kdcraw.cpp @@ -0,0 +1,965 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2006-12-09 + * Description : a tread-safe dcraw program interface + * + * Copyright (C) 2006-2008 by Gilles Caulier + * Copyright (C) 2006-2008 by Marcel Wiesweg + * Copyright (C) 2007-2008 by Guillaume Castagnino + * + * NOTE: Do not use kdDebug() in this implementation because + * it will be multithreaded. Use qDebug() instead. + * See B.K.O #133026 for details. + * + * 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. + * + * ============================================================ */ + +extern "C" +{ +#include +#include +#include +} + +// C++ includes. + +#include +#include +#include + +// Qt Includes. + +#include +#include +#include +#include +#include +#include +#include + +// KDE includes. + +#include +#include + +// Local includes. + +#include "version.h" +#include "dcrawbinary.h" +#include "kdcraw.h" +#include "kdcraw.moc" + +namespace KDcrawIface +{ + +class KDcrawPriv +{ +public: + + KDcrawPriv() + { + running = false; + normalExit = false; + process = 0; + queryTimer = 0; + data = 0; + width = 0; + height = 0; + rgbmax = 0; + dataPos = 0; + } + + bool running; + bool normalExit; + + uchar *data; + + int dataPos; + int width; + int height; + int rgbmax; + + QString filePath; + + QMutex mutex; + + QWaitCondition condVar; + + QTimer *queryTimer; + + KProcess *process; + +}; + +KDcraw::KDcraw() +{ + d = new KDcrawPriv; + m_cancel = false; +} + +KDcraw::~KDcraw() +{ + cancel(); + delete d; +} + +QString KDcraw::version() +{ + return QString(kdcraw_version); +} + +void KDcraw::cancel() +{ + m_cancel = true; +} + +bool KDcraw::loadDcrawPreview(QImage& image, const QString& path) +{ + // In first, try to extrcat the embedded JPEG preview. Very fast. + bool ret = loadEmbeddedPreview(image, path); + if (ret) return true; + + // In second, decode and half size of RAW picture. More slow. + return (loadHalfPreview(image, path)); +} + +bool KDcraw::loadEmbeddedPreview(QImage& image, const QString& path) +{ + FILE *f=NULL; + QByteArray imgData; + const int MAX_IPC_SIZE = (1024*32); + char buffer[MAX_IPC_SIZE]; + QFile file; + Q_LONG len; + QCString command; + + QFileInfo fileInfo(path); + QString rawFilesExt(KDcrawIface::DcrawBinary::instance()->rawFiles()); + QString ext = fileInfo.extension(false).upper(); + + if (!fileInfo.exists() || ext.isEmpty() || !rawFilesExt.upper().contains(ext)) + return false; + + // Try to extract embedded thumbnail using dcraw with options: + // -c : write to stdout + // -e : Extract the camera-generated thumbnail, not the raw image (JPEG or a PPM file). + // Note : this code require at least dcraw version 8.x + + command = DcrawBinary::path(); + command += " -c -e "; + command += QFile::encodeName( KProcess::quote( path ) ); + qDebug("Running RAW decoding command: %s", (const char*)command); + + f = popen( command.data(), "r" ); + + if ( f == NULL ) + return false; + + file.open( IO_ReadOnly, f ); + + while ((len = file.readBlock(buffer, MAX_IPC_SIZE)) != 0) + { + if ( len == -1 ) + { + file.close(); + return false; + } + else + { + int oldSize = imgData.size(); + imgData.resize( imgData.size() + len ); + memcpy(imgData.data()+oldSize, buffer, len); + } + } + + file.close(); + pclose( f ); + + if ( !imgData.isEmpty() ) + { + if (image.loadFromData( imgData )) + { + qDebug("Using embedded RAW preview extraction"); + return true; + } + } + + return false; +} + +bool KDcraw::loadHalfPreview(QImage& image, const QString& path) +{ + FILE *f=NULL; + QByteArray imgData; + const int MAX_IPC_SIZE = (1024*32); + char buffer[MAX_IPC_SIZE]; + QFile file; + Q_LONG len; + QCString command; + + QFileInfo fileInfo(path); + QString rawFilesExt(KDcrawIface::DcrawBinary::instance()->rawFiles()); + QString ext = fileInfo.extension(false).upper(); + + if (!fileInfo.exists() || ext.isEmpty() || !rawFilesExt.upper().contains(ext)) + return false; + + // Try to use simple RAW extraction method in 8 bits ppm output. + // -c : write to stdout + // -h : Half-size color image (3x faster than -q) + // -a : Use automatic white balance + // -w : Use camera white balance, if possible + + f=NULL; + command = DcrawBinary::path(); + command += " -c -h -w -a "; + command += QFile::encodeName( KProcess::quote( path ) ); + qDebug("Running RAW decoding command: %s", (const char*)command); + + f = popen( command.data(), "r" ); + + if ( f == NULL ) + return false; + + file.open( IO_ReadOnly, f ); + + while ((len = file.readBlock(buffer, MAX_IPC_SIZE)) != 0) + { + if ( len == -1 ) + { + file.close(); + return false; + } + else + { + int oldSize = imgData.size(); + imgData.resize( imgData.size() + len ); + memcpy(imgData.data()+oldSize, buffer, len); + } + } + + file.close(); + pclose( f ); + + if ( !imgData.isEmpty() ) + { + if (image.loadFromData( imgData )) + { + qDebug("Using reduced RAW picture extraction"); + return true; + } + } + + return false; +} + +bool KDcraw::rawFileIdentify(DcrawInfoContainer& identify, const QString& path) +{ + FILE *f=NULL; + QByteArray txtData; + const int MAX_IPC_SIZE = (1024*32); + char buffer[MAX_IPC_SIZE]; + QFile file; + Q_LONG len; + QCString command; + + QFileInfo fileInfo(path); + QString rawFilesExt(KDcrawIface::DcrawBinary::instance()->rawFiles()); + QString ext = fileInfo.extension(false).upper(); + + if (!fileInfo.exists() || ext.isEmpty() || !rawFilesExt.upper().contains(ext)) + return false; + + // Try to get camera maker/model using dcraw with options: + // -i : identify files without decoding them. + // -v : verbose mode. + + command = DcrawBinary::path(); + command += " -i -v "; + command += QFile::encodeName( KProcess::quote( path ) ); + qDebug("Running RAW decoding command: %s", (const char*)command); + + f = popen( command.data(), "r" ); + + if ( f == NULL ) + { + identify = DcrawInfoContainer(); + return false; + } + + file.open( IO_ReadOnly, f ); + + while ((len = file.readBlock(buffer, MAX_IPC_SIZE)) != 0) + { + if ( len == -1 ) + { + identify = DcrawInfoContainer(); + return false; + } + else + { + int oldSize = txtData.size(); + txtData.resize( txtData.size() + len ); + memcpy(txtData.data()+oldSize, buffer, len); + } + } + + file.close(); + pclose( f ); + QString dcrawInfo(txtData); + + if ( dcrawInfo.isEmpty() ) + { + identify = DcrawInfoContainer(); + return false; + } + + int pos; + + // Extract Time Stamp. + QString timeStampHeader("Timestamp: "); + pos = dcrawInfo.find(timeStampHeader); + if (pos != -1) + { + QString timeStamp = dcrawInfo.mid(pos).section('\n', 0, 0); + timeStamp.remove(0, timeStampHeader.length()); + identify.dateTime = QDateTime::fromString(timeStamp); + } + + // Extract Camera Maker. + QString makeHeader("Camera: "); + pos = dcrawInfo.find(makeHeader); + if (pos != -1) + { + QString make = dcrawInfo.mid(pos).section('\n', 0, 0); + make.remove(0, makeHeader.length()); + identify.make = make; + } + + // Extract Camera Model. + QString modelHeader("Model: "); + pos = dcrawInfo.find(modelHeader); + if (pos != -1) + { + QString model = dcrawInfo.mid(pos).section('\n', 0, 0); + model.remove(0, modelHeader.length()); + identify.model = model; + } + + // Extract Picture Owner. + QString ownerHeader("Owner: "); + pos = dcrawInfo.find(ownerHeader); + if (pos != -1) + { + QString owner = dcrawInfo.mid(pos).section('\n', 0, 0); + owner.remove(0, ownerHeader.length()); + identify.owner = owner; + } + + // Extract DNG Version. + QString DNGVersionHeader("DNG Version: "); + pos = dcrawInfo.find(DNGVersionHeader); + if (pos != -1) + { + QString DNGVersion = dcrawInfo.mid(pos).section('\n', 0, 0); + DNGVersion.remove(0, DNGVersionHeader.length()); + identify.DNGVersion = DNGVersion; + } + + // Extract ISO Speed. + QString isoSpeedHeader("ISO speed: "); + pos = dcrawInfo.find(isoSpeedHeader); + if (pos != -1) + { + QString isoSpeed = dcrawInfo.mid(pos).section('\n', 0, 0); + isoSpeed.remove(0, isoSpeedHeader.length()); + identify.sensitivity = isoSpeed.toLong(); + } + + // Extract Shutter Speed. + QString shutterSpeedHeader("Shutter: "); + pos = dcrawInfo.find(shutterSpeedHeader); + if (pos != -1) + { + QString shutterSpeed = dcrawInfo.mid(pos).section('\n', 0, 0); + shutterSpeed.remove(0, shutterSpeedHeader.length()); + + if (shutterSpeed.startsWith("1/")) + shutterSpeed.remove(0, 2); // remove "1/" at start of string. + + shutterSpeed.remove(shutterSpeed.length()-4, 4); // remove " sec" at end of string. + identify.exposureTime = shutterSpeed.toFloat(); + } + + // Extract Aperture. + QString apertureHeader("Aperture: f/"); + pos = dcrawInfo.find(apertureHeader); + if (pos != -1) + { + QString aperture = dcrawInfo.mid(pos).section('\n', 0, 0); + aperture.remove(0, apertureHeader.length()); + identify.aperture = aperture.toFloat(); + } + + // Extract Focal Length. + QString focalLengthHeader("Focal Length: "); + pos = dcrawInfo.find(focalLengthHeader); + if (pos != -1) + { + QString focalLength = dcrawInfo.mid(pos).section('\n', 0, 0); + focalLength.remove(0, focalLengthHeader.length()); + focalLength.remove(focalLength.length()-3, 3); // remove " mm" at end of string. + identify.focalLength = focalLength.toFloat(); + } + + // Extract Image Size. + + QString imageSizeHeader("Image size: "); + pos = dcrawInfo.find(imageSizeHeader); + if (pos != -1) + { + QString imageSize = dcrawInfo.mid(pos).section('\n', 0, 0); + imageSize.remove(0, imageSizeHeader.length()); + int width = imageSize.section(" x ", 0, 0).toInt(); + int height = imageSize.section(" x ", 1, 1).toInt(); + identify.imageSize = QSize(width, height); + } + + // Extract "Has an embedded ICC profile" flag. + + QString hasIccProfileHeader("Embedded ICC profile: "); + pos = dcrawInfo.find(hasIccProfileHeader); + if (pos != -1) + { + QString hasIccProfile = dcrawInfo.mid(pos).section('\n', 0, 0); + hasIccProfile.remove(0, hasIccProfileHeader.length()); + if (hasIccProfile.contains("yes")) + identify.hasIccProfile = true; + else + identify.hasIccProfile = false; + } + + // Check if picture is decodable. + + identify.isDecodable = true; + pos = dcrawInfo.find("Cannot decode file"); + if (pos != -1) + identify.isDecodable = false; + + // Extract "Has Secondary Pixel" flag. + + QString hasSecondaryPixelHeader("Secondary pixels: "); + pos = dcrawInfo.find(hasSecondaryPixelHeader); + if (pos != -1) + { + QString hasSecondaryPixel = dcrawInfo.mid(pos).section('\n', 0, 0); + hasSecondaryPixel.remove(0, hasSecondaryPixelHeader.length()); + if (hasSecondaryPixel.contains("yes")) + identify.hasSecondaryPixel = true; + else + identify.hasSecondaryPixel = false; + } + + // Extract Pixel Aspect Ratio. + QString aspectRatioHeader("Pixel Aspect Ratio: "); + pos = dcrawInfo.find(aspectRatioHeader); + if (pos != -1) + { + QString aspectRatio = dcrawInfo.mid(pos).section('\n', 0, 0); + aspectRatio.remove(0, aspectRatioHeader.length()); + identify.pixelAspectRatio = aspectRatio.toFloat(); + } + + // Extract Raw Colors. + QString rawColorsHeader("Raw colors: "); + pos = dcrawInfo.find(rawColorsHeader); + if (pos != -1) + { + QString rawColors = dcrawInfo.mid(pos).section('\n', 0, 0); + rawColors.remove(0, rawColorsHeader.length()); + identify.rawColors = rawColors.toInt(); + } + + // Extract Filter Pattern. + QString filterHeader("Filter pattern: "); + pos = dcrawInfo.find(filterHeader); + if (pos != -1) + { + QString filter = dcrawInfo.mid(pos).section('\n', 0, 0); + filter.remove(0, filterHeader.length()); + identify.filterPattern = filter; + } + + // Extract Daylight Multipliers. + QString daylightMultHeader("Daylight multipliers: "); + pos = dcrawInfo.find(daylightMultHeader); + if (pos != -1) + { + QString daylightMult = dcrawInfo.mid(pos).section('\n', 0, 0); + daylightMult.remove(0, daylightMultHeader.length()); + identify.daylightMult[0] = daylightMult.section(" ", 0, 0).toDouble(); + identify.daylightMult[1] = daylightMult.section(" ", 1, 1).toDouble(); + identify.daylightMult[2] = daylightMult.section(" ", 2, 2).toDouble(); + } + + // Extract Camera Multipliers. + QString cameraMultHeader("Camera multipliers: "); + pos = dcrawInfo.find(cameraMultHeader); + if (pos != -1) + { + QString cameraMult = dcrawInfo.mid(pos).section('\n', 0, 0); + cameraMult.remove(0, cameraMultHeader.length()); + identify.cameraMult[0] = cameraMult.section(" ", 0, 0).toDouble(); + identify.cameraMult[1] = cameraMult.section(" ", 1, 1).toDouble(); + identify.cameraMult[2] = cameraMult.section(" ", 2, 2).toDouble(); + identify.cameraMult[3] = cameraMult.section(" ", 3, 3).toDouble(); + } + + return true; +} + +// ---------------------------------------------------------------------------------- + +bool KDcraw::decodeHalfRAWImage(const QString& filePath, RawDecodingSettings rawDecodingSettings, + QByteArray &imageData, int &width, int &height, int &rgbmax) +{ + m_rawDecodingSettings = rawDecodingSettings; + m_rawDecodingSettings.halfSizeColorImage = true; + return (loadFromDcraw(filePath, imageData, width, height, rgbmax)); +} + +bool KDcraw::decodeRAWImage(const QString& filePath, RawDecodingSettings rawDecodingSettings, + QByteArray &imageData, int &width, int &height, int &rgbmax) +{ + m_rawDecodingSettings = rawDecodingSettings; + return (loadFromDcraw(filePath, imageData, width, height, rgbmax)); +} + +bool KDcraw::checkToCancelWaitingData() +{ + return m_cancel; +} + +bool KDcraw::checkToCancelRecievingData() +{ + return m_cancel; +} + +void KDcraw::setWaitingDataProgress(double) +{ +} + +void KDcraw::setRecievingDataProgress(double) +{ +} + +bool KDcraw::loadFromDcraw(const QString& filePath, QByteArray &imageData, + int &width, int &height, int &rgbmax) +{ + m_cancel = false; + d->dataPos = 0; + d->filePath = filePath; + d->running = true; + d->normalExit = false; + d->process = 0; + d->data = 0; + d->width = 0; + d->height = 0; + d->rgbmax = 0; + + // trigger startProcess and loop to wait dcraw decoding + QApplication::postEvent(this, new QCustomEvent(QEvent::User)); + + // The time from starting dcraw to when it first outputs something takes + // much longer than the time while it outputs the data and the time while + // we process the data. + // We do not have progress information for this, but it is much more promising to the user + // if there is progress which does not stay at a fixed value. + // So we make up some progress (0% - 40%), using the file size as an indicator how long it might take. + QTime dcrawStartTime = QTime::currentTime(); + int fileSize = QFileInfo(filePath).size(); + + // This is the magic number that describes how fast the function grows + // It _should_ be dependent on how fast the computer is, but we do not have this piece of information + // So this is a number that works well on my computer. + double K50 = 3000.0*fileSize; + double part = 0; + int checkpointTime = 0; + int checkpoint = 0; + + // The shuttingDown is a hack needed to prevent hanging when this KProcess-based loader + // is waiting for the process to finish, but the main thread is waiting + // for the thread to finish and no KProcess events are delivered. + // Remove when porting to Qt4. + while (d->running && !checkToCancelRecievingData()) + { + if (d->dataPos == 0) + { + int elapsedMsecs = dcrawStartTime.msecsTo(QTime::currentTime()); + if (elapsedMsecs > checkpointTime) + checkpointTime += 300; + + // What we do here is a sigmoidal curve, it starts slowly, + // then grows more rapidly, slows down again and + // get asymptotically closer to the maximum. + // (this is the Hill Equation, 2.8 the Hill Coefficient, to pour some blood in this) + double elapsedMsecsPow = pow(elapsedMsecs, 2.8); + part = (elapsedMsecsPow) / (K50 + elapsedMsecsPow); + + // While we waiting to receive data, progress from 0% to 40% + setWaitingDataProgress(0.4*part); + } + else if (d->dataPos > checkpoint) + { + // While receiving data, progress from 40% to 70% + double delta = 0.3 + 0.4 - 0.4*part; + int imageSize = d->width * d->height * (m_rawDecodingSettings.sixteenBitsImage ? 6 : 3); + checkpoint += (int)(imageSize / (20 * delta)); + setRecievingDataProgress(0.4*part + delta * (((float)d->dataPos)/((float)imageSize))); + } + + QMutexLocker lock(&d->mutex); + d->condVar.wait(&d->mutex, 10); + } + + if (!d->normalExit || m_cancel) + { + delete [] d->data; + d->data = 0; + return false; + } + + // Copy decoded image data to byte array. + width = d->width; + height = d->height; + rgbmax = d->rgbmax; + imageData = QByteArray(d->width * d->height * (m_rawDecodingSettings.sixteenBitsImage ? 6 : 3)); + memcpy(imageData.data(), d->data, imageData.size()); + + delete [] d->data; + d->data = 0; + + return true; +} + +void KDcraw::customEvent(QCustomEvent *) +{ + // KProcess (because of QSocketNotifier) is not reentrant. + // We must only use it from the main thread. + startProcess(); + + // set up timer to call continueQuery at regular intervals + if (d->running) + { + d->queryTimer = new QTimer; + connect(d->queryTimer, SIGNAL(timeout()), + this, SLOT(slotContinueQuery())); + d->queryTimer->start(30); + } +} + +void KDcraw::slotContinueQuery() +{ + // this is called from the timer + + if (checkToCancelWaitingData()) + { + d->process->kill(); + } +} + +void KDcraw::startProcess() +{ + if (m_cancel) + { + d->running = false; + d->normalExit = false; + return; + } + + // create KProcess and build argument list + + d->process = new KProcess; + + connect(d->process, SIGNAL(processExited(KProcess *)), + this, SLOT(slotProcessExited(KProcess *))); + + connect(d->process, SIGNAL(receivedStdout(KProcess *, char *, int)), + this, SLOT(slotReceivedStdout(KProcess *, char *, int))); + + connect(d->process, SIGNAL(receivedStderr(KProcess *, char *, int)), + this, SLOT(slotReceivedStderr(KProcess *, char *, int))); + + // run dcraw with options: + // -c : write to stdout + // -v : verboze mode. + // + // -4 : 16bit ppm output + // + // -f : Interpolate RGB as four colors. This blurs the image a little, but it eliminates false 2x2 mesh patterns. + // -a : Use automatic white balance + // -w : Use camera white balance, if possible + // -n : Use wavelets to erase noise while preserving real detail. + // -j : Do not stretch the image to its correct aspect ratio. + // -q : Use an interpolation method. + // -p : Use the input ICC profiles to define the camera's raw colorspace. + // -o : Use ICC profiles to define the output colorspace. + // -h : Output a half-size color image. Twice as fast as -q 0. + // -b : set Brightness value. + // -k : set Black Point value. + // -r : set Raw Color Balance Multipliers. + // -C : set Correct chromatic aberration correction. + + *d->process << DcrawBinary::path(); + *d->process << "-c"; + *d->process << "-v"; + + if (m_rawDecodingSettings.sixteenBitsImage) + *d->process << "-4"; + + if (m_rawDecodingSettings.halfSizeColorImage) + *d->process << "-h"; + + if (m_rawDecodingSettings.RGBInterpolate4Colors) + *d->process << "-f"; + + if (m_rawDecodingSettings.DontStretchPixels) + *d->process << "-j"; + + *d->process << "-H"; + *d->process << QString::number(m_rawDecodingSettings.unclipColors); + + *d->process << "-b"; + *d->process << QString::number(m_rawDecodingSettings.brightness); + + if (m_rawDecodingSettings.enableBlackPoint) + { + *d->process << "-k"; + *d->process << QString::number(m_rawDecodingSettings.blackPoint); + } + + switch (m_rawDecodingSettings.whiteBalance) + { + case RawDecodingSettings::NONE: + break; + case RawDecodingSettings::CAMERA: + *d->process << "-w"; + break; + case RawDecodingSettings::AUTO: + *d->process << "-a"; + break; + case RawDecodingSettings::CUSTOM: + /* Convert between Temperature and RGB. + */ + double T; + double RGB[3]; + double xD, yD, X, Y, Z; + DcrawInfoContainer identify; + + T = m_rawDecodingSettings.customWhiteBalance; + + /* Here starts the code picked and adapted from ufraw (0.12.1) + to convert Temperature + green multiplier to RGB multipliers + */ + /* Convert between Temperature and RGB. + * Base on information from http://www.brucelindbloom.com/ + * The fit for D-illuminant between 4000K and 12000K are from CIE + * The generalization to 2000K < T < 4000K and the blackbody fits + * are my own and should be taken with a grain of salt. + */ + const double XYZ_to_RGB[3][3] = { + { 3.24071, -0.969258, 0.0556352 }, + {-1.53726, 1.87599, -0.203996 }, + {-0.498571, 0.0415557, 1.05707 } }; + // Fit for CIE Daylight illuminant + if (T <= 4000) + { + xD = 0.27475e9/(T*T*T) - 0.98598e6/(T*T) + 1.17444e3/T + 0.145986; + } + else if (T <= 7000) + { + xD = -4.6070e9/(T*T*T) + 2.9678e6/(T*T) + 0.09911e3/T + 0.244063; + } + else + { + xD = -2.0064e9/(T*T*T) + 1.9018e6/(T*T) + 0.24748e3/T + 0.237040; + } + yD = -3*xD*xD + 2.87*xD - 0.275; + + X = xD/yD; + Y = 1; + Z = (1-xD-yD)/yD; + RGB[0] = X*XYZ_to_RGB[0][0] + Y*XYZ_to_RGB[1][0] + Z*XYZ_to_RGB[2][0]; + RGB[1] = X*XYZ_to_RGB[0][1] + Y*XYZ_to_RGB[1][1] + Z*XYZ_to_RGB[2][1]; + RGB[2] = X*XYZ_to_RGB[0][2] + Y*XYZ_to_RGB[1][2] + Z*XYZ_to_RGB[2][2]; + /* End of the code picked to ufraw + */ + + RGB[1] = RGB[1] / m_rawDecodingSettings.customWhiteBalanceGreen; + + /* By default, decraw override his default D65 WB + We need to keep it as a basis : if not, colors with some + DSLR will have a high dominant of color that will lead to + a completly wrong WB + */ + if (rawFileIdentify (identify, d->filePath)) + { + RGB[0] = identify.daylightMult[0] / RGB[0]; + RGB[1] = identify.daylightMult[1] / RGB[1]; + RGB[2] = identify.daylightMult[2] / RGB[2]; + } + else + { + RGB[0] = 1.0 / RGB[0]; + RGB[1] = 1.0 / RGB[1]; + RGB[2] = 1.0 / RGB[2]; + qDebug("Warning: cannot get daylight multipliers"); + } + + *d->process << "-r"; + *d->process << QString::number(RGB[0], 'f', 5); + *d->process << QString::number(RGB[1], 'f', 5); + *d->process << QString::number(RGB[2], 'f', 5); + *d->process << QString::number(RGB[1], 'f', 5); + break; + } + + *d->process << "-q"; + *d->process << QString::number(m_rawDecodingSettings.RAWQuality); + + if (m_rawDecodingSettings.enableNoiseReduction) + { + *d->process << "-n"; + *d->process << QString::number(m_rawDecodingSettings.NRThreshold); + } + + if (m_rawDecodingSettings.enableCACorrection) + { + *d->process << "-C"; + *d->process << QString::number(m_rawDecodingSettings.caMultiplier[0], 'f', 5); + *d->process << QString::number(m_rawDecodingSettings.caMultiplier[1], 'f', 5); + } + + *d->process << "-o"; + *d->process << QString::number(m_rawDecodingSettings.outputColorSpace); + + *d->process << QFile::encodeName(d->filePath); + + QString args; + for (uint i = 0 ; i < d->process->args().count(); i++) + { + args.append(d->process->args()[i]); + args.append(QString(" ")); + } + + qDebug("Running RAW decoding command: %s", args.ascii()); + + // actually start the process + if ( !d->process->start(KProcess::NotifyOnExit, + KProcess::Communication(KProcess::Stdout | KProcess::Stderr)) ) + { + qWarning("Failed to start RAW decoding"); + delete d->process; + d->process = 0; + d->running = false; + d->normalExit = false; + return; + } +} + +void KDcraw::slotProcessExited(KProcess *) +{ + // set variables, clean up, wake up loader thread + + QMutexLocker lock(&d->mutex); + d->running = false; + d->normalExit = d->process->normalExit() && d->process->exitStatus() == 0; + delete d->process; + d->process = 0; + delete d->queryTimer; + d->queryTimer = 0; + d->condVar.wakeAll(); +} + +void KDcraw::slotReceivedStdout(KProcess *, char *buffer, int buflen) +{ + if (!d->data) + { + // first data packet: + // Parse PPM header to find out size and allocate buffer + + // PPM header is "P6 process->kill(); + return; + } + + // Find the third newline that marks the header end in a dcraw generated ppm. + int i = 0; + int counter = 0; + + while (i < buflen) + { + if (counter == 3) break; + if (buffer[i] == '\n') + { + counter++; + } + ++i; + } + + QStringList splitlist = QStringList::split("\n", QString::fromAscii(buffer, i)); + QStringList sizes = QStringList::split(" ", splitlist[1]); + if (splitlist.size() < 3 || sizes.size() < 2) + { + qWarning("Cannot parse header from RAW decoding: Could not split"); + d->process->kill(); + return; + } + + d->width = sizes[0].toInt(); + d->height = sizes[1].toInt(); + d->rgbmax = splitlist[2].toInt(); + +#ifdef ENABLE_DEBUG_MESSAGES + qDebug("Parsed PPM header: width %i height %i rgbmax %i", d->width, d->height, d->rgbmax); +#endif + + // cut header from data for memcpy below + buffer += i; + buflen -= i; + + // allocate buffer + d->data = new uchar[d->width * d->height * (m_rawDecodingSettings.sixteenBitsImage ? 6 : 3)]; + d->dataPos = 0; + } + + // copy data to buffer + memcpy(d->data + d->dataPos, buffer, buflen); + d->dataPos += buflen; +} + +void KDcraw::slotReceivedStderr(KProcess *, char *buffer, int buflen) +{ + QCString message(buffer, buflen); + qDebug("RAW decoding StdErr: %s", (const char*)message); +} + +} // namespace KDcrawIface diff --git a/libkdcraw/libkdcraw/kdcraw.h b/libkdcraw/libkdcraw/kdcraw.h new file mode 100644 index 0000000..8a89338 --- /dev/null +++ b/libkdcraw/libkdcraw/kdcraw.h @@ -0,0 +1,199 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2006-12-09 + * Description : a tread-safe dcraw program interface + * + * Copyright (C) 2006-2008 by Gilles Caulier + * Copyright (C) 2006-2008 by Marcel Wiesweg + * Copyright (C) 2007-2008 by Guillaume Castagnino + * + * 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. + * + * ============================================================ */ + +#ifndef KDCRAW_H +#define KDCRAW_H + +// Qt Includes. + +#include +#include +#include + +// Local includes. + +#include "libkdcraw_export.h" +#include "rawdecodingsettings.h" +#include "dcrawinfocontainer.h" + +class QCustomEvent; + +class KProcess; + +namespace KDcrawIface +{ + +class KDcrawPriv; + +class LIBKDCRAW_EXPORT KDcraw : public QObject +{ + Q_OBJECT + +public: + + /** Standard constructor. */ + KDcraw(); + + /** Standard destructor. */ + virtual ~KDcraw(); + +public: + + /** Return a string version of libkdcraw release */ + static QString version(); + + /** This is a non cancelable method witch do not require a class instance to run. + It can loadEmbeddedPreview() in first and if it failed, call loadHalfPreview(). + */ + static bool loadDcrawPreview(QImage& image, const QString& path); + + /** Get the embedded JPEG preview image from RAW picture. This is a fast and non cancelable + This method do not require a class instance to run. + */ + static bool loadEmbeddedPreview(QImage& image, const QString& path); + + /** Get the half decode RAW picture. This is a more slower than loadEmbeddedPreview() method + and non cancelable. This method do not require a class instance to run. + */ + static bool loadHalfPreview(QImage& image, const QString& path); + + /** Get the camera settings witch have taken RAW file. Look into dcrawinfocontainer.h + for more details. This is a fast and non cancelable method witch do not require + a class instance to run. + */ + static bool rawFileIdentify(DcrawInfoContainer& identify, const QString& path); + +public: + + /** Extract a small size of decode RAW data from 'filePath' picture file using + 'rawDecodingSettings' settings. This is a cancelable method witch require + a class instance to run because RAW pictures decoding can take a while. + + This method return: + + - A byte array container ('imageData') with picture data. Pixels order is RGB. + Color depth can be 8 or 16. In 8 bits you can access to color component + using (uchar*), in 16 bits using (ushort*). + + - Size size of image in number of pixels ('width' and 'height'). + - The max average of RGB components from decoded picture. + - 'false' is returned if decoding failed, else 'true'. + */ + bool decodeHalfRAWImage(const QString& filePath, RawDecodingSettings rawDecodingSettings, + QByteArray &imageData, int &width, int &height, int &rgbmax); + + /** Extract a full size of RAW data from 'filePath' picture file using + 'rawDecodingSettings' settings. This is a cancelable method witch require + a class instance to run because RAW pictures decoding can take a while. + + This method return: + + - A byte array container ('imageData') with picture data. Pixels order is RGB. + Color depth can be 8 or 16. In 8 bits you can access to color component + using (uchar*), in 16 bits using (ushort*). + + - Size size of image in number of pixels ('width' and 'height'). + - The max average of RGB components from decoded picture. + - 'false' is returned if decoding failed, else 'true'. + */ + bool decodeRAWImage(const QString& filePath, RawDecodingSettings rawDecodingSettings, + QByteArray &imageData, int &width, int &height, int &rgbmax); + + /** To cancel 'decodeHalfRAWImage' and 'decodeRAWImage' methods running + in a separate thread. + */ + void cancel(); + +protected: + + /** Used internally to cancel RAW decoding operation. Normally, you don't need to use it + directly, excepted if you derivated this class. Usual way is to use cancel() method + */ + bool m_cancel; + + /** The settings container used to perform RAW pictures decoding. See 'rawdecodingsetting.h' + for details. + */ + RawDecodingSettings m_rawDecodingSettings; + +protected: + + /** Re-implement this method to control the cancelisation of loop witch wait data + from RAW decoding process with your propers envirronement. + By default, this method check if m_cancel is true. + + NOTE: RAW decoding is divided to 3 stages : + + 1-demosaising from dcraw. no progress feedback is available. We using a pseudo + progress value. You can control this stage using checkToCancelWaitingData() and + setWaitingDataProgress() methods. + + 2-decoding data reception from dcraw. You can control this stage using + checkToCancelRecievingData() and setRecievingDataProgress() methods. + + 3-storage decoded data in your application using the QByteArray container. + */ + virtual bool checkToCancelWaitingData(); + + /** Re-implement this method to control the cancelisation of the loop which receives data + from RAW decoding process with your proper environment. + By default, this method check if m_cancel is true. + */ + virtual bool checkToCancelRecievingData(); + + /** Re-implement this method to control the pseudo progress value during RAW decoding (when dcraw run with an + internal loop without feedback) with your proper environment. By default, this method do nothing. + Progress value average for this stage is 0%-n%, with 'n' == 40% max (see setWaitingDataProgress() method). + */ + virtual void setWaitingDataProgress(double value); + + /** Re-implement this method to control the progress value during RAW decoding (when dcraw return data) + with your proper environment. By default, this method do nothing. + Progress value average for this stage is n%-70%, with 'n' == 40% max (see setWaitingDataProgress() method). + */ + virtual void setRecievingDataProgress(double value); + +private: + + bool loadFromDcraw(const QString& filePath, QByteArray &imageData, + int &width, int &height, int &rgbmax); + void startProcess(); + + virtual void customEvent(QCustomEvent *); + +private slots: + + void slotProcessExited(KProcess *); + void slotReceivedStdout(KProcess *, char *, int); + void slotReceivedStderr(KProcess *, char *, int); + void slotContinueQuery(); + +private: + + KDcrawPriv *d; +}; + +} // namespace KDcrawIface + +#endif /* KDCRAW_H */ diff --git a/libkdcraw/libkdcraw/libkdcraw_export.h b/libkdcraw/libkdcraw/libkdcraw_export.h new file mode 100644 index 0000000..a7eeef2 --- /dev/null +++ b/libkdcraw/libkdcraw/libkdcraw_export.h @@ -0,0 +1,37 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2005-09-15 + * Description : dcraw program interface for KDE + * + * Copyright (C) 2005 by Laurent Montel + * + * 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. + * + * ============================================================ */ + +#ifndef _LIBKDCRAW_EXPORT_H +#define _LIBKDCRAW_EXPORT_H + +#ifdef KDEMACROS_USABLE +#include +#endif + +#ifdef KDE_EXPORT +#define LIBKDCRAW_EXPORT KDE_EXPORT +#else +#define LIBKDCRAW_EXPORT +#endif + +#endif /* _LIBKDCRAW_EXPORT_H */ + diff --git a/libkdcraw/libkdcraw/rawdecodingsettings.h b/libkdcraw/libkdcraw/rawdecodingsettings.h new file mode 100644 index 0000000..e9a0ca3 --- /dev/null +++ b/libkdcraw/libkdcraw/rawdecodingsettings.h @@ -0,0 +1,255 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2006-12-09 + * Description : Raw decoding settings + * + * Copyright (C) 2006-2008 by Gilles Caulier + * Copyright (C) 2006-2008 by Marcel Wiesweg + * Copyright (C) 2007-2008 by Guillaume Castagnino + * + * 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. + * + * ============================================================ */ + +#ifndef RAW_DECODING_SETTINGS_H +#define RAW_DECODING_SETTINGS_H + +// Local includes. + +#include "libkdcraw_export.h" + +namespace KDcrawIface +{ + +class LIBKDCRAW_EXPORT RawDecodingSettings +{ + +public: + + /** RAW decoding Interpolation methods + + Bilinear: use high-speed but low-quality bilinear + interpolation (default - for slow computer). In this method, + the red value of a non-red pixel is computed as the average of + the adjacent red pixels, and similar for blue and green. + VNG: use Variable Number of Gradients interpolation. + This method computes gradients near the pixel of interest and uses + the lower gradients (representing smoother and more similar parts + of the image) to make an estimate. + PPG: use Patterned Pixel Grouping interpolation. + Pixel Grouping uses assumptions about natural scenery in making estimates. + It has fewer color artifacts on natural images than the Variable Number of + Gradients method. + AHD: use Adaptive Homogeneity-Directed interpolation. + This method selects the direction of interpolation so as to + maximize a homogeneity metric, thus typically minimizing color artifacts. + */ + enum DecodingQuality + { + BILINEAR = 0, + VNG = 1, + PPG = 2, + AHD = 3 + }; + + /** White balances alternatives + NONE: no white balance used : dcraw reverts to standard daylight D65 WB + CAMERA: Use the camera embeded WB if available. Reverts to NONE if not + AUTO: Averages an auto WB on the entire image + CUSTOM: Let use set it's own temperature and green factor (later converted to RGBG factors) + */ + enum WhiteBalance + { + NONE = 0, + CAMERA = 1, + AUTO = 2, + CUSTOM = 3 + }; + + /** Output RGB color space used to decoded image */ + enum OutputColorSpace + { + RAWCOLOR = 0, + SRGB, + ADOBERGB, + WIDEGAMMUT, + PROPHOTO + }; + + /** Standard constructor with default settings */ + RawDecodingSettings() + { + sixteenBitsImage = false; + brightness = 1.0; + RAWQuality = BILINEAR; + outputColorSpace = SRGB; + RGBInterpolate4Colors = false; + DontStretchPixels = false; + unclipColors = 0; + whiteBalance = CAMERA; + customWhiteBalance = 6500; + customWhiteBalanceGreen = 1.0; + + halfSizeColorImage = false; + + enableBlackPoint = false; + blackPoint = 0; + + enableNoiseReduction = false; + NRThreshold = 100; + + enableCACorrection = false; + caMultiplier[0] = 1.0; + caMultiplier[1] = 1.0; + }; + + /** Compare for equality */ + bool operator==(const RawDecodingSettings &o) const + { + return sixteenBitsImage == o.sixteenBitsImage + && brightness == o.brightness + && RAWQuality == o.RAWQuality + && outputColorSpace == o.outputColorSpace + && RGBInterpolate4Colors == o.RGBInterpolate4Colors + && DontStretchPixels == o.DontStretchPixels + && unclipColors == o.unclipColors + && whiteBalance == o.whiteBalance + && customWhiteBalance == o.customWhiteBalance + && customWhiteBalanceGreen == o.customWhiteBalanceGreen + && halfSizeColorImage == o.halfSizeColorImage + && enableBlackPoint == o.enableBlackPoint + && blackPoint == o.blackPoint + && enableNoiseReduction == o.enableNoiseReduction + && NRThreshold == o.NRThreshold + && enableCACorrection == o.enableCACorrection + && caMultiplier[0] == o.caMultiplier[0] + && caMultiplier[1] == o.caMultiplier[1] + ; + }; + + /** Standard destructor */ + virtual ~RawDecodingSettings(){}; + + /** Method to use a settings to optimize time loading, for exemple to compute image histogram */ + void optimizeTimeLoading(void) + { + sixteenBitsImage = true; + brightness = 1.0; + RAWQuality = BILINEAR; + outputColorSpace = SRGB; + RGBInterpolate4Colors = false; + DontStretchPixels = false; + unclipColors = 0; + whiteBalance = CAMERA; + customWhiteBalance = 6500; + customWhiteBalanceGreen = 1.0; + halfSizeColorImage = true; + + enableBlackPoint = false; + blackPoint = 0; + + enableNoiseReduction = false; + NRThreshold = 100; + + enableCACorrection = false; + caMultiplier[0] = 1.0; + caMultiplier[1] = 1.0; + }; + +public: + + /** If true, decode RAW file in 16 bits per color per pixel else 8 bits. + */ + bool sixteenBitsImage; + + /** Half-size color image decoding (twice as fast as "enableRAWQuality"). + Use this option to reduce time loading to render histogram for example, + no to render an image to screen. + */ + bool halfSizeColorImage; + + /** White balance type to use. See WhiteBalance values for detail + */ + WhiteBalance whiteBalance; + + /** The temperature and the green multiplier of the custom white balance + */ + int customWhiteBalance; + double customWhiteBalanceGreen; + + /** RAW file decoding using RGB interpolation as four colors. + */ + bool RGBInterpolate4Colors; + + /** For cameras with non-square pixels, do not stretch the image to its + correct aspect ratio. In any case, this option guarantees that each + output pixel corresponds to one RAW pixel. + */ + bool DontStretchPixels; + + /** Unclip Highlight color level: + 0 = Clip all highlights to solid white. + 1 = Leave highlights unclipped in various shades of pink. + 2 = Blend clipped and unclipped values together for a gradual + fade to white. + 3-9 = Reconstruct highlights. Low numbers favor whites; high numbers + favor colors. + */ + int unclipColors; + + /** RAW quality decoding factor value. See DecodingQuality values + for details. + */ + DecodingQuality RAWQuality; + + /** Use wavelets to erase noise while preserving real detail. + */ + bool enableNoiseReduction; + + /** Noise reduction threshold value. + The best threshold should be somewhere between 100 and 1000. + */ + int NRThreshold; + + /** Use red and blue layer magnification to reduce chromatic aberrations + */ + bool enableCACorrection; + + /** Magnification factor for Red and Blue layers + - caMultiplier[0] = red multiplier + - caMultiplier[1] = blue multiplier + */ + double caMultiplier[2]; + + /** Brightness of output image. + */ + float brightness; + + /** Set on the black point setting to decode RAW image. + */ + bool enableBlackPoint; + + /** Black Point value of output image. + */ + int blackPoint; + + /** The output color space used to decoded RAW data. See OutputColorSpace + values for details. + */ + OutputColorSpace outputColorSpace; +}; + +} // namespace KDcrawIface + +#endif /* RAW_DECODING_SETTINGS_H */ diff --git a/libkdcraw/libkdcraw/rawfiles.h b/libkdcraw/libkdcraw/rawfiles.h new file mode 100644 index 0000000..dc3317b --- /dev/null +++ b/libkdcraw/libkdcraw/rawfiles.h @@ -0,0 +1,29 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2005-11-06 + * Description : list of RAW file extensions supported by + * dcraw program. + * + * Copyright (C) 2005-2008 by Gilles Caulier + * + * 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. + * + * ============================================================ */ + +#ifndef RAW_FILES_H +#define RAW_FILES_H + +static const char raw_file_extentions[] = "*.bay *.bmq *.cr2 *.crw *.cs1 *.dc2 *.dcr *.dng *.erf *.fff *.hdr *.k25 *.kdc *.mdc *.mos *.mrw *.nef *.orf *.pef *.pxn *.raf *.raw *.rdc *.sr2 *.srf *.x3f *.arw"; + +#endif // RAW_FILES_H diff --git a/libkdcraw/libkdcraw/version.h b/libkdcraw/libkdcraw/version.h new file mode 100644 index 0000000..e3b7ecf --- /dev/null +++ b/libkdcraw/libkdcraw/version.h @@ -0,0 +1,31 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2007-02-12 + * Description : dcraw program interface for KDE + * + * Copyright (C) 2007-2008 by Gilles Caulier + * + * 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. + * + * ============================================================ */ + +#ifndef KDCRAW_VERSION_H +#define KDCRAW_VERSION_H + +static const char kdcraw_version[] = "0.1.4"; + +#define KDCRAW_VERSION 0x000104 + +#endif // KDCRAW_VERSION_H + diff --git a/po/Makefile.am b/po/Makefile.am new file mode 100644 index 0000000..54cb7de --- /dev/null +++ b/po/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = $(AUTODIRS) diff --git a/po/ca/Makefile.am b/po/ca/Makefile.am new file mode 100644 index 0000000..7ac545c --- /dev/null +++ b/po/ca/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = ca +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/ca/libkdcraw.po b/po/ca/libkdcraw.po new file mode 100644 index 0000000..12da6d9 --- /dev/null +++ b/po/ca/libkdcraw.po @@ -0,0 +1,478 @@ +# Translation of libkdcraw.po to Catalan +# +# Josep Ma. Ferrer , 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2008-03-05 21:08+0100\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

Unable to find the %1 executable:" +"
This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

No s'ha pogut trobar l'executable %1:" +"
cal aquest programa binari per treballar amb formats de fitxer RAW. Podeu " +"continuar, però no podreu manipular les imatges RAW. Comproveu la instal·lació " +"del paquet libkdcraw a l'ordinador." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

%1 executable is not up to date:" +"
The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

L'executable %1 no està actualitzat:" +"
s'ha trobat la versió %2 d'aquest programa binari a l'ordinador. Aquesta " +"versió és massa antiga per funcionar correctament. Podeu continuar, però no " +"podreu manipular les imatges RAW. Comproveu la instal·lació del paquet " +"libkdcraw a l'ordinador." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "Profunditat de color de 16 bits" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

Si està habilitat, tots els fitxers RAW es descodificaran amb una " +"profunditat de color de 16 bits usant una corba gamma lineal. Per evitar la " +"renderització de fotografies fosques a l'editor, es recomana usar la gestió de " +"color en aquest mode." +"

Si està deshabilitat, tots els fitxers RAW es descodificaran amb una " +"profunditat de color de 8 bits usant una corba gamma BT.709 i un 99% de punt " +"blanc. Aquest mode és més ràpidìd que la descodificació amb 16 bits." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Interpola el RGB com a quatre colors" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

Interpolate RGB as four colors" +"

The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

Interpola el RGB com a quatre colors" +"

Per defecte, s'assumeix que tots els píxels verds són el mateix. Si els " +"píxels verds de les files parells són més sensibles a la llum ultraviolada que " +"els de les files senars, aquesta diferència provoca un patró mallat a la " +"sortida; usant aquesta opció això es resol amb una pèrdua de detall mínima." +"

Resumint, aquesta opció desenfoca una mica la imatge, però elimina el patró " +"mallat 2x2 amb un mètode de qualitat VNG o amb un imbricat mètode de qualitat " +"AHD." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Visiteu el lloc web del projecte dcraw" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "Balanç de blancs:" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "Balanç de blancs D65 per omissió" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +msgid "Camera White Balance" +msgstr "Balanç de blancs de la càmera" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +msgid "Automatic White Balance" +msgstr "Balanç de blancs automàtic" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "Balanç de blancs manual" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

White Balance" +"

Configure the raw white balance :" +"

Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

Manual White balance: Set a custom temperature and green level values" +msgstr "" +"

Balanç de blancs" +"

Configureu el balanç de blancs cru:" +"

Balanç de blancs D65 per omissió: usa un balanç de blancs D65 de llum " +"de dia estàndard (per omissió del dcraw)" +"

Balanç de blancs de la càmera: usa el balanç de blancs especificat " +"per la càmera. Si no és disponible, retorna al balanç de blancs neutre per " +"omissió" +"

Balanç de blancs automàtic: calcula un balanç de blancs automàtic de " +"la mitja de tota la imatge" +"

Balanç de blancs manual: fixa uns valors de temperatura " +"personalitzada i un nivell de verd" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "Temperatura (K):" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

Temperature

Set here the color temperature." +msgstr "

Temperatura

Indiqueu aquí la temperatura del color." + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "Verd:" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

Set here the green component to set magenta color cast removal level." +msgstr "" +"

Indiqueu aquí la component verda per a fixar el nivell d'eliminació de la " +"conversió del color magenta." + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Llums intenses:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Blanc sòlid" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Sense escurçar" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Combinació" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Reconstrucció" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

Highlights" +"

Select here the highlight clipping method:" +"

Solid white: clip all highlights to solid white" +"

Unclip: leave highlights unclipped in various shades of pink" +"

Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

Rebuild: reconstruct highlights using a level value" +msgstr "" +"

Llums intenses" +"

Seleccioneu aquí el mètode per escurçar les llums intenses:" +"

Blanc sòlid: escurça les llums intenses al blanc sòlid" +"

Sense escurçar: deixa les llums intenses en varis tonalitats de rosa" +"

Combinació: combina els valors escurçats i els no escurçats fent un " +"encadenament gradual a blanc" +"

Reconstrucció: reconstrueix les llums intenses usant un valor de " +"nivell" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Nivell:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

Level" +"

Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

Nivell" +"

Indica el nivell de reconstrucció de les llums intenses. Els valors baixos " +"afavoreixen els blancs i els valors alts afavoreixen els colors." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Brillantor:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

Brighness" +"

Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

" +msgstr "" +"

Brillantor" +"

Indica el nivell de brillantor de la imatge de sortida. El valor " +"predeterminat és 1,0 (només treballa en el mode de 8 bits)." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Qualitat (interpolació):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilineal" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

Quality" +"

Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

" +msgstr "" +"

Qualitat" +"

Seleccioneu aquí el mètode d'interpolació per a eliminar el mosaic en " +"descodificar les imatges RAW. L'algorisme d'eliminació del mosaic és un procés " +"digital de la imatge usat per interpolar una imatge completa des de dades " +"parcials en brut rebudes del sensor d'imatge de filtrat per color intern de " +"moltes càmeres digitals en forma d'una matriu de píxels de colors. També es " +"coneix com interpolació CFA o reconstrucció del color; en anglès s'anomena " +"normalment \"demosaicing\". Hi ha 3 mètodes d'eliminació del mosaic de les " +"imatges RAW:" +"

Bilineal: usa una interpolació bilineal d'alta velocitat però baixa " +"qualitat (predeterminat - per a un ordinador lent). En aquest mètode, el valor " +"vermell d'un píxel no vermell és la mitjana dels píxels vermells adjacents, i " +"el mateix pel blau i el verd." +"

VNG: usa la interpolació d'un nombre variable de gradients (Variable " +"Number of Gradients). Aquest mètode calcula els gradients a prop del píxel " +"d'interès i usa els gradients més baixos (que representen els suavitzats i les " +"parts més semblants de la imatge) per fer una estimació." +"

AHD: usa la interpolació adaptativa dirigida a la homogeneïtat " +"(Adaptive Homogeneity-Directed). Aquest mètode selecciona la direcció de la " +"interpolació per maximitzar una mètrica homogènia, de manera que es minimitzen " +"els defectes dels colors." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Habilita la reducció de soroll" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

Enable Noise Reduction" +"

Use wavelets to erase noise while preserving real detail." +"

" +msgstr "" +"

Habilita la reducció de soroll" +"

Utilitza ones petites per esborrar el soroll mentre es preserva el detall " +"real." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Llindar:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

Threshold" +"

Set here the noise reduction threshold value to use." +msgstr "" +"

Llindar" +"

Indiqueu aquí el valor del llindar de reducció de soroll a usar." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Habilita la correcció d'aberració cromàtica" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

Enable Chromatic Aberration correction" +"

Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

" +msgstr "" +"

Habilita la correcció d'aberració cromàtica" +"

Augmenta les capes RAW vermella i blava per un factor indicat, habitualment " +"entre 0,999 a 1,001, per a corregir l'aberració cromàtica." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Multiplicador de vermell:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

Red multiplier" +"

Set here the magnification factor of the red layer" +msgstr "" +"

Multiplicador de vermell" +"

Indiqueu aquí el factor d'augment de la capa vermella" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Multiplicador de blau:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

Blue multiplier" +"

Set here the magnification factor of the blue layer" +msgstr "" +"

Multiplicador de blau" +"

Indiqueu aquí el factor d'augment de la capa blava" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Espai de color:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Cru (lineal)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Escala àmplia" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

Color space" +"

Select here the output color space used to decode RAW data." +"

Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

Espai de color" +"

Seleccioneu aquí l'espai de color de sortida usat per descodificar les dades " +"RAW." +"

RAW (lineal): es aquest mode, no s'usa cap espai de color de sortida " +"durant la descodificació RAW." +"

sRGB: aquest és un espai de color RGB, creat cooperativament per " +"Hewlett-Packard i Microsoft. És la millor elecció per les imatges destinades a " +"la Web i al retrat fotogràfic." +"

Adobe RGB: aquest espai de color és un espai de color RGB ampliat, " +"desenvolupat per Adobe. S'utilitza en aplicacions fotogràfiques com la " +"publicitat i l'art." +"

Gama àmplia: aquest espai de color és una versió expandida de l'espai " +"de color RGB Adobe." +"

Pro-Photo: aquest espai de color és un espai de color RGB, " +"desenvolupat per Kodak, que ofereix una gama enorme i es va dissenyar en la " +"seva concepció per ser utilitzada a les sortides fotogràfiques." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Estàndard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "No estiris o giris els píxels" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

Do not stretch or rotate pixels" +"

For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

" +msgstr "" +"

No estiris o giris els píxels" +"

A les càmeres Fuji Super CCD, mostra les imatges inclinades 45 graus. A les " +"càmeres amb píxels no quadrats, no allarga la imatge a la seva relació " +"d'aspecte correcta. En qualsevol cas, aquesta opció garanteix que cada píxel de " +"la sortida correspon a un píxel RAW." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Punt negre" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

Black point" +"

Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

" +msgstr "" +"

Punt negre" +"

Usa un valor de punt negre específic per descodificar les fotografies RAW. " +"Si heu desactivat aquesta opció, el valor del punt negre es calcularà " +"automàticament." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

Black point value" +"

Specify specific black point value of the output image." +"

" +msgstr "" +"

Valor del punt negre" +"

Indica el valor específic del punt negre de la imatge de sortida." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Avançat" diff --git a/po/da/Makefile.am b/po/da/Makefile.am new file mode 100644 index 0000000..cd02658 --- /dev/null +++ b/po/da/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = da +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/da/libkdcraw.po b/po/da/libkdcraw.po new file mode 100644 index 0000000..07ddb19 --- /dev/null +++ b/po/da/libkdcraw.po @@ -0,0 +1,478 @@ +# Danish translation of libkdcraw +# +# Erik Kjær Pedersen , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-06-28 20:25-0400\n" +"Last-Translator: Erik Kjær Pedersen \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

Unable to find the %1 executable:" +"
This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

Kan ikke finde den kørbare fil %1:" +"
Dette binære program kræves for at understøtte ubehandlet filformat. Du kan " +"fortsætte, men du kommer ikke til at kunne håndtere nogle ubehandlede billeder. " +"Tjek installationen af pakken libkdcraw på computeren." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

%1 executable is not up to date:" +"
The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

Den kørbare fil %1 er ikke uptodate:" +"
Version %2 af dette binære program blev fundet på computeren. Denne " +"version er for gammel til at køre på en rigtig måde. Du kan fortsætte, men du " +"kommer ikke til at kunne håndtere nogle ubehandlede billeder. Tjek " +"installationen af pakken libkdcraw på computeren." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16 bits farvedybde" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

Hvis aktiveret, afkodae alle ubehandlede filer til 16-bits farvedybde ved at " +"bruge en lineær gammakurve. For at forhindre at et mørkt billede vises i " +"editoren, anbefales at farvehåndtering bruges sammen med denne tilstand. " +"

Hvis deaktiveret, afkodes alle ubehandlede filer til 8-bits farvedybde med " +"en BT.709 gammakurve og en hvidpunkt i 99. procentilen. Denne tilstand er " +"hurtigere end 16-bits afkodning." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Interpolér RGB som fire farver" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

Interpolate RGB as four colors" +"

The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

Interpolér RGB som fire farver" +"

Standard er at antage at alle grønne pixler er ens. Selv hvis lige-rækker " +"pixler er mere følsomme overfor ultraviolet lys end ulige-rækker. Denne forskel " +"forårsager et gittermønster i uddata. Ved at bruge denne indstilling, løses " +"dette problem med et minimalt detaljeringstab." +"

For at opsummere, giver denne indstilling en lille udtværring, men " +"eliminerer falsk 2x2 gittermønstre med VNG-kvalitet-metoden eller labyrinter " +"med AHD-kvalitet-metoden." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Besøg dcraw-projektets hjemmeside" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Brug kameraets hvidbalance" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Automatisk farvebalance" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "Brug kameraets hvidbalance" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

White Balance" +"

Configure the raw white balance :" +"

Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +#, fuzzy +msgid "

Temperature

Set here the color temperature." +msgstr "" +"

Tærskel" +"

Indstil støjreduceringens tærskelværdi som skal bruges her." + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Overbelyste områder:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Fuldstændig hvidt" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Unclip" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +#, fuzzy +msgid "" +"

Highlights" +"

Select here the highlight clipping method:" +"

Solid white: clip all highlights to solid white" +"

Unclip: leave highlights unclipped in various shades of pink" +"

Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

Rebuild: reconstruct highlights using a level value" +msgstr "" +"

Overbelysninger" +"

Vælg beskæringsmetoden for overbelyste områser her:" +"

Helhvide: beskærer alle overbelyste områder til helhvidt" +"

Ubeskårne: efterlad overbelysninger ubeskårne i forskellige rosa " +"skygninger" +"

Genoprettete: genopret overbelysnigner ved brug af en niveauværdi." + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Niveau:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

Level" +"

Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

Niveau" +"

Angiv niveau for genoprettede overbelysninger i resultatbilledet. En lav " +"værdi gør at hvidt foretrækkes, og en høj værdi gør at farver foretrækkes." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Lysstyrke:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

Brighness" +"

Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

" +msgstr "" +"

Lyshed" +"

Angiv resultatbilledets lyshet. Standardværdien er 1,0 (fungerer kun i " +"8-bit-tilstand)." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Kvalitet (interpoleret):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilineær" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +#, fuzzy +msgid "" +"

Quality" +"

Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

" +msgstr "" +"

Kvalitet" +"

Vælg interpolationsmetode for afkodning af ubehandlede billeder for " +"mosaikfjernelse. En algoritme for mosaikfjernelse er en digital billedproces " +"som bruges til at interpolere et fuldstændigt billede fra partielt ubehandlede " +"data i form af en matrix af farvede billedpunkter, som er modtaget fra den " +"farvefiltrerede billedsensor som findes internt i mange digitalkameraer. Den er " +"også kendt som CFA-interpolation eller farverekonstruktion. Der er tre metoder " +"til at udføre mosaikfjernelse af ubehandlede billeder:" +"

Bilineær: Anvender en hurtig bilineær interpolation med lav kvalitet " +"(standard for langsomme computerer). Med denne metoden beregnes den røde værdi " +"af et billedpunkt som ikke er rødt som middelværdien af røde billedpunkter ved " +"siden af, og på samme måde for blåt og grønt." +"

VNG: Anvend interpolation med variabelt antal overgange. Denne metode " +"beregner overgange nær det interessante billedpunkt og bruger de laveste " +"overgange (som repræsenterer jævnere og lignende dele af billedet) til at lave " +"en vurdering." +"

AHD: Anvend adaptiv homogenstyret interpolation. Denne metode vælger " +"interpolationens retning så at et homogenitetsmål maksimeres, og på den måde " +"typisk minimeres farveafvigelser." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Aktivér støjreducering" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

Enable Noise Reduction" +"

Use wavelets to erase noise while preserving real detail." +"

" +msgstr "" +"

Aktivér støjreducering" +"

Brug bølgeelement til at reducere støj samtidig med at rigtige detaljer " +"bevares." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Tærskel:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

Threshold" +"

Set here the noise reduction threshold value to use." +msgstr "" +"

Tærskel" +"

Indstil støjreduceringens tærskelværdi som skal bruges her." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +#, fuzzy +msgid "Enable Chromatic Aberration correction" +msgstr "Aktivér støjreducering" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

Enable Chromatic Aberration correction" +"

Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Multiplikationsfaktor for rødt:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

Red multiplier" +"

Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Multiplikationsfaktor for blåt:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

Blue multiplier" +"

Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Farverum:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Ubehandlet (lineær)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Stort toneomfang" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-foto" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +#, fuzzy +msgid "" +"

Color space" +"

Select here the output color space used to decode RAW data." +"

Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

Farverum" +"

Vælg resultatets farverum som bruges til at afkode ubehandlede data her." +"

Ubehandled (lineær): Med denne tilstand bruges ingen farverum for " +"resultateter under afkodning af ubehandlede data." +"

sRGB: Dette farverum er et RGB-farverum, oprettet i samarbejde mellem " +"Hewlett-Packard og Microsoft. Det er det bedste valg for billeder som er " +"beregnede til for internettet og til portrætfotografering." +"

Adobe RGB: Dette farverum er et RGB-farverum, udvikled af Adobe. Det " +"bruges til fotografiske tilpasninger såsom reklame og kunst." +"

Stort toneomfang: Dette farverum er en udvidet version af Adobes " +"RGB-farverum." +"

Pro-foto: Dette farverum er et RGB-farverum, udviklet af Kodak, som " +"tilbyder et særligt stort toneomfang konstrueret til brug med henblik på " +"fotografiske resultater." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Standard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Stræk eller rotér ikke billedpunkter" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

Do not stretch or rotate pixels" +"

For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

" +msgstr "" +"

Stræk eller rotér ikke billedpunkter" +"

Vis billedet hældet 45 grader for Fuji Super CCD-kameraer. Stræk ikke " +"billedet til at rette proportioner for kameraer med ikke-firkantede " +"billedpunkter. Under alle omstndigheder garanterer dette at hvert billedpunkt i " +"resultatet svarer til et ubehandlet billedpunkt." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Sortpunkt" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

Black point" +"

Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

" +msgstr "" +"

Sortpunkt" +"

Brug en specifik sortpunktværdi til at afkode ubehandlede billeder. Hvis du " +"slå dette fra, beregnes sortpunktværdien automatisk." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

Black point value" +"

Specify specific black point value of the output image." +"

" +msgstr "" +"

Sortpunktværdi" +"

Angiv en specifik sortpunktværdi for resultatbilledet." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Avanceret" + +#~ msgid "

Use camera white balance

Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

Brug kameraets hvidbalance

Brug kameraets egne indstillinger af hvidbalance. Hvis de ikke kan findes, går indstillingen tilbage til standardværdier (som er at bruge faste værdier for dagslys, beregnede fra eksempelbilleder)." + +#, fuzzy +#~ msgid "

Automatic color balance

Calculate the white balance by averaging the entire image." +#~ msgstr "

Automatisk farvebalance

Standard er at bruge en fast farvebalance baseret på et hvidt kort fotograferet i sollys." + +#~ msgid "Color balance multipliers" +#~ msgstr "Farvebalancefaktorer" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Faktor for Grøn 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Faktor for Grøn 2:" + +#~ msgid "Reconstruct" +#~ msgstr "Rekonstruér" diff --git a/po/de/Makefile.am b/po/de/Makefile.am new file mode 100644 index 0000000..9ffcbab --- /dev/null +++ b/po/de/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = de +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/de/libkdcraw.po b/po/de/libkdcraw.po new file mode 100644 index 0000000..47f7e5c --- /dev/null +++ b/po/de/libkdcraw.po @@ -0,0 +1,484 @@ +# translation of libkdcraw.po to german +# translation of libkdcraw.po to +# +# Oliver Dörr , 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2008-03-06 18:54+0100\n" +"Last-Translator: Oliver Dörr \n" +"Language-Team: german \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

Unable to find the %1 executable:" +"
This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

Kann das Programm %1 nicht finden:" +"
Diese sProgramm wird für die Unterstützung von Rohdateiformaten benötigt. " +"Sie können fortfahren, aber Sie können keine Rohbilder verwalten. Bitte " +"überprüfen Sie dei Installation des libkdcraw Paketes auf Ihrem Rechner." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

%1 executable is not up to date:" +"
The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

Das Programm %1 int nicht aktuell genug:" +"
Die Version %2 wurde von dem Prpogramm auf Ihrem Rechner gefunden. Diese " +"Version ist leider zu alt, um ordnungsgemäß zu funktionieren. Sie können " +"fortfahren, aber Sie können keine Rohbilder verwalten. Bitte überprüfen Sie die " +"Installation des libkdcraw Paketes auf Ihrem Rechner." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16-Bit Farbtiefe" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

Wenn die Option aktiviert wird, werden alle Rodateien mit 16-Bit Farbtiefe " +"unter Benutzung einer linearen Gammakurve dekodiert. Um das Berechnen eines " +"Schwarzbildes zu verhindern empfehlen wir Ihnen die Farbverwaltung in diesem " +"Modus zu benutzen." +"

Wenn die Option deaktiviert ist, werden alle Rohdateien mit 8-Bit Farbtiefe " +"unter Benutzung einer BT.709 Gammakurve und einem 99% Weißpunkt dekodiert. " +"Dieser Modus ist schneller als eine 16-Bit Dekodierung." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "RGB als vier Farben interpolieren" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

Interpolate RGB as four colors" +"

The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

Interpoliert RGB durch vier Farben. " +"

Die Voreinstellung ist es, anzunehmen, dass alle grünen Pixel identisch " +"sind. Da eine ebenmäßige Reihe von grünen Pixeln empfindlicher auf " +"ultraviolettes Licht reagiert als eine nicht ebenmäßige, wird normalerweise " +"durch diesen Unterschied ein Netzmuster erzeugt. Diese Option löst dieses " +"Problem mit einem minimalen Verlust von Details.\n" +"

Diese Option verschmiert das Bild ein wenig, aber es verhindert fehlerhafte " +"2x2 Gitter mit der VNG- oder der AHD-Qualitätsmethode." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Webseite des dcraw-Projektes besuchen" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "Weißabgleich:" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "Standard D65 Weißabgleich" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +msgid "Camera White Balance" +msgstr "Kamera-Weißabgleich" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +msgid "Automatic White Balance" +msgstr "Automatischer Weißabgleich" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "Manueller Weißabgleich" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

White Balance" +"

Configure the raw white balance :" +"

Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

Manual White balance: Set a custom temperature and green level values" +msgstr "" +"

Weißabgleich" +"

Konfiguration des Roh_Weißabgleichs:" +"

Standard D65 Weißabgleich: Benutzt einen " +"Standardtageslichtweißabgleich D65 (dcraw Standard)." +"

Kamera-Weißabgleich: Benutzt den Weißabgleich der vond er Kamera " +"vorgegebne wurde. Wenn dieser nicht verfügbar ist, dann wird der Standard, der " +"neutrale Weißabgleich benutzt." +"

Automatischer Weißabgleich: Berechnet einen automatischen " +"Weißabgleich, der das gesamte Bild mittelt." +"

Manueller Weißabgleich: Setzt benutzerdefinierte Temperatur und " +"Grünwerte." + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "Temperatur (K):" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

Temperature

Set here the color temperature." +msgstr "

Temperatur

Setzen Sie hier die Farbtemperatur." + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "Grün:" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

Set here the green component to set magenta color cast removal level." +msgstr "" +"

Legen Sie hier die Grünkomponente fest, um den Grad der Magentaentfernung zu " +"bestimmen." + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Spitzlichter:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Durchgehendes Weiß" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Lösen" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Abmischen" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Rekonstruieren" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

Highlights" +"

Select here the highlight clipping method:" +"

Solid white: clip all highlights to solid white" +"

Unclip: leave highlights unclipped in various shades of pink" +"

Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

Rebuild: reconstruct highlights using a level value" +msgstr "" +"

Spitzlichter" +"

Wählen Sie hier Spitzlichterabschneidemethode:" +"

Durchgehendes Weiß: setzt alle Spitzlichter auf ein durchgehendes " +"weiß." +"

Lösen: lässt alle Spitzlichter gelöst in verschiedenen Schattierungen " +"von Rosa. " +"

Abmischen:Mischt gelöste und befestigte Werte zusammen für eine " +"abgestufte Abblendung nach weiß." +"

Rekonstruieren: rekonstruiert alle Spitzlichter durch die Benutzung " +"eines Levelwertes." + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Niveau:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

Level" +"

Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

Niveau" +"

Gibt das Spitzlichterniveau des Ausgabebildes für die Rekonstruktion. " +"Niedrige Werte bevorzugen Weiss und hohe Werte Farben." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Helligkeit:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

Brighness" +"

Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

" +msgstr "" +"

Helligkeit" +"

Gibt das Helligkeitsniveau des Ausgabebildes an. Der Standardwert ist 1,0. " +"Diese Funktion arbeitet nur im 8-Bit Modus." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Qualität(Interpolation):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilinear" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

Quality" +"

Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

" +msgstr "" +"

Qualität" +"

Wählen Sie hier die Interpolationsmethode zum demosaicing der Rohbilder. Ein " +"demosaicing Algorithmus ist der digitale Prozess der benutzt wird um ein " +"komplettes Bild aus den Rohdaten des farbgefilterten Bildsensors zu " +"interpolieren. Dieser Sensor ist in vielen Digitalkameras in Form einer Matrix " +"von farbigen Pixeln enthalten. Demosaicing ist auch bekannt als CFA " +"Interpolation, Farbfiltermatrix oder Farbrekonstruktion. Es gibt drei Methoden " +"zur Farbrekonstruktion von Rohbildern:" +"

Bilinear: benutzt einen sehr schnellen bilineare Interpolation die " +"eine schlechte Qualität erzeugt. Diese Methode ist der Standard für langsame " +"Rechner. In der Methode wird der Rotwert eines nicht-roten Pixel als der " +"Durchschnitt der benachbarten roten Pixel berechnet. Analog wird für den Blau- " +"und Grünwert verfahren." +"

VNG: benutzt zur Interpolation eine Variable Nummer von Gradienten. " +"Diese Methode berechnet Gradienten neben dem interessanten Pixel und benutzt " +"die niedrigen Gradienten, die glattere und ähnlichere Teile des Bildes " +"repräsentieren, um eine Schätzung für den Pixel zu machen. " +"

PPG: benutzt eine Patterned Pixel Grouping Interpolation. " +"Pixelgruppierungen gehen von Annahmen über natürliche Szenen bei Ihren " +"Schätzungen aus. Es erzeugt daher weniger Farbartefakte bei natürlichen Bildern " +"als die VNG Methode." +"

AHD: benutzt eine adaptive homogenitäts-gerichtete Interpolation. " +"Diese Methode wählt die Richtung der Interpolation, so dass eine " +"Homogenitätsmetrik maximiert wird. Die minimiert typischerweise Farbartefakte." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Rauschminderung einschalten" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

Enable Noise Reduction" +"

Use wavelets to erase noise while preserving real detail." +"

" +msgstr "" +"

Rauschminderung einschalten" +"

Benutzt Wavelets um Rauschen zu löschen und dabei die echten Details zu " +"erhalten." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Schwellwert:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

Threshold" +"

Set here the noise reduction threshold value to use." +msgstr "" +"

Schwellwert" +"

Geben Sie hier den Schwellwert ein, der für die Rauschminderung benutzt " +"wird." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Farbabweichungskorrektur einschalten" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

Enable Chromatic Aberration correction" +"

Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

" +msgstr "" +"

Farbabweichungskorrektur einschalten" +"

Vergrößert die Rot- und Blau-Ebenen der Rohdaten, um einen gegebenen Faktor, " +"üblicherweise zwischen 0,999 und 1,001, um farbabweichungen zu korrigieren." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Rotmultiplikator:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

Red multiplier" +"

Set here the magnification factor of the red layer" +msgstr "" +"

Rotmultiplikator" +"

Geben Sie hier den Vergrößerungsfaktor der Rotebene." + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Blaumultiplikator:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

Blue multiplier" +"

Set here the magnification factor of the blue layer" +msgstr "" +"

Rotmultiplikator" +"

Geben Sie hier den Vergrößerungsfaktor der Rotebene." + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Farbraum:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Roh (linear)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Wide Gamut" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Foto" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

Color space" +"

Select here the output color space used to decode RAW data." +"

Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

Farbraum" +"

Wählen Sie hier den Ausgabefarbraum für die dekodierten Rohdaten." +"

Roh (linear): in diesem Modus wird kein Ausgabefarbraum während der " +"Rohdekodierung benutzt." +"

sRGB: dieser Farbraum ist ein RGB Farbraum, der in Kooperation " +"zwischen Hewlett-Packard und Microsoft erstellt wurde. Er ist die beste Wahl " +"für Bilder die für das Web oder als Portrait gedacht sind." +"

Adobe RGB: dieser Farbraum ist ein RGB Farbraum, der von Adobe " +"entwickelt wurde. Er ist gedacht für Fotoanwendungen wie Werbung und Kunst." +"

Wide-Gamut: dieser Farbraum ist eine erweiterte Version des Adobe RGB " +"Farbraums." +"

Pro-Foto: dieser Farbraum ist ein RGB Farbraum, der von Kodak " +"entwickelt wurde. Er ermöglicht eine sehr große Farbskala (Gamut) und wurde für " +"die fotographische Ausgabe designt." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Standard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Pixel nicht dehnen oder drehen" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

Do not stretch or rotate pixels" +"

For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

" +msgstr "" +"

Pixel nicht dehnen oder drehen" +"

Zeigt das Bild um 45 Grad gekippt für Fuji Super CCD Kameras. Für Kameras " +"mit nicht-quadratischen Pixeln wird das Bild nicht auf das richtige " +"Seitenverhältnis gedehnt. Diese Option sorgt also in allen Fälllen, dass jeder " +"Ausgabepixel genau einem Rohpixel entspricht." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Schwarzpunkt" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

Black point" +"

Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

" +msgstr "" +"

Schwarzpunkt" +"

Benutzt einen spezifischen Schwarpunktwert, um die Rohbilder zu dekodieren. " +"Wenn Sie diese Option ausschalten, dann wird der Schwarzpzunktwert automatisch " +"berechnet." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

Black point value" +"

Specify specific black point value of the output image." +"

" +msgstr "" +"

Schwarzpunktwert" +"

Geben Sie den spezifischen Schwarzpunktwert des Ausgabebildes an." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Erweitert" diff --git a/po/el/Makefile.am b/po/el/Makefile.am new file mode 100644 index 0000000..9cc1677 --- /dev/null +++ b/po/el/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = el +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/el/libkdcraw.po b/po/el/libkdcraw.po new file mode 100644 index 0000000..35ecc88 --- /dev/null +++ b/po/el/libkdcraw.po @@ -0,0 +1,485 @@ +# translation of libkdcraw.po to Greek +# +# Spiros Georgaras , 2007. +# Toussis Manolis , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-07-16 20:13+0300\n" +"Last-Translator: Spiros Georgaras \n" +"Language-Team: Greek \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

Unable to find the %1 executable:" +"
This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

Αδυναμία εύρεσης του εκτελέσιμου %1:" +"
Αυτό το πρόγραμμα απαιτείται για την υποστήριξη της ακατέργαστης μορφής " +"Raw. Μπορείτε να συνεχίσετε, αλλά δε θα είναι δυνατός ο χειρισμός των εικόνων " +"Raw. Παρακαλώ ελέγξτε την εγκατάσταση του πακέτου libkdcraw στον υπολογιστή " +"σας." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

%1 executable is not up to date:" +"
The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

Το εκτελέσιμο %1 δεν είναι ενημερωμένο:" +"
Βρέθηκε η έκδοση %2 αυτού του προγράμματος στον υπολογιστή σας. Η έκδοση " +"αυτή είναι πολύ παλιά για τη σωστή λειτουργία του προγράμματος. Μπορείτε να " +"συνεχίσετε αλλά θα είναι αδύνατος ο χειρισμός ακατέργαστων εικόνων Raw. " +"Παρακαλώ ελέγξτε την εγκατάσταση του πακέτου libkdcraw στον υπολογιστή σας." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "Βάθος χρώματος 16 bits" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

Αν ενεργοποιηθεί, όλα τα αρχεία RAW θα αποκωδικοποιούνται με βάθος χρώματος " +"16-bit χρησιμοποιώντας γραμμική καμπύλη γάμμα. Προτείνεται η χρήση διαχείρισης " +"χρωμάτων σε αυτήν τη λειτουργία για την αποφυγή σκοτεινής αποτύπωσης της " +"εικόνας στον επεξεργαστή. " +"

Αν απενεργοποιηθεί, όλα τα αρχεία RAW θα αποκωδικοποιούνται με βάθος " +"χρώματος 8-bit με χρήση καμπύλης γάμμα BT.709 και λευκό σημείο 99ου " +"εκατοστημόριου. Αυτή η μέθοδος είναι πιο γρήγορη από την αποκωδικοποίηση " +"16-bit." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Απόδοση του RGB ως τέσσερα χρώματα" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

Interpolate RGB as four colors" +"

The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

Παρεμβολή RGB ως τετραχρωμία" +"

Όλα τα πράσινα εικονοστοιχεία είναι όμοια εξ ορισμού. Αν τα πράσινα " +"εικονοστοιχεία στις μονές γραμμές είναι πιο ευαίσθητα από τα ζυγά στο υπεριώδες " +"φως, αυτό δημιουργεί κάποιο μοτίβο στην έξοδο: χρησιμοποιώντας αυτή την επιλογή " +"λύνεται αυτό το πρόβλημα με ελάχιστη απώλεια λεπτομέρειας." +"

Αυτή η επιλογή θολώνει ελαφριά την εικόνα, αλλά εξαφανίζει εσφαλμένα μοτίβα " +"2x2 με τη μέθοδο ποιότητας VNG ή γραμμώσεις με τη μέθοδο ποιότητας AHD." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Επισκεφτείτε το δικτυακό τόπο του dcraw" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Χρήση ισορροπίας λευκού της φωτογραφικής" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Αυτόματη ισορροπία χρώματος" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "Χρήση ισορροπίας λευκού της φωτογραφικής" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

White Balance" +"

Configure the raw white balance :" +"

Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +#, fuzzy +msgid "

Temperature

Set here the color temperature." +msgstr "" +"

Κατώφλι" +"

Ορίστε εδώ το κατώφλι μείωσης θορύβου που θα χρησιμοποιηθεί." + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Υψηλοί τόνοι:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Συμπαγές λευκό" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Αναίρεση αποκοπής" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Ανάμειξη" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Επανακατασκευή" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

Highlights" +"

Select here the highlight clipping method:" +"

Solid white: clip all highlights to solid white" +"

Unclip: leave highlights unclipped in various shades of pink" +"

Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

Rebuild: reconstruct highlights using a level value" +msgstr "" +"

Υψηλοί τόνοι" +"

Επιλέξτε εδώ τη μέθοδο αποκοπής των υψηλών τόνων:" +"

Συμπαγές λευκό: αποκοπή όλων των υψηλών τόνων και μετατροπή τους σε " +"συμπαγές λευκό" +"

Χωρίς αποκοπή: Οι υψηλοί τόνοι παραμένουν όπως είναι σε διάφορες " +"σκιάσεις του ροζ " +"

Ανάμειξη: Ανάμειξη των αποκομμένων και μη αποκομμένων τιμών ώστε να " +"επιτευχθεί μια ομαλή μετάβαση προς το λευκό" +"

Επανακατασκευή: Αναδόμηση των υψηλών τόνων χρησιμοποιώντας μια τιμή " +"για το επίπεδο" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Επίπεδο:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

Level" +"

Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

Επίπεδο" +"

Καθορισμός του επιπέδου αναδόμησης των υψηλών τόνων. Οι χαμηλές τιμές " +"ευνοούν το λευκό και οι υψηλές τιμές ευνοούν τα χρώματα." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Φωτεινότητα:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

Brighness" +"

Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

" +msgstr "" +"

Φωτεινότητα" +"

Καθορισμός του επιπέδου φωτεινότητας της εικόνας εξόδου. Η προκαθορισμένη " +"τιμή είναι 1.0 (μόνο σε λειτουργία 8-bit)." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Ποιότητα (παρεμβολή):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilinear" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +#, fuzzy +msgid "" +"

Quality" +"

Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

" +msgstr "" +"

Ποιότητα" +"

Επιλέξτε εδώ τη μέθοδο demosaicing αποκωδικοποίησης παρεμβολής των αρχείων " +"RAW. Ο αλγόριθμος demosaicing είναι μία μέθοδος που χρησιμοποιείται για τη " +"σύνθεση μίας ψηφιακής εικόνας από τα επί μέρους raw δεδομένα που λαμβάνονται " +"από τον χρωματικά φιλτραρισμένο αισθητήρα εικόνας. που υπάρχει σε πολλές " +"φωτογραφικές μηχανές με τη μορφή ενός πίνακα χρωματιστών εικονοστοιχείων. Είναι " +"επίσης γνωστή ως παρεμβολή CFA ή ανασυγκρότηση χρώματος. Υπάρχουν τρεις μέθοδοι " +"demosaicing εικόνων RAW:" +"

Διγραμμική: χρησιμοποιεί υψηλής ταχύτητας αλλά χαμηλής ποιότητας " +"διγραμμική παρεμβολή (προκαθορισμένο για πιο αργούς υπολογιστές). Σε αυτή τη " +"μέθοδο, η τιμή του κόκκινου ενός μη κόκκινου εικονοστοιχείου, υπολογίζεται από " +"το μέσο όρο των γειτονικών κόκκινων εικονοστοιχείων. Το ίδιο γίνεται για το " +"μπλε και το πράσινο." +"

VNG: χρησιμοποιεί την παρεμβολή Variable Number of Gradients. Αυτή η " +"μέθοδος υπολογίζει τις κλίσεις κοντά στο εξεταζόμενο εικονοστοιχείο και " +"χρησιμοποιεί τις χαμηλότερες από αυτές (που αναπαριστούν ομαλότερες διαφορές " +"και παρόμοια τμήματα της εικόνας) για την εξαγωγή μιας εκτιμώμενης τιμής." +"

AHD: χρησιμοποιεί την παρεμβολή Adaptive Homogeneity-Directed. Αυτή η " +"μέθοδος επιλέγει την κατεύθυνση της παρεμβολής με τέτοιο τρόπο ώστε να " +"μεγιστοποιείται το ποσοστό ομοιογένειας, ελαχιστοποιώντας τα σφάλματα χρώματος." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Ενεργοποίηση μείωσης θορύβου" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

Enable Noise Reduction" +"

Use wavelets to erase noise while preserving real detail." +"

" +msgstr "" +"

Ενεργοποίηση μείωσης θορύβου" +"

Χρήση κυματομορφών για την αφαίρεση του θορύβου με ταυτόχρονη διατήρηση της " +"πραγματικής λεπτομέρειας." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Κατώφλι:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

Threshold" +"

Set here the noise reduction threshold value to use." +msgstr "" +"

Κατώφλι" +"

Ορίστε εδώ το κατώφλι μείωσης θορύβου που θα χρησιμοποιηθεί." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +#, fuzzy +msgid "Enable Chromatic Aberration correction" +msgstr "Ενεργοποίηση μείωσης θορύβου" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

Enable Chromatic Aberration correction" +"

Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Κόκκινος πολλαπλασιαστής:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

Red multiplier" +"

Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Μπλε πολλαπλασιαστής:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

Blue multiplier" +"

Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Χώρος χρωμάτων:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Ακατέργαστο (γραμμικό)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Ευρεία γκάμα" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +#, fuzzy +msgid "" +"

Color space" +"

Select here the output color space used to decode RAW data." +"

Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

Χώρος χρωμάτων" +"

Επιλέξτε εδώ το χρωματικό χώρο εξόδου για την αποκωδικοποίηση δεδομένων RAW." +"

Ακατέργαστο (γραμμικό): σε αυτήν τη λειτουργία δε χρησιμοποιείται " +"κανένας χώρος χρωμάτων κατά την αποκωδικοποίηση RAW." +"

sRGB: αυτός ο χρωματικός χώρος βασίζεται στο χρώμα RGB, ενώ " +"δημιουργήθηκε σε συνεργασία με τη Hewlett-Packard και τη Microsoft. Είναι η " +"καλύτερη επιλογή για εικόνες που προορίζονται για ιστοσελίδες και φωτογραφίες " +"προσώπων." +"

Adobe RGB: αυτός ο χρωματικός χώρος είναι επίσης ένας χώρος RGB που " +"αναπτύχθηκε από την Adobe, που χρησιμοποιείται για εφαρμογές φωτογραφίας όπως " +"διαφημίσεις και τέχνη. " +"

Ευρεία γκάμα: αυτός ο χρωματικός χώρος πρόκειται για μια εκτεταμένη " +"έκδοση του χώρου χρωμάτων Adobe RGB." +"

Pro-Photo: πρόκειται για χώρο χρωμάτων RGB που αναπτύχθηκε από την " +"Kodak, και προσφέρει μια μεγάλη χρωματική γκάμα σχεδιασμένη για χρήση σε " +"φωτογραφικές εφαρμογές." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Τυπικός" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Να μη γίνει τράβηγμα ή περιστροφή εικονοστοιχείων" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

Do not stretch or rotate pixels" +"

For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

" +msgstr "" +"

Να μη γίνει τράβηγμα ή περιστροφή εικονοστοιχείων" +"

Για τις φωτογραφικές μηχανές με CCD Fuji Super, εμφάνιση της εικόνας με " +"περιστροφή 45 μοιρών. Για φωτογραφικές μη μη τετράγωνα εικονοστοιχεία, να μη " +"γίνει τράβηγμα της εικόνας στη σωστή της αναλογία διαστάσεων. Σε κάθε " +"περίπτωση, αυτή η επιλογή εγγυάται ότι κάθε εικονοστοιχείο εξόδου αντιστοιχεί " +"σε ένα εικονοστοιχείο της ακατέργαστης μορφής RAW." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Μαύρο σημείο" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

Black point" +"

Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

" +msgstr "" +"

Μαύρο σημείο" +"

Χρήση μιας συγκεκριμένης τιμής μαύρου σημείου για την αποκωδικοποίηση των " +"ακατέργαστων εικόνων RAW. Αν απενεργοποιήσετε αυτήν την επιλογή, η τιμή του " +"μαύρου σημείου θα υπολογιστεί αυτόματα." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

Black point value" +"

Specify specific black point value of the output image." +"

" +msgstr "" +"

Τιμή μαύρου σημείου" +"

Καθορίστε συγκεκριμένη τιμή του μαύρου σημείου για την εικόνα εξόδου." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Προχωρημένα" + +#~ msgid "

Use camera white balance

Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

Χρήση ισορροπίας λευκού της φωτογραφικής μηχανής

Γίνεται χρήση των προσαρμοσμένων ρυθμίσεων ισορροπίας λευκού της φωτογραφικής μηχανής. Αν αυτές είναι αδύνατο να βρεθούν γίνεται επαναφορά των προκαθορισμένων ρυθμίσεων (χρήση σταθερών τιμών για το φως της ημέρας, υπολογισμένες από εικόνες δείγματα)." + +#~ msgid "

Automatic color balance

Calculate the white balance by averaging the entire image." +#~ msgstr "

Αυτόματη ισορροπία χρώματος

Υπολογισμός της ισορροπίας λευκού χρώματος με βάση τη μέση τιμή ολόκληρης της εικόνας." + +#~ msgid "Color balance multipliers" +#~ msgstr "Πολλαπλασιαστές ισορροπίας χρώματος" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Πράσινος πολλαπλασιαστής 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Πράσινος πολλαπλασιαστής 2:" diff --git a/po/es/Makefile.am b/po/es/Makefile.am new file mode 100644 index 0000000..dffeb57 --- /dev/null +++ b/po/es/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = es +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/es/libkdcraw.po b/po/es/libkdcraw.po new file mode 100644 index 0000000..61d182b --- /dev/null +++ b/po/es/libkdcraw.po @@ -0,0 +1,496 @@ +# translation of libkdcraw.po to Español +# Pablo Pita Leira , 2007. +# santi , 2007. +# Santiago Fernández Sancho , 2007. +# translation of libkdcraw.po to +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-08-23 18:07+0200\n" +"Last-Translator: Santiago Fernández Sancho \n" +"Language-Team: Español \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: CCD Adaptive Homogeneity CIELab VNG Fuji RAW Hewlett\n" +"X-POFile-SpellExtra: Variable Directed Packard dcraw Kodak AHD libkdcraw\n" +"X-POFile-SpellExtra: of Number CFA Gamute sRGB Photo Gradients BT\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

Unable to find the %1 executable:" +"
This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

No se encontró el ejecutable %1:" +"
Este programa binario es necesario para soportar los formatos de archivo " +"RAW. Podrá continuar, pero no será capaz de trabajar con las imágenes RAW. " +"Compruebe la instalación del paquete «libkdcraw» en su equipo." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

%1 executable is not up to date:" +"
The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

El ejecutable %1 no está actualizado:" +"
Se ha encontrado la versión %2 de este programa binario en su equipo. Esta " +"versión es demasiado antigua para funcionar correctamente. Podrá continuar, " +"pero no será capaz de trabajar con las imágenes RAW. Compruebe la instalación " +"del paquete «libkdcraw» en su equipo." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "Profundidad de color de 16 bits" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

Si activa la opción, todos los archivos RAW serán descodificados para una " +"profundidad de color de 16 bits, usando una curva de gamma linear. Para evitar " +"el mostrar imágenes negras en el editor, se recomienda que use el gestor de " +"colores en este modo. " +"

Si desactivada, todos los archivos RAW serán descodificados para una " +"profundidad de color de 8 bits, con una curva de gama BT.709 y un punto blanco " +"en el percentil-99. Este modo es mas rápido que la descodificación de 16 bits." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Interpolar el RGB como cuatro colores" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

Interpolate RGB as four colors" +"

The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

Interpolar el RGB como cuatro colores." +"

De forma predeterminada se asume que todos los puntos verdes son lo mismo. " +"Si los puntos verdes de las líneas pares fuesen más sensibles a la luz " +"ultravioleta que los de las lineas impares esta diferencia causa un patrón " +"reticular en el resultado; si se usa esta opción, se resuelve el problema con " +"una mínima pérdida de detalle." +"

En resumen, esta opción borra la imagen un poco, pero elimina los falsos " +"patrones en malla 2x2 con el método de calidad VNG o los laberintos con el " +"método AHD." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Visite el sitio web del proyecto «dcraw»" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Usar el balance de blancos de la cámara" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Balance de colores automático" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "Usar el balance de blancos de la cámara" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

White Balance" +"

Configure the raw white balance :" +"

Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +#, fuzzy +msgid "

Temperature

Set here the color temperature." +msgstr "" +"

Multiplicador rojo" +"

Establezca aquí el factor de aumento de la capa roja" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Tonos claros:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Blanco puro" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "No superponer" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Mezclar" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Reconstruir" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

Highlights" +"

Select here the highlight clipping method:" +"

Solid white: clip all highlights to solid white" +"

Unclip: leave highlights unclipped in various shades of pink" +"

Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

Rebuild: reconstruct highlights using a level value" +msgstr "" +"

Tonos claros" +"

Seleccione aquí el método de recorte de los tonos claros:" +"

Blanco puro: ajusta todos los tonos claros hacia un blanco puro " +"

No superponer: Deja los tonos claros de las diferentes zonas en " +"varios tonos de rosa" +"

Mezclar: Combina los valores de las diferentes zonas para conseguir " +"una transición gradual hacia el blanco" +"

Reconstruir: reconstruye los tonos claros, usando un valor de nivel" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Nivel:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

Level" +"

Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

Nivel" +"

Indica el nivel de tonos claros en la reconstrucción. Los valores bajo " +"favorecen los blancos y los valores altos favorecen los colores." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Brillo:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

Brighness" +"

Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

" +msgstr "" +"

Brillo" +"

Indique el nivel de brillo de la imagen resultante. El valor predeterminado " +"es 1,0 (solo funciona en el modo de 8-bit)." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Calidad (interpolación):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilinear" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

Quality" +"

Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

" +msgstr "" +"

Calidad" +"

Seleccione aquí el método de interpolación en la decodificación para " +"eliminar el mosaico de las imágenes RAW. Un algoritmo de borrado de mosaicos es " +"un proceso digital sobre la imagen usado para interpolar una imagen completa a " +"partir de los datos parciales en bruto que son recibidos desde el sensor de " +"imagen con filtros de colores, sensor interno en muchas cámaras digitales en " +"forma de una matriz de puntos coloreados. Se conoce también por interpolación " +"CFA o reconstrucción de colores, siendo el otro término común el borrado de " +"mosaicos. Existen 4 métodos para borrar los mosaicos de las imágenes RAW:" +"

Bilinear: usa la interpolación bilinear, rápida pero de baja calidad " +"(predeterminado para máquinas lentas). En este método, el valor de rojo de un " +"punto no-rojo se calcula como la media de los puntos rojos adyacentes, " +"aplicándose el mismo principio para el verde y el azul." +"

VNG: usa la interpolación de número de gradientes variable (del " +"inglés Variable Number of Gradients). Este método calcula los gradientes, " +"próximos al punto de interés, y usa los gradientes menores (que representan las " +"partes mas suaves y semejantes de la imagen) para hacer una estimación. " +"

PPG: utiliza la interpolación por agrupación de puntos en patrones " +"(del inglés Patterned Pixel Grouping). La agrupación de puntos hace " +"estimaciones para paisajes naturales. Existen pocos artefactos de color en las " +"imágenes naturales en contraposición al método del número de gradientes " +"variable." +"

AHD: usa la interpolación adaptativa y direccionada a la homogeneidad " +"(del inglés Adaptive Homogeneity-Directed). Este método selecciona la dirección " +"de interpolación, de modo a maximizar una métrica de homogeneidad, minimizando " +"de esta forma los artefactos de colores." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Activar la reducción de ruido" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

Enable Noise Reduction" +"

Use wavelets to erase noise while preserving real detail." +"

" +msgstr "" +"

Activar reducción de ruido" +"

Usa wavelets para borrar el ruido mientras se preserva los detalles reales." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Umbral:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

Threshold" +"

Set here the noise reduction threshold value to use." +msgstr "" +"

Umbral:" +"

Configure aquí el umbral para la reducción de ruido." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Activar la corrección de aberración cromática" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

Enable Chromatic Aberration correction" +"

Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

" +msgstr "" +"

Activar la corrección de aberración cromática" +"

Amplía las capas de rojo y de azul en bruto de acuerdo a los factores dados, " +"normalmente 0,999 y 1,001, para corregir la aberración cromática." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Multiplicador rojo:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

Red multiplier" +"

Set here the magnification factor of the red layer" +msgstr "" +"

Multiplicador rojo" +"

Establezca aquí el factor de aumento de la capa roja" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Multiplicador azul:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

Blue multiplier" +"

Set here the magnification factor of the blue layer" +msgstr "" +"

Multiplicador azul" +"

Establezca aquí el factor de aumento de la capa azul" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Espacio de colores:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Bruto (linear)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "RGB de Adobe" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Espectro amplio" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

Color space" +"

Select here the output color space used to decode RAW data." +"

Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

Espacio de color" +"

Seleccione aquí el espacio de color resultante utilizado para decodificar " +"los datos RAW." +"

Bruto (linear): en este modo, no se usa ningún espacio de colores " +"como resultado de la decodificación del RAW." +"

sRGB: este espacio de colores es un espacio de colores RGB, " +"desarrollado en cooperación entre Hewlett-Packard y Microsoft, siendo la mejor " +"elección para imágenes destinadas a la web y a los retratos fotográficos." +"

RGB de Adobe: este espacio de colores es un espacio de colores RGB, " +"desarrollado por Adobe, que se usa en aplicaciones de fotografía tales como la " +"publicidad y el arte." +"

Espectro amplio: este espacio de colores es una versión expandida del " +"espacio de colores RGB de Adobe." +"

Pro-Photo: este espacio de colores es un espacio RGB, desarrollado " +"por Kodak, que ofrece un espectro especialmente grande, diseñado para usarse " +"con resultados fotográficos." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Estándard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "No modificar o girar los puntos" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

Do not stretch or rotate pixels" +"

For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

" +msgstr "" +"

No modificar o girar los puntos" +"

En las máquinas Fuji Super CCD, muestra la imagen girada 45 grados. Para las " +"máquinas con puntos no-cuadrados, no modifica la imagen a su proporción " +"correcta. En cualquiera de los dos casos, esta opción garantiza que cada punto " +"en el resultado corresponda a un punto RAW." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Punto negro" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

Black point" +"

Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

" +msgstr "" +"

Punto negro" +"

Usar un valor específico de punto negro para decodificar las imagenes RAW. " +"Si deshabilita esta opción, el valor del punto negro se calculará " +"automaticamente." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

Black point value" +"

Specify specific black point value of the output image." +"

" +msgstr "" +"

Valor del punto negro" +"

Especifique un valor del punto negro de la imagen resultado." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Avanzado" + +#~ msgid "

Use camera white balance

Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

Usar el balance de blancos de la cámara

Utiliza una configuración personalizada de balance de blancos de la cámara fotográfica. Si no existe configuración se vuelve al valor predeterminado (que utiliza valores fijos de la luz del día, calculados a partir de imágenes de muestra)." + +#~ msgid "

Automatic color balance

Calculate the white balance by averaging the entire image." +#~ msgstr "

Balance de color automático

Calcula el balance de blanco utilizando el valor medio de la imagen completa." + +#~ msgid "Color balance multipliers" +#~ msgstr "Multiplicadores del balance de color" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Multiplicador verde 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Multiplicador verde 2:" diff --git a/po/et/Makefile.am b/po/et/Makefile.am new file mode 100644 index 0000000..298856b --- /dev/null +++ b/po/et/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = et +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/et/libkdcraw.po b/po/et/libkdcraw.po new file mode 100644 index 0000000..3e45437 --- /dev/null +++ b/po/et/libkdcraw.po @@ -0,0 +1,479 @@ +# translation of libkdcraw.po to Estonian +# +# Marek Laane , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-09-23 19:50+0300\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

Unable to find the %1 executable:" +"
This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

Programmi %1 ei leitud:" +"
Seda programmi on vaja toorfailivormingute toetamiseks. Jätkata võib ka " +"ilma selleta, aga sel juhul ei ole võimalik toorfailivormingus pilte vaadata " +"ega redigeerida. Palun kontrolli libkdcraw paigaldust oma arvutis." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

%1 executable is not up to date:" +"
The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

Programm %1 on vananenud:" +"
Arvutis leiti selle versioon %2. See versioon on liiga vana, et seda saaks " +"korralikult kasutada. Jätkata võib muidugi ka sellega, aga siis ei ole võimalik " +"toorfailivormingus pilte vaadata ega redigeerida. Palun kontrolli libkdcraw " +"paigaldust oma arvutis." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16-bitine värvisügavus" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

Sisselülitamisel dekodeeritakse kõik toorfailid lineaarset gammakõverat " +"kasutades 16-bitisele värvisügavusele. Musta pildi renderdamise vältimiseks " +"redaktoris on soovitatav selles režiimis kasutada värvihaldust." +"

Kui see pole sisse lülitatud, dekodeeritakse kõik toorfailid 8-bitisele " +"värvisügavusele, kasutades BT.709 gammakõverat ja 99-protsendist valgepunkti. " +"See režiim on kiirem kui 16-bitine dekodeerimine." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "RGB interpoleerimine nelja värvina" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

Interpolate RGB as four colors" +"

The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

RGB interpoleerimine nelja värvina" +"

Vaikimisi eeldatakse, et kõik rohelised pikslid on ühesugused. Kui paarisrea " +"rohelised pikslid on ultravioletile tundlikumad kui paaritu rea omad, põhjustab " +"see erinevus väljundis võrkmustrit. Antud valiku sisselülitamisel saab sellest " +"probleemist üle minimaalse detailikaoga." +"

Üldiselt hägustab selle valiku kasutamine veidi pilti, kuid kõrvaldab " +"see-eest 2x2 libavõrkmustri VNG kvaliteedimeetodi või siksakid AHD " +"kvaliteedimeetodi korral." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "dcraw projekti veebilehekülg" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Kaamera värvustasakaalu kasutamine" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Automaatne värvibalanss" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "Kaamera värvustasakaalu kasutamine" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

White Balance" +"

Configure the raw white balance :" +"

Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +#, fuzzy +msgid "

Temperature

Set here the color temperature." +msgstr "" +"

Punase kordaja" +"

Siin saab määrata punase kihi suurendusteguri" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Heledad toonid:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Ühtlane valge" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Ei lõigata" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Sulandatakse" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Rekonstrueeritakse" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

Highlights" +"

Select here the highlight clipping method:" +"

Solid white: clip all highlights to solid white" +"

Unclip: leave highlights unclipped in various shades of pink" +"

Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

Rebuild: reconstruct highlights using a level value" +msgstr "" +"

Heledad toonid" +"

Siin saab valida heledate toonide lõikamise meetodi:" +"

Ühtlane valge: kõik heledad toonid lõigatakse ühtlaseks valgeks" +"

Ei lõigata: heledad toonid jäetakse lõikamata roosa erinevateks " +"varjunditeks" +"

Sulandatakse:lõigatud ja lõikmata väärtused sulandatakse " +"järk-järgulise üleminekuna valgesse" +"

Rekonstrueeritakse: heledad toonid rekonstrueeritakse taseme väärtust " +"kasutades." + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Tase:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

Level" +"

Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

Tase" +"

Määrab väljundpildi heledate toonide rekonstrueerimise taseme. Väiksemad " +"väärtused eelistavad valget, kõrgemad värve." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Heledus:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

Brighness" +"

Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

" +msgstr "" +"

Heledus" +"

Määrab väljundpildi heledustaseme. Vaikeväärtus on 1,0 (toimib ainult " +"8-bitises režiimis)." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Kvaliteet (interpoleerimine):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilineaarne" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

Quality" +"

Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

" +msgstr "" +"

Kvaliteet" +"

Siin saab valida toorpiltide dekodeerimisel kasutatava " +"värvirekonstruktsiooni (demosaicing) interpoleerimismeetodi. " +"Värvirekonstruktsiooni algoritm on mõeldud terve pildi interpoleerimiseks " +"osaliste toorandmete põhjal, mida edastab digikaamera värvifiltrit kasutav " +"pildisensor värvitud pikslite maatriksi kujul. Seda nimetatakse ka CFA " +"interpoleerimiseks. Toorpiltide värvirekonstruktsiooniks on neli viisi:" +"

Bilineaarne: kasutatakse väga kiiret, aga kesise kvaliteediga " +"bilineaarset interpoleerimist (aeglasematel arvutitel on see samas väga " +"mõistlik, sellepärast on see ka vaikeväärtus). Selle korral arvutatakse " +"mittepunase piksli punase värvi väärtus naabruses asuvate punaste pikslite " +"keskmisena; sama kehtib ka sinise ja rohelise kohta." +"

VNG: kasutatakse üleminekute muutarvu (Variable Number of Gradients) " +"interpoleerimist. See arvutab üleminekud huvipakkuva piksli läheduses ja " +"kasutab hindamiseks väiksema väärtusega üleminekuid (need esindavad ühtlasemaid " +"pildiosi)." +"

PPG: kasutatakse pikslite mustri alusel rühmitamise (Patterned Pixel " +"Grouping) interpoleerimist. Pikslite rühmitamisel võetakse hindamisel aluseks " +"loodusvaated. Loodusvaadete puhul tekib artefakte vähem kui üleminekute " +"muutarvu interpoleerimise korral." +"

AHD: kasutatakse adaptiivset homogeensust arvestavat (Adaptive " +"Homogenity-Directed) interpoleerimist. Selle korral valitakse interpoleerimise " +"suund maksimaalselt homogeensust arvetades, mis tavaliselt võimaldab " +"minimeerida artefaktide esinemist.

" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Müra vähendamise lubamine" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

Enable Noise Reduction" +"

Use wavelets to erase noise while preserving real detail." +"

" +msgstr "" +"

Müra vähendamise lubamine" +"

Kasutatakse lainikuid, mis mahendavad müra, säilitades samas servad.

" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Lävi:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

Threshold" +"

Set here the noise reduction threshold value to use." +msgstr "

Lävi

Siin saab määrata kasutatava müra vähendamise läve." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Värviaberratsiooni korrigeerimise lubamine" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

Enable Chromatic Aberration correction" +"

Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

" +msgstr "" +"

Värviaberratsiooni korrigeerimise lubamine" +"

Toorpildi punast ja sinist kihti suurendatakse värviaberratsiooni " +"parandamiseks määratud teguri võrra (tavaliselt 0,999 kuni 1,001)." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Punase kordaja:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

Red multiplier" +"

Set here the magnification factor of the red layer" +msgstr "" +"

Punase kordaja" +"

Siin saab määrata punase kihi suurendusteguri" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Sinise kordaja:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

Blue multiplier" +"

Set here the magnification factor of the blue layer" +msgstr "" +"

Sinise kordaja" +"

Siin saab määrata sinise kihi suurendusteguri" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Värviruum:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Toores (lineaarne)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Wide Gamut" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

Color space" +"

Select here the output color space used to decode RAW data." +"

Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

Värviruum" +"

Siin saab valida toorandmete dekodeerimisel kasutatava väljundvärviruumi." +"

Toores (lineaarne): selle korral ei kasutada toorpiltide " +"dekodeerimisel väljundvärviruumi." +"

sRGB: see on RGB värviruum, mille lõid Hewlett-Packard ja Microsoft. " +"See on parim valik piltidele, mis on mõeldud veebi jaoks, samuti portreedele." +"

Adobe RGB: see on Adobe poolt laiendatud RGB värviruum. Seda " +"kasutatakse laialdaselt fotograafias, näiteks reklaamides ja kunstiteostes." +"

Wide Gamut: see on Adobe RGB värviruumi laiendatud versioon." +"

Pro-Photo: see on Kodaki loodud RGB värviruum, mis pakub " +"spetsiaalselt fotograafilist väljundit silmas pidades eriti avarat " +"värviulatust." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Standard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Piksleid ei venitata ega pöörata" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

Do not stretch or rotate pixels" +"

For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

" +msgstr "" +"

Piksleid ei venitata ega pöörata" +"

Fuji Super CCD kaamerate korral näidatakse pilti 45 kraadi all kallutatuna. " +"Kaamerate puhul, mille pikslid pole ruudukujulised, ei venitata pilti korrektse " +"proportsiooni saavutamiseks. See valik tagab, et iga väljundpiksel vastab alati " +"kindlale toorpildi pikslile." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Mustpunkt" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

Black point" +"

Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

" +msgstr "" +"

Mustpunkt" +"

Toorpiltide dekodeerimisel kasutatakse konkreetset mustpunkti väärtust. Kui " +"see on sisse lülitamata, arvutatakse mustpunkti väärtus automaatselt." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

Black point value" +"

Specify specific black point value of the output image." +"

" +msgstr "" +"

Mustpunkti väärtus" +"

Siin saab määrata väljundipildi konkreetse mustpunkti väärtuse." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Muud" + +#~ msgid "

Use camera white balance

Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

Kaamera värvustasakaalu kasutamine

Kasutatakse kaamera kohandatud värvustasakaalu seadistusi. Vaikimisi pruugitakse fikseeritud päevavalguse väärtusi, mis on arvutatud näidispiltide põhjal. Kui seda ei leita, kasutatakse vaikeväärtusi." + +#~ msgid "

Automatic color balance

Calculate the white balance by averaging the entire image." +#~ msgstr "

Automaatne värvibalanss

Valge tasakaalu arvutamine kogu pildi keskmise põhjal." + +#~ msgid "Color balance multipliers" +#~ msgstr "Värvustasakaalu kordajad" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Rohelise 1 kordaja:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Rohelise 2 kordaja:" diff --git a/po/is/Makefile.am b/po/is/Makefile.am new file mode 100644 index 0000000..2205486 --- /dev/null +++ b/po/is/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = is +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/is/libkdcraw.po b/po/is/libkdcraw.po new file mode 100644 index 0000000..15c6de6 --- /dev/null +++ b/po/is/libkdcraw.po @@ -0,0 +1,476 @@ +# translation of libkdcraw.po to icelandic +# +# Sveinn í Felli , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-09-10 13:34+0000\n" +"Last-Translator: Sveinn í Felli \n" +"Language-Team: icelandic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

Unable to find the %1 executable:" +"
This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

Tekst ekki að finna %1 forritið:" +"
Þetta tvíundarforrit er nauðsynlegt til að styðja RAW skráarsniðið. Þú " +"getur haldið áfram, en þá geturðu ekki meðhöndlað neinar RAW myndir. " +"Vinsamlegast athugaðu uppsetningu libkdcraw pakkans á tölvunni þinni." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

%1 executable is not up to date:" +"
The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

%1 forritið hefur ekki verið uppfært:" +"
Útgáfa %2 af þessu tvíundarforriti fannst á tölvunni þinni. Sú útgáfa er " +"of gömul til að keyra á viðunandi máta. Þú getur haldið áfram, en þá geturðu " +"ekki meðhöndlað neinar RAW myndir. Vinsamlegast athugaðu uppsetningu libkdcraw " +"pakkans á tölvunni þinni." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16 bita litadýpt" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

Ef þetta er vikjað, þá munu allar RAW skrár verða afkóðaðar í 16-bita " +"litadýpt samkvæmt línulegum litrófsferli. Til að koma í veg vyrir dökka " +"myndgerð í myndvinnsluhamnum, þá er mælt með að notuð sé litastýring (Color " +"Management) í þessum ham." +"

Ef þetta er óvirkt munu allar RAW skrár verða afkóðaðar í 8-bita litadýpt " +"samkvæmt BT.709 litrófsferli og 99th-percentile hvítvægi. Þessi aðferð er mun " +"hraðvirkari en 16-bita afkóðun." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Breyta RGB í fjóra liti" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

Interpolate RGB as four colors" +"

The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

Breyta RGB í fjóra liti" +"

Sjálfgefið er að álykta að allir grænir dílar séu eins. Ef grænir dílar í " +"slétttölulínum eru viðkvæmari fyrir útfjólubláu ljósi heldur en oddatölulínum " +"þá getur sá munur valdið netmynstri í úttakinu; það að nota þessa aðferð leysir " +"það vandamál án þess að fórna miklu af smáatriðum." +"

Nánar; aðgerðin afskerpir myndina lítillega, en á móti eyðir hún tilbúnu 2x2 " +"netmynstri með VNG-gæða aðferðinni eða AHD-gæðum." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Heimsækja vef dcraw verkefnisins" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Nota hvítvægi frá myndavél" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Sjálfvirkt litavægi" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "Nota hvítvægi frá myndavél" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

White Balance" +"

Configure the raw white balance :" +"

Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +#, fuzzy +msgid "

Temperature

Set here the color temperature." +msgstr "

Margfeldi rauðs

Stilltu hér stækkun rauða litlagsins" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Hátónar:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Heilhvítur" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Afklemma" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Blanda" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Endurbyggja" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

Highlights" +"

Select here the highlight clipping method:" +"

Solid white: clip all highlights to solid white" +"

Unclip: leave highlights unclipped in various shades of pink" +"

Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

Rebuild: reconstruct highlights using a level value" +msgstr "" +"

Hátónar" +"

Veldu hér hvernig hátónar verða meðhöndlaðir:" +"

Heilhvítt: Klippa alla hátóna yfir að heilum hvítum lit" +"

Óklippt: Skilja alla hátóna eftir í ýmsum blæbrigðum af ljósbleikum " +"

Blend:Bland klipptum og óklipptum gildum saman stígandi í áttina til " +"hvíts" +"

Endurbyggja: Endurbyggja hátóna miðað við gildi hvítvægis." + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Styrkur:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

Level" +"

Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

Styrkur" +"

Tilgreinið styrk endurbyggðra hátóna. Lágt gildi styður frekar hvítt en hátt " +"gildi liti." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Birtustig:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

Brighness" +"

Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

" +msgstr "" +"

Birtustig" +"

Tilgreindu birtustig endalegu myndarinnar.Sjálfgefið gildi er 1.0 (virkar " +"bara í 8-bita ham)." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Gæði (innskotsaðferð):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Tvílínulegt" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

Quality" +"

Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

" +msgstr "" +"

Gæði" +"

Veldu hér innskotsaðferð við afkóðun og aftiglun RAW mynda. " +"Aftiglunarútreikningur (demosaicing algorithm) stafrænt myndvinnsluferli sem " +"nýtist til samsetningar heillar myndar út frá hlutum hrárra gagna sem koma frá " +"litsíum myndflögu myndavélar og eru í formi fylkja af litadílum. Einnig þekkt " +"undir nafninu CFA interpolation eða litendurbygging, enn ein stafsetningin er " +"að kalla þetta demosaicing. Það eru 3 aðferðir til að aftigla RAW myndir:" +"

Tvílínuleg: notar háhraða en lággæða tvílínuleg innskot (sjálfgefið - " +"fyrir hægvirkar tölvur). Í þessari aðferð þá er reiknað rauða gildi ekki-rauðs " +"díls (pixel) sem meðaltal nærliggjandi rauðra díla; síðan gildir sama fyrir blá " +"og græna." +"

VNG: notar innskot með breytilegum fjölda litstigla (Variable Number " +"of Gradients interpolation). Þessi aðferð reiknar litstigla í grennd við dílinn " +"sem er til skoðunar og notar lægri litstiglana (sem gefa til kynna mýkri og " +"líkari hluta myndar) til að áætla breytinguna. " +"

PPG: notar innskot miðað við mynsturhópa (Patterned Pixel Grouping " +"interpolation). PPG styðst við fyrirfram gefnar forsendur um náttúrulegar " +"aðstæður við útreikninga. Þannig minnka gallar á myndum sem teknar eru við " +"algengar náttúrulegar aðstæður, miðað við VNG-aðferðina." +"

AHD: notar aðlöguð samleitnistýrð innskot (Adaptive " +"Homogeneity-Directed interpolation). Þessi aðferð velur stefnu " +"innskotsaðgerðarinnar þannig að sem mest einsleitni mælist, þannig nást að " +"jafnaði minnst litatruflun." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Virkja truflanasíu" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

Enable Noise Reduction" +"

Use wavelets to erase noise while preserving real detail." +"

" +msgstr "" +"

Virkja truflanasíun" +"

Nota bylgjuútreikning til að þurrka út truflanir um leið og haldið er í " +"raunveruleg smáatriði." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Þröskuldur:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

Threshold" +"

Set here the noise reduction threshold value to use." +msgstr "

Þröskuldur

Stilltu hér gildi þröskuldar á truflanasíu." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Virkja síu fyrir litskekkjuleiðréttingu" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

Enable Chromatic Aberration correction" +"

Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

" +msgstr "" +"

Virkja síu fyrir litskekkjuleiðréttingu" +"

Stækkar hráu rauðu og bláu litlögin um valin gildi, oft á bilinu 0.999 til " +"1.001, til að leiðrétta litskekkju." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Margfeldi rauðs:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

Red multiplier" +"

Set here the magnification factor of the red layer" +msgstr "

Margfeldi rauðs

Stilltu hér stækkun rauða litlagsins" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Margfeldi blás:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

Blue multiplier" +"

Set here the magnification factor of the blue layer" +msgstr "

Margfeldi blás

Stilltu hér stækkun bláa litlagsins" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Litrýmd:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Hrágögn (línuleg)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Vítt litasvið" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

Color space" +"

Select here the output color space used to decode RAW data." +"

Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

Litrýmd" +"

Veldu hér litrýmd þá sem úttak RAW kóðunar mun miðast við." +"

RAW (línulegt): í þessum ham er engin vörpun í neina litrýmd á meðan " +"kóðuð eru RAW gögn." +"

sRGB: þetta er ein gerð RGB litrýmdar, unnin í samvinnu " +"Hewlett-Packard og Microsoft. Þetta er besta litrýmdin fyrir myndir á vefinn, " +"skjáinn og hugsanlega portrettljósmyndir." +"

Adobe RGB: þetta er útvíkkuð RGB litrýmd, þróað af Adobe. Þetta er " +"notað í mörgum ljósmyndaforritum við auglýsingagerð og framsetningu listrænna " +"mynda." +"

Vítt litasvið: (Wide Gamut) þessi litrýmd er útvíkkuð útgáfa af Adobe " +"RGB litrýmdinni." +"

Pro-Photo: þetta er ein gerð RGB litrýmdar, þróuð af Kodak, sem " +"gefur færi á sérstaklega breiðu litasviði, hugsað til notkunar með ýmsum gerðum " +"ljósmyndaútprentunar." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Staðlað" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Ekki teygja eða snúa dílum" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

Do not stretch or rotate pixels" +"

For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

" +msgstr "" +"

Ekki teygja eða snúa dílum" +"

Fyrir Fuji Super CCD myndavélar, sýna myndina með 45 gráðu halla. Fyrir " +"myndavélar sem ekki hafa ferningslaga díla, þá á ekki að teygja myndina til að " +"leiðrétta stærðarhlutföllin. Í öllu falli á þetta val að tryggja að hver díll " +"úttaksmyndar samsvari einum RAW díl." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Svartgildi" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

Black point" +"

Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

" +msgstr "" +"

Svartgildi" +"

Nota sérstakt gildi svartpunkts til að afkóða RAW myndir. Ef þú slekkur á " +"þessum möguleika þá verður gildið reiknað sjálfvirkt." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

Black point value" +"

Specify specific black point value of the output image." +"

" +msgstr "" +"

Svartgildi" +"

Tilgreindu gildi svarts punkts í endanlegri mynd." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Ítarlegra" + +#~ msgid "

Use camera white balance

Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

Nota hvítvægi myndavélar

Nota sérsniðnar hvítvægisstillingar frá myndavél. Ef slíkar stillingar finnast ekki, þá er stuðst við sjálfgefnar stillingar (sem er að nota föst gildi á dagsljósi, reiknað á grunni viðmiðunarmynda)." + +#~ msgid "

Automatic color balance

Calculate the white balance by averaging the entire image." +#~ msgstr "

Sjálfvirkt litajafnvægi

Reiknar hvítvægi myndar út frá meðaltali myndflatarins." + +#~ msgid "Color balance multipliers" +#~ msgstr "Margfeldisstuðlar fyrir litajafnvægi" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Margfeldi græns 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Margfeldi græns 2:" diff --git a/po/it/Makefile.am b/po/it/Makefile.am new file mode 100644 index 0000000..9ef9214 --- /dev/null +++ b/po/it/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = it +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/it/libkdcraw.po b/po/it/libkdcraw.po new file mode 100644 index 0000000..0d3c798 --- /dev/null +++ b/po/it/libkdcraw.po @@ -0,0 +1,6225 @@ +# translation of libkdcraw.po to Italian +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# +# Stefano Rivoir , 2003, 2004. +# Federico Zenith , 2004, 2005, 2006, 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2008-03-07 06:51+0100\n" +"Last-Translator: Federico Zenith \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

Unable to find the %1 executable:" +"
This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

Impossibile trovare l'eseguibile %1:" +"
Questo programma binario è necessario per supportare i formati di file " +"grezzi. Puoi continuare, ma non potrai gestire le immagini grezze. Controlla " +"l'installazione del pacchetto libkdcraw sul tuo computer." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

%1 executable is not up to date:" +"
The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

L'eseguibile %1 non è aggiornato:" +"
Sul tuo computer è stata rilevata la versione %2 di questo programma " +"binario. Questa versione è troppo vecchia per funzionare correttamente. Puoi " +"continuare, ma non potrai gestire le immagini grezze. Controlla l'installazione " +"del pacchetto libkdcraw sul tuo computer." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "Profondità di colore a 16 bit" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

Se abilitato, tutti i file grezzi saranno decodificati a una profondità di " +"colore di 16 bit usando una curva gamma lineare. Per evitare che l'editor " +"produca immagini scure, si raccomanda di usare la gestione del colore in questa " +"modalità." +"

Se disabilitato, tutti i file grezzi saranno decodificati a una profondità " +"di colore di 8 bit con una curva gamma BT.709 e un punto bianco al 99º " +"percentile. Questa modalità è più veloce della decodifica a 16 bit." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Interpola RGB come quattro colori" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

Interpolate RGB as four colors" +"

The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

Interpola RGB come quattro colori" +"

L'impostazione predefinita è assumere che tutti i pixel verdi siano uguali. " +"Se i pixel verdi delle righe pari sono più sensibili alla luce ultravioletta di " +"quelli delle righe dispari, questa differenza causa uno schema a retino nel " +"risultato; usare questa opzione risolve il problema con una perdita di " +"dettaglio minima." +"

In breve, questa opzione sfuma un po' l'immagine, ma elimina i retini 2×2 " +"con il metodo a qualità VNG o i labirinti con il metodo a qualità AHD." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Visita il sito Web del progetto dcraw" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "Bilanciamento del bianco:" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "Bilanciamento del bianco predefinito D65" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +msgid "Camera White Balance" +msgstr "Bilanciamento del bianco della macchina fotografica" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +msgid "Automatic White Balance" +msgstr "Bilanciamento del bianco automatico" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "Bilanciamento del bianco manuale" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

White Balance" +"

Configure the raw white balance :" +"

Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

Manual White balance: Set a custom temperature and green level values" +msgstr "" +"

Bilanciamento del bianco" +"

Configura il bilanciamento del bianco grezzo:" +"

Bilanciamento del bianco predefinito D65: usa un bilanciamento del " +"bianco standard per la luce diurna D65 (predefinito di dcraw)." +"

Bilanciamento del bianco della macchina fotografica" +": usa il bilanciamento del bianco specificato dalla macchina fotografica. Se " +"non è disponibile, passa al bilanciamento del bianco neutro predefinito." +"

Bilanciamento del bianco automatico: calcola un bilanciamento del " +"bianco automatico facendo una media su tutta l'immagine." +"

Bilanciamento del bianco manuale: imposta una temperatura " +"configurabile e i valori dei livelli del verde." + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "Temperatura (K):" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

Temperature

Set here the color temperature." +msgstr "

Temperatura

Imposta qui la temperatura del colore." + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "Verde:" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

Set here the green component to set magenta color cast removal level." +msgstr "" +"

Imposta qui il componente verde per impostare il livello di conversione del " +"colore magenta." + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Zone luminose:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Bianco solido" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Non trasformare" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Miscela" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Ricostruisci" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

Highlights" +"

Select here the highlight clipping method:" +"

Solid white: clip all highlights to solid white" +"

Unclip: leave highlights unclipped in various shades of pink" +"

Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

Rebuild: reconstruct highlights using a level value" +msgstr "" +"

Zone luminose" +"

Seleziona qui il metodo di trasformazione delle zone luminose:" +"

Bianco solido: trasforma le zone luminose in bianco solido." +"

Non trasformare: lascia le zone luminose come sono in varie sfumature " +"di rosa." +"

Miscela: miscela i valori trasformati e non per una sfumatura " +"graduale verso il bianco." +"

Ricostruisci: ricostruisci le zone luminose usando un valore di " +"livello." + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Livello:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

Level" +"

Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

Livello" +"

Specifica il livello di ricostruzione delle zone luminose. I valori bassi " +"favoriscono il bianco e quelli alti il colore." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Luminosità:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

Brighness" +"

Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

" +msgstr "" +"

Luminosità" +"

Specifica il livello di luminosità dell'immagine risultante. Il valore " +"predefinito è 1,0 (funziona solo in modalità a 8 bit)." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Qualità (interpolazione):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilineare" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

Quality" +"

Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

" +msgstr "" +"

Qualità" +"

Seleziona qui il metodo di interpolazione di demosaicizzazione per la " +"decodifica delle immagini grezze. Un algoritmo di demosaicizzazione è " +"un'elaborazione digitale dell'immagine usata per interpolare un'immagine " +"completa dai dati grezzi parziali ottenuti dal sensore delle immagini filtrato " +"a colori, presente in molte macchine fotografiche digitali sotto forma di una " +"matrice di pixel colorati. Nota anche come interpolazione CFA o ricostruzione " +"dei colori, viene anche indicata con il termine inglese «demosaicing». Ci sono " +"tre metodi per demosaicizzare le immagini grezze:" +"

Bilineare: usa un'interpolazione bilineare ad alta velocità ma di " +"bassa qualità (predefinita, per i computer lenti). In questo metodo, il valore " +"del rosso di un pixel non rosso viene calcolato come la media dei pixel rossi " +"adiacenti, e similmente per il blu e il verde." +"

VNG: usa l'interpolazione a numero variabile di gradienti. Questo " +"metodo calcola i gradienti vicino al pixel considerato e usa i gradienti minori " +"(che rappresentano le parti dell'immagine più simili) per ottenere una stima." +"

PPG: usa l'interpolazione a raggruppamento secondo schema dei pixel. " +"Il raggruppamento dei pixel assume alcune cose sullo scenario naturale nelle " +"sue stime. Ha meno artefatti di colore nelle immagini naturali che il metodo a " +"numero variabile di gradienti." +"

AHD: usa l'interpolazione adattativa orientata all'omogeneità. Questo " +"metodo seleziona la direzione dell'interpolazione in modo da massimizzare una " +"misura di omogeneità, riducendo quindi gli artefatti di colore." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Abilita riduzione dei disturbi" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

Enable Noise Reduction" +"

Use wavelets to erase noise while preserving real detail." +"

" +msgstr "" +"

Abilita riduzione dei disturbi" +"

Usa delle wavelet per cancellare i disturbi mantenendo i dettagli reali." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Soglia:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

Threshold" +"

Set here the noise reduction threshold value to use." +msgstr "" +"

Soglia" +"

Imposta qui il valore di soglia della riduzione dei disturbi da usare." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Abilita la correzione dell'aberrazione cromatica" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

Enable Chromatic Aberration correction" +"

Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

" +msgstr "" +"

Abilita la correzione dell'aberrazione cromatica" +"

Ingrandisci gli strati grezzi del rosso e del blu dei fattori dati, " +"tipicamente da 0,999 a 1,001, per correggere l'aberrazione cromatica." +"

" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Moltiplicatore del rosso:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

Red multiplier" +"

Set here the magnification factor of the red layer" +msgstr "" +"

Moltiplicatore del rosso" +"

Imposta qui il fattore di ingrandimento dello strato del rosso" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Moltiplicatore del blu:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

Blue multiplier" +"

Set here the magnification factor of the blue layer" +msgstr "" +"

Moltiplicatore del blu" +"

Imposta qui il fattore di ingrandimento dello strato del blu" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Spazio dei colori:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Grezzo (lineare)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Ampio gamut" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

Color space" +"

Select here the output color space used to decode RAW data." +"

Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

Spazio dei colori" +"

Seleziona qui lo spazio dei colori usato per decodificare i dati grezzi." +"

Grezzo (lineare): in questa modalità, non viene usato nessuno spazio " +"dei colori durante la decodifica dei file grezzi." +"

sRGB: questo è uno spazio RGB, creato grazie a una collaborazione tra " +"Hewlett-Packard e Microsoft, ed è la scelta migliore per le immagini destinate " +"al Web e per i ritratti." +"

Adobe RGB: questo spazio di colori è uno spazio RGB esteso, " +"sviluppato dalla Adobe. Si usa in applicazioni fotografiche come la pubblicità " +"e le belle arti." +"

Ampio gamut: questo spazio di colori è una versione estesa dello " +"spazio Adobe RGB." +"

Pro-Photo: questo spazio di colori è uno spazio RGB, sviluppato dalla " +"Kodak, che offre un gamut particolarmente ampio progettato per la produzione di " +"stampe fotografiche professionali." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Standard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Non stirare o ruotare i pixel" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

Do not stretch or rotate pixels" +"

For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

" +msgstr "" +"

Non stirare o ruotare i pixel" +"

Per le macchine fotografiche Fuji Super CCD, mostra l'immagine inclinata di " +"45 gradi. Per le macchine fotografiche con pixel non quadrati, non stirare " +"l'immagine alle sue proporzioni corrette. Questa opzione garantisce comunque " +"che ogni pixel di output corrisponde a un pixel grezzo.

" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Punto nero" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

Black point" +"

Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

" +msgstr "" +"

Punto nero" +"

Usa un valore particolare del punto nero per decodificare le immagini " +"grezze. Se disattivi questa opzione, il valore del punto nero sarà calcolato " +"automaticamente.

" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

Black point value" +"

Specify specific black point value of the output image." +"

" +msgstr "" +"

Valore del punto nero" +"

Specifica un valore particolare del punto nero dell'immagine risultante.

" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Avanzate" + +#~ msgid "

Use camera white balance

Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

Usa il bilanciamento del bianco della macchina fotografica

Usa le impostazioni del bilanciamento del bianco della macchina fotografica. Se non se ne trovano, ritorna ai valori predefiniti (cioè usare dei valori fissi per la luce diurna, calcolati da immagini campione)." + +#~ msgid "

Automatic color balance

Calculate the white balance by averaging the entire image." +#~ msgstr "

Bilanciamento del colore automatico

Calcola il bilanciamento del bianco facendo una media di tutta l'immagine." + +#~ msgid "Color balance multipliers" +#~ msgstr "Moltiplicatori del bilanciamento del colore" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Moltiplicatore del verde 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Moltiplicatore del verde 2:" + +#~ msgid "Reconstruct" +#~ msgstr "Ricostruisci" + +#~ msgid "PNG compression:" +#~ msgstr "Compressione PNG:" + +#~ msgid "

The compression value for PNG images:

1: low compression (large file size but short compression duration - default)

5: medium compression

9: high compression (small file size but long compression duration)

Note: PNG is always a lossless image compression format." +#~ msgstr "

Il valore di compressione delle immagini PNG:

1: compressione bassa (file grande ma breve decompressione - predefinito)

5: compressione media

9: compressione alta (file piccolo ma decompressione lunga)

Nota: PNG è sempre un formato senza perdita." + +#~ msgid "Compress TIFF files" +#~ msgstr "Comprimi file TIFF" + +#~ msgid "

Toggle compression for TIFF images.

If you enable this option, you can reduce the final file size of the TIFF image.

A lossless compression format (Deflate) is used to save the file.

" +#~ msgstr "

Attiva la compressione delle immagini TIFF.

Se abiliti questa opzione, puoi ridurre la dimensione finale delle immagini TIFF.

Per salvare il file si usa un formato di compressione senza perdita (Deflate).

" + +#~ msgid "LossLess JPEG 2000 files" +#~ msgstr "File JPEG 2000 senza perdita" + +#~ msgid "

Toggle lossless compression for JPEG 2000 images.

If you enable this option, you will use a lossless method to compress JPEG 2000 pictures.

" +#~ msgstr "

Attiva la compressione senza perdita delle immagini JPEG 2000.

Se abiliti questa opzione, userai un metodo senza perdita per comprimere le immagini JPEG 2000.

" + +#~ msgid "JPEG 2000 quality:" +#~ msgstr "Qualità JPEG2000:" + +#~ msgid "

The quality value for JPEG 2000 images:

1: low quality (high compression and small file size)

50: medium quality

75: good quality (default)

100: high quality (no compression and large file size)

Note: JPEG 2000 is not a lossless image compression format when you use this setting." +#~ msgstr "

Il valore di qualità delle immagini JPEG 2000:

1: qualità bassa (altissima compressione e piccole dimensioni del file)

50: qualità media

75: qualità buona (predefinito)

100: qualità alta (senza compressione e grandi dimensioni del file)

Nota: JPEG 2000 non è un formato senza perdita quando usi questa impostazione." + +#~ msgid "JPEG quality:" +#~ msgstr "Qualità JPEG:" + +#~ msgid "

The quality value for JPEG images:

1: low quality (high compression and small file size)

50: medium quality

75: good quality (default)

100: high quality (no compression and large file size)

Note: JPEG use a lossy compression image algorithm." +#~ msgstr "

Il valore di qualità delle immagini JPEG:

1: qualità bassa (altissima compressione e piccole dimensioni del file)

50: qualità media

75: qualità buona (predefinito)

100: qualità alta (senza compressione e grandi dimensioni del file)

Nota: JPEG usa un algoritmo di compressione delle immagini con perdita." + +#~ msgid "Warning: JPEG is a
lossy compression
image format!

" +#~ msgstr "

Attenzione: JPEG è un
formato di immagini
con perdita di dati!

" + +#~ msgid "Comments/Tags" +#~ msgstr "Commenti e tag" + +#~ msgid "EXIF" +#~ msgstr "EXIF" + +#~ msgid "Makernote" +#~ msgstr "Makernote" + +#~ msgid "IPTC" +#~ msgstr "IPTC" + +#~ msgid "GPS" +#~ msgstr "GPS" + +#~ msgid "File Properties" +#~ msgstr "Proprietà del file" + +#~ msgid "File:" +#~ msgstr "File:" + +#~ msgid "Folder:" +#~ msgstr "Cartella:" + +#~ msgid "Modified:" +#~ msgstr "Ultima modifica:" + +#~ msgid "Size:" +#~ msgstr "Dimensione:" + +#~ msgid "Owner:" +#~ msgstr "Proprietario:" + +#~ msgid "Permissions:" +#~ msgstr "Permessi:" + +#~ msgid "Image Properties" +#~ msgstr "Proprietà dell'immagine" + +#~ msgid "Type:" +#~ msgstr "Tipo:" + +#~ msgid "Dimensions:" +#~ msgstr "Dimensioni:" + +#~ msgid "Compression:" +#~ msgstr "Compressione:" + +#~ msgid "Bits Depth:" +#~ msgstr "Profondità in bit:" + +#~ msgid "Color Mode:" +#~ msgstr "Modalità del colore:" + +#~ msgid "Photograph Properties" +#~ msgstr "Proprietà della fotografia" + +#~ msgid "Make:" +#~ msgstr "Produttore:" + +#~ msgid "Model:" +#~ msgstr "Modello:" + +#~ msgid "Created:" +#~ msgstr "Creato:" + +#~ msgid "Aperture:" +#~ msgstr "Diaframma:" + +#~ msgid "Focal:" +#~ msgstr "Fuoco:" + +#~ msgid "Exposure:" +#~ msgstr "Esposizione:" + +#~ msgid "Sensitivity:" +#~ msgstr "Sensibilità:" + +#~ msgid "Mode/Program:" +#~ msgstr "Modalità/programma:" + +#~ msgid "Flash:" +#~ msgstr "Flash:" + +#~ msgid "White balance:" +#~ msgstr "Bilanciamento del bianco:" + +#~ msgid "unavailable" +#~ msgstr "non disponibile" + +#~ msgid "RAW Image" +#~ msgstr "Immagine grezza" + +#~ msgid "None" +#~ msgstr "Nessuno" + +#~ msgid "Uncalibrated" +#~ msgstr "Non calibrato" + +#~ msgid "JPEG quality %1" +#~ msgstr "Qualità JPEG %1" + +#~ msgid "Unknown" +#~ msgstr "Sconosciuto" + +#~ msgid "%1x%2 (%3Mpx)" +#~ msgstr "%1x%2 (%3Mpx)" + +#~ msgid "%1 bpp" +#~ msgstr "%1 bpp" + +#~ msgid "%1 (35mm: %2)" +#~ msgstr "%1 (35mm: %2)" + +#~ msgid "%1 ISO" +#~ msgstr "%1 ISO" + +#~ msgid "Camera File Properties" +#~ msgstr "Proprietà del file della macchina fotografica" + +#~ msgid "Date:" +#~ msgstr "Data:" + +#~ msgid "Readable:" +#~ msgstr "Leggibile:" + +#~ msgid "Writable:" +#~ msgstr "Scrivibile:" + +#~ msgid "New Name:" +#~ msgstr "Nuovo nome:" + +#~ msgid "Downloaded:" +#~ msgstr "Scaricato:" + +#~ msgid "unknown" +#~ msgstr "sconosciuto" + +#~ msgid "%1 (%2)" +#~ msgstr "%1 (%2)" + +#~ msgid "unchanged" +#~ msgstr "non modificato" + +#~ msgid "Comments:" +#~ msgstr "Commenti:" + +#~ msgid "Date:" +#~ msgstr "Data:" + +#~ msgid "Rating:" +#~ msgstr "Voto:" + +#~ msgid "Search:" +#~ msgstr "Ricerca:" + +#~ msgid "Already assigned tags" +#~ msgstr "Tag già assegnati" + +#~ msgid "Recent Tags" +#~ msgstr "Tag recenti" + +#~ msgid "Revert all changes" +#~ msgstr "Annulla tutte le modifiche" + +#~ msgid "Apply all changes to pictures" +#~ msgstr "Applica tutte le modifiche alle immagini" + +#~ msgid "More" +#~ msgstr "Di più" + +#~ msgid "Apply changes?" +#~ msgstr "Applicare le modifiche?" + +#~ msgid "" +#~ "_n:

You have edited the comment of the picture. \n" +#~ "

You have edited the comment of %n pictures. " +#~ msgstr "" +#~ "

Hai modificato il commento dell'immagine.\n" +#~ "

Hai modificato il commento di %n immagini." + +#~ msgid "" +#~ "_n:

You have edited the date of the picture. \n" +#~ "

You have edited the date of %n pictures. " +#~ msgstr "" +#~ "

Hai modificato la data dell'immagine.\n" +#~ "

Hai modificato la data di %n immagini." + +#~ msgid "" +#~ "_n:

You have edited the rating of the picture. \n" +#~ "

You have edited the rating of %n pictures. " +#~ msgstr "" +#~ "

Hai modificato il voto dell'immagine.\n" +#~ "

Hai modificato il voto di %n immagini." + +#~ msgid "" +#~ "_n:

You have edited the tags of the picture. \n" +#~ "

You have edited the tags of %n pictures. " +#~ msgstr "" +#~ "

Hai modificato i tag dell'immagine.\n" +#~ "

Hai modificato i tag di %n immagini." + +#~ msgid "Do you want to apply your changes?

" +#~ msgstr "Vuoi applicare le modifiche?

" + +#~ msgid "" +#~ "_n:

You have edited the metadata of the picture:

    \n" +#~ "

    You have edited the metadata of %n pictures:

      " +#~ msgstr "" +#~ "

      Hai modificato i dati aggiuntivi dell'immagine:

        \n" +#~ "

        Hai modificato i dati aggiuntivi di %n immagini:

          " + +#~ msgid "
        • the comment
        • " +#~ msgstr "
        • il commento
        • " + +#~ msgid "
        • the date
        • " +#~ msgstr "
        • la data
        • " + +#~ msgid "
        • the rating
        • " +#~ msgstr "
        • il voto
        • " + +#~ msgid "
        • the tags
        • " +#~ msgstr "
        • i tag
        • " + +#~ msgid "Always apply changes without confirmation" +#~ msgstr "Applica sempre le modifiche senza chiedere conferma" + +#~ msgid "Applying changes to pictures. Please wait..." +#~ msgstr "Applicazione delle modifiche alle immagini. Attendi..." + +#~ msgid "Reading metadata from files. Please wait..." +#~ msgstr "Lettura dei dati aggiuntivi dai file. Attendi..." + +#~ msgid "Writing metadata to files. Please wait..." +#~ msgstr "Scrittura dei dati aggiuntivi dai file. Attendi..." + +#~ msgid "Tags" +#~ msgstr "Tag" + +#~ msgid "New Tag..." +#~ msgstr "Nuovo tag..." + +#~ msgid "Create Tag From AddressBook" +#~ msgstr "Crea tag dalla rubrica" + +#~ msgid "Edit Tag Properties..." +#~ msgstr "Modifica le proprietà del tag..." + +#~ msgid "Reset Tag Icon" +#~ msgstr "Reimposta l'icona del tag" + +#~ msgid "Delete Tag" +#~ msgstr "Elimina tag" + +#~ msgid "All Tags" +#~ msgstr "Tutti i tag" + +#~ msgid "Childs" +#~ msgstr "Figli" + +#~ msgid "Parents" +#~ msgstr "Genitori" + +#~ msgid "Select" +#~ msgstr "Seleziona" + +#~ msgid "Deselect" +#~ msgstr "Deseleziona" + +#~ msgid "Invert Selection" +#~ msgstr "Inverti la selezione" + +#~ msgid "Both" +#~ msgstr "Entrambi" + +#~ msgid "Toogle Auto" +#~ msgstr "Commuta automatico" + +#~ msgid "No AddressBook Entries Found" +#~ msgstr "Nessuna voce trovata nella rubrica" + +#~ msgid "Read metadata from file to database" +#~ msgstr "Leggi i dati aggiuntivi dal file nella banca dati" + +#~ msgid "Write metadata to each file" +#~ msgstr "Scrivi i dati aggiuntivi su ogni file" + +#~ msgid "Read metadata from each file to database" +#~ msgstr "Leggi i dati aggiuntivi da ogni file nella banca dati" + +#~ msgid "You are currently viewing items in the tag '%1' that you are about to delete. You will need to apply change first if you want to delete the tag." +#~ msgstr "Stai attualmente visualizzando gli elementi nel tag '%1' che stai per eliminare. Dovrai prima applicare le modifiche se vuoi eliminare il tag." + +#~ msgid "Delete '%1' tag?" +#~ msgstr "Eliminare il tag '%1'?" + +#~ msgid "No Recently Assigned Tags" +#~ msgstr "Nessun tag recentemente assegnato" + +#~ msgid "Found Tags" +#~ msgstr "Tag trovati" + +#~ msgid "Assigned Tags" +#~ msgstr "Tag assegnati" + +#~ msgid "Metadata" +#~ msgstr "Dati aggiuntivi" + +#~ msgid "&Move Here" +#~ msgstr "&Sposta qui" + +#~ msgid "C&ancel" +#~ msgstr "Annull&a" + +#~ msgid "Set as Tag Thumbnail" +#~ msgstr "Imposta come miniatura del tag" + +#~ msgid "Assign Tag '%1' to Items" +#~ msgstr "Assegna il tag '%1' agli elementi" + +#~ msgid "Assign tag to pictures. Please wait..." +#~ msgstr "Assegnazione dei tag alle immagini. Attendi..." + +#~ msgid "Channel:" +#~ msgstr "Canale:" + +#~ msgid "Luminosity" +#~ msgstr "Luminosità" + +#~ msgid "Alpha" +#~ msgstr "Alfa" + +#~ msgid "Colors" +#~ msgstr "Colori" + +#~ msgid "

          Select here the histogram channel to display:

          Luminosity: Display luminosity (perceived brightness) values.

          Red: Display the red image channel.

          Green: Display the green image channel.

          Blue: Display the blue image channel.

          Alpha: Display the alpha image channel. This channel corresponds to the transparency value and is supported by some image formats such as PNG or TIFF.

          Colors: Display all color channel values at the same time." +#~ msgstr "

          Seleziona qui il canale di istogrammi da mostrare:

          Luminosità: visualizza i valori di luminosità (percepita) dell'immagine.

          Rosso: visualizza il canale rosso dell'immagine.

          Verde: visualizza il canale verde dell'immagine.

          Blu: visualizza il canale blu dell'immagine.

          Alfa: visualizza il canale alfa dell'immagine. Questo canale corrisponde al valore di trasparenza ed è supportato da alcuni formati di immagine come PNG o TIF.

          Colori: visualizza tutti i valori dei canali dei colori allo stesso tempo." + +#~ msgid "

          Select here the histogram scale.

          If the image's maximal values are small, you can use the linear scale.

          Logarithmic scale can be used when the maximal values are big; if it is used, all values (small and large) will be visible on the graph." +#~ msgstr "

          Seleziona qui la scala dell'istogramma.

          Se i valori massimi delle immagini sono piccoli, puoi usare la scala lineare.

          La scala logaritmica può essere usata quando i valori massimi sono grandi. In questo modo tutti i valori (grandi e piccoli) saranno visibili sul grafico." + +#~ msgid "

          Linear" +#~ msgstr "

          Lineare" + +#~ msgid "

          Logarithmic" +#~ msgstr "

          Logaritmica" + +#~ msgid "Colors:" +#~ msgstr "Colori:" + +#~ msgid "

          Select here the main color displayed with Colors Channel mode:

          Red: Draw the red image channel in the foreground.

          Green: Draw the green image channel in the foreground.

          Blue: Draw the blue image channel in the foreground.

          " +#~ msgstr "

          Seleziona qui il colore principale visualizzato con la modalità dei canali dei colori:

          Rosso: disegna il canale del rosso dell'immagine in primo piano.

          Verde: disegna il canale del verde dell'immagine in primo piano.

          Blu: disegna il canale del blu dell'immagine in primo piano.

          " + +#~ msgid "

          Select here from which region the histogram will be computed:

          Full Image: Compute histogram using the full image.

          Selection: Compute histogram using the current image selection." +#~ msgstr "

          Seleziona qui da quale regione sarà calcolato l'istogramma:

          Immagine completa: calcola l'istogramma usando tutta l'immagine.

          Selezione: calcola l'istogramma usando la selezione attuale dell'immagine." + +#~ msgid "

          Full Image" +#~ msgstr "

          Immagine completa" + +#~ msgid "

          Selection" +#~ msgstr "

          Selezione" + +#~ msgid "

          This is the histogram drawing of the selected image channel" +#~ msgstr "

          Questo è l'istogramma del canale di immagine selezionato" + +#~ msgid "Range:" +#~ msgstr "Intervallo:" + +#~ msgid "

          Select here the minimal intensity value of the histogram selection." +#~ msgstr "

          Seleziona qui il valore minimo dell'intensità della selezione dell'istogramma." + +#~ msgid "

          Select here the maximal intensity value of the histogram selection." +#~ msgstr "

          Seleziona qui il valore massimo dell'intensità della selezione dell'istogramma." + +#~ msgid "Statistics" +#~ msgstr "Statistiche" + +#~ msgid "

          Here you can see the statistical results calculated from the selected histogram part. These values are available for all channels." +#~ msgstr "

          Qui puoi vedere i risultati statistici calcolati con la parte selezionata dell'istogramma. Questi valori sono disponibili per tutti i canali." + +#~ msgid "Mean:" +#~ msgstr "Media:" + +#~ msgid "Pixels:" +#~ msgstr "Pixel:" + +#~ msgid "Standard deviation:" +#~ msgstr "Deviazione standard:" + +#~ msgid "Count:" +#~ msgstr "Conteggio:" + +#~ msgid "Median:" +#~ msgstr "Mediana:" + +#~ msgid "Percentile:" +#~ msgstr "Percentuale:" + +#~ msgid "Color depth:" +#~ msgstr "Profondità di colore:" + +#~ msgid "Alpha Channel:" +#~ msgstr "Canale alfa:" + +#~ msgid "Histogram" +#~ msgstr "Istogramma" + +#~ msgid "ICC profile" +#~ msgstr "Profilo ICC" + +#~ msgid "16 bits" +#~ msgstr "16 bit" + +#~ msgid "8 bits" +#~ msgstr "8 bit" + +#~ msgid "These items will be permanently deleted from your hard disk." +#~ msgstr "Questi elementi saranno eliminati definitivamente dal disco fisso." + +#~ msgid "These items will be moved to the Trash Bin." +#~ msgstr "Questi elementi saranno cestinati." + +#~ msgid "" +#~ "_n: 1 file selected.\n" +#~ "%n files selected." +#~ msgstr "" +#~ "1 file selezionato.\n" +#~ "%n file selezionati." + +#~ msgid "These albums will be permanently deleted from your hard disk." +#~ msgstr "Questi album saranno eliminati permanentemente dal disco fisso." + +#~ msgid "These albums will be moved to the Trash Bin." +#~ msgstr "Questi album saranno cestinati." + +#~ msgid "" +#~ "_n: 1 album selected.\n" +#~ "%n albums selected." +#~ msgstr "" +#~ "1 album selezionato.\n" +#~ "%n album selezionati." + +#~ msgid "These albums will be permanently deleted from your hard disk.
          Note that all subalbums are included in this list and will be deleted permanently as well.
          " +#~ msgstr "Questi album saranno eliminati permanentemente dal disco fisso.
          Nota che anche tutti i sottoalbum inclusi in questo elenco saranno eliminati permanentemente.
          " + +#~ msgid "These albums will be moved to the Trash Bin.
          Note that all subalbums are included in this list and will be moved to the Trash Bin as well.
          " +#~ msgstr "Questi album saranno cestinati.
          Nota che anche tutti i sottoalbum inclusi in questo elenco saranno cestinati.
          " + +#~ msgid "About to delete selected files" +#~ msgstr "Sto per eliminare i file selezionati" + +#~ msgid "&Send to Trash" +#~ msgstr "Ce&stina" + +#~ msgid "About to delete selected albums" +#~ msgstr "Sto per eliminare gli album selezionati" + +#~ msgid "&Abort" +#~ msgstr "&Interrompi" + +#~ msgid "&Save As..." +#~ msgstr "&Salva con nome..." + +#~ msgid "&Load..." +#~ msgstr "&Carica..." + +#~ msgid "

          Reset all filter parameters to their default values." +#~ msgstr "

          Reimposta tutti i parametri dei filtri ai loro valori predefiniti." + +#~ msgid "

          Abort the current image rendering." +#~ msgstr "

          Interrompi la resa attuale dell'immagine." + +#~ msgid "

          Load all filter parameters from settings text file." +#~ msgstr "

          Carica tutti i parametri dei filtri da un file di testo delle impostazioni." + +#~ msgid "

          Save all filter parameters to settings text file." +#~ msgstr "

          Salva tutti i parametri dei filtri in un file di testo delle impostazioni." + +#~ msgid "

          This is the the image filter effect preview. If you move the mouse cursor on this area, a vertical and horizontal dashed line will be draw to guide you in adjusting the filter settings. Press the left mouse button to freeze the dashed line's position." +#~ msgstr "

          Questa è l'anteprima dell'effetto di filtro dell'immagine. Se sposti il cursore del mouse su quest'area, saranno disegnate una linea verticale e una orizzontale per aiutarti a regolare le impostazioni del filtro. Premi il pulsante sinistro del mouse per fissare la posizione della linea tratteggiata." + +#~ msgid "

          This is the image filter effect preview." +#~ msgstr "

          Questa è l'anteprima dell'effetto di filtro dell'immagine." + +#~ msgid "Guide color:" +#~ msgstr "Colore delle guide:" + +#~ msgid "

          Set here the color used to draw guides dashed-lines." +#~ msgstr "

          Imposta qui il colore usato per disegnare le linee tratteggiate di guida." + +#~ msgid "Guide width:" +#~ msgstr "Spessore delle guide:" + +#~ msgid "

          Set here the width in pixels used to draw guides dashed-lines." +#~ msgstr "

          Imposta qui lo spessore in pixel da usare per disegnare le linee tratteggiate di guida." + +#~ msgid "

          This is the current percentage of the task completed." +#~ msgstr "

          Questa è la percentuale attuale del completamento del lavoro." + +#~ msgid "Settings" +#~ msgstr "Impostazioni" + +#~ msgid "Plugin Handbook" +#~ msgstr "Manuale dei plugin" + +#~ msgid "Color Profile Info" +#~ msgstr "Informazioni sul profilo dei colori" + +#~ msgid "Use Super-CCD secondary sensors" +#~ msgstr "Usa i sensori secondari super CCD" + +#~ msgid "

          Use Super CCD secondary sensors

          For Fuji Super CCD SR cameras, use the secondary sensors, in effect underexposing the image by four stops to reveal detail in the highlights. For all other camera types this option is ignored.

          " +#~ msgstr "

          Usa i sensori secondari super CCD

          Per le macchine Super CCD SR della Fuji, usa i sensori secondari, in pratica sottoesponendo l'immagine di quattro passi per rivelare i dettagli nelle zone luminose. Per tutti gli altri tipi di macchine fotografiche questa impostazione viene ignorata.

          " + +#~ msgid "Quality:" +#~ msgstr "Qualità:" + +#~ msgid "VNG interpolation" +#~ msgstr "Interpolazione VNG" + +#~ msgid "AHD interpolation" +#~ msgstr "Interpolazione AHD" + +#~ msgid "

          Enable Noise Reduction

          Toggle bilateral filter to smooth noise while preserving edges. This option can be use to reduce low noise. The pictures edges are preserved because it is applied in CIELab color space instead of RGB.

          " +#~ msgstr "

          Abilita riduzione dei disturbi

          Attiva il filtro bilaterale per smussare i disturbi mantenendo i bordi. Questa opzione può essere usata per ridurre i disturbi bassi. I bordi dell'immagine sono mantenuti perché viene applicato nello spazio di colori CIELab invece dell'RGB.

          " + +#~ msgid "Domain:" +#~ msgstr "Dominio:" + +#~ msgid "

          Range

          Set here the noise reduction Sigma Range in units of CIELab colorspace. The default value is 4.0.

          " +#~ msgstr "

          Intervallo

          Imposta qui l'intervallo sigma della riduzione dei disturbi in unità di spazio di colori CIELab. Il valore predefinito è 4,0.

          " + +#~ msgid "Name:" +#~ msgstr "Nome:" + +#~ msgid "Type:" +#~ msgstr "Tipo:" + +#~ msgid "Modification Date:" +#~ msgstr "Data di modifica:" + +#~ msgid "Size:" +#~ msgstr "Dimensioni:" + +#~ msgid "Standard EXIF Tags" +#~ msgstr "Tag EXIF standard" + +#~ msgid "No description available" +#~ msgstr "Nessuna descrizione disponibile" + +#~ msgid "EXIF File to Save" +#~ msgstr "File EXIF da salvare" + +#~ msgid "EXIF binary Files (*.dat)" +#~ msgstr "File binari EXIF (*.dat)" + +#~ msgid "Toggle tags view to a simple human-readable list" +#~ msgstr "Fai passare la vista dei tag a un semplice elenco leggibile" + +#~ msgid "Toggle tags view to a full list" +#~ msgstr "Fai passare la vista dei tag a un elenco completo" + +#~ msgid "Save meta-data to a binary file" +#~ msgstr "Salva i dati aggiuntivi in un file binario" + +#~ msgid "Print meta-data to printer" +#~ msgstr "Stampa i dati aggiuntivi" + +#~ msgid "Copy meta-data to clipboard" +#~ msgstr "Copia i dati aggiuntivi negli appunti" + +#~ msgid "File name: %1 (%2)" +#~ msgstr "Nome del file: %1 (%2)" + +#~ msgid "

          File name: %1 (%2)" +#~ msgstr "

          Nome del file: %1 (%2)" + +#~ msgid "MakerNote EXIF Tags" +#~ msgstr "Tag EXIF MakerNote" + +#~ msgid "IPTC Records" +#~ msgstr "Dati IPTC" + +#~ msgid "Unknow" +#~ msgstr "Sconosciuto" + +#~ msgid "IPTC File to Save" +#~ msgstr "File IPTC da salvare" + +#~ msgid "IPTC binary Files (*.dat)" +#~ msgstr "File binari IPTC (*.dat)" + +#~ msgid "Interoperability" +#~ msgstr "Interoperabilità" + +#~ msgid "Image Information" +#~ msgstr "Informazioni sull'immagine" + +#~ msgid "Photograph Information" +#~ msgstr "Informazioni sulla fotografia" + +#~ msgid "Global Positioning System" +#~ msgstr "Sistema di posizionamento globale (GPS)" + +#~ msgid "Embedded Thumbnail" +#~ msgstr "Miniatura incorporata" + +#~ msgid "IIM Envelope" +#~ msgstr "Contenitore IIM" + +#~ msgid "IIM Application 2" +#~ msgstr "Applicazione 2 IIM" + +#~ msgid "Title:

          %1

          Value:

          %2

          Description:

          %3" +#~ msgstr "Titolo:

          %1

          Valore:

          %2

          Descrizione:

          %3" + +#~ msgid "More Info..." +#~ msgstr "Maggiori informazioni..." + +#~ msgid "Global Positioning System Information" +#~ msgstr "Informazioni del sistema di posizionamento globale (GPS)" + +#~ msgid "Loading image..." +#~ msgstr "Caricamento dell'immagine..." + +#~ msgid "No profile available..." +#~ msgstr "Nessun profilo disponibile..." + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "The ICC profile product name" +#~ msgstr "Il nome del prodotto del profilo ICC" + +#~ msgid "Description" +#~ msgstr "Descrizione" + +#~ msgid "The ICC profile product description" +#~ msgstr "La descrizione del prodotto del profilo ICC" + +#~ msgid "The additional ICC profile information" +#~ msgstr "Le informazioni aggiuntive del profilo ICC" + +#~ msgid "Manufacturer" +#~ msgstr "Produttore" + +#~ msgid "The raw information about ICC profile manufacturer" +#~ msgstr "Le informazioni grezze sul produttore del profilo ICC" + +#~ msgid "Model" +#~ msgstr "Modello" + +#~ msgid "The raw information about ICC profile model" +#~ msgstr "Le informazioni grezze sul modello del profilo ICC" + +#~ msgid "Copyright" +#~ msgstr "Copyright" + +#~ msgid "The raw information about ICC profile copyright" +#~ msgstr "Le informazioni grezze sul copyright del profilo ICC" + +#~ msgid "Profile ID" +#~ msgstr "Identificativo del profilo" + +#~ msgid "The ICC profile ID number" +#~ msgstr "Il numero identificativo del profilo ICC" + +#~ msgid "Color Space" +#~ msgstr "Spazio dei colori" + +#~ msgid "The color space used by the ICC profile" +#~ msgstr "Lo spazio dei colori usato dal profilo ICC" + +#~ msgid "Connection Space" +#~ msgstr "Spazio di connessione" + +#~ msgid "The connection space used by the ICC profile" +#~ msgstr "Lo spazio di connessione usato dal profilo ICC" + +#~ msgid "Device Class" +#~ msgstr "Classe di dispositivo" + +#~ msgid "The ICC profile device class" +#~ msgstr "La classe di dispositivo usata dal profilo ICC" + +#~ msgid "Rendering Intent" +#~ msgstr "Obiettivo di resa" + +#~ msgid "The ICC profile rendering intent" +#~ msgstr "L'obiettivo di resa del profilo ICC" + +#~ msgid "Profile Version" +#~ msgstr "Versione del profilo" + +#~ msgid "The ICC version used to record the profile" +#~ msgstr "La versione di ICC usata per scrivere il profilo" + +#~ msgid "CMM Flags" +#~ msgstr "Flag CMM" + +#~ msgid "The ICC profile color management flags" +#~ msgstr "I flag di gestione del colore del profilo ICC" + +#~ msgid "

          This area contains a CIE or chromaticity diagram. A CIE diagram is a representation of all the colors that a person with normal vision can see. This is represented by the colored sail-shaped area. In addition you will see a triangle that is superimposed on the diagram outlined in white. This triangle represents the outer boundaries of the color space of the device that is characterized by the inspected profile. This is called the device gamut.

          In addition there are black dots and yellow lines on the diagram. Each black dot represents one of the measurement points that were used to create this profile. The yellow line represents the amount that each point is corrected by the profile, and the direction of this correction." +#~ msgstr "

          Quest'area contiene un diagramma CIE o di cromaticità. Un diagramma CIE è una rappresentazione di tutti i colori che una persona di normale capacità visiva può vedere. È rappresentato dall'area colorata a forma di vela. Inoltre vedrai un triangolo delineato in bianco sovrapposto al diagramma. Questo triangolo rappresenta i confini esterni dello spazio dei colori del dispositivo caratterizzato dal profilo in questione, ed è detto gamut del dispositivo.

          Inoltre sul diagramma ci sono dei punti neri e delle linee gialle. Ogni punto nero rappresenta uno dei punti di misurazione usati per creare questo profilo. La linea gialla rappresenta la quantità di cui ogni punto viene corretto dal profilo e la direzione della correzione." + +#~ msgid "ICC Color Profile Information" +#~ msgstr "Informazioni sul profilo dei colori ICC" + +#~ msgid "Lab" +#~ msgstr "Lab" + +#~ msgid "Luv" +#~ msgstr "Luv" + +#~ msgid "GRAY" +#~ msgstr "GRAY" + +#~ msgid "HSV" +#~ msgstr "HSV" + +#~ msgid "HLS" +#~ msgstr "HLS" + +#~ msgid "CMYK" +#~ msgstr "CMYK" + +#~ msgid "CMY" +#~ msgstr "CMY" + +#~ msgid "Input device" +#~ msgstr "Dispositivo di input" + +#~ msgid "Display device" +#~ msgstr "Dispositivo di visualizzazione" + +#~ msgid "Output device" +#~ msgstr "Dispositivo di output" + +#~ msgid "Color space" +#~ msgstr "Spazio dei colori" + +#~ msgid "Link device" +#~ msgstr "Dispositivo di collegamento" + +#~ msgid "Abstract" +#~ msgstr "Astratto" + +#~ msgid "Named color" +#~ msgstr "Colore con nome" + +#~ msgid "Perceptual" +#~ msgstr "Percettuale" + +#~ msgid "Relative Colorimetric" +#~ msgstr "Colorimetrico relativo" + +#~ msgid "Saturation" +#~ msgstr "Saturazione" + +#~ msgid "Absolute Colorimetric" +#~ msgstr "Colorimetrico assoluto" + +#~ msgid "ICC color profile File to Save" +#~ msgstr "File di profilo dei colori ICC da salvare" + +#~ msgid "ICC Files (*.icc; *.icm)" +#~ msgstr "File ICC (*.icc, *.icm)" + +#~ msgid "" +#~ "Histogram\n" +#~ "calculation\n" +#~ "in progress..." +#~ msgstr "" +#~ "Calcolo\n" +#~ "dell'istogramma\n" +#~ "in corso..." + +#~ msgid "" +#~ "Histogram\n" +#~ "calculation\n" +#~ "failed." +#~ msgstr "" +#~ "Calcolo\n" +#~ "dell'istogramma\n" +#~ "non riuscito." + +#~ msgid "x:%1" +#~ msgstr "x:%1" + +#~ msgid "Std dev.:" +#~ msgstr "Deviazione standard:" + +#~ msgid "Percent:" +#~ msgstr "Percento:" + +#~ msgid "None options available" +#~ msgstr "Nessuna opzione disponibile" + +#~ msgid "Go to the first item" +#~ msgstr "Vai al primo elemento" + +#~ msgid "Go to the previous item" +#~ msgstr "Vai all'elemento precedente" + +#~ msgid "Go to the next item" +#~ msgstr "Vai all'elemento successivo" + +#~ msgid "Go to the last item" +#~ msgstr "Vai all'ultimo elemento" + +#~ msgid "" +#~ "x:%1\n" +#~ "y:%2" +#~ msgstr "" +#~ "x:%1\n" +#~ "y:%2" + +#~ msgid "

          Here you can see the original clip image which will be used for the preview computation.

          Click and drag the mouse cursor in the image to change the clip focus." +#~ msgstr "

          Qui puoi vedere l'immagine originale ritagliata che sarà usata per il calcolo dell'anteprima.

          Fai clic e trascina il cursore del mouse nell'immagine per cambiare la focalizzazione del ritaglio." + +#~ msgid "

          Press this button to stop magnifying the image" +#~ msgstr "

          Premi questo pulsante per smettere di ingrandire l'immagine" + +#~ msgid "

          Press this button to magnify image using 1.5:1 zoom factor." +#~ msgstr "

          Premi questo pulsante per ingrandire l'immagine usando un ingrandimento 1,5:1." + +#~ msgid "

          Press this button to magnify image using 2:1 zoom factor." +#~ msgstr "

          Premi questo pulsante per ingrandire l'immagine usando un ingrandimento 2:1." + +#~ msgid "

          Press this button to magnify image using 2.5:1 zoom factor." +#~ msgstr "

          Premi questo pulsante per ingrandire l'immagine usando un ingrandimento 2,5:1." + +#~ msgid "

          Press this button to magnify image using 3:1 zoom factor." +#~ msgstr "

          Premi questo pulsante per ingrandire l'immagine usando un ingrandimento 3:1." + +#~ msgid "

          If you enable this option, you will separate the preview area horizontally, displaying the original and target image at the same time. The target is duplicated from the original below the red dashed line." +#~ msgstr "

          Se abiliti questa opzione, separerai orizzontalmente l'area di anteprima, visualizzando contemporaneamente le immagini originale e risultante. La risultante viene duplicata dall'originale sotto la linea rossa tratteggiata." + +#~ msgid "

          If you enable this option, you will separate the preview area vertically, displaying the original and target image at the same time. The target is duplicated from the original to the right of the red dashed line." +#~ msgstr "

          Se abiliti questa opzione, separerai verticalmente l'area di anteprima, visualizzando contemporaneamente le immagini originale e risultante. La risultante viene duplicata dall'originale a destra della linea rossa tratteggiata." + +#~ msgid "

          If you enable this option, you will separate the preview area horizontally, displaying the original and target image at the same time. The original is above the red dashed line, the target below it." +#~ msgstr "

          Se abiliti questa opzione, separerai orizzontalmente l'area di anteprima, visualizzando contemporaneamente le immagini originale e risultante. L'originale è sopra la linea rossa tratteggiata, la risultante sotto." + +#~ msgid "

          If you enable this option, you will separate the preview area vertically, displaying the original and target image at the same time. The original is to the left of the red dashed line, the target to the right of it." +#~ msgstr "

          Se abiliti questa opzione, separerai verticalmente l'area di anteprima, visualizzando contemporaneamente le immagini originale e risultante. L'originale è a sinistra della linea rossa tratteggiata, l'immagine risultante a destra." + +#~ msgid "

          If you enable this option, the preview area will not be separated." +#~ msgstr "

          Se abiliti questa opzione, l'area di anteprima non sarà separata." + +#~ msgid "

          Here you can see the original image panel which can help you to select the clip preview.

          Click and drag the mouse cursor in the red rectangle to change the clip focus." +#~ msgstr "

          Qui puoi vedere il pannello dell'immagine originale che può aiutarti a selezionare l'anteprima del ritaglio.

          Fai clic e trascina il cursore del mouse nel rettangolo rosso per cambiare la focalizzazione del ritaglio." + +#~ msgid "Top left: (%1,%2)
          Bottom right: (%3,%4)" +#~ msgstr "In alto a sinistra: (%1, %2)
          In basso a destra: (%3, %4)" + +#~ msgid "Original" +#~ msgstr "Originale" + +#~ msgid "Target" +#~ msgstr "Risultante" + +#~ msgid "

          If you enable this option, you will see the original image." +#~ msgstr "

          Se abiliti questa opzione, vedrai l'immagine originale." + +#~ msgid "

          If you enable this option, the preview area will be separated vertically. A contiguous area of the image will be shown, with one half from the original image, the other half from the target image." +#~ msgstr "

          Se abiliti questa opzione, l'area di anteprima sarà separata verticalmente. Sarà mostrata un'area contigua dell'immagine, di cui metà sarà dall'immagine originale e l'altra metà dall'immagine risultante." + +#~ msgid "

          If you enable this option, the preview area will be separated horizontally. A contiguous area of the image will be shown, with one half from the original image, the other half from the target image." +#~ msgstr "

          Se abiliti questa opzione, l'area di anteprima sarà separata orizzontalmente. Sarà mostrata un'area contigua dell'immagine, di cui metà sarà dall'immagine originale e l'altra metà dall'immagine risultante." + +#~ msgid "

          If you enable this option, the preview area will be separated vertically. The same part of the original and the target image will be shown side by side." +#~ msgstr "

          Se abiliti questa opzione, l'area di anteprima sarà separata verticalmente. La stessa parte dell'immagine originale e risultante sarà mostrata fianco a fianco." + +#~ msgid "

          If you enable this option, the preview area will be separated horizontally. The same part of the original and the target image will be shown side by side." +#~ msgstr "

          Se abiliti questa opzione, l'area di anteprima sarà separata orizzontalmente. La stessa parte dell'immagine originale e risultante sarà mostrata fianco a fianco." + +#~ msgid "

          If you enable this option, you will see the target image." +#~ msgstr "

          Se abiliti questa opzione, vedrai l'immagine risultante." + +#~ msgid "

          If you enable this option, you will see the original image when the mouse is over image area, else the target image." +#~ msgstr "

          Se abiliti questa opzione, vedrai l'immagine originale quando il mouse è sull'area dell'immagine, altrimenti vedrai l'immagine risultante." + +#~ msgid "

          Set this option on to display pure black over-colored on preview. This will help you to avoid under-exposing the image." +#~ msgstr "

          Imposta questa opzione per visualizzare il nero puro con un colore sovrapposto nell'anteprima. Questo ti aiuterà a evitare di sottoesporre l'immagine." + +#~ msgid "

          Set this option on to display pure white over-colored on preview. This will help you to avoid over-exposing the image." +#~ msgstr "

          Imposta questa opzione per visualizzare il bianco puro con un colore sovrapposto nell'anteprima. Questo ti aiuterà a evitare di sovraesporre l'immagine." + +#~ msgid "(%1,%2) RGBA:%3,%4,%5,%6" +#~ msgstr "(%1,%2) RGBA:%3,%4,%5,%6" + +#~ msgid "Albums Library Folder" +#~ msgstr "Cartella libreria degli album" + +#~ msgid "digiKam will store the photo albums which you create in a common Albums Library folder. Please select which folder you would like digiKam to use as the common Albums Library folder below." +#~ msgstr "digiKam salverà gli album fotografici che crei in una cartella libreria degli album comune. Seleziona sotto quale cartella vuoi far usare a digiKam come libreria degli album comune." + +#~ msgid "Failed to auto-detect camera; please make sure it is connected properly and is turned on. Would you like to try again?" +#~ msgstr "Rilevamento automatico della macchina fotografica non riuscito. Assicurati che sia collegata correttamente e accesa. Vuoi riprovare?" + +#~ msgid "Rename File" +#~ msgstr "Rinomina file" + +#~ msgid "" +#~ "Failed to rename file\n" +#~ "%1" +#~ msgstr "" +#~ "Impossibile rinominare il file\n" +#~ "%1" + +#~ msgid "Rename Failed" +#~ msgstr "Rinomina non riuscita" + +#~ msgid "tomorrow" +#~ msgstr "domani" + +#~ msgid "today" +#~ msgstr "oggi" + +#~ msgid "yesterday" +#~ msgstr "ieri" + +#~ msgid "This shows the progress of the scan. During the scan, all files on disk are registered in a database. This is required for sorting on exif-date and speeds up the overall performance of digiKam." +#~ msgstr "Questo indica l'avanzamento della ricerca. Durante la ricerca, tutti i file del disco sono messi in una banca dati. Ciò è necessario per ordinare per data EXIF e accelerare le prestazioni complessive di digiKam." + +#~ msgid "Finding non-existing Albums" +#~ msgstr "Cerca album inesistenti" + +#~ msgid "Finding items not in the database or disk" +#~ msgstr "Ricerca di elementi non nella banca dati o sul disco" + +#~ msgid "Updating items without date" +#~ msgstr "Aggiornamento degli elementi senza data" + +#~ msgid "" +#~ "_n:

          There is an album in the database which does not appear to be on disk. This album should be removed from the database, however you may lose information because all images associated with this album will be removed from the database as well.

          digiKam cannot continue without removing the items from the database because all views depend on the information in the database. Do you want them to be removed from the database?\n" +#~ "

          There are %n albums in the database which do not appear to be on disk. These albums should be removed from the database, however you may lose information because all images associated with these albums will be removed from the database as well.

          digiKam cannot continue without removing the items from the database because all views depend on the information in the database. Do you want them to be removed from the database?" +#~ msgstr "" +#~ "

          Sembra che nella banca dati ci sia un album che non è presente sul disco. Questo album dovrebbe essere rimosso dalla banca dati, ma ciò vuol dire che tu potresti perdere dei dati, perché anche tutte le immagini relative a questo album saranno rimosse dalla banca dati.

          digiKam non può continuare senza rimuovere gli elementi dalla banca dati perché tutte le viste dipendono dalle informazioni contenute in essa. Vuoi rimuoverli dalla banca dati?\n" +#~ "

          Sembra che nella banca dati ci siano %n album che non risultano presenti sul disco. Questi album dovrebbero essere rimossi dalla banca dati, ma ciò vuol dire che potresti perdere dei dati, perché anche tutte le immagini relative a questi album saranno rimosse dalla banca dati.

          digiKam non può continuare senza rimuovere gli elementi dalla banca dati perché tutte le viste dipendono dalle informazioni contenute in essa. Vuoi rimuoverli dalla banca dati?" + +#~ msgid "Albums are Missing" +#~ msgstr "Mancano degli album" + +#~ msgid "Scanning items, please wait..." +#~ msgstr "Ricerca degli elementi, attendi..." + +#~ msgid "Updating items, please wait..." +#~ msgstr "Aggiornamento degli elementi, attendi..." + +#~ msgid "" +#~ "_n:

          There is an item in the database which does not appear to be on disk or is located in the root album of the path. This file should be removed from the database, however you may lose information.

          digiKam cannot continue without removing the item from the database because all views depend on the information in the database. Do you want it to be removed from the database?\n" +#~ "

          There are %n items in the database which do not appear to be on disk or are located in the root album of the path. These files should be removed from the database, however you may lose information.

          digiKam cannot continue without removing these items from the database because all views depend on the information in the database. Do you want them to be removed from the database?" +#~ msgstr "" +#~ "

          Sembra che nella banca dati ci sia un elemento che non è presente sul disco, o si trova nell'album radice del percorso. Questo file dovrebbe essere rimosso dalla banca dati, ma ciò vuol dire che tu potresti perdere dei dati.

          digiKam non può continuare senza rimuovere l'elemento dalla banca dati perché tutte le viste dipendono dalle informazioni contenute in essa. Vuoi rimuoverlo dalla banca dati?\n" +#~ "

          Sembra che nella banca dati ci siano %n elemento che non risultano essere sul disco, o si trovano nell'album radice del percorso. Questi file dovrebbero essere rimossi dalla banca dati, ma ciò vuol dire che tu potresti perdere dei dati.

          digiKam non può continuare senza rimuovere gli elementi dalla banca dati perché tutte le viste dipendono dalle informazioni contenute in essa. Vuoi rimuoverli dalla banca dati?" + +#~ msgid "Files are Missing" +#~ msgstr "Mancano i file" + +#~ msgid "Album Library Path" +#~ msgstr "Percorso alla libreria degli album" + +#~ msgid "" +#~ "_: This is a path name so you should include the slash in the translation\n" +#~ "/Pictures" +#~ msgstr "/Foto" + +#~ msgid "You must select a folder for digiKam to use as the Album Library folder." +#~ msgstr "Devi selezionare una cartella da far usare a digiKam come cartella di libreria degli album." + +#~ msgid "digiKam cannot use your home folder as the Album Library folder." +#~ msgstr "digiKam non può usare la tua cartella Home come libreria degli album." + +#~ msgid "The folder you selected does not exist:

          %1

          Would you like digiKam to make it for you now?" +#~ msgstr "La cartella che hai selezionato non esiste:

          %1

          Vuoi che digiKam te la crei adesso?
          " + +#~ msgid "Create Folder?" +#~ msgstr "Creare cartella?" + +#~ msgid "digiKam could not create the folder shown below. Please select a different location.

          %1

          " +#~ msgstr "digiKam non ha potuto creare la cartella indicata sotto. Seleziona un'altra posizione.

          %1

          " + +#~ msgid "Create Folder Failed" +#~ msgstr "Creazione della cartella non riuscita" + +#~ msgid "" +#~ "No write access for this path.\n" +#~ "Warning: the comments and tag features will not work." +#~ msgstr "" +#~ "Non c'è accesso in scrittura per questo percorso.\n" +#~ "Attenzione: le funzionalità di commenti e tag non funzioneranno." + +#~ msgid "" +#~ "Cannot restart digiKam automatically.\n" +#~ "Please restart digiKam manually." +#~ msgstr "" +#~ "Impossibile riavviare digiKam automaticamente.\n" +#~ "Riavvia digiKam manualmente." + +#~ msgid "My Albums" +#~ msgstr "Album" + +#~ msgid "Batch Processes" +#~ msgstr "Processi non interattivi" + +#~ msgid "New Album..." +#~ msgstr "Nuovo album..." + +#~ msgid "Rename..." +#~ msgstr "Rinomina..." + +#~ msgid "Edit Album Properties..." +#~ msgstr "Modifica le proprietà dell'album..." + +#~ msgid "Reset Album Icon" +#~ msgstr "Reimposta icona dell'album" + +#~ msgid "Move Album to Trash" +#~ msgstr "Cestina l'album" + +#~ msgid "Delete Album" +#~ msgstr "Elimina album" + +#~ msgid "" +#~ "The Albums Library has not been set correctly.\n" +#~ "Select \"Configure Digikam\" from the Settings menu and choose a folder to use for the Albums Library." +#~ msgstr "" +#~ "La libreria degli album non è stata impostata correttamente.\n" +#~ "Seleziona \"Configura Digikam\" dal menu impostazioni e scegli una cartella da usare come libreria degli album." + +#~ msgid "Rename Album (%1)" +#~ msgstr "Rinomina album (%1)" + +#~ msgid "Enter new album name:" +#~ msgstr "Inserisci il nuovo nome dell'album:" + +#~ msgid "Rename Item (%1)" +#~ msgstr "Rinomina elemento (%1)" + +#~ msgid "Set as Album Thumbnail" +#~ msgstr "Imposta come miniatura dell'album" + +#~ msgid "&Copy Here" +#~ msgstr "&Copia qui" + +#~ msgid "Uncategorized Albums" +#~ msgstr "Album non categorizzati" + +#~ msgid "created : %1" +#~ msgstr "creato: %1" + +#~ msgid "modified : %1" +#~ msgstr "modificato: %1" + +#~ msgid "New Album" +#~ msgstr "Nuovo album" + +#~ msgid "Edit Album" +#~ msgstr "Modifica l'album" + +#~ msgid "Create new Album in \"%1\"" +#~ msgstr "Crea nuovo album in \"%1\"" + +#~ msgid "\"%1\" Album Properties" +#~ msgstr "Proprietà dell'album \"%1\"" + +#~ msgid "&Title:" +#~ msgstr "&Titolo:" + +#~ msgid "Co&llection:" +#~ msgstr "Racco<a:" + +#~ msgid "Co&mments:" +#~ msgstr "Co&mmenti:" + +#~ msgid "Album &date:" +#~ msgstr "&Data dell'album:" + +#~ msgid "" +#~ "_: Button to select the date of the oldest image\n" +#~ "&Oldest" +#~ msgstr "Più &vecchia" + +#~ msgid "" +#~ "_: This is a button which calculates the average date\n" +#~ "&Average" +#~ msgstr "Medi&a" + +#~ msgid "" +#~ "_: Button to select the date of the newest image\n" +#~ "Newest" +#~ msgstr "Più recente" + +#~ msgid "Uncategorized Album" +#~ msgstr "Album non categorizzato" + +#~ msgid "Could not calculate an average." +#~ msgstr "Impossibile calcolare una media." + +#~ msgid "Could Not Calculate Average" +#~ msgstr "Impossibile calcolare media" + +#~ msgid "Family" +#~ msgstr "Famiglia" + +#~ msgid "Travel" +#~ msgstr "Viaggi" + +#~ msgid "Holidays" +#~ msgstr "Vacanze" + +#~ msgid "Friends" +#~ msgstr "Amici" + +#~ msgid "Nature" +#~ msgstr "Natura" + +#~ msgid "Party" +#~ msgstr "Feste" + +#~ msgid "Todo" +#~ msgstr "Da fare" + +#~ msgid "digiKam" +#~ msgstr "digiKam" + +#~ msgid "A Photo-Management Application for KDE" +#~ msgstr "Un'applicazione KDE per la gestione di fotografie" + +#~ msgid "" +#~ "_: %1: digiKam version; %2: help:// URL; %3: homepage URL; %4: prior digiKam version; %5: prior KDE version; %6: generated list of new features; %7: First-time user text (only shown on first start); %8: generated list of important changes; --- end of comment ---\n" +#~ "

          Welcome to digiKam %1

          digiKam is a photo-management program for the K Desktop Environment. It is designed to import and organize your digital photograhs on your computer.

          \n" +#~ "
          • digiKam has many powerful features which are described in the documentation
          • \n" +#~ "
          • The digiKam homepage offers information about new versions of digiKam
          \n" +#~ "%8\n" +#~ "

          Some of the new features in this release of digiKam include (compared to digiKam %4):

          \n" +#~ "
            \n" +#~ "%5
          \n" +#~ "%6\n" +#~ "

          We hope that you will enjoy digiKam.

          \n" +#~ "

          Thank you,

          \n" +#~ "

              The digiKam Team

          " +#~ msgstr "" +#~ "

          Benvenuto a digiKam %1

          digiKam è un programma di gestione delle fotografie per l'ambiente desktop KDE. È progettato per importare e organizzare le tue fotografie digitali sul computer.

          \n" +#~ "\n" +#~ "%8\n" +#~ "

          Alcune delle nuove funzionalità di questa versione di digiKam includono (rispetto a digiKam %4):

          \n" +#~ "
            \n" +#~ "%5
          \n" +#~ "%6\n" +#~ "

          Speriamo che digiKam ti piacerà.

          \n" +#~ "

          Grazie,

          \n" +#~ "

              La squadra di digiKam

          " + +#~ msgid "16 bits/color/pixels image support" +#~ msgstr "Supporto per immagini a 16 bit per colore per pixel" + +#~ msgid "Native JPEG-2000 support" +#~ msgstr "Supporto nativo per JPEG 2000" + +#~ msgid "Full color management support" +#~ msgstr "Supporto completo per la gestione del colore" + +#~ msgid "Makernote and IPTC metadata support" +#~ msgstr "Supporto per dati aggiuntivi Makernote e IPTC" + +#~ msgid "Geolocalization of photograph" +#~ msgstr "Geolocalizzazione delle fotografie" + +#~ msgid "Sidebar used everywhere" +#~ msgstr "Barra laterale usata dappertutto" + +#~ msgid "Advanced RAW pictures decoding settings" +#~ msgstr "Impostazioni avanzate di decodifica delle immagini grezze" + +#~ msgid "Fast preview of RAW pictures" +#~ msgstr "Anteprima veloce delle immagini grezze" + +#~ msgid "Metadata support for RAW pictures" +#~ msgstr "Supporto dei dati aggiuntivi per le immagini grezze" + +#~ msgid "New advanced options to download pictures from camera" +#~ msgstr "Nuove opzioni avanzate per scaricare le immagini dalla macchina fotografica" + +#~ msgid "New advanced options to manage picture Tags" +#~ msgstr "Nuove opzioni avanzate per gestire i tag delle immagini" + +#~ msgid "
        • %1
        • \n" +#~ msgstr "
        • %1
        • \n" + +#~ msgid "" +#~ "Cannot display preview for\n" +#~ "\"%1\"" +#~ msgstr "" +#~ "Impossibile visualizzare l'anteprima di\n" +#~ "\"%1\"" + +#~ msgid "Last Search" +#~ msgstr "Ultima ricerca" + +#~ msgid "My Searches" +#~ msgstr "Ricerche" + +#~ msgid "" +#~ "Another search with same name exists.\n" +#~ "Please enter a new name:" +#~ msgstr "" +#~ "Esiste un'altra ricerca con lo stesso nome.\n" +#~ "Inserisci un altro nome:" + +#~ msgid "Name exists" +#~ msgstr "Il nome esiste" + +#~ msgid "New Simple Search..." +#~ msgstr "Nuova ricerca semplice..." + +#~ msgid "New Advanced Search..." +#~ msgstr "Nuova ricerca avanzata..." + +#~ msgid "Edit Search..." +#~ msgstr "Modifica la ricerca..." + +#~ msgid "Edit as Advanced Search..." +#~ msgstr "Modifica come ricerca avanzata..." + +#~ msgid "Delete Search" +#~ msgstr "Elimina ricerca" + +#~ msgid "New Tag" +#~ msgstr "Nuovo tag" + +#~ msgid "Create New Tag in \"%1\"" +#~ msgstr "Crea nuovo tag in \"%1\"" + +#~ msgid "&Icon:" +#~ msgstr "&Icona:" + +#~ msgid "Edit Tag" +#~ msgstr "Modifica tag" + +#~ msgid "Tag \"%1\" Properties " +#~ msgstr "Proprietà del tag \"%1\"" + +#~ msgid "Reset" +#~ msgstr "Reimposta" + +#~ msgid "My Tags" +#~ msgstr "Tag" + +#~ msgid "" +#~ "_n: Tag '%1' has one subtag. Deleting this will also delete the subtag. Are you sure you want to continue?\n" +#~ "Tag '%1' has %n subtags. Deleting this will also delete the subtags. Are you sure you want to continue?" +#~ msgstr "" +#~ "Il tag '%1' ha un sottotag. Eliminarlo eliminerà anche il sottotag. Sei sicuro di voler continuare?\n" +#~ "Il tag '%1' ha %n sottotag. Eliminarlo eliminerà anche i sottotag. Sei sicuro di voler continuare?" + +#~ msgid "&Today" +#~ msgstr "O&ggi" + +#~ msgid "Y&esterday" +#~ msgstr "I&eri" + +#~ msgid "Last &Monday" +#~ msgstr "&Lunedì scorso" + +#~ msgid "Last &Friday" +#~ msgstr "&Venerdì scorso" + +#~ msgid "Last &Week" +#~ msgstr "&Settimana scorsa" + +#~ msgid "Last M&onth" +#~ msgstr "&Mese scorso" + +#~ msgid "No Date" +#~ msgstr "Senza data" + +#~ msgid "Automatically detect and open camera" +#~ msgstr "Rileva automaticamente e apri la macchina fotografica" + +#~ msgid "Open camera dialog at " +#~ msgstr "Apri finestra della macchina fotografica a " + +#~ msgid "Using Kipi library version %1" +#~ msgstr "Con la libreria Kipi, versione %1" + +#~ msgid "Using KExiv2 library version %1" +#~ msgstr "Con la libreria KExiv2, versione %1" + +#~ msgid "Using Exiv2 library version %1" +#~ msgstr "Con la libreria Exiv2, versione %1" + +#~ msgid "Using PNG library version %1" +#~ msgstr "Con la libreria PNG, versione %1" + +#~ msgid "Using Gphoto2 library version %1" +#~ msgstr "Con la libreria GPhoto2, versione %1" + +#~ msgid "(c) 2002-2007, digiKam developers team" +#~ msgstr "(c) 2002-2007, squadra degli sviluppatori di digiKam" + +#~ msgid "Main developer and coordinator" +#~ msgstr "Sviluppatore principale e coordinatore" + +#~ msgid "Developer" +#~ msgstr "Sviluppatore" + +#~ msgid "Bug reports and patches" +#~ msgstr "Segnalazioni bug e correzioni" + +#~ msgid "Webmaster" +#~ msgstr "Webmaster" + +#~ msgid "Danish translations" +#~ msgstr "Traduzione danese" + +#~ msgid "Italian translations" +#~ msgstr "Traduzione italiana" + +#~ msgid "German translations" +#~ msgstr "Traduzione tedesca" + +#~ msgid "German translations and beta tester" +#~ msgstr "Traduzione tedesca e beta tester" + +#~ msgid "Spanish translations" +#~ msgstr "Traduzione spagnola" + +#~ msgid "Czech translations" +#~ msgstr "Traduzione ceca" + +#~ msgid "Hungarian translations" +#~ msgstr "Traduzione ungherese" + +#~ msgid "Dutch translations" +#~ msgstr "Traduzione olandese" + +#~ msgid "Polish translations" +#~ msgstr "Traduzione polacca" + +#~ msgid "Beta tester" +#~ msgstr "Beta tester" + +#~ msgid "Plugin contributor and beta tester" +#~ msgstr "Contributi per i plugin e beta tester" + +#~ msgid "Feedback and patches. Handbook writer" +#~ msgstr "Suggerimenti e correzioni. Autore del manuale" + +#~ msgid "digiKam website banner and application icons" +#~ msgstr "Intestazione del sito Web di digiKam e icone dell'applicazione" + +#~ msgid "Various usability fixes and general application polishing" +#~ msgstr "Varie correzioni di usabilità e rifinitura generale dell'applicazione" + +#~ msgid "digiKam website, Feedback" +#~ msgstr "Sito Web di digiKam, suggerimenti" + +#~ msgid "Bug reports, feedback and icons" +#~ msgstr "Segnalazioni di errori, suggerimenti e icone" + +#~ msgid "" +#~ "Your locale has changed from the previous time this album was opened.\n" +#~ "Old Locale : %1, New Locale : %2\n" +#~ "This can cause unexpected problems. If you are sure that you want to continue, click on 'Yes' to work with this album. Otherwise, click on 'No' and correct your locale setting before restarting digiKam" +#~ msgstr "" +#~ "La tua localizzazione è cambiata dall'ultima volta che è stato aperto questo album.\n" +#~ "Vecchia localizzazione: %1, nuova localizzazione: %2\n" +#~ "Ciò può causare problemi inattesi. Se sei sicuro di voler continuare, fai clic su 'Sì' per lavorare con questo album. Altrimenti, fai clic su 'No' e correggi le tue impostazioni della localizzazione prima di riavviare digiKam" + +#~ msgid "Failed to update old Database to new Database format" +#~ msgstr "Impossibile aggiornare la vecchia banca dati al nuovo formato" + +#~ msgid "No parent found for album." +#~ msgstr "Nessun genitore trovato per l'album." + +#~ msgid "Album name cannot be empty." +#~ msgstr "Il nome dell'album non può essere vuoto." + +#~ msgid "Album name cannot contain '/'." +#~ msgstr "Il nome dell'album non può contenere '/'." + +#~ msgid "Another album with same name exists." +#~ msgstr "Esiste un altro album con questo nome." + +#~ msgid "Another file or folder with same name exists" +#~ msgstr "Esiste un altro file o cartella con lo stesso nome" + +#~ msgid "Access denied to path" +#~ msgstr "Accesso negato al percorso" + +#~ msgid "Disk full" +#~ msgstr "Disco pieno" + +#~ msgid "Unknown error" +#~ msgstr "Errore sconosciuto" + +#~ msgid "Failed to add album to database" +#~ msgstr "Impossibile aggiungere l'album alla banca dati" + +#~ msgid "No such album" +#~ msgstr "Nessun album" + +#~ msgid "Cannot rename root album" +#~ msgstr "Impossibile rinominare l'album radice" + +#~ msgid "Album name cannot contain '/'" +#~ msgstr "Il nome dell'album non può contenere '/'" + +#~ msgid "" +#~ "Another Album with same name exists\n" +#~ "Please choose another name" +#~ msgstr "" +#~ "Esiste un altro album con lo stesso nome\n" +#~ "Scegli un altro nome" + +#~ msgid "Failed to rename Album" +#~ msgstr "Impossibile rinominare l'album" + +#~ msgid "Cannot edit root album" +#~ msgstr "Impossibile modificare l'album radice" + +#~ msgid "No parent found for tag" +#~ msgstr "Nessun genitore trovato per il tag" + +#~ msgid "Tag name cannot be empty" +#~ msgstr "Il nome del tag non può essere vuoto" + +#~ msgid "Tag name cannot contain '/'" +#~ msgstr "Il nome del tag non può contenere '/'" + +#~ msgid "Another tag with same name exists" +#~ msgstr "Esiste un altro tag con lo stesso nome" + +#~ msgid "Failed to add tag to database" +#~ msgstr "Impossibile aggiungere tag alla banca dati" + +#~ msgid "Cannot delete Root Tag" +#~ msgstr "Impossibile eliminare il tag radice" + +#~ msgid "Cannot edit root tag" +#~ msgstr "Impossibile modificare il tag radice" + +#~ msgid "" +#~ "Another tag with same name exists\n" +#~ "Please choose another name" +#~ msgstr "" +#~ "Esiste un altro tag con lo stesso nome\n" +#~ "Scegli un altro nome" + +#~ msgid "Cannot move root tag" +#~ msgstr "Impossibile spostare il tag radice" + +#~ msgid "No such tag" +#~ msgstr "Nessun tag" + +#~ msgid "unavailable" +#~ msgstr "non disponibile" + +#~ msgid "File Properties" +#~ msgstr "Proprietà del file" + +#~ msgid "Modified:" +#~ msgstr "Modificato:" + +#~ msgid "Dimensions:" +#~ msgstr "Dimensioni:" + +#~ msgid "Photograph Properties" +#~ msgstr "Proprietà della fotografia" + +#~ msgid "Make/Model:" +#~ msgstr "Produttore/modello:" + +#~ msgid "Created:" +#~ msgstr "Creata il:" + +#~ msgid "Aperture/Focal:" +#~ msgstr "Diaframma/fuoco:" + +#~ msgid "Exposure/Sensitivity:" +#~ msgstr "Esposizione/sensibilità:" + +#~ msgid "Mode/Program:" +#~ msgstr "Modalità/programma:" + +#~ msgid "Flash:" +#~ msgstr "Flash:" + +#~ msgid "digiKam Properties" +#~ msgstr "Proprietà di digiKam" + +#~ msgid "Album:" +#~ msgstr "Album:" + +#~ msgid "Tags:" +#~ msgstr "Tag:" + +#~ msgid "View..." +#~ msgstr "Visualizza..." + +#~ msgid "Edit..." +#~ msgstr "Modifica..." + +#~ msgid "Open With" +#~ msgstr "Apri con" + +#~ msgid "" +#~ "_n: Move to Trash\n" +#~ "Move %n Files to Trash" +#~ msgstr "" +#~ "Cestina\n" +#~ "Cestina %n file" + +#~ msgid "Assign Tag" +#~ msgstr "Assegna tag" + +#~ msgid "Remove Tag" +#~ msgstr "Rimuovi tag" + +#~ msgid "Assign Rating" +#~ msgstr "Assegna voto" + +#~ msgid "Enter new name (without extension):" +#~ msgstr "Inserisci il nuovo nome (senza estensione):" + +#~ msgid "Album \"%1\"" +#~ msgstr "Album \"%1\"" + +#~ msgid "Assign '%1' to &All Items" +#~ msgstr "&Assegna '%1' a tutti gli elementi" + +#~ msgid "Assign '%1' to &Selected Items" +#~ msgstr "Assegna '%1' agli elementi &selezionati" + +#~ msgid "Assign '%1' to &Dropped Item" +#~ msgstr "Assegna '%1' agli elementi s&cartati" + +#~ msgid "Assign Tags to &All Items" +#~ msgstr "&Assegna i tag a tutti gli elementi" + +#~ msgid "Assign Tags to &Selected Items" +#~ msgstr "Assegna i tag agli elementi &selezionati" + +#~ msgid "Assign Tags to &Dropped Item" +#~ msgstr "Assegna i tag agli elementi s&cartati" + +#~ msgid "Assign tags to pictures. Please wait..." +#~ msgstr "Assegnazione dei tag alle immagini. Attendi..." + +#~ msgid "Fix Exif Orientation tag on pictures. Please wait..." +#~ msgstr "Correzione del tag di orientamento Exif nelle immagini. Attendi..." + +#~ msgid "Failed to correct Exif orientation for file %1." +#~ msgstr "Impossibile correggere l'orientazione Exif per il file %1." + +#~ msgid "Remove tag from pictures. Please wait..." +#~ msgstr "Rimozione del tag dalle immagini. Attendi..." + +#~ msgid "Assign rating to pictures. Please wait..." +#~ msgstr "Assegnazione del voto alle immagini. Attendi..." + +#~ msgid "Not Tagged" +#~ msgstr "Senza tag" + +#~ msgid "Tag Filters" +#~ msgstr "Filtri dei tag" + +#~ msgid "Or Between Tags" +#~ msgstr "O tra i tag" + +#~ msgid "And Between Tags" +#~ msgstr "E tra i tag" + +#~ msgid "Matching Condition" +#~ msgstr "Condizione di corrispondenza" + +#~ msgid "Tag: %1" +#~ msgstr "Tag: %1" + +#~ msgid "Target URL %1 is not valid." +#~ msgstr "L'URL di destinazione %1 non è valida." + +#~ msgid "Target album is not in the albums library." +#~ msgstr "L'album di destinazione non è nella libreria degli album." + +#~ msgid "Forward" +#~ msgstr "Avanti" + +#~ msgid "Back to Album" +#~ msgstr "Torna all'album" + +#~ msgid "Move to Trash" +#~ msgstr "Cestina" + +#~ msgid "My Dates" +#~ msgstr "Date" + +#~ msgid "Advanced Search" +#~ msgstr "Ricerca avanzata" + +#~ msgid "

          Here you can see the items found in album library using the current search settings." +#~ msgstr "

          Qui puoi vedere gli elementi trovati nella libreria degli album usando le impostazioni di ricerca attuali." + +#~ msgid "Search Rules" +#~ msgstr "Regole di ricerca" + +#~ msgid "

          Here you can see the search rules list used to process items searching in album library." +#~ msgstr "

          Qui puoi vedere l'elenco delle regole di ricerca usate per elaborare la ricerca degli elementi nella libreria degli album." + +#~ msgid "Add/Delete Option" +#~ msgstr "Aggiungi/elimina opzione" + +#~ msgid "

          You can control here the search rules list contents, to adding/removing an option." +#~ msgstr "

          Qui puoi controllare i contenuti dell'elenco delle regole di ricerca, per aggiungere o rimuovere un'opzione." + +#~ msgid "As Well As" +#~ msgstr "Così come" + +#~ msgid "Or" +#~ msgstr "O" + +#~ msgid "&Add" +#~ msgstr "&Aggiungi" + +#~ msgid "&Del" +#~ msgstr "&Elimina" + +#~ msgid "Group/Ungroup Options" +#~ msgstr "Raggruppa/separa opzioni" + +#~ msgid "

          You can group together or ungroup any search options from the Search Rules list." +#~ msgstr "

          Puoi raggruppare o separare qualsiasi opzione di ricerca dell'elenco delle regole di ricerca." + +#~ msgid "&Group" +#~ msgstr "Ra&ggruppa" + +#~ msgid "&Ungroup" +#~ msgstr "Se¶" + +#~ msgid "&Save search as:" +#~ msgstr "&Salva questa ricerca con nome:" + +#~ msgid "

          Enter here the name used to save the current search in \"My Searches\" view" +#~ msgstr "

          Inserisci qui il nome da usare per salvare la ricerca attuale nella vista \"Ricerche\"" + +#~ msgid "Checking ICC repository" +#~ msgstr "Controllo del deposito ICC" + +#~ msgid "Checking dcraw version" +#~ msgstr "Controllo della versione di dcraw" + +#~ msgid "Reading database" +#~ msgstr "Lettura della banca dati" + +#~ msgid "

          ICC profiles path seems to be invalid.

          If you want to set it now, select \"Yes\", otherwise select \"No\". In this case, \"Color Management\" feature will be disabled until you solve this issue

          " +#~ msgstr "

          Il percorso dei profili ICC non sembra essere valido.

          Se vuoi impostarlo ora, seleziona \"Sì\", altrimenti seleziona \"No\". In questo caso, la funzionalità \"Gestione del colore\" sarà disabilitata fino a quando non risolverai questo problema.

          " + +#~ msgid "Auto-detect camera" +#~ msgstr "Rileva macchina fotografica automaticamente" + +#~ msgid "Opening Download Dialog" +#~ msgstr "Apertura della finestra di scaricamento" + +#~ msgid "Initializing Main View" +#~ msgstr "Inizializzazione della vista principale" + +#~ msgid "Exit Preview" +#~ msgstr "Esci dall'anteprima" + +#~ msgid "Exit out of the preview mode" +#~ msgstr "Esci dalla modalità di anteprima" + +#~ msgid "Next Image" +#~ msgstr "Immagine successiva" + +#~ msgid "Previous Image" +#~ msgstr "Immagine precedente" + +#~ msgid "First Image" +#~ msgstr "Prima immagine" + +#~ msgid "Last Image" +#~ msgstr "Ultima immagine" + +#~ msgid "Copy Album Items Selection" +#~ msgstr "Copia selezione di elementi di album" + +#~ msgid "Paste Album Items Selection" +#~ msgstr "Incolla selezione di elementi di album" + +#~ msgid "&Camera" +#~ msgstr "Ma&cchina fotografica" + +#~ msgid "&Themes" +#~ msgstr "&Temi" + +#~ msgid "&Back" +#~ msgstr "&Indietro" + +#~ msgid "&New Album..." +#~ msgstr "&Nuovo album..." + +#~ msgid "This option creates a new empty Album in the database." +#~ msgstr "Questa opzione crea un nuovo album vuoto nella banca dati." + +#~ msgid "&Sort Albums" +#~ msgstr "&Ordina album" + +#~ msgid "By Folder" +#~ msgstr "Per cartella" + +#~ msgid "By Collection" +#~ msgstr "Per raccolta" + +#~ msgid "By Date" +#~ msgstr "Per data" + +#~ msgid "Add Images..." +#~ msgstr "Aggiungi immagini..." + +#~ msgid "This option adds new items to the current Album." +#~ msgstr "Questa opzione aggiunge nuovi elementi nell'album corrente." + +#~ msgid "Import Folders..." +#~ msgstr "Importa cartelle..." + +#~ msgid "This option allows you to set the Album Properties information about the Collection." +#~ msgstr "Questa opzione ti permette di impostare le informazioni delle proprietà degli album della raccolta." + +#~ msgid "Refresh" +#~ msgstr "Aggiorna" + +#~ msgid "This option refresh all album content." +#~ msgstr "Questa opzione aggiorna tutto il contenuto dell'album." + +#~ msgid "Sync Pictures Metadata" +#~ msgstr "Sincronizza i dati aggiuntivi delle immagini" + +#~ msgid "This option sync pictures metadata from current album with digiKam database contents." +#~ msgstr "Questa opzione sincronizza i dati aggiuntivi dell'album attuale con i contenuti della banca dati di digiKam." + +#~ msgid "Open in Konqueror" +#~ msgstr "Apri in Konqueror" + +#~ msgid "New &Tag..." +#~ msgstr "Nuovo &tag..." + +#~ msgid "This option allows you to open the editor with the current selected item." +#~ msgstr "Questa opzione ti permette di aprire l'editor con l'elemento attualmente selezionato." + +#~ msgid "This option allows you to rename the filename of the current selected item" +#~ msgstr "Questa opzione ti permette di rinominare il nome del file dell'elemento attualmente selezionato." + +#~ msgid "Delete Permanently" +#~ msgstr "Elimina permanentemente" + +#~ msgid "Delete Permanently without Confirmation" +#~ msgstr "Elimina permanentemente senza chiedere conferma" + +#~ msgid "Move to Trash without Confirmation" +#~ msgstr "Cestina senza chiedere conferma" + +#~ msgid "&Sort Images" +#~ msgstr "&Ordina immagini" + +#~ msgid "By Name" +#~ msgstr "Per nome" + +#~ msgid "By Path" +#~ msgstr "Per percorso" + +#~ msgid "By File Size" +#~ msgstr "Per dimensione del file" + +#~ msgid "By Rating" +#~ msgstr "Per voto" + +#~ msgid "Correct Exif Orientation Tag" +#~ msgstr "Correggi il tag di orientazione EXIF" + +#~ msgid "Normal" +#~ msgstr "Normale" + +#~ msgid "Flipped Horizontally" +#~ msgstr "Ribaltato orizzontalmente" + +#~ msgid "Rotated 180 Degrees" +#~ msgstr "Ruotato di 180 gradi" + +#~ msgid "Flipped Vertically" +#~ msgstr "Ribaltato verticalmente" + +#~ msgid "Rotated 90 Degrees / Horiz. Flipped" +#~ msgstr "Ruotato di 90 gradi / ribaltato orizzontalmente" + +#~ msgid "Rotated 90 Degrees" +#~ msgstr "Ruotato di 90 gradi" + +#~ msgid "Rotated 90 Degrees / Vert. Flipped" +#~ msgstr "Ruotato di 90 gradi / ribaltato verticalmente" + +#~ msgid "Rotated 270 Degrees" +#~ msgstr "Ruotato di 270 gradi" + +#~ msgid "Select None" +#~ msgstr "Deseleziona tutto" + +#~ msgid "Increase Thumbnail Size" +#~ msgstr "Ingrandisci le miniature" + +#~ msgid "This option allows you to increase the Album thumbnails size." +#~ msgstr "Questa opzione ti permette di aumentare la dimensione delle miniature dell'album." + +#~ msgid "Decrease Thumbnail Size" +#~ msgstr "Rimpicciolisci le miniature" + +#~ msgid "This option allows you to decrease the Album thumbnails size." +#~ msgstr "Questa opzione ti permette di ridurre la dimensione delle miniature dell'album." + +#~ msgid "Full Screen Mode" +#~ msgstr "Modalità a tutto schermo" + +#~ msgid "This option allows you to toggle the main window in full screen mode." +#~ msgstr "Questa opzione ti permette di attivare o disattivare la modalità a schermo intero della finestra principale." + +#~ msgid "Slide Show" +#~ msgstr "Presentazione" + +#~ msgid "All" +#~ msgstr "Tutto" + +#~ msgid "Selection" +#~ msgstr "Selezione" + +#~ msgid "Recursive" +#~ msgstr "Ricorsiva" + +#~ msgid "Kipi Plugins Handbook" +#~ msgstr "Manuali dei plugin di Kipi" + +#~ msgid "Donate Money..." +#~ msgstr "Fai una donazione..." + +#~ msgid "Assign Rating \"No Star\"" +#~ msgstr "Assegna voto \"nessuna stella\"" + +#~ msgid "Assign Rating \"One Star\"" +#~ msgstr "Assegna voto \"una stella\"" + +#~ msgid "Assign Rating \"Two Stars\"" +#~ msgstr "Assegna voto \"due stelle\"" + +#~ msgid "Assign Rating \"Three Stars\"" +#~ msgstr "Assegna voto \"tre stelle\"" + +#~ msgid "Assign Rating \"Four Stars\"" +#~ msgstr "Assegna voto \"quattro stelle\"" + +#~ msgid "Assign Rating \"Five Stars\"" +#~ msgstr "Assegna voto \"cinque stelle\"" + +#~ msgid "Quick Search..." +#~ msgstr "Ricerca rapida..." + +#~ msgid "Advanced Search..." +#~ msgstr "Ricerca avanzata..." + +#~ msgid "Scan for New Images" +#~ msgstr "Cerca nuove immagini" + +#~ msgid "Rebuild all Thumbnails..." +#~ msgstr "Ricalcola tutte le miniature..." + +#~ msgid "Sync all Pictures Metadata..." +#~ msgstr "Sincronizza i dati aggiuntivi di tutte le immagini..." + +#~ msgid "Loading cameras" +#~ msgstr "Caricamento delle macchine fotografiche" + +#~ msgid "No item selected" +#~ msgstr "Nessun elemento selezionato" + +#~ msgid "%1 items selected" +#~ msgstr "%1 elementi selezionati" + +#~ msgid "Browse %1" +#~ msgstr "Sfoglia %1" + +#~ msgid "Images found in %1" +#~ msgstr "Immagini trovate in %1" + +#~ msgid "No Media Devices Found" +#~ msgstr "Nessun supporto trovato" + +#~ msgid "General" +#~ msgstr "Generale" + +#~ msgid "Loading: %1" +#~ msgstr "Caricamento: %1" + +#~ msgid "" +#~ "_n: 1 Kipi Plugin Loaded\n" +#~ "%n Kipi Plugins Loaded" +#~ msgstr "" +#~ "Caricato un plugin di Kipi\n" +#~ "Caricati %n plugin di Kipi" + +#~ msgid "Media Browse" +#~ msgstr "Sfoglia supporti" + +#~ msgid "Add Camera..." +#~ msgstr "Aggiungi macchina fotografica..." + +#~ msgid "Loading themes" +#~ msgstr "Caricamento temi" + +#~ msgid "" +#~ "Rebuild all albums items thumbnails can take a while.\n" +#~ "Do you want to continue?" +#~ msgstr "" +#~ "La ricostruzione di tutte le miniature degli elementi degli album può metterci un po' di tempo.\n" +#~ "Vuoi continuare?" + +#~ msgid "" +#~ "Sync all pictures metadata from all albums with digiKam database can take a while.\n" +#~ "Do you want to continue?" +#~ msgstr "" +#~ "La sincronizzazione dei dati aggiuntivi delle immagini di tutti gli album con la banca dati di digiKam può metterci un po' di tempo.\n" +#~ "Vuoi continuare?" + +#~ msgid "" +#~ "_n: %1 %2 - 1 Item\n" +#~ "%1 %2 - %n Items" +#~ msgstr "" +#~ "%1 %2 - 1 elemento\n" +#~ "%1 %2 - %n elementi" + +#~ msgid "Album" +#~ msgstr "Album" + +#~ msgid "Album Name" +#~ msgstr "Nome dell'album" + +#~ msgid "Album Caption" +#~ msgstr "Didascalia dell'album" + +#~ msgid "Album Collection" +#~ msgstr "Raccolta di album" + +#~ msgid "Tag" +#~ msgstr "Tag" + +#~ msgid "Tag Name" +#~ msgstr "Nome del tag" + +#~ msgid "Image Name" +#~ msgstr "Nome dell'immagine" + +#~ msgid "Image Date" +#~ msgstr "Data dell'immagine" + +#~ msgid "Image Caption" +#~ msgstr "Didascalia dell'immagine" + +#~ msgid "Keyword" +#~ msgstr "Parola chiave" + +#~ msgid "Rating" +#~ msgstr "Voto" + +#~ msgid "Contains" +#~ msgstr "Contiene" + +#~ msgid "Does Not Contain" +#~ msgstr "Non contiene" + +#~ msgid "Equals" +#~ msgstr "Uguale a" + +#~ msgid "Does Not Equal" +#~ msgstr "Diverso da" + +#~ msgid "After" +#~ msgstr "Dopo" + +#~ msgid "Before" +#~ msgstr "Prima di" + +#~ msgid "At least" +#~ msgstr "Almeno" + +#~ msgid "At most" +#~ msgstr "Al massimo" + +#~ msgid "As well as" +#~ msgstr "Così come" + +#~ msgid "No media player available..." +#~ msgstr "Nessun riproduttore multimediale disponibile..." + +#~ msgid "Quick Search" +#~ msgstr "Ricerca rapida" + +#~ msgid "

          Enter your search arguments to find items in the albums library" +#~ msgstr "

          Inserisci qui i tuoi argomenti di ricerca per trovare elementi nella libreria degli album" + +#~ msgid "

          Here you can see the items found in albums library using the current search arguments" +#~ msgstr "

          Qui puoi vedere gli elementi trovati nella libreria degli album usando gli argomenti di ricerca attuali" + +#~ msgid "Save search as:" +#~ msgstr "Salva la ricerca con nome:" + +#~ msgid "

          Enter the name used to save the current search in the \"My Searches\" view" +#~ msgstr "

          Inserisci il nome da usare per salvare la ricerca attuale nella vista \"Ricerche\"" + +#~ msgid "Albums" +#~ msgstr "Album" + +#~ msgid "Dates" +#~ msgstr "Date" + +#~ msgid "Searches" +#~ msgstr "Ricerche" + +#~ msgid "Select Image to Add" +#~ msgstr "Seleziona immagine da aggiungere" + +#~ msgid "Prepare data for slideshow from %1 pictures. Please wait..." +#~ msgstr "Preparazione dei dati per la presentazione di %1 immagini. Attendi..." + +#~ msgid "Add New Tag..." +#~ msgstr "Aggiungi nuovo tag..." + +#~ msgid "Interface Options" +#~ msgstr "Opzioni dell'interfaccia" + +#~ msgid "&Background color:" +#~ msgstr "Colore di s&fondo:" + +#~ msgid "

          Select the background color to use for the image editor area." +#~ msgstr "

          Seleziona il colore di sfondo da usare per l'area dell'editor di immagini." + +#~ msgid "H&ide toolbar in fullscreen mode" +#~ msgstr "Nascond&i la barra degli strumenti nella modalità a tutto schermo" + +#~ msgid "Hide &thumbbar in fullscreen mode" +#~ msgstr "Nascondi la barra delle minia&ture nella modalità a tutto schermo" + +#~ msgid "Use &horizontal thumbbar (need to restart showFoto)" +#~ msgstr "Usa la barra delle miniature &orizzontale (è necessario riavviare showFoto)" + +#~ msgid "

          If this option is enabled, thumbnails bar will be displayed horizontally behind image area. You need to restart showFoto for this option take effect.

          " +#~ msgstr "

          Se questa opzione è attiva, la barra delle miniature sarà visualizzata orizzontalmente dietro l'area delle immagini. Devi riavviare showFoto per rendere attiva questa opzione.

          " + +#~ msgid "&Deleting items should move them to trash" +#~ msgstr "Eliminare gli elementi &dovrebbe spostarli nel cestino" + +#~ msgid "&Show splash screen at startup" +#~ msgstr "Visualizza la &schermata d'avvio" + +#~ msgid "Exposure Indicators" +#~ msgstr "Indicatori di esposizione" + +#~ msgid "&Under-exposure color:" +#~ msgstr "Colore di &sottoesposizione:" + +#~ msgid "

          Customize the color used in image editor to identify the under-exposed pixels." +#~ msgstr "

          Configura il colore usato nell'editor di immagini per identificare i pixel sottoesposti." + +#~ msgid "&Over-exposure color:" +#~ msgstr "Colore di s&ovraesposizione:" + +#~ msgid "

          Customize the color used in image editor to identify the over-exposed pixels." +#~ msgstr "

          Configura il colore usato nell'editor di immagini per identificare i pixel sovraesposti." + +#~ msgid "EXIF Actions" +#~ msgstr "Azioni EXIF" + +#~ msgid "Show images/thumbs &rotated according to orientation tag" +#~ msgstr "Mostra immagini e miniature &ruotate a seconda delle informazioni EXIF" + +#~ msgid "Set orientation tag to normal after rotate/flip" +#~ msgstr "Imposta il tag di orientazione come normale dopo una rotazione o un ribaltamento" + +#~ msgid "General Settings" +#~ msgstr "Impostazioni generali" + +#~ msgid "RAW decoding" +#~ msgstr "Decodifica dei file grezzi" + +#~ msgid "RAW Files Decoding Settings" +#~ msgstr "Impostazioni di decodifica dei file grezzi" + +#~ msgid "ICC Profiles" +#~ msgstr "Profili ICC" + +#~ msgid "Color Management Profiles" +#~ msgstr "Profili di gestione del colore" + +#~ msgid "Save Images" +#~ msgstr "Salva immagini" + +#~ msgid "Image Editor Save Images Files Settings" +#~ msgstr "Impostazioni dei file di salvataggio delle immagini dell'editor" + +#~ msgid "Image Plugins" +#~ msgstr "Plugin per le immagini" + +#~ msgid "Image Plugins Settings" +#~ msgstr "Impostazioni dei plugin per le immagini" + +#~ msgid "Slide Show Settings" +#~ msgstr "Impostazioni di presentazione" + +#~ msgid "File(s) to open" +#~ msgstr "File da aprire" + +#~ msgid "KDE Photo Viewer and Editor" +#~ msgstr "Visualizzatore ed editor di foto per KDE" + +#~ msgid "showFoto" +#~ msgstr "showFoto" + +#~ msgid "(c) 2004-2007, digiKam developers team" +#~ msgstr "(c) 2004-2007, Squadra degli sviluppatori di digiKam" + +#~ msgid "Brightness/Contrast/Gamma" +#~ msgstr "Luminosità/contrasto/gamma" + +#~ msgid "Increase Gamma" +#~ msgstr "Aumenta gamma" + +#~ msgid "Decrease Gamma" +#~ msgstr "Riduci gamma" + +#~ msgid "Increase Brightness" +#~ msgstr "Aumenta luminosità" + +#~ msgid "Decrease Brightness" +#~ msgstr "Riduci luminosità" + +#~ msgid "Increase Contrast" +#~ msgstr "Aumenta contrasto" + +#~ msgid "Decrease Contrast" +#~ msgstr "Riduci contrasto" + +#~ msgid "

          The ICC profile path seems to be invalid.

          If you want to set it now, select \"Yes\", otherwise select \"No\". In this case, \"Color Management\" feature will be disabled until you solve this issue

          " +#~ msgstr "

          Il percorso dei profili ICC non sembra essere valido.

          Se vuoi impostarlo ora, seleziona \"Sì\", altrimenti seleziona \"No\". In questo caso, la funzionalità \"Gestione del colore\" sarà disabilitata fino a quando non risolverai questo problema.

          " + +#~ msgid "Open folder" +#~ msgstr "Apri cartella" + +#~ msgid "Show Thumbnails" +#~ msgstr "Mostra le miniature" + +#~ msgid "Delete File" +#~ msgstr "Elimina file" + +#~ msgid "" +#~ "\n" +#~ "%1|Camera RAW files" +#~ msgstr "" +#~ "\n" +#~ "%1|File grezzi della macchina fotografica" + +#~ msgid "Open Images" +#~ msgstr "Apri immagini" + +#~ msgid " (%2 of %3)" +#~ msgstr " (%2 di %3)" + +#~ msgid "There are no pictures in this folder." +#~ msgstr "Non ci sono immagini in questa cartella." + +#~ msgid "Open Images From Folder" +#~ msgstr "Apri immagini da cartella" + +#~ msgid "" +#~ "About to delete file \"%1\"\n" +#~ "Are you sure?" +#~ msgstr "" +#~ "Stai per cancellare il file \"%1\"\n" +#~ "Sei sicuro?" + +#~ msgid "Prepare slideshow. Please wait..." +#~ msgstr "Preparazione della presentazione. Attendi..." + +#~ msgid "" +#~ "_: NAME OF TRANSLATORS\n" +#~ "Your names" +#~ msgstr "Federico Zenith,Stefano Rivoir" + +#~ msgid "" +#~ "_: EMAIL OF TRANSLATORS\n" +#~ "Your emails" +#~ msgstr "zenith@chemeng.ntnu.no" + +#~ msgid "No or invalid size specified" +#~ msgstr "Non è stata specificata nessuna dimensione o un dimensione non valida" + +#~ msgid "File does not exist" +#~ msgstr "Il file non esiste" + +#~ msgid "Cannot create thumbnail for %1" +#~ msgstr "Impossibile creare miniatura per %1" + +#~ msgid "Source album %1 not found in database" +#~ msgstr "L'album sorgente %1 non è stato trovato nella banca dati" + +#~ msgid "" +#~ "Could not change permissions for\n" +#~ "%1" +#~ msgstr "" +#~ "Impossibile cambiare i permessi per\n" +#~ "%1" + +#~ msgid "" +#~ "Source and Destination have different Album Library Paths.\n" +#~ "Source: %1\n" +#~ "Destination: %2" +#~ msgstr "" +#~ "La sorgente e la destinazione hanno diversi percorsi di libreria degli album.\n" +#~ "Sorgente: %1\n" +#~ "Destinazione: %2" + +#~ msgid "Destination album %1 not found in database" +#~ msgstr "L'album di destinazione %1 non è stato trovato nella banca dati" + +#~ msgid "This file/folder is on a different filesystem through symlinks. Moving/Renaming files between them is currently unsupported " +#~ msgstr "Questo file o cartella è su un filesystem diverso attraverso collegamenti simbolici. Lo spostamento o la rinomina dei file su altri filesystem non sono attualmente supportati" + +#~ msgid "Source image %1 not found in database" +#~ msgstr "L'immagine sorgente %1 non è stata trovata nella banca dati" + +#~ msgid "Icon Placeholder, not in GUI" +#~ msgstr "Segnaposto per le icone, non nell'interfaccia" + +#~ msgid "Deletion method placeholder, never shown to user." +#~ msgstr "Segnaposto per il metodo di eliminazione, mai mostrato all'utente." + +#~ msgid "List of files that are about to be deleted." +#~ msgstr "Elenco di file che stanno per essere eliminati." + +#~ msgid "This is the list of items that are about to be deleted." +#~ msgstr "Questo è l'elenco di elementi che stanno per essere eliminati." + +#~ msgid "Placeholder for number of files, not in GUI" +#~ msgstr "Segnaposto per il numero di file, non nell'interfaccia" + +#~ msgid "&Delete files instead of moving them to the trash" +#~ msgstr "&Elimina i file invece di cestinarli" + +#~ msgid "If checked, files will be permanently removed instead of being placed in the Trash Bin" +#~ msgstr "Se segnato, i file saranno rimossi permanentemente invece di venir cestinati" + +#~ msgid "" +#~ "

          If this box is checked, files will be permanently removed instead of being placed in the Trash Bin.

          \n" +#~ " \n" +#~ "

          Use this option with caution: Most filesystems are unable to reliably undelete deleted files.

          " +#~ msgstr "" +#~ "

          Se questa casella è segnata, i file saranno rimossi permanentemente invece di venir cestinati.

          \n" +#~ " \n" +#~ "

          Usa questa opzione con cautela: la maggior parte dei filesystem non sono in grado di recuperare i file eliminati.

          " + +#~ msgid "Do not &ask again" +#~ msgstr "&Non chiedermelo più" + +#~ msgid "If checked, this dialog will no longer be shown and files will be directly moved to the Trash Bin" +#~ msgstr "Se segnato, questa finestra non sarà più mostrata e i file saranno cestinati direttamente" + +#~ msgid "

          If this box is checked, this dialog will not be shown again in the future, files will be directly moved to the Trash Bin

          " +#~ msgstr "

          Se questa casella è segnata, questa finestra non sarà più mostrata in futuro, e i file saranno cestinati direttamente.

          " + +#~ msgid "&Album" +#~ msgstr "&Album" + +#~ msgid "&Import" +#~ msgstr "&Importa" + +#~ msgid "&Export" +#~ msgstr "&Esporta" + +#~ msgid "T&ag" +#~ msgstr "T&ag" + +#~ msgid "&Image" +#~ msgstr "&Immagine" + +#~ msgid "Se&lect" +#~ msgstr "Se&leziona" + +#~ msgid "&Batch Processes" +#~ msgstr "Processi &non interattivi" + +#~ msgid "Fi&x" +#~ msgstr "Corre&ggi" + +#~ msgid "&Transform" +#~ msgstr "&Trasforma" + +#~ msgid "&Colors" +#~ msgstr "&Colori" + +#~ msgid "&Depth" +#~ msgstr "&Profondità" + +#~ msgid "Filte&rs" +#~ msgstr "Filt&ri" + +#~ msgid "Blur..." +#~ msgstr "Sfoca..." + +#~ msgid "Sharpen..." +#~ msgstr "Aumenta nitidezza..." + +#~ msgid "Red Eye Reduction..." +#~ msgstr "Riduzione occhi rossi..." + +#~ msgid "This filter can be used to correct red eyes in a photo. Select a region including the eyes to use this option." +#~ msgstr "Questo filtro può essere usato per correggere gli occhi rossi in un'immagine. Seleziona una regione che includa degli occhi per usare questa opzione." + +#~ msgid "Brightness/Contrast/Gamma..." +#~ msgstr "Luminosità/contrasto/gamma..." + +#~ msgid "Hue/Saturation/Lightness..." +#~ msgstr "Tonalità/saturazione/luminosità..." + +#~ msgid "Color Balance..." +#~ msgstr "Bilanciamento del colore..." + +#~ msgid "Auto-Correction..." +#~ msgstr "Correzione automatica..." + +#~ msgid "Invert" +#~ msgstr "Inverti" + +#~ msgid "Color Management..." +#~ msgstr "Gestione del colore..." + +#~ msgid "Black && White..." +#~ msgstr "Bianco e nero..." + +#~ msgid "Aspect Ratio Crop..." +#~ msgstr "Taglia alle proporzioni..." + +#~ msgid "This picture is already using a depth of 8 bits / color / pixel." +#~ msgstr "Questa immagine sta già usando una profondità di 8 bit per colore per pixel." + +#~ msgid "Performing this operation will reduce image color quality. Do you want to continue?" +#~ msgstr "Effettuare questa operazione ridurrà la qualità del colore dell'immagine. Vuoi continuare?" + +#~ msgid "This picture is already using a depth of 16 bits / color / pixel." +#~ msgstr "Questa immagine sta già usando una profondità di 16 bit per colore per pixel." + +#~ msgid "Auto Color Correction" +#~ msgstr "Correzione automatica del colore" + +#~ msgid "

          Here you can see the auto-color correction tool preview. You can pick color on image to see the color level corresponding on histogram." +#~ msgstr "

          Qui puoi vedere l'anteprima dello strumento di correzione automatica dei colori. Puoi selezionare un colore dall'immagine per vederne il livello corrispondente sull'istogramma." + +#~ msgid "

          Select here the histogram channel to display:

          Luminosity: display the image's luminosity values.

          Red: display the red image-channel values.

          Green: display the green image-channel values.

          Blue: display the blue image-channel values.

          " +#~ msgstr "

          Seleziona qui il canale dell'istogramma da visualizzare:

          Luminosità: visualizza i valori di luminosità dell'immagine.

          Rosso: visualizza i valori del canale del rosso dell'immagine.

          Verde: visualizza i valori del canale del verde dell'immagine.

          Blu: visualizza i valori del canale del blu dell'immagine.

          " + +#~ msgid "

          Select here the histogram scale.

          If the image's maximal counts are small, you can use the linear scale.

          Logarithmic scale can be used when the maximal counts are big; if it is used, all values (small and large) will be visible on the graph." +#~ msgstr "

          Seleziona qui la scala dell'istogramma.

          Se i valori massimi delle immagini sono piccoli, puoi usare la scala lineare.

          La scala logaritmica può essere usata quando i valori massimi sono grandi. In questo modo tutti i valori (grandi e piccoli) saranno visibili sul grafico." + +#~ msgid "

          Here you can see the target preview image histogram drawing of the selected image channel. This one is re-computed at any settings changes." +#~ msgstr "

          Qui puoi vedere l'istogramma dell'anteprima dell'immagine risultante per il canale selezionato. Questo viene ricalcolato a ogni cambiamento delle impostazioni." + +#~ msgid "Auto Levels" +#~ msgstr "Livelli automatici" + +#~ msgid "Auto Levels:

          This option maximizes the tonal range in the Red, Green, and Blue channels. It searches the image shadow and highlight limit values and adjusts the Red, Green, and Blue channels to a full histogram range.

          " +#~ msgstr "Livelli automatici:

          Questa opzione massimizza l'intervallo di tonalità nei canali del rosso, del verde e del blu. Cerca i valori di limite delle zone luminose e scure dell'immagine e regola i canali del rosso, del verde e del blu a un intervallo di istogramma pieno.

          " + +#~ msgid "Normalize" +#~ msgstr "Normalizza" + +#~ msgid "Normalize:

          This option scales brightness values across the active image so that the darkest point becomes black, and the brightest point becomes as bright as possible without altering its hue. This is often a \"magic fix\" for images that are dim or washed out.

          " +#~ msgstr "Normalizza:

          Questa opzione scala i valori di luminosità nell'immagine attiva in modo che il punto più scuro sia nero, e il punto più chiaro sia il più luminoso possibile senza alterarne la tonalità. Ciò è spesso un \"toccasana\" per immagini opache o sporche.

          " + +#~ msgid "Equalize" +#~ msgstr "Equalizza" + +#~ msgid "Equalize:

          This option adjusts the brightness of colors across the active image so that the histogram for the value channel is as nearly as possible flat, that is, so that each possible brightness value appears at about the same number of pixels as each other value. Sometimes Equalize works wonderfully at enhancing the contrasts in an image. Other times it gives garbage. It is a very powerful operation, which can either work miracles on an image or destroy it.

          " +#~ msgstr "Equalizza:

          Questa opzione regola la luminosità dei colori nell'immagine attiva in modo che l'istogramma per il canale dei valori sia il più piatto possibile; cioè, in modo che ogni possibile valore di luminosità appaia in circa lo stesso numero di pixel di ogni altro valore. A volte l'equalizzazione funziona meravigliosamente per migliorare i contrasti di un'immagine. Altre volte risulta in spazzatura. È un'operazione molto potente, che può fare miracoli o rovinare un'immagine.

          " + +#~ msgid "Stretch Contrast" +#~ msgstr "Stira il contrasto" + +#~ msgid "Stretch Contrast:

          This option enhances the contrast and brightness of the RGB values of an image by stretching the lowest and highest values to their fullest range, adjusting everything in between.

          " +#~ msgstr "Stira il contrasto:

          Questa opzione migliora il contrasto e la luminosità dei valori RGB di un'immagine stirando i valori minimo e massimo agli estremi, regolando tutto il resto tra di essi.

          " + +#~ msgid "Auto Exposure" +#~ msgstr "Esposizione automatica" + +#~ msgid "Auto Exposure:

          This option enhances the contrast and brightness of the RGB values of an image to calculate optimal exposition and black level using image histogram properties.

          " +#~ msgstr ":>Questa opzione migliora il contrasto e la luminosità dei valori RGB di un'immagine per calcolare l'esposizione ottimale e il livello del nero usando le proprietà dell'istogramma dell'immagine.

          " + +#~ msgid "Color Management" +#~ msgstr "Gestione del colore" + +#~ msgid "

          Here you can see the image preview after applying a color profile

          " +#~ msgstr "

          Qui puoi vedere l'anteprima dell'immagine dopo aver applicato un profilo dei colori

          " + +#~ msgid "Channel: " +#~ msgstr "Canale: " + +#~ msgid "

          Select here the histogram channel to display:

          Luminosity: display the image's luminosity values.

          Red: display the red channel values.

          Green: display the green channel values.

          Blue: display the blue channel values.

          " +#~ msgstr "

          Seleziona qui il canale dell'istogramma da visualizzare:

          Luminosità: visualizza i valori di luminosità.

          Rosso: visualizza i valori del canale del rosso.

          Verde: visualizza i valori del canale del verde.

          Blu: visualizza i valori del canale del blu.

          " + +#~ msgid "

          Here you can see the target preview image histogram of the selected image channel. This one is updated after setting changes." +#~ msgstr "

          Qui puoi vedere l'istogramma dell'anteprima dell'immagine risultante per il canale selezionato. Esso viene aggiornato a ogni cambiamento delle impostazioni." + +#~ msgid "

          Here you can set general parameters.

          " +#~ msgstr "

          Qui puoi impostare i parametri generali.

          " + +#~ msgid "Soft-proofing" +#~ msgstr "Prova software" + +#~ msgid "

          Rendering emulation of the device described by the \"Proofing\" profile. Useful to preview final result without rendering to physical medium.

          " +#~ msgstr "

          Emulazione di resa del dispositivo descritto dal profilo di prova. Utile per verificare il risultato finale senza usare il supporto fisico.

          " + +#~ msgid "Check gamut" +#~ msgstr "Controlla il gamut" + +#~ msgid "

          You can use this option if you want to show the colors that are outside the printer's gamut

          " +#~ msgstr "

          Puoi usare questa opzione se vuoi visualizzare i colori che sono al di fuori del gamut della stampante

          " + +#~ msgid "Assign profile" +#~ msgstr "Assegna profilo" + +#~ msgid "

          You can use this option to embed the selected work-space color profile into the image.

          " +#~ msgstr "

          Puoi usare questa opzione per incorporare il profilo dei colori dello spazio di lavoro selezionato nell'immagine.

          " + +#~ msgid "Use BPC" +#~ msgstr "Usa CPN" + +#~ msgid "

          The Black Point Compensation (BPC) feature does work in conjunction with Relative Colorimetric Intent. Perceptual intent should make no difference, since BPC is always on, and in Absolute Colorimetric Intent it is always turned off.

          BPC does compensate a lack of ICC profiles in the dark tone rendering.With BPC the dark tones are optimally mapped (no clipping) from original media to the destination media can render, e.g. the combination paper/ink.

          " +#~ msgstr "

          La funzionalità di compensazione del punto nero (CPN) non funziona assieme all'obiettivo colorimetrico relativo. L'obiettivo percettuale non dovrebbe fare differenza, siccome il CPN è sempre attivo, e con l'obiettivo colorimetrico assoluto è sempre inattivo.

          Il CPN compensa una mancanza dei profili ICC nella resa dei toni scuri. Con il CPN i toni scuri sono mappati in modo ottimale (senza ritagli) dal supporto originale al tono più scuro possibile sul supporto di destinazione, per esempio la combinazione carta/inchiostro.

          " + +#~ msgid "Rendering Intent:" +#~ msgstr "Obiettivo di resa:" + +#~ msgid "
          • Perceptual intent causes the full gamut of the image to be compressed or expanded to fill the gamut of the destination media, so that gray balance is preserved but colorimetric accuracy may not be preserved.
            In other words, if certain colors in an image fall outside of the range of colors that the output device can render, the picture intent will cause all the colors in the image to be adjusted so that the every color in the image falls within the range that can be rendered and so that the relationship between colors is preserved as much as possible.
            This intent is most suitable for display of photographs and images, and is the default intent.
          • Absolute Colorimetric intent causes any colors that fall outside the range that the output device can render are adjusted to the closest color that can be rendered, while all other colors are left unchanged.
            This intent preserves the white point and is most suitable for spot colors (Pantone, TruMatch, logo colors, ...).
          • Relative Colorimetric intent is defined such that any colors that fall outside the range that the output device can render are adjusted to the closest color that can be rendered, while all other colors are left unchanged. Proof intent does not preserve the white point.
          • Saturation intent preserves the saturation of colors in the image at the possible expense of hue and lightness.
            Implementation of this intent remains somewhat problematic, and the ICC is still working on methods to achieve the desired effects.
            This intent is most suitable for business graphics such as charts, where it is more important that the colors be vivid and contrast well with each other rather than a specific color.
          " +#~ msgstr "
          • L'obiettivo percettuale fa comprimere o espandere tutto il gamut dell'immagine alle dimensioni del gamut del supporto di destinazione, in modo che il bilanciamento del grigio sia mantenuto, ma l'accuratezza colorimetrica potrebbe non esserlo.
            Ciò vuol dire che se certi colori di un'immagine sono al di fuori dei colori che il dispositivo di output può rendere, l'obiettivo farà regolare tutti i colori dell'immagine in modo che ogni colore sia all'interno dei colori rendibili e che le relazioni tra i colori siano mantenute per quanto possibile.
            Questo obiettivo è adatto soprattutto per la visualizzazione di fotografie e immagini, ed è l'obiettivo predefinito.
          • L'obiettivo colorimetrico assoluto fa regolare ogni colore che sia al di fuori di quelli rendibili dal dispositivo di output al colore rendibile più vicino, mentre tutti gli altri colori vengono mantenuti inalterati.
            Questo obiettivo mantiene il punto bianco ed è adatto soprattutto per le tinte piatte (Pantone, TruMatch, colori di loghi, ...).
          • L'obiettivo colorimetrico relativo è definito in modo che tutti i colori non rendibili dal dispositivo di output siano regolati al colore rendibile più vicino, mentre tutti gli altri sono mantenuti inalterati. L'obiettivo di prova non mantiene il punto bianco.
          • L'obiettivo di saturazione mantiene la saturazione dei colori nell'immagine, se necessario a spese della tonalità e della luminosità.
            L'implementazione di questo obiettivo rimane un po' problematica, e l'ICC sta ancora lavorando sui metodi per ottenere gli effetti desiderati.
            Questo intento è adatto soprattutto per la grafica professionale, come i grafici, dove è più importante che i colori siano vividi e in netto contrasto tra di loro.
          " + +#~ msgid "Visit Little CMS project website" +#~ msgstr "Visita il sito Web del progetto Little CMS" + +#~ msgid "Input Profile" +#~ msgstr "Profilo di input" + +#~ msgid "

          Set here all parameters relevant of Input Color Profiles.

          " +#~ msgstr "

          Imposta qui tutti i parametri importanti dei profili dei colori di input.

          " + +#~ msgid "Use embedded profile" +#~ msgstr "Usa profilo incorporato" + +#~ msgid "Use builtin sRGB profile" +#~ msgstr "Usa il profilo sRGB incorporato" + +#~ msgid "Use default profile" +#~ msgstr "Usa profilo predefinito" + +#~ msgid "Use selected profile" +#~ msgstr "Usa profilo selezionato" + +#~ msgid "Info..." +#~ msgstr "Informazioni..." + +#~ msgid "Picture Information" +#~ msgstr "Informazioni sulle immagini" + +#~ msgid "Make:" +#~ msgstr "Produttore:" + +#~ msgid "Model:" +#~ msgstr "Modello:" + +#~ msgid "Work-space Profile" +#~ msgstr "Profilo dello spazio di lavoro" + +#~ msgid "

          Set here all parameters relevant of Color Work-space Profiles.

          " +#~ msgstr "

          Imposta qui tutti i parametri importanti dei profili di colore dello spazio di lavoro.

          " + +#~ msgid "Use default workspace profile" +#~ msgstr "Usa profilo dello spazio di lavoro predefinito" + +#~ msgid "Proofing Profile" +#~ msgstr "Profilo di prova" + +#~ msgid "

          Set here all parameters relevant to Proofing Color Profiles.

          " +#~ msgstr "

          Imposta qui tutti i parametri importanti dei profili dei colori di prova.

          " + +#~ msgid "Use default proof profile" +#~ msgstr "Usa il profilo di prova predefinito" + +#~ msgid "Lightness Adjustments" +#~ msgstr "Regolazioni di luminosità" + +#~ msgid "

          Set here all lightness adjustments of target image.

          " +#~ msgstr "

          Imposta qui tutte le regolazioni di luminosità dell'immagine risultante.

          " + +#~ msgid "

          This is the curve adjustment of the image luminosity" +#~ msgstr "

          Questa è la regolazione a curva della luminosità dell'immagine" + +#~ msgid "Contrast:" +#~ msgstr "Contrasto:" + +#~ msgid "

          Set here the contrast adjustment of the image." +#~ msgstr "

          Imposta qui la regolazione del contrasto dell'immagine." + +#~ msgid "ICC profiles path seems to be invalid. You'll not be able to use \"Default profile\" options.

          Please solve it in digiKam ICC setup." +#~ msgstr "Il percorso dei profili ICC non sembra essere valido. Non potrai usare le opzioni del \"Profilo predefinito\".

          Puoi risolvere il problema nella configurazione ICC di digiKam." + +#~ msgid "

          Selected ICC input profile path seems to be invalid.

          Please check it." +#~ msgstr "

          Il percorso del profilo ICC di ingresso selezionato sembra non essere valido.

          Controllalo." + +#~ msgid "

          Selected ICC proof profile path seems to be invalid.

          Please check it." +#~ msgstr "

          Il percorso del profilo ICC di prova selezionato sembra non essere valido.

          Controllalo." + +#~ msgid "

          Selected ICC workspace profile path seems to be invalid.

          Please check it." +#~ msgstr "

          Il percorso del profilo ICC di lavoro selezionato sembra non essere valido.

          Controllalo." + +#~ msgid "

          Your settings are not sufficient.

          To apply a color transform, you need at least two ICC profiles:

          • An \"Input\" profile.
          • A \"Workspace\" profile.

          If you want to do a \"soft-proof\" transform, in addition to these profiles you need a \"Proof\" profile.

          " +#~ msgstr "

          Le tue impostazioni non sono sufficienti.

          Per applicare una trasformazione al colore, ti servono almeno due profili ICC:

          • Un profilo di \"input\";
          • Un profilo di \"spazio di lavoro\".

          Se vuoi fare una prova software (\"soft proof\") della trasformazione, oltre a questi profili ti serve un profilo di \"prova\".

          " + +#~ msgid "

          You have selected the \"Default builtin sRGB profile\"

          " +#~ msgstr "

          Hai selezionato il \"profilo sRGB incorporato predefinito\"

          " + +#~ msgid "

          This profile is built on the fly, so there is no relevant information about it.

          " +#~ msgstr "

          Questo profilo viene costruito al volo, quindi non ci sono informazioni di rilievo al riguardo.

          " + +#~ msgid "Sorry, there is no selected profile" +#~ msgstr "Spiacente, non c'è un profilo selezionato" + +#~ msgid "Profile Error" +#~ msgstr "Errore di profilo" + +#~ msgid "Sorry, it seems there is no embedded profile" +#~ msgstr "Spiacente, pare non esserci un profilo incorporato" + +#~ msgid "

          You do not have enabled Color Management in digiKam preferences.

          " +#~ msgstr "

          Non hai abilitato la Gestione del colore nelle preferenze di digiKam.

          " + +#~ msgid "

          \"Use of default profile\" options will be disabled now.

          " +#~ msgstr "

          Le opzioni di \"Usa profilo predefinito\" saranno ora disattivate.

          " + +#~ msgid "Color Management Settings File to Load" +#~ msgstr "File delle impostazioni della gestione del colore da caricare" + +#~ msgid "\"%1\" is not a Color Management settings text file." +#~ msgstr "\"%1\" non è un file di testo di impostazioni della gestione del colore." + +#~ msgid "Cannot load settings from the Color Management text file." +#~ msgstr "Impossibile caricare le impostazioni dal file di testo di gestione del colore." + +#~ msgid "Color Management Settings File to Save" +#~ msgstr "File delle impostazioni della gestione del colore da salvare" + +#~ msgid "Cannot save settings to the Color Management text file." +#~ msgstr "Impossibile salvare le impostazioni sul file di testo di gestione del colore." + +#~ msgid "Apply Gaussian Blur on Photograph" +#~ msgstr "Applica sfocatura gaussiana alla fotografia" + +#~ msgid "Smoothness:" +#~ msgstr "Smussatura:" + +#~ msgid "

          A smoothness of 0 has no effect, 1 and above determine the Gaussian blur matrix radius that determines how much to blur the image." +#~ msgstr "

          Una smussatura di 0 non ha effetto, 1 e oltre determina il raggio della matrice di sfocatura gaussiana che determina quanto sfocare l'immagine." + +#~ msgid "Gaussian Blur" +#~ msgstr "Sfocatura gaussiana" + +#~ msgid "Brightness Contrast Gamma Adjustments" +#~ msgstr "Regolazioni di luminosità, contrasto e gamma" + +#~ msgid "

          Here you can see the image brightness-contrast-gamma adjustments preview. You can pick color on image to see the color level corresponding on histogram." +#~ msgstr "

          Qui puoi vedere l'anteprima delle regolazioni di luminosità, contrasto e gamma dell'immagine. Puoi scegliere un colore dell'immagine per vederne il livello corrispondente nell'istogramma." + +#~ msgid "

          Set here the brightness adjustment of the image." +#~ msgstr "

          Imposta qui la regolazione della luminosità dell'immagine." + +#~ msgid "Gamma:" +#~ msgstr "Gamma:" + +#~ msgid "

          Set here the gamma adjustment of the image." +#~ msgstr "

          Imposta qui la regolazione del gamma dell'immagine." + +#~ msgid "Hue/Saturation/Lightness" +#~ msgstr "Tonalità/saturazione/luminosità" + +#~ msgid "

          Here you can see the image Hue/Saturation/Lightness adjustments preview. You can pick color on image to see the color level corresponding on histogram." +#~ msgstr "

          Qui puoi vedere l'anteprima delle regolazioni di tonalità, saturazione e luminosità dell'immagine. Puoi scegliere un colore dell'immagine per vederne il livello corrispondente nell'istogramma." + +#~ msgid "

          Select here the hue and saturation adjustments of the image." +#~ msgstr "

          Seleziona qui le regolazioni di tonalità e saturazione dell'immagine." + +#~ msgid "

          You can see here the color preview of hue and saturation adjustments." +#~ msgstr "

          Qui puoi vedere l'anteprima del colore delle regolazioni di tonalità e saturazione." + +#~ msgid "Hue:" +#~ msgstr "Tonalità:" + +#~ msgid "

          Set here the hue adjustment of the image." +#~ msgstr "

          Imposta qui la regolazione della tonalità dell'immagine." + +#~ msgid "Saturation:" +#~ msgstr "Saturazione:" + +#~ msgid "

          Set here the saturation adjustment of the image." +#~ msgstr "

          Imposta qui la regolazione della saturazione dell'immagine." + +#~ msgid "Lightness:" +#~ msgstr "Luminosità:" + +#~ msgid "

          Set here the lightness adjustment of the image." +#~ msgstr "

          Imposta qui la regolazione della luminosità dell'immagine." + +#~ msgid "HSL Adjustments" +#~ msgstr "Regolazioni TSL" + +#~ msgid "Aspect Ratio Crop & Composition Guide" +#~ msgstr "Taglio alle proporzioni e guida di composizione" + +#~ msgid "

          Set selection area to the maximum size according to the current ratio." +#~ msgstr "

          Imposta l'area di selezione alle dimensioni massime secondo il rapporto attuale." + +#~ msgid "&Max. Aspect" +#~ msgstr "Proporzioni &massime" + +#~ msgid "

          Here you can see the aspect ratio selection preview used for cropping. You can use the mouse for moving and resizing the crop area. Hold CTRL to move the opposite corner too. Hold SHIFT to move the closest corner to the mouse pointer." +#~ msgstr "

          Qui puoi vedere l'anteprima della selezione delle proporzioni usate per il taglio. Puoi usare il mouse per spostare e ridimensionare l'area di taglio. Tieni premuto Ctrl per spostare anche l'angolo opposto. Tieni premuto Shift per spostare l'angolo più vicino al puntatore del mouse." + +#~ msgid "Aspect ratio:" +#~ msgstr "Proporzioni:" + +#~ msgid "Custom" +#~ msgstr "Personalizzate" + +#~ msgid "Golden Ratio" +#~ msgstr "Rapporto aureo" + +#~ msgid "

          Select here your constrained aspect ratio for cropping. Aspect Ratio Crop tool uses a relative ratio. That means it is the same if you use centimeters or inches and it doesn't specify the physical size.

          You can see below a correspondence list of traditional photographic paper sizes and aspect ratio crop:

          2:3: 10x15cm, 20x30cm, 30x45cm, 3.5x5\", 4x6\", 8x12\", 12x18\", 16x24\", 20x30\"

          3:4: 6x8cm, 15x20cm, 18x24cm, 30x40cm, 3.75x5\", 4.5x6\", 6x8\", 7.5x10\", 9x12\"

          4:5: 20x25cm, 40x50cm, 8x10\", 16x20\"

          5:7: 15x21cm, 30x42cm, 5x7\"

          7:10: 21x30cm, 42x60cm

          The Golden Ratio is 1:1.618. A composition following this rule is considered visually harmonious but can be unadapted to print on standard photographic paper." +#~ msgstr "

          Seleziona qui le proporzioni vincolate per il taglio. Lo strumento Taglio alle proporzioni usa una proporzione relativa: ciò vuol dire che non fa differenza usare centimetri o millimetri, e non si specificano le dimensioni fisiche.

          Sotto puoi vedere un elenco di corrispondenze per le dimensioni tradizionali delle fotografie e le loro proporzioni:

          2:3 10×15cm, 20×30cm, 30×45cm, 3,5×5\", 4×6\", 8×12\", 12×18\", 16×24\", 20×30\"

          3:4: 6×8cm, 15×20cm, 18×24cm, 30×40cm, 3,75×5\", 4,5×6\", 6×8\", 7,5×10\", 9×12\"

          4:5: 20×25cm, 40×50cm, 8×10\", 16×20\"

          5:7: 15×21cm, 30×42cm, 5×7\"

          7:10: 21×30cm, 42×60cm

          Il Rapporto aureo è 1:1,1618. Una composizione che segua questa regola viene considerata visualmente armoniosa, ma può essere inadatta alla stampa sulla carta fotografica standard." + +#~ msgid "Orientation:" +#~ msgstr "Orientazione:" + +#~ msgid "

          Select here constrained aspect ratio orientation." +#~ msgstr "

          Seleziona qui l'orientazione delle proporzioni vincolate." + +#~ msgid "Auto" +#~ msgstr "Automatica" + +#~ msgid "

          Enable this option to automatic setting of orientation." +#~ msgstr "

          Abilita questa opzione per l'impostazione automatica dell'orientazione." + +#~ msgid "Custom ratio:" +#~ msgstr "Proporzioni personalizzate:" + +#~ msgid "

          Set here the desired custom aspect numerator value." +#~ msgstr "

          Imposta qui il valore del numeratore delle proporzioni desiderate." + +#~ msgid "

          Set here the desired custom aspect denominator value." +#~ msgstr "

          Imposta qui il valore del denominatore delle proporzioni desiderate." + +#~ msgid "

          Set here the top left selection corner position for cropping." +#~ msgstr "

          Imposta qui la posizione dell'angolo in alto a sinistra della selezione per il taglio." + +#~ msgid "X:" +#~ msgstr "X:" + +#~ msgid "Width:" +#~ msgstr "Larghezza:" + +#~ msgid "

          Set here the width selection for cropping." +#~ msgstr "

          Imposta qui la selezione della larghezza per il taglio." + +#~ msgid "

          Set width position to center." +#~ msgstr "

          Imposta la posizione della larghezza al centro." + +#~ msgid "Y:" +#~ msgstr "Y:" + +#~ msgid "Height:" +#~ msgstr "Altezza:" + +#~ msgid "

          Set here the height selection for cropping." +#~ msgstr "

          Imposta qui la selezione dell'altezza per il taglio." + +#~ msgid "

          Set height position to center." +#~ msgstr "

          Imposta la posizione dell'altezza al centro." + +#~ msgid "Composition guide:" +#~ msgstr "Guida di composizione:" + +#~ msgid "Rules of Thirds" +#~ msgstr "Regola dei terzi" + +#~ msgid "Harmonious Triangles" +#~ msgstr "Triangoli armonici" + +#~ msgid "Golden Mean" +#~ msgstr "Sezione aurea" + +#~ msgid "

          With this option, you can display guide lines which help you to compose your photograph." +#~ msgstr "

          Con questa opzione, puoi visualizzare le linee guida che ti aiutano a comporre una fotografia." + +#~ msgid "Golden sections" +#~ msgstr "Sezioni auree" + +#~ msgid "

          Enable this option to show golden sections." +#~ msgstr "

          Abilita questa opzione per mostrare le sezioni auree." + +#~ msgid "Golden spiral sections" +#~ msgstr "Sezioni della spirale aurea" + +#~ msgid "

          Enable this option to show golden spiral sections." +#~ msgstr "

          Abilita questa opzione per mostrare le sezioni della spirale aurea." + +#~ msgid "Golden spiral" +#~ msgstr "Spirale aurea" + +#~ msgid "

          Enable this option to show golden spiral guide." +#~ msgstr "

          Abilita questa opzione per visualizzare la guida della spirale aurea." + +#~ msgid "Golden triangles" +#~ msgstr "Triangoli aurei" + +#~ msgid "

          Enable this option to show golden triangles." +#~ msgstr "

          Abilita questa opzione per visualizzare i triangoli aurei." + +#~ msgid "Flip horizontally" +#~ msgstr "Ribalta orizzontalmente" + +#~ msgid "

          Enable this option to flip horizontally guidelines." +#~ msgstr "

          Abilita questa opzione per ribaltare orizzontalmente le linee guida." + +#~ msgid "Flip vertically" +#~ msgstr "Ribalta verticalmente" + +#~ msgid "

          Enable this option to flip vertically guidelines." +#~ msgstr "

          Abilita questa opzione per ribaltare verticalmente le linee guida." + +#~ msgid "Color and width:" +#~ msgstr "Colore e spessore:" + +#~ msgid "

          Set here the color used to draw composition guides." +#~ msgstr "

          Imposta qui il colore usato per disegnare le guide di composizione." + +#~ msgid "

          Set here the width in pixels used to draw composition guides." +#~ msgstr "

          Imposta qui lo spessore in pixel da usare per disegnare le guide di composizione." + +#~ msgid "Aspect Ratio Crop" +#~ msgstr "Taglia alle proporzioni" + +#~ msgid "Convert to Black & White" +#~ msgstr "Converti in bianco e nero" + +#~ msgid "

          Here you can see the black and white conversion tool preview. You can pick color on image to see the color level corresponding on histogram." +#~ msgstr "

          Puoi vedere qui l'anteprima dello strumento di conversione in bianco e nero. Puoi scegliere un colore dell'immagine per vederne il livello corrispondente nell'istogramma." + +#~ msgid "No Black & White Filter" +#~ msgstr "Senza filtro bianco e nero" + +#~ msgid "No Black & White Filter:

          Do not apply a black and white filter to the image.

          " +#~ msgstr "Senza filtro bianco e nero:

          Non applicare un filtro bianco e nero all'immagine.

          " + +#~ msgid "Neutral" +#~ msgstr "Neutrale" + +#~ msgid "Neutral Black & White:

          Simulate black and white neutral film exposure.

          " +#~ msgstr "Bianco e nero neutro:

          Simula l'esposizione di una pellicola in bianco e nero neutra.

          " + +#~ msgid "Black & White with Green Filter:

          Simulate black and white film exposure using green filter. This provides an universal asset for all scenics, especially suited for portraits photographed against sky.

          " +#~ msgstr "Bianco e nero con filtro verde:

          Simula l'esposizione di una pellicola in bianco e nero usando un filtro verde. È utile per tutte le foto sceniche, in particolare per i ritratti con come sfondo il cielo.

          " + +#~ msgid "Orange Filter" +#~ msgstr "Filtri arancione" + +#~ msgid "Black & White with Orange Filter:

          Simulate black and white film exposure using orange filter. This will enhances landscapes, marine scenes and aerial photography.

          " +#~ msgstr "Bianco e nero con filtro arancione:

          Simula l'esposizione di una pellicola in bianco e nero usando un filtro arancione. Migliorerà i paesaggi, le scene di mare e le fotografie aeree.

          " + +#~ msgid "Black & White with Red Filter:

          Simulate black and white film exposure using red filter. Using this one creates dramatic sky effects and simulates moonlight scenes in daytime.

          " +#~ msgstr "Bianco e nero con filtro rosso:

          Simula l'esposizione di una pellicola in bianco e nero usando un filtro rosso. L'uso crea degli effetti notevoli per il cielo e simula scene al chiaro di luna durante il giorno.

          " + +#~ msgid "Yellow Filter" +#~ msgstr "Filtro giallo" + +#~ msgid "Black & White with Yellow Filter:

          Simulate black and white film exposure using yellow filter. Most natural tonal correction and improves contrast. Ideal for landscapes.

          " +#~ msgstr "Bianco e nero con filtro giallo:

          Simula l'esposizione di una pellicola in bianco e nero usando un filtro giallo. È la correzione di tono più naturale e migliora il contrasto. Ideale per i paesaggi.

          " + +#~ msgid "Filters" +#~ msgstr "Filtri" + +#~ msgid "No Tone Filter" +#~ msgstr "Senza filtro dei toni" + +#~ msgid "No Tone Filter:

          Do not apply a tone filter to the image.

          " +#~ msgstr "Senza filtro dei toni:

          Non applicare un filtro dei toni all'immagine.

          " + +#~ msgid "Sepia Tone" +#~ msgstr "Tono seppia" + +#~ msgid "Black & White with Sepia Tone:

          Gives a warm highlight and mid-tone while adding a bit of coolness to the shadows-very similar to the process of bleaching a print and re-developing in a sepia toner.

          " +#~ msgstr "Bianco e nero con tono seppia:

          Rende più calde delle zone luminose e medie aggiungendo un po' di freddo a quelle in ombra, in modo molto simile al processo di sbiancare una stampa e risvilupparla in un tono di seppia.

          " + +#~ msgid "Brown Tone" +#~ msgstr "Tono marrone" + +#~ msgid "Black & White with Brown Tone:

          This filter is more neutral than Sepia Tone filter.

          " +#~ msgstr "Bianco e nero con tono marrone:

          Questo filtro è più neutrale del filtro a tono seppia.

          " + +#~ msgid "Cold Tone" +#~ msgstr "Tono freddo" + +#~ msgid "Black & White with Cold Tone:

          Start subtle and replicate printing on a cold tone black and white paper such as a bromide enlarging paper.

          " +#~ msgstr "Bianco e nero con tono freddo:

          Avvia una stampa leggera e replicata su una carta in bianco e nero a tono freddo, come la carta per ingrandimenti al bromuro.

          " + +#~ msgid "Selenium Tone" +#~ msgstr "Tono al selenio" + +#~ msgid "Black & White with Selenium Tone:

          This effect replicate traditional selenium chemical toning done in the darkroom.

          " +#~ msgstr "Bianco e nero con tono al selenio:

          Questo effetto riproduce il tono al selenio tradizionale ottenuto nella camera oscura.

          " + +#~ msgid "Platinum Tone" +#~ msgstr "Tono al platino" + +#~ msgid "Black & White with Platinum Tone:

          This effect replicate traditional platinum chemical toning done in the darkroom.

          " +#~ msgstr "Bianco e nero con tono al platino:

          Questo effetto riproduce il tono al platino tradizionale ottenuto nella camera oscura.

          " + +#~ msgid "Tone" +#~ msgstr "Tono" + +#~ msgid "Lightness" +#~ msgstr "Luminosità" + +#~ msgid "Convert to Black && White" +#~ msgstr "Converti in bianco e nero" + +#~ msgid "Black & White Settings File to Load" +#~ msgstr "File delle impostazioni del bianco e nero da caricare" + +#~ msgid "\"%1\" is not a Black & White settings text file." +#~ msgstr "\"%1\" non è un file di testo di impostazioni del bianco e nero." + +#~ msgid "Cannot load settings from the Black & White text file." +#~ msgstr "Impossibile caricare le impostazioni dal file di testo del bianco e nero." + +#~ msgid "Black & White Settings File to Save" +#~ msgstr "File delle impostazioni del bianco e nero da salvare" + +#~ msgid "Cannot save settings to the Black & White text file." +#~ msgstr "Impossibile salvare le impostazioni sul file di testo del bianco e nero." + +#~ msgid "Sharpening Photograph" +#~ msgstr "Aumento della nitidezza della fotografia" + +#~ msgid "Sharpness:" +#~ msgstr "Nitidezza:" + +#~ msgid "

          A sharpness of 0 has no effect, 1 and above determine the sharpen matrix radius that determines how much to sharpen the image." +#~ msgstr "

          Una nitidezza di 0 non ha effetto, 1 e oltre determina il raggio della matrice di aumento della nitidezza che determina di quanto aumentare la nitidezza dell'immagine." + +#~ msgid "Sharpen" +#~ msgstr "Aumenta nitidezza" + +#~ msgid "

          Here you can see the image color-balance adjustments preview. You can pick color on image to see the color level corresponding on histogram." +#~ msgstr "

          Qui puoi vedere l'anteprima delle regolazioni di bilanciamento dei colori dell'immagine. Puoi scegliere un colore dell'immagine per vederne il livello corrispondente sull'istogramma." + +#~ msgid "Cyan" +#~ msgstr "Ciano" + +#~ msgid "

          Set here the cyan/red color adjustment of the image." +#~ msgstr "

          Imposta qui la regolazione del colore ciano/rosso dell'immagine." + +#~ msgid "Magenta" +#~ msgstr "Magenta" + +#~ msgid "Yellow" +#~ msgstr "Giallo" + +#~ msgid "

          Set here the yellow/blue color adjustment of the image." +#~ msgstr "

          Imposta qui la regolazione del colore giallo/blu dell'immagine." + +#~ msgid "Red-Eye Correction Tool" +#~ msgstr "Strumento per la correzione degli occhi rossi" + +#~ msgid "You need to select a region including the eyes to use the red-eye correction tool" +#~ msgstr "Devi selezionare una regione che includa gli occhi su cui usare lo strumento per la correzione degli occhi rossi" + +#~ msgid "Red Eyes Correction" +#~ msgstr "Correzione degli occhi rossi" + +#~ msgid "Red Eye Correction" +#~ msgstr "Correzione degli occhi rossi" + +#~ msgid "Level of Red-Eye Correction" +#~ msgstr "Livello di correzione degli occhi rossi" + +#~ msgid "Mild (use if other parts of the face are also selected)" +#~ msgstr "Leggero (usalo se sono selezionate altre parti del volto)" + +#~ msgid "Aggressive (use if eye(s) have been selected exactly)" +#~ msgstr "Aggressivo (usalo se gli occhi sono stati selezionati esattamente)" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that digiKam supports Drag'n'Drop? So you can easily move images from Konqueror to digiKam or from digiKam to K3b simply by using \"Drag'n'Drop\".\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che digiKam supporta il trascinamento? In questo modo puoi spostare facilmente le immagini da Konqueror\n" +#~ "a digiKam o da digiKam a K3b semplicemente \"trascinandole\".\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that you can use nested albums in digiKam.\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che puoi usare degli album annidati in digiKam?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that you can view the Exif, MakerNotes, and IPTC informations of a photo by using its Metadata sidebar tab?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che puoi visualizzare le informazioni Exif, MakerNotes e IPTC di una foto usando la scheda laterale Dati aggiuntivi?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that each photo has a context menu that can be reached by clicking on it with the right mouse button?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che ogni foto ha un menu contestuale che può essere raggiunto facendoci clic con il pulsante destro del mouse?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that albums in digiKam are Folders in your Album Library? So you can easily import your Photos by simply copying them to your Album Library.\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che gli album di digiKam sono cartelle nella tua libreria degli album? Così puoi importare le tue foto semplicemente copiandole nella tua libreria degli album.\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that you can customize your digikam toolbars using Settings -> Configure Toolbars...?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che puoi personalizzare le barre degli strumenti di digiKam usando Impostazioni -> Configura barre degli strumenti...?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that there is a digiKam hotplugging howto available at this url ?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che c'è una guida per l'hotplug con digiKam disponibile a questo indirizzo?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that you can reach other users using the digikam-users mailing list? Subscribe yourself at this url.\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che puoi raggiungere altri utenti usando la mailing list digikam-users? Iscriviti alla lista da questo indirizzo.\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that digiKam has multiple plugins with extra features like HTML export, Archive to CD, Slideshow,... and that you are welcome to write your own plugins? You can find more information about at this url.\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che digiKam ha molti plugin con funzionalità aggiuntive come Esportazione HTML, Archiviazione su CD, Presentazione, ... e che sei il benvenuto se vuoi scrivere i tuoi plugin? Puoi trovare maggiori informazioni a questo indirizzo.\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "... that you have direct access to the KDE Gamma Configuration using Tools -> Gamma Adjustment?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "... che hai accesso diretto alla configurazione di gamma di KDE usando Strumenti -> Regolazione gamma?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that you can print images using the Print Wizard? You can start it using Album -> Export -> Print Wizard.\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che puoi stampare le immagini usando l'Assistente di stampa? Puoi avviarlo usando Album -> Esporta -> Assistente di stampa.\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "... that you can use the PNG file format instead of TIFF for good compression without losing image quality?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "... che puoi usare il formato file PNG invece di TIFF per una buona compressione, senza perdere qualità d'immagine?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "... that most of the settings in a dialog box have What's this? information available, which can be reached via the right mouse button?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "... che la maggior parte delle impostazioni in una finestra hanno un'informazione Cos'è questo?, disponibile al premere del pulsante destro del mouse?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that because the PNG file format uses a lossless compression algorithm, you can use the max compression level with this file format?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che, siccome il formato file PNG usa un algoritmo di compressione senza perdita, puoi usare il massimo livello di compressione con questo formato di file?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that you can print the current image opened in the digiKam image editor?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che puoi stampare l'immagine attualmente aperta nell'editor di immagini di digiKam?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that you can edit the comments of the current image opened in the digiKam image editor using Comments and Tags sidebar tab?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che puoi modificare i commenti dell'immagine attualmente aperta nell'editor di immagini di digiKam usando la scheda laterale Commenti e tag?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... that you could use <Page Down> and <Page Up> on your keyboard to switch between the photos in the image editor?\n" +#~ "
          \n" +#~ "

          \n" +#~ msgstr "" +#~ "

          \n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "\n" +#~ "
          \n" +#~ "\n" +#~ "\n" +#~ "... che puoi usare <PgGiù> e <PgSu> sulla tua tastiera per cambiare le foto nell'editor di immagini?\n" +#~ "
          \n" +#~ "

          \n" + +#~ msgid "Sync pictures Metadata with database. Please wait..." +#~ msgstr "Sincronizzazione dei dati aggiuntivi delle immagini con la banca dati. Attendi..." + +#~ msgid "Thumbnails processing" +#~ msgstr "Elaborazione delle miniature" + +#~ msgid "Updating thumbnails database in progress. Please wait..." +#~ msgstr "Aggiornamento della banca dati delle miniature in corso. Attendi..." + +#~ msgid "Processing small thumbs" +#~ msgstr "Elaborazione delle miniature piccole" + +#~ msgid "Processing large thumbs" +#~ msgstr "Elaborazione delle miniature grandi" + +#~ msgid "Update of thumbnails database done" +#~ msgstr "Aggiornamento della banca dati delle miniature completato" + +#~ msgid "Duration: %1" +#~ msgstr "Durata: %1" + +#~ msgid "Sync All Pictures Metadata" +#~ msgstr "Sincronizza i dati aggiuntivi di tutte le immagini" + +#~ msgid "Sync all pictures metadata with digiKam database. Please wait..." +#~ msgstr "Sincronizzazione dei dati aggiuntivi di tutte le immagini con la banca dati di digiKam. Attendi..." + +#~ msgid "Parsing all albums" +#~ msgstr "Elaborazione di tutti gli album" + +#~ msgid "Sync all pictures metadata with digiKam database done" +#~ msgstr " Sincronizzazione dei dati aggiuntivi di tutte le immagini con la banca dati di digiKam completata
          " + +#~ msgid "IPTC Actions" +#~ msgstr "Azioni IPTC" + +#~ msgid "&Save image tags as \"Keywords\" tag" +#~ msgstr "&Salva tag delle immagini come tag \"Keywords\"" + +#~ msgid "

          Turn this option on to store the image tags in the IPTC Keywords tag." +#~ msgstr "

          Abilita questa opzione per salvare i tag delle immagini nel tag IPTC Keywords." + +#~ msgid "&Save image rating as \"Urgency\" tag" +#~ msgstr "&Salva voto dell'immagine come tag \"Urgency\"" + +#~ msgid "

          Turn this option on to store the image rating in the IPTC Urgency tag." +#~ msgstr "

          Abilita questa opzione per salvare il voto dell'immagine nel tag IPTC Urgency." + +#~ msgid "&Save default photographer identity as tags" +#~ msgstr "&Salva identità predefinita del fotografo come tag" + +#~ msgid "

          Turn this option on to store the default photographer identity into the IPTC tags. You can set this value in the Identity setup page." +#~ msgstr "

          Abilita questa opzione per salvare l'identità predefinita del fotografo nei tag IPTC. Puoi impostare questo valore nella pagina di configurazione dell'identità." + +#~ msgid "&Save default credit and copyright identity as tags" +#~ msgstr "&Salva riconoscimenti e copyright predefiniti come tag" + +#~ msgid "

          Turn this option on to store the default credit and copyright identity into the IPTC tags. You can set this value in the Identity setup page." +#~ msgstr "

          Abilita questa opzione per salvare i riconoscimenti e copyright predefiniti nei tag IPTC. Puoi impostare questo valore nella pagina di configurazione dell'identità." + +#~ msgid "Common Metadata Actions" +#~ msgstr "Azioni sui dati aggiuntivi comuni" + +#~ msgid "&Save image comments as embedded text" +#~ msgstr "&Salva commenti delle immagini come testo incorporato" + +#~ msgid "

          Turn this option on to store image comments into the JFIF section, EXIF tag, and IPTC tag." +#~ msgstr "

          Abilita questa opzione per salvare i commenti delle immagini nella sezione JFIF, nel tag EXIF e nel tag IPTC." + +#~ msgid "&Save image time stamp as tags" +#~ msgstr "&Salva la data e l'ora dell'immagine come tag" + +#~ msgid "

          Turn this option on to store the image date and time into the EXIF and IPTC tags." +#~ msgstr "

          Abilita questa opzione per salvare la data e l'ora dell'immagine nei tag EXIF e IPTC." + +#~ msgid "Visit Exiv2 project website" +#~ msgstr "Visita il sito Web del progetto Exiv2" + +#~ msgid "

          EXIF is a standard used by most digital cameras today to store technical information about the photograph as metadata in the image file. You can learn more about EXIF at www.exif.org.

          IPTC is another standard used in digital photography to store embedded information in pictures. You can learn more about IPTC at www.iptc.org.

          " +#~ msgstr "

          EXIF è uno standard oggi usato dalla maggior parte delle macchine fotografiche per salvare informazioni tecniche sulle fotografie come dati nel file dell'immagine. Puoi saperne di più su EXIF sul sito www.exif.org.

          IPTC è un altro standard usato nella fotografia digitale per salvare informazioni incorporate nelle immagini. Puoi saperne di più su IPTC sul sito www.iptc.org.

          " + +#~ msgid "Kipi library version: %1" +#~ msgstr "Versione della libreria Kipi: %1" + +#~ msgid "

          A list of available Kipi plugins appears below." +#~ msgstr "

          Sotto è presente un elenco dei plugin di Kipi disponibili." + +#~ msgid "" +#~ "_n: 1 Kipi plugin found\n" +#~ "%n Kipi plugins found" +#~ msgstr "" +#~ "Trovato 1 plugin di Kipi\n" +#~ "Trovati %n plugin di Kipi" + +#~ msgid "&Delay between images:" +#~ msgstr "Ritar&do tra le immagini:" + +#~ msgid "

          The delay, in seconds, between images." +#~ msgstr "

          Il ritardo, in secondi, tra le immagini." + +#~ msgid "Start with current image" +#~ msgstr "Parti con l'immagine attuale" + +#~ msgid "

          If this option is enabled, Slideshow will be started with current image selected from the images list." +#~ msgstr "

          Se questa opzione è abilitata, la presentazione sarà avviata con l'immagine attualmente selezionata dall'elenco." + +#~ msgid "Display in loop" +#~ msgstr "Visualizza in ciclo" + +#~ msgid "

          Run the slideshow in a loop." +#~ msgstr "

          Esegui la presentazione in ciclo continuo." + +#~ msgid "Print image file name" +#~ msgstr "Scrivi il nome del file dell'immagine" + +#~ msgid "

          Print image file name on bottom of screen." +#~ msgstr "

          Scrivi il nome del file dell'immagine in fondo allo schermo." + +#~ msgid "Print image creation date" +#~ msgstr "Scrivi la data di creazione dell'immagine" + +#~ msgid "

          Print image creation on bottom of screen." +#~ msgstr "

          Scrivi la data di creazione dell'immagine in fondo allo schermo." + +#~ msgid "Print camera aperture and focal" +#~ msgstr "Scrivi il diaframma e il fuoco della macchina fotografica" + +#~ msgid "

          Print camera aperture and focal on bottom of screen." +#~ msgstr "

          Scrivi il diaframma e il fuoco della macchina fotografica in fondo allo schermo." + +#~ msgid "Print camera exposure and sensitivity" +#~ msgstr "Scrivi l'esposizione e la sensibilità della macchina fotografica" + +#~ msgid "

          Print camera exposure and sensitivity on bottom of screen." +#~ msgstr "

          Scrivi l'esposizione e la sensibilità della macchina fotografica in fondo allo schermo." + +#~ msgid "Print camera make and model" +#~ msgstr "Scrivi il produttore e il modello della macchina fotografica" + +#~ msgid "

          Print camera make and model on bottom of screen." +#~ msgstr "

          Scrivi il produttore e il modello della macchina fotografica in fondo allo schermo." + +#~ msgid "Print image comment" +#~ msgstr "Scrivi il commento dell'immagine" + +#~ msgid "

          Print image comment on bottom of screen." +#~ msgstr "

          Scrivi il commento dell'immagine in fondo allo schermo." + +#~ msgid "Image Files" +#~ msgstr "File immagine" + +#~ msgid "Show only &image files with extensions:" +#~ msgstr "Mostra solo i file &immagine con estensioni:" + +#~ msgid "

          Here you can set the extensions of image files to be displayed in Albums (such as JPEG or TIFF); when these files are clicked on they will be opened with the digiKam Image Editor." +#~ msgstr "

          Qui puoi impostare le estensioni dei file immagine che saranno mostrati negli album (come JPEG o TIFF); quando ci farai clic, questi file saranno aperti con il visualizzatore di immagini di digiKam." + +#~ msgid "Revert to default settings" +#~ msgstr "Ritorna alle impostazioni predefinite" + +#~ msgid "Movie Files" +#~ msgstr "Filmati" + +#~ msgid "Show only &movie files with extensions:" +#~ msgstr "Mostra solo i fil&mati con estensioni:" + +#~ msgid "

          Here you can set the extensions of movie files to be displayed in Albums (such as MPEG or AVI); when these files are clicked on they will be opened with the default KDE movie player." +#~ msgstr "

          Puoi impostare qui l'estensione dei filmati che saranno mostrati negli album (come MPEG o AVI); quando ci farai clic, questi file saranno aperti con il lettore multimediale predefinito di KDE." + +#~ msgid "Audio Files" +#~ msgstr "File audio" + +#~ msgid "Show only &audio files with extensions:" +#~ msgstr "Mostra solo i file &audio con estensioni:" + +#~ msgid "

          Here you can set the extensions of audio files to be displayed in Albums (such as MP3 or OGG); when these files are clicked on they will be opened with the default KDE audio player." +#~ msgstr "

          Puoi impostare qui l'estensione dei file audio che saranno mostrati negli album (come MP3 o OGG); Quando ci farai clic, questi file saranno aperti con il lettore audio predefinito di KDE." + +#~ msgid "RAW Files" +#~ msgstr "File grezzi" + +#~ msgid "Show only &RAW files with extensions:" +#~ msgstr "Mostra solo i file g&rezzi con estensioni:" + +#~ msgid "

          Here you can set the extensions of RAW image files to be displayed in Albums (such as CRW, for Canon cameras, or NEF, for Nikon cameras)." +#~ msgstr "

          Puoi impostare qui l'estensione dei file immagine grezzi che saranno mostrati negli album (come CRW per le macchine fotografiche Canon, o NEF per le macchine fotografiche Nikon)." + +#~ msgid "Show confirmation dialog when moving items to the &trash" +#~ msgstr "Mostra finestra di conferma quando ces&tini gli elementi" + +#~ msgid "Apply changes in the &right sidebar without confirmation" +#~ msgstr "Applica le modifiche nella barra laterale dest&ra senza chiedere conferma" + +#~ msgid "&Scan for new items on startup (slows down startup)" +#~ msgstr "&Cerca nuovi elementi all'avvio (rallenta l'avvio)" + +#~ msgid "Photographer Information" +#~ msgstr "Informazioni sul fotografo" + +#~ msgid "Author:" +#~ msgstr "Autore:" + +#~ msgid "

          Set the photographer name. This field is limited to 32 ASCII characters." +#~ msgstr "

          Imposta il nome del fotografo. Questo campo è limitato a 32 caratteri ASCII." + +#~ msgid "Author Title:" +#~ msgstr "Titolo dell'autore:" + +#~ msgid "

          Set the photographer title. This field is limited to 32 ASCII characters." +#~ msgstr "

          Imposta il titolo del fotografo. Questo campo è limitato a 32 caratteri ASCII." + +#~ msgid "Credit and Copyright" +#~ msgstr "Riconoscimenti e diritto d'autore" + +#~ msgid "Credit:" +#~ msgstr "Riconoscimenti:" + +#~ msgid "

          Set the default provider identification of the picture, not necessarily the owner/creator. This field is limited to 32 ASCII characters." +#~ msgstr "

          Imposta l'identificazione predefinita per l'immagine, non necessariamente il proprietario o creatore. Questo campo è limitato a 32 caratteri ASCII." + +#~ msgid "Source:" +#~ msgstr "Fonte:" + +#~ msgid "

          Set the default original owner identification of the intellectual content of the picture. This could be an agency, a member of an agency or an individual photographer name. This field is limited to 32 ASCII characters." +#~ msgstr "

          Imposta l'identificazione predefinita del proprietario originale del contenuto intellettuale dell'immagine. Potrebbe essere un'agenzia, un membro di un'agenzia o il nome di un fotografo individuale. Questo campo è limitato a 32 caratteri ASCII." + +#~ msgid "Copyright:" +#~ msgstr "Diritto d'autore:" + +#~ msgid "

          Set the default copyright notice of the pictures. This field is limited to 128 ASCII characters." +#~ msgstr "

          Imposta la notifica del diritto d'autore delle immagini predefinita. Questo campo è limitato a 128 caratteri ASCII." + +#~ msgid "Note: IPTC text tags only support the printable ASCII characters set." +#~ msgstr "Nota: i tag IPTC di testo supportano solo l'insieme dei caratteri ASCII stampabili." + +#~ msgid "

          You can add or remove Album collection types here to improve how your Albums are sorted in digiKam." +#~ msgstr "

          Qui puoi aggiungere o rimuovere alcuni tipi di raccolte di album per migliorare l'ordinamento degli album in digiKam." + +#~ msgid "&Add..." +#~ msgstr "&Aggiungi..." + +#~ msgid "New Collection Name" +#~ msgstr "Nome della nuova raccolta" + +#~ msgid "Enter new collection name:" +#~ msgstr "Inserisci il nome della nuova raccolta:" + +#~ msgid "&Use theme background color" +#~ msgstr "&Usa colore di sfondo del tema" + +#~ msgid "

          Enable this option to use the background theme color in the image editor area" +#~ msgstr "

          Abilita questa opzione per usare il colore di sfondo del tema nell'area dell'editor di immagini" + +#~ msgid "

          Customize the background color to use in the image editor area." +#~ msgstr "

          Configura il colore di sfondo da usare nell'area dell'editor di immagini." + +#~ msgid "Title" +#~ msgstr "Titolo" + +#~ msgid "Port" +#~ msgstr "Porta" + +#~ msgid "Path" +#~ msgstr "Percorso" + +#~ msgid "

          Here you can see the digital camera list used by digiKam via the Gphoto interface." +#~ msgstr "

          Qui puoi vedere l'elenco di macchine fotografiche digitali usato da digiKam attraverso l'interfaccia Gphoto." + +#~ msgid "&Edit..." +#~ msgstr "&Modifica..." + +#~ msgid "Auto-&Detect" +#~ msgstr "&Rilevamento automatico" + +#~ msgid "Visit Gphoto project website" +#~ msgstr "Visita il sito Web del progetto Gphoto" + +#~ msgid "" +#~ "Failed to auto-detect camera.\n" +#~ "Please check if your camera is turned on and retry or try setting it manually." +#~ msgstr "" +#~ "Impossibile rilevare automaticamente la macchina fotografica.\n" +#~ "Controlla se la tua macchina fotografica è accesa e riprova, o prova a impostarla manualmente." + +#~ msgid "Camera '%1' (%2) is already in list." +#~ msgstr "La macchina fotografica '%1' (%2) è già nell'elenco." + +#~ msgid "Found camera '%1' (%2) and added it to the list." +#~ msgstr "Trovata la macchina fotografica '%1' (%2) e aggiunta all'elenco." + +#~ msgid "Album Settings" +#~ msgstr "Impostazioni degli album" + +#~ msgid "Tool Tip" +#~ msgstr "Suggerimento" + +#~ msgid "Album Items Tool Tip Settings" +#~ msgstr "Impostazioni dei suggerimenti per gli elementi degli album" + +#~ msgid "Embedded Image Information Management" +#~ msgstr "Gestione delle informazioni incorporate nelle immagini" + +#~ msgid "Identity" +#~ msgstr "Identità" + +#~ msgid "Default IPTC identity information" +#~ msgstr "Informazioni predefinite IPTC sull'identità" + +#~ msgid "Collections" +#~ msgstr "Raccolte" + +#~ msgid "Album Collections" +#~ msgstr "Raccolte di album" + +#~ msgid "Mime Types" +#~ msgstr "Tipi MIME" + +#~ msgid "File (MIME) Types Settings" +#~ msgstr "Impostazioni dei tipi di file (MIME)" + +#~ msgid "Image Editor" +#~ msgstr "Editor delle immagini" + +#~ msgid "Image Editor General Settings" +#~ msgstr "Impostazioni generali dell'editor di immagini" + +#~ msgid "Image Editor Color Management" +#~ msgstr "Gestione del colore dell'editor di immagini" + +#~ msgid "Image Editor Plug-in Settings" +#~ msgstr "Impostazioni dei plugin dell'editor di immagini" + +#~ msgid "Kipi Plugins" +#~ msgstr "Plugin di Kipi" + +#~ msgid "Main Interface Plug-in Settings" +#~ msgstr "Impostazioni dei plugin dell'interfaccia principale" + +#~ msgid "Cameras" +#~ msgstr "Macchine fotografiche" + +#~ msgid "Camera Settings" +#~ msgstr "Impostazioni delle macchine fotografiche" + +#~ msgid "Miscellaneous Settings" +#~ msgstr "Impostazioni varie" + +#~ msgid "" +#~ "The Exif auto-rotate thumbnails option has been changed.\n" +#~ "Do you want to rebuild all albums items thumbnails now?\n" +#~ "\n" +#~ "Note: thumbnail processing can take a while! You can start this job later using \"Tools\" menu." +#~ msgstr "" +#~ "L'opzione di rotazione automatica EXIF delle miniature è stata cambiata.\n" +#~ "Vuoi ricostruire tutte le miniature degli elementi degli album adesso?\n" +#~ "\n" +#~ "Nota: per l'elaborazione delle miniature può volerci un po' di tempo. Puoi avviare questo lavoro più tardi attraverso il menu \"Strumenti\"." + +#~ msgid "Album &Library Path" +#~ msgstr "Percorso della &libreria degli album" + +#~ msgid "

          Here you can set the main path to the digiKam album library in your computer.

          Write access is required for this path and do not use a remote path here, like an NFS mounted file system." +#~ msgstr "

          Qui puoi impostare il percorso principale alla libreria degli album di digiKam sul tuo computer.

          È richiesto accesso in scrittura per questo percorso, e non devi usare un percorso remoto come un filesystem NFS." + +#~ msgid "Thumbnails" +#~ msgstr "Miniature" + +#~ msgid "Show file &name" +#~ msgstr "Mostra il &nome del file" + +#~ msgid "

          Set this option to show file name below image thumbnail." +#~ msgstr "

          Abilita questa opzione per mostrare il nome del file sotto la miniatura dell'immagine." + +#~ msgid "Show file si&ze" +#~ msgstr "Mostra la &dimensione del file" + +#~ msgid "

          Set this option to show file size below image thumbnail." +#~ msgstr "

          Abilita questa opzione per mostrare la dimensione del file sotto la miniatura dell'immagine." + +#~ msgid "Show file creation &date" +#~ msgstr "Mostra la d&ata di creazione del file" + +#~ msgid "

          Set this option to show file creation date below image thumbnail." +#~ msgstr "

          Abilita questa opzione per mostrare la data di creazione del file sotto la miniatura dell'immagine." + +#~ msgid "Show file &modification date" +#~ msgstr "Mostra la data di &modifica del file" + +#~ msgid "

          Set this option to show file modification date below image thumbnail." +#~ msgstr "

          Abilita questa opzione per mostrare la data di modifica del file sotto la miniatura dell'immagine." + +#~ msgid "Show digiKam &comments" +#~ msgstr "Mostra i &commenti di digiKam" + +#~ msgid "

          Set this option to show digiKam comments below image thumbnail." +#~ msgstr "

          Abilita questa opzione per mostrare i commenti di digiKam sotto la miniatura dell'immagine." + +#~ msgid "Show digiKam &tags" +#~ msgstr "Mostra i &tag di digiKam" + +#~ msgid "

          Set this option to show digiKam tags below image thumbnail." +#~ msgstr "

          Abilita questa opzione per mostrare i tag di digiKam sotto la miniatura dell'immagine." + +#~ msgid "Show digiKam &rating" +#~ msgstr "Mostra &voto di digiKam" + +#~ msgid "

          Set this option to show digiKam rating below image thumbnail." +#~ msgstr "

          Abilita questa opzione per mostrare il voto di digiKam sotto la miniatura dell'immagine." + +#~ msgid "Show ima&ge dimensions (warning: slow)" +#~ msgstr "Mostra le dimensioni dell'imma&gine (Attenzione: lento)" + +#~ msgid "

          Set this option to show picture size in pixels below image thumbnail." +#~ msgstr "

          Abilita questa opzione per mostrare le dimensioni dell'immagine in pixel sotto la miniatura dell'immagine." + +#~ msgid "Click action:" +#~ msgstr "Azione su clic:" + +#~ msgid "Show embedded preview" +#~ msgstr "Mostra anteprima incorporata" + +#~ msgid "Start image editor" +#~ msgstr "Avvia l'editor di immagini" + +#~ msgid "

          Select here the right action to do when you right click with mouse button on an image thumbnail." +#~ msgstr "

          Seleziona qui l'azione da effettuare quando fai clic destro con il mouse sulla miniatura di un'immagine." + +#~ msgid "Sorry; cannot use home directory as albums library." +#~ msgstr "Spiacente; non si può usare la cartella Home come libreria degli album." + +#~ msgid "Toggle All" +#~ msgstr "Commuta tutti" + +#~ msgid "

          You can set here the list of plugins which must be enabled/disabled for the future digiKam image editor sessions.

          Note: the core image plugin cannot be disabled." +#~ msgstr "

          Qui puoi impostare l'elenco dei plugin che devono essere attivati/disattivati per le sessioni future dell'editor delle immagini di digiKam.

          Nota: il plugin delle immagini centrale non può essere disattivato." + +#~ msgid "Plugins found: %1" +#~ msgstr "Plugin trovati: %1" + +#~ msgid "Color Management Policy" +#~ msgstr "Linee guida della gestione del colore" + +#~ msgid "Enable Color Management" +#~ msgstr "Abilita la gestione del colore" + +#~ msgid "

          • Checked: Color Management is enabled
          • Unchecked: Color Management is disabled
          " +#~ msgstr "
          • Segnato: la gestione del colore è abilitata
          • Non segnato: la gestione del colore è disabilitata
          " + +#~ msgid "Behaviour" +#~ msgstr "Comportamento" + +#~ msgid "Apply when open an image in Image Editor" +#~ msgstr "Applica all'apertura di un'immagine nell'editor" + +#~ msgid "

          If this option is selected, digiKam applies the Workspace default color profile to an image without asking when this has no embedded profile, or the embedded profile is not the same as the workspace profile.

          " +#~ msgstr "

          Se questa opzione è selezionata, digiKam applica senza chiedere conferma il profilo dei colori predefinito dello spazio di lavoro a un'immagine che non ne abbia uno incorporato, o se il profilo incorporato non è lo stesso dello spazio di lavoro.

          " + +#~ msgid "Ask when open an image in Image Editor" +#~ msgstr "Chiedi quando si apre un'immagine nell'editor" + +#~ msgid "

          If this option is selected, digiKam asks to the user before it applies the Workspace default color profile to an image which has no embedded profile or, if the image has an embbeded profile, this is not the same as the workspace profile.

          " +#~ msgstr "

          Se questa opzione è selezionata, digiKam chiede conferma all'utente prima di applicare il profilo dei colori predefinito dello spazio di lavoro a un'immagine che non ne abbia uno incorporato, o se il profilo incorporato non è lo stesso dello spazio di lavoro.

          " + +#~ msgid "Launch Color Management plugin with RAW files" +#~ msgstr "Avvia il plugin di gestione del colore con i file grezzi" + +#~ msgid "Enable this option if you want to lauch the color management image plugin when a RAW file is loaded in editor." +#~ msgstr "Abilita questa opzione se vuoi avviare il plugin di gestione del colore quando l'editor carica un file grezzo." + +#~ msgid "Color Profiles Directory" +#~ msgstr "Cartella dei profili dei colori" + +#~ msgid "

          Default path to the color profiles folder. You must store all your color profiles in this directory.

          " +#~ msgstr "

          Percorso predefinito alla cartella dei profili dei colori. Devi salvare tutti i tuoi profili dei colori in questa cartella.

          " + +#~ msgid "ICC Profiles Settings" +#~ msgstr "Impostazioni dei profili ICC" + +#~ msgid "Use color managed view (warning: slow)" +#~ msgstr "Usa la vista di gestione dei colori (attenzione: lenta)" + +#~ msgid "

          Turn on this option if you want to use your Monitor Color Profile to show your pictures in Image Editor window with a color correction adapted to your monitor. Warning: this option can take a while to render pictures on the screen, especially with a slow computer.

          " +#~ msgstr "

          Attiva questa opzione se vuoi usare il Profilo dei colori del monitor per visualizzare le immagini nella finestra dell'editor con una correzione del colore adattata al tuo monitor. Attenzione: questa opzione può prendere un po' di tempo per rendere le immagini sullo schermo, specialmente con un computer lento.

          " + +#~ msgid "Monitor:" +#~ msgstr "Monitor:" + +#~ msgid "

          Select here the color profile for your monitor. You need to toggle on Use color managed view option to use this profile.

          " +#~ msgstr "

          Seleziona qui il profilo dei colori del monitor. Devi attivare l'opzione Usa la vista di gestione dei colori per usare questo profilo.

          " + +#~ msgid "

          You can use this button to get more detailed information about the selected monitor profile.

          " +#~ msgstr "

          Puoi usare questo pulsante per avere maggiori informazioni sul profilo di monitor selezionato.

          " + +#~ msgid "Workspace:" +#~ msgstr "Spazio di lavoro:" + +#~ msgid "

          All the images will be converted to the color space of this profile, so you must select a profile appropriate for edition purpose.

          These color profiles are device independent.

          " +#~ msgstr "

          Tutte le immagini saranno convertite nello spazio dei colori di questo profilo, perciò devi selezionare un profilo appropriato per gli obbiettivi del tuo lavoro.

          Questi profili dei colori non dipendono dal dispositivo specifico.

          " + +#~ msgid "

          You can use this button to get more detailed information about the selected workspace profile.

          " +#~ msgstr "

          Puoi usare questo pulsante per avere maggiori informazioni sul profilo dello spazio di lavoro selezionato.

          " + +#~ msgid "Input:" +#~ msgstr "Input:" + +#~ msgid "

          You must select the profile for your input device (usually, your camera, scanner...)

          " +#~ msgstr "

          Devi selezionare il profilo del dispositivo di input (normalmente, la macchina fotografica o lo scanner).

          " + +#~ msgid "

          You can use this button to get more detailed information about the selected input profile.

          " +#~ msgstr "

          Puoi usare questo pulsante per avere maggiori informazioni sul profilo di input selezionato.

          " + +#~ msgid "Soft proof:" +#~ msgstr "Prova software:" + +#~ msgid "

          You must select the profile for your output device (usually, your printer). This profile will be used to do a soft proof, so you will be able to preview how an image will be rendered in an output device.

          " +#~ msgstr "

          Devi selezionare il profilo per il tuo dispositivo di output (di solito la stampante). Questo profilo sarà usato per fare una prova software, per poter vedere come un'immagine verrà resa dal dispositivo di output.

          " + +#~ msgid "

          You can use this button to get more detailed information about the selected soft proof profile.

          " +#~ msgstr "

          Puoi usare questo pulsante per avere maggiori informazioni sul profilo di prova software selezionato.

          " + +#~ msgid "Advanced Settings" +#~ msgstr "Impostazioni avanzate" + +#~ msgid "Use black point compensation" +#~ msgstr "Usa compensazione del punto nero" + +#~ msgid "

          Black Point Compensation is a way to make adjustments between the maximum black levels of digital files and the black capabilities of various digital devices.

          " +#~ msgstr "

          La compensazione del punto nero è un modo di effettuare delle regolazioni tra i livelli massimi del nero dei file digitali e le capacità di nero dei vari dispositivi digitali.

          " + +#~ msgid "Rendering Intents:" +#~ msgstr "Obiettivi di resa:" + +#~ msgid "
          • Perceptual intent causes the full gamut of the image to be compressed or expanded to fill the gamut of the destination device, so that gray balance is preserved but colorimetric accuracy may not be preserved.

            In other words, if certain colors in an image fall outside of the range of colors that the output device can render, the picture intent will cause all the colors in the image to be adjusted so that the every color in the image falls within the range that can be rendered and so that the relationship between colors is preserved as much as possible.

            This intent is most suitable for display of photographs and images, and is the default intent.

          • Absolute Colorimetric intent causes any colors that fall outside the range that the output device can render are adjusted to the closest color that can be rendered, while all other colors are left unchanged.

            This intent preserves the white point and is most suitable for spot colors (Pantone, TruMatch, logo colors, ...).

          • Relative Colorimetric intent is defined such that any colors that fall outside the range that the output device can render are adjusted to the closest color that can be rendered, while all other colors are left unchanged. Proof intent does not preserve the white point.

          • Saturation intent preserves the saturation of colors in the image at the possible expense of hue and lightness.

            Implementation of this intent remains somewhat problematic, and the ICC is still working on methods to achieve the desired effects.

            This intent is most suitable for business graphics such as charts, where it is more important that the colors be vivid and contrast well with each other rather than a specific color.

          " +#~ msgstr "
          • L'obiettivo percettuale fa comprimere o espandere tutto il gamut dell'immagine alle dimensioni del gamut del supporto di destinazione, in modo che il bilanciamento del grigio sia mantenuto, ma l'accuratezza colorimetrica potrebbe non esserlo.

            Ciò vuol dire che se certi colori di un'immagine sono al di fuori dei colori che il dispositivo di output può rendere, l'obiettivo farà regolare tutti i colori dell'immagine in modo che ogni colore sia all'interno dei colori rendibili e che le relazioni tra i colori siano mantenute per quanto possibile.

            Questo obiettivo è adatto soprattutto per la visualizzazione di fotografie e immagini, ed è l'obiettivo predefinito.

          • L'obiettivo colorimetrico assoluto fa regolare ogni colore che sia al di fuori di quelli rendibili dal dispositivo di output al colore rendibile più vicino, mentre tutti gli altri colori vengono mantenuti inalterati.

            Questo obiettivo mantiene il punto bianco ed è adatto soprattutto per le tinte piatte (Pantone, TruMatch, colori di loghi, ...).

          • L'obiettivo colorimetrico relativo è definito in modo che tutti i colori non rendibili dal dispositivo di output siano regolati al colore rendibile più vicino, mentre tutti gli altri sono mantenuti inalterati. L'obiettivo di prova non mantiene il punto bianco.

          • L'obiettivo di saturazione mantiene la saturazione dei colori nell'immagine, se necessario a spese della tonalità e della luminosità.

            L'implementazione di questo obiettivo rimane un po' problematica, e l'ICC sta ancora lavorando sui metodi per ottenere gli effetti desiderati.

            Questo intento è adatto soprattutto per la grafica professionale, come i grafici, dove è più importante che i colori siano vividi e in netto contrasto tra di loro.

          " + +#~ msgid "

          You must set a correct default path for your ICC color profiles files.

          " +#~ msgstr "

          Devi selezionare un percorso predefinito valido per i file dei profili dei colori ICC.

          " + +#~ msgid "

          Sorry, there is no ICC profiles files in " +#~ msgstr "

          Spiacente, non ci sono file di profilo ICC in " + +#~ msgid "

          " +#~ msgstr "

          " + +#~ msgid "

          The following profile is invalid:

          " +#~ msgstr "

          Il profilo seguente non è valido:

          " + +#~ msgid "Invalid Profile" +#~ msgstr "Profilo non valido" + +#~ msgid "Invalid color profile has been removed" +#~ msgstr "È stato rimosso un profilo di colore non valido" + +#~ msgid "

          digiKam has failed to remove the invalid color profile

          You have to do it manually

          " +#~ msgstr "

          digiKam non è riuscito a rimuovere il profilo di colore non valido.

          Devi farlo manualmente.

          " + +#~ msgid "Sorry, there is not any selected profile" +#~ msgstr "Spiacente, non c'è nessun profilo selezionato" + +#~ msgid "Show album items toolti&ps" +#~ msgstr "Mostra i &suggerimenti degli elementi degli album" + +#~ msgid "

          Set this option to display image information when the mouse is hovered over an album item." +#~ msgstr "

          Abilita questa opzione per visualizzare informazioni sulle immagini quando il mouse passa sopra un elemento di un album." + +#~ msgid "File/Image Information" +#~ msgstr "Informazioni sul file e sull'immagine" + +#~ msgid "Show file name" +#~ msgstr "Mostra il nome del file" + +#~ msgid "

          Set this option to display image file name." +#~ msgstr "

          Abilita questa opzione per visualizzare il nome del file dell'immagine." + +#~ msgid "Show file date" +#~ msgstr "Mostra la data del file" + +#~ msgid "

          Set this option to display image file date." +#~ msgstr "

          Abilita questa opzione per visualizzare la data del file dell'immagine." + +#~ msgid "Show file size" +#~ msgstr "Mostra la dimensione del file" + +#~ msgid "

          Set this option to display image file size." +#~ msgstr "

          Abilita questa opzione per visualizzare la dimensione del file dell'immagine." + +#~ msgid "Show image type" +#~ msgstr "Mostra tipo dell'immagine" + +#~ msgid "

          Set this option to display image type." +#~ msgstr "

          Abilita questa opzione per visualizzare il tipo dell'immagine." + +#~ msgid "Show image dimensions" +#~ msgstr "Mostra le dimensioni dell'immagine" + +#~ msgid "

          Set this option to display image dimensions in pixels." +#~ msgstr "

          Abilita questa opzione per visualizzare le dimensioni dell'immagine in pixel." + +#~ msgid "Show camera make and model" +#~ msgstr "Mostra produttore e modello della macchina fotografica" + +#~ msgid "

          Set this option to display the camera make and model with which the picture has been taken." +#~ msgstr "

          Abilita questa opzione per visualizzare il produttore e il modello della macchina fotografica con cui la foto è stata scattata." + +#~ msgid "Show camera date" +#~ msgstr "Mostra la data della macchina fotografica" + +#~ msgid "

          Set this option to display the date when the picture was taken." +#~ msgstr "

          Abilita questa opzione per visualizzare la data dello scatto dell'immagine." + +#~ msgid "Show camera aperture and focal" +#~ msgstr "Mostra il diaframma e il fuoco della macchina fotografica" + +#~ msgid "

          Set this option to display camera aperture and focal settings used to take the picture." +#~ msgstr "

          Abilita questa opzione per mostrare le impostazioni del diaframma e del fuoco usati per scattare l'immagine." + +#~ msgid "Show camera exposure and sensitivity" +#~ msgstr "Mostra l'esposizione e la sensibilità della macchina fotografica" + +#~ msgid "

          Set this option to display camera exposure and sensitivity used to take the picture." +#~ msgstr "

          Abilita questa opzione per mostrare l'esposizione e la sensibilità usate per scattare l'immagine." + +#~ msgid "Show camera mode and program" +#~ msgstr "Mostra modalità e programma della macchina fotografica" + +#~ msgid "

          Set this option to display camera mode and program used to take the picture." +#~ msgstr "

          Abilita questa opzione per mostrare la modalità e il programma usati per scattare l'immagine." + +#~ msgid "Show camera flash settings" +#~ msgstr "Mostra le impostazioni del flash della macchina fotografica" + +#~ msgid "

          Set this option to display camera flash settings used to take the picture." +#~ msgstr "

          Abilita questa opzione per visualizzare le impostazioni del flash della macchina fotografica usate per scattare l'immagine." + +#~ msgid "Show camera white balance settings" +#~ msgstr "Mostra le impostazioni di bilanciamento del bianco della macchina fotografica" + +#~ msgid "

          Set this option to display camera white balance settings used to take the picture." +#~ msgstr "

          Abilita questa opzione per mostrare le impostazioni di bilanciamento del bianco della macchina fotografica usate per scattare la foto." + +#~ msgid "digiKam Information" +#~ msgstr "Informazioni di digiKam" + +#~ msgid "Show album name" +#~ msgstr "Mostra il nome dell'album" + +#~ msgid "

          Set this option to display the album name." +#~ msgstr "

          Abilita questa opzione per mostrare il nome dell'album." + +#~ msgid "Show picture comments" +#~ msgstr "Mostra i commenti delle immagini" + +#~ msgid "

          Set this option to display picture comments." +#~ msgstr "

          Abilita questa opzione per mostrare i commenti delle immagini." + +#~ msgid "Show picture tags" +#~ msgstr "Mostra i tag delle immagini" + +#~ msgid "

          Set this option to display picture tags." +#~ msgstr "

          Abilita questa opzione per mostrare i tag delle immagini." + +#~ msgid "Show picture rating" +#~ msgstr "Mostra voto delle immagini" + +#~ msgid "

          Set this option to display the picture rating." +#~ msgstr "

          Abilita questa opzione per mostrare il voto delle immagini." + +#~ msgid "Camera Configuration" +#~ msgstr "Configurazione della macchina fotografica" + +#~ msgid "Mounted Camera" +#~ msgstr "Macchina fotografica montata" + +#~ msgid "Camera List" +#~ msgstr "Elenco delle macchine fotografiche" + +#~ msgid "

          Select here the camera name that you want to use. All default settings on the right panel will be set automatically.

          This list has been generated using the gphoto2 library installed on your computer.

          " +#~ msgstr "

          Seleziona qui il nome della macchina fotografica che vuoi usare. Tutte le impostazioni predefinite nel pannello a destra saranno automaticamente impostate.

          Questo elenco è stato generato usando la libreria gphoto2 installata sul tuo computer.

          " + +#~ msgid "Camera Title" +#~ msgstr "Titolo della macchina fotografica" + +#~ msgid "

          Set here the name used in digiKam interface to identify this camera.

          " +#~ msgstr "

          Imposta qui il nome usato nell'interfaccia di digiKam per identificare questa macchina fotografica.

          " + +#~ msgid "Camera Port Type" +#~ msgstr "Tipo di porta della macchina fotografica" + +#~ msgid "USB" +#~ msgstr "USB" + +#~ msgid "

          Select this option if your camera is connected to your computer using an USB cable.

          " +#~ msgstr "

          Seleziona questa opzione se la macchina fotografica è collegata al tuo computer con un cavo USB.

          " + +#~ msgid "Serial" +#~ msgstr "Seriale" + +#~ msgid "

          Select this option if your camera is connected to your computer using a serial cable.

          " +#~ msgstr "

          Seleziona questa opzione se la macchina fotografica è collegata al tuo computer con un cavo seriale.

          " + +#~ msgid "Camera Port Path" +#~ msgstr "Percorso alla porta della macchina fotografica" + +#~ msgid "Note: only for serial port camera" +#~ msgstr "Nota: solo per macchine fotografiche connesse a porta seriale" + +#~ msgid "

          Select here the serial port to use on your computer. This option is only required if you use a serial camera.

          " +#~ msgstr "

          Seleziona qui la porta seriale da usare sul tuo computer. Questa opzione è necessaria solo se usi una macchina fotografica connessa alla porta seriale.

          " + +#~ msgid "Camera Mount Path" +#~ msgstr "Percorso di montaggio della macchina fotografica" + +#~ msgid "Note: only for USB/IEEE mass storage camera" +#~ msgstr "Nota: solo per macchine fotografiche a memoria di massa USB/IEEE" + +#~ msgid "

          Set here the mount path to use on your computer. This option is only required if you use an USB Mass Storage camera.

          " +#~ msgstr "

          Seleziona qui il percorso di montaggio da usare sul tuo computer. Questa opzione è necessaria solo se usi una macchina fotografica con memoria di massa USB.

          " + +#~ msgid "

          To set an USB Mass Storage camera
          (which appears like a removable drive), please
          use %1 from camera list.

          " +#~ msgstr "

          Per configurare una macchina fotografica a memoria di massa USB
          (che si comporta come un disco rimovibile),
          usa %1 dall'elenco delle macchine fotografiche.

          " + +#~ msgid "

          To set a Generic PTP USB Device
          (which use Picture Transfer Protocol), please
          use %1 from camera list.

          " +#~ msgstr "

          Per configurare un dispositivo generico PTP USB
          (che usa il protocollo di trasferimento immagini PTP),
          usa %1 dall'elenco delle macchine fotografiche.

          " + +#~ msgid "

          A complete list of camera settings to use is
          available at this url.

          " +#~ msgstr "

          Un elenco completo delle impostazioni della macchina fotografica è
          disponibile a questo indirizzo.

          " + +#~ msgid "The image will not fit on the page, what do you want to do?" +#~ msgstr "L'immagine non sta nella pagina, cosa vuoi fare?" + +#~ msgid "Shrink" +#~ msgstr "Restringi" + +#~ msgid "Image Settings" +#~ msgstr "Impostazioni dell'immagine" + +#~ msgid "Image position:" +#~ msgstr "Posizione dell'immagine:" + +#~ msgid "Top-Left" +#~ msgstr "In alto a sinistra" + +#~ msgid "Top-Central" +#~ msgstr "In alto in centro" + +#~ msgid "Top-Right" +#~ msgstr "In alto a destra" + +#~ msgid "Central-Left" +#~ msgstr "Al centro a sinistra" + +#~ msgid "Central" +#~ msgstr "Centrato" + +#~ msgid "Central-Right" +#~ msgstr "Al centro a destra" + +#~ msgid "Bottom-Left" +#~ msgstr "In basso a sinistra" + +#~ msgid "Bottom-Central" +#~ msgstr "In basso al centro" + +#~ msgid "Bottom-Right" +#~ msgstr "In basso a destra" + +#~ msgid "Print fi&lename below image" +#~ msgstr "Stampa il nome fi&le sotto l'immagine" + +#~ msgid "Print image in &black and white" +#~ msgstr "Stampa l'immagine in &bianco e nero" + +#~ msgid "&Auto-rotate page" +#~ msgstr "Ruota &automaticamente la pagina" + +#~ msgid "Use Color Management for Printing" +#~ msgstr "Usa la gestione dei colori per la stampa" + +#~ msgid "Settings..." +#~ msgstr "Impostazioni..." + +#~ msgid "Scaling" +#~ msgstr "Riscalamento" + +#~ msgid "Scale image to &fit" +#~ msgstr "A&datta l'immagine" + +#~ msgid "Print e&xact size: " +#~ msgstr "Stampa in dimensioni e&satte: " + +#~ msgid "Millimeters" +#~ msgstr "Millimetri" + +#~ msgid "Centimeters" +#~ msgstr "Centimetri" + +#~ msgid "Inches" +#~ msgstr "Pollici" + +#~ msgid "Keep ratio" +#~ msgstr "Mantieni le proporzioni" + +#~ msgid "

          Color Management is disabled.

          You can enable it now by clicking on the \"Settings\" button.

          " +#~ msgstr "

          La gestione del colore è disabilitata

          Puoi abilitarla ora facendo clic sul pulsante \"Impostazioni\".

          " + +#~ msgid "Resize Image" +#~ msgstr "Ridimensiona l'immagine" + +#~ msgid "Width (%):" +#~ msgstr "Larghezza (%):" + +#~ msgid "Height (%):" +#~ msgstr "Altezza (%):" + +#~ msgid "Maintain aspect ratio" +#~ msgstr "Mantieni le proporzioni" + +#~ msgid "Convert" +#~ msgstr "Converti" + +#~ msgid "Apply the default color workspace profile to the image" +#~ msgstr "Applica il profilo dei colori dello spazio di lavoro predefinito all'immagine" + +#~ msgid "Do Nothing" +#~ msgstr "Non fare nulla" + +#~ msgid "Do not change the image" +#~ msgstr "Non cambiare l'immagine" + +#~ msgid "Assign" +#~ msgstr "Assegna" + +#~ msgid "Embed only the color workspace profile to the image without changing the image" +#~ msgstr "Incorpora e basta lo spazio dei colori dello spazio di lavoro nell'immagine, senza cambiarla" + +#~ msgid "Original Picture:" +#~ msgstr "Immagine originale:" + +#~ msgid "Corrected Picture:" +#~ msgstr "Immagine corretta:" + +#~ msgid "Current workspace color profile:" +#~ msgstr "Profilo dei colori dello spazio di lavoro attuale:" + +#~ msgid "Embedded color profile:" +#~ msgstr "Profilo dei colori incorporato:" + +#~ msgid "

          This picture has not been assigned any color profile.

          Do you want to convert it to your workspace color profile?

          " +#~ msgstr "

          A questa immagine non è stato assegnato nessun profilo dei colori.

          Vuoi convertirla nel tuo spazio dei colori di lavoro?

          " + +#~ msgid "

          This picture has been assigned a color profile that does not match with your default workspace color profile.

          Do you want to convert it to your workspace color profile?

          " +#~ msgstr "

          A questa immagine è assegnato un profilo dei colori che non corrisponde al tuo profilo dei colori predefinito per lo spazio di lavoro.

          Vuoi convertirla nel tuo spazio dei colori di lavoro?

          " + +#~ msgid "unknown" +#~ msgstr "sconosciuto" + +#~ msgid "Rotate 90 Degrees" +#~ msgstr "Ruota di 90 gradi" + +#~ msgid "Rotate 180 Degrees" +#~ msgstr "Ruota di 180 gradi" + +#~ msgid "Rotate 270 Degrees" +#~ msgstr "Ruota di 270 gradi" + +#~ msgid "Flip Horizontal" +#~ msgstr "Ribalta orizzontalmente" + +#~ msgid "Flip Vertical" +#~ msgstr "Ribalta verticalmente" + +#~ msgid "Brightness,Contrast,Gamma" +#~ msgstr "Luminosità, contrasto, gamma" + +#~ msgid "Cannot find the ICC color-space profile file. ICC profiles path seems to be invalid. No color transform will be applied. Please check the color management configuration in digiKam's setup to verify the ICC path." +#~ msgstr "Il percorso dei profili ICC non sembra essere valido. Non sarà effettuata nessuna trasformazione dei colori. Controlla la configurazione della gestione del colore nella configurazione di digiKam per verificare il percorso ICC." + +#~ msgid "" +#~ "_n: 1 Image Plugin Loaded\n" +#~ "%n Image Plugins Loaded" +#~ msgstr "" +#~ "Caricato un plugin per le immagini\n" +#~ "Caricati %n plugin per le immagini" + +#~ msgid "&First" +#~ msgstr "&Primo" + +#~ msgid "&Last" +#~ msgstr "&Ultimo" + +#~ msgid "Print Image..." +#~ msgstr "Stampa immagine..." + +#~ msgid "Zoom &AutoFit" +#~ msgstr "Ingrandimento &autoadattativo" + +#~ msgid "Fullscreen" +#~ msgstr "A tutto schermo" + +#~ msgid "Under-Exposure Indicator" +#~ msgstr "Indicatore di sottoesposizione" + +#~ msgid "Over-Exposure Indicator" +#~ msgstr "Indicatore di sovraesposizione" + +#~ msgid "Color Managed View" +#~ msgstr "Vista di gestione del colore" + +#~ msgid "&Resize..." +#~ msgstr "&Ridimensiona..." + +#~ msgid "Crop" +#~ msgstr "Taglia" + +#~ msgid "This option can be used to crop the image. Select a region of the image to enable this action." +#~ msgstr "Questa opzione può essere usata per ritagliare l'immagine. Seleziona una regione dell'immagine per abilitare questa azione." + +#~ msgid "Flip" +#~ msgstr "Ribalta" + +#~ msgid "Horizontally" +#~ msgstr "Orizzontalmente" + +#~ msgid "Vertically" +#~ msgstr "Verticalmente" + +#~ msgid "&Rotate" +#~ msgstr "&Ruota" + +#~ msgid "90 Degrees" +#~ msgstr "90 gradi" + +#~ msgid "180 Degrees" +#~ msgstr "180 gradi" + +#~ msgid "270 Degrees" +#~ msgstr "270 gradi" + +#~ msgid "Image Plugins Handbooks" +#~ msgstr "Manuali dei plugin per le immagini" + +#~ msgid "Exit Fullscreen mode" +#~ msgstr "Esci dalla modalità a tutto schermo" + +#~ msgid "Exit out of the fullscreen mode" +#~ msgstr "Esci dalla modalità a tutto schermo" + +#~ msgid "Load Next Image" +#~ msgstr "Carica l'immagine successiva" + +#~ msgid "Load Previous Image" +#~ msgstr "Carica l'immagine precedente" + +#~ msgid "Zoom In" +#~ msgstr "Ingrandisci" + +#~ msgid "Zoom in on Image" +#~ msgstr "Ingrandisci l'immagine" + +#~ msgid "Zoom Out" +#~ msgstr "Rimpicciolisci" + +#~ msgid "Zoom out of Image" +#~ msgstr "Rimpicciolisci l'immagine" + +#~ msgid "Print %1" +#~ msgstr "Stampa %1" + +#~ msgid "Failed to print file: '%1'" +#~ msgstr "Stampa del file non riuscita: '%1'" + +#~ msgid "Zoom: " +#~ msgstr "Ingrandisci: " + +#~ msgid "" +#~ "The image '%1' has been modified.\n" +#~ "Do you want to save it?" +#~ msgstr "" +#~ "L'immagine '%1' è stata modificata.\n" +#~ "Vuoi salvarla?" + +#~ msgid "Please wait while the image is being saved..." +#~ msgstr "Attendi il salvataggio dell'immagine..." + +#~ msgid "Loading: " +#~ msgstr "Caricamento: " + +#~ msgid "Failed to load image \"%1\"" +#~ msgstr "Caricamento dell'immagine \"%1\" non riuscito" + +#~ msgid "Saving: " +#~ msgstr "Salvataggio: " + +#~ msgid "" +#~ "Failed to save file\n" +#~ "\"%1\"\n" +#~ "to\n" +#~ "\"%2\"." +#~ msgstr "" +#~ "Impossibile salvare il file\n" +#~ "\"%1\"\n" +#~ "su\n" +#~ "\"%2\"." + +#~ msgid "New Image File Name" +#~ msgstr "Nuovo nome file dell'immagine" + +#~ msgid "Target image file format \"%1\" unsupported." +#~ msgstr "Formato di file dell'immagine di destinazione \"%1\" non supportato." + +#~ msgid "" +#~ "Failed to save file\n" +#~ "\"%1\" to\n" +#~ "\"%2\"." +#~ msgstr "" +#~ "Impossibile salvare il file\n" +#~ "\"%1\" in\n" +#~ "\"%2\"." + +#~ msgid "A file named \"%1\" already exists. Are you sure you want to overwrite it?" +#~ msgstr "Esiste già un file di nome \"%1\". Sei sicuro di volerlo sovrascrivere?" + +#~ msgid "Overwrite File?" +#~ msgstr "Sovrascrivere il file?" + +#~ msgid "Overwrite" +#~ msgstr "Sovrascrivi" + +#~ msgid "You do not have write permissions for the file named \"%1\". Are you sure you want to overwrite it?" +#~ msgstr "Non hai il permesso di scrivere sul file \"%1\". Sei sicuro di volerlo sovrascrivere?" + +#~ msgid "Failed to overwrite original file" +#~ msgstr "Sovrascrittura del file originale non riuscita" + +#~ msgid "Error Saving File" +#~ msgstr "Errore nel salvataggio del file" + +#~ msgid "Color Managed View is enabled" +#~ msgstr "La vista di gestione del colore è abilitata" + +#~ msgid "Color Managed View is disabled" +#~ msgstr "La vista di gestione del colore è disabilitata" + +#~ msgid "Under-Exposure indicator is enabled" +#~ msgstr "L'indicatore di sottoesposizione è abilitato" + +#~ msgid "Under-Exposure indicator is disabled" +#~ msgstr "L'indicatore di sottoesposizione è disabilitato" + +#~ msgid "Over-Exposure indicator is enabled" +#~ msgstr "L'indicatore di sovraesposizione è abilitato" + +#~ msgid "Over-Exposure indicator is disabled" +#~ msgstr "L'indicatore di sovraesposizione è disabilitato" + +#~ msgid "Delete File Permanently" +#~ msgstr "Elimina permanentemente il file" + +#~ msgid "digiKam Image Editor - %1" +#~ msgstr "Editor di immagini di digiKam - %1" + +#~ msgid "" +#~ "There is no image to show in the current album.\n" +#~ "The image editor will be closed." +#~ msgstr "" +#~ "Non ci sono immagini da far vedere nell'album attuale.\n" +#~ "L'editor delle immagini sarà chiuso." + +#~ msgid "No Image in Current Album" +#~ msgstr "Nessuna immagine nell'album attuale" + +#~ msgid "Camera Information" +#~ msgstr "Informazioni sulla macchina fotografica" + +#~ msgid "Summary" +#~ msgstr "Riepilogo" + +#~ msgid "Camera Summary" +#~ msgstr "Riepilogo della macchina fotografica" + +#~ msgid "Manual" +#~ msgstr "Manuale" + +#~ msgid "Camera Manual" +#~ msgstr "Manuale della macchina fotografica" + +#~ msgid "About Driver" +#~ msgstr "Informazioni sul driver" + +#~ msgid "Mounted Camera driver for USB/IEEE1394 mass storage cameras and Flash disk card readers.

          " +#~ msgstr "Driver Macchina montata per le macchine fotografiche a memoria di massa USB/IEEE1394 e lettori di schede Flash Disk.

          " + +#~ msgid "Title: %1
          Model: %2
          Port: %3
          Path: %4
          " +#~ msgstr "Titolo: %1
          Modello: %2
          Porta: %3
          Percorso: %4
          " + +#~ msgid "For more information about the Mounted Camera driver, please read the digiKam manual on Supported Digital Still Cameras section." +#~ msgstr "Per maggiori informazioni sul driver Macchina montata, leggi il manuale di digiKam alla sezione Macchine fotografiche digitali supportate." + +#~ msgid "The Mounted Camera driver is a simple interface to a camera disk mounted locally on your system.

          It doesn't use any libgphoto2 drivers.

          To report any problems with this driver, please contact the digiKam team at:

          http://www.digikam.org/?q=contact" +#~ msgstr "Il driver Macchina montata è una semplice interfaccia a un disco di macchina fotografica montato localmente sul tuo filesystem.

          Non usa un driver libgphoto2.

          Per segnalare qualsiasi problema con questo driver, contatta la squadra di digiKam a questo indirizzo:

          http://www.digikam.org/?q=contact" + +#~ msgid "Camera Folders" +#~ msgstr "Cartelle della macchina fotografica" + +#~ msgid "%1 - Select Camera Folder" +#~ msgstr "%1 - Seleziona cartella della macchina fotografica" + +#~ msgid "

          Please select the camera folder where you want to upload the pictures.

          " +#~ msgstr "

          Seleziona la cartella della macchina fotografica dove vuoi caricare le immagini.

          " + +#~ msgid "Camera filenames" +#~ msgstr "Nomi dei file della macchina fotografica" + +#~ msgid "

          Turn on this option to use camera provided image filenames without modifications." +#~ msgstr "

          Attiva questa opzione per usare i nomi dei file delle immagini dati dalla macchina fotografica senza modifiche." + +#~ msgid "Change case to:" +#~ msgstr "Converti lettere in:" + +#~ msgid "Leave as Is" +#~ msgstr "Lascia com'è" + +#~ msgid "Upper" +#~ msgstr "Maiuscolo" + +#~ msgid "Lower" +#~ msgstr "Minuscolo" + +#~ msgid "

          Set the method to use to change the case of image filenames." +#~ msgstr "

          Imposta il metodo usato per cambiare le lettere dei nomi dei file." + +#~ msgid "Customize" +#~ msgstr "Personalizza" + +#~ msgid "

          Turn on this option to customize image filenames during download." +#~ msgstr "

          Attiva questa opzione per personalizzare i nomi dei file delle immagini durante lo scaricamento." + +#~ msgid "Prefix:" +#~ msgstr "Prefisso:" + +#~ msgid "

          Set the prefix which will be prepended to image filenames." +#~ msgstr "

          Imposta qui il prefisso che verrà aggiunto ai nomi dei file delle immagini." + +#~ msgid "Suffix:" +#~ msgstr "Suffisso:" + +#~ msgid "

          Set the suffix which will be postpended to image filenames." +#~ msgstr "

          Imposta qui il suffisso che verrà aggiunto ai nomi dei file delle immagini." + +#~ msgid "Add Date && Time" +#~ msgstr "Aggiungi data e ora" + +#~ msgid "

          Set this option to add the camera provided date and time." +#~ msgstr "

          Abilita questa opzione per aggiungere la data e ora fornita dalla macchina fotografica." + +#~ msgid "Date format:" +#~ msgstr "Formato della data:" + +#~ msgid "ISO" +#~ msgstr "ISO" + +#~ msgid "Full Text" +#~ msgstr "Testo esteso" + +#~ msgid "Local Settings" +#~ msgstr "Impostazioni locali" + +#~ msgid "

          Select your preferred date format used to create new albums. The options available are:

          Standard: the date format that has been used as a standard by digiKam. E.g.: 20060824T142618

          ISO: the date format is in accordance with ISO 8601 (YYYY-MM-DD). E.g.: 2006-08-24T14:26:18

          Full Text: the date format is in a user-readable string. E.g.: Thu Aug 24 14:26:18 2006

          Local Settings: the date format depending on KDE control panel settings.

          Advanced: allows to specify a custom date format.

          " +#~ msgstr "

          Seleziona il tuo formato di data preferito per creare nuovi album. Le opzioni disponibili sono:

          Standard: il formato di data usato come standard da digiKam. Per esempio 20060824T142618

          ISO: il formato di data secondo la specifica ISO 8601 (AAAA-MM-GG). Per esempio, 2006-08-24T14:26:18

          Testo esteso: il formato di data in testo leggibile. Per esempio, Gio 24 Aug 2006, 14:26:18

          Impostazioni locali: il formato di data secondo le impostazioni del pannello di controllo di KDE.

          Avanzate: permette di specificare un formato di data personalizzato.

          " + +#~ msgid "Add Camera Name" +#~ msgstr "Aggiungi nome della macchina fotografica" + +#~ msgid "

          Set this option to add the camera name." +#~ msgstr "

          Abilita questa opzione per aggiungere il nome della macchina fotografica." + +#~ msgid "Add Sequence Number" +#~ msgstr "Aggiungi numero di sequenza" + +#~ msgid "

          Set this option to add a sequence number starting with the index set below." +#~ msgstr "

          Abilita questa opzione per aggiungere un numero di sequenza a partire dall'indice impostato sotto." + +#~ msgid "Start Index:" +#~ msgstr "Indice di partenza:" + +#~ msgid "

          Set the starting index value used to rename picture files with a sequence number." +#~ msgstr "

          Imposta il valore di partenza dell'indice usato per rinominare i file delle immagini con un numero in sequenza." + +#~ msgid "

          Enter the format for date and time.

          Use dd for the day, MM for the month, yyyy for the year, hh for the hour, mm for the minute, ss for the second.

          Examples: yyyyMMddThhmmss for 20060824T142418,
          yyyy-MM-dd hh:mm:ss for 2006-08-24 14:24:18.

          " +#~ msgstr "

          Inserisci il formato per la data e l'ora.

          Usa dd per il giorno, MM per il mese, yyyy per l'anno, hh per l'ora, mm per il minuto, ss per il secondo.

          Esempi: yyyyMMddThhmmss per 20060824T142418,
          yyyy-MM-dd hh:mm:ss per 2006-08-24 14:24:18.

          " + +#~ msgid "Change Date and Time Format" +#~ msgstr "Cambia formato della data e dell'ora" + +#~ msgid "photo" +#~ msgstr "foto" + +#~ msgid "Select Album" +#~ msgstr "Seleziona album" + +#~ msgid "&New Album" +#~ msgstr "&Nuovo album" + +#~ msgid "digiKam Albums" +#~ msgstr "Album di digiKam" + +#~ msgid "Create New Album" +#~ msgstr "Crea nuovo album" + +#~ msgid "New Album Name" +#~ msgstr "Nome del nuovo album" + +#~ msgid "" +#~ "Creating new album in '%1'\n" +#~ "Enter album name:" +#~ msgstr "" +#~ "Creazione di un nuovo album in '%1'\n" +#~ "Inserisci il nome dell'album:" + +#~ msgid "Connecting to camera..." +#~ msgstr "Connessione alla macchina fotografica..." + +#~ msgid "Connection established" +#~ msgstr "Connessione stabilita" + +#~ msgid "Connection failed" +#~ msgstr "Connessione non riuscita" + +#~ msgid "Getting camera information..." +#~ msgstr "Recupero delle informazioni sulla macchina fotografica..." + +#~ msgid "Listing folders..." +#~ msgstr "Elenco delle cartelle..." + +#~ msgid "Listing folders is complete..." +#~ msgstr "Elenco delle cartelle completato..." + +#~ msgid "Listing files in %1..." +#~ msgstr "Elenco dei file in %1..." + +#~ msgid "Failed to list files in %1" +#~ msgstr "Impossibile elencare i file in %1" + +#~ msgid "Listing files in %1 is complete" +#~ msgstr "L'elenco dei file in %1 è completo" + +#~ msgid "Getting thumbnail for %1/%2..." +#~ msgstr "Ottenimento miniature per %1/%2..." + +#~ msgid "Getting EXIF information for %1/%2..." +#~ msgstr "Ottenimento informazioni EXIF per %1/%2..." + +#~ msgid "Downloading file %1..." +#~ msgstr "Scaricamento del file %1..." + +#~ msgid "EXIF rotating file %1..." +#~ msgstr "Rotazione EXIF del file %1..." + +#~ msgid "Setting Metadata tags to file %1..." +#~ msgstr "Impostazione dei dati aggiuntivi per il file %1..." + +#~ msgid "Converting %1 to lossless file format..." +#~ msgstr "Conversione di %1 in formato di file senza perdita..." + +#~ msgid "Retrieving file %1 from camera..." +#~ msgstr "Ottenimento del file %1 dalla macchina fotografica..." + +#~ msgid "Failed to retrieve file %1 from camera" +#~ msgstr "Impossibile ottenere il file %1 dalla macchina fotografica" + +#~ msgid "Uploading file %1 to camera..." +#~ msgstr "Caricamento del file %1 nella macchina fotografica..." + +#~ msgid "Deleting file %1..." +#~ msgstr "Eliminazione del file %1..." + +#~ msgid "Toggle lock file %1..." +#~ msgstr "Commuta blocco del file %1..." + +#~ msgid "Failed to download file \"%1\"." +#~ msgstr "Impossibile scaricare il file \"%1\"." + +#~ msgid " Do you want to continue?" +#~ msgstr " Vuoi continuare?" + +#~ msgid "Failed to upload file \"%1\"." +#~ msgstr "Impossibile caricare il file \"%1\"." + +#~ msgid "Failed to delete file \"%1\"." +#~ msgstr "Impossibile eliminare il file \"%1\"." + +#~ msgid "Failed to toggle lock file \"%1\"." +#~ msgstr "Impossibile commutare il blocco del file %1." + +#~ msgid "Camera \"%1\"" +#~ msgstr "Macchina fotografica \"%1\"" + +#~ msgid "Skipped file %1" +#~ msgstr "File %1 saltato" + +#~ msgid "D&elete" +#~ msgstr "&Elimina" + +#~ msgid "&Download" +#~ msgstr "&Scarica" + +#~ msgid "&Images" +#~ msgstr "&Immagini" + +#~ msgid "

          Set how digiKam will rename picture files as they are downloaded." +#~ msgstr "

          Imposta come digiKam rinominerà i nomi dei file delle immagini durante lo scaricamento." + +#~ msgid "File Renaming Options" +#~ msgstr "Opzioni di rinomina dei file" + +#~ msgid "Extension-based sub-albums" +#~ msgstr "Sottoalbum basati sulle estensioni" + +#~ msgid "Date-based sub-albums" +#~ msgstr "Sottoalbum basati sulle date" + +#~ msgid "

          Set how digiKam creates albums automatically when downloading." +#~ msgstr "

          Imposta come digiKam crea automaticamente gli album durante lo scaricamento." + +#~ msgid "

          Toggle on this option if you want to download your pictures into automatically created file extension-based sub-albums of the destination album. This way, you can separate JPEG and RAW files as they are downloaded from your camera." +#~ msgstr "

          Abilita questa opzione se vuoi scaricare le immagini in sottoalbum dell'album di destinazione creati automaticamente in base all'estensione dei file. In questo modo, puoi separare i file grezzi e JPEG mentre vengono scaricati della macchina fotografica." + +#~ msgid "

          Toggle on this option if you want to download your pictures into automatically created file date-based sub-albums of the destination album." +#~ msgstr "

          Abilita questa opzione se vuoi scaricare le immagini in sottoalbum dell'album di destinazione creati automaticamente in base alla data di creazione." + +#~ msgid "

          Select here your preferred date format used to create new albums. The options available are:

          ISO: the date format is in accordance with ISO 8601 (YYYY-MM-DD). E.g.: 2006-08-24

          Full Text: the date format is in a user-readable string. E.g.: Thu Aug 24 2006

          Local Settings: the date format depending on KDE control panel settings.

          " +#~ msgstr "

          Seleziona qui il formato della data preferito per creare nuovi album. Le opzioni disponibili sono:

          ISO: il formato di data secondo la specifica ISO 8601 (AAAA-MM-GG). Per esempio, 2006-08-24.

          Testo esteso: il formato di data in testo leggibile. Per esempio, Gio 24 Aug 2006.

          Impostazioni locali: il formato di data secondo le impostazioni del pannello di controllo di KDE.

          " + +#~ msgid "Auto-creation of Albums" +#~ msgstr "Creazione automatica degli album" + +#~ msgid "Set default photographer identity" +#~ msgstr "Imposta l'identità predefinita del fotografo" + +#~ msgid "Set default credit and copyright" +#~ msgstr "Imposta i riconoscimenti e il copyright predefiniti" + +#~ msgid "Fix internal date && time" +#~ msgstr "Correggi data e ora interne" + +#~ msgid "Auto-rotate/flip image" +#~ msgstr "Ruota o ribalta automaticamente l'immagine" + +#~ msgid "Convert to lossless file format" +#~ msgstr "Converti in formato di file senza perdita" + +#~ msgid "New image format:" +#~ msgstr "Nuovo formato dell'immagine:" + +#~ msgid "

          Set here all options to fix/transform JPEG files automatically as they are downloaded." +#~ msgstr "

          Imposta qui tutte le opzioni per correggere o trasformare automaticamente i file JPEG mentre vengono scaricati." + +#~ msgid "

          Toggle on this option if you want images automatically rotated or flipped using EXIF information provided by the camera." +#~ msgstr "

          Abilita questa opzione se vuoi ruotare o ribaltare automaticamente le immagini usando le informazioni EXIF registrate dalla macchina fotografica." + +#~ msgid "

          Toggle on this option to store the default photographer identity into IPTC tags using digiKam's metadata settings." +#~ msgstr "

          Abilita questa opzione per salvare l'identità predefinita del fotografo nei tag IPTC usando le impostazioni per i dati aggiuntivi di digiKam." + +#~ msgid "

          Toggle on this option to store the default credit and copyright information into IPTC tags using digiKam's metadata settings." +#~ msgstr "

          Abilita questa opzione per salvare i riconoscimenti e il copyright predefinito nei tag IPTC usando le impostazioni per i dati aggiuntivi di digiKam." + +#~ msgid "

          Toggle on this option to set date and time metadata tags to the right values if your camera does not set these tags correctly when pictures are taken. The values will be saved in the DateTimeDigitized and DateTimeCreated EXIF/IPTC fields." +#~ msgstr "

          Abilita questa opzione per impostare i tag della data e dell'ora ai valori giusti se la macchina fotografica non lo fa al momento dello scatto. I valori saranno salvati nei campi EXIF/IPTC DateTimeDigitized e DateTimeCreate." + +#~ msgid "

          Toggle on this option to automatically convert all JPEG files to a lossless image format. Note: Image conversion can take a while on a slow computer." +#~ msgstr "

          Abilita questa opzione per convertire automaticamente tutti i file JPEG in un formato di file senza perdita. Nota: per la conversione delle immagini può volerci un po' di tempo su un computer lento." + +#~ msgid "

          Select your preferred lossless image file format to convert to. Note: All metadata will be preserved during the conversion." +#~ msgstr "

          Seleziona il tuo formato di file senza perdita preferito in cui convertire. Nota: tutti i dati aggiuntivi saranno mantenuti nella conversione." + +#~ msgid "On the Fly Operations (JPEG only)" +#~ msgstr "Operazioni al volo (solo JPEG)" + +#~ msgid "Visit digiKam project website" +#~ msgstr "Visita il sito Web del progetto digiKam" + +#~ msgid "Select &All" +#~ msgstr "Selezion&a tutti" + +#~ msgid "Select N&one" +#~ msgstr "N&on selezionare niente" + +#~ msgid "&Invert Selection" +#~ msgstr "&Inverti la selezione" + +#~ msgid "Select &New Items" +#~ msgstr "Seleziona &nuovi oggetti" + +#~ msgid "Increase Thumbs" +#~ msgstr "Ingrandisci le miniature" + +#~ msgid "Decrease Thumbs" +#~ msgstr "Rimpicciolisci le miniature" + +#~ msgid "Toggle Lock" +#~ msgstr "Commuta blocco" + +#~ msgid "Download Selected" +#~ msgstr "Scarica selezionati" + +#~ msgid "Download All" +#~ msgstr "Scarica tutto" + +#~ msgid "Upload..." +#~ msgstr "Carica..." + +#~ msgid "Delete Selected" +#~ msgstr "Elimina selezionati" + +#~ msgid "Cancelling current operation, please wait..." +#~ msgstr "Annullamento dell'operazione corrente, attendi..." + +#~ msgid "Do you want to close the dialog and cancel the current operation?" +#~ msgstr "Vuoi chiudere la finestra e annullare l'operazione corrente?" + +#~ msgid "Disconnecting from camera, please wait..." +#~ msgstr "Disconnessione dalla macchina fotografica, attendi..." + +#~ msgid "Scanning for new files, please wait..." +#~ msgstr "Scansione dei nuovi file, attendi..." + +#~ msgid "Ready" +#~ msgstr "Pronto" + +#~ msgid "Failed to connect to the camera. Please make sure it is connected properly and turned on. Would you like to try again?" +#~ msgstr "Impossibile collegarsi alla macchina fotografica. Assicurati che sia collegata correttamente e accesa. Vuoi riprovare?" + +#~ msgid "Connection Failed" +#~ msgstr "Connessione non riuscita" + +#~ msgid "Retry" +#~ msgstr "Riprova" + +#~ msgid "Abort" +#~ msgstr "Interrompi" + +#~ msgid "Select Image to Upload" +#~ msgstr "Seleziona l'immagine da caricare" + +#~ msgid "Camera Folder %1 already contains item %2
          Please enter a new file name (without extension):" +#~ msgstr "La cartella della macchina fotografica %1 contiene già l'elemento %2.
          Inserisci un nuovo nome di file (senza estensione):" + +#~ msgid "File already exists" +#~ msgstr "Il file esiste già" + +#~ msgid "

          Please select the destination album from the digiKam library to import the camera pictures into.

          " +#~ msgstr "

          Seleziona l'album di destinazione dalla libreria di digiKam in cui importare le immagini della macchina fotografica.

          " + +#~ msgid "The items listed below are locked by the camera (read-only). These items will not be deleted. If you really want to delete these items, please unlock them and try again." +#~ msgstr "Gli elementi sotto elencati sono bloccati dalla macchina fotografica (in sola lettura). Questi elementi non saranno eliminati. Se vuoi veramente eliminarli, prima sbloccali e poi riprova." + +#~ msgid "" +#~ "_n: About to delete this image. Deleted files are unrecoverable. Are you sure?\n" +#~ "About to delete these %n images. Deleted files are unrecoverable. Are you sure?" +#~ msgstr "" +#~ "Stai per eliminare questa immagine. Sei sicuro?\n" +#~ "Stai per eliminare queste %n immagine. Sei sicuro?" + +#~ msgid "The items listed below are locked by camera (read-only). These items will not be deleted. If you really want to delete these items, please unlock them and try again." +#~ msgstr "Gli elementi elencati sotto sono bloccati dalla macchina fotografica (in sola lettura). Questi elementi non saranno eliminati. Se vuoi veramente eliminarli, prima sbloccali e poi riprova." + +#~ msgid "A file with same name (%1) exists in folder %2" +#~ msgstr "Esiste un file con lo stesso nome (%1) nella cartella %2" + +#~ msgid "Failed to find Album for path '%1'" +#~ msgstr "Impossibile trovare album per il percorso '%1'" + +#~ msgid "" +#~ "Title: %1\n" +#~ "Model: %2\n" +#~ "Port: %3\n" +#~ "Path: %4\n" +#~ "\n" +#~ "Thumbnail support: %5\n" +#~ "Delete items support: %6\n" +#~ "Upload items support: %7\n" +#~ "Directory creation support: %8\n" +#~ "Directory deletion support: %9\n" +#~ "\n" +#~ msgstr "" +#~ "Titolo: %1\n" +#~ "Modello: %2\n" +#~ "Porta: %3\n" +#~ "Percorso: %4\n" +#~ "\n" +#~ "Supporto miniature: %5\n" +#~ "Supporto eliminazione elementi: %6\n" +#~ "Supporto caricamento elementi: %7\n" +#~ "Supporto creazione cartelle: %8\n" +#~ "Supporto eliminazione cartelle: %9\n" +#~ "\n" + +#~ msgid "yes" +#~ msgstr "sì" + +#~ msgid "no" +#~ msgstr "no" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "To report problems about this driver, please contact the gphoto2 team at:\n" +#~ "\n" +#~ "http://gphoto.org/bugs" +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "Per segnalare problemi con questo driver, contatta la squadra di gphoto2 a:\n" +#~ "\n" +#~ "http://gphoto.org/bugs" + +#~ msgid "Download" +#~ msgstr "Scarica" + +#~ msgid "Toggle lock" +#~ msgstr "Commuta blocco" + +#~ msgid "&Upload into camera" +#~ msgstr "&Carica sulla macchina fotografica" + +#~ msgid "" +#~ "Cannot display picture\n" +#~ "\"%1\"" +#~ msgstr "" +#~ "Impossibile visualizzare l'immagine\n" +#~ "\"%1\"" + +#~ msgid "SlideShow Completed." +#~ msgstr "Presentazione conclusa." + +#~ msgid "Click To Exit..." +#~ msgstr "Fai clic per uscire..." + +#~ msgid "The items listed below are locked by camera (read-only). These items will not be deleted. If you want really to delete these items, please unlock them and try again." +#~ msgstr "Gli elementi sotto elencati sono bloccati dalla macchina fotografica (in sola lettura). Questi elementi non saranno eliminati. Se vuoi veramente eliminarli, per prima cosa sbloccali e poi riprova." + +#~ msgid "Image Editor Slide Show Settings" +#~ msgstr "Impostazioni delle presentazioni dell'editor di immagini" + +#~ msgid "Fullscreen mode" +#~ msgstr "Modalità a tutto schermo" + +#~ msgid "

          Use full-screen mode during the slideshow." +#~ msgstr "

          Usa la modalità a tutto schermo durante la presentazione." + +#~ msgid "IO files" +#~ msgstr "File IO" + +#~ msgid "IO Image Files Settings" +#~ msgstr "Impostazioni dei file immagine IO" + +#~ msgid "Saving Images Options" +#~ msgstr "Salvataggio delle opzioni delle immagini" + +#~ msgid "RAW Decoding Settings (dcraw %1)" +#~ msgstr "Impostazioni di decodifica dei file grezzi (dcraw %1)" + +#, fuzzy +#~ msgid "%1 pictures selected" +#~ msgstr "Destinazione selezionata non valida" + +#, fuzzy +#~ msgid "Parsing pictures" +#~ msgstr "Immagine originale:" + +#~ msgid "Calculating..." +#~ msgstr "Calcolo..." + +#~ msgid "&Histogram" +#~ msgstr "&Istogramma" + +#~ msgid "Hide" +#~ msgstr "Nascondi" + +#~ msgid "Toggle Full Screen" +#~ msgstr "Modalità a schermo intero" + +#~ msgid "Display Adjustment..." +#~ msgstr "Regolazione della visualizzazione..." + +#~ msgid "" +#~ "Cannot start \"Display\" configuration panel from KDE control center;\n" +#~ "please check your installation." +#~ msgstr "" +#~ "Impossibile avviare l'estensione \"Display\" dal centro di controllo di KDE;\n" +#~ "controlla la tua installazione." + +#~ msgid "Embed profile" +#~ msgstr "Incorpora profilo" + +#, fuzzy +#~ msgid "Embed Only" +#~ msgstr "Incorpora e basta" + +#~ msgid "%1|Color profile file" +#~ msgstr "%1|File di profilo dei colori" + +#, fuzzy +#~ msgid "Black!" +#~ msgstr "&Indietro" + +#~ msgid "Over exposure indicator" +#~ msgstr "Indicatore di sovraesposizione" + +#~ msgid "

          If you enable this option, over-exposed pixels from the target image preview will be over-colored. This will not have an effect on the final rendering." +#~ msgstr "

          Se attivi questa opzione, i pixel sovraesposti dell'anteprima dell'immagine risultante saranno sovracolorati. Ciò non avrà effetto sulla resa finale." + +#~ msgid "Toggle CM View" +#~ msgstr "Attiva o disattiva la vista CM" + +#~ msgid "Toggle On/Off Monitor Color Correction" +#~ msgstr "Attiva o disattiva la correzione del colore del monitor" + +#, fuzzy +#~ msgid "

          If you enable this option, over-exposed pixels from the target image preview will be colored to black. This will not have an effect on the final rendering." +#~ msgstr "

          Se attivi questa opzione, i pixel sovraesposti dell'anteprima dell'immagine risultante saranno sovracolorati. Ciò non avrà effetto sulla resa finale." + +#, fuzzy +#~ msgid "Select " +#~ msgstr "Se&leziona" + +#~ msgid "Higher Than" +#~ msgstr "Maggiore di" + +#~ msgid "Lower Than" +#~ msgstr "Minore di" + +#~ msgid "No item to preview in this album." +#~ msgstr "Nessun elemento di cui fare l'anteprima in questo album." + +#~ msgid "Hide Thumbnails" +#~ msgstr "Nascondi miniature" + +#~ msgid "Cannot extract preview for %1" +#~ msgstr "Impossibile estrarre la miniatura di %1" + +#~ msgid "&Comments" +#~ msgstr "&Commenti" + +#~ msgid "&Date && Time" +#~ msgstr "&Data e ora" + +#~ msgid "&Tags" +#~ msgstr "&Tag" + +#~ msgid "Exif File to Save" +#~ msgstr "File Exif da salvare" + +#~ msgid "

          Slideshow running in loop with all current images." +#~ msgstr "

          Presentazione in ciclo tra le immagini attuali." + +#~ msgid "Photograph Informations" +#~ msgstr "Informazioni sulla fotografia" + +#~ msgid "Informations" +#~ msgstr "Informazioni" + +#~ msgid "

          Set this option to picture tags." +#~ msgstr "

          Abilita questa opzione per mostrare i tag delle immagini." + +#~ msgid "Camera color balance" +#~ msgstr "Bilanciamento del colore della macchina fotografica" + +#~ msgid "Postfix:" +#~ msgstr "Suffisso:" + +#~ msgid "

          Set here the string to use like a postfix of image filenames." +#~ msgstr "

          Imposta qui la stringa da usare come suffisso dei nomi dei file delle immagini." + +#~ msgid "Cannot display image preview!" +#~ msgstr "Impossibile visualizzare l'anteprima dell'immagine." + +#~ msgid "Preview extraction in progress..." +#~ msgstr "Estrazione dell'anteprima in corso..." + +#, fuzzy +#~ msgid "Add:" +#~ msgstr "&Aggiungi" + +#~ msgid "Tooltips Settings" +#~ msgstr "Impostazioni dei suggerimenti" + +#~ msgid "Show toolti&ps for items" +#~ msgstr "Mostra i s&uggerimenti degli elementi" + +#~ msgid "No yet support for saving non-local files" +#~ msgstr "Il salvataggio dei file non locali non è ancora supportato" + +#~ msgid "Color Profiles Management" +#~ msgstr "Gestione dei profili di colore" + +#~ msgid "" +#~ "_n: Album '%1' has one subalbum. Moving this to trash will also move the subalbum to trash. Are you sure you want to continue?\n" +#~ "Album '%1' has %n subalbums. Moving this to trash will also move the subalbums to trash. Are you sure you want to continue?" +#~ msgstr "" +#~ "L'album '%1' ha un sottoalbum. Cestinarlo cestinerà anche il sottoalbum. Sei sicuro di voler continuare?\n" +#~ "L'album '%1' ha %n sottoalbum. Cestinarlo cestinerà anche i sottoalbum. Sei sicuro di voler continuare?" + +#~ msgid "" +#~ "_n: Album '%1' has one subalbum. Deleting this will also delete the subalbum. Are you sure you want to continue?\n" +#~ "Album '%1' has %n subalbums. Deleting this will also delete the subalbums. Are you sure you want to continue?" +#~ msgstr "" +#~ "L'album '%1' ha un sottoalbum. Eliminarlo eliminerà anche il sottoalbum. Sei sicuro di voler continuare?\n" +#~ "L'album '%1' ha %n sottoalbum. Eliminarlo eliminerà anche i sottoalbum. Sei sicuro di voler continuare?" + +#~ msgid "Move album '%1' to trash?" +#~ msgstr "Cestinare l'album '%1'?" + +#~ msgid "Delete album '%1' from disk?" +#~ msgstr "Eliminare l'album '%1' dal disco?" + +#~ msgid "Trash Album" +#~ msgstr "Cestina l'album" + +#~ msgid "Trash" +#~ msgstr "Cestina" + +#~ msgid "" +#~ "_n: About to move this image to trash. Are you sure?\n" +#~ "About to move these %n images to trash. Are you sure?" +#~ msgstr "" +#~ "Stai per cestinare questa immagine. Sei sicuro?\n" +#~ "Stai per cestinare queste %n immagini. Sei sicuro?" + +#~ msgid "" +#~ "_n: About to delete this image. Are you sure?\n" +#~ "About to delete these %n images. Are you sure?" +#~ msgstr "" +#~ "Stai per eliminare questa immagine. Sei sicuro?\n" +#~ "Stai per eliminare queste %n immagini. Sei sicuro?" + +#~ msgid "Trash Image" +#~ msgstr "Cestina immagine" + +#~ msgid "No Star" +#~ msgstr "Nessuna stella" + +#~ msgid "One Star" +#~ msgstr "Una stella" + +#~ msgid "Two Star" +#~ msgstr "Due stelle" + +#~ msgid "Three Star" +#~ msgstr "Tre stelle" + +#~ msgid "Four Star" +#~ msgstr "Quattro stelle" + +#~ msgid "Five Star" +#~ msgstr "Cinque stelle" + +#~ msgid "Finished listing folders..." +#~ msgstr "Elenco delle cartelle concluso..." + +#~ msgid "Finished listing files in %1" +#~ msgstr "Elenco dei file in %1 concluso" + +#, fuzzy +#~ msgid "Use Camera Informations" +#~ msgstr "Informazioni macchina fotografica" + +#~ msgid "Select Destination Album for Importing Camera Images" +#~ msgstr "Seleziona l'album di destinazione per l'importazione delle immagini della macchina fotografica" + +#~ msgid "Add Images" +#~ msgstr "Aggiungi immagini" + +#~ msgid "Fi<ers" +#~ msgstr "Fi<ri" + +#~ msgid "Create new Album in %1" +#~ msgstr "Crea nuovo album in %1" + +#, fuzzy +#~ msgid "Display Profile" +#~ msgstr "Visualizza in ciclo" + +#, fuzzy +#~ msgid "

          Copyright: " +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "

          Rendering Intent: " +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "

          Path: Embedded profile

          " +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "Select Rendering Intent" +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "Display" +#~ msgstr "Visualizza in ciclo" + +#, fuzzy +#~ msgid "Save as..." +#~ msgstr "Aumenta nitidezza..." + +#, fuzzy +#~ msgid "Description:" +#~ msgstr "Descrizione" + +#, fuzzy +#~ msgid "Rendering intent:" +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "Other" +#~ msgstr "Dopo" + +#, fuzzy +#~ msgid "

          File:" +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "Name: " +#~ msgstr "Nome:" + +#, fuzzy +#~ msgid "Description: " +#~ msgstr "Descrizione" + +#, fuzzy +#~ msgid "

          Description:" +#~ msgstr "Descrizione" + +#, fuzzy +#~ msgid "

          Copyright:" +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "

          Rendering Intent:" +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "

          Path:" +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "Level of detail:" +#~ msgstr "Seleziona il livello di dettaglio:" + +#~ msgid "Simple" +#~ msgstr "Semplice" + +#, fuzzy +#~ msgid "

          Select here the information level to display

          Simple: display general information about the photograph (default).

          Full: display all sections." +#~ msgstr "

          Seleziona qui il livello delle informazioni Exif da visualizzare

          Semplice: visualizza le informazioni generali sulla fotografia (predefinito).

          Completo: visualizza tutte le sezioni Exif." + +#~ msgid "To&morrow" +#~ msgstr "Do&mani" + +#~ msgid "&Sunday" +#~ msgstr "&Domenica" + +#, fuzzy +#~ msgid "

          The decoding quality value for RAW images:

          0: medium quality (default - for slow computer)

          1: good quality

          2: high quality

          3: very high quality (for speed computer)

          " +#~ msgstr "

          Il valore di qualità delle immagini JPEG:

          1: qualità bassa (altissima compressione e piccole dimensioni del file)

          50: qualità media

          75: qualità buona (predefinito)

          100: qualità alta (senza compressione e grandi dimensioni del file)

          Nota: JPEG non è un formato senza perdita." + +#, fuzzy +#~ msgid "" +#~ "Failed to save file\n" +#~ "\"%1\" to \n" +#~ "\"%2\"." +#~ msgstr "" +#~ "Impossibile salvare il file\n" +#~ "\"%1\" nell'album\n" +#~ "\"%2\"." + +#~ msgid "Neutral Black && White" +#~ msgstr "Bianco e nero neutro" + +#~ msgid "Black && White With Green Filter" +#~ msgstr "Bianco e nero con filtro verde" + +#~ msgid "Black && White With Orange Filter" +#~ msgstr "Bianco e nero con filtro arancione" + +#~ msgid "Black && White With Red Filter" +#~ msgstr "Bianco e nero con filtro rosso" + +#~ msgid "Black && White With Yellow Filter" +#~ msgstr "Bianco e nero con filtro giallo" + +#~ msgid "Black && White Sepia" +#~ msgstr "Bianco e nero con tono seppia" + +#~ msgid "Black && White Brown" +#~ msgstr "Bianco e nero con tono marrone" + +#~ msgid "Black && White Cold" +#~ msgstr "Bianco e nero con tono freddo" + +#~ msgid "Black && White Selenium" +#~ msgstr "Bianco e nero con tono selenio" + +#~ msgid "Black && White Platinum" +#~ msgstr "Bianco e nero con tono platino" + +#, fuzzy +#~ msgid "JPEG quality Unknown" +#~ msgstr "Qualità &JPEG:" + +#~ msgid "pixels" +#~ msgstr "pixel" + +#~ msgid "Failed to save to new file" +#~ msgstr "Impossibile salvare su un nuovo file" + +#~ msgid "%1 - %2" +#~ msgstr "%1 - %2" + +#~ msgid "Meta Information" +#~ msgstr "Informazioni aggiuntive" + +#, fuzzy +#~ msgid "Width:" +#~ msgstr "Resa:" + +#, fuzzy +#~ msgid "Zoom Factor:" +#~ msgstr "Rimpicciolisci" + +#, fuzzy +#~ msgid "Preview Mode:" +#~ msgstr "Anteprima" + +#~ msgid "Camera Selection" +#~ msgstr "Selezione della macchina fotografica" + +#~ msgid "&Change..." +#~ msgstr "&Cambia..." + +#~ msgid "EXIF is a standard used by most digital cameras today to store information such as comments in image files. You can learn more about EXIF at www.exif.org." +#~ msgstr "EXIF è uno standard oggi usato dalla maggior parte delle macchine fotografiche digitali per conservare informazioni come commenti nei file immagine. Puoi saperne di più su EXIF visitando www.exif.org." + +#~ msgid "

          Select here your constrained aspect ratio for cropping. The Golden Ratio 1:1.618. A composition following this rule is considered visually harmonious" +#~ msgstr "

          Selezione qui le tue proporzioni vincolate per il taglio. La sezione aurea è 1:1.618. Una composizione che segua questa regola è considerata visivamente armoniosa" + +#~ msgid "Use camera provided names" +#~ msgstr "Usa i nomi dati dalla macchina fotografica" + +#~ msgid "Customize names" +#~ msgstr "Personalizza i nomi" + +#~ msgid "&Advanced %1" +#~ msgstr "&Avanzate %1" + +#~ msgid "Use Camera-provided Information (EXIF)" +#~ msgstr "Usa le informazioni fornite dalla macchina fotografica (EXIF)" + +#~ msgid "Automatically rotate/flip using camera-provided information (EXIF)" +#~ msgstr "Ruota/ribalta automaticamente usando le informazioni fornite dalla macchina fotografica (EXIF)" + +#~ msgid "Digikam Handbook" +#~ msgstr "Manuale di Digikam" + +#~ msgid "&Simple %1" +#~ msgstr "&Semplice %1" + +#, fuzzy +#~ msgid "Already downloaded:" +#~ msgstr "Già scaricato:" + +#, fuzzy +#~ msgid "Black and white tool:" +#~ msgstr "

          Questa è l'anteprima dello strumento di conversione in bianco e nero" + +#~ msgid "Main coordinator and developer" +#~ msgstr "Coordinatore principale e sviluppatore" + +#~ msgid "Developer, co-coordinator, French translations" +#~ msgstr "Sviluppatore, co-coordinatore, traduzione francese" + +#, fuzzy +#~ msgid "

          Select here the auto-color correction tool to use:

          Auto Levels: This option maximizes the tonal range in the Red, Green, and Blue channels. It search the image shadow and highlight limit values and adjust the Red, Green, and Blue channels to a full histogram range.

          Normalize: this option scales brightness values across the active image so that the darkest point becomes black, and the brightest point becomes as bright as possible without altering its hue. This is often a \"magic fix\" for images that are dim or washed out.

          Equalize: this option adjusts the brightness of colors across the active image so that the histogram for the value channel is as nearly as possible flat, that is, so that each possible brightness value appears at about the same number of pixels as each other value. Sometimes Equalize works wonderfully at enhancing the contrasts in an image. Other times it gives garbage. It is a very powerful operation, which can either work miracles on an image or destroy it.

          Stretch Contrast: this option enhances the contrast and brightness of the RGB values of an image by stretching the lowest and highest values to their fullest range, adjusting everything in between." +#~ msgstr "

          Seleziona qui lo strumento di correzione automatica del colore da usare:

          Livelli automatici: questa opzione massimizza l'intervallo di tonalità nei canali del rosso, del verde e del blu. Cerca i valori limite delle luci e delle ombre dell'immagine e regola i canali del rosso, del verde e del blu per ottenere un intervallo completo dell'istogramma.

          Normalizza: questa opzione scala i valori di luminosità in tutta l'immagine in modo che il punto più scuro sia nero, e il più chiaro divenga il più chiaro possibile senza modificarne la tonalità. Questo è spesso un \"toccasana\" per immagini opache o slavate.

          Equalizza: questa opzione regola la luminosità dei colori in tutta l'immagine attiva in modo che l'istogramma per il canale del valore sia il più piatta possibile, cioè, che ogni valore di luminosità possibile appaia circa nello stesso numero di pixel di ogni altro valore. A volte l'equalizzazione funziona meravigliosamente per migliorare il contrasto di un'immagine. Altre volte produce spazzatura. È un'operazione molto potente, che può fare miracoli o rovinare un'immagine.

          Stira il contrasto: questa opzione migliora il contrasto e la luminosità dei valori RGB di un'immagine stirando i valori minimo e massimo alla loro massima distanza, adattando tutto quello che sta in mezzo." + +#~ msgid "&Reset Values" +#~ msgstr "&Reimposta valori" + +#~ msgid "

          Reset selection area to the default values." +#~ msgstr "

          Reimposta l'area di selezione ai valori predefiniti." + +#~ msgid "Neutral Black & White" +#~ msgstr "Bianco e nero neutro" + +#~ msgid "Black & White with Green Filter" +#~ msgstr "Bianco e nero con filtro verde" + +#~ msgid "Black & White with Yellow Filter" +#~ msgstr "Bianco e nero con filtro giallo" + +#~ msgid "Black & White with Sepia Tone" +#~ msgstr "Bianco e nero con tono seppia" + +#~ msgid "Black & White with Brown Tone" +#~ msgstr "Bianco e nero con tono marrone" + +#~ msgid "Black & White with Cold Tone" +#~ msgstr "Bianco e nero con tono freddo" + +#~ msgid "Black & White with Selenium Tone" +#~ msgstr "Bianco e nero con tono selenio" + +#~ msgid "Black & White with Platinum Tone" +#~ msgstr "Bianco e nero con tono platino" + +#~ msgid "

          Select here the black and white conversion type:

          Neutral: simulate black and white neutral film exposure.

          Green Filter: simulate black and white film exposure using green filter. This provides an universal asset for all scenics, especially suited for portraits photographed against sky.

          Orange Filter: simulate black and white film exposure using orange filter. This will enhances landscapes, marine scenes and aerial photography.

          Red Filter: simulate black and white film exposure using red filter. Using this one creates dramatic sky effects and simulates moonlight scenes in daytime.

          Yellow Filter: simulate black and white film exposure using yellow filter. Most natural tonal correction and improves contrast. Ideal for landscapes.

          Sepia Tone: gives a warm highlight and mid-tone while adding a bit of coolness to the shadows-very similar to the process of bleaching a print and re-developing in a sepia toner.

          Brown Tone: more neutral than Sepia Tone filter.

          Cold Tone: start subtle and replicate printing on a cold tone black and white paper such as a bromide enlarging paper.

          Selenium Tone: effect that replicate traditional selenium chemical toning done in the darkroom.

          Platinum Tone: effect that replicate traditional platinum chemical toning done in the darkroom." +#~ msgstr "

          Seleziona qui il tipo di conversione in bianco e nero:

          Neutrale: simula l'esposizione di una pellicola in bianco e nero neutrale.

          Filtro verde: simula l'esposizione di una pellicola in bianco e nero usando un filtro verde. Ciò rende una impostazione universale per tutte le scenografie, adatta soprattutto per i ritratti fotografati sullo sfondo del cielo.

          Filtro arancione: simula l'esposizione di una pellicola in bianco e nero usando un filtro arancione. Migliorerà i paesaggi, le scene marine e le fotografie aeree.

          Filtro rosso: simula l'esposizione di una pellicola in bianco e nero usando un filtro rosso. Usarlo crea effetti suggestivi nel cielo e simula scene al chiaro di luna di giorno.

          Filtro giallo: simula l'esposizione di una pellicola in bianco e nero usando un filtro giallo. È la correzione di tono più naturale e migliora il contrasto. Ideale per i paesaggi.

          Tono seppia: riscalda i toni forti e medi raffreddando un po' le ombre; molto simile al processo di sbiancare una stampa e di svilupparla di nuovo in tonalità di seppia.

          Tono marrone: più neutrale del filtro del tono seppia.

          Tono freddo: avvia in sottotono e rifai la stampa su una carta in bianco e nero in tono freddo come la carta da ingrandimento al bromuro.

          Tono selenio: effetto che replica la tradizionale tonalità chimica del selenio fatta nella camera oscura.

          Tono platino: effetto che replica la tradizionale tonalità chimica del platino fatta nella camera oscura." + +#~ msgid "Failed to retrieve EXIF information for %1" +#~ msgstr "Impossibile ottenere informazioni EXIF per %1" + +#~ msgid "Read Permissions:" +#~ msgstr "Permessi di lettura:" + +#~ msgid "Write Permissions:" +#~ msgstr "Permessi di scrittura:" + +#~ msgid "Mime:" +#~ msgstr "Mime:" + +#~ msgid "Failed to save file '%1'" +#~ msgstr "Salvataggio del file '%1' non riuscito" + +#~ msgid "About to overwrite file %1. Are you sure you want to continue?" +#~ msgstr "Stai per cancellare il file %1. Sei sicuro di voler continuare?" + +#~ msgid "" +#~ "Failed to save file\n" +#~ "\"%1\" to album\n" +#~ "\"%2\"." +#~ msgstr "" +#~ "Impossibile salvare il file\n" +#~ "\"%1\" nell'album\n" +#~ "\"%2\"." + +#~ msgid "" +#~ "The image \"%1\" has been modified.\n" +#~ "Do you want to save it?" +#~ msgstr "" +#~ "L'immagine \"%1\" è stata modificata.\n" +#~ "Vuoi salvarla?" + +#~ msgid "&Next" +#~ msgstr "&Successivo" + +#~ msgid "Zoom &In" +#~ msgstr "&Ingrandisci" + +#~ msgid "Zoom &Out" +#~ msgstr "&Rimpicciolisci" + +#~ msgid "&Crop" +#~ msgstr "&Taglia" + +#~ msgid "Tag '%1' has %2 subtag(s). Deleting this will also delete the subtag(s). Are you sure you want to continue?" +#~ msgstr "Il tag '%1' ha %2 sottotag. Eliminarlo eliminerà anche i sottotag. Sei sicuro di voler continuare?" + +#, fuzzy +#~ msgid "

          Here you can see the image color-balance adjustments preview." +#~ msgstr "

          Qui puoi vedere l'anteprima delle regolazioni del bilanciamento del colore dell'immagine." + +#~ msgid "

          If you enable this option, you will separe horizontally the preview area to display original and target image at the same time. The target is duplicated from the original on the bottom of the red dashed line." +#~ msgstr "

          Se abiliti questa opzione, separerai orizzontalmente l'area di anteprima per visualizzare le immagini originale e di destinazione allo stesso tempo. Quella di destinazione viene duplicata dall'originale sotto la linea tratteggiata rossa." + +#~ msgid "

          If you enable this option, you will separe horizontally the preview area to display original and target image at the same time. The original is on the top of the red dashed line, target on the bottom" +#~ msgstr "

          Se abiliti questa opzione, separerai orizzontalmente l'area di anteprima per visualizzare le immagini originale e di destinazione allo stesso tempo. L'originale è sopra la linea tratteggiata rossa, la destinazione sotto" + +#~ msgid "&Width:" +#~ msgstr "&Larghezza:" + +#~ msgid "&Height:" +#~ msgstr "&Altezza:" + +#, fuzzy +#~ msgid "Transform" +#~ msgstr "&Trasforma" + +#, fuzzy +#~ msgid "

          Here you can see the image Hue/Saturation/Lightness adjustments preview." +#~ msgstr "

          Puoi vedere qui l'anteprima delle regolazioni di tonalità/saturazione/luminosità dell'immagine." + +#, fuzzy +#~ msgid "Better then" +#~ msgstr "Beta tester" + +#~ msgid "Image Comments/Tags" +#~ msgstr "Tag e commenti dell'immagine" + +#~ msgid "Owner:" +#~ msgstr "Proprietario:" + +#~ msgid "Intensity range:" +#~ msgstr "Intervallo di intensità:" + +#~ msgid "&General" +#~ msgstr "&Generale" + +#~ msgid "Properties for '%1'" +#~ msgstr "Proprietà di '%1'" + +#~ msgid "Edit Image Comments && Tags..." +#~ msgstr "Modifica commenti e tag dell'immagine..." + +#~ msgid "This option allows you to edit the comments and tags of the currently selected image." +#~ msgstr "Questa opzione ti permette di modificare i commenti e i tag dell'immagine attualmente selezionata." + +#~ msgid "This option allows you to display the file properties, the meta-data and the histogram of the currently selected image." +#~ msgstr "Questa opzione ti permette di visualizzare le proprietà del file, le informazioni aggiuntive e l'istogramma dell'immagine attualmente selezionata." + +#~ msgid "This option display the current image properties, meta-data, and histogram. If you have selected a region, you can choose an histogram rendering for the full image or the current image selection." +#~ msgstr "Questa opzione visualizza le proprietà, le informazioni aggiuntive e l'istogramma dell'immagine corrente. Se hai selezionato una regione, puoi scegliere di calcolare l'istogramma per l'immagine completa o per la selezione attuale dell'immagine." + +#~ msgid "Image Preview Selection" +#~ msgstr "Selezione dell'anteprima dell'immagine" + +#~ msgid "Original image panel." +#~ msgstr "Pannello dell'immagine originale." + +#~ msgid "Original image preview." +#~ msgstr "Anteprima dell'immagine originale." + +#~ msgid "Top left: (%1, %2)" +#~ msgstr "In alto a sinistra (%1, %2)" + +#~ msgid "Automatically save comments and tags when navigating between items" +#~ msgstr "Salva i commenti e i tag automaticamente si naviga tra gli elementi" + +#~ msgid "Events" +#~ msgstr "Eventi" + +#~ msgid "People" +#~ msgstr "Gente" + +#~ msgid "Places" +#~ msgstr "Posti" + +#~ msgid "Could not calculate an average based on creation date (EXIF) or based on the modification date of the files." +#~ msgstr "Impossibile calcolare una media in base alla data di creazione (EXIF) o in base alla data di modifica dei file." + +#~ msgid "(c) 2002-2005, Digikam developers team" +#~ msgstr "(c) 2002-2005, squadra degli sviluppatori di Digikam" + +#~ msgid "digiKam bugs.kde.org frontman, patches and feedback" +#~ msgstr "rappresentante di digiKam su bugs.kde.org, correzioni e suggerimenti" + +#~ msgid "Cannot delete Root Album" +#~ msgstr "Impossibile eliminare l'album radice" + +#~ msgid "" +#~ "Copying file\n" +#~ "%1" +#~ msgstr "" +#~ "Copia del file\n" +#~ "%1" + +#~ msgid "" +#~ "Failed to move file\n" +#~ "%1" +#~ msgstr "" +#~ "Impossibile spostare il file\n" +#~ "%1" + +#~ msgid "Move Failed" +#~ msgstr "Spostamento non riuscito" + +#~ msgid "" +#~ "Failed to copy file\n" +#~ "%1" +#~ msgstr "" +#~ "Impossibile copiare il file\n" +#~ "%1" + +#~ msgid "Copy Failed" +#~ msgstr "Copia non riuscita" + +#~ msgid "" +#~ "Failed to delete files.\n" +#~ "%1" +#~ msgstr "" +#~ "Impossibile eliminare i file.\n" +#~ "%1" + +#~ msgid "" +#~ "_n: 1 Item\n" +#~ "%n Items" +#~ msgstr "" +#~ "1 elemento\n" +#~ "%n elementi" + +#~ msgid "" +#~ "Access denied to source\n" +#~ "%1" +#~ msgstr "" +#~ "Accesso negato alla sorgente\n" +#~ "%1" + +#~ msgid "" +#~ "Source\n" +#~ "%1\n" +#~ "does not exist" +#~ msgstr "" +#~ "La sorgente\n" +#~ "%1\n" +#~ "non esiste" + +#~ msgid "" +#~ "Access denied to destination\n" +#~ "%1" +#~ msgstr "" +#~ "Accesso negato alla destinazione\n" +#~ "%1" + +#~ msgid "" +#~ "Destination folder\n" +#~ "%1\n" +#~ "does not exist" +#~ msgstr "" +#~ "La cartella di destinazione\n" +#~ "%1\n" +#~ "non esiste" + +#~ msgid "Source is a directory, but destination is not." +#~ msgstr "La sorgente è una cartella, ma la destinazione no." + +#~ msgid "Trying to copy/move a folder to its subfolder" +#~ msgstr "Tentativo di copiare/spostare una cartella in una sua sottocartella" + +#~ msgid "" +#~ "Copying\n" +#~ "%1" +#~ msgstr "" +#~ "Copia\n" +#~ "%1" + +#~ msgid "" +#~ "Moving\n" +#~ "%1" +#~ msgstr "" +#~ "Spostamento\n" +#~ "%1" + +#~ msgid "Showfoto - %1" +#~ msgstr "Showfoto - %1" + +#~ msgid "Digikam library path not set correctly." +#~ msgstr "Percorso alla libreria di Digikam non impostato correttamente." + +#~ msgid "Digikam Library path not set correctly" +#~ msgstr "Percorso alla libreria di Digikam non impostato correttamente" + +#~ msgid "Failed to open Digikam Database" +#~ msgstr "Apertura della banca dati di Digikam non riuscita" + +#~ msgid "Destination URL not in album library Path." +#~ msgstr "L'URL di destinazione non è nel percorso della libreria dell'album." + +#~ msgid "" +#~ "Copying folder\n" +#~ "%1" +#~ msgstr "" +#~ "Copia della cartella\n" +#~ "%1" + +#~ msgid "Could not find source parent album for %1" +#~ msgstr "Impossibile trovare l'album genitore sorgente per %1" + +#~ msgid "Could not find destination parent album for %1" +#~ msgstr "Impossibile trovare l'album genitore destinazione per %1" + +#~ msgid "" +#~ "Moving folder\n" +#~ "%1" +#~ msgstr "" +#~ "Spostamento della cartella\n" +#~ "%1" + +#~ msgid "Blur Image Preview Effect" +#~ msgstr "Anteprima dell'effetto di sfocatura dell'immagine" + +#~ msgid "Blur" +#~ msgstr "Sfoca" + +#~ msgid "

          Select here your constrained aspect ratio for cropping." +#~ msgstr "

          Seleziona qui le tue proporzioni per il taglio." + +#~ msgid "Show rule third lines" +#~ msgstr "Visualizza terze linee del righello" + +#~ msgid "Sharpen Image Preview Effect" +#~ msgstr "Anteprima dell'effetto di aumento del contrasto dell'immagine" + +#~ msgid "Show items in su&b-tags" +#~ msgstr "Mostra gli elementi nei s&ottotag" + +#~ msgid "

          When showing items in a Tag, also show items in sub-Tags." +#~ msgstr "

          Quando si mostrano gli elementi in un tag, mostra anche gli elementi nei sottotag." + +#~ msgid "Default &size:" +#~ msgstr "Dimen&sione predefinita:" + +#~ msgid "Small (64x64)" +#~ msgstr "Piccole (64x64)" + +#~ msgid "Medium (100x100)" +#~ msgstr "Medie (100x100)" + +#~ msgid "Large (160x160)" +#~ msgstr "Grandi (160x160)" + +#~ msgid "Huge (256x256)" +#~ msgstr "Grandissime (256x256)" + +#~ msgid "Sho&w comments stored in file (warning: slow)" +#~ msgstr "Mostra i commenti co&ntenuti nel file (Attenzione: lento)" diff --git a/po/ja/Makefile.am b/po/ja/Makefile.am new file mode 100644 index 0000000..3fc92ce --- /dev/null +++ b/po/ja/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = ja +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/ja/libkdcraw.po b/po/ja/libkdcraw.po new file mode 100644 index 0000000..e07a0b4 --- /dev/null +++ b/po/ja/libkdcraw.po @@ -0,0 +1,386 @@ +# translation of libkdcraw.po to Japanese +# Yukiko Bando , 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2008-02-29 20:00+0900\n" +"Last-Translator: Yukiko Bando \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

          %1 実行ファイルが見つかりません:" +"
          このプログラムは RAW ファイル形式をサポートするために必要です。このまま続けることはできますが RAW " +"画像を処理することはできません。libkdcraw パッケージのインストールを確認してください。" + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

          %1 実行ファイルのバージョンが最新ではありません:" +"
          このプログラムのバージョン %2 をコンピュータ上に検出しました。このバージョンは古すぎて正しく動作しません。このまま続けることはできますが RAW " +"画像を処理することはできません。libkdcraw パッケージのインストールを確認してください。" + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16 ビットカラー" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

          有効にすると、すべての RAW ファイルを線形ガンマカーブを使って 16 " +"ビットカラーでデコードします。エディタで画像が暗く表示されるのを防ぐために、このモードではカラーマネジメントを使用することを推奨します。" +"

          無効にすると、すべての RAW ファイルを BT.709 ガンマカーブと 99th-percentile white point を使って 8 " +"ビットカラーでデコードします。こちらの方が 16 ビットカラーよりも高速です。" + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "RGB を 4 色として補間" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "dcraw プロジェクトのウェブサイトを訪問" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "ホワイトバランス:" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "標準 D65 ホワイトバランス" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +msgid "Camera White Balance" +msgstr "カメラのホワイトバランス" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +msgid "Automatic White Balance" +msgstr "自動ホワイトバランス" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "手動ホワイトバランス" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "色温度 (K):" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "

          色温度

          色温度を指定します。" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "ハイライト:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "濃淡のない白" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "クリップしない" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "ブレンド" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "再構築" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" +"

          ハイライト" +"

          ここでハイライトクリッピングの方法を選択します:" +"

          [濃淡のない白] すべてのハイライトをクリップして濃淡のない白にします。" +"

          [クリップしない] ハイライトをクリップせずにさまざまな階調のピンクのまま残します。" +"

          [ブレンド] クリップされた値とされていない値をブレンドすることによって徐々に白に減衰させます。" +"

          [再構築] レベル値を使ってハイライトを再構築します。" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "レベル:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "

          レベル

          出力画像のハイライト復元レベルを指定します。値を低くすると白に、高くすると色に傾きます。" + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "明るさ:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "

          明るさ

          出力画像の明るさを指定します。標準の値は 1.0 です (8 ビットモードでのみ有効)。" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "品質 (補間法):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "バイリニア (双線形)" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "ノイズ低減を有効にする" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "

          ノイズ低減を有効にする

          ウェーブレットを使ってディテールを損なうことなくノイズを除去します。

          " + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "しきい値:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "

          しきい値

          ノイズ低減のしきい値を指定します。

          " + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "色収差補正を有効にする" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "赤の乗数:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "青の乗数:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "カラースペース:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "RAW (リニア)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Wide Gamut" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

          カラースペース" +"

          RAW データのデコードに使用する出力カラースペースを選択します。" +"

          Raw (リニア): このモードでは、RAW デコード中に出力カラースペースを使用しません。" +"

          sRGB: Hewlett-Packard と Microsoft が共同で開発した RGB " +"カラースペースです。ウェブ上に公開する画像やポートレート写真に最適です。" +"

          Adobe RGB: Adobe が開発した拡張 RGB カラースペースです。広告や美術作品に使用されます。" +"

          Wide Gamut: Adobe RGB カラースペースの拡張版です。" +"

          Pro-Photo: Kodak が開発した RGB カラースペースです。写真の出力を前提とした広い色域を提供します。" + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "標準" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "ブラックポイント" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" +"

          ブラックポイント" +"

          RAW 画像のデコードに特定のブラックポイントの値を使用します。このオプションを無効にすると、ブラックポイントの値は自動的に計算されます。" +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "

          ブラックポイントの値

          出力画像のブラックポイントの値を指定します。

          " + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "詳細" diff --git a/po/ms/Makefile.am b/po/ms/Makefile.am new file mode 100644 index 0000000..7c07fed --- /dev/null +++ b/po/ms/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = ms +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/ms/libkdcraw.po b/po/ms/libkdcraw.po new file mode 100644 index 0000000..c4c0511 --- /dev/null +++ b/po/ms/libkdcraw.po @@ -0,0 +1,370 @@ +# libkdcraw Bahasa Melalyu (Malay) (ms). +# Sharuzzaman Ahmat Raslan , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2008-02-12 00:15+0800\n" +"Last-Translator: Sharuzzaman Ahmat Raslan \n" +"Language-Team: Malay \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Ubah Warna Latarbelakang" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Ubah Warna Latarbelakang" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +#, fuzzy +msgid "Solid white" +msgstr "Hitam & Putih" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +#, fuzzy +msgid "Level:" +msgstr "Tahap:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +#, fuzzy +msgid "Enable noise reduction" +msgstr "Hidupkan p&etikan pintar" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +#, fuzzy +msgid "Color space:" +msgstr "Warna latarbelakang:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +#, fuzzy +msgid "Raw (linear)" +msgstr "Imej Kamera RAW" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +#, fuzzy +msgid "Adobe RGB" +msgstr "Imej SGI (RGB)" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +#, fuzzy +msgid "Pro-Photo" +msgstr "Pengurusan Gambar" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:391 +#, fuzzy +msgid "Standard" +msgstr "Standard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Titik hitam" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Lanjutan" + +#~ msgid "Color balance multipliers" +#~ msgstr "Pekali imbangan warna" diff --git a/po/nds/Makefile.am b/po/nds/Makefile.am new file mode 100644 index 0000000..c228753 --- /dev/null +++ b/po/nds/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = nds +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/nds/libkdcraw.po b/po/nds/libkdcraw.po new file mode 100644 index 0000000..d31c9b3 --- /dev/null +++ b/po/nds/libkdcraw.po @@ -0,0 +1,389 @@ +# translation of libkdcraw.po to +# +# Sönke Dibbern , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-05-23 02:36+0200\n" +"Last-Translator: Sönke Dibbern \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:145 +#, fuzzy +msgid "16 bits color depth" +msgstr "16 Bits Klöördeepde" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:167 +#, fuzzy +msgid "Interpolate RGB as four colors" +msgstr "RGB as veer Klören estemeren" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +#, fuzzy +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

          RGB as veer Klören estemeren" +"

          Standardwies warrt all gröön Pixels as liek ankeken, man gröön Pixels in en " +"even Reeg vun den Bildsensor reageert op ultravigelett Licht anners as in en " +"uneven Reeg, un disse Verscheel föhrt to Maschmustern in de Utgaav. Disse " +"Optschoon lööst dat Problem, man dor kummt en lierlütt Deel vun de Enkelheiten " +"bi weg." +"

          Disse Optschoon verwischt dat Bild also en beten, man maakt bi de " +"VNG-Ümwannelmetood de 2x2-Maschmustern un bi de AHD-Metood de Biestergoorns " +"weg." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +#, fuzzy +msgid "Visit dcraw project website" +msgstr "Na dcraw-Projektnettsiet gahn" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Kamera-Wittbalangs bruken" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Automaatsche Klöörbalangs" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "Kamera-Wittbalangs bruken" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +#, fuzzy +msgid "Highlights:" +msgstr "Gleemrebeden:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +#, fuzzy +msgid "Solid white" +msgstr "Witt maken" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +#, fuzzy +msgid "Unclip" +msgstr "Künnig maken" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +#, fuzzy +msgid "Level:" +msgstr "Stoop:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:260 +#, fuzzy +msgid "Brightness:" +msgstr "Helligkeit:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +#, fuzzy +msgid "Bilinear" +msgstr "Bilineaar" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +#, fuzzy +msgid "Enable noise reduction" +msgstr "Ruusminnern anmaken" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +#, fuzzy +msgid "Threshold:" +msgstr "Grenzweert:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:324 +#, fuzzy +msgid "Enable Chromatic Aberration correction" +msgstr "Ruusminnern anmaken" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:391 +#, fuzzy +msgid "Standard" +msgstr "Standard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +#, fuzzy +msgid "Advanced" +msgstr "Verwiedert" + +#, fuzzy +#~ msgid "Reconstruct" +#~ msgstr "Nieg opbuen" diff --git a/po/nl/Makefile.am b/po/nl/Makefile.am new file mode 100644 index 0000000..bc54bf5 --- /dev/null +++ b/po/nl/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = nl +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/nl/libkdcraw.po b/po/nl/libkdcraw.po new file mode 100644 index 0000000..f209ef6 --- /dev/null +++ b/po/nl/libkdcraw.po @@ -0,0 +1,482 @@ +# translation of libkdcraw.po to Dutch +# +# Rinse de Vries , 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2008-03-05 01:25+0100\n" +"Last-Translator: Rinse de Vries \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

          Het programma %1 is niet gevonden." +"
          Dit programma is nodig de ondersteuning van Raw-bestandsformaten. U kunt " +"doorgaan, maar zult niet in staat zijn om Raw-afbeeldingen te behandelen. " +"Controleer de installatie van het pakket libkdcraw op uw computer." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

          Het programma %1 is niet actueel genoeg." +"
          Programmaversie %2 is op uw computer gevonden. Deze versie is te oud om " +"goed te kunnen werken met deze plugin. U kunt doorgaan, maar zult geen " +"Raw-afbeeldingen kunnen behandelen. Controleer de installatie van het pakket " +"libkdcraw op uw computer." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16-bits kleurdiepte" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

          Indien ingeschakeld zullen alle RAW-bestanden worden gedecodeerd naar " +"16-bits kleurdiepte met een lineaire gammacurve. Om te voorkomen dat de " +"afbeelding te donker wordt weergegeven in de editor is het te adviseren om in " +"deze modus het kleurenbeheer te gebruiken." +"

          Indien uitgeschakeld zullen alle RAW-bestanden worden gedecodeerd naar " +"8-bits kleurdiepte met een BT.709-gammacurve en een 99% witpunt. Deze modus is " +"sneller dan 16-bits decodering." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "RGB interpoleren als vier kleuren" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

          RGB interpoleren als vier kleuren" +"

          Standaard wordt er van uitgegaan dat alle groene pixels hetzelfde zijn. Als " +"groene pixels op de evenrij meer gevoelig zijn voor ultraviolet licht dan op de " +"oneven zult u een golfpatroon in de uitvoer krijgen. Deze optie lost dit " +"probleem op met een klein detailverlies." +"

          Bij herhaling vervaagt deze optie de afbeelding iets, maar het elimineert " +"valse 2x2 golfpatronen met de VNG-kwaliteitsmethode en mazen met de " +"AHD-kwaliteitsmethode." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Bezoek de website van het dcraw-project" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "Witbalans:" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "Standaard D65-witbalans" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +msgid "Camera White Balance" +msgstr "Witbalans van camera" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +msgid "Automatic White Balance" +msgstr "Automatische witbalans" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "Handmatige witbalans" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" +"

          Witbalans " +"

          Stel de rauwe witbalans in: " +"

          Standaard D65-witbalans: gebruik een standaard D65-daglichtwitbalans " +"(standaard van dcraw) " +"

          Witbalans van camera: gebruik de witbalans die door de camera is " +"opgegeven. Als die niet beschikbaar is wordt teruggevallen op de standaard " +"neutrale witbalans " +"

          Automatische witbalans: berekent een automatische witbalans aan de " +"hand van het gemiddelde van de hele afbeelding. " +"

          Handmatige witbalans: laat u zelf de waarden voor temperatur en " +"groenniveau aanpassen" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "Temperatuur (K):" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "

          Temperatuur

          Stel hier de kleurtemperatuur in" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "Groen:" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" +"

          Stel hier het groencomponent in om het verwijderniveau van de " +"magenta-kleurkast in te stellen." + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Lichten:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Geheel wit" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Unclip" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Vermengen" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Reconstrueren" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" +"

          Lichten" +"

          Selecteer hier de methode voor het aanpassen van de lichten:" +"

          Geheel wit: zet alle lichten om in volledig wit" +"

          Unclip: behoud het detail in de rozetinten door het contrast niet te " +"oversturen" +"

          Vermengen: vermengt de lichtschakeringen met elkaar tot er een " +"vloeiende vervaging naar wit ontstaat " +"

          Reconstrueren: reconstrueer lichten aan de hand van een niveauwaarde" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Niveau:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

          Niveau" +"

          Geef het niveau op voor het reconstrueren van lichten in de " +"uitvoerafbeelding. Een lage waarde geeft meer wit en een hoge waarde meer " +"kleur." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Helderheid:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" +"

          Helderheid" +"

          Specificeer het helderheidsniveau van de uitvoerafbeelding. De " +"standaardwaarde is 1.0 (werkt alleen in 8-bit modus)." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Kwaliteit (interpolatie)" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilineair" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" +"

          Kwaliteit " +"

          Selecteer hier de interpolatiemethode voor demosaicing uit RAW-afbeeldingen " +"tijdens het decoderen. Een demosaicing-algoritme is een digitaal " +"afbeeldingsproces dat gebruikt wordt om een complete afbeelding te interpoleren " +"aan de hand van een gedeelte van de raw-gegevens die ontvangen is van de " +"kleurfilterende afbeeldingssensor die veel digitale camera's in de form van een " +"matrix van gekleurde pixels hebben. Dit staat ook wel bekend als " +"CFA-interpolatie of kleurreconstructie. Er zijn 3 manieren voor demosaicing " +"raw-afbeeldingen: " +"

          Bilineair: gebruikt zeer snelle bilineaire interpolatie met een lage " +"kwaliteit (standaard, voor trage computers). Bij deze methode wordt de " +"roodwaarde van een niet-rode pixel berekend als het gemiddelde van aangrenzende " +"rode pixels. Ditzelfde gebeurt voor groen en blauw. " +"

          VNG Variable Number of Gradients-interpolatie. Deze methode berekent " +"kleurverlopen in de omgeving van de aangewezen pixel en gebruikt de laagste " +"kleurverlopen (die gladere en meer gelijke delen van het afbeelding " +"representeren) om een schatting te maken. " +"

          PPG: gebruik Patterned Pixel Grouping-interpolatie. Pixel Grouping " +"gebruikt aannames over de natuurlijke scene door schattingen te maken. Het " +"heeft minder artifacten op natuurlijke afbeeldingen dan de methode Variable " +"Number of Gradients" +"

          AHD: Adaptive Homogeneity-Directed-interpolatie. Deze methode " +"selecteert de richting van interpolatie zodanig dat het een homogenische " +"metriek genereert. Dit minimaliseert kleurartefacten. " +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Ruisreductie activeren" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" +"

          Ruisreductie activeren " +"

          Gebruik wavelets om ruis uit de afbeelding te verwijderen terwijl de details " +"behouden blijven." + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Drempel:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" +"

          Drempel" +"

          Geef hier de drempelwaarde op die u voor de ruisreductie wilt gebruiken." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Chromatische abberatie-correctie activeren" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" +"

          " +"

          Chromatische abberatie-correctie activeren " +"

          Vergroot de rauwe rood- en blauwlagen met de opgegeven factoren, meestal " +"0.999 to 1.001 om de chromatische abberatie te corrigeren. " +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Roodversterking:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" +"

          Roodvermeerdering " +"

          Selecteer hier de vermeerderingsfactor voor de roodlaag" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Blauwversterking:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" +"

          Blauwvermeerdering " +"

          Selecteer hier de vermeerderingsfactor voor de blauwlaag" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Kleurruimte:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Raw (lineair)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Wide Gamut" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

          Kleurruimte " +"

          Selecteer hier de kleurruimte die u wilt gebruiken voor het decoderen van " +"raw-gegevens. " +"

          Raw (lineair): in deze modus wordt er geen kleurruimte gebruikt " +"tijdens het decoderen van raw-afbeeldingen. " +"

          sRGB: dit is een RGB-kleurruimte, coöperatief gemaakt door " +"Hewlett-Packard en Microsoft. Het is de beste keuze voor afbeeldingen die " +"bedoeld zijn voor op internet en portretfotografie. " +"

          Adobe RGB: deze kleurruimte is een uitgebreide RGB-kleurruimte, " +"ontwikkelt door Adobe. Het wordt gebruikt voor foto's bedoeld voor in " +"advertenties en fijne kunst. " +"

          Wide Gamut: deze kleurruimte is een uitgebreide versie van Adobe's " +"RGB-kleurruimte. " +"

          Pro-Photo: deze RGB-kleurruimte is ontwikkeld door Kodak en biedt " +"vooral large gamut die ontworpen is voor gebruik in de fotografie." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Standaard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Pixels niet uitrekken of roteren" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" +"

          Pixels niet uitrekken of draaien " +"

          Voor Fuji Super CCD-camera's, toon de afbeelding 45° gedraaid. Voor camera's " +"met niet-vierkante pixels, rek de afbeelding niet uit naar de juiste " +"beeldverhouding. In elk geval garandeert deze optie dat elke uitvoerpixel " +"overeenkomt met één raw-pixel." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Zwartpunt" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" +"

          Zwartpunt " +"

          Gebruik een specifieke zwartpuntwaarde voor het decoderen van " +"raw-afbeeldingen. Als u deze optie uitzet zal de zwartpuntwaarde automatisch " +"worden berekend." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" +"

          Zwartpuntwaarde " +"

          Specificeer een specifieke zwartpuntwaarde voor de uitvoerafbeelding." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Geavanceerd" diff --git a/po/pa/Makefile.am b/po/pa/Makefile.am new file mode 100644 index 0000000..94fd7c6 --- /dev/null +++ b/po/pa/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = pa +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/pa/libkdcraw.po b/po/pa/libkdcraw.po new file mode 100644 index 0000000..976eec0 --- /dev/null +++ b/po/pa/libkdcraw.po @@ -0,0 +1,365 @@ +# translation of libkdcraw.po to Punjabi +# +# A S Alam , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-03-04 13:58+0530\n" +"Last-Translator: A S Alam \n" +"Language-Team: Punjabi \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16 ਬਿੱਟ ਰੰਗ ਗਹਿਰਾਈ" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "dcraw ਪ੍ਰੋਜੈਕਟ ਵੈੱਬਸਾਇਟ ਖੋਲ੍ਹੋ" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "ਕੈਮਰਾ ਚਿੱਟਾ ਸੰਤੁਲਨ ਵਰਤੋਂ" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "ਆਟੋਮੈਟਿਕ ਰੰਗ ਅਨੁਕੂਲਣ" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "ਕੈਮਰਾ ਚਿੱਟਾ ਸੰਤੁਲਨ ਵਰਤੋਂ" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "ਉਘਾੜੋ:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "ਇਕਹੇਰਾ ਚਿੱਟਾ" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Unclip" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "ਪੱਧਰ:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "ਚਮਕ:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "ਬਾਈਲੀਨੀਅਰ" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "ਥਰੈਸ਼ਹੋਲਡ:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "ਰੰਗ ਥਾਂ:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Raw (ਰੇਖਿਕ)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "ਸਟੈਂਡਰਡ" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "ਤਕਨੀਕੀ" + +#~ msgid "Reconstruct" +#~ msgstr "ਮੁੜ-ਨਿਰਮਾਣ" diff --git a/po/pt/Makefile.am b/po/pt/Makefile.am new file mode 100644 index 0000000..f811e06 --- /dev/null +++ b/po/pt/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = pt +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/pt/libkdcraw.po b/po/pt/libkdcraw.po new file mode 100644 index 0000000..ea831bd --- /dev/null +++ b/po/pt/libkdcraw.po @@ -0,0 +1,484 @@ +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-08-24 17:11+0100\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: pt \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: CCD Adaptive Homogeneity CIELab VNG Fuji RAW Hewlett\n" +"X-POFile-SpellExtra: Variable Directed Packard dcraw Kodak AHD libkdcraw\n" +"X-POFile-SpellExtra: of Number CFA Gamute sRGB Photo Gradients BT wavelets\n" +"X-POFile-SpellExtra: PPG\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

          Não foi possível encontrar o executável %1:" +"
          Este programa binário é necessário para suportar os formatos de ficheiro " +"RAW. Poderá continuar, mas não será capaz de lidar com nenhumas imagens RAW. " +"Verifique por favor a instalação do pacote 'libkdcraw' no seu computador." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

          O executável %1 não está actualizado:" +"
          É necessária a versão %2 deste programa binário para suportar os formatos " +"de ficheiro RAW. Esta versão é demasiado antiga para funcionar " +"convenientemente. Poderá continuar, mas não será capaz de lidar com nenhumas " +"imagens RAW. Verifique por favor a instalação do pacote 'libkdcraw' no seu " +"computador." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "Profundidade de cor de 16 bits" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

          Se activar a opção, todos os ficheiros RAW serão descodificados para uma " +"profundidade de cor de 16 bits, usando uma curva de gama linear. Para evitar o " +"desenho de imagens pretas no editor, recomenda-se que use a Gestão de Cores " +"neste modo." +"

          Se estiver desactivada, todos os ficheiros RAW serão descodificados para uma " +"profundidade de cor de 8 bits, com uma curva de gama BT.709 e um ponto branco " +"no percentil-99. Este modo é mais rápido que a descodificação de 16 bits." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Interpolar o RGB como quatro cores" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

          Interpolar o RGB como quatro cores." +"

          Por omissão é assumido que todos os pontos verdes são o mesmo. Se o pontos " +"verdes da linhas pares forem mais sensíveis à luz ultravioleta do que os das " +"linhas ímpares esta diferença cria um padrão no resultado; se usar esta opção, " +"resolve o problema com uma perda mínima de detalhe." +"

          Em resumo, esta opção borra a imagem um pouco, mas elimina os falsos padrões " +"em malha 2x2 com o método de qualidade VNG ou os labirintos com o método AHD." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Visite a página Web do projecto 'dcraw'" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Usar o balanceamento de branco da máquina" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Balanceamento de cores automático" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "Usar o balanceamento de branco da máquina" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +#, fuzzy +msgid "

          Temperature

          Set here the color temperature." +msgstr "" +"

          Multiplicador de vermelho" +"

          Configure aqui o factor de ampliação da camada vermelha" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Tons claros:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Branco puro" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Retirar o recorte" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Misturar" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Reconstruir" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" +"

          Tons claros" +"

          Seleccione aqui o método de recorte dos tons claros:" +"

          Branco puro: ajusta todos os tons claros para o branco puro" +"

          Retirar o recorte: deixa os tons claros não-recortados, em vários " +"tons de rosa" +"

          Misturar:Mistura os valores recortados e não recortados em conjunto, " +"para gerar um desvanecimento gradual para branco" +"

          Reconstruir: reconstrói os tons claros, usando um nível predefinido." + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Nível:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

          Nível" +"

          Indique o nível de tons claros na reconstrução da imagem resultante. Os " +"valores baixos favorecem os brancos e os valores altos favorecem as cores." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Brilho:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" +"

          Brilho" +"

          Indique o nível de brilho da imagem resultante. O valor por omissão é 1,0 " +"(funciona apenas no modo de 8 bits)." + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Qualidade (interpolação):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilinear" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" +"

          Qualidade" +"

          Seleccione aqui o método de interpolação na descodificação para remover o " +"mosaico das imagens RAW. Um algoritmo de remoção do mosaico é um processo " +"digital da imagem, usado para interpolar uma imagem completa a partir dos dados " +"parciais em bruto que são recebidos do sensor de imagem com filtros de cores, o " +"qual é interno em muitas máquinas digitais sob a forma de uma matriz de pixels " +"coloridos. É também conhecido por interpolação CFA ou reconstrução de cores, " +"sendo o outro termo comum a remoção de mosaicos. Existem 3 métodos para remover " +"o mosaico das imagens RAW:" +"

          Bilinear: usa a interpolação bilinear, rápida mas de baixa qualidade " +"(predefinida - para computadores lentos). Neste método, o valor de vermelho de " +"um pixel não-vermelho é calculado como a média dos pixels vermelhos adjacentes, " +"aplicando-se o mesmo princípio para o verde e o azul." +"

          VNG: usa a interpolação VNG (Variable Number of Gradients - Número de " +"Gradientes Variável). Este método calcula os gradientes, perto do pixel de " +"interesse, e usa os gradientes menores (que representam as partes mais suaves e " +"semelhantes da imagem) para fazer uma estimativa." +"

          AHD: usa a interpolação AHD (Adaptive Homogeneity-Directed - " +"Adaptativa e Direccionada à Homogeneidade). Este método selecciona a direcção " +"da interpolação, de modo a maximizar uma métrica de homogeneidade, minimizando " +"desta forma os artefactos de cores." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Activar a redução de ruído" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" +"

          Activar a Redução de Ruído" +"

          Usa 'wavelets' (padrões ondulatórios) para eliminar o ruído, preservando à " +"mesma o detalhe real." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Limiar:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" +"

          Limiar:" +"

          Defina aqui o valor-limite da redução de ruído a usar." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Activar a correcção da Aberração Cromática" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" +"

          Activar a correcção da Aberração Cromática" +"

          Aumenta as camadas de vermelho e azul pelos factores indicados, tipicamente " +"entre 0,999 e 1,001, de modo a corrigir a aberração cromática." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Multiplicador de vermelho:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" +"

          Multiplicador de vermelho" +"

          Configure aqui o factor de ampliação da camada vermelha" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Multiplicador de azul:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" +"

          Multiplicador de azul" +"

          Configure aqui o factor de ampliação da camada azul" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Espaço de cores:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Bruto (linear)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "RGB da Adobe" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Gamute Amplo" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

          Espaço de cores" +"

          Seleccione aqui o espaço de cores resultante que é usado para descodificar " +"os dados RAW." +"

          Bruto (linear): neste modo, não é usado nenhum espaço de cores " +"resultante na descodificação do RAW." +"

          sRGB: este espaço de cores é um espaço de cores RGB, criado em " +"cooperação entre a Hewlett-Packard e a Microsoft, sendo a melhor escolha para " +"as imagens destinadas à Web e aos retratos fotográficos." +"

          RGB da Adobe: este espaço de cores é um espaço de cores RGB, " +"desenvolvido pela Adobe, que é usado em aplicações de fotografia como a " +"publicidade e a arte." +"

          Gamute Amplo: este espaço de cores é uma versão expandida do espaço " +"de cores RGB da Adobe." +"

          Pro-Photo: este espaço de cores é um espaço RGB, desenvolvido pela " +"Kodak, que oferece um gamute especialmente grande, desenhado para ser usado com " +"resultados fotográficos em mente." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Normal" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Não encolher ou rodar os pixels" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" +"

          Não encolher ou rodar os pixels" +"

          Nas máquinas Fuji Super CCD, mostra a imagem rodada em 45 graus. Para as " +"máquinas com pixels não-quadrados, não estica a imagem para a sua proporção " +"correcta. Em qualquer um dos casos, esta opção garante que cada pixel no " +"resultado corresponde a um pixel RAW." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Ponto preto" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" +"

          Ponto preto" +"

          Use um valor específico do ponto preto para descodificar as imagens RAW. Se " +"desligar esta opção, o valor do Ponto Preto será calculado automaticamente." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" +"

          Valor do ponto preto" +"

          Indique um valor do ponto preto específico, para a imagem resultante." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Avançado" + +#~ msgid "

          Use camera white balance

          Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

          Usar o balanceamento de branco da máquina

          Utiliza a configuração personalizada de balanceamento de branco da máquina fotográfica. Se esta não for encontrada, é usada a predefinida (onde são utilizados valores fixos de luz do dia, calculados a partir de imagens de exemplo)." + +#~ msgid "

          Automatic color balance

          Calculate the white balance by averaging the entire image." +#~ msgstr "

          Balanceamento de cores automático

          Calcula o balanceamento de branco, fazendo a média em toda a imagem." + +#~ msgid "Color balance multipliers" +#~ msgstr "Multiplicadores do balanceamento de cores" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Multiplicador do verde 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Multiplicador do verde 2:" diff --git a/po/sk/Makefile.am b/po/sk/Makefile.am new file mode 100644 index 0000000..d79196b --- /dev/null +++ b/po/sk/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = sk +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/sk/libkdcraw.po b/po/sk/libkdcraw.po new file mode 100644 index 0000000..762669c --- /dev/null +++ b/po/sk/libkdcraw.po @@ -0,0 +1,359 @@ +# translation of libkdcraw.po to Slovak +# +# Richard Fric , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-02-19 19:15+0100\n" +"Last-Translator: Richard Fric \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +msgid "Camera White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +msgid "Automatic White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "" diff --git a/po/sr/Makefile.am b/po/sr/Makefile.am new file mode 100644 index 0000000..be99001 --- /dev/null +++ b/po/sr/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = sr +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/sr/libkdcraw.po b/po/sr/libkdcraw.po new file mode 100644 index 0000000..8a8d4f8 --- /dev/null +++ b/po/sr/libkdcraw.po @@ -0,0 +1,439 @@ +# translation of libkdcraw.po to Serbian +# +# Slobodan Simic , 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2008-03-04 14:51+0100\n" +"Last-Translator: Slobodan Simic \n" +"Language-Team: Serbian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>" +"=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

          Не могу да нађем %1 извршни фајл:" +"
          Овај бинарни фајл је неопходан за подршку Raw формата. Можете да наставите " +"али нећете моћи да радите са Raw сликама. Проверите инсталацију libkdcraw " +"пакета на вашем рачунару." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

          %1 није баш најновија:" +"
          Верзија %2 овог програма је нађена на вашем рачунару. Ова верзија је " +"сувише стара да би радила како треба. Можете да наставите али нећете моћи да " +"радите са Raw сликама. Проверите инсталацију libkdcraw пакета на вашем " +"рачунару." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16-битне боје" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

          Ако је укључено, сви RAW фајлови ће бити декодовани са 16-битном дубином " +"помоћу линеарне Гама криве. Да би се спречиле мрачне слике, препоручљиво је да " +"се у овом режиму користи Управљање бојама." +"

          Ако је искључено, сви RAW ће бити декодовани са 8-битном дубином помоћу " +"BT.709 Гама криве и 99-о процентном белом тачком. Овај начин је бржи од " +"16-битног декодовања." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Интерполирај RGB као четири боје" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

          Интерполирај RGB као четири боје" +"

          Подразумевано се сматра да су сви зелени пиксели исти. Ако су зелени пиксели " +"парног реда више осетљиви на ултраљубичасто светло од непарног реда, разлика " +"може довести до мрежасте слике на излазу. Коришћењем ове опције решава се тај " +"проблем са минималним губитком детаља." +"

          Што ће рећи, ова опција малчице замућује слику али уклања лажне 2x2 мрежице " +"са VNG начином квалитета или лавиринте са AHD начином квалитета." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Посетите веб страну dcraw пројекта" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "Баланс белог:" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "Подразумевани D65 баланс" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +msgid "Camera White Balance" +msgstr "Апаратов баланс белог" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +msgid "Automatic White Balance" +msgstr "Аутоматски баланс белог" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "Ручни баланс белог" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" +"

          Баланс белог" +"

          Подешава сирови баланс белог :" +"

          Подразумевани D65 баланс: Користи стандардни D65 баланс дневног " +"светла (dcraw подразумевано)" +"

          Апаратов баланс белог: Користи баланс белог који даје апарат. Ако " +"није доступан, враћа се на подразумевани неутрални баланс" +"

          Аутоматски баланс белог: Прорачунава аутоматски баланс на основу " +"просека целе слике" +"

          Ручни баланс белог: Поставља произвољне вредности температуре и " +"зеленог нивоа" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "Температура (K):" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "

          Температура

          Овде подесите температуру боје." + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "Зелена:" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" +"

          Овде подесите зелену компоненту да подесите ниво уклањања пурпурне боје." + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Истицања:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Пуно бело" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Стопи" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Поново изгради" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Ниво:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

          Ниво" +"

          Одређује ниво реконструисања. Мале вредности дају предност белом а веће " +"вредности боји." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Осветљај:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" +"

          Осветљај" +"

          Одређује ниво осветљаја излазне слике. Подразумевана вредност је 1.0 (ради " +"само у 8-битном режиму)." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Квалитет (интерполације):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Билинеарно" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Укључи смањење шума" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" +"

          Укључи смањење шума" +"

          Користи таласиће за брисање шума и чува праве детаље." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Праг:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "

          Праг

          Овде одредите вредност прага за уклањање шума." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Укључи исправку хроматске аберације" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" +"

          Укључи исправку хроматске аберације" +"

          Увеличава сирови црвени и плави слој за задати фактор, обично 0.999 до " +"1.001, да би се исправила хроматска аберација." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Множилац црвеног:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" +"

          Множилац црвеног" +"

          Овде одредите фактор увећања за црвени слој" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Множилац плавог:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "

          Множилац плавог

          Овде одредите фактор увећања за плави слој" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Простор боја:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Сирово (линеарно)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Широка палета" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Про фото" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

          Простор боја" +"

          Овде одредите излазни простор боја за декодовање RAW података." +"

          Сирово (линеарно): у овом режиму, не користи се излазни простор боја " +"при RAW декодовању." +"

          sRGB: ово је RGB простор боја, заједнички направљен од стране " +"Hewlett-Packard-а и Microsoft-а. Ово је најбољи избор за слике намењене " +"интернету и фотографијама портрета." +"

          Adobe RGB: овај простор боја је проширени RGB простор, развијен од " +"стране Adobe-а. Користи се у програмима за обраду фотографија у рекламне и " +"уметничке сврхе." +"

          Широка палета: овај простор боја је проширена верзија Adobe-овог RGB " +"простора боја." +"

          Про фото: овај простор боја је RGB простор, развијен од стране " +"Kodak-а, који нуди изузетно широку палету намењену за професионалне фотографске " +"излазе." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Стандардно" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Не растежи и не ротирај пикселе" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" +"

          Не растежи и не ротирај пикселе" +"

          За Fuji Super CCD апарате, прикажи слике заокренуте за 45 degrees. За " +"апарате са не-квадратним пикселима, не растежи слику ради исправљања размере. У " +"сваком случају, ова опција гарантује да сваки излазни пиксел одговара RAW " +"пикселу." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Црна тачка" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" +"

          Црна тачка" +"

          Користи посебну вредност црне тачке за декодовање RAW слика. Ако ову опцију " +"искључите, вредност црне тачке ће бити аутоматски прорачуната." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" +"

          Вредност црне тачке" +"

          Наведите одређену вредност црне тачке за излазну слику." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Напредно" diff --git a/po/sr@Latn/Makefile.am b/po/sr@Latn/Makefile.am new file mode 100644 index 0000000..c6622f4 --- /dev/null +++ b/po/sr@Latn/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = sr@Latn +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/sr@Latn/libkdcraw.po b/po/sr@Latn/libkdcraw.po new file mode 100644 index 0000000..a617848 --- /dev/null +++ b/po/sr@Latn/libkdcraw.po @@ -0,0 +1,369 @@ +# translation of libkdcraw.po to Serbian +# +# Slobodan Simic , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-07-23 14:06+0200\n" +"Last-Translator: Slobodan Simic \n" +"Language-Team: Serbian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>" +"=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16-bitne boje" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Posetite veb stranu dcraw projekta" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Automatski balans belog" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Automatski balans belog" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Isticanja:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Puno belo" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Stopi" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Ponovo izgradi" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Nivo:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Osvetljaj:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Kvalitet (interpolacije):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilinearno" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Uključi smanjenje šuma" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Prag:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:324 +#, fuzzy +msgid "Enable Chromatic Aberration correction" +msgstr "Uključi smanjenje šuma" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Množilac crvenog:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Množilac plavog:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Prostor boja:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Sirovo (linearno)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Standardno" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Ne rasteži i ne rotiraj piksele" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Crna tačka" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Napredno" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Množilac zelenog 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Množilac zelenog 2:" diff --git a/po/sv/Makefile.am b/po/sv/Makefile.am new file mode 100644 index 0000000..9562cf4 --- /dev/null +++ b/po/sv/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = sv +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/sv/libkdcraw.po b/po/sv/libkdcraw.po new file mode 100644 index 0000000..deafe8b --- /dev/null +++ b/po/sv/libkdcraw.po @@ -0,0 +1,474 @@ +# translation of libkdcraw.po to Swedish +# +# Stefan Asserhäll , 2007, 2008. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2008-03-04 17:30+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

          Kan inte hitta den körbara filen %1:" +"
          Detta binära program krävs för att stödja obehandlade filformat. Du kan " +"fortsätta, men du kommer inte att kunna hantera några obehandlade bilder. " +"Kontrollera installationen av paketet libkdcraw på datorn." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

          Den körbara filen %1 är inte aktuell:" +"
          Version %2 av detta binära program hittades på datorn. Versionen är för " +"gammal för att köra på ett riktigt sätt. Du kan fortsätta, men du kommer inte " +"att kunna hantera några obehandlade bilder. Kontrollera installationen av " +"paketet libkdcraw på datorn." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16-bitars färgdjup" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

          Om aktiverad, avkodas alla obehandlade filer till 16-bitars färgdjup genom " +"att använda en linjär gammakurva. För att förhindra att en mörk bild visas i " +"editorn, rekommenderas att färghantering används tillsammans med detta läge. " +"

          Om inaktiverad, avkodas alla obehandlade filer till 8-bitars färgdjup med en " +"BT.709 gammakurva och en vitpunkt från 99:e percentilen. Läget är snabbare än " +"16-bitars avkodning." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Interpolera RGB som fyra färger" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

          Interpolera RGB som fyra färger" +"

          Förval är att anta att alla gröna bildpunkter är likadana. Om gröna " +"bildpunkter i jämna rader är känsligare för ultraviolett ljus än udda rader, " +"orsakar skillnaden ett rutmönster i utdata. Genom att använda detta alternativ " +"löses problemet med minimal detaljförlust." +"

          För att sammanfatta, så gör alternativet bilden något suddigare, men " +"eliminerar falska 2x2 rutmönster med kvalitetsmetoden VNG, eller labyrinter med " +"kvalitetsmetoden AHD." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Besök dcraw-projektets hemsida" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "Vitbalans:" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "D65 standardvitbalans" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +msgid "Camera White Balance" +msgstr "Kamerans vitbalans" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +msgid "Automatic White Balance" +msgstr "Automatisk vitbalans" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +msgid "Manual White balance" +msgstr "Manuell vitbalans" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" +"

          Vitbalans" +"

          Ställ in obehandlad vitbalans:" +"

          D65 standardvitbalans: Använd en vanlig D65 dagsljusvitbalans (förval " +"i dcraw)" +"

          Kamerans vitbalans: Använd vitbalansen som anges av kameran. Om den " +"inte är tillgänglig, används den neutrala standardvitbalansen" +"

          Automatisk vitbalans: Beräkna en automatisk vitbalans genom att skapa " +"medelvärdet av hela bilden" +"

          Manuell vitbalans: Ställ in en egen temperatur och värde på " +"grön-nivån" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "Temperatur (K):" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +msgid "

          Temperature

          Set here the color temperature." +msgstr "

          Temperatur

          Ställ in färgtemperaturen här." + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "Grön:" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" +"

          Ställ in den gröna komponenten för att ange nivå av borttagning för magenta " +"färgskiftningar." + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Dagrar:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Helvita" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Obeskurna" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "Blanda" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "Återskapade" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" +"

          Dagrar" +"

          Välj beskärningsmetoden för dagrar här:" +"

          Helvita: beskär alla dagrar till helvitt" +"

          Obeskurna: lämna dagrar obeskurna i olika rosa skuggningar " +"

          Blanda: Blanda beskurna och obeskurna värde för att få en gradvis " +"toning till vitt" +"

          Återskapade: återskapa dagrar med användning av ett nivåvärde." + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Nivå:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

          Nivå" +"

          Ange nivå för återskapade dagrar i resultatbilden. Ett lågt värde gör att " +"vitt föredras, och ett högt värde gör att färger föredras." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Ljusstyrka:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" +"

          Ljushet" +"

          Ange resultatbildens ljushet. Standardvärdet är 1,0 (fungerar bara i " +"8-bitarsläge)." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Kvalitet (interpolerad):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Bilinjär" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "PPG" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" +"

          Kvalitet" +"

          Välj interpolationsmetod för avkodning av obehandlade bilder för " +"mosaikborttagning. En algoritm för mosaikborttagning är digital bildprocess som " +"används för att interpolera en fullständig bild från partiell obehandlad data i " +"form av en matris av färgade bildpunkter, som tagits emot från den " +"färgfiltrerade bildsensorn som finns internt i många digitalkameror. Den är " +"också känd som CFA-interpolation eller färgrekonstruktion. Det finns fyra " +"metoder för att utföra mosaikborttagning av obehandlade bilder:" +"

          Bilinjär: Använder en snabb bilinjär interpolation med låg kvalitet " +"(standard för långsamma datorer). Med den här metoden beräknas det röda värdet " +"av en bildpunkt som inte är röd som medelvärdet av intilliggande röda " +"bildpunkter, och på samma sätt för blått och grönt." +"

          VNG: Använd interpolation med variabelt antal gradienter. Metoden " +"beräknar gradienter intill den intressanta bildpunkten och använder de lägsta " +"gradienterna (som representerar jämnare och liknande delar av bilden) för att " +"göra en uppskattning. " +"

          PPG: Använd interpolation med mönsterbaserad bildpunktsgruppering. " +"Bildpunktsgruppering använder antaganden om naturliga scenerier när " +"uppskattningar görs. Den har färre färgavvikelser än metoden med variabelt " +"antal gradienter." +"

          AHD: Använd adaptiv homogenstyrd interpolation. Metoden väljer " +"interpolationens riktning så att ett homogenitetsmått maximeras, och på så sätt " +"typiskt minimera färgavvikelser." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Aktivera brusreducering" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" +"

          Aktivera brusreducering" +"

          Använd vågelement för att reducera brus samtidigt som riktiga detaljer " +"bevaras." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Tröskel:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" +"

          Tröskel" +"

          Ställ in brusreduceringens tröskelvärde som ska användas här." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +msgid "Enable Chromatic Aberration correction" +msgstr "Aktivera korrigering av kromatisk aberration" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" +"

          Aktivera korrigering av kromatisk aberration" +"

          Förstora de obehandlade röda och blåa lagren med angivna faktorer, typiskt " +"0,999 till 1,001, för att korrigera kromatisk aberration." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Faktor för Röd:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" +"

          Röd multiplikator" +"

          Ställ in förstoringsfaktorn för det röda lagret" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Faktor för Blå:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" +"

          Blå multiplikator" +"

          Ställ in förstoringsfaktorn för det blåa lagret" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Färgrymd:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Obehandlad (linjär)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Stort tonomfång" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-foto" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

          Färgrymd" +"

          Välj resultatets färgrymd som används för att avkoda obehandlad data här." +"

          Obehandlad (linjär): Med det här läget används ingen färgrymd för " +"resultatet under avkodning av obehandlad data." +"

          sRGB: Den här färgrymden är en RGB-färgrymd, skapat i samarbete " +"mellan Hewlett-Packard och Microsoft. Den är det bästa valet för bilder som är " +"avsedda för webben och för porträttfotografering." +"

          Adobe RGB: Den här färgrymden är en RGB-färgrymd, utvecklad av Adobe. " +"Den används för fotografiska tillämpningar som reklam och konst." +"

          Stort tonomfång: Den här färgrymden är en utökad version av Adobes " +"RGB-färgrymd." +"

          Pro-foto: Den här färgrymden är en RGB-färgrymd, utvecklad av Kodak, " +"som erbjuder ett särskilt stort tonomfång konstruerad för användning med " +"fotografiskt resultat." + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Standard" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Sträck eller rotera inte bildpunkter" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" +"

          Sträck eller rotera inte bildpunkter" +"

          Visa bilden lutad 45 grader för Fuji Super CCD-kameror. Sträck inte bilden " +"till rätt proportion för kameror med icke-fyrkantiga bildpunkter. Hur som helst " +"garanterar alternativet att varje bildpunkt i resultatet motsvarar en " +"obehandlad bildpunkt." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Svartpunkt" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" +"

          Svartpunkt" +"

          Använd ett specifikt svartpunktsvärde för att avkoda obehandlade bilder. Om " +"du stänger av alternativet, beräknas svartpunktsvärdet automatiskt." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" +"

          Svartpunktsvärde" +"

          Ange ett specifikt svartpunktsvärde för resultatbilden." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Avancerat" diff --git a/po/th/Makefile.am b/po/th/Makefile.am new file mode 100644 index 0000000..0a7b223 --- /dev/null +++ b/po/th/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = th +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/th/libkdcraw.po b/po/th/libkdcraw.po new file mode 100644 index 0000000..377c6b5 --- /dev/null +++ b/po/th/libkdcraw.po @@ -0,0 +1,447 @@ +# translation of libkdcraw.po to Thai +# +# Thanomsub Noppaburana , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-02-28 10:03+0700\n" +"Last-Translator: Thanomsub Noppaburana \n" +"Language-Team: Thai \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

          ไม่พบแฟ้มประมวลผล %1:" +"
          แฟ้มโปรแกรมนี้จำเป็นต้องใช้สำหรับการทำงานกับแฟ้มแบบ Raw " +"หากคุณต้องการทำต่อไป คุณจะไม่สามารถจัดการกับภาพ Raw บางแฟ้มได้ " +"โปรดตรวจสอบการติดตั้งแพ็กเกจ libkdcraw บนเครื่องของคุณ" + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +"" +"

          แฟ้มประมวลผล %1 ไม่ใช่รุ่นที่ทันสมัย:" +"
          รุ่นของโปรแกรม %2 ที่พบบนเครื่องของคุณเป็นรุ่นเก่าเกินไป " +"หากคุณต้องการทำต่อไป คุณจะไม่สามารถจัดการกับภาพ Raw บางแฟ้มได้ " +"โปรดตรวจสอบการติดตั้งแพ็กเกจ libkdcraw บนเครื่องของคุณ" + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "ความลึกสี 16 บิต" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +#, fuzzy +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

          หากเปิดใช้งาน แฟ้มภาพแบบ RAW ทั้งหมด จะถูกถอดรหัสเป็นภาพที่มีความลึกสี 16 " +"บิตโดยใช้ค่าแกมม่าเชิงเส้น " +"เพื่อป้องกันไม่ให้ภาพดำถูกประมวลผลในเครื่องมือแก้ไขภาพ " +"ขอแนะนำให้ให้เครื่องมือจัดการสีกับโหมดสีนี้" +"

          หากปิดการใช้งาน แฟ้มภาพแบบ RAW จะถูกถอดรหัสเป็นภาพที่มีความลึกสีแบบ 8 บิต " +"โดยใช้ค่าแกมม่าแบบเส้น BT.709 และค่าเปอร์เซ็นต์ของจุดขาวแบบเส้น 99th-percentile " +"ซึ่งโหมดนี้จะมีความเร็วในการทำงานมีสูงกว่าการถอดรหัสแบบ 16 บิตสี" + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "เพิ่มจุดสี RGB แบบเดียวกับค่าสี่สี" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

          เพิ่มจุดสี RGB แบบเดียวกับค่าสี่สี" +"

          ค่าปริยายนั้นจะเพิ่มจุดสีปรับใช้จุดสีเขียวเป็นแบบเดียวกัน " +"หากจุดสีเขียวในแถวคู่มีความไวต่อแสงเหนือม่างมากกว่าแถวคี่ " +"ค่าที่แตกต่างนี้จะทำให้เกิดตารางสีต่างขึ้นในภาพเป้าหมายได้ " +"การใช้ตัวเลือกนี้จะช่วยแก้ปัญหานี้ได้ โดยทำให้สูญเสียรายละเอียดนิดหน่อย" +"

          เพื่อทำต่อไป ตัวเลือกนี้จะทำให้ภาพเบลอเล็กน้อย แต่จะช่วยกำลัดตารางสีแบบ 2x2 " +"ที่ได้จากวิธีปรับคุณภาพภาพแบบ VNG หรือ AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw รุ่น %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "แวะชมเวบไซต์โครงการ dcraw" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "ใช้ค่าสมดุลแสงขาวของกล้อง" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "ปรับค่าสมดุลสีอัตโนมัติ" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "ใช้ค่าสมดุลแสงขาวของกล้อง" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +#, fuzzy +msgid "

          Temperature

          Set here the color temperature." +msgstr "" +"

          ค่ากระตุ้น" +"

          ตั้งค่ากระตุ้นการลดจุดรบกวนบนภาพที่ต้องการได้ที่นี่" +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "พื้นที่แสงจ้า:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "ขาวทึบ" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "ไม่ตัดส่วนภาพ" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "ระดับแสงจ้า:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "ค่าความสว่าง:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" +"

          ค่าความสว่าง" +"

          กำหนดค่าระดับความสว่างของภาพเป้าหมาย ค่าปริยายคือ 1.0 (ทำงานในโหมดความลึกสี " +"8 บิตเท่านั้น)" +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "คุณภาพ (การเพิ่ม/ลดจุดภาพ):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "แบบ Bilinear" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "แบบ VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "แบบ AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "เปิดใช้การลดจุดรบกวนบนภาพ" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" +"

          เปิดใช้การลดจุดรบกวนบนภาพ" +"

          ใช้ wavelets เพื่อลดจุดรบกวนบนภาพ โดยยังคงรักษารายละเอียดของภาพไว้ด้วย" +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "ค่ากระตุ้น:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "" +"

          ค่ากระตุ้น" +"

          ตั้งค่ากระตุ้นการลดจุดรบกวนบนภาพที่ต้องการได้ที่นี่" +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:324 +#, fuzzy +msgid "Enable Chromatic Aberration correction" +msgstr "เปิดใช้การลดจุดรบกวนบนภาพ" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "ตัวคูณค่าสีแดง:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "ตัวคูณค่าสีน้ำเงิน:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "ขอบเขตสี:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "แบบ Raw (เชิงเส้น)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "แบบ sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "แบบ Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "แบบ Wide Gamut" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "แบบ Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +#, fuzzy +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" +"

          ขอบเขตสี" +"

          เลือกขอบเขตสีที่จะใช้ในการถอดรหัสข้อมูลภาพแบบ RAW ได้ที่นี่" +"

          แบบ Raw (เชิงเส้น): ในโหมดนี้ " +"จะไม่มีการใช้ขอบเขตสีระหว่างการถอดรหัสข้อมูล RAW" +"

          แบบ sRGB: ขอบเขตสีนี้ เป็นส่วนหนึ่งภายในขอบเขตสีแบบ RGB " +"ถูกสร้างจากความร่วมมือกันระหว่าง Hewlett-Packard และ Microsoft " +"เหมาะสำหรับใช้กับภาพที่มีเป้าหมายใช้บนเวบและภาพถ่ายบุคคล" +"

          แบบ Adobe RGB: ขอบเขตสีนี้ เป็นส่วนหนึ่งภายในขอบเขตสีแบบ RGB " +"พัฒนาขึ้นโดยบริษัท Adobe " +"โดยมีเป้าหมายสำหรับใช้กับแอพพลิเคชันจัดการและแก้ไขภาพถ่าย เช่น " +"ด้านโฆษณาและงานศิลปะ" +"

          แบบ Wide Gamut: ขอบเขตสีนี้เป็นส่วนขยายขอบเขตจากขอบเขตสีแบบ Adobe RGB " +"

          แบบ Pro-Photo: ขอบเขตสีนี้ เป็นส่วนหนึ่งภายในขอบเขตสีแบบ RGB " +"พัฒนาขึ้นโดยบริษัท Kodak ซึ่งสามารถรองรับช่วงความกว้างสีขนาดใหญ่เป็นพิเศษ " +"โดยมีเป้าหมายในการใช้งานกับการจัดการภาพถ่ายให้ตรงความเป็นจริงมากกที่สุด" + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "มาตรฐาน" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "ไม่ต้องปรับขนาดหรือหมุนจุดภาพ" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" +"

          ไม่ต้องปรับขนาดหรือหมุนจุดภาพ" +"

          สำหรับเซ็นเซอร์กล้อง Fuji แบบ Super CCD จะมีการแสดงภาพที่เหลื่มกัน 45 องศา, " +"สำหรับกล้องที่ไม่มีจุดภาพแบบสี่เหลี่ยมจตุรัส " +"จะไม่มีการปรับขนาดภาพให้ตรงกับสัดส่วนภาพที่ถูกต้อง และสำหรับกรณีอื่น " +"ตัวเลือกนี้จะช่วยรับประกันได้ว่า " +"แต่ละจุดภาพที่ถูกส่งออกนั้นจะได้มาจากจุดภาพของข้อมูล RAW" +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "จุดดำ" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" +"

          ค่าจุดดำ" +"

          ใช้ค่าจุดดำในการถอดรหัสภาพจากข้อมูล RAW หากปิดการใช้ตัวเลือกนี้ " +"จะมีการคำนวณค่าจุดดำให้อัตโนมัติ" +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "

          ค่าจุดดำ

          กำหนดค่าจุดดำของภาพเป้าหมาย

          " + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "เพิ่มเติม" + +#~ msgid "

          Use camera white balance

          Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

          ใช้ค่าสมดุลแสงขาวของกล้อง

          ใช้ค่าสมดุลแสงขาวที่กำหนดไว้บนกล้อง หากไม่พบค่านี้บนกล้อง จะกลับไปใช้ค่าปริยายแทน (โดยทั่วไปจะใช้ในการแก้ไขค่าสีของแสง โดยจะมีการประมวลผลร่วมกับภาพตัวอย่าง)" + +#, fuzzy +#~ msgid "

          Automatic color balance

          Calculate the white balance by averaging the entire image." +#~ msgstr "

          ปรับค่าสมดุลสีอัตโนมัติ

          โดยปริยายแล้วจะใช้ปรับแก้ค่าสมดุลสี โดยมีฐานบนกระดาษขาวที่อยู่ภายใต้แสงช่วงกลางวัน" + +#~ msgid "Color balance multipliers" +#~ msgstr "ตัวคูณค่าสมดุลสี" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "ตัวคูณค่าสีเขียว 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "ตัวคูณค่าสีเขียว 2:" + +#~ msgid "Reconstruct" +#~ msgstr "สร้างขึ้นใหม่" diff --git a/po/uk/Makefile.am b/po/uk/Makefile.am new file mode 100644 index 0000000..685f92f --- /dev/null +++ b/po/uk/Makefile.am @@ -0,0 +1,3 @@ +KDE_LANG = uk +SUBDIRS = $(AUTODIRS) +POFILES = AUTO diff --git a/po/uk/libkdcraw.po b/po/uk/libkdcraw.po new file mode 100644 index 0000000..e5873b7 --- /dev/null +++ b/po/uk/libkdcraw.po @@ -0,0 +1,438 @@ +# Translation of libkdcraw.po to Ukrainian +# +# Ivan Petrouchtchak , 2007. +msgid "" +msgstr "" +"Project-Id-Version: libkdcraw\n" +"POT-Creation-Date: 2008-03-03 21:56+0100\n" +"PO-Revision-Date: 2007-06-11 22:01-0700\n" +"Last-Translator: Ivan Petrouchtchak \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>" +"=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: libkdcraw/dcrawbinary.cpp:160 +msgid "" +"" +"

          Unable to find the %1 executable:" +"
          This binary program is required to support Raw file formats. You can " +"continue, but you will not be able to handle any Raw images. Please check the " +"installation of libkdcraw package on your computer." +msgstr "" +"" +"

          Не вдалося знайти програму %1: " +"
          Ця програма потрібна для підтримки формату файлів Raw. Можете продовжувати " +"без неї, але ви не зможете переглядати і редагувати зображення Raw. Будь ласка, " +"перевірте на вашому комп'ютері інсталяцію пакунка libkdcraw." + +#: libkdcraw/dcrawbinary.cpp:176 +msgid "" +"" +"

          %1 executable is not up to date:" +"
          The version %2 of this binary program have been found on your computer. " +"This version is too old to run properly. You can continue, but you will not be " +"able to handle any Raw images. Please check the installation of libkdcraw " +"package on your computer." +msgstr "" +" " +"

          Програму %1 не оновлено: " +"
          На вашому комп'ютері було знайдено версію %2 цієї програми. Ця версія " +"застара для того, щоб належно працювати. Можете продовжити, але ви не зможете " +"переглядати і редагувати файли формату Raw. Будь ласка, перевірте на вашому " +"комп'ютері інсталяцію libkdcraw." + +#: libkdcraw/dcrawsettingswidget.cpp:145 +msgid "16 bits color depth" +msgstr "16-бітова глибина кольору" + +#: libkdcraw/dcrawsettingswidget.cpp:146 +msgid "" +"

          If enabled, all RAW files will be decoded in 16-bit color depth using a " +"linear gamma curve. To prevent dark picture rendering in the editor, it is " +"recommended to use Color Management in this mode." +"

          If disabled, all RAW files will be decoded in 8-bit color depth with a " +"BT.709 gamma curve and a 99th-percentile white point. This mode is faster than " +"16-bit decoding." +msgstr "" +"

          Якщо ввімкнено, всі RAW-файли будуть декодуватись у 16-бітову глибину " +"кольору за допомогою лінійної кривої гами. Для отримання доброї якості " +"зображення рекомендовано в цьому режимі вживати керування кольором. " +"

          Якщо вимкнено, всі RAW-файли будуть декодуватись у 8-бітову глибину кольору " +"за допомогою кривої гами BT.709 і 99% білої точки. Цей режим швидший за " +"16-бітове перетворення." + +#: libkdcraw/dcrawsettingswidget.cpp:167 +msgid "Interpolate RGB as four colors" +msgstr "Інтерполювати RGB як чотири кольори" + +#: libkdcraw/dcrawsettingswidget.cpp:168 +msgid "" +"

          Interpolate RGB as four colors" +"

          The default is to assume that all green pixels are the same. If even-row " +"green pixels are more sensitive to ultraviolet light than odd-row this " +"difference causes a mesh pattern in the output; using this option solves this " +"problem with minimal loss of detail." +"

          To resume, this option blurs the image a little, but it eliminates false 2x2 " +"mesh patterns with VNG quality method or mazes with AHD quality method." +msgstr "" +"

          Інтерполювати RGB як чотири кольори" +"

          Типово припускається, що всі зелені пікселі однакові. Однак, якщо зелені " +"пікселі парних рядів більш чутливі до ультрафіолетового світла, ніж пікселі в " +"непарних рядах, то ця різниця утворює на зображенні сітку. Вживання цього " +"параметра вирішує цю проблему з мінімальною втратою якості." +"

          Якщо коротко, цей параметр трохи розмиває зображення, але позбувається " +"фальшивого візерунка сітки 2x2 за допомогою методу якості VNG або " +"переплітається з методом AHD." + +#: libkdcraw/dcrawsettingswidget.cpp:183 +#, c-format +msgid "dcraw %1" +msgstr "dcraw: %1" + +#: libkdcraw/dcrawsettingswidget.cpp:186 +msgid "Visit dcraw project website" +msgstr "Відвідайте веб-сайт проекту dcraw" + +#: libkdcraw/dcrawsettingswidget.cpp:191 +msgid "White Balance:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:193 +msgid "Default D65 White Balance" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:194 +#, fuzzy +msgid "Camera White Balance" +msgstr "Вживати баланс білого з камери" + +#: libkdcraw/dcrawsettingswidget.cpp:195 +#, fuzzy +msgid "Automatic White Balance" +msgstr "Автоматичний баланс кольору" + +#: libkdcraw/dcrawsettingswidget.cpp:196 +#, fuzzy +msgid "Manual White balance" +msgstr "Вживати баланс білого з камери" + +#: libkdcraw/dcrawsettingswidget.cpp:197 +msgid "" +"

          White Balance" +"

          Configure the raw white balance :" +"

          Default D65 White Balance: Use a standard daylight D65 white balance " +"(dcraw defaults)" +"

          Camera White Balance: Use the white balance specified by the camera. " +"If not available, reverts to default neutral white balance" +"

          Automatic White Balance: Calculates an automatic white balance " +"averaging the entire image" +"

          Manual White balance: Set a custom temperature and green level values" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:211 +msgid "Temperature (K):" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:212 +#, fuzzy +msgid "

          Temperature

          Set here the color temperature." +msgstr "

          Поріг

          Вкажіть поріг зменшення шуму." + +#: libkdcraw/dcrawsettingswidget.cpp:221 +msgid "Green:" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:222 +msgid "" +"

          Set here the green component to set magenta color cast removal level." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:230 +msgid "Highlights:" +msgstr "Виблиски:" + +#: libkdcraw/dcrawsettingswidget.cpp:232 +msgid "Solid white" +msgstr "Чисте біле" + +#: libkdcraw/dcrawsettingswidget.cpp:233 +msgid "Unclip" +msgstr "Не об'єднувати" + +#: libkdcraw/dcrawsettingswidget.cpp:234 +msgid "Blend" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:235 +msgid "Rebuild" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:236 +#, fuzzy +msgid "" +"

          Highlights" +"

          Select here the highlight clipping method:" +"

          Solid white: clip all highlights to solid white" +"

          Unclip: leave highlights unclipped in various shades of pink" +"

          Blend:Blend clipped and unclipped values together for a gradual fade " +"to white" +"

          Rebuild: reconstruct highlights using a level value" +msgstr "" +"

          Виблиски" +"

          Виберіть спосіб обрізання виблисків:" +"

          Чисте біле: об'єднати всі виблиски в чисте біле " +"

          Не об'єднувати: залишити виблиски у відтінках рожевого " +"

          Реконструювати: реконструювати виблиски, вживаючи значення рівня." + +#: libkdcraw/dcrawsettingswidget.cpp:248 +msgid "Level:" +msgstr "Рівень:" + +#: libkdcraw/dcrawsettingswidget.cpp:251 +msgid "" +"

          Level" +"

          Specify the reconstruct highlight level. Low values favor whites and high " +"values favor colors." +msgstr "" +"

          Рівень " +"

          Вкажіть рівень для реконструкції виблисків в зображенні виводу. Низькі " +"значення - надається перевага білому, великі значення - кольорам." + +#: libkdcraw/dcrawsettingswidget.cpp:260 +msgid "Brightness:" +msgstr "Яскравість:" + +#: libkdcraw/dcrawsettingswidget.cpp:264 +msgid "" +"

          Brighness" +"

          Specify the brightness level of output image.The default value is 1.0 (works " +"in 8-bit mode only)." +"

          " +msgstr "" +"

          Яскравість " +"

          Вкажіть рівень яскравості зображення виводу.Типовий: 1.0 (працює тільки в " +"8-бітовому режимі)." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:273 +msgid "Quality (interpolation):" +msgstr "Якість (інтерполяція):" + +#: libkdcraw/dcrawsettingswidget.cpp:275 +msgid "Bilinear" +msgstr "Білінійна" + +#: libkdcraw/dcrawsettingswidget.cpp:276 +msgid "VNG" +msgstr "VNG" + +#: libkdcraw/dcrawsettingswidget.cpp:277 +msgid "PPG" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:278 +msgid "AHD" +msgstr "AHD" + +#: libkdcraw/dcrawsettingswidget.cpp:279 +msgid "" +"

          Quality" +"

          Select here the demosaicing RAW images decoding interpolation method. A " +"demosaicing algorithm is a digital image process used to interpolate a complete " +"image from the partial raw data received from the color-filtered image sensor " +"internal to many digital cameras in form of a matrix of colored pixels. Also " +"known as CFA interpolation or color reconstruction, another common spelling is " +"demosaicing. There are 3 methods to demosaicing RAW images:" +"

          Bilinear: use high-speed but low-quality bilinear interpolation " +"(default - for slow computer). In this method, the red value of a non-red pixel " +"is computed as the average of the adjacent red pixels, and similar for blue and " +"green." +"

          VNG: use Variable Number of Gradients interpolation. This method " +"computes gradients near the pixel of interest and uses the lower gradients " +"(representing smoother and more similar parts of the image) to make an " +"estimate." +"

          PPG: use Patterned Pixel Grouping interpolation. Pixel Grouping uses " +"assumptions about natural scenery in making estimates. It has fewer color " +"artifacts on natural images than the Variable Number of Gradients method." +"

          AHD: use Adaptive Homogeneity-Directed interpolation. This method " +"selects the direction of interpolation so as to maximize a homogeneity metric, " +"thus typically minimizing color artifacts." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:307 +msgid "Enable noise reduction" +msgstr "Увімкнути зменшення шуму" + +#: libkdcraw/dcrawsettingswidget.cpp:308 +msgid "" +"

          Enable Noise Reduction" +"

          Use wavelets to erase noise while preserving real detail." +"

          " +msgstr "" +"

          Увімкнути зменшення шуму" +"

          Вживайте wavelets для стирання шуму, але залишаючи без зміни деталі." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:315 +msgid "Threshold:" +msgstr "Поріг:" + +#: libkdcraw/dcrawsettingswidget.cpp:316 +msgid "" +"

          Threshold" +"

          Set here the noise reduction threshold value to use." +msgstr "

          Поріг

          Вкажіть поріг зменшення шуму." + +#: libkdcraw/dcrawsettingswidget.cpp:324 +#, fuzzy +msgid "Enable Chromatic Aberration correction" +msgstr "Увімкнути зменшення шуму" + +#: libkdcraw/dcrawsettingswidget.cpp:325 +msgid "" +"

          Enable Chromatic Aberration correction" +"

          Enlarge the raw red and blue layers by the given factors, typically 0.999 to " +"1.001, to correct chromatic aberration." +"

          " +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:331 +msgid "Red multiplier:" +msgstr "Коефіцієнт червоного:" + +#: libkdcraw/dcrawsettingswidget.cpp:335 +msgid "" +"

          Red multiplier" +"

          Set here the magnification factor of the red layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:338 +msgid "Blue multiplier:" +msgstr "Коефіцієнт синього:" + +#: libkdcraw/dcrawsettingswidget.cpp:342 +msgid "" +"

          Blue multiplier" +"

          Set here the magnification factor of the blue layer" +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:354 +msgid "Color space:" +msgstr "Простір кольорів:" + +#: libkdcraw/dcrawsettingswidget.cpp:356 +msgid "Raw (linear)" +msgstr "Raw (лінійний)" + +#: libkdcraw/dcrawsettingswidget.cpp:357 +msgid "sRGB" +msgstr "sRGB" + +#: libkdcraw/dcrawsettingswidget.cpp:358 +msgid "Adobe RGB" +msgstr "Adobe RGB" + +#: libkdcraw/dcrawsettingswidget.cpp:359 +msgid "Wide Gamut" +msgstr "Широка гама" + +#: libkdcraw/dcrawsettingswidget.cpp:360 +msgid "Pro-Photo" +msgstr "Pro-Photo" + +#: libkdcraw/dcrawsettingswidget.cpp:361 +msgid "" +"

          Color space" +"

          Select here the output color space used to decode RAW data." +"

          Raw (linear): in this mode, no output color space is used during RAW " +"decoding." +"

          sRGB: this is a RGB color space, created cooperatively by " +"Hewlett-Packard and Microsoft. It is the best choice for images destined for " +"the Web and portrait photography." +"

          Adobe RGB: this color space is an extended RGB color space, developed " +"by Adobe. It is used for photography applications such as advertising and fine " +"art." +"

          Wide Gamut: this color space is an expanded version of the Adobe RGB " +"color space." +"

          Pro-Photo: this color space is an RGB color space, developed by " +"Kodak, that offers an especially large gamut designed for use with photographic " +"outputs in mind." +msgstr "" + +#: libkdcraw/dcrawsettingswidget.cpp:391 +msgid "Standard" +msgstr "Стандартний" + +#: libkdcraw/dcrawsettingswidget.cpp:398 +msgid "Do not stretch or rotate pixels" +msgstr "Не розтягувати і не обертати пікселі" + +#: libkdcraw/dcrawsettingswidget.cpp:399 +msgid "" +"

          Do not stretch or rotate pixels" +"

          For Fuji Super CCD cameras, show the image tilted 45 degrees. For cameras " +"with non-square pixels, do not stretch the image to its correct aspect ratio. " +"In any case, this option guarantees that each output pixel corresponds to one " +"RAW pixel." +"

          " +msgstr "" +"

          Не розтягувати і не обертати пікселі" +"

          Для камер з Fuji Super CCD показувати зображення з нахилом 45 градусів. Для " +"камер з неквадратними пікселями - не розтягувати зображення до його правильних " +"пропорцій. Цей параметр гарантує, що кожний піксель виводу відповідає одному " +"пікселю формату RAW." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:409 +msgid "Black point" +msgstr "Чорна точка" + +#: libkdcraw/dcrawsettingswidget.cpp:410 +msgid "" +"

          Black point" +"

          Use a specific black point value to decode RAW pictures. If you set this " +"option to off, the Black Point value will be automatically computed." +"

          " +msgstr "" +"

          Чорна точка" +"

          Вживати певне значення чорної точки для декодування зображень RAW. Якщо ви " +"вимкнете цей параметр, то значення чорної точки буде вирахуване автоматично." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:416 +msgid "" +"

          Black point value" +"

          Specify specific black point value of the output image." +"

          " +msgstr "" +"

          Значення чорної точки" +"

          Вкажіть значення чорної точки зображення виводу." +"

          " + +#: libkdcraw/dcrawsettingswidget.cpp:424 +msgid "Advanced" +msgstr "Додаткові" + +#~ msgid "

          Use camera white balance

          Use the camera's custom white-balance settings. If this can not be found, reverts to the default (which is to use fixed daylight values, calculated from sample images)." +#~ msgstr "

          Вживати баланс білого з камери

          Вживати налаштування балансу білого з камери. Типово вживаються фіксовані значення денного світла, які вираховуються з зображень-зразків. Якщо його неможливо знайти, то повернути до типового." + +#, fuzzy +#~ msgid "

          Automatic color balance

          Calculate the white balance by averaging the entire image." +#~ msgstr "

          Автоматичний баланс кольору

          Типовим є використання фіксованого балансу кольорів, який взято на основі білої картки сфотографованої при сонячному світлі." + +#~ msgid "Color balance multipliers" +#~ msgstr "Коефіцієнти балансу кольору" + +#~ msgid "Green 1 multiplier:" +#~ msgstr "Коефіцієнт зеленого 1:" + +#~ msgid "Green 2 multiplier:" +#~ msgstr "Коефіцієнт зеленого 2:" + +#~ msgid "Reconstruct" +#~ msgstr "Реконструювати" diff --git a/subdirs b/subdirs new file mode 100644 index 0000000..718865c --- /dev/null +++ b/subdirs @@ -0,0 +1,4 @@ +libkexiv2 +libkipi +libkdcraw +po