Initial import
This commit is contained in:
		
						commit
						0214b3b06a
					
				| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					obj
 | 
				
			||||||
 | 
					html
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,278 @@
 | 
				
			||||||
 | 
					                    GNU GENERAL PUBLIC LICENSE
 | 
				
			||||||
 | 
					                       Version 2, June 1991
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 | 
				
			||||||
 | 
					                       59 Temple Place, Suite 330, Boston, MA  02111-1307  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.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					libiso8601
 | 
				
			||||||
 | 
					========================================================================
 | 
				
			||||||
 | 
					(c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					Released under the GNU GPLv2. See file COPYING or 
 | 
				
			||||||
 | 
					http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Really Quick Instructions
 | 
				
			||||||
 | 
					-------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To build: ./make.sh
 | 
				
			||||||
 | 
					To install: ./make.sh install
 | 
				
			||||||
 | 
					    (you might want to set PREFIX, by default it's /usr/local)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@TODO@
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,168 @@
 | 
				
			||||||
 | 
					<?xml version = '1.0'?>
 | 
				
			||||||
 | 
					<kdevelop>
 | 
				
			||||||
 | 
					  <general>
 | 
				
			||||||
 | 
					    <author>Laurence Withers</author>
 | 
				
			||||||
 | 
					    <email>l@lwithers.me.uk</email>
 | 
				
			||||||
 | 
					    <version>$VERSION$</version>
 | 
				
			||||||
 | 
					    <projectmanagement>KDevCustomProject</projectmanagement>
 | 
				
			||||||
 | 
					    <primarylanguage>C++</primarylanguage>
 | 
				
			||||||
 | 
					    <ignoreparts/>
 | 
				
			||||||
 | 
					    <projectdirectory>.</projectdirectory>
 | 
				
			||||||
 | 
					    <absoluteprojectpath>false</absoluteprojectpath>
 | 
				
			||||||
 | 
					    <description/>
 | 
				
			||||||
 | 
					    <versioncontrol/>
 | 
				
			||||||
 | 
					  </general>
 | 
				
			||||||
 | 
					  <kdevcustomproject>
 | 
				
			||||||
 | 
					    <run>
 | 
				
			||||||
 | 
					      <mainprogram>/bin/true</mainprogram>
 | 
				
			||||||
 | 
					      <directoryradio>executable</directoryradio>
 | 
				
			||||||
 | 
					      <customdirectory>/</customdirectory>
 | 
				
			||||||
 | 
					      <programargs/>
 | 
				
			||||||
 | 
					      <terminal>false</terminal>
 | 
				
			||||||
 | 
					      <autocompile>true</autocompile>
 | 
				
			||||||
 | 
					      <envvars/>
 | 
				
			||||||
 | 
					    </run>
 | 
				
			||||||
 | 
					    <build>
 | 
				
			||||||
 | 
					      <buildtool>make</buildtool>
 | 
				
			||||||
 | 
					      <builddir/>
 | 
				
			||||||
 | 
					    </build>
 | 
				
			||||||
 | 
					    <make>
 | 
				
			||||||
 | 
					      <abortonerror>false</abortonerror>
 | 
				
			||||||
 | 
					      <numberofjobs>1</numberofjobs>
 | 
				
			||||||
 | 
					      <prio>0</prio>
 | 
				
			||||||
 | 
					      <dontact>false</dontact>
 | 
				
			||||||
 | 
					      <makebin>./make.sh</makebin>
 | 
				
			||||||
 | 
					      <defaulttarget>default</defaulttarget>
 | 
				
			||||||
 | 
					      <makeoptions/>
 | 
				
			||||||
 | 
					      <selectedenvironment>default</selectedenvironment>
 | 
				
			||||||
 | 
					      <environments>
 | 
				
			||||||
 | 
					        <default/>
 | 
				
			||||||
 | 
					      </environments>
 | 
				
			||||||
 | 
					    </make>
 | 
				
			||||||
 | 
					    <general>
 | 
				
			||||||
 | 
					      <activedir/>
 | 
				
			||||||
 | 
					    </general>
 | 
				
			||||||
 | 
					  </kdevcustomproject>
 | 
				
			||||||
 | 
					  <kdevdebugger>
 | 
				
			||||||
 | 
					    <general>
 | 
				
			||||||
 | 
					      <dbgshell/>
 | 
				
			||||||
 | 
					      <programargs/>
 | 
				
			||||||
 | 
					      <gdbpath/>
 | 
				
			||||||
 | 
					      <configGdbScript/>
 | 
				
			||||||
 | 
					      <runShellScript/>
 | 
				
			||||||
 | 
					      <runGdbScript/>
 | 
				
			||||||
 | 
					      <breakonloadinglibs>true</breakonloadinglibs>
 | 
				
			||||||
 | 
					      <separatetty>false</separatetty>
 | 
				
			||||||
 | 
					      <floatingtoolbar>false</floatingtoolbar>
 | 
				
			||||||
 | 
					    </general>
 | 
				
			||||||
 | 
					    <display>
 | 
				
			||||||
 | 
					      <staticmembers>false</staticmembers>
 | 
				
			||||||
 | 
					      <demanglenames>true</demanglenames>
 | 
				
			||||||
 | 
					      <outputradix>10</outputradix>
 | 
				
			||||||
 | 
					    </display>
 | 
				
			||||||
 | 
					  </kdevdebugger>
 | 
				
			||||||
 | 
					  <kdevdoctreeview>
 | 
				
			||||||
 | 
					    <ignoretocs>
 | 
				
			||||||
 | 
					      <toc>ada</toc>
 | 
				
			||||||
 | 
					      <toc>ada_bugs_gcc</toc>
 | 
				
			||||||
 | 
					      <toc>bash</toc>
 | 
				
			||||||
 | 
					      <toc>bash_bugs</toc>
 | 
				
			||||||
 | 
					      <toc>clanlib</toc>
 | 
				
			||||||
 | 
					      <toc>fortran_bugs_gcc</toc>
 | 
				
			||||||
 | 
					      <toc>gnome1</toc>
 | 
				
			||||||
 | 
					      <toc>gnustep</toc>
 | 
				
			||||||
 | 
					      <toc>gtk</toc>
 | 
				
			||||||
 | 
					      <toc>gtk_bugs</toc>
 | 
				
			||||||
 | 
					      <toc>haskell</toc>
 | 
				
			||||||
 | 
					      <toc>haskell_bugs_ghc</toc>
 | 
				
			||||||
 | 
					      <toc>java_bugs_gcc</toc>
 | 
				
			||||||
 | 
					      <toc>java_bugs_sun</toc>
 | 
				
			||||||
 | 
					      <toc>kde2book</toc>
 | 
				
			||||||
 | 
					      <toc>opengl</toc>
 | 
				
			||||||
 | 
					      <toc>pascal_bugs_fp</toc>
 | 
				
			||||||
 | 
					      <toc>php</toc>
 | 
				
			||||||
 | 
					      <toc>php_bugs</toc>
 | 
				
			||||||
 | 
					      <toc>perl</toc>
 | 
				
			||||||
 | 
					      <toc>perl_bugs</toc>
 | 
				
			||||||
 | 
					      <toc>python</toc>
 | 
				
			||||||
 | 
					      <toc>python_bugs</toc>
 | 
				
			||||||
 | 
					      <toc>qt-kdev3</toc>
 | 
				
			||||||
 | 
					      <toc>ruby</toc>
 | 
				
			||||||
 | 
					      <toc>ruby_bugs</toc>
 | 
				
			||||||
 | 
					      <toc>sdl</toc>
 | 
				
			||||||
 | 
					      <toc>sw</toc>
 | 
				
			||||||
 | 
					      <toc>w3c-dom-level2-html</toc>
 | 
				
			||||||
 | 
					      <toc>w3c-svg</toc>
 | 
				
			||||||
 | 
					      <toc>w3c-uaag10</toc>
 | 
				
			||||||
 | 
					      <toc>wxwidgets_bugs</toc>
 | 
				
			||||||
 | 
					    </ignoretocs>
 | 
				
			||||||
 | 
					    <ignoreqt_xml>
 | 
				
			||||||
 | 
					      <toc>Guide to the Qt Translation Tools</toc>
 | 
				
			||||||
 | 
					      <toc>Qt Assistant Manual</toc>
 | 
				
			||||||
 | 
					      <toc>Qt Designer Manual</toc>
 | 
				
			||||||
 | 
					      <toc>Qt Reference Documentation</toc>
 | 
				
			||||||
 | 
					      <toc>qmake User Guide</toc>
 | 
				
			||||||
 | 
					    </ignoreqt_xml>
 | 
				
			||||||
 | 
					    <ignoredoxygen>
 | 
				
			||||||
 | 
					      <toc>KDE Libraries (Doxygen)</toc>
 | 
				
			||||||
 | 
					    </ignoredoxygen>
 | 
				
			||||||
 | 
					  </kdevdoctreeview>
 | 
				
			||||||
 | 
					  <kdevfilecreate>
 | 
				
			||||||
 | 
					    <filetypes/>
 | 
				
			||||||
 | 
					    <useglobaltypes>
 | 
				
			||||||
 | 
					      <type ext="cpp" />
 | 
				
			||||||
 | 
					      <type ext="h" />
 | 
				
			||||||
 | 
					    </useglobaltypes>
 | 
				
			||||||
 | 
					  </kdevfilecreate>
 | 
				
			||||||
 | 
					  <cppsupportpart>
 | 
				
			||||||
 | 
					    <filetemplates>
 | 
				
			||||||
 | 
					      <interfacesuffix>.h</interfacesuffix>
 | 
				
			||||||
 | 
					      <implementationsuffix>.cpp</implementationsuffix>
 | 
				
			||||||
 | 
					    </filetemplates>
 | 
				
			||||||
 | 
					  </cppsupportpart>
 | 
				
			||||||
 | 
					  <kdevcppsupport>
 | 
				
			||||||
 | 
					    <codecompletion>
 | 
				
			||||||
 | 
					      <includeGlobalFunctions>true</includeGlobalFunctions>
 | 
				
			||||||
 | 
					      <includeTypes>true</includeTypes>
 | 
				
			||||||
 | 
					      <includeEnums>true</includeEnums>
 | 
				
			||||||
 | 
					      <includeTypedefs>false</includeTypedefs>
 | 
				
			||||||
 | 
					      <automaticCodeCompletion>true</automaticCodeCompletion>
 | 
				
			||||||
 | 
					      <automaticArgumentsHint>true</automaticArgumentsHint>
 | 
				
			||||||
 | 
					      <automaticHeaderCompletion>true</automaticHeaderCompletion>
 | 
				
			||||||
 | 
					      <codeCompletionDelay>1</codeCompletionDelay>
 | 
				
			||||||
 | 
					      <argumentsHintDelay>1</argumentsHintDelay>
 | 
				
			||||||
 | 
					      <headerCompletionDelay>250</headerCompletionDelay>
 | 
				
			||||||
 | 
					    </codecompletion>
 | 
				
			||||||
 | 
					    <creategettersetter>
 | 
				
			||||||
 | 
					      <prefixGet/>
 | 
				
			||||||
 | 
					      <prefixSet>set</prefixSet>
 | 
				
			||||||
 | 
					      <prefixVariable>m_,_</prefixVariable>
 | 
				
			||||||
 | 
					      <parameterName>theValue</parameterName>
 | 
				
			||||||
 | 
					      <inlineGet>true</inlineGet>
 | 
				
			||||||
 | 
					      <inlineSet>true</inlineSet>
 | 
				
			||||||
 | 
					    </creategettersetter>
 | 
				
			||||||
 | 
					    <references/>
 | 
				
			||||||
 | 
					  </kdevcppsupport>
 | 
				
			||||||
 | 
					  <kdevdocumentation>
 | 
				
			||||||
 | 
					    <projectdoc>
 | 
				
			||||||
 | 
					      <docsystem/>
 | 
				
			||||||
 | 
					      <docurl/>
 | 
				
			||||||
 | 
					      <usermanualurl/>
 | 
				
			||||||
 | 
					    </projectdoc>
 | 
				
			||||||
 | 
					  </kdevdocumentation>
 | 
				
			||||||
 | 
					  <kdevfileview>
 | 
				
			||||||
 | 
					    <groups>
 | 
				
			||||||
 | 
					      <hidenonprojectfiles>false</hidenonprojectfiles>
 | 
				
			||||||
 | 
					      <hidenonlocation>false</hidenonlocation>
 | 
				
			||||||
 | 
					    </groups>
 | 
				
			||||||
 | 
					    <tree>
 | 
				
			||||||
 | 
					      <hidepatterns>*.o,*.lo,CVS</hidepatterns>
 | 
				
			||||||
 | 
					      <hidenonprojectfiles>false</hidenonprojectfiles>
 | 
				
			||||||
 | 
					      <showvcsfields>false</showvcsfields>
 | 
				
			||||||
 | 
					    </tree>
 | 
				
			||||||
 | 
					  </kdevfileview>
 | 
				
			||||||
 | 
					  <ctagspart>
 | 
				
			||||||
 | 
					    <customArguments/>
 | 
				
			||||||
 | 
					    <customTagfilePath/>
 | 
				
			||||||
 | 
					  </ctagspart>
 | 
				
			||||||
 | 
					</kdevelop>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					# KDevelop Custom Project File List
 | 
				
			||||||
 | 
					src/lib/BottomHeader.h
 | 
				
			||||||
 | 
					src/lib/TopHeader.h
 | 
				
			||||||
 | 
					src/lib/TopSource.cpp
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,292 @@
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					# libiso8601/make.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					#  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					#  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This file is the script used to build libiso8601. There are some
 | 
				
			||||||
 | 
					# options that can be edited; these are set below (or you can pass them
 | 
				
			||||||
 | 
					# in as variables).
 | 
				
			||||||
 | 
					[ -z "${CC}" ] && CC="gcc"
 | 
				
			||||||
 | 
					[ -z "${CXX}" ] && CXX="g++"
 | 
				
			||||||
 | 
					[ -z "${CFLAGS}" ] && CFLAGS="-g -O2 -W -Wall"
 | 
				
			||||||
 | 
					[ -z "${PREFIX}" ] && PREFIX="/usr/local"
 | 
				
			||||||
 | 
					[ -z "${LIBDIR}" ] && LIBDIR="${PREFIX}/lib"
 | 
				
			||||||
 | 
					[ -z "${BINDIR}" ] && BINDIR="${PREFIX}/bin"
 | 
				
			||||||
 | 
					[ -z "${INCLUDEDIR}" ] && INCLUDEDIR="${PREFIX}/include"
 | 
				
			||||||
 | 
					[ -z "${DOCSDIR}" ] && DOCSDIR="${PREFIX}/share/doc/libiso8601"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# for pkg-config
 | 
				
			||||||
 | 
					[ -z "${PKGCONFDIR}" ] && PKGCONFDIR="${LIBDIR}/pkgconfig"
 | 
				
			||||||
 | 
					[ -z "${FINALLIBDIR}" ] && FINALLIBDIR="${LIBDIR}"
 | 
				
			||||||
 | 
					[ -z "${FINALINCLUDEDIR}" ] && FINALINCLUDEDIR="${INCLUDEDIR}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# for SDCC-built firmware
 | 
				
			||||||
 | 
					[ -z "${HEXDIR}" ] && HEXDIR="${PREFIX}/share/firmware"
 | 
				
			||||||
 | 
					[ -z "${SDCC}" ] && SDCC="sdcc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Get version information
 | 
				
			||||||
 | 
					source version || exit 1
 | 
				
			||||||
 | 
					VERSION="${VERMAJOR}.${VERMINOR}.${VERMICRO}"
 | 
				
			||||||
 | 
					if [ ! -z "${VEREXTRA}" ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    VERSION="${VERSION}-${VEREXTRA}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Get standard functions
 | 
				
			||||||
 | 
					[ -z "${VERBOSE}" ] && VERBOSE="0"
 | 
				
			||||||
 | 
					source scripts/functions.sh || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# List of directories which will be emptied by clean.
 | 
				
			||||||
 | 
					OUTPUT_DIRS="obj html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This function makes a monolithic file out of several source files. Its
 | 
				
			||||||
 | 
					# first argument is the name of the output file, and the second is the
 | 
				
			||||||
 | 
					# format of monolithic file to create (for example, "C" will cause the
 | 
				
			||||||
 | 
					# inclusion of "#line" directives at the top of each included file).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# It also examines the following variables:
 | 
				
			||||||
 | 
					#  MONOLITHIC_TESTS       if any file mentioned in this list is newer
 | 
				
			||||||
 | 
					#                         than the output file, then we recreate it
 | 
				
			||||||
 | 
					#  MONOLITHIC_SOURCE      a list (in order) of the source files
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Recognised formats are:
 | 
				
			||||||
 | 
					#  none                   no special processing happens before each file
 | 
				
			||||||
 | 
					#  C                      #line directives are inserted before each file
 | 
				
			||||||
 | 
					#                         and VERSION, VERMAJOR etc. are #defined
 | 
				
			||||||
 | 
					#  Ch                     Like C, but for header files (no VERSION #defines)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					make_monolithic() {
 | 
				
			||||||
 | 
					    if [ $# -ne 2 ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        print_failure "make_monolithic() called with wrong number of arguments"
 | 
				
			||||||
 | 
					        print_failure "(expecting 2, got $#)"
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MONOLITHIC_OUT=$1
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # extract options
 | 
				
			||||||
 | 
					    HASHLINE=0
 | 
				
			||||||
 | 
					    VERDEFINE=0
 | 
				
			||||||
 | 
					    if [ "$2" == "C" ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        HASHLINE=1
 | 
				
			||||||
 | 
					        VERDEFINE=1
 | 
				
			||||||
 | 
					    elif [ "$2" == "Ch" ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        HASHLINE=1
 | 
				
			||||||
 | 
					    elif [ "$2" == "none" ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					            HASHLINE=0 # dummy command
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					            print_failure "make_monolithic() called with unknown format $2"
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo " Building monolithic file '${MONOLITHIC_OUT}'..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MODIFIED=0
 | 
				
			||||||
 | 
					    for FILE in ${MONOLITHIC_TESTS} ${MONOLITHIC_SOURCE}
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					        if [ ! -e "${FILE}" ]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					            print_failure "'${FILE}' does not exist"
 | 
				
			||||||
 | 
					            return 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if [ "${FILE}" -nt ${MONOLITHIC_OUT} ]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					            MODIFIED=1
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [ ${MODIFIED} -ne 0 ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        do_cmd mkdir -p $(dirname ${MONOLITHIC_OUT})
 | 
				
			||||||
 | 
					        do_cmd rm -f ${MONOLITHIC_OUT} || exit 1
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if [ ${VERDEFINE} -ne 0 ]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					            do_cmd_redir ${MONOLITHIC_OUT} echo "#define VERSION \"${VERSION}\"" || return 1
 | 
				
			||||||
 | 
					            do_cmd_redir ${MONOLITHIC_OUT} echo "#define VERMAJOR ${VERMAJOR}" || return 1
 | 
				
			||||||
 | 
					            do_cmd_redir ${MONOLITHIC_OUT} echo "#define VERMINOR ${VERMINOR}" || return 1
 | 
				
			||||||
 | 
					            do_cmd_redir ${MONOLITHIC_OUT} echo "#define VERMICRO ${VERMICRO}" || return 1
 | 
				
			||||||
 | 
					            do_cmd_redir ${MONOLITHIC_OUT} echo "#define VEREXTRA \"${VEREXTRA}\"" || return 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for FILE in ${MONOLITHIC_SOURCE}
 | 
				
			||||||
 | 
					        do
 | 
				
			||||||
 | 
					            if [ ${HASHLINE} -ne 0 ]
 | 
				
			||||||
 | 
					            then
 | 
				
			||||||
 | 
					                do_cmd_redir ${MONOLITHIC_OUT} echo "#line 1 \"${FILE}\"" || return 1
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					            do_cmd_redir ${MONOLITHIC_OUT} cat "${FILE}" || return 1
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					        print_success "Done"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        print_success "Up to date"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This will build a directory tree, if required, with mode 0755. The
 | 
				
			||||||
 | 
					# argument is the directory to build.
 | 
				
			||||||
 | 
					build_dir_tree() {
 | 
				
			||||||
 | 
					    # sanity check
 | 
				
			||||||
 | 
					    if [ $# -ne 1 ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        print_failure "build_dir_tree() called with wrong number of arguments"
 | 
				
			||||||
 | 
					        print_failure "(expecting 1, got $#)"
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local DIR="$1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # if the directory already exists, return success
 | 
				
			||||||
 | 
					    [ -d "${DIR}" ] && return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # if something with this name already exists, but not a directory,
 | 
				
			||||||
 | 
					    # then fail
 | 
				
			||||||
 | 
					    if [ -e "${DIR}" ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        print_failure "Failed to create directory '${DIR}'"
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # build the directory, but if it fails, recurse a level (and handle
 | 
				
			||||||
 | 
					    # the case where recursion fails)
 | 
				
			||||||
 | 
					    mkdir "${DIR}" >& /dev/null
 | 
				
			||||||
 | 
					    if [ $? -ne 0 ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        build_dir_tree $(dirname "${DIR}") || return 1
 | 
				
			||||||
 | 
					        mkdir "${DIR}"
 | 
				
			||||||
 | 
					        if [ $? -ne 0 ]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					            print_failure "Failed to create directory '${DIR}'"
 | 
				
			||||||
 | 
					            return 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # set permissions on newly-created dir and return
 | 
				
			||||||
 | 
					    chmod 0755 "${DIR}"
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This will install a file. The first parameter is the source, and the
 | 
				
			||||||
 | 
					# second is the destination. The third is the octal mode.
 | 
				
			||||||
 | 
					install_file() {
 | 
				
			||||||
 | 
					    # figure out if $2 is a directory or not
 | 
				
			||||||
 | 
					    DEST_FILE="$2"
 | 
				
			||||||
 | 
					    [ -d "$2" ] && DEST_FILE="$2/$(basename $1)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo " Installing: '$1' -> '$2'"
 | 
				
			||||||
 | 
					    do_cmd cp -fP "$1" "${DEST_FILE}" || return 1
 | 
				
			||||||
 | 
					    do_cmd chmod "$3" "${DEST_FILE}" || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This will install a header file. It is basically similar to 
 | 
				
			||||||
 | 
					# install_file(), only we strip out the #line directives.
 | 
				
			||||||
 | 
					install_header() {
 | 
				
			||||||
 | 
					    DEST_FILE="$2"
 | 
				
			||||||
 | 
					    [ -d "$2" ] && DEST_FILE="$2/$(basename $1)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo " Installing header: '$1' -> '$2'"
 | 
				
			||||||
 | 
					    do_cmd rm -f ${DEST_FILE} || exit 1
 | 
				
			||||||
 | 
					    do_cmd_redir ${DEST_FILE} sed -e "s,^#line.*,," $1 || exit 1
 | 
				
			||||||
 | 
					    do_cmd chmod "$3" "${DEST_FILE}" || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This installs a symlink. The first argument is the symlink's name; the
 | 
				
			||||||
 | 
					# second the symlink's source filename, and the third is the directory
 | 
				
			||||||
 | 
					# in which to create the symlink.
 | 
				
			||||||
 | 
					install_symlink() {
 | 
				
			||||||
 | 
					    echo " Installing symlink: '$3/$2' -> '$1'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ( do_cmd cd $3; ln -sf $2 $1 ) || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					build_target() {
 | 
				
			||||||
 | 
					    ITEMS="src/$1/build.default"
 | 
				
			||||||
 | 
					    if [ ! -e "${ITEMS}" ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        ITEMS="$(find src -type f -name build.$1)"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if [ -z "${ITEMS}" ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        print_failure "Unrecognised target '$1'"
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for item in ${ITEMS}
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					        do_cmd source ${item} || exit 1
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					########################################################################
 | 
				
			||||||
 | 
					# Main script
 | 
				
			||||||
 | 
					########################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ $# -eq 0 ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    targets="default"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    targets="$@"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for func in ${targets}
 | 
				
			||||||
 | 
					do
 | 
				
			||||||
 | 
					    case ${func} in
 | 
				
			||||||
 | 
					    clean)
 | 
				
			||||||
 | 
					        echo "Cleaning..."
 | 
				
			||||||
 | 
					        rm -rf ${OUTPUT_DIRS}
 | 
				
			||||||
 | 
					        print_success "Done"
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # bad Kdevelop! bad!
 | 
				
			||||||
 | 
					    -j1)
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					    -k)
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    *)
 | 
				
			||||||
 | 
					        build_target ${func} || exit 1
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					    esac
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,54 @@
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					# libiso8601/test.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					#  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					#  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Running this script on its own will display a summary of all the
 | 
				
			||||||
 | 
					# available tests; running it with arguments runs the relevant test.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This runs a test, setting the correct library path.
 | 
				
			||||||
 | 
					run_test() {
 | 
				
			||||||
 | 
					    EXE=obj/tests/$1
 | 
				
			||||||
 | 
					    shift
 | 
				
			||||||
 | 
					    if [ ! -x ${EXE} ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        echo "No such test '${EXE}'"
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LD_LIBRARY_PATH="obj" ${EXE} "$@" || return 1
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This prints summary output from each test app.
 | 
				
			||||||
 | 
					print_tests() {
 | 
				
			||||||
 | 
					    echo "Available tests"
 | 
				
			||||||
 | 
					    echo "---------------------------------------------------------------------"
 | 
				
			||||||
 | 
					    for EXE in obj/tests/*
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					        [ -x ${EXE} ] || continue
 | 
				
			||||||
 | 
					        NAME=$(echo ${EXE} | sed 's,obj/tests/,,')
 | 
				
			||||||
 | 
					        echo -ne "${NAME}\t"
 | 
				
			||||||
 | 
					        LD_LIBRARY_PATH="obj" ${EXE} --print-summary
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Main script
 | 
				
			||||||
 | 
					if [ $# -eq 0 ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    print_tests
 | 
				
			||||||
 | 
					    exit 0
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					run_test $*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					build.c++.app
 | 
				
			||||||
 | 
					build.c++.lib
 | 
				
			||||||
 | 
					build.c++.qtapp
 | 
				
			||||||
 | 
					build.c++.tests
 | 
				
			||||||
 | 
					build.c.app
 | 
				
			||||||
 | 
					build.c.lib
 | 
				
			||||||
 | 
					build.c.tests
 | 
				
			||||||
 | 
					build.doxygen.docs
 | 
				
			||||||
 | 
					build.none.files
 | 
				
			||||||
 | 
					build.sdcc.firmware
 | 
				
			||||||
 | 
					module-create.sh
 | 
				
			||||||
 | 
					release.sh
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,68 @@
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					# libiso8601/scripts/functions.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					#  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					#  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Common functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Print a success message
 | 
				
			||||||
 | 
					print_success() {
 | 
				
			||||||
 | 
					    if [ -z "${TERM}" -o "${TERM}" == "dumb" ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        echo -n " - "
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        (echo -n -e " \E[32m* "; tput sgr0)
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    echo $*
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Print a failure message
 | 
				
			||||||
 | 
					print_failure() {
 | 
				
			||||||
 | 
					    if [ -z "${TERM}" -o "${TERM}" == "dumb" ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        echo -n " *** "
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        (echo -n -e " \E[31m*** "; tput sgr0)
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    echo $*
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This function carries out a command, but reports its failure if
 | 
				
			||||||
 | 
					# necessary.
 | 
				
			||||||
 | 
					do_cmd() {
 | 
				
			||||||
 | 
					    [ "${VERBOSE}" != "0" ] && echo "$@"
 | 
				
			||||||
 | 
					    "$@"
 | 
				
			||||||
 | 
					    if [ $? -ne 0 ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        print_failure "'$@' failed."
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This function carries out a command, but reports its failure if
 | 
				
			||||||
 | 
					# necessary.
 | 
				
			||||||
 | 
					do_cmd_redir() {
 | 
				
			||||||
 | 
					    DEST=$1
 | 
				
			||||||
 | 
					    shift
 | 
				
			||||||
 | 
					    [ "${VERBOSE}" != "0" ] && echo "$@ >> ${DEST}"
 | 
				
			||||||
 | 
					    "$@" >> ${DEST}
 | 
				
			||||||
 | 
					    if [ $? -ne 0 ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        print_failure "'$@' failed."
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					c lib libiso8601 iso8601.h
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/libiso8601/BottomHeader.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/libiso8601/TopHeader.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef HEADER_libiso8601
 | 
				
			||||||
 | 
					#define HEADER_libiso8601
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// standard includes, or includes needed for type declarations
 | 
				
			||||||
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/libiso8601/TopSource.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "iso8601.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Below are all the includes used throughout the library.
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					source src/libiso8601/build.lib
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					source src/libiso8601/build.install-lib
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					build_target libiso8601
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# make paths (this is for Gentoo in particular)
 | 
				
			||||||
 | 
					build_dir_tree "${LIBDIR}" || return 1
 | 
				
			||||||
 | 
					build_dir_tree "${PKGCONFDIR}" || return 1
 | 
				
			||||||
 | 
					build_dir_tree "${INCLUDEDIR}" || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# install library
 | 
				
			||||||
 | 
					echo "Installing libraries into '${LIBDIR}'"
 | 
				
			||||||
 | 
					install_file ${libiso8601} ${LIBDIR} 0755 || return 1
 | 
				
			||||||
 | 
					BASE="${libiso8601_BASE}.so"
 | 
				
			||||||
 | 
					MAJOR="${BASE}.${SOMAJOR}"
 | 
				
			||||||
 | 
					MINOR="${MAJOR}.${SOMINOR}"
 | 
				
			||||||
 | 
					MICRO="${MINOR}.${SOMICRO}"
 | 
				
			||||||
 | 
					install_symlink "${MINOR}" "${MICRO}" "${LIBDIR}"
 | 
				
			||||||
 | 
					install_symlink "${MAJOR}" "${MINOR}" "${LIBDIR}"
 | 
				
			||||||
 | 
					install_symlink "${BASE}" "${MAJOR}" "${LIBDIR}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# install header
 | 
				
			||||||
 | 
					echo "Installing header file '${libiso8601_HEADER}' into ${INCLUDEDIR}"
 | 
				
			||||||
 | 
					install_header ${libiso8601_HEADER} ${INCLUDEDIR} 0644 || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# install pkgconfig file
 | 
				
			||||||
 | 
					echo "Installing package config file into ${PKGCONFDIR}"
 | 
				
			||||||
 | 
					PKGCONFFILE=${PKGCONFDIR}/libiso8601.pc
 | 
				
			||||||
 | 
					do_cmd rm -f ${PKGCONFFILE}
 | 
				
			||||||
 | 
					do_cmd_redir ${PKGCONFFILE} sed \
 | 
				
			||||||
 | 
					    -e "s,@VERSION@,${VERSION}," \
 | 
				
			||||||
 | 
					    -e "s,@LIBDIR@,${FINALLIBDIR}," \
 | 
				
			||||||
 | 
					    -e "s,@INCLUDEDIR@,${FINALINCLUDEDIR}," \
 | 
				
			||||||
 | 
					    src/libiso8601/pkgconf.in
 | 
				
			||||||
 | 
					do_cmd chmod 0644 ${PKGCONFFILE}
 | 
				
			||||||
 | 
					print_success "Done"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,51 @@
 | 
				
			||||||
 | 
					# These are external variables, and shouldn't clash with anything else
 | 
				
			||||||
 | 
					#  libiso8601
 | 
				
			||||||
 | 
					#  libiso8601_BUILT
 | 
				
			||||||
 | 
					#  libiso8601_HEADER
 | 
				
			||||||
 | 
					#  libiso8601_BASE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z ${libiso8601_BUILT} ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    libiso8601_BASE=libiso8601
 | 
				
			||||||
 | 
					    source src/libiso8601/soversion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    libiso8601="obj/${libiso8601_BASE}.so.${SOMAJOR}.${SOMINOR}.${SOMICRO}"
 | 
				
			||||||
 | 
					    SO_EXTRA="-lrt -lc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo "Building library ${libiso8601}..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    do_cmd source src/libiso8601/build.monolithic || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MODIFIED=0
 | 
				
			||||||
 | 
					    for test in ${MONOLITHIC_TESTS} ${HDR} ${SRC}
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					        if [ ${test} -nt ${libiso8601} ]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					            MODIFIED=1
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [ ${MODIFIED} -ne 0 ]
 | 
				
			||||||
 | 
					    then
 | 
				
			||||||
 | 
					        echo " Compiling"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        SONAME="${libiso8601_BASE}.so.${SOMAJOR}.${SOMINOR}"
 | 
				
			||||||
 | 
					        do_cmd ${CC} ${CFLAGS} -Iobj -shared -fpic -o "${libiso8601}" \
 | 
				
			||||||
 | 
					            -Wl,-soname,${SONAME} \
 | 
				
			||||||
 | 
					            ${SRC} ${SO_EXTRA} || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # make tests work
 | 
				
			||||||
 | 
					        do_cmd ln -sf $(basename ${libiso8601}) obj/${SONAME} || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        print_success "Library built"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        print_success "Library up to date"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    libiso8601_BUILT=1
 | 
				
			||||||
 | 
					    libiso8601_HEADER=${HDR}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					# These are external variables, and shouldn't clash with anything else
 | 
				
			||||||
 | 
					#  libiso8601_MONOLITHIC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SRC="obj/libiso8601.c"
 | 
				
			||||||
 | 
					HDR="obj/iso8601.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MONOLITHIC_TESTS="src/libiso8601/build.lib src/libiso8601/build.monolithic"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z "${libiso8601_MONOLITHIC}" ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    MONOLITHIC_SOURCE="$(echo src/libiso8601/{TopHeader,types,functions,BottomHeader}.h)"
 | 
				
			||||||
 | 
					    make_monolithic ${HDR} Ch || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MONOLITHIC_SOURCE="$(echo src/libiso8601/{TopSource,c_library,calc,parser}.c)"
 | 
				
			||||||
 | 
					    make_monolithic ${SRC} C || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    libiso8601_MONOLITHIC=1
 | 
				
			||||||
 | 
					    MONOLITHIC_DOC="${MONOLITHIC_DOC} ${HDR}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,74 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/libiso8601/c_library.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iso8601_now(struct iso8601_date* date, struct iso8601_details* details)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    struct timespec ts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // populate the `struct iso8601_date' if it was passed
 | 
				
			||||||
 | 
					    if(date) {
 | 
				
			||||||
 | 
					        clock_gettime(CLOCK_REALTIME, &ts);
 | 
				
			||||||
 | 
					        iso8601_from_ts(date, &ts);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // populate the `struct iso8601_details' if it was passed
 | 
				
			||||||
 | 
					    if(details) {
 | 
				
			||||||
 | 
					        tzset();
 | 
				
			||||||
 | 
					        details->date_prec = iso8601_prec_day;
 | 
				
			||||||
 | 
					        details->time_prec = iso8601_prec_secfrac;
 | 
				
			||||||
 | 
					        details->tz_sec = timezone;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iso8601_from_ts(struct iso8601_date* date, const struct timespec* ts)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ldiv_t qr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qr = ldiv(ts->tv_sec, 86400);
 | 
				
			||||||
 | 
					    date->day = /* XXX days between 0000-001 and 1970-001 */ + qr.quot;
 | 
				
			||||||
 | 
					    date->sec = qr.rem;
 | 
				
			||||||
 | 
					    date->nsec = ts->tv_nsec;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iso8601_to_ts(struct timespec* ts, const struct iso8601_date* date)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ts->tv_sec = 86400L * date->day + date->sec;
 | 
				
			||||||
 | 
					    ts->tv_nsec = date->nsec;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iso8601_from_time_t(struct iso8601_date* date, const time_t* t)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ldiv_t qr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qr = ldiv(*t, 86400);
 | 
				
			||||||
 | 
					    date->day = /* XXX days between 0000-001 and 1970-001 */ + qr.quot;
 | 
				
			||||||
 | 
					    date->sec = qr.rem;
 | 
				
			||||||
 | 
					    date->nsec = 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iso8601_to_time_t(time_t* t, const struct iso8601_date* date)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    *t = 86400L * date->day + date->sec;
 | 
				
			||||||
 | 
					    if(date->nsec >= 500000000) ++*t;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,174 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/libiso8601/calc.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* CALCULATION ROUTINES
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  This file contains calculation routines used internally in the library. Our date format is the
 | 
				
			||||||
 | 
					 *  number of days elapsed since 0000-001 (so that date would be 0, -0001-365 would be -1, etc.).
 | 
				
			||||||
 | 
					 *  Time is represented as the number of seconds elapsed since midnight at the start of the day
 | 
				
			||||||
 | 
					 *  (so 0 is 00:00:00 and 86400 is 24:00:00, which we take to be infinitesimally before the start
 | 
				
			||||||
 | 
					 *  of the next day).
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int iso8601_isleap(int year)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					        if(year % 4) return 0;
 | 
				
			||||||
 | 
					        if(year % 100) return 1;
 | 
				
			||||||
 | 
					        if(!(year % 400)) return 1;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* struct monthcount, _days_in_month_common[], _days_in_month_leap[]
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  Tables of the number of days in each month, and the number of days elapsed since the start of
 | 
				
			||||||
 | 
					 *  the year for each month.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct monthcount {
 | 
				
			||||||
 | 
					    int elapsed, days;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct monthcount _days_in_month_common[] = {
 | 
				
			||||||
 | 
					    { 0, 31 },
 | 
				
			||||||
 | 
					    { 31, 28 },
 | 
				
			||||||
 | 
					    { 59, 31 },
 | 
				
			||||||
 | 
					    { 90, 30 },
 | 
				
			||||||
 | 
					    { 120, 31 },
 | 
				
			||||||
 | 
					    { 151, 30 },
 | 
				
			||||||
 | 
					    { 181, 31 },
 | 
				
			||||||
 | 
					    { 212, 31 },
 | 
				
			||||||
 | 
					    { 243, 30 },
 | 
				
			||||||
 | 
					    { 273, 31 },
 | 
				
			||||||
 | 
					    { 304, 30 },
 | 
				
			||||||
 | 
					    { 334, 31 }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct monthcount _days_in_month_leap[] = {
 | 
				
			||||||
 | 
					    { 0, 31 },
 | 
				
			||||||
 | 
					    { 31, 29 },
 | 
				
			||||||
 | 
					    { 60, 31 },
 | 
				
			||||||
 | 
					    { 91, 30 },
 | 
				
			||||||
 | 
					    { 121, 31 },
 | 
				
			||||||
 | 
					    { 152, 30 },
 | 
				
			||||||
 | 
					    { 182, 31 },
 | 
				
			||||||
 | 
					    { 213, 31 },
 | 
				
			||||||
 | 
					    { 244, 30 },
 | 
				
			||||||
 | 
					    { 274, 31 },
 | 
				
			||||||
 | 
					    { 305, 30 },
 | 
				
			||||||
 | 
					    { 335, 31 }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iso8601_to_cal(int* year, int* month, int* day, const struct iso8601_date* date)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    div_t qr;
 | 
				
			||||||
 | 
					    const struct monthcount* mc;
 | 
				
			||||||
 | 
					    int ndays = date->day;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Each 400 years have 97 leap days, giving 365*400+97 = 146097 days in 400 years
 | 
				
			||||||
 | 
					    qr = div(ndays, 146097);
 | 
				
			||||||
 | 
					    *year = qr.quot * 400;
 | 
				
			||||||
 | 
					    ndays = qr.rem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ensure that we always end up with between 0 and 146096 days remaining
 | 
				
			||||||
 | 
					    if(ndays < 0) {
 | 
				
			||||||
 | 
					        ndays += 146097;
 | 
				
			||||||
 | 
					        *year -= 400;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // we insert `fake' leap days for years 101, 201, 301
 | 
				
			||||||
 | 
					    if(ndays >= 36890) ++ndays;
 | 
				
			||||||
 | 
					    if(ndays >= 73415) ++ndays;
 | 
				
			||||||
 | 
					    if(ndays >= 109940) ++ndays;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // each remaining 100 year block has 24 leap days, giving 365*100+24 = 36524 days
 | 
				
			||||||
 | 
					    qr = div(ndays, 36525);
 | 
				
			||||||
 | 
					    *year += qr.quot * 100;
 | 
				
			||||||
 | 
					    ndays = qr.rem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // each 4-year block has 1 leap day, giving 365*4 + 1 = 1461 days
 | 
				
			||||||
 | 
					    qr = div(ndays, 1461);
 | 
				
			||||||
 | 
					    *year += qr.quot * 4;
 | 
				
			||||||
 | 
					    ndays = qr.rem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // the first year of a 4-year block has 1 leap day, 366 days
 | 
				
			||||||
 | 
					    if(ndays >= 366) {
 | 
				
			||||||
 | 
					        --ndays; // pretend to have dealt with leap day
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 365 days per remaining year
 | 
				
			||||||
 | 
					        qr = div(ndays, 365);
 | 
				
			||||||
 | 
					        *year += qr.quot;
 | 
				
			||||||
 | 
					        ndays = qr.rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // now we simply have number of days elapsed since day 001 in `year'.
 | 
				
			||||||
 | 
					    mc = iso8601_isleap(*year) ? _days_in_month_leap : _days_in_month_common;
 | 
				
			||||||
 | 
					    *month = 1;
 | 
				
			||||||
 | 
					    while(ndays >= mc->days) {
 | 
				
			||||||
 | 
					        ++*month;
 | 
				
			||||||
 | 
					        ndays -= mc->days;
 | 
				
			||||||
 | 
					        ++mc;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    *day = ndays + 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int iso8601_from_cal(struct iso8601_date* date, int year, int month, int day)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    div_t qr;
 | 
				
			||||||
 | 
					    const struct monthcount* mc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // check for range / domain errors
 | 
				
			||||||
 | 
					    if(year < -5879609 || year > 5879609) {
 | 
				
			||||||
 | 
					        errno = ERANGE;
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mc = iso8601_isleap(year) ? _days_in_month_leap : _days_in_month_common;
 | 
				
			||||||
 | 
					    if(month < 1 || month > 12 || day < 0 || day > mc[month - 1].days) {
 | 
				
			||||||
 | 
					        errno = EDOM;
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Each 400 years have 97 leap days, giving 365*400+97 = 146097 days in 400 years
 | 
				
			||||||
 | 
					    qr = div(year, 400);
 | 
				
			||||||
 | 
					    date->day = qr.quot * 146097;
 | 
				
			||||||
 | 
					    year = qr.rem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ensure we have between 0 and 399 years
 | 
				
			||||||
 | 
					    if(year < 0) {
 | 
				
			||||||
 | 
					        date->day -= 146097;
 | 
				
			||||||
 | 
					        year += 400;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // excluding leap days, there are 365 days per year
 | 
				
			||||||
 | 
					    date->day += 365 * year;
 | 
				
			||||||
 | 
					    date->day += (year + 3) / 4; // there is one leap year for every four years
 | 
				
			||||||
 | 
					    date->day -= (year - 1) / 100; // but one less for every century over 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // now get number of days elapsed up to start of month
 | 
				
			||||||
 | 
					    date->day += mc[month - 1].elapsed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // and add number of days elapsed sinced start of month
 | 
				
			||||||
 | 
					    date->day += day - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/libiso8601/functions.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* parse.c */
 | 
				
			||||||
 | 
					void iso8601_parse(const char* str, struct iso8601_date* earliest, struct iso8601_date* latest,
 | 
				
			||||||
 | 
					        struct iso8601_details* details);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* c_library.c */
 | 
				
			||||||
 | 
					void iso8601_now(struct iso8601_date* date, struct iso8601_details* details);
 | 
				
			||||||
 | 
					void iso8601_from_ts(struct iso8601_date* date, const struct timespec* ts);
 | 
				
			||||||
 | 
					void iso8601_to_ts(struct timespec* ts, const struct iso8601_date* date);
 | 
				
			||||||
 | 
					void iso8601_from_time_t(struct iso8601_date* date, const time_t* t);
 | 
				
			||||||
 | 
					void iso8601_to_time_t(time_t* t, const struct iso8601_date* date);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* calc.c */
 | 
				
			||||||
 | 
					int iso8601_isleap(int year);
 | 
				
			||||||
 | 
					void iso8601_to_cal(int* year, int* month, int* day, const struct iso8601_date* date);
 | 
				
			||||||
 | 
					int iso8601_from_cal(struct iso8601_date* date, int year, int month, int day);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/libiso8601/parser.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iso8601_parse(const char* str, struct iso8601_date* earliest, struct iso8601_date* latest,
 | 
				
			||||||
 | 
					    struct iso8601_details* details)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					# libiso8601/src/lib/clib/pkgconf.in
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#  Metadata file for pkg-config
 | 
				
			||||||
 | 
					#  ( http://www.freedesktop.org/software/pkgconfig/ )
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					#  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					#  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Name, description
 | 
				
			||||||
 | 
					Name: @TODO@
 | 
				
			||||||
 | 
					Description: @TODO@
 | 
				
			||||||
 | 
					Version: @VERSION@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Requirements
 | 
				
			||||||
 | 
					Requires:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compilation information
 | 
				
			||||||
 | 
					Libs: -L@LIBDIR@ -liso8601
 | 
				
			||||||
 | 
					Cflags: -I@INCLUDEDIR@
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					# libiso8601/src/libiso8601/soversion
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					#  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					#  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SOMAJOR and SOMINOR are included in the library's soname. They need to
 | 
				
			||||||
 | 
					# be bumped on a binary-incompatible release. They are both single
 | 
				
			||||||
 | 
					# integers.
 | 
				
			||||||
 | 
					SOMAJOR=0
 | 
				
			||||||
 | 
					SOMINOR=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SOMICRO is bumped every time there is a binary-compatible release.
 | 
				
			||||||
 | 
					SOMICRO=0
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,45 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/libiso8601/types.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct iso8601_date {
 | 
				
			||||||
 | 
					        uint32_t nsec;
 | 
				
			||||||
 | 
					        int32_t day;
 | 
				
			||||||
 | 
					        uint32_t sec;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum iso8601_date_prec {
 | 
				
			||||||
 | 
					        iso8601_prec_year,
 | 
				
			||||||
 | 
					        iso8601_prec_month,
 | 
				
			||||||
 | 
					        iso8601_prec_day,
 | 
				
			||||||
 | 
					        iso8601_prec_ord,
 | 
				
			||||||
 | 
					        iso8601_prec_week,
 | 
				
			||||||
 | 
					        iso8601_prec_wday
 | 
				
			||||||
 | 
					}date_prec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum iso8601_time_prec {
 | 
				
			||||||
 | 
					        iso8601_prec_none,
 | 
				
			||||||
 | 
					        iso8601_prec_hour,
 | 
				
			||||||
 | 
					        iso8601_prec_min,
 | 
				
			||||||
 | 
					        iso8601_prec_sec,
 | 
				
			||||||
 | 
					        iso8601_prec_hourfrac,
 | 
				
			||||||
 | 
					        iso8601_prec_minfrac,
 | 
				
			||||||
 | 
					        iso8601_prec_secfrac
 | 
				
			||||||
 | 
					}time_prec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct iso8601_details {
 | 
				
			||||||
 | 
					        uint8_t date_prec, time_prec;
 | 
				
			||||||
 | 
					        int32_t tz_sec;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					c tests tests libiso8601
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					source src/tests/build.tests
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					# These are external variables, and shouldn't clash with anything else
 | 
				
			||||||
 | 
					#  tests_BUILT
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					build_target libiso8601 || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z ${tests_BUILT} ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    LIBS="${libiso8601} "
 | 
				
			||||||
 | 
					    EXTRAS="" # @TODO@ libs, cflags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo "Building test programs..."
 | 
				
			||||||
 | 
					    do_cmd mkdir -p obj/tests || return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for SRC in src/tests/*.c
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					        TEST="obj/tests/$(basename ${SRC} | sed -e 's,.c$,,')"
 | 
				
			||||||
 | 
					        MODIFIED=0
 | 
				
			||||||
 | 
					        for file in ${LIBS} ${SRC} src/tests/build.tests
 | 
				
			||||||
 | 
					        do
 | 
				
			||||||
 | 
					            if [ ${file} -nt ${TEST} ]
 | 
				
			||||||
 | 
					            then
 | 
				
			||||||
 | 
					                MODIFIED=1
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if [ ${MODIFIED} -ne 0 ]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					            do_cmd ${CC} -Iobj ${CFLAGS} -o ${TEST} ${SRC} ${LIBS} ${EXTRAS} || return 1
 | 
				
			||||||
 | 
					            print_success "Built ${TEST}"
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            print_success "${TEST} is up to date"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print_success "All tests built"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    tests_BUILT=1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,151 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/tests/calconv.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "iso8601.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const int _days_in_month_common[] = {
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    28,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    30,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    30,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    30,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    30,
 | 
				
			||||||
 | 
					    31
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const int _days_in_month_leap[] = {
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    29,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    30,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    30,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    30,
 | 
				
			||||||
 | 
					    31,
 | 
				
			||||||
 | 
					    30,
 | 
				
			||||||
 | 
					    31
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int try_year(int year)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    static int daycount = 0;
 | 
				
			||||||
 | 
					    const int* mc;
 | 
				
			||||||
 | 
					    int m, d, y2, m2, d2, ret = 0;
 | 
				
			||||||
 | 
					    struct iso8601_date dt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mc = iso8601_isleap(year) ? _days_in_month_leap : _days_in_month_common;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for(m = 0; m < 12; ++m) {
 | 
				
			||||||
 | 
					        for(d = 0; d < mc[m]; ++d) {
 | 
				
			||||||
 | 
					            if(iso8601_from_cal(&dt, year, m + 1, d + 1)) {
 | 
				
			||||||
 | 
					                ++ret;
 | 
				
			||||||
 | 
					                printf("[cal2date     ] %04d-%02d-%02d: %s (%d)\n",
 | 
				
			||||||
 | 
					                    year, m + 1, d + 1, strerror(errno), errno);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } else if(dt.day != daycount) {
 | 
				
			||||||
 | 
					                ++ret;
 | 
				
			||||||
 | 
					                printf("[discontinuity] %04d-%02d-%02d: got day=%d, expected day=%d\n",
 | 
				
			||||||
 | 
					                    year, m + 1, d + 1, dt.day, daycount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } else if(iso8601_to_cal(&y2, &m2, &d2, &dt), year != y2 || m + 1 != m2 || d + 1 != d2) {
 | 
				
			||||||
 | 
					                ++ret;
 | 
				
			||||||
 | 
					                printf("[date2cal     ] %04d-%02d-%02d ==> %04d-%02d-%02d (%d)\n",
 | 
				
			||||||
 | 
					                    year, m + 1, d + 1, y2, m2, d2, daycount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ++daycount;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int try_neg_year(int year)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    static int daycount = 365;
 | 
				
			||||||
 | 
					    const int* mc;
 | 
				
			||||||
 | 
					    int m, d, y2, m2, d2, ret = 0;
 | 
				
			||||||
 | 
					    struct iso8601_date dt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mc = iso8601_isleap(year) ? _days_in_month_leap : _days_in_month_common;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for(m = 11; m >= 0; --m) {
 | 
				
			||||||
 | 
					        for(d = mc[m]; d; --d) {
 | 
				
			||||||
 | 
					            if(iso8601_from_cal(&dt, year, m + 1, d)) {
 | 
				
			||||||
 | 
					                ++ret;
 | 
				
			||||||
 | 
					                printf("[cal2date     ] %04d-%02d-%02d: %s (%d)\n",
 | 
				
			||||||
 | 
					                    year, m + 1, d, strerror(errno), errno);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } else if(dt.day != daycount) {
 | 
				
			||||||
 | 
					                ++ret;
 | 
				
			||||||
 | 
					                printf("[discontinuity] %04d-%02d-%02d: got day=%d, expected day=%d\n",
 | 
				
			||||||
 | 
					                    year, m + 1, d, dt.day, daycount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } else if(iso8601_to_cal(&y2, &m2, &d2, &dt), year != y2 || m + 1 != m2 || d != d2) {
 | 
				
			||||||
 | 
					                ++ret;
 | 
				
			||||||
 | 
					                printf("[date2cal     ] %04d-%02d-%02d ==> %04d-%02d-%02d (%d)\n",
 | 
				
			||||||
 | 
					                    year, m + 1, d, y2, m2, d2, daycount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            --daycount;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// stuff repeats on a 400-year cycle, so we really shouldn't need to worry too much about this
 | 
				
			||||||
 | 
					#define MAX_YEAR_COUNT 2400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char* argv[])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int ret = 0, year;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(argc == 2 && !strcmp(argv[1], "--print-summary")) {
 | 
				
			||||||
 | 
					        printf("Calendar date / day number conversion test.\n");
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for(year = 0; year <= MAX_YEAR_COUNT; ++year) {
 | 
				
			||||||
 | 
					        ret += try_year(year);
 | 
				
			||||||
 | 
					        if(ret > 20) return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for(year = 0; year >= -MAX_YEAR_COUNT; --year) {
 | 
				
			||||||
 | 
					        ret += try_neg_year(year);
 | 
				
			||||||
 | 
					        if(ret > 20) return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					/* libiso8601/src/tests/???.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					 *  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					 *  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "iso8601.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char* argv[])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(argc == 2 && !strcmp(argv[1], "--print-summary")) {
 | 
				
			||||||
 | 
					        printf("One line summary.\n");
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(argc == 1) {
 | 
				
			||||||
 | 
					        // empty argument list
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* options for text editors
 | 
				
			||||||
 | 
					kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					vim: expandtab:ts=4:sw=4
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					# libiso8601/version
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#  (c)2006, Laurence Withers, <l@lwithers.me.uk>.
 | 
				
			||||||
 | 
					#  Released under the GNU GPLv2. See file COPYING or
 | 
				
			||||||
 | 
					#  http://www.gnu.org/copyleft/gpl.html for details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# VERSION contains the full version number of the library, which is 
 | 
				
			||||||
 | 
					# expected to be in 'major.minor.micro' format. It can optionally be 
 | 
				
			||||||
 | 
					# suffixed with a string.
 | 
				
			||||||
 | 
					VERMAJOR=0
 | 
				
			||||||
 | 
					VERMINOR=0
 | 
				
			||||||
 | 
					VERMICRO=0
 | 
				
			||||||
 | 
					VEREXTRA=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# kate: replace-trailing-space-save true; space-indent true; tab-width 4;
 | 
				
			||||||
 | 
					# vim: expandtab:ts=4:sw=4
 | 
				
			||||||
		Loading…
	
		Reference in New Issue