Full Code of abraunegg/onedrive for AI

master db42574a0195 cached
91 files
2.5 MB
671.8k tokens
1 requests
Download .txt
Showing preview only (2,686K chars total). Download the full file or copy to clipboard to get everything.
Repository: abraunegg/onedrive
Branch: master
Commit: db42574a0195
Files: 91
Total size: 2.5 MB

Directory structure:
gitextract_uo92plxx/

├── LICENSE
├── Makefile.in
├── aclocal.m4
├── changelog.md
├── config
├── configure
├── configure.ac
├── contrib/
│   ├── completions/
│   │   ├── complete.bash
│   │   ├── complete.fish
│   │   └── complete.zsh
│   ├── docker/
│   │   ├── Dockerfile
│   │   ├── Dockerfile-alpine
│   │   ├── Dockerfile-debian
│   │   ├── entrypoint.sh
│   │   └── hooks/
│   │       └── post_push
│   ├── init.d/
│   │   ├── onedrive.init
│   │   └── onedrive_service.sh
│   ├── logrotate/
│   │   └── onedrive.logrotate
│   ├── pacman/
│   │   └── PKGBUILD.in
│   ├── spec/
│   │   └── onedrive.spec.in
│   └── systemd/
│       ├── onedrive.service.in
│       └── onedrive@.service.in
├── docs/
│   ├── advanced-usage.md
│   ├── application-config-options.md
│   ├── application-security.md
│   ├── build-rpm-howto.md
│   ├── business-shared-items.md
│   ├── client-architecture.md
│   ├── contributing.md
│   ├── docker.md
│   ├── install.md
│   ├── known-issues.md
│   ├── national-cloud-deployments.md
│   ├── podman.md
│   ├── privacy-policy.md
│   ├── puml/
│   │   ├── applyPotentiallyChangedItem.puml
│   │   ├── applyPotentiallyNewLocalItem.puml
│   │   ├── client_side_filtering_processing_order.puml
│   │   ├── client_side_filtering_rules.puml
│   │   ├── client_use_of_libcurl.puml
│   │   ├── code_functional_component_relationships.puml
│   │   ├── conflict_handling_default.puml
│   │   ├── conflict_handling_default_resync.puml
│   │   ├── conflict_handling_local-first_default.puml
│   │   ├── conflict_handling_local-first_resync.puml
│   │   ├── database_schema.puml
│   │   ├── default_sync_flow.puml
│   │   ├── downloadFile.puml
│   │   ├── high_level_operational_process.puml
│   │   ├── is_item_in_sync.puml
│   │   ├── local_first_sync_process.puml
│   │   ├── main_activity_flows.puml
│   │   ├── onedrive_linux_authentication.puml
│   │   ├── onedrive_windows_ad_authentication.puml
│   │   ├── onedrive_windows_authentication.puml
│   │   ├── uploadFile.puml
│   │   ├── uploadModifiedFile.puml
│   │   └── webhooks.puml
│   ├── server-side-filtering-limitations.md
│   ├── sharepoint-libraries.md
│   ├── terms-of-service.md
│   ├── ubuntu-package-install.md
│   ├── usage.md
│   └── webhooks.md
├── install-sh
├── onedrive.1.in
├── readme.md
├── src/
│   ├── arsd/
│   │   ├── README.md
│   │   └── cgi.d
│   ├── clientSideFiltering.d
│   ├── config.d
│   ├── curlEngine.d
│   ├── curlWebsockets.d
│   ├── intune.d
│   ├── itemdb.d
│   ├── log.d
│   ├── main.d
│   ├── monitor.d
│   ├── notifications/
│   │   ├── README
│   │   ├── dnotify.d
│   │   └── notify.d
│   ├── onedrive.d
│   ├── qxor.d
│   ├── socketio.d
│   ├── sqlite.d
│   ├── sync.d
│   ├── util.d
│   ├── webhook.d
│   └── xattr.d
└── tests/
    ├── bad-file-name.tar.xz
    └── makefiles.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.


================================================
FILE: Makefile.in
================================================
package = @PACKAGE_NAME@
version = @PACKAGE_VERSION@
prefix = @prefix@
# we don't use @exec_prefix@ because it usually contains '${prefix}' literally
# but we use @prefix@/bin/onedrive in the systemd unit files which are generated
# from the configure script.
# Thus, set exec_prefix unconditionally to prefix
# Alternative approach would be add dep on sed, and do manual generation in the Makefile.
# exec_prefix = @exec_prefix@
exec_prefix = @prefix@
datarootdir = @datarootdir@
datadir = @datadir@
srcdir = @srcdir@
bindir = @bindir@
mandir = @mandir@
sysconfdir = @sysconfdir@
docdir = $(datadir)/doc/$(package)
VPATH = @srcdir@
INSTALL = @INSTALL@

# Icon install locations (system-wide hicolor theme)
ICON_THEMEDIR      = $(datadir)/icons/hicolor
ICON_PLACES_DIR    = $(ICON_THEMEDIR)/scalable/places
ICON_SOURCE_SVG    = contrib/images/onedrive.svg
ICON_TARGET_SVG    = onedrive.svg

NOTIFICATIONS = @NOTIFICATIONS@
HAVE_SYSTEMD = @HAVE_SYSTEMD@
systemduserunitdir = @systemduserunitdir@
systemdsystemunitdir = @systemdsystemunitdir@
all_libs = @curl_LIBS@ @sqlite_LIBS@ @dbus_LIBS@ @notify_LIBS@ @bsd_inotify_LIBS@ @dynamic_linker_LIBS@
COMPLETIONS = @COMPLETIONS@
BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
ZSH_COMPLETION_DIR = @ZSH_COMPLETION_DIR@
FISH_COMPLETION_DIR = @FISH_COMPLETION_DIR@
DEBUG = @DEBUG@

DC = @DC@
DCFLAGS = @DCFLAGS@
DEBUG_DCFLAGS = @DEBUG_DCFLAGS@
RELEASE_DCFLAGS = @RELEASE_DCFLAGS@
VERSION_DCFLAG = @VERSION_DCFLAG@
LINKER_DCFLAG = @LINKER_DCFLAG@
OUTPUT_DCFLAG = @OUTPUT_DCFLAG@
WERROR_DCFLAG = @WERROR_DCFLAG@

DCFLAGS += $(WERROR_DCFLAG)
ifeq ($(DEBUG),yes)
DCFLAGS += $(DEBUG_DCFLAGS)
else
DCFLAGS += $(RELEASE_DCFLAGS)
endif

ifeq ($(NOTIFICATIONS),yes)
GUI_NOTIFICATIONS = $(addprefix $(VERSION_DCFLAG)=,NoPragma NoGdk Notifications)
endif

system_unit_files = contrib/systemd/onedrive@.service
user_unit_files = contrib/systemd/onedrive.service

DOCFILES = readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md docs/server-side-filtering-limitations.md

ifneq ("$(wildcard /etc/redhat-release)","")
RHEL = $(shell cat /etc/redhat-release | grep -E "(Red Hat Enterprise Linux|CentOS|AlmaLinux)" | wc -l)
RHEL_VERSION = $(shell rpm --eval "%{rhel}")
else
RHEL = 0
RHEL_VERSION = 0
endif

SOURCES = \
	src/main.d \
	src/config.d \
	src/log.d \
	src/util.d \
	src/qxor.d \
	src/curlEngine.d \
	src/onedrive.d \
	src/webhook.d \
	src/sync.d \
	src/itemdb.d \
	src/sqlite.d \
	src/clientSideFiltering.d \
	src/monitor.d \
	src/arsd/cgi.d \
	src/xattr.d \
	src/intune.d \
	src/socketio.d \
	src/curlWebsockets.d

ifeq ($(NOTIFICATIONS),yes)
SOURCES += src/notifications/notify.d src/notifications/dnotify.d
endif

all: onedrive

clean:
	rm -f onedrive onedrive.o version
	rm -rf autom4te.cache
	rm -f config.log config.status

# Remove files generated via ./configure
distclean: clean
	rm -f Makefile contrib/pacman/PKGBUILD contrib/spec/onedrive.spec onedrive.1 $(system_unit_files) $(user_unit_files)

onedrive: $(SOURCES)
	if [ -f .git/HEAD ] ; then \
		git describe --tags > version ; \
	else \
		echo $(version) > version ; \
	fi
	$(DC) -J. $(GUI_NOTIFICATIONS) $(DCFLAGS) $^ $(addprefix $(LINKER_DCFLAG),$(all_libs)) $(OUTPUT_DCFLAG)$@

install: all
	mkdir -p $(DESTDIR)$(bindir)
	$(INSTALL) onedrive $(DESTDIR)$(bindir)/onedrive
	mkdir -p $(DESTDIR)$(mandir)/man1
	$(INSTALL) -m 0644 onedrive.1 $(DESTDIR)$(mandir)/man1/onedrive.1
	mkdir -p $(DESTDIR)$(sysconfdir)/logrotate.d
	$(INSTALL) -m 0644 contrib/logrotate/onedrive.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/onedrive
	mkdir -p $(DESTDIR)$(docdir)
	for file in $(DOCFILES); do \
		$(INSTALL) -m 0644 $$file $(DESTDIR)$(docdir); \
	done
ifeq ($(HAVE_SYSTEMD),yes)
	mkdir -p $(DESTDIR)$(systemduserunitdir)
	mkdir -p $(DESTDIR)$(systemdsystemunitdir)
ifeq ($(RHEL),1)
	$(INSTALL) -m 0644 $(system_unit_files) $(DESTDIR)$(systemdsystemunitdir)
	$(INSTALL) -m 0644 $(user_unit_files) $(DESTDIR)$(systemdsystemunitdir)
else
	$(INSTALL) -m 0644 $(system_unit_files) $(DESTDIR)$(systemdsystemunitdir)
	$(INSTALL) -m 0644 $(user_unit_files) $(DESTDIR)$(systemduserunitdir)
endif
else
ifeq ($(RHEL_VERSION),6)
	$(INSTALL) contrib/init.d/onedrive.init $(DESTDIR)/etc/init.d/onedrive
	$(INSTALL) contrib/init.d/onedrive_service.sh $(DESTDIR)$(bindir)/onedrive_service.sh
endif
endif
ifeq ($(COMPLETIONS),yes)
	mkdir -p $(DESTDIR)$(ZSH_COMPLETION_DIR)
	$(INSTALL) -m 0644 contrib/completions/complete.zsh $(DESTDIR)$(ZSH_COMPLETION_DIR)/_onedrive
	mkdir -p $(DESTDIR)$(BASH_COMPLETION_DIR)
	$(INSTALL) -m 0644 contrib/completions/complete.bash $(DESTDIR)$(BASH_COMPLETION_DIR)/onedrive
	mkdir -p $(DESTDIR)$(FISH_COMPLETION_DIR)
	$(INSTALL) -m 0644 contrib/completions/complete.fish $(DESTDIR)$(FISH_COMPLETION_DIR)/onedrive.fish
endif
	# --- OneDrive folder icon (hicolor) ---
	mkdir -p $(DESTDIR)$(ICON_PLACES_DIR)
	$(INSTALL) -m 0644 $(ICON_SOURCE_SVG) $(DESTDIR)$(ICON_PLACES_DIR)/$(ICON_TARGET_SVG)
	# Refresh icon cache only when installing to the live system (not during staged DESTDIR installs)
	# and only if the theme directory is a proper theme (has index.theme)
	if [ -z "$(DESTDIR)" ] && command -v gtk-update-icon-cache >/dev/null 2>&1 \
	   && [ -f "$(ICON_THEMEDIR)/index.theme" ]; then \
		gtk-update-icon-cache -q "$(ICON_THEMEDIR)"; \
	fi


uninstall:
	rm -f $(DESTDIR)$(bindir)/onedrive
	rm -f $(DESTDIR)$(mandir)/man1/onedrive.1
	rm -f $(DESTDIR)$(sysconfdir)/logrotate.d/onedrive
ifeq ($(HAVE_SYSTEMD),yes)
ifeq ($(RHEL),1)
	rm -f $(DESTDIR)$(systemdsystemunitdir)/onedrive*.service
else
	rm -f $(DESTDIR)$(systemdsystemunitdir)/onedrive*.service
	rm -f $(DESTDIR)$(systemduserunitdir)/onedrive*.service
endif
else
ifeq ($(RHEL_VERSION),6)
	rm -f $(DESTDIR)/etc/init.d/onedrive
	rm -f $(DESTDIR)$(bindir)/onedrive_service.sh
endif
endif
	for i in $(DOCFILES) ; do rm -f $(DESTDIR)$(docdir)/$$i ; done
ifeq ($(COMPLETIONS),yes)
	rm -f $(DESTDIR)$(ZSH_COMPLETION_DIR)/_onedrive
	rm -f $(DESTDIR)$(BASH_COMPLETION_DIR)/onedrive
	rm -f $(DESTDIR)$(FISH_COMPLETION_DIR)/onedrive.fish
endif
	# --- OneDrive folder icon (hicolor) ---
	rm -f $(DESTDIR)$(ICON_PLACES_DIR)/$(ICON_TARGET_SVG)
	# Refresh icon cache if removing from the live system and index.theme exists
	if [ -z "$(DESTDIR)" ] && command -v gtk-update-icon-cache >/dev/null 2>&1 \
	   && [ -f "$(ICON_THEMEDIR)/index.theme" ]; then \
		gtk-update-icon-cache -q "$(ICON_THEMEDIR)"; \
	fi


================================================
FILE: aclocal.m4
================================================
# generated automatically by aclocal 1.16.1 -*- Autoconf -*-

# Copyright (C) 1996-2018 Free Software Foundation, Inc.

# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
dnl serial 11 (pkg-config-0.29)
dnl
dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
dnl 02111-1307, USA.
dnl
dnl As a special exception to the GNU General Public License, if you
dnl distribute this file as part of a program that contains a
dnl configuration script generated by Autoconf, you may include it under
dnl the same distribution terms that you use for the rest of that
dnl program.

dnl PKG_PREREQ(MIN-VERSION)
dnl -----------------------
dnl Since: 0.29
dnl
dnl Verify that the version of the pkg-config macros are at least
dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
dnl installed version of pkg-config, this checks the developer's version
dnl of pkg.m4 when generating configure.
dnl
dnl To ensure that this macro is defined, also add:
dnl m4_ifndef([PKG_PREREQ],
dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
dnl
dnl See the "Since" comment for each macro you use to see what version
dnl of the macros you require.
m4_defun([PKG_PREREQ],
[m4_define([PKG_MACROS_VERSION], [0.29])
m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
])dnl PKG_PREREQ

dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
dnl ----------------------------------
dnl Since: 0.16
dnl
dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
dnl first found in the path. Checks that the version of pkg-config found
dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
dnl used since that's the first version where most current features of
dnl pkg-config existed.
AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])

if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi
if test -n "$PKG_CONFIG"; then
	_pkg_min_version=m4_default([$1], [0.9.0])
	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
		AC_MSG_RESULT([yes])
	else
		AC_MSG_RESULT([no])
		PKG_CONFIG=""
	fi
fi[]dnl
])dnl PKG_PROG_PKG_CONFIG

dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
dnl -------------------------------------------------------------------
dnl Since: 0.18
dnl
dnl Check to see whether a particular set of modules exists. Similar to
dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
dnl
dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
dnl only at the first occurence in configure.ac, so if the first place
dnl it's called might be skipped (such as if it is within an "if", you
dnl have to call PKG_CHECK_EXISTS manually
AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \
    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
  m4_default([$2], [:])
m4_ifvaln([$3], [else
  $3])dnl
fi])

dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
dnl ---------------------------------------------
dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
dnl pkg_failed based on the result.
m4_define([_PKG_CONFIG],
[if test -n "$$1"; then
    pkg_cv_[]$1="$$1"
 elif test -n "$PKG_CONFIG"; then
    PKG_CHECK_EXISTS([$3],
                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
		      test "x$?" != "x0" && pkg_failed=yes ],
		     [pkg_failed=yes])
 else
    pkg_failed=untried
fi[]dnl
])dnl _PKG_CONFIG

dnl _PKG_SHORT_ERRORS_SUPPORTED
dnl ---------------------------
dnl Internal check to see if pkg-config supports short errors.
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
        _pkg_short_errors_supported=yes
else
        _pkg_short_errors_supported=no
fi[]dnl
])dnl _PKG_SHORT_ERRORS_SUPPORTED


dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
dnl   [ACTION-IF-NOT-FOUND])
dnl --------------------------------------------------------------
dnl Since: 0.4.0
dnl
dnl Note that if there is a possibility the first call to
dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
AC_DEFUN([PKG_CHECK_MODULES],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl

pkg_failed=no
AC_MSG_CHECKING([for $1])

_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])

m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.])

if test $pkg_failed = yes; then
   	AC_MSG_RESULT([no])
        _PKG_SHORT_ERRORS_SUPPORTED
        if test $_pkg_short_errors_supported = yes; then
	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
        else 
	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
        fi
	# Put the nasty error message in config.log where it belongs
	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD

	m4_default([$4], [AC_MSG_ERROR(
[Package requirements ($2) were not met:

$$1_PKG_ERRORS

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

_PKG_TEXT])[]dnl
        ])
elif test $pkg_failed = untried; then
     	AC_MSG_RESULT([no])
	m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old.  Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.

_PKG_TEXT

To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
        ])
else
	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
        AC_MSG_RESULT([yes])
	$3
fi[]dnl
])dnl PKG_CHECK_MODULES


dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
dnl   [ACTION-IF-NOT-FOUND])
dnl ---------------------------------------------------------------------
dnl Since: 0.29
dnl
dnl Checks for existence of MODULES and gathers its build flags with
dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
dnl and VARIABLE-PREFIX_LIBS from --libs.
dnl
dnl Note that if there is a possibility the first call to
dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
dnl configure.ac.
AC_DEFUN([PKG_CHECK_MODULES_STATIC],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
_save_PKG_CONFIG=$PKG_CONFIG
PKG_CONFIG="$PKG_CONFIG --static"
PKG_CHECK_MODULES($@)
PKG_CONFIG=$_save_PKG_CONFIG[]dnl
])dnl PKG_CHECK_MODULES_STATIC


dnl PKG_INSTALLDIR([DIRECTORY])
dnl -------------------------
dnl Since: 0.27
dnl
dnl Substitutes the variable pkgconfigdir as the location where a module
dnl should install pkg-config .pc files. By default the directory is
dnl $libdir/pkgconfig, but the default can be changed by passing
dnl DIRECTORY. The user can override through the --with-pkgconfigdir
dnl parameter.
AC_DEFUN([PKG_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
m4_pushdef([pkg_description],
    [pkg-config installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([pkgconfigdir],
    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
    [with_pkgconfigdir=]pkg_default)
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
])dnl PKG_INSTALLDIR


dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
dnl --------------------------------
dnl Since: 0.27
dnl
dnl Substitutes the variable noarch_pkgconfigdir as the location where a
dnl module should install arch-independent pkg-config .pc files. By
dnl default the directory is $datadir/pkgconfig, but the default can be
dnl changed by passing DIRECTORY. The user can override through the
dnl --with-noarch-pkgconfigdir parameter.
AC_DEFUN([PKG_NOARCH_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
m4_pushdef([pkg_description],
    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([noarch-pkgconfigdir],
    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
    [with_noarch_pkgconfigdir=]pkg_default)
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
])dnl PKG_NOARCH_INSTALLDIR


dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
dnl -------------------------------------------
dnl Since: 0.28
dnl
dnl Retrieves the value of the pkg-config variable for the given module.
AC_DEFUN([PKG_CHECK_VAR],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl

_PKG_CONFIG([$1], [variable="][$3]["], [$2])
AS_VAR_COPY([$1], [pkg_cv_][$1])

AS_VAR_IF([$1], [""], [$5], [$4])dnl
])dnl PKG_CHECK_VAR



================================================
FILE: changelog.md
================================================
# Changelog
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 2.5.10 - 2026-01-30

### Added
*   Implement Feature Request: Add configuration option 'disable_version_check' (#3530)
*   Implement Feature Request: Add automatic debug logging output redaction (#3549)

### Changed
*   Improve --resync warning prompt for clarity and safer operation (#3562)
*   Updated Dockerfiles to support newer distributions and associated components (#3565)
*   FreeBSD: Select inotify type (libc or libnotify) based on FreeBSD version (#3579)
*   Update that --force and --force-sync cannot be used with --resync (#3593)

### Fixed
*   Fix Bug: Fix timestamp and hash evaluation to avoid unnecessary file version creation online (#3526)
*   Fix Bug: Fix that websocket do not work with Sharepoint libraries (#3533)
*   Fix Bug: Fix that large files fail to download due operational timeout being exceeded (#3541)
*   Fix Bug: Fix hash functions read efficiency to support 'on-demand' development work (#3544)
*   Fix Bug: Fix that safeBackup crashes when attempting backing up a non-existent local path (#3545)
*   Fix Bug: Fix to that the application only performs safeBackup() on deleted items only when a hash change is detected (#3546)
*   Fix Bug: Prevent mis-configuration where 'recycle_bin_path' is inside 'sync_dir' (#3552)
*   Fix Bug: Harden logging initialisation: fall back to home directory when log_dir is not writeable (#3555)
*   Fix Bug: Ensure mkdirRecurse() is correctly wrapped in try block (#3566)
*   Fix Bug: Fix that 'remove_source_files' does not remove the source file when the file already exists in OneDrive (#3572)
*   Fix Bug: Enhance displayFileSystemErrorMessage() to include details of the actual path (#3574)
*   Fix Bug: Enhance downloadFileItem() to ensure greater clarity on download failures (#3575)
*   Fix Bug: Prevent malformed 'skip_dir' / 'skip_file' rules when using multiple config entries (#3576)
*   Fix Bug: Detect and prevent 'skip_dir' / 'skip_file' rules shadowing 'sync_list' inclusions (#3577)
*   Fix Bug: Fix 'skip_dir' and 'skip_file' shadow detection for rooted 'sync_list' paths (#3578)
*   Fix Bug: Fix 'skip_dir' directory exclusion by normalising input paths before matching (#3580)
*   Fix Bug: Fix testInternetReachability() function to ensure same curl options used in a consistent manner (#3581)
*   Fix Bug: Fix performPermanentDelete() to ensure zero content length is set (#3585)
*   Fix Bug: Fix safeRemove() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3586)
*   Fix Bug: Fix safeRename() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3587)
*   Fix Bug: Fix safeBackup() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3589)
*   Fix Bug: Fix WebSocket reconnect cleanup to prevent GC finalisation crash (#3582)
*   Fix Bug: Fix setLocalPathTimestamp() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3591)
*   Fix Bug: Fix incorrect handling of failed safeRename() operations to support 'on-demand' development work (#3592) 
*   Fix Bug: Fix Docker entrypoint handling for non-root --user execution (#3602)
*   Fix Bug: Fix getRemainingFreeSpaceOnline() and correctly handle zero data traversal events for quota tracking (#3618)
*   Fix Bug: Fix getRemainingFreeSpaceOnline() for Business and SharePoint Accounts (#3621)
*   Fix Bug: Fix OAuth authorisation code parsing and encoding during token redemption (#3625)
*   Fix Bug: Fix Graph search(q=…) escaping for apostrophes (#3624)
*   Fix Bug: Fix handling of 204 No Content responses for Microsoft Graph PATCH requests (#3620)

### Updated
*   Updated completion files to align to application functionality
*   Updated documentation


## 2.5.9 - 2025-11-06

### Fixed
*   Fix Bug: Fix very high CPU & memory utilisation with 2.5.8 when using --upload-only (#3515) (CRITICAL BUGFIX)
*   Fix Bug: Unexpected deletion of empty nested folders during first sync with 'sync_list' and --resync (#3513) (CRITICAL BUGFIX)

### Updated
*   Updated documentation


## 2.5.8 - 2025-11-05

### Added
*   Implement Feature Request: Add that dotfiles in sync_list should be synced even when skip_dotfiles = "true" (#3456)
*   Implement Feature Request: Add websocket notification support (#3413)
*   Implement Feature Request: Add --download-file feature (#3459)
*   Implement Feature Request: Add option to remove source folders when using --upload-only --remove-source-files (#3473)
*   Implement Feature Request: Add support for AlmaLinux (#3485)
*   Implement Feature Request: Add ONEDRIVE_THREADS Docker option (#3494)
*   Implement Feature Request: Implement Desktop Manager Integration for GNOME and KDE (#3500)

### Changed
*   Changed how the file path is computed when there are 'skip_dir' entries to be consistent (#3484)
*   Changed checkJSONAgainstClientSideFiltering() to avoid multiple calls to computeItemPath() (#3489)

### Fixed
*   Fix Bug: Ensure driveId target is cached for modified file uploads (#3454)
*   Fix Bug: Ensure that 'use_intune_sso' and 'use_device_auth' cannot be used together (#3453)
*   Fix Bug: Force DNS Timeout when forcing a libcurl fresh connection (#3468)
*   Fix Bug: Fix WebSocket connection failure on libcurl 8.12.x by forcing HTTP/1.1 and disabling ALPN/NPN (#3482)
*   Fix Bug: Fix application crash after deleting file locally (#3481)
*   Fix Bug: Fix missing user information when syncing shared files (#3483)
*   Fix Bug: Fix Shared Folder data being deleted due to 'skip_dir' entry of '.*' (#3476)
*   Fix Bug: Fix that if using 'sync_list' only add new JSON items early to allow applyPotentiallyChangedItem() to operate as expected (#3505)
*   Fix Bug: When using --dry-run use tracked renamed directories to avoid falsely indicating local data is new and uploading as new data (#3503)
*   Fix Bug: Fix the fetching of maximum open files to be more POSIX compliant (#3508)
*   Fix Bug: Fix the Handling of WebSocket 'echo' from a local change (#3509)

### Updated
*   Updated documentation


## 2.5.7 - 2025-09-23

### Added
*   Implement Feature Request: Show GUI notification when sync suspends due to 'large delete' threshold (#3388)
*   Implement Feature Request: Implement resumable downloads (#3354)

### Changed
*   Removed the auto configuration of using a larger fragment size (#3370)
*   Removed the OpenSSL Test (#3420)

### Fixed
*   Fix Bug: Catch unhandled OneDriveError exception due to libcurl failing to access the system CA certificate bundle (#3322)
*   Fix Bug: 'items-dryrun.sqlite3' gets erroneously created when running a 'no sync' operation (#3325)
*   Fix Bug: Handle online folder deletion|creation with same name that causes 'id' to change (#3332)
*   Fix Bug: Reduce I/O pressure on SQLite DB Operations (#3334)
*   Fix Bug: Handle a 409 online folder creation response with a re-query of the API (#3335)
*   Fix Bug: Fix systemd issue with ExecStartPre statement to be more OS independent (#3348)
*   Fix Bug: When using --upload-only do not try and update the local file timestamp post upload (#3349)
*   Fix Bug: Add missing 'config' options to --display-config (#3353)
*   Fix Bug: Fix that a failed file download can lead to online deletion (#3351)
*   Fix Bug: Update searchDriveItemForFile() to handle specific 404 response when file cannot be found (#3365)
*   Fix Bug: Fix that resync state remains true post first successful full sync (#3368)
*   Fix Bug: Fix that long running big upload (250GB+) fails because of an expired access token (#3361)
*   Fix Bug: Handle inconsistent OneDrive Personal driveId casing across multiple Microsoft Graph API Endpoints (#3347)
*   Fix Bug: Update Microsoft OneNote handling for 'OneNote_RecycleBin' objects (#3350)
*   Fix Bug: Handle invalid JSON response when querying parental details (#3379)
*   Fix Bug: Fix foreign key issue when performing a --resync due to a missed conversion of driveId to lowercase values and path is covered by 'sync_list' entries (#3383)
*   Fix Bug: Ensure 'sync_list' inclusion rules are correctly evaluated (#3381)
*   Fix Bug: Fix issue of trying to create the root folder online (#3403)
*   Fix Bug: Fix resumable downloads so that the curl engine offset point is reset post successful download (#3406)
*   Fix Bug: Fix application crash when a file is created and deleted quickly (#3405)
*   Fix Bug: Fix the support of relocated shared folders for OneDrive Personal (#3411)
*   Fix Bug: Fix infinite loop after a failed network connection due to changed curl messaging (#3412)
*   Fix Bug: Fix computePath() to track the parental path anchor when a Shared Folder is relocated with a deeper path (#3417)
*   Fix Bug: Fix SharePoint Shared Library DB Tie creation (#3419)
*   Fix Bug: Update safeBackup() function to ensure that the 'safeBackup' path addition is only added once and ignore directories (#3445)

### Updated
*   Updated OAuth2 Interactive Authorisation Flow prompts to remove any ambiguity on what actions a user needs to take (#3323)
*   Updated onedrive.spec.in to correct missing dependencies (#3329)
*   Updated minimum compiler version details (#3330)
*   Updated documentation and function for how 'threads' is used (#3352)
*   Updated logging output for upsert() function (#3333)
*   Updated curl 8.13.x and 8.14.0 to known bad curl versions (#3356)
*   Updated logging output when processing online deletion events (#3373)
*   Updated logging output and use of grandparent identifiers when using --dry-run (#3377)
*   Updated GitHub Action versions for building Docker containers (#3378)
*   Updated how the ETA values are calculated to avoid negative values (#3386)
*   Updated Debian Dockerfile to use upstream gosu (#3402)
*   Updated Debian Dockerfile to use 'bookworm' (#3402)
*   Updated documentation


## 2.5.6 - 2025-06-05

### Added
*   Enhancement: Add gdc support to enable Gentoo compilation
*   Enhancement: Add a notification to user regarding number of objects received from OneDrive API
*   Enhancement: Update 'skip_file' documentation and option validation
*   Enhancement: Add a new configuration option 'force_session_upload' to support editors and applications using atomic save operations
*   Enhancement: Added 2 functions to check for the presence of required remoteItem elements to create a Shared Folder DB entries
*   Implement Feature Request: Add local recycle bin or trash folder option
*   Implement Feature Request: Add configurable upload delay to support Obsidian
*   Implement Feature Request: Add validation of bools in config file 
*   Implement Feature Request: Add native support for authentication via Intune dbus interface 
*   Implement Feature Request: Implement OAuth2 Device Authorisation Flow 

### Changed
*   Change logging output level for JSON elements that contain URL encoding
*   Change 'configure.ac' to use a static date value as Debian 'reproducible' build process forces a future date to rebuild any code to determine reproducibility

### Fixed
*   Fix Regression: Fixed regression in handling Microsoft OneNote package folders being created in error 
*   Fix Regression: Fix OneNote file MimeType detection
*   Fix Regression: Fix supporting Personal Shared Folders that have been renamed
*   Fix Bug: Correct the logging output for 'skip_file' exclusions 
*   Fix Bug: Validate raw JSON from Graph API for 15 character driveId API bug
*   Fix Bug: Fix JSON exception on webhook subscription renewal due to 308 redirect
*   Fix Bug: Update 'sync_list' line parsing to correctly escape characters for regex parsing
*   Fix Bug: Fix that an empty folder or folder with Microsoft OneNote files are deleted online when content is shared from a SharePoint Library Document Root
*   Fix Bug: Fix that empty 'skip_file' forces resync indefinitely
*   Fix Bug: Fix that 'sync_list' rule segment|depth check fails in some scenarios and implement a better applicable mechanism check
*   Fix Bug: Resolve crash when getpwuid() breaks when there is a glibc version mismatch
*   Fix Bug: Resolve crash when opening file fails when computing file hash
*   Fix Bug: Add check for invalid exclusion 'sync_list' exclusion rules
*   Fix Bug: Fix uploading of modified files when using --upload-only & --remove-source-files
*   Fix Bug: Fix local path calculation for Relocated OneDrive Business Shared Folders 
*   Fix Bug: Fix 'sync_list' anywhere rule online directory creation
*   Fix Bug: Fix online path creation to ensure parental path structure is created in a consistent manner
*   Fix Bug: Fix handling of POSIX check for existing online items
*   Fix Bug: Fix args printing in dockerfile entrypoint
*   Fix Bug: Fix the testing of parental structure for 'sync_list' inclusion when adding inotify watches
*   Fix Bug: Fix failure to handle API 403 response when file fragment upload fails
*   Fix Bug: Fix application notification output to be consistent when skipping integrity checks
*   Fix Bug: Fix how local timestamps are modified 
*   Fix Bug: Fix how online remaining free space is calculated and consumed internally for free space tracking
*   Fix Bug: Fix logic of determining if a file has valid integrity when using --disable-upload-validation
*   Fix Bug: Format the OneDrive change into a consumable object for the database earlier to use values in application logging
*   Fix Bug: Fix upload session offset handling to prevent desynchronisation on large files
*   Fix Bug: Fix implementation of 'write_xattr_data' to support FreeBSD
*   Fix Bug: Update hash functions to ensure file is closed if opened 
*   Fix Bug: Dont blindly run safeBackup() if the online timestamp is newer 
*   Fix Bug: Only set xattr values when not using --dry-run 
*   Fix Bug: Fix UTC conversion for existing file timestamp post file download
*   Fix Bug: Fix that 'check_nosync' and 'skip_size' configuration options when changed, were not triggering a --resync correctly
*   Fix Bug: Ensure file is closed before renaming to improve compatibility with GCS buckets and network filesystems 
*   Fix Bug: If a file fails to download, path fails to exist. Check path existence before setting xattr values

### Updated
*   Updated .gitignore to ignore files created during configure to be consistent with other files generated from .in templates
*   Updated bash,fish and zsh completion files to align with application options
*   Updated 'config' file to align to application options with applicable descriptions
*   Updated testbuild runner
*   Updated Fedora Docker OS version to Fedora 42
*   Updated Ubuntu 24.10 curl version 8.9.1 to known bad curl versions and document the bugs associated with it
*   Updated Makefile to pass libraries after source files in compiler invocation
*   Updated 'configure.ac' to support more basename formats for DC
*   Update how threads are set based on available CPUs 
*   Update setLocalPathTimestamp logging output 
*   Update when to perform thread check and set as early as possible 
*   Updated documentation

## 2.5.5 - 2025-03-17

### Added
*   Implement Feature Request: Implement 'transfer_order' configuration option to allow the user to determine what order files are transferred in
*   Implement Feature Request: Implement 'disable_permission_set' configuration option to not set directory and file permissions
*   Implement Feature Request: Implement 'write_xattr_data' configuration option to add information about file creator/last editor as extended file attributes
*   Enhancement: Add support for --share-password option when --create-share-link is called
*   Enhancement: Add support 'localizedMessage' error messages in application output if this is provided in the JSON response from Microsoft Graph API

### Changed
*   Changed curl debug logging to --debug-https as this is more relevant
*   Comprehensively overhauled how OneDrive Personal Shared Folders are handled due to major OneDrive API backend platform user migration and major differences in API response output
*   Comprehensively changed OneDrive Personal 'driveId' value checking due to major OneDrive API backend platform user migration and major differences in API response output

### Fixed
*   Fix Bug: Fix path calculation for Client Side Filtering evaluations for Personal Accounts
*   Fix Bug: Fix path calculation for Client Side Filtering evaluations for Business Accounts
*   Fix Bug: Only perform path calculation if this is actually required
*   Fix Bug: Fix check for 'globbing' and 'wildcard' rules, that the number of segments before the first wildcard character need to match before the actual rule can be applied
*   Fix Bug: When using 'sync_list' , ignore specific exclusion to scan that path for new data, which may be actually included by an include rule, but the parent path is excluded
*   Fix Bug: When removing a OneDrive Personal Shared Folder, remove the actual link, not the remote user folder
*   Fix Bug: Fix 'Unsupported platform' for inotify watches by using the correct predefined version definition for Linux.

### Updated
*   Updated Fedora Docker OS version to Fedora 41
*   Updated Alpine Docker OS version to Alpine 3.21
*   Updated documentation

## 2.5.4 - 2025-02-03

### Added
*   Implement Feature Request: Support Permanent Delete on OneDrive
*   Implement Feature Request: Support the moving of Shared Folder Links to other folders (Business Accounts only)
*   Enhancement: Added due to ongoing Ubuntu issues with 'curl' and 'libcurl', updated the documentation to include all relevant curl bugs and affected versions
*   Enhancement: Added quota status messages for nearing | critical | exceeded based on OneDrive Account API response
*   Enhancement: Added Docker variable to implement a sync once option
*   Enhancement: Added configuration option 'create_new_file_version' to force create new versions if that is the desire
*   Enhancement: Added support for adding SharePoint Libraries as Shared Folder Links
*   Enhancement: Added code and documentation changes to support FreeBSD
*   Enhancement: Added a check for the 'sea8cc6beffdb43d7976fbc7da445c639' string in the Microsoft OneDrive Personal Account Root ID response that denotes that the account cannot access Microsoft OneDrive at this point in time
*   Enhancement: Added './' sync_list rule check as this does not align to the documentation and these rules will not get matched correctly.

### Changed
*   Changed how debug logging outputs HTTP response headers and when this occurs
*   Changed when the check for no --sync | --monitor occurs so that this fails faster to avoid setting up all the other components
*   Changed isValidUTF8 function to use 'validate' rather than individual character checking and enhance checks including length constraints
*   Changed --dry-run authentication message to remove ambiguity that --dry-run cannot be used to authenticate the application

### Fixed
*   Fix Regression: Fixed regression that sync_list does not traverse shared directories
*   Fix Regression: Fixed regression of --display-config use after fast failing if --sync or --monitor has not been used
*   Fix Regression: Fixed regression from v2.4.x in handling uploading new and modified content to OneDrive Business and SharePoint to not create new versions of files post upload which adds to user quota
*   Fix Regression: Add back file transfer metrics which was available in v2.4.x
*   Fix Regression: Add code to support using 'display_processing_time' for functional performance which was available in v2.4.x
*   Fix Bug: Fixed build issue for OpenBSD (however support for OpenBSD itself is still a work-in-progress)
*   Fix Bug: Fixed issue regarding parsing OpenSSL and when unable to be parsed, do not force the application to exit
*   Fix Bug: Fixed the import of 'sync_list' rules due to OneDriveGUI creating a blank empty file by default
*   Fix Bug: Fixed the display of 'sync_list' rules due to OneDriveGUI creating a blank empty file by default
*   Fix Bug: Fixed that Business Shared Items shortcuts are skipped as being incorrectly detected as Microsoft OneNote Notebook items
*   Fix Bug: Fixed space calculations due to using ulong variable type to ensure that if calculation is negative, value is negative
*   Fix Bug: Fixed issue when downloading a file, and this fails due to an API error (400, 401, 5xx), online file is then not deleted
*   Fix Bug: Fixed skip_dir logic when reverse traversing folder structure
*   Fix Bug: Fixed issue that when using 'sync_list' if a file is moved to a newly created online folder, whilst the folder is created database wise, ensure this folder exists on local disk
*   Fix Bug: Fixed path got deleted in handling of move & close_write event when using 'vim'.
*   Fix Bug: Fixed that the root Personal Shared Folder is not handled due to missing API data European Data Centres
*   Fix Bug: Fixed the the local timestamp is not set when using --disable-download-validation
*   Fix Bug: Fixed Upload|Download Loop for AIP Protected File in Monitor Mode
*   Fix Bug: Fixed --single-directory Shared Folder DB entry creation
*   Fix Bug: Fixed API Bug to ensure that OneDrive Personal Drive ID and Remote Drive ID values are 16 characters, padded by leading zeros if the provided JSON data has dropped these leading zeros
*   Fix Bug: Fixed testInternetReachability function so that this always returns a boolean value and not throw an exception

### Updated
*   Updated documentation

## 2.5.3 - 2024-11-16

### Added
*   Implement Feature Request: Implement Docker ENV variable for --cleanup-local-files
*   Enhancement: Setup a specific SIGPIPE Signal handler for curl/openssl generated signals
*   Enhancement: Add Check Spelling GitHub Action
*   Enhancement: Add passive database checkpoints to optimise database operations
*   Enhancement: Ensure application notifies user of curl versions that contain HTTP/2 bugs that impact the operation of this client
*   Enhancement: Add OpenSSL version warning
*   Enhancement: Improve performance with reduced execution time and lower CPU/system resource usage

### Changed
*   Specifically use a 'mutex' to perform the lock on database actions
*   Update safeBackup to use a new filename format for easier identification: filename-hostname-safeBackup-number.file_extension
*   Allow no-sync operations to complete online account checks

### Fixed
*   Fix Regression: Fix regression for Docker 'sync_dir' use
*   Fix Bug: Fix that a 'sync_list' entry of '/' will cause a index [0] is out of bounds
*   Fix Bug: Fix that when creating a new folder online the application generates an exception if it is in a Shared Online Folder
*   Fix Bug: Fix application crash when session upload files contain zero data or are corrupt
*   Fix Bug: Fix that curl generates a SIGPIPE that causes application to exit due to upstream device killing idle TCP connection
*   Fix Bug: Fix that skip_dir is not flagging directories correctly causing deletion if parental path structure needs to be created for sync_list handling
*   Fix Bug: Fix application crash caused by unable to drop table
*   Fix Bug: Fix that skip_file in config does not override defaults
*   Fix Bug: Handle DB upgrades from v2.4.x without causing application crash
*   Fix Bug: Fix a database statement execution error occurred: NOT NULL constraint failed: item.type due to Microsoft OneNote items
*   Fix Bug: Fix Operation not permitted FileException Error when attempting to use setTimes() function
*   Fix Bug: Fix that files with no mime type cause sync to crash
*   Fix Bug: Fix that bypass_data_preservation operates as intended

### Updated
*   Fixed spelling errors across all documentation and code
*   Update Dockerfile-debian to fix that libcurl4 does not get applied despite being pulled in. Explicitly install it from Debian 12 Backports
*   Add Ubuntu 24.10 OpenSuSE Build Service details
*   Update Dockerfile-alpine - revert to Alpine 3.19 as application fails to run on Alpine 3.20
*   Updated documentation

## 2.5.2 - 2024-09-29

### Added
*   Added 15 second sleep to systemd services to allow d-bus daemon to start and be available if present

### Fixed
*   Fix Bug: Application crash unable to correctly process a timestamp that has fractional seconds
*   Fix Bug: Fixed application logging output of Personal Shared Folder incorrectly advising there is no free space

### Updated
*   Updated documentation

## 2.5.1 - 2024-09-27 (DO NOT USE. CONTAINS A MAJOR TIMESTAMP ISSUE BUG)

### Special Thankyou
A special thankyou to @phlibi for assistance with diagnosing and troubleshooting the database timestamp issue

### Added
*   Implement Feature Request: Don't print the d-bus WARNING if disable_notifications is set on cmd line or in config

### Changed
*   Add --enable-debug to Docker files when building client application to allow for better diagnostics when issues occur
*   Update Debian Dockerfile to use 'curl' from backports so a more modern curl version is used

### Fixed
*   Fix Regression: Fix regression of extra quotation marks when using ONEDRIVE_SINGLE_DIRECTORY with Docker
*   Fix Regression: Fix regression that real-time synchronization is not occurring when using --monitor and sync_list
*   Fix Regression: Fix regression that --remove-source-files doesn’t work
*   Fix Bug: Application crash when run synchronize due to negative free space online
*   Fix Bug: Application crash when performing a URL decode
*   Fix Bug: Application crash when using sync_list and Personal Shared Folders the root folder fails to present the item id
*   Fix Bug: Application crash when attempting to read timestamp from database as invalid data was written

### Updated
*   Updated documentation (various)

## 2.5.0 - 2024-09-16

### Special Thankyou
A special thankyou to all those who helped with testing and providing feedback during the development of this major release. A big thankyou to:
*   @JC-comp
*   @Lyncredible
*   @rrodrigueznt
*   @bpozdena
*   @hskrieg
*   @robertschulze 
*   @aothmane-control
*   @mozram
*   @LunCh-CECNL
*   @pkolmann
*   @tdcockers
*   @undefiened
*   @cyb3rko

### Notable Changes
*   This version introduces significant changes regarding how the integrity and validation of your data is determined and is not backwards compatible with v2.4.x.
*   OneDrive Business Shared Folder Sync has been 100% re-written in v2.5.0. If you are using this feature, please read the new documentation carefully.
*   The application function --download-only no longer automatically deletes local files. Please read the new documentation regarding this feature.

### Added
*   Implement Feature Request: Multi-threaded uploading/downloading of files
*   Implement Feature Request: Renaming/Relocation of OneDrive Business shared folders
*   Implement Feature Request: Support the syncing of individual business shared files
*   Implement Feature Request: Implement application output to detail upload|download failures at the end of a sync process
*   Implement Feature Request: Log when manual Authorization is required when using --auth-files
*   Implement Feature Request: Add cmdline parameter to display (human readable) quota status
*   Implement Feature Request: Add capability to disable 'fullscan_frequency'
*   Implement Feature Request: Ability to set --disable-download-validation from Docker environment variable
*   Implement Feature Request: Ability to set --sync-shared-files from Docker environment variable
*   Implement Feature Request: file sync (upload/download/delete) notifications

### Changed
*   Renamed various documentation files to align with document content
*   Implement buffered logging so that all logging from all upload & download activities are handled correctly
*   Replace polling monitor loop with blocking wait
*   Update how the application utilises curl to fix socket reuse
*   Various performance enhancements
*   Implement refactored OneDrive API logic
*   Enforcement of operational conflicts
*   Enforcement of application configuration defaults and minimums
*   Utilise threadsafe sqlite DB access methods
*   Various bugs and other issues identified during development and testing
*   Various code cleanup and optimisations

### Fixed
*   Fix Bug: Upload only not working with Business shared folders
*   Fix Bug: Business shared folders with same basename get merged
*   Fix Bug: --dry-run prevents authorization
*   Fix Bug: Log timestamps lacking trailing zeros, leading to poor log file output alignment
*   Fix Bug: Subscription ID already exists when using webhooks
*   Fix Bug: Not all files being downloaded when API data includes HTML ASCII Control Sequences
*   Fix Bug: --display-sync-status does not work when OneNote sections (.one files) are in your OneDrive
*   Fix Bug: vim backups when editing files cause edited file to be deleted rather than the edited file being uploaded
*   Fix Bug: skip_dir does not always work as intended for all directory entries
*   Fix Bug: Online date being changed in download-only mode
*   Fix Bug: Resolve that download_only = "true" and cleanup_local_files = "true" also deletes files present online
*   Fix Bug: Resolve that upload session are not canceled with resync option
*   Fix Bug: Local files should be safely backed up when the item is not in sync locally to prevent data loss when they are deleted online
*   Fix Bug: Files with newer timestamp are not chosen as version to be kept
*   Fix Bug: Synced file is removed when updated on the remote while being processed by onedrive
*   Fix Bug: Cannot select/filter within Personal Shared Folders
*   Fix Bug: HTML encoding requires to add filter entries twice
*   Fix Bug: Uploading files using fragments stuck at 0%
*   Fix Bug: Implement safeguard when sync_dir is missing and is re-created data is not deleted online
*   Fix Bug: Fix that --get-sharepoint-drive-id does not handle a SharePoint site with more than 200 entries
*   Fix Bug: Fix that 'sync_list' does not include files that should be included, when specified just as *.ext_type
*   Fix Bug: Fix 'sync_list' processing so that '.folder_name' is excluded but 'folder_name' is included

### Updated
*   Overhauled all documentation

## 2.4.25 - 2023-06-21

### Fixed
*   Fixed that the application was reporting as v2.2.24 when in fact it was v2.4.24 (release tagging issue)
*   Fixed that the running version obsolete flag (due to above issue) was causing a false flag as being obsolete
*   Fixed that zero-byte files do not have a hash as reported by the OneDrive API thus should not generate an error message

### Updated
*   Update to Debian Docker file to resolve Docker image Operating System reported vulnerabilities
*   Update to Alpine Docker file to resolve Docker image Operating System reported vulnerabilities
*   Update to Fedora Docker file to resolve Docker image Operating System reported vulnerabilities
*   Updated documentation (various)

## 2.4.24 - 2023-06-20
### Fixed
*   Fix for extra encoded quotation marks surrounding Docker environment variables
*   Fix webhook subscription creation for SharePoint Libraries
*   Fix that a HTTP 504 - Gateway Timeout causes local files to be deleted when using --download-only & --cleanup-local-files mode
*   Fix that folders are renamed despite using --dry-run
*   Fix deprecation warnings with dmd 2.103.0
*   Fix error that the application is unable to perform a database vacuum: out of memory when exiting

### Removed
*   Remove sha1 from being used by the client as this is being deprecated by Microsoft in July 2023
*   Complete the removal of crc32 elements

### Added
*   Added ONEDRIVE_SINGLE_DIRECTORY configuration capability to Docker
*   Added --get-file-link shell completion
*   Added configuration to allow HTTP session timeout(s) tuning via config (taken from v2.5.x)

### Updated
*   Update to Debian Docker file to resolve Docker image Operating System reported vulnerabilities
*   Update to Alpine Docker file to resolve Docker image Operating System reported vulnerabilities
*   Update to Fedora Docker file to resolve Docker image Operating System reported vulnerabilities
*   Updated cgi.d to commit 680003a - last upstream change before requiring `core.d` dependency requirement
*   Updated documentation (various)

## 2.4.23 - 2023-01-06
### Fixed
*   Fixed RHEL7, RHEL8 and RHEL9 Makefile and SPEC file compatibility

### Removed
*   Disable systemd 'PrivateUsers' due to issues with systemd running processes when option is enabled, causes local file deletes on RHEL based systems

### Updated
*   Update --get-O365-drive-id error handling to display a more a more appropriate error message if the API cannot be found
*   Update the GitHub version check to utilise the date a release was done, to allow 1 month grace period before generating obsolete version message
*   Update Alpine Dockerfile to use Alpine 3.17 and Golang 1.19
*   Update handling of --source-directory and --destination-directory if one is empty or missing and if used with --synchronize or --monitor
*   Updated documentation (various)

## 2.4.22 - 2022-12-06
### Fixed
*   Fix application crash when local file is changed to a symbolic link with non-existent target
*   Fix build error with dmd-2.101.0
*   Fix build error with LDC 1.28.1 on Alpine
*   Fix issue of silent exit when unable to delete local files when using --cleanup-local-files
*   Fix application crash due to access permissions on configured path for sync_dir
*   Fix potential application crash when exiting due to failure state and unable to cleanly shutdown the database
*   Fix creation of parent empty directories when parent is excluded by sync_list

### Added
*   Added performance output details for key functions

### Changed
*   Switch Docker 'latest' to point at Debian builds rather than Fedora due to ongoing Fedora build failures
*   Align application logging events to actual application defaults for --monitor operations
*   Performance Improvement: Avoid duplicate costly path calculations and DB operations if not required
*   Disable non-working remaining sandboxing options within systemd service files
*   Performance Improvement: Only check 'sync_list' if this has been enabled and configured
*   Display 'Sync with OneDrive is complete' when using --synchronize
*   Change the order of processing between Microsoft OneDrive restrictions and limitations check and skip_file|skip_dir check

### Removed
*   Remove building Fedora ARMv7 builds due to ongoing build failures

### Updated
*   Update config change detection handling
*   Updated documentation (various)

## 2.4.21 - 2022-09-27
### Fixed
*   Fix that the download progress bar doesn't always reach 100% when rate_limit is set
*   Fix --resync handling of database file removal
*   Fix Makefile to be consistent with permissions that are being used
*   Fix that logging output for skipped uploaded files is missing
*   Fix to allow non-sync tasks while sync is running
*   Fix where --resync is enforced for non-sync operations
*   Fix to resolve segfault when running 'onedrive --display-sync-status' when run as 2nd process
*   Fix DMD 2.100.2 depreciation warning

### Added
*   Add GitHub Action Test Build Workflow (replacing Travis CI)
*   Add option --display-running-config to display the running configuration as used at application startup
*   Add 'config' option to request readonly access in oauth authorization step
*   Add option --cleanup-local-files to cleanup local files regardless of sync state when using --download-only
*   Add option --with-editing-perms to create a read-write shareable link when used with --create-share-link <file>

### Changed
*   Change the exit code of the application to 126 when a --resync is required

### Updated
*   Updated --get-O365-drive-id implementation for data access
*   Update what application options require an argument
*   Update application logging output for error messages to remove certain \n prefix when logging to a file
*   Update onedrive.spec.in to fix error building RPM
*   Update GUI notification handling for specific skipped scenarios
*   Updated documentation (various)

## 2.4.20 - 2022-07-20
### Fixed
*   Fix 'foreign key constraint failed' when using OneDrive Business Shared Folders due to change to using /delta query
*   Fix various little spelling errors (checked with lintian during Debian packaging)
*   Fix handling of a custom configuration directory when using --confdir
*   Fix to ensure that any active http instance is shutdown before any application exit
*   Fix to enforce that --confdir must be a directory

### Added
*   Added 'force_http_11' configuration option to allow forcing HTTP/1.1 operations

### Changed
*   Increased thread sleep for better process I/O wait handling
*   Removed 'force_http_2' configuration option

### Updated
*   Update OneDrive API response handling for National Cloud Deployments
*   Updated to switch to using curl defaults for HTTP/2 operations
*   Updated documentation (various)

## 2.4.19 - 2022-06-15
### Fixed
*   Update Business Shared Folders to use a /delta query
*   Update when DB is updated by OneDrive API data and update when file hash is required to be generated

### Added
*   Added ONEDRIVE_UPLOADONLY flag for Docker

### Updated
*   Updated GitHub workflows
*   Updated documentation (various)

## 2.4.18 - 2022-06-02
### Fixed
*   Fixed various database related access issues stemming from running multiple instances of the application at the same time using the same configuration data
*   Fixed --display-config being impacted by --resync flag
*   Fixed installation permissions for onedrive man-pages file
*   Fixed that in some situations that users try --upload-only and --download-only together which is not possible
*   Fixed application crash if unable to read required hash files

### Added
*   Added Feature Request to add an override for skip_dir|skip_file through flag to force sync
*   Added a check to validate local filesystem available space before attempting file download
*   Added GitHub Actions to build Docker containers and push to DockerHub 

### Updated
*   Updated all Docker build files to current distributions, using updated distribution LDC version
*   Updated logging output to logfiles when an actual sync process is occurring
*   Updated output of --display-config to be more relevant
*   Updated manpage to align with application configuration
*   Updated documentation and Docker files based on minimum compiler versions to dmd-2.088.0 and ldc-1.18.0
*   Updated documentation (various)

## 2.4.17 - 2022-04-30
### Fixed
*   Fix docker build, by add missing git package for Fedora builds
*   Fix application crash when attempting to sync a broken symbolic link
*   Fix Internet connect disruption retry handling and logging output
*   Fix local folder creation timestamp with timestamp from OneDrive
*   Fix logging output when download failed

### Added
*   Add additional logging specifically for delete event to denote in log output the source of a deletion event when running in --monitor mode

### Changed
*   Improve when the local database integrity check is performed and on what frequency the database integrity check is performed

### Updated
*   Remove application output ambiguity on how to access 'help' for the client
*   Update logging output when running in --monitor --verbose mode in regards to the inotify events
*   Updated documentation (various)

## 2.4.16 - 2022-03-10
### Fixed
*   Update application file logging error handling
*   Explicitly set libcurl options
*   Fix that when a sync_list exclusion is matched, the item needs to be excluded when using --resync
*   Fix so that application can be compiled correctly on Android hosts
*   Fix the handling of 429 and 5xx responses when they are generated by OneDrive in a self-referencing circular pattern
*   Fix applying permissions to volume directories when running in rootless podman
*   Fix unhandled errors from OneDrive when initialising subscriptions fail

### Added
*   Enable GitHub Sponsors
*   Implement --resync-auth to enable CLI passing in of --rsync approval
*   Add function to check client version vs latest GitHub release
*   Add --reauth to allow easy re-authentication of the client
*   Implement --modified-by to display who last modified a file and when the modification was done
*   Implement feature request to mark partially-downloaded files as .partial during download
*   Add documentation for Podman support

### Changed
*   Document risk regarding using --resync and force user acceptance of usage risk to proceed
*   Use YAML for Bug Reports and Feature Requests
*   Update Dockerfiles to use more modern base Linux distribution

### Updated
*   Updated documentation (various)

## 2.4.15 - 2021-12-31
### Fixed
*   Fix unable to upload to OneDrive Business Shared Folders due to OneDrive API restricting quota information
*   Update fixing edge case with OneDrive Personal Shared Folders and --resync --upload-only

### Added
*   Add SystemD hardening
*   Add --operation-timeout argument

### Changed
*   Updated minimum compiler versions to dmd-2.087.0 and ldc-1.17.0

### Updated
*   Updated Dockerfile-alpine to use Alpine 3.14
*   Updated documentation (various)

## 2.4.14 - 2021-11-24
### Fixed
*   Support DMD 2.097.0 as compiler for Docker Builds
*   Fix getPathDetailsByDriveId query when using --dry-run and a nested path with --single-directory
*   Fix edge case when syncing OneDrive Personal Shared Folders
*   Catch unhandled API response errors when querying OneDrive Business Shared Folders
*   Catch unhandled API response errors when listing OneDrive Business Shared Folders
*   Fix error 'Key not found: remaining' with Business Shared Folders (OneDrive API change)
*   Fix overwriting local files with older versions from OneDrive when items.sqlite3 does not exist and --resync is not used

### Added
*   Added operation_timeout as a new configuration to assist in cases where operations take longer that 1h to complete
*   Add Real-Time syncing of remote updates via webhooks
*   Add --auth-response option and expose through entrypoint.sh for Docker
*   Add --disable-download-validation

### Changed
*   Always prompt for credentials for authentication rather than re-using cached browser details
*   Do not re-auth on --logout

### Updated
*   Updated documentation (various)

## 2.4.13 - 2021-7-14
### Fixed
*   Support DMD 2.097.0 as compiler
*   Fix to handle OneDrive API Bad Request response when querying if file exists
*   Fix application crash and incorrect handling of --single-directory when syncing a OneDrive Business Shared Folder due to using 'Add Shortcut to My Files'
*   Fix application crash due to invalid UTF-8 sequence in the pathname for the application configuration
*   Fix error message when deleting a large number of files
*   Fix Docker build process to source GOSU keys from updated GPG key location
*   Fix application crash due to a conversion overflow when calculating file offset for session uploads
*   Fix Docker Alpine build failing due to filesystem permissions issue due to Docker build system and Alpine Linux 3.14 incompatibility
*   Fix that Business Shared Folders with parentheses are ignored

### Updated
*   Updated Lock Bot to run daily
*   Updated documentation (various)

## 2.4.12 - 2021-5-28
### Fixed
*   Fix an unhandled Error 412 when uploading modified files to OneDrive Business Accounts
*   Fix 'sync_list' handling of inclusions when name is included in another folders name
*   Fix that options --upload-only & --remove-source-files are ignored on an upload session restore
*   Fix to add file check when adding item to database if using --upload-only --remove-source-files
*   Fix application crash when SharePoint displayName is being withheld

### Updated
*   Updated Lock Bot to use GitHub Actions
*   Updated documentation (various)

## 2.4.11 - 2021-4-07
### Fixed
*   Fix support for '/*' regardless of location within sync_list file
*   Fix 429 response handling correctly check for 'retry-after' response header and use set value
*   Fix 'sync_list' path handling for sub item matching, so that items in parent are not implicitly matched when there is no wildcard present
*   Fix --get-O365-drive-id to use 'nextLink' value if present when searching for specific SharePoint site names
*   Fix OneDrive Business Shared Folder existing name conflict check
*   Fix incorrect error message 'Item cannot be deleted from OneDrive because it was not found in the local database' when item is actually present
*   Fix application crash when unable to rename folder structure due to unhandled file-system issue
*   Fix uploading documents to Shared Business Folders when the shared folder exists on a SharePoint site due to Microsoft Sharepoint 'enrichment' of files
*   Fix that a file record is kept in database when using --no-remote-delete & --remove-source-files

### Added
*   Added support in --get-O365-drive-id to provide the 'drive_id' for multiple 'document libraries' within a single Shared Library Site

### Removed
*   Removed the deprecated config option 'force_http_11' which was flagged as deprecated by PR #549 in v2.3.6 (June 2019)

### Updated
*   Updated error output of --get-O365-drive-id to provide more details why an error occurred if a SharePoint site lacks the details we need to perform the match
*   Updated Docker build files for Raspberry Pi to dedicated armhf & aarch64 Dockerfiles
*   Updated logging output when in --monitor mode, avoid outputting misleading logging when the new or modified item is a file, not a directory
*   Updated documentation (various)

## 2.4.10 - 2021-2-19
### Fixed
*   Catch database assertion when item path cannot be calculated
*   Fix alpine Docker build so it uses the same golang alpine version
*   Search all distinct drive id's rather than just default drive id for --get-file-link
*   Use correct driveId value to query for changes when using --single-directory
*   Improve upload handling of files for SharePoint sites and detecting when SharePoint modifies the file post upload
*   Correctly handle '~' when present in 'log_dir' configuration option
*   Fix logging output when handing downloaded new files
*   Fix to use correct path offset for sync_list exclusion matching 

### Added
*   Add upload speed metrics when files are uploaded and clarify that 'data to transfer' is what is needed to be downloaded from OneDrive
*   Add new config option to rate limit connection to OneDrive
*   Support new file maximum upload size of 250GB
*   Support sync_list matching full path root wildcard with exclusions to simplify sync_list configuration

### Updated
*   Rename Office365.md --> SharePoint-Shared-Libraries.md which better describes this document
*   Updated Dockerfile config for arm64
*   Updated documentation (various)

## 2.4.9 - 2020-12-27
### Fixed
*   Fix to handle case where API provided deltaLink generates a further API error
*   Fix application crash when unable to read a local file due to local file permissions
*   Fix application crash when calculating the path length due to invalid UTF characters in local path
*   Fix Docker build on Alpine due missing symbols due to using the edge version of ldc and ldc-runtime
*   Fix application crash with --get-O365-drive-id when API response is restricted

### Added
*   Add debug log output of the configured URL's which will be used throughout the application to remove any ambiguity as to using incorrect URL's when making API calls
*   Improve application startup when using --monitor when there is no network connection to the OneDrive API and only initialise application once OneDrive API is reachable
*   Add Docker environment variable to allow --logout for re-authentication

### Updated
*   Remove duplicate code for error output functions and enhance error logging output
*   Updated documentation

## 2.4.8 - 2020-11-30
### Fixed
*   Fix to use config set option for 'remove_source_files' and 'skip_dir_strict_match' rather than ignore if set
*   Fix download failure and crash due to incorrect local filesystem permissions when using mounted external devices
*   Fix to not change permissions on pre-existing local directories
*   Fix logging output when authentication authorisation fails to not say authorisation was successful
*   Fix to check application_id before setting redirect URL when using specific Azure endpoints
*   Fix application crash in --monitor mode due to 'Failed to stat file' when setgid is used on a directory and data cannot be read

### Added
*   Added advanced-usage.md to document advanced client usage such as multi account configurations and Windows dual-boot

### Updated
*   Updated --verbose logging output for config options when set
*   Updated documentation (man page, USAGE.md, Office365.md, BusinessSharedFolders.md)

## 2.4.7 - 2020-11-09
### Fixed
*   Fix debugging output for /delta changes available queries
*   Fix logging output for modification comparison source data
*   Fix Business Shared Folder handling to process only Shared Folders, not individually shared files
*   Fix cleanup dryrun shm and wal files if they exist
*   Fix --list-shared-folders to only show folders
*   Fix to check for the presence of .nosync when processing DB entries
*   Fix skip_dir matching when using --resync
*   Fix uploading data to shared business folders when using --upload-only
*   Fix to merge contents of SQLite WAL file into main database file on sync completion
*   Fix to check if localModifiedTime is >= than item.mtime to avoid re-upload for equal modified time
*   Fix to correctly set config directory permissions at first start

### Added
*   Added environment variable to allow easy HTTPS debug in docker
*   Added environment variable to allow download-only mode in Docker
*   Implement Feature: Allow config to specify a tenant id for non-multi-tenant applications
*   Implement Feature: Adding support for authentication with single tenant custom applications
*   Implement Feature: Configure specific File and Folder Permissions

### Updated
*   Updated documentation (readme.md, install.md, usage.md, bug_report.md)

## 2.4.6 - 2020-10-04
### Fixed
*   Fix flagging of remaining free space when value is being restricted
*   Fix --single-directory path handling when path does not exist locally
*   Fix checking for 'Icon' path as no longer listed by Microsoft as an invalid file or folder name
*   Fix removing child items on OneDrive when parent item responds with access denied
*   Fix to handle deletion events for files when inotify events are missing
*   Fix uninitialised value error as reported by valgrind
*   Fix to handle deletion events for directories when inotify events are missing

### Added
*   Implement Feature: Create shareable link
*   Implement Feature: Support wildcard within sync_list entries
*   Implement Feature: Support negative patterns in sync_list for fine grained exclusions
*   Implement Feature: Multiple skip_dir & skip_file configuration rules
*   Add GUI notification to advise users when the client needs to be reauthenticated

### Updated
*   Updated documentation (readme.md, install.md, usage.md, bug_report.md)

## 2.4.5 - 2020-08-13
### Fixed
*   Fixed fish auto completions installation destination

## 2.4.4 - 2020-08-11
### Fixed
*   Fix 'skip_dir' & 'skip_file' pattern matching to ensure correct matching is performed
*   Fix 'skip_dir' & 'skip_file' so that each directive is only used against directories or files as required in --monitor
*   Fix client hand when attempting to sync a Unix pipe file
*   Fix --single-directory & 'sync_list' performance 
*   Fix erroneous 'return' statements which could prematurely end processing all changes returned from OneDrive
*   Fix segfault when attempting to perform a comparison on an inotify event when determining if event path is directory or file
*   Fix handling of Shared Folders to ensure these are checked against 'skip_dir' entries
*   Fix 'Skipping uploading this new file as parent path is not in the database' when uploading to a Personal Shared Folder
*   Fix how available free space is tracked when uploading files to OneDrive and Shared Folders
*   Fix --single-directory handling of parent path matching if path is being seen for first time

### Added
*   Added Fish auto completions

### Updated
*   Increase maximum individual file size to 100GB due to Microsoft file limit increase
*   Update Docker build files and align version of compiler across all Docker builds
*   Update Docker documentation
*   Update NixOS build information
*   Update the 'Processing XXXX' output to display the full path
*   Update logging output when a sync starts and completes when using --monitor
*   Update Office 365 / SharePoint site search query and response if query return zero match

## 2.4.3 - 2020-06-29
### Fixed
*   Check if symbolic link is relative to location path
*   When using output logfile, fix inconsistent output spacing
*   Perform initial sync at startup in monitor mode
*   Handle a 'race' condition to process inotify events generated whilst performing DB or filesystem walk
*   Fix segfault when moving folder outside the sync directory when using --monitor on Arch Linux

### Added
*   Added additional inotify event debugging
*   Added support for loading system configs if there's no user config
*   Added Ubuntu installation details to include installing the client from a PPA
*   Added openSUSE installation details to include installing the client from a package
*   Added support for comments in sync_list file
*   Implement recursive deletion when Retention Policy is enabled on OneDrive Business Accounts
*   Implement support for National cloud deployments
*   Implement OneDrive Business Shared Folders Support

### Updated
*   Updated documentation files (various)
*   Updated log output messaging when a full scan has been set or triggered
*   Updated buildNormalizedPath complexity to simplify code
*   Updated to only process OneDrive Personal Shared Folders only if account type is 'personal'

## 2.4.2 - 2020-05-27
### Fixed
*   Fixed the catching of an unhandled exception when inotify throws an error
*   Fixed an uncaught '100 Continue' response when files are being uploaded
*   Fixed progress bar for uploads to be more accurate regarding percentage complete
*   Fixed handling of database query enforcement if item is from a shared folder
*   Fixed compiler depreciation of std.digest.digest
*   Fixed checking & loading of configuration file sequence
*   Fixed multiple issues reported by Valgrind
*   Fixed double scan at application startup when using --monitor & --resync together
*   Fixed when renaming a file locally, ensure that the target filename is valid before attempting to upload to OneDrive
*   Fixed so that if a file is modified locally and --resync is used, rename the local file for data preservation to prevent local data loss

### Added
*   Implement 'bypass_data_preservation' enhancement

### Changed
*   Changed the monitor interval default to 300 seconds

### Updated
*   Updated the handling of out-of-space message when OneDrive is out of space
*   Updated debug logging for retry wait times

## 2.4.1 - 2020-05-02
### Fixed
*   Fixed the handling of renaming files to a name starting with a dot when skip_dotfiles = true
*   Fixed the handling of parentheses from path or file names, when doing comparison with regex
*   Fixed the handling of renaming dotfiles to another dotfile when skip_dotfile=true in monitor mode
*   Fixed the handling of --dry-run and --resync together correctly as current database may be corrupt
*   Fixed building on Alpine Linux under Docker
*   Fixed the handling of --single-directory for --dry-run and --resync scenarios
*   Fixed the handling of .nosync directive when downloading new files into existing directories that is (was) in sync
*   Fixed the handling of zero-byte modified files for OneDrive Business
*   Fixed skip_dotfiles handling of .folders when in monitor mode to prevent monitoring
*   Fixed the handling of '.folder' -> 'folder' move when skip_dotfiles is enabled
*   Fixed the handling of folders that cannot be read (permission error) if parent should be skipped
*   Fixed the handling of moving folders from skipped directory to non-skipped directory via OneDrive web interface
*   Fixed building on CentOS Linux under Docker
*   Fixed Codacy reported issues: double quote to prevent globbing and word splitting
*   Fixed an assertion when attempting to compute complex path comparison from shared folders
*   Fixed the handling of .folders when being skipped via skip_dir

### Added
*   Implement Feature: Implement the ability to set --resync as a config option, default is false

### Updated
*   Update error logging to be consistent when initialising fails
*   Update error logging output to handle HTML error response reasoning if present
*   Update link to new Microsoft documentation
*   Update logging output to differentiate between OneNote objects and other unsupported objects
*   Update RHEL/CentOS spec file example
*   Update known-issues.md regarding 'SSL_ERROR_SYSCALL, errno 104'
*   Update progress bar to be more accurate when downloading large files
*   Updated #658 and #865 handling of when to trigger a directory walk when changes occur on OneDrive
*   Updated handling of when a full scan is required due to utilising sync_list
*   Updated handling of when OneDrive service throws a 429 or 504 response to retry original request after a delay

## 2.4.0 - 2020-03-22
### Fixed
*   Fixed how the application handles 429 response codes from OneDrive (critical update)
*   Fixed building on Alpine Linux under Docker
*   Fixed how the 'username' is determined from the running process for logfile naming
*   Fixed file handling when a failed download has occurred due to exiting via CTRL-C
*   Fixed an unhandled exception when OneDrive throws an error response on initialising
*   Fixed the handling of moving files into a skipped .folder when skip_dotfiles = true
*   Fixed the regex parsing of response URI to avoid potentially generating a bad request to OneDrive, leading to a 'AADSTS9002313: Invalid request. Request is malformed or invalid.' response.

### Added
*   Added a Dockerfile for building on Raspberry Pi / ARM platforms
*   Implement Feature: warning on big deletes to safeguard data on OneDrive
*   Implement Feature: delete local files after sync
*   Implement Feature: perform skip_dir explicit match only
*   Implement Feature: provide config file option for specifying the Client Identifier

### Changed
*   Updated the 'Client Identifier' to a new Application ID

### Updated
*   Updated relevant documentation (README.md, USAGE.md) to add new feature details and clarify existing information
*   Update completions to include the --force-http-2 option
*   Update to always log when a file is skipped due to the item being invalid
*   Update application output when just authorising application to make information clearer
*   Update logging output when using sync_list to be clearer as to what is actually being processed and why

## 2.3.13 - 2019-12-31
### Fixed
*   Change the sync list override flag to false as default when not using sync_list
*   Fix --dry-run output when using --upload-only & --no-remote-delete and deleting local files

### Added
*   Add a verbose log entry when a monitor sync loop with OneDrive starts & completes

### Changed
*   Remove logAndNotify for 'processing X changes' as it is excessive for each change bundle to inform the desktop of the number of changes the client is processing

### Updated
*   Updated INSTALL.md with Ubuntu 16.x i386 build instructions to reflect working configuration on legacy hardware
*   Updated INSTALL.md with details of Linux packages
*   Updated INSTALL.md build instructions for CentOS platforms

## 2.3.12 - 2019-12-04
### Fixed
*   Retry session upload fragment when transient errors occur to prevent silent upload failure
*   Update Microsoft restriction and limitations about windows naming files to include '~' for folder names
*   Docker guide fixes, add multiple account setup instructions
*   Check database for excluded sync_list items previously in scope
*   Catch DNS resolution error
*   Fix where an item now out of scope should be flagged for local delete
*   Fix rebuilding of onedrive, but ensure version is properly updated 
*   Update Ubuntu i386 build instructions to use DMD using preferred method

### Added
*   Add debug message to when a message is sent to dbus or notification daemon
*   Add i386 instructions for legacy low memory platforms using LDC

## 2.3.11 - 2019-11-05
### Fixed
*   Fix typo in the documentation regarding invalid config when upgrading from 'skilion' codebase
*   Fix handling of skip_dir, skip_file & sync_list config options
*   Fix typo in the documentation regarding sync_list
*   Fix log output to be consistent with sync_list exclusion
*   Fix 'Processing X changes' output to be more reflective of actual activity when using sync_list
*   Remove unused and unexported SED variable in Makefile.in 
*   Handle curl exceptions and timeouts better with backoff/retry logic
*   Update skip_dir pattern matching when using wildcards
*   Fix when a full rescan is performed when using sync_list
*   Fix 'Key not found: name' when computing skip_dir path
*   Fix call from --monitor to observe --no-remote-delete
*   Fix unhandled exception when monitor initialisation failure occurs due to too many open local files
*   Fix unhandled 412 error response from OneDrive API when moving files right after upload
*   Fix --monitor when used with --download-only. This fixes a regression introduced in 12947d1.
*   Fix if --single-directory is being used, and we are using --monitor, only set inotify watches on the single directory

### Changed
*   Move JSON logging output from error messages to debug output

## 2.3.10 - 2019-10-01
### Fixed
*   Fix searching for 'name' when deleting a synced item, if the OneDrive API does not return the expected details in the API call
*   Fix abnormal termination when no Internet connection
*   Fix downloading of files from OneDrive Personal Shared Folders when the OneDrive API responds with unexpected additional path data
*   Fix logging of 'initialisation' of client to actually when the attempt to initialise is performed
*   Fix when using a sync_list file, using deltaLink will actually 'miss' changes (moves & deletes) on OneDrive as using sync_list discards changes
*   Fix OneDrive API status code 500 handling when uploading files as error message is not correct
*   Fix crash when resume_upload file is not a valid JSON 
*   Fix crash when a file system exception is generated when attempting to update the file date & time and this fails

### Added
*   If there is a case-insensitive match error, also return the remote name from the response
*   Make user-agent string a configuration option & add to config file
*   Set default User-Agent to 'OneDrive Client for Linux v{version}'

### Changed
*   Make verbose logging output optional on Docker
*   Enable --resync & debug client output via environment variables on Docker

## 2.3.9 - 2019-09-01
### Fixed
*   Catch a 403 Forbidden exception when querying Sharepoint Library Names
*   Fix unhandled error exceptions that cause application to exit / crash when uploading files
*   Fix JSON object validation for queries made against OneDrive where a JSON response is expected and where that response is to be used and expected to be valid
*   Fix handling of 5xx responses from OneDrive when uploading via a session

### Added
*   Detect the need for --resync when config changes either via config file or cli override

### Changed
*   Change minimum required version of LDC to v1.12.0

### Removed
*   Remove redundant logging output due to change in how errors are reported from OneDrive

## 2.3.8 - 2019-08-04
### Fixed
*   Fix unable to download all files when OneDrive fails to return file level details used to validate file integrity
*   Included the flag "-m" to create the home directory when creating the user
*   Fix entrypoint.sh to work with "sudo docker run"
*   Fix docker build error on stretch
*   Fix hidden directories in 'root' from having prefix removed
*   Fix Sharepoint Document Library handling for .txt & .csv files
*   Fix logging for init.d service
*   Fix OneDrive response missing required 'id' element when uploading images
*   Fix 'Unexpected character '<'. (Line 1:1)' when OneDrive has an exception error
*   Fix error when creating the sync dir fails when there is no permission to create the sync dir

### Added
*   Add explicit check for hashes to be returned in cases where OneDrive API fails to provide them despite requested to do so
*   Add comparison with sha1 if OneDrive provides that rather than quickXor
*   Add selinux configuration details for a sync folder outside of the home folder
*   Add date tag on docker.hub
*   Add back CentOS 6 install & uninstall to Makefile
*   Add a check to handle moving items out of sync_list sync scope & delete locally if true
*   Implement --get-file-link which will return the weburl of a file which has been synced to OneDrive

### Changed
*   Change unauthorized-api exit code to 3
*   Update LDC to v1.16.0 for Travis CI testing
*   Use replace function for modified Sharepoint Document Library files rather than delete and upload as new file, preserving file history
*   Update Sharepoint modified file handling for files > 4Mb in size

### Removed
*   Remove -d shorthand for --download-only to avoid confusion with other GNU applications where -d stands for 'debug'

## 2.3.7 - 2019-07-03
### Fixed
*   Fix not all files being downloaded due to OneDrive query failure
*   False DB update which potentially could had lead to false data loss on OneDrive

## 2.3.6 - 2019-07-03 (DO NOT USE)
### Fixed
*   Fix JSONValue object validation
*   Fix building without git being available
*   Fix some spelling/grammatical errors
*   Fix OneDrive error response on creating upload session

### Added
*   Add download size & hash check to ensure downloaded files are valid and not corrupt
*   Added --force-http-2 to use HTTP/2 if desired

### Changed
*   Deprecated --force-http-1.1 (enabled by default) due to OneDrive inconsistent behavior with HTTP/2 protocol

## 2.3.5 - 2019-06-19
### Fixed
*   Handle a directory in the sync_dir when no permission to access
*   Get rid of forced root necessity during installation
*   Fix broken autoconf code for --enable-XXX options
*   Fix so that skip_size check should only be used if configured
*   Fix a OneDrive Internal Error exception occurring before attempting to download a file

### Added
*   Check for supported version of D compiler

## 2.3.4 - 2019-06-13
### Fixed
*   Fix 'Local files not deleted' when using bad 'skip_file' entry
*   Fix --dry-run logging output for faking downloading new files
*   Fix install unit files to correct location on RHEL/CentOS 7
*   Fix up unit file removal on all platforms
*   Fix setting times on a file by adding a check to see if the file was actually downloaded before attempting to set the times on the file
*   Fix an unhandled curl exception when OneDrive throws an internal timeout error
*   Check timestamp to ensure that latest timestamp is used when comparing OneDrive changes
*   Fix handling responses where cTag JSON elements are missing
*   Fix Docker entrypoint.sh failures when GID is defined but not UID

### Added
*   Add autoconf based build system
*   Add an encoding validation check before any path length checks are performed as if the path contains any invalid UTF-8 sequences
*   Implement --sync-root-files to sync all files in the OneDrive root when using a sync_list file that would normally exclude these files from being synced
*   Implement skip_size feature request
*   Implement feature request to support file based OneDrive authorization (request | response)

### Updated
*   Better handle initialisation issues when OneDrive / MS Graph is experiencing problems that generate 401 & 5xx error codes
*   Enhance error message when unable to connect to Microsoft OneDrive service when the local CA SSL certificate(s) have issues
*   Update Dockerfile to correctly build on Docker Hub
*   Rework directory layout and re-factor MD files for readability

## 2.3.3 - 2019-04-16
### Fixed
*   Fix --upload-only check for Sharepoint uploads
*   Fix check to ensure item root we flag as 'root' actually is OneDrive account 'root'
*   Handle object error response from OneDrive when uploading to OneDrive Business
*   Fix handling of some OneDrive accounts not providing 'quota' details
*   Fix 'resume_upload' handling in the event of bad OneDrive response

### Added
*   Add debugging for --get-O365-drive-id function
*   Add shell (bash,zsh) completion support
*   Add config options for command line switches to allow for better config handling in docker containers

### Updated
*   Implement more meaningful 5xx error responses
*   Update onedrive.logrotate indentations and comments
*   Update 'min_notif_changes' to 'min_notify_changes'

## 2.3.2 - 2019-04-02
### Fixed
*   Reduce scanning the entire local system in monitor mode for local changes
*   Resolve file creation loop when working directly in the synced folder and Microsoft Sharepoint

### Added
*   Add 'monitor_fullscan_frequency' config option to set the frequency of performing a full disk scan when in monitor mode

### Updated
*   Update default 'skip_file' to include tmp and lock files generated by LibreOffice
*   Update database version due to changing defaults of 'skip_file' which will force a rebuild and use of new skip_file default regex

## 2.3.1 - 2019-03-26
### Fixed
*   Resolve 'make install' issue where rebuild of application would occur due to 'version' being flagged as .PHONY
*   Update readme build instructions to include 'make clean;' before build to ensure that 'version' is cleanly removed and can be updated correctly
*   Update Debian Travis CI build URL's

## 2.3.0 - 2019-03-25
### Fixed
*   Resolve application crash if no 'size' value is returned when uploading a new file
*   Resolve application crash if a 5xx error is returned when uploading a new file
*   Resolve not 'refreshing' version file when rebuilding
*   Resolve unexpected application processing by preventing use of --synchronize & --monitor together
*   Resolve high CPU usage when performing DB reads
*   Update error logging around directory case-insensitive match
*   Update Travis CI and ARM dependencies for LDC 1.14.0
*   Update Makefile due to build failure if building from release archive file
*   Update logging as to why a OneDrive object was skipped

### Added
*   Implement config option 'skip_dir'

## 2.2.6 - 2019-03-12
### Fixed
*   Resolve application crash when unable to delete remote folders when business retention policies are enabled
*   Resolve deprecation warning: loop index implicitly converted from size_t to int
*   Resolve warnings regarding 'bashisms'
*   Resolve handling of notification failure is dbus server has not started or available
*   Resolve handling of response JSON to ensure that 'id' key element is always checked for
*   Resolve excessive & needless logging in monitor mode
*   Resolve compiling with LDC on Alpine as musl lacks some standard interfaces
*   Resolve notification issues when offline and cannot act on changes
*   Resolve Docker entrypoint.sh to accept command line arguments
*   Resolve to create a new upload session on reinit 
*   Resolve where on OneDrive query failure, default root and drive id is used if a response is not returned
*   Resolve Key not found: nextExpectedRanges when attempting session uploads and incorrect response is returned
*   Resolve application crash when re-using an authentication URI twice after previous --logout
*   Resolve creating a folder on a shared personal folder appears successful but returns a JSON error
*   Resolve to treat mv of new file as upload of mv target
*   Update Debian i386 build dependencies
*   Update handling of --get-O365-drive-id to print out all 'site names' that match the explicit search entry rather than just the last match
*   Update Docker readme & documentation
*   Update handling of validating local file permissions for new file uploads
### Added
*   Add support for install & uninstall on RHEL / CentOS 6.x
*   Add support for when notifications are enabled, display the number of OneDrive changes to process if any are found
*   Add 'config' option 'min_notif_changes' for minimum number of changes to notify on, default = 5
*   Add additional Docker container builds utilising a smaller OS footprint
*   Add configurable interval of logging in monitor mode
*   Implement new CLI option --skip-dot-files to skip .files and .folders if option is used
*   Implement new CLI option --check-for-nosync to ignore folder when special file (.nosync) present
*   Implement new CLI option --dry-run

## 2.2.5 - 2019-01-16
### Fixed
*   Update handling of HTTP 412 - Precondition Failed errors
*   Update --display-config to display sync_list if configured
*   Add a check for 'id' key on metadata update to prevent 'std.json.JSONException@std/json.d(494): Key not found: id'
*   Update handling of 'remote' folder designation as 'root' items
*   Ensure that remote deletes are handled correctly
*   Handle 'Item not found' exception when unable to query OneDrive 'root' for changes
*   Add handling for JSON response error when OneDrive API returns a 404 due to OneDrive API regression
*   Fix items highlighted by codacy review
### Added
*   Add --force-http-1.1 flag to downgrade any HTTP/2 curl operations to HTTP 1.1 protocol
*   Support building with ldc2 and usage of pkg-config for lib finding

## 2.2.4 - 2018-12-28
### Fixed
*   Resolve JSONException when supplying --get-O365-drive-id option with a string containing spaces
*   Resolve 'sync_dir' not read from 'config' file when run in Docker container
*   Resolve logic where potentially a 'default' ~/OneDrive sync_dir could be set despite 'config' file configured for an alternate
*   Make sure sqlite checkpointing works by properly finalizing statements
*   Update logic handling of --single-directory to prevent inadvertent local data loss
*   Resolve signal handling and database shutdown on SIGINT and SIGTERM
*   Update man page
*   Implement better help output formatting
### Added
*   Add debug handling for sync_dir operations
*   Add debug handling for homePath calculation
*   Add debug handling for configDirBase calculation
*   Add debug handling if syncDir is created
*   Implement Feature Request: Add status command or switch

## 2.2.3 - 2018-12-20
### Fixed
*   Fix syncdir option is ignored

## 2.2.2 - 2018-12-20
### Fixed
*   Handle short lived files in monitor mode
*   Provide better log messages, less noise on temporary timeouts
*   Deal with items that disappear during upload
*   Deal with deleted move targets
*   Reinitialize sync engine after three failed attempts
*   Fix activation of dmd for docker builds
*   Fix to check displayName rather than description for --get-O365-drive-id
*   Fix checking of config file keys for validity
*   Fix exception handling when missing parameter from usage option
### Added
*   Notification support via libnotify
*   Add very verbose (debug) mode by double -v -v
*   Implement option --display-config

## 2.2.1 - 2018-12-04
### Fixed
*   Gracefully handle connection errors in monitor mode 
*   Fix renaming of files when syncing 
*   Installation of doc files, addition of man page 
*   Adjust timeout values for libcurl 
*   Continue in monitor mode when sync timed out 
*   Fix unreachable statements 
*   Update Makefile to better support packaging 
*   Allow starting offline in monitor mode 
### Added
*   Implement --get-O365-drive-id to get correct SharePoint Shared Library (#248)
*   Docker buildfiles for onedrive service (#262) 

## 2.2.0 - 2018-11-24
### Fixed
*   Updated client to output additional logging when debugging
*   Resolve database assertion failure due to authentication
*   Resolve unable to create folders on shared OneDrive Personal accounts
### Added
*   Implement feature request to Sync from Microsoft SharePoint
*   Implement feature request to specify a logging directory if logging is enabled
### Changed
*   Change '--download' to '--download-only' to align with '--upload-only'
*   Change logging so that logging to a separate file is no longer the default

## 2.1.6 - 2018-11-15
### Fixed
*   Updated HTTP/2 transport handling when using curl 7.62.0 for session uploads
### Added
*   Added PKGBUILD for makepkg for building packages under Arch Linux

## 2.1.5 - 2018-11-11
### Fixed
*   Resolve 'Key not found: path' when syncing from some shared folders due to OneDrive API change
*   Resolve to only upload changes on remote folder if the item is in the database - dont assert if false
*   Resolve files will not download or upload when using curl 7.62.0 due to HTTP/2 being set as default for all curl operations
*   Resolve to handle HTTP request returned status code 412 (Precondition Failed) for session uploads to OneDrive Personal Accounts
*   Resolve unable to remove '~/.config/onedrive/resume_upload: No such file or directory' if there is a session upload error and the resume file does not get created
*   Resolve handling of response codes when using 2 different systems when using '--upload-only' but the same OneDrive account and uploading the same filename to the same location
### Updated
*   Updated Travis CI building on LDC v1.11.0 for ARMHF builds
*   Updated Makefile to use 'install -D -m 644' rather than 'cp -raf'
*   Updated default config to be aligned to code defaults

## 2.1.4 - 2018-10-10
### Fixed
*   Resolve syncing of OneDrive Personal Shared Folders due to OneDrive API change
*   Resolve incorrect systemd installation location(s) in Makefile

## 2.1.3 - 2018-10-04
### Fixed
*   Resolve File download fails if the file is marked as malware in OneDrive
*   Resolve high CPU usage when running in monitor mode
*   Resolve how default path is set when running under systemd on headless systems
*   Resolve incorrectly nested configDir in X11 systems
*   Resolve Key not found: driveType
*   Resolve to validate filename length before download to conform with Linux FS limits
*   Resolve file handling to look for HTML ASCII codes which will cause uploads to fail
*   Resolve Key not found: expirationDateTime on session resume
### Added
*   Update Travis CI building to test build on ARM64

## 2.1.2 - 2018-08-27
### Fixed
*   Resolve skipping of symlinks in monitor mode
*   Resolve Gateway Timeout - JSONValue is not an object
*   Resolve systemd/user is not supported on CentOS / RHEL
*   Resolve HTTP request returned status code 429 (Too Many Requests)
*   Resolve handling of maximum path length calculation
*   Resolve 'The parent item is not in the local database'
*   Resolve Correctly handle file case sensitivity issues in same folder
*   Update unit files documentation link

## 2.1.1 - 2018-08-14
### Fixed
*   Fix handling no remote delete of remote directories when using --no-remote-delete
*   Fix handling of no permission to access a local file / corrupt local file
*   Fix application crash when unable to access login.microsoft.com upon application startup
### Added
*   Build instructions for openSUSE Leap 15.0

## 2.1.0 - 2018-08-10
### Fixed
*   Fix handling of database exit scenarios when there is zero disk space left on drive where the items database resides
*   Fix handling of incorrect database permissions
*   Fix handling of different database versions to automatically re-create tables if version mis-match
*   Fix handling timeout when accessing the Microsoft OneDrive Service
*   Fix localFileModifiedTime to not use fraction seconds
### Added
*   Implement Feature: Add a progress bar for large uploads & downloads
*   Implement Feature: Make checkinterval for monitor configurable
*   Implement Feature: Upload Only Option that does not perform remote delete
*   Implement Feature: Add ability to skip symlinks
*   Add dependency, ebuild and build instructions for Gentoo distributions
### Changed
*   Build instructions for x86, x86_64 and ARM32 platforms
*   Travis CI files to automate building on x32, x64 and ARM32 architectures
*   Travis CI files to test built application against valid, invalid and problem files from previous issues

## 2.0.2 - 2018-07-18
### Fixed
*   Fix systemd service install for builds with DESTDIR defined
*   Fix 'HTTP 412 - Precondition Failed' error handling
*   Gracefully handle OneDrive account password change
*   Update logic handling of --upload-only and --local-first

## 2.0.1 - 2018-07-11
### Fixed
*   Resolve computeQuickXorHash generates a different hash when files are > 64Kb

## 2.0.0 - 2018-07-10
### Fixed
*   Resolve conflict resolution issue during syncing - the client does not handle conflicts very well & keeps on adding the hostname to files
*   Resolve skilion #356 by adding additional check for 409 response from OneDrive
*   Resolve multiple versions of file shown on website after single upload
*   Resolve to gracefully fail when 'onedrive' process cannot get exclusive database lock
*   Resolve 'Key not found: fileSystemInfo' when then item is a remote item (OneDrive Personal)
*   Resolve skip_file config entry needs to be checked for any characters to escape
*   Resolve Microsoft Naming Convention not being followed correctly
*   Resolve Error when trying to upload a file with weird non printable characters present
*   Resolve Crash if file is locked by online editing (status code 423)
*   Resolve compilation issue with dmd-2.081.0
*   Resolve skip_file configuration doesn't handle spaces or specified directory paths
### Added
*   Implement Feature: Add a flag to detect when the sync-folder is missing
*   Implement Travis CI for code testing
### Changed
*   Update Makefile to use DESTDIR variables
*   Update OneDrive Business maximum path length from 256 to 400
*   Update OneDrive Business allowed characters for files and folders
*   Update sync_dir handling to use the absolute path for setting parameter to something other than ~/OneDrive via config file or command line
*   Update Fedora build instructions

## 1.1.2 - 2018-05-17
### Fixed
*   Fix 4xx errors including (412 pre-condition, 409 conflict)
*   Fix Key not found: lastModifiedDateTime (OneDrive API change)
*   Fix configuration directory not found when run via init.d
*   Fix skilion Issues #73, #121, #132, #224, #257, #294, #295, #297, #298, #300, #306, #315, #320, #329, #334, #337, #341
### Added
*   Add logging - log client activities to a file (/var/log/onedrive/%username%.onedrive.log or ~/onedrive.log)
*   Add https debugging as a flag
*   Add `--synchronize` to prevent from syncing when just blindly running the application
*   Add individual folder sync
*   Add sync from local directory first rather than download first then upload
*   Add upload long path check
*   Add upload only
*   Add check for max upload file size before attempting upload
*   Add systemd unit files for single & multi user configuration
*   Add init.d file for older init.d based services
*   Add Microsoft naming conventions and namespace validation for items that will be uploaded
*   Add remaining free space counter at client initialisation to avoid out of space upload issue
*   Add large file upload size check to align to OneDrive file size limitations
*   Add upload file size validation & retry if does not match
*   Add graceful handling of some fatal errors (OneDrive 5xx error handling)

## Unreleased - 2018-02-19
### Fixed
*   Crash when the delta link is expired
### Changed
*   Disabled buffering on stdout

## 1.1.1 - 2018-01-20
### Fixed
*   Wrong regex for parsing authentication uri

## 1.1.0 - 2018-01-19
### Added
*   Support for shared folders (OneDrive Personal only)
*   `--download` option to only download changes
*   `DC` variable in Makefile to chose the compiler
### Changed
*   Print logs on stdout instead of stderr
*   Improve log messages

## 1.0.1 - 2017-08-01
### Added
*   `--syncdir` option
### Changed
*   `--version` output simplified
*   Updated README
### Fixed
*   Fix crash caused by remotely deleted and recreated directories

## 1.0.0 - 2017-07-14
### Added
*   `--version` option


================================================
FILE: config
================================================
# Configuration for OneDrive Linux Client
# This file contains the list of supported configuration fields with their default values.
# All values need to be enclosed in quotes
# When changing a config option below, remove the '#' from the start of the config line
# For a more detailed explanation of all config options below see docs/application-config-options.md or the man page.

## This is the config option for application id that used to identify itself to Microsoft OneDrive. 
#application_id = "d50ca740-c83f-4d1b-b616-12c519384f0c"

## This is the config option to change the Microsoft Azure Authentication Endpoint that the client uses to conform with data and security requirements that requires data to reside within the geographic borders of that country.
#azure_ad_endpoint = ""

## This config option allows the locking of the client to a specific single tenant and will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common".
#azure_tenant_id = ""

## This config option allows the disabling of preserving local data by renaming the local file in the event of data conflict. If this is enabled, you will experience data loss on your local data as the local file will be over-written with data from OneDrive online. Use with care and caution.
#bypass_data_preservation = "false"

## This config option is useful to prevent application startup & ongoing use in 'Monitor Mode' if the configured 'sync_dir' is a separate disk that is being mounted by your system.
#check_nomount = "false"

## This config option is useful to prevent the sync of a *local* directory to Microsoft OneDrive. It will *not* check for this file online to prevent the download of directories to your local system.
#check_nosync = "false"

## This config option defines the number of children in a path that is locally removed which will be classified as a 'big data delete' to safeguard large data removals - which are typically accidental local delete events.
#classify_as_big_delete = "1000"

## This config option provides the capability to cleanup local files and folders if they are removed online.
#cleanup_local_files = "false"

## This configuration setting manages the TCP connection timeout duration in seconds for HTTPS connections to Microsoft OneDrive when using the curl library.
#connect_timeout = "10"

## This setting controls how the application handles the Microsoft SharePoint feature which modifies all PDF, MS Office & HTML files post upload, effectively breaking the integrity of your data online.
#create_new_file_version = "false"

## This setting controls the timeout duration, in seconds, for when data is not received on an active connection to Microsoft OneDrive over HTTPS.
#data_timeout = "60"

## This setting controls whether the curl library is configured to output additional data to assist with diagnosing HTTPS issues and problems.
#debug_https = "false"

## This setting controls whether 'inotify' events should be delayed or not.
#delay_inotify_processing = "false"

## This option determines whether the client will conduct integrity validation on files downloaded from Microsoft OneDrive.
#disable_download_validation = "false"

## This setting controls whether GUI notifications are sent from the client to your display manager session.
#disable_notifications = "false"

## This setting controls whether the application will set the permissions on files and directories using the values of 'sync_dir_permissions' and 'sync_file_permissions'.
#disable_permission_set = "false"

## This option determines whether the client will conduct integrity validation on files uploaded to Microsoft OneDrive.
#disable_upload_validation = "false"

## This option will include the running config of the application at application startup.
#display_running_config = "false"

## This option will display file transfer metrics when enabled.
#display_transfer_metrics = "false"

## This setting controls the libcurl DNS cache value.
#dns_timeout = "60"

## This setting forces the client to only download data from Microsoft OneDrive and replicate that data locally.
#download_only = "false"

## This setting controls the specific drive identifier the client will use when syncing with Microsoft OneDrive.
#drive_id = ""

## This setting controls the application capability to test your application configuration without actually performing any real activity.
#dry_run = "false"

## This setting controls the application logging all actions to a separate file.
#enable_logging = "false"

## This setting controls the file fragment size when uploading large files to Microsoft OneDrive. 
#file_fragment_size = "10"

## This setting controls the application HTTP protocol version, downgrading to HTTP/1.1 when enabled.
#force_http_11 = "false"

## This option, when enabled, forces the client to use a 'session' upload, which, when the 'file' is uploaded by the session, this includes the local timestamp of the file
#force_session_upload = "false"

## This setting controls the application IP protocol used when communicating with Microsoft OneDrive.
#ip_protocol_version = "0"

## This setting controls what the application considers the 'source of truth' for your data.
#local_first = "false"

## This setting controls the custom application log path when 'enable_logging' has been enabled.
#log_dir = ""

## This configuration option controls the number of seconds a cURL engine is considered stale and destroyed after last use.
#max_curl_idle = "120"

## This configuration option controls how often a full scan of your data is performed in monitor mode.
#monitor_fullscan_frequency = "12"

## This setting determines how often the sync loop runs in --monitor mode.
#monitor_interval = "300"

## This configuration option controls suppression of frequent monitor log messages.
#monitor_log_frequency = "12"

## This configuration option controls whether local deletes are replicated to OneDrive when using --upload-only.
#no_remote_delete = "false"

## This setting controls whether the client logs GUI notifications when file actions occur.
#notify_file_actions = "false"

## This configuration controls the maximum amount of time a file operation is allowed to take.
#operation_timeout = "3600"

## Permanently delete online items when removed locally. Bypasses OneDrive recycle bin.
#permanent_delete = "false"

## This setting limits the per-thread bandwidth used by the client.
#rate_limit = "0"

## This configuration option controls whether the client operates in read-only mode.
#read_only_auth_scope = "false"

## This configuration option allows you to specify the 'Recycle Bin' path for the application. This is only used if 'use_recycle_bin' is enabled.
#recycle_bin_path = "/path/to/desired/location/"

## This option removes the local file after a successful upload to OneDrive.
#remove_source_files = "false"

## This configuration controls whether a full resync is performed at application startup.
#resync = "false"

## This option approves use of --resync, useful in automated environments.
#resync_auth = "false"

## This option controls which directories are excluded from sync.
#skip_dir = ""

## When enabled, skip_dir matches must be strict, full path matches only.
#skip_dir_strict_match = "false"

## When enabled, skip dotfiles and dot folders from sync.
#skip_dotfiles = "false"

## This setting controls which files are skipped during sync.
#skip_file = "~*|.~*|*.tmp|*.swp|*.partial"

## Skip syncing files larger than this size in MB.
#skip_size = "0"

## Skip symbolic links during sync.
#skip_symlinks = "false"

## Reserve this much free disk space (in MB) to avoid disk full issues.
#space_reservation = "50"

## Sync OneDrive Business shared folders that are shortcuts in 'My Files'. These will be stored in a local folder called 'Files Shared With Me'.
#sync_business_shared_items = "false"

## Local directory to sync with OneDrive.
#sync_dir = "~/OneDrive"

## Permissions to apply to created local directories.
#sync_dir_permissions = "700"

## Permissions to apply to created local files.
#sync_file_permissions = "600"

## Sync all root files in sync_dir when using sync_list.
#sync_root_files = "false"

## Number of threads to use for upload/download.
#threads = "8"

## File transfer ordering between client and OneDrive.
#transfer_order = "default"

## Only upload changes to OneDrive, do not download from cloud.
#upload_only = "false"

## Authenticate using the Microsoft OAuth2 Device Authorisation Flow
#use_device_auth = "true"

## Single Sign-On (SSO) via Intune using the Microsoft Identity Device Broker
#use_intune_sso = "true"

## This configuration option controls the application function to move online deleted files to a 'Recycle Bin' on your system.
#use_recycle_bin = "false"

## Custom User-Agent string for requests to OneDrive. If you change this, you will get throttled by the Microsoft Graph API. Change with caution.
#user_agent = "ISV|abraunegg|OneDrive Client for Linux/vX.Y.Z-A-bcdefghi"

## Enable webhook-based remote update notifications in monitor mode.
#webhook_enabled = "false"

## Time in seconds before webhook subscription expires.
#webhook_expiration_interval = "600"

## IP address to listen on for incoming webhook updates.
#webhook_listening_host = "0.0.0.0"

## TCP port to listen on for incoming webhook updates.
#webhook_listening_port = "8888"

## Public webhook URL for Microsoft to send notifications to.
#webhook_public_url = ""

## Frequency (in seconds) to renew webhook subscription.
#webhook_renewal_interval = "300"

## Frequency (in seconds) to retry a failed webhook subscription renewal.
#webhook_retry_interval = "60"

## Write xattr metadata fields (createdBy, lastModifiedBy) to synced files.
#write_xattr_data = "false"


================================================
FILE: configure
================================================
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for onedrive v2.5.10.
#
# Report bugs to <https://github.com/abraunegg/onedrive>.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else
  case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi


as_nl='
'
export as_nl
# Printing a long string crashes Solaris 7 /usr/bin/printf.
as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
# Prefer a ksh shell builtin over an external printf program on Solaris,
# but without wasting forks for bash or zsh.
if test -z "$BASH_VERSION$ZSH_VERSION" \
    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
  as_echo='print -r --'
  as_echo_n='print -rn --'
elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
  as_echo='printf %s\n'
  as_echo_n='printf %s'
else
  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
    as_echo_n='/usr/ucb/echo -n'
  else
    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
    as_echo_n_body='eval
      arg=$1;
      case $arg in #(
      *"$as_nl"*)
	expr "X$arg" : "X\\(.*\\)$as_nl";
	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
      esac;
      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
    '
    export as_echo_n_body
    as_echo_n='sh -c $as_echo_n_body as_echo'
  fi
  export as_echo_body
  as_echo='sh -c $as_echo_body as_echo'
fi

# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
  PATH_SEPARATOR=:
  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
      PATH_SEPARATOR=';'
  }
fi


# IFS
# We need space, tab and new line, in precisely that order.  Quoting is
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
IFS=" ""	$as_nl"

# Find who we are.  Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
  *[\\/]* ) as_myself=$0 ;;
  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  test -z "$as_dir" && as_dir=.
    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  done
IFS=$as_save_IFS

     ;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
  as_myself=$0
fi
if test ! -f "$as_myself"; then
  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi

# Unset variables that we do not need and which cause bugs (e.g. in
# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
# suppresses any "Segmentation fault" message there.  '((' could
# trigger a bug in pdksh 5.2.14.
for as_var in BASH_ENV ENV MAIL MAILPATH
do eval test x\${$as_var+set} = xset \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '

# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

# Use a proper internal environment variable to ensure we don't fall
  # into an infinite loop, continuously re-executing ourselves.
  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
    _as_can_reexec=no; export _as_can_reexec;
    # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
  *v*x* | *x*v* ) as_opts=-vx ;;
  *v* ) as_opts=-v ;;
  *x* ) as_opts=-x ;;
  * ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
as_fn_exit 255
  fi
  # We don't want this to propagate to other subprocesses.
          { _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '\${1+\"\$@\"}'='\"\$@\"'
  setopt NO_GLOB_SUBST
else
  case \`(set -o) 2>/dev/null\` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi
"
  as_required="as_fn_return () { (exit \$1); }
as_fn_success () { as_fn_return 0; }
as_fn_failure () { as_fn_return 1; }
as_fn_ret_success () { return 0; }
as_fn_ret_failure () { return 1; }

exitcode=0
as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :

else
  exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
test -x / || exit 1"
  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
  if (eval "$as_required") 2>/dev/null; then :
  as_have_required=yes
else
  as_have_required=no
fi
  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :

else
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
  IFS=$as_save_IFS
  test -z "$as_dir" && as_dir=.
  as_found=:
  case $as_dir in #(
	 /*)
	   for as_base in sh bash ksh sh5; do
	     # Try only shells that exist, to save several forks.
	     as_shell=$as_dir/$as_base
	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
  CONFIG_SHELL=$as_shell as_have_required=yes
		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
  break 2
fi
fi
	   done;;
       esac
  as_found=false
done
$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
  CONFIG_SHELL=$SHELL as_have_required=yes
fi; }
IFS=$as_save_IFS


      if test "x$CONFIG_SHELL" != x; then :
  export CONFIG_SHELL
             # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
  *v*x* | *x*v* ) as_opts=-vx ;;
  *v* ) as_opts=-v ;;
  *x* ) as_opts=-x ;;
  * ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi

    if test x$as_have_required = xno; then :
  $as_echo "$0: This script requires a shell more modern than all"
  $as_echo "$0: the shells that I found on your system."
  if test x${ZSH_VERSION+set} = xset ; then
    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
  else
    $as_echo "$0: Please tell bug-autoconf@gnu.org and
$0: https://github.com/abraunegg/onedrive about your
$0: system, including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
  fi
  exit 1
fi
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
# Unset more variables known to interfere with behavior of common tools.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS

## --------------------- ##
## M4sh Shell Functions. ##
## --------------------- ##
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
  { eval $1=; unset $1;}
}
as_unset=as_fn_unset

# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
  return $1
} # as_fn_set_status

# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
  set +e
  as_fn_set_status $1
  exit $1
} # as_fn_exit

# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{

  case $as_dir in #(
  -*) as_dir=./$as_dir;;
  esac
  test -d "$as_dir" || eval $as_mkdir_p || {
    as_dirs=
    while :; do
      case $as_dir in #(
      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
      *) as_qdir=$as_dir;;
      esac
      as_dirs="'$as_qdir' $as_dirs"
      as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_dir" : 'X\(//\)[^/]' \| \
	 X"$as_dir" : 'X\(//\)$' \| \
	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      test -d "$as_dir" && break
    done
    test -z "$as_dirs" || eval "mkdir $as_dirs"
  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"


} # as_fn_mkdir_p

# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
  test -f "$1" && test -x "$1"
} # as_fn_executable_p
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
  eval 'as_fn_append ()
  {
    eval $1+=\$2
  }'
else
  as_fn_append ()
  {
    eval $1=\$$1\$2
  }
fi # as_fn_append

# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
  eval 'as_fn_arith ()
  {
    as_val=$(( $* ))
  }'
else
  as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  }
fi # as_fn_arith


# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
  as_status=$1; test $as_status -eq 0 && as_status=1
  if test "$4"; then
    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
  fi
  $as_echo "$as_me: error: $2" >&2
  as_fn_exit $as_status
} # as_fn_error

if expr a : '\(a\)' >/dev/null 2>&1 &&
   test "X`expr 00001 : '.*\(...\)'`" = X001; then
  as_expr=expr
else
  as_expr=false
fi

if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
  as_basename=basename
else
  as_basename=false
fi

if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  as_dirname=dirname
else
  as_dirname=false
fi

as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
	 X"$0" : 'X\(//\)$' \| \
	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
    sed '/^.*\/\([^/][^/]*\)\/*$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`

# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits


  as_lineno_1=$LINENO as_lineno_1a=$LINENO
  as_lineno_2=$LINENO as_lineno_2a=$LINENO
  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
  sed -n '
    p
    /[$]LINENO/=
  ' <$as_myself |
    sed '
      s/[$]LINENO.*/&-/
      t lineno
      b
      :lineno
      N
      :loop
      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
      t loop
      s/-\n.*//
    ' >$as_me.lineno &&
  chmod +x "$as_me.lineno" ||
    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }

  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
  # already done that, so ensure we don't try to do so again and fall
  # in an infinite loop.  This has already happened in practice.
  _as_can_reexec=no; export _as_can_reexec
  # Don't try to exec as it changes $[0], causing all sort of problems
  # (the dirname of $[0] is not the place where we might find the
  # original and so on.  Autoconf is especially sensitive to this).
  . "./$as_me.lineno"
  # Exit status is that of the last command.
  exit
}

ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
  case `echo 'xy\c'` in
  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  xy)  ECHO_C='\c';;
  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
       ECHO_T='	';;
  esac;;
*)
  ECHO_N='-n';;
esac

rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
  rm -f conf$$.dir/conf$$.file
else
  rm -f conf$$.dir
  mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
  if ln -s conf$$.file conf$$ 2>/dev/null; then
    as_ln_s='ln -s'
    # ... but there are two gotchas:
    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    # In both cases, we have to default to `cp -pR'.
    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
      as_ln_s='cp -pR'
  elif ln conf$$.file conf$$ 2>/dev/null; then
    as_ln_s=ln
  else
    as_ln_s='cp -pR'
  fi
else
  as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null

if mkdir -p . 2>/dev/null; then
  as_mkdir_p='mkdir -p "$as_dir"'
else
  test -d ./-p && rmdir ./-p
  as_mkdir_p=false
fi

as_test_x='test -x'
as_executable_p=as_fn_executable_p

# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"

# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"


test -n "$DJDIR" || exec 7<&0 </dev/null
exec 6>&1

# Name of the host.
# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`

#
# Initializations.
#
ac_default_prefix=/usr/local
ac_clean_files=
ac_config_libobj_dir=.
LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=

# Identity of this package.
PACKAGE_NAME='onedrive'
PACKAGE_TARNAME='onedrive'
PACKAGE_VERSION='v2.5.10'
PACKAGE_STRING='onedrive v2.5.10'
PACKAGE_BUGREPORT='https://github.com/abraunegg/onedrive'
PACKAGE_URL=''

ac_unique_file="src/main.d"
ac_subst_vars='LTLIBOBJS
LIBOBJS
DEBUG
FISH_COMPLETION_DIR
ZSH_COMPLETION_DIR
BASH_COMPLETION_DIR
bashcompdir
COMPLETIONS
dynamic_linker_LIBS
bsd_inotify_LIBS
NOTIFICATIONS
notify_LIBS
notify_CFLAGS
HAVE_SYSTEMD
systemduserunitdir
systemdsystemunitdir
enable_dbus
dbus_LIBS
dbus_CFLAGS
sqlite_LIBS
sqlite_CFLAGS
curl_LIBS
curl_CFLAGS
WERROR_DCFLAG
OUTPUT_DCFLAG
LINKER_DCFLAG
VERSION_DCFLAG
RELEASE_DCFLAGS
DEBUG_DCFLAGS
PACKAGE_DATE
PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH
PKG_CONFIG
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
DCFLAGS
DC
target_alias
host_alias
build_alias
LIBS
ECHO_T
ECHO_N
ECHO_C
DEFS
mandir
localedir
libdir
psdir
pdfdir
dvidir
htmldir
infodir
docdir
oldincludedir
includedir
localstatedir
sharedstatedir
sysconfdir
datadir
datarootdir
libexecdir
sbindir
bindir
program_transform_name
prefix
exec_prefix
PACKAGE_URL
PACKAGE_BUGREPORT
PACKAGE_STRING
PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_version_check
with_systemdsystemunitdir
with_systemduserunitdir
enable_notifications
enable_completions
with_bash_completion_dir
with_zsh_completion_dir
with_fish_completion_dir
enable_debug
'
      ac_precious_vars='build_alias
host_alias
target_alias
DC
DCFLAGS
PKG_CONFIG
PKG_CONFIG_PATH
PKG_CONFIG_LIBDIR
curl_CFLAGS
curl_LIBS
sqlite_CFLAGS
sqlite_LIBS
dbus_CFLAGS
dbus_LIBS
notify_CFLAGS
notify_LIBS
bashcompdir'


# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
ac_unrecognized_opts=
ac_unrecognized_sep=
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
exec_prefix=NONE
no_create=
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
verbose=
x_includes=NONE
x_libraries=NONE

# Installation directory options.
# These are left unexpanded so users can "make install exec_prefix=/foo"
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datarootdir='${prefix}/share'
datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
infodir='${datarootdir}/info'
htmldir='${docdir}'
dvidir='${docdir}'
pdfdir='${docdir}'
psdir='${docdir}'
libdir='${exec_prefix}/lib'
localedir='${datarootdir}/locale'
mandir='${datarootdir}/man'

ac_prev=
ac_dashdash=
for ac_option
do
  # If the previous option needs an argument, assign it.
  if test -n "$ac_prev"; then
    eval $ac_prev=\$ac_option
    ac_prev=
    continue
  fi

  case $ac_option in
  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
  *=)   ac_optarg= ;;
  *)    ac_optarg=yes ;;
  esac

  # Accept the important Cygnus configure options, so we can diagnose typos.

  case $ac_dashdash$ac_option in
  --)
    ac_dashdash=yes ;;

  -bindir | --bindir | --bindi | --bind | --bin | --bi)
    ac_prev=bindir ;;
  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
    bindir=$ac_optarg ;;

  -build | --build | --buil | --bui | --bu)
    ac_prev=build_alias ;;
  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
    build_alias=$ac_optarg ;;

  -cache-file | --cache-file | --cache-fil | --cache-fi \
  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
    ac_prev=cache_file ;;
  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
    cache_file=$ac_optarg ;;

  --config-cache | -C)
    cache_file=config.cache ;;

  -datadir | --datadir | --datadi | --datad)
    ac_prev=datadir ;;
  -datadir=* | --datadir=* | --datadi=* | --datad=*)
    datadir=$ac_optarg ;;

  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
  | --dataroo | --dataro | --datar)
    ac_prev=datarootdir ;;
  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
    datarootdir=$ac_optarg ;;

  -disable-* | --disable-*)
    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid feature name: $ac_useropt"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"enable_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval enable_$ac_useropt=no ;;

  -docdir | --docdir | --docdi | --doc | --do)
    ac_prev=docdir ;;
  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
    docdir=$ac_optarg ;;

  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
    ac_prev=dvidir ;;
  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
    dvidir=$ac_optarg ;;

  -enable-* | --enable-*)
    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid feature name: $ac_useropt"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"enable_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval enable_$ac_useropt=\$ac_optarg ;;

  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  | --exec | --exe | --ex)
    ac_prev=exec_prefix ;;
  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
  | --exec=* | --exe=* | --ex=*)
    exec_prefix=$ac_optarg ;;

  -gas | --gas | --ga | --g)
    # Obsolete; use --with-gas.
    with_gas=yes ;;

  -help | --help | --hel | --he | -h)
    ac_init_help=long ;;
  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
    ac_init_help=recursive ;;
  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
    ac_init_help=short ;;

  -host | --host | --hos | --ho)
    ac_prev=host_alias ;;
  -host=* | --host=* | --hos=* | --ho=*)
    host_alias=$ac_optarg ;;

  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
    ac_prev=htmldir ;;
  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
  | --ht=*)
    htmldir=$ac_optarg ;;

  -includedir | --includedir | --includedi | --included | --include \
  | --includ | --inclu | --incl | --inc)
    ac_prev=includedir ;;
  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
  | --includ=* | --inclu=* | --incl=* | --inc=*)
    includedir=$ac_optarg ;;

  -infodir | --infodir | --infodi | --infod | --info | --inf)
    ac_prev=infodir ;;
  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
    infodir=$ac_optarg ;;

  -libdir | --libdir | --libdi | --libd)
    ac_prev=libdir ;;
  -libdir=* | --libdir=* | --libdi=* | --libd=*)
    libdir=$ac_optarg ;;

  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
  | --libexe | --libex | --libe)
    ac_prev=libexecdir ;;
  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
  | --libexe=* | --libex=* | --libe=*)
    libexecdir=$ac_optarg ;;

  -localedir | --localedir | --localedi | --localed | --locale)
    ac_prev=localedir ;;
  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
    localedir=$ac_optarg ;;

  -localstatedir | --localstatedir | --localstatedi | --localstated \
  | --localstate | --localstat | --localsta | --localst | --locals)
    ac_prev=localstatedir ;;
  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
    localstatedir=$ac_optarg ;;

  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
    ac_prev=mandir ;;
  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
    mandir=$ac_optarg ;;

  -nfp | --nfp | --nf)
    # Obsolete; use --without-fp.
    with_fp=no ;;

  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  | --no-cr | --no-c | -n)
    no_create=yes ;;

  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
    no_recursion=yes ;;

  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
  | --oldin | --oldi | --old | --ol | --o)
    ac_prev=oldincludedir ;;
  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
    oldincludedir=$ac_optarg ;;

  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
    ac_prev=prefix ;;
  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
    prefix=$ac_optarg ;;

  -program-prefix | --program-prefix | --program-prefi | --program-pref \
  | --program-pre | --program-pr | --program-p)
    ac_prev=program_prefix ;;
  -program-prefix=* | --program-prefix=* | --program-prefi=* \
  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
    program_prefix=$ac_optarg ;;

  -program-suffix | --program-suffix | --program-suffi | --program-suff \
  | --program-suf | --program-su | --program-s)
    ac_prev=program_suffix ;;
  -program-suffix=* | --program-suffix=* | --program-suffi=* \
  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
    program_suffix=$ac_optarg ;;

  -program-transform-name | --program-transform-name \
  | --program-transform-nam | --program-transform-na \
  | --program-transform-n | --program-transform- \
  | --program-transform | --program-transfor \
  | --program-transfo | --program-transf \
  | --program-trans | --program-tran \
  | --progr-tra | --program-tr | --program-t)
    ac_prev=program_transform_name ;;
  -program-transform-name=* | --program-transform-name=* \
  | --program-transform-nam=* | --program-transform-na=* \
  | --program-transform-n=* | --program-transform-=* \
  | --program-transform=* | --program-transfor=* \
  | --program-transfo=* | --program-transf=* \
  | --program-trans=* | --program-tran=* \
  | --progr-tra=* | --program-tr=* | --program-t=*)
    program_transform_name=$ac_optarg ;;

  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
    ac_prev=pdfdir ;;
  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
    pdfdir=$ac_optarg ;;

  -psdir | --psdir | --psdi | --psd | --ps)
    ac_prev=psdir ;;
  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
    psdir=$ac_optarg ;;

  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  | -silent | --silent | --silen | --sile | --sil)
    silent=yes ;;

  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
    ac_prev=sbindir ;;
  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
  | --sbi=* | --sb=*)
    sbindir=$ac_optarg ;;

  -sharedstatedir | --sharedstatedir | --sharedstatedi \
  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  | --sharedst | --shareds | --shared | --share | --shar \
  | --sha | --sh)
    ac_prev=sharedstatedir ;;
  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
  | --sha=* | --sh=*)
    sharedstatedir=$ac_optarg ;;

  -site | --site | --sit)
    ac_prev=site ;;
  -site=* | --site=* | --sit=*)
    site=$ac_optarg ;;

  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
    ac_prev=srcdir ;;
  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
    srcdir=$ac_optarg ;;

  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
  | --syscon | --sysco | --sysc | --sys | --sy)
    ac_prev=sysconfdir ;;
  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
    sysconfdir=$ac_optarg ;;

  -target | --target | --targe | --targ | --tar | --ta | --t)
    ac_prev=target_alias ;;
  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
    target_alias=$ac_optarg ;;

  -v | -verbose | --verbose | --verbos | --verbo | --verb)
    verbose=yes ;;

  -version | --version | --versio | --versi | --vers | -V)
    ac_init_version=: ;;

  -with-* | --with-*)
    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid package name: $ac_useropt"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"with_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval with_$ac_useropt=\$ac_optarg ;;

  -without-* | --without-*)
    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid package name: $ac_useropt"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"with_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval with_$ac_useropt=no ;;

  --x)
    # Obsolete; use --with-x.
    with_x=yes ;;

  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
  | --x-incl | --x-inc | --x-in | --x-i)
    ac_prev=x_includes ;;
  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
    x_includes=$ac_optarg ;;

  -x-libraries | --x-libraries | --x-librarie | --x-librari \
  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
    ac_prev=x_libraries ;;
  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
    x_libraries=$ac_optarg ;;

  -*) as_fn_error $? "unrecognized option: \`$ac_option'
Try \`$0 --help' for more information"
    ;;

  *=*)
    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
    # Reject names that are not valid shell variable names.
    case $ac_envvar in #(
      '' | [0-9]* | *[!_$as_cr_alnum]* )
      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
    esac
    eval $ac_envvar=\$ac_optarg
    export $ac_envvar ;;

  *)
    # FIXME: should be removed in autoconf 3.0.
    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
    ;;

  esac
done

if test -n "$ac_prev"; then
  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  as_fn_error $? "missing argument to $ac_option"
fi

if test -n "$ac_unrecognized_opts"; then
  case $enable_option_checking in
    no) ;;
    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
  esac
fi

# Check all directory arguments for consistency.
for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
		datadir sysconfdir sharedstatedir localstatedir includedir \
		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
		libdir localedir mandir
do
  eval ac_val=\$$ac_var
  # Remove trailing slashes.
  case $ac_val in
    */ )
      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
      eval $ac_var=\$ac_val;;
  esac
  # Be sure to have absolute directory names.
  case $ac_val in
    [\\/$]* | ?:[\\/]* )  continue;;
    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
  esac
  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done

# There might be people who depend on the old broken behavior: `$host'
# used to hold the argument of --host etc.
# FIXME: To remove some day.
build=$build_alias
host=$host_alias
target=$target_alias

# FIXME: To remove some day.
if test "x$host_alias" != x; then
  if test "x$build_alias" = x; then
    cross_compiling=maybe
  elif test "x$build_alias" != "x$host_alias"; then
    cross_compiling=yes
  fi
fi

ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-

test "$silent" = yes && exec 6>/dev/null


ac_pwd=`pwd` && test -n "$ac_pwd" &&
ac_ls_di=`ls -di .` &&
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
  as_fn_error $? "working directory cannot be determined"
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
  as_fn_error $? "pwd does not report name of working directory"


# Find the source files, if location was not specified.
if test -z "$srcdir"; then
  ac_srcdir_defaulted=yes
  # Try the directory containing this script, then the parent directory.
  ac_confdir=`$as_dirname -- "$as_myself" ||
$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_myself" : 'X\(//\)[^/]' \| \
	 X"$as_myself" : 'X\(//\)$' \| \
	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_myself" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
  srcdir=$ac_confdir
  if test ! -r "$srcdir/$ac_unique_file"; then
    srcdir=..
  fi
else
  ac_srcdir_defaulted=no
fi
if test ! -r "$srcdir/$ac_unique_file"; then
  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
fi
ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
ac_abs_confdir=`(
	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
	pwd)`
# When building in place, set srcdir=.
if test "$ac_abs_confdir" = "$ac_pwd"; then
  srcdir=.
fi
# Remove unnecessary trailing slashes from srcdir.
# Double slashes in file names in object file debugging info
# mess up M-x gdb in Emacs.
case $srcdir in
*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
esac
for ac_var in $ac_precious_vars; do
  eval ac_env_${ac_var}_set=\${${ac_var}+set}
  eval ac_env_${ac_var}_value=\$${ac_var}
  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
  eval ac_cv_env_${ac_var}_value=\$${ac_var}
done

#
# Report the --help message.
#
if test "$ac_init_help" = "long"; then
  # Omit some internal or obsolete options to make the list less imposing.
  # This message is too long to be a string in the A/UX 3.1 sh.
  cat <<_ACEOF
\`configure' configures onedrive v2.5.10 to adapt to many kinds of systems.

Usage: $0 [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print \`checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for \`--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or \`..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [$ac_default_prefix]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
an installation prefix other than \`$ac_default_prefix' using \`--prefix',
for instance \`--prefix=\$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/onedrive]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]
_ACEOF

  cat <<\_ACEOF
_ACEOF
fi

if test -n "$ac_init_help"; then
  case $ac_init_help in
     short | recursive ) echo "Configuration of onedrive v2.5.10:";;
   esac
  cat <<\_ACEOF

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-version-check Disable checks of compiler version during configure
                          time
  --enable-notifications  Enable desktop notifications via libnotify
  --enable-completions    Install shell completions for bash, zsh, and fish
  --enable-debug          Pass debug option to the compiler

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-systemdsystemunitdir=DIR
                          Directory for systemd system service files
  --with-systemduserunitdir=DIR
                          Directory for systemd user service files
  --with-bash-completion-dir=DIR
                          Directory for bash completion files
  --with-zsh-completion-dir=DIR
                          Directory for zsh completion files
  --with-fish-completion-dir=DIR
                          Directory for fish completion files

Some influential environment variables:
  DC          D compiler executable
  DCFLAGS     flags for D compiler
  PKG_CONFIG  path to pkg-config utility
  PKG_CONFIG_PATH
              directories to add to pkg-config's search path
  PKG_CONFIG_LIBDIR
              path overriding pkg-config's built-in search path
  curl_CFLAGS C compiler flags for curl, overriding pkg-config
  curl_LIBS   linker flags for curl, overriding pkg-config
  sqlite_CFLAGS
              C compiler flags for sqlite, overriding pkg-config
  sqlite_LIBS linker flags for sqlite, overriding pkg-config
  dbus_CFLAGS C compiler flags for dbus, overriding pkg-config
  dbus_LIBS   linker flags for dbus, overriding pkg-config
  notify_CFLAGS
              C compiler flags for notify, overriding pkg-config
  notify_LIBS linker flags for notify, overriding pkg-config
  bashcompdir value of completionsdir for bash-completion, overriding
              pkg-config

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to <https://github.com/abraunegg/onedrive>.
_ACEOF
ac_status=$?
fi

if test "$ac_init_help" = "recursive"; then
  # If there are subdirs, report their specific --help.
  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
    test -d "$ac_dir" ||
      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
      continue
    ac_builddir=.

case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
  # A ".." for each directory in $ac_dir_suffix.
  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
  case $ac_top_builddir_sub in
  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
  esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix

case $srcdir in
  .)  # We are building in place.
    ac_srcdir=.
    ac_top_srcdir=$ac_top_builddir_sub
    ac_abs_top_srcdir=$ac_pwd ;;
  [\\/]* | ?:[\\/]* )  # Absolute name.
    ac_srcdir=$srcdir$ac_dir_suffix;
    ac_top_srcdir=$srcdir
    ac_abs_top_srcdir=$srcdir ;;
  *) # Relative name.
    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
    ac_top_srcdir=$ac_top_build_prefix$srcdir
    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix

    cd "$ac_dir" || { ac_status=$?; continue; }
    # Check for guested configure.
    if test -f "$ac_srcdir/configure.gnu"; then
      echo &&
      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
    elif test -f "$ac_srcdir/configure"; then
      echo &&
      $SHELL "$ac_srcdir/configure" --help=recursive
    else
      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
    fi || ac_status=$?
    cd "$ac_pwd" || { ac_status=$?; break; }
  done
fi

test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
  cat <<\_ACEOF
onedrive configure v2.5.10
generated by GNU Autoconf 2.69

Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
  exit
fi

## ------------------------ ##
## Autoconf initialization. ##
## ------------------------ ##
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by onedrive $as_me v2.5.10, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  $ $0 $@

_ACEOF
exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
## Platform. ##
## --------- ##

hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`

/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`

/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`

_ASUNAME

as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  test -z "$as_dir" && as_dir=.
    $as_echo "PATH: $as_dir"
  done
IFS=$as_save_IFS

} >&5

cat >&5 <<_ACEOF


## ----------- ##
## Core tests. ##
## ----------- ##

_ACEOF


# Keep a trace of the command line.
# Strip out --no-create and --no-recursion so they do not pile up.
# Strip out --silent because we don't want to record it for future runs.
# Also quote any args containing shell meta-characters.
# Make two passes to allow for proper duplicate-argument suppression.
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
ac_must_keep_next=false
for ac_pass in 1 2
do
  for ac_arg
  do
    case $ac_arg in
    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
    | -silent | --silent | --silen | --sile | --sil)
      continue ;;
    *\'*)
      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
    esac
    case $ac_pass in
    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
    2)
      as_fn_append ac_configure_args1 " '$ac_arg'"
      if test $ac_must_keep_next = true; then
	ac_must_keep_next=false # Got value, back to normal.
      else
	case $ac_arg in
	  *=* | --config-cache | -C | -disable-* | --disable-* \
	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
	  | -with-* | --with-* | -without-* | --without-* | --x)
	    case "$ac_configure_args0 " in
	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
	    esac
	    ;;
	  -* ) ac_must_keep_next=true ;;
	esac
      fi
      as_fn_append ac_configure_args " '$ac_arg'"
      ;;
    esac
  done
done
{ ac_configure_args0=; unset ac_configure_args0;}
{ ac_configure_args1=; unset ac_configure_args1;}

# When interrupted or exit'd, cleanup temporary files, and complete
# config.log.  We remove comments because anyway the quotes in there
# would cause problems or look ugly.
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
  # Save into config.log some information that might help in debugging.
  {
    echo

    $as_echo "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
    echo
    # The following way of writing the cache mishandles newlines in values,
(
  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
    eval ac_val=\$$ac_var
    case $ac_val in #(
    *${as_nl}*)
      case $ac_var in #(
      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      esac
      case $ac_var in #(
      _ | IFS | as_nl) ;; #(
      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
      *) { eval $ac_var=; unset $ac_var;} ;;
      esac ;;
    esac
  done
  (set) 2>&1 |
    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
    *${as_nl}ac_space=\ *)
      sed -n \
	"s/'\''/'\''\\\\'\'''\''/g;
	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
      ;; #(
    *)
      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
      ;;
    esac |
    sort
)
    echo

    $as_echo "## ----------------- ##
## Output variables. ##
## ----------------- ##"
    echo
    for ac_var in $ac_subst_vars
    do
      eval ac_val=\$$ac_var
      case $ac_val in
      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
      esac
      $as_echo "$ac_var='\''$ac_val'\''"
    done | sort
    echo

    if test -n "$ac_subst_files"; then
      $as_echo "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
      echo
      for ac_var in $ac_subst_files
      do
	eval ac_val=\$$ac_var
	case $ac_val in
	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
	esac
	$as_echo "$ac_var='\''$ac_val'\''"
      done | sort
      echo
    fi

    if test -s confdefs.h; then
      $as_echo "## ----------- ##
## confdefs.h. ##
## ----------- ##"
      echo
      cat confdefs.h
      echo
    fi
    test "$ac_signal" != 0 &&
      $as_echo "$as_me: caught signal $ac_signal"
    $as_echo "$as_me: exit $exit_status"
  } >&5
  rm -f core *.core core.conftest.* &&
    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
    exit $exit_status
' 0
for ac_signal in 1 2 13 15; do
  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
done
ac_signal=0

# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h

$as_echo "/* confdefs.h */" > confdefs.h

# Predefined preprocessor variables.

cat >>confdefs.h <<_ACEOF
#define PACKAGE_NAME "$PACKAGE_NAME"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define PACKAGE_VERSION "$PACKAGE_VERSION"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define PACKAGE_STRING "$PACKAGE_STRING"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
_ACEOF

cat >>confdefs.h <<_ACEOF
#define PACKAGE_URL "$PACKAGE_URL"
_ACEOF


# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
ac_site_file1=NONE
ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
  # We do not want a PATH search for config.site.
  case $CONFIG_SITE in #((
    -*)  ac_site_file1=./$CONFIG_SITE;;
    */*) ac_site_file1=$CONFIG_SITE;;
    *)   ac_site_file1=./$CONFIG_SITE;;
  esac
elif test "x$prefix" != xNONE; then
  ac_site_file1=$prefix/share/config.site
  ac_site_file2=$prefix/etc/config.site
else
  ac_site_file1=$ac_default_prefix/share/config.site
  ac_site_file2=$ac_default_prefix/etc/config.site
fi
for ac_site_file in "$ac_site_file1" "$ac_site_file2"
do
  test "x$ac_site_file" = xNONE && continue
  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
$as_echo "$as_me: loading site script $ac_site_file" >&6;}
    sed 's/^/| /' "$ac_site_file" >&5
    . "$ac_site_file" \
      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
  fi
done

if test -r "$cache_file"; then
  # Some versions of bash will fail to source /dev/null (special files
  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
$as_echo "$as_me: loading cache $cache_file" >&6;}
    case $cache_file in
      [\\/]* | ?:[\\/]* ) . "$cache_file";;
      *)                      . "./$cache_file";;
    esac
  fi
else
  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache 
Download .txt
gitextract_uo92plxx/

├── LICENSE
├── Makefile.in
├── aclocal.m4
├── changelog.md
├── config
├── configure
├── configure.ac
├── contrib/
│   ├── completions/
│   │   ├── complete.bash
│   │   ├── complete.fish
│   │   └── complete.zsh
│   ├── docker/
│   │   ├── Dockerfile
│   │   ├── Dockerfile-alpine
│   │   ├── Dockerfile-debian
│   │   ├── entrypoint.sh
│   │   └── hooks/
│   │       └── post_push
│   ├── init.d/
│   │   ├── onedrive.init
│   │   └── onedrive_service.sh
│   ├── logrotate/
│   │   └── onedrive.logrotate
│   ├── pacman/
│   │   └── PKGBUILD.in
│   ├── spec/
│   │   └── onedrive.spec.in
│   └── systemd/
│       ├── onedrive.service.in
│       └── onedrive@.service.in
├── docs/
│   ├── advanced-usage.md
│   ├── application-config-options.md
│   ├── application-security.md
│   ├── build-rpm-howto.md
│   ├── business-shared-items.md
│   ├── client-architecture.md
│   ├── contributing.md
│   ├── docker.md
│   ├── install.md
│   ├── known-issues.md
│   ├── national-cloud-deployments.md
│   ├── podman.md
│   ├── privacy-policy.md
│   ├── puml/
│   │   ├── applyPotentiallyChangedItem.puml
│   │   ├── applyPotentiallyNewLocalItem.puml
│   │   ├── client_side_filtering_processing_order.puml
│   │   ├── client_side_filtering_rules.puml
│   │   ├── client_use_of_libcurl.puml
│   │   ├── code_functional_component_relationships.puml
│   │   ├── conflict_handling_default.puml
│   │   ├── conflict_handling_default_resync.puml
│   │   ├── conflict_handling_local-first_default.puml
│   │   ├── conflict_handling_local-first_resync.puml
│   │   ├── database_schema.puml
│   │   ├── default_sync_flow.puml
│   │   ├── downloadFile.puml
│   │   ├── high_level_operational_process.puml
│   │   ├── is_item_in_sync.puml
│   │   ├── local_first_sync_process.puml
│   │   ├── main_activity_flows.puml
│   │   ├── onedrive_linux_authentication.puml
│   │   ├── onedrive_windows_ad_authentication.puml
│   │   ├── onedrive_windows_authentication.puml
│   │   ├── uploadFile.puml
│   │   ├── uploadModifiedFile.puml
│   │   └── webhooks.puml
│   ├── server-side-filtering-limitations.md
│   ├── sharepoint-libraries.md
│   ├── terms-of-service.md
│   ├── ubuntu-package-install.md
│   ├── usage.md
│   └── webhooks.md
├── install-sh
├── onedrive.1.in
├── readme.md
├── src/
│   ├── arsd/
│   │   ├── README.md
│   │   └── cgi.d
│   ├── clientSideFiltering.d
│   ├── config.d
│   ├── curlEngine.d
│   ├── curlWebsockets.d
│   ├── intune.d
│   ├── itemdb.d
│   ├── log.d
│   ├── main.d
│   ├── monitor.d
│   ├── notifications/
│   │   ├── README
│   │   ├── dnotify.d
│   │   └── notify.d
│   ├── onedrive.d
│   ├── qxor.d
│   ├── socketio.d
│   ├── sqlite.d
│   ├── sync.d
│   ├── util.d
│   ├── webhook.d
│   └── xattr.d
└── tests/
    ├── bad-file-name.tar.xz
    └── makefiles.sh
Condensed preview — 91 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,896K chars).
[
  {
    "path": "LICENSE",
    "chars": 35149,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "Makefile.in",
    "chars": 6749,
    "preview": "package = @PACKAGE_NAME@\nversion = @PACKAGE_VERSION@\nprefix = @prefix@\n# we don't use @exec_prefix@ because it usually c"
  },
  {
    "path": "aclocal.m4",
    "chars": 10910,
    "preview": "# generated automatically by aclocal 1.16.1 -*- Autoconf -*-\n\n# Copyright (C) 1996-2018 Free Software Foundation, Inc.\n\n"
  },
  {
    "path": "changelog.md",
    "chars": 84590,
    "preview": "# Changelog\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to "
  },
  {
    "path": "config",
    "chars": 9797,
    "preview": "# Configuration for OneDrive Linux Client\n# This file contains the list of supported configuration fields with their def"
  },
  {
    "path": "configure",
    "chars": 116655,
    "preview": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.69 for oned"
  },
  {
    "path": "configure.ac",
    "chars": 12225,
    "preview": "dnl configure.ac for OneDrive Linux Client\ndnl Copyright 2019 Norbert Preining\ndnl Licensed GPL v3 or later\n\ndnl How to "
  },
  {
    "path": "contrib/completions/complete.bash",
    "chars": 2234,
    "preview": "# BASH completion code for OneDrive Linux Client\n# (c) 2019 Norbert Preining\n# License: GPLv3+ (as with the rest of the "
  },
  {
    "path": "contrib/completions/complete.fish",
    "chars": 5216,
    "preview": "# FISH completions for OneDrive Linux Client\n# License: GPLv3+ (as with the rest of the OneDrive Linux client project)\n\n"
  },
  {
    "path": "contrib/completions/complete.zsh",
    "chars": 5472,
    "preview": "#compdef onedrive\n#\n# ZSH completion code for OneDrive Linux Client\n# (c) 2019 Norbert Preining\n# License: GPLv3+ (as wi"
  },
  {
    "path": "contrib/docker/Dockerfile",
    "chars": 962,
    "preview": "# -*-Dockerfile-*-\n\nARG FEDORA_VERSION=43\nARG DEBIAN_VERSION=bullseye\nARG GO_VERSION=1.23\nARG GOSU_VERSION=1.17\n\nFROM go"
  },
  {
    "path": "contrib/docker/Dockerfile-alpine",
    "chars": 1014,
    "preview": "# -*-Dockerfile-*-\n\nARG ALPINE_VERSION=3.23\nARG GO_VERSION=1.25\nARG GOSU_VERSION=1.17\n\nFROM golang:${GO_VERSION}-alpine$"
  },
  {
    "path": "contrib/docker/Dockerfile-debian",
    "chars": 2163,
    "preview": "# -*-Dockerfile-*-\n\nARG DEBIAN_VERSION=trixie\n\nFROM debian:${DEBIAN_VERSION} AS builder-onedrive\nARG DEBIAN_VERSION\n\n# A"
  },
  {
    "path": "contrib/docker/entrypoint.sh",
    "chars": 9682,
    "preview": "#!/bin/bash -eu\n\nset +H -euo pipefail\n\n# ----------------------------------------------------------------------\n# Determ"
  },
  {
    "path": "contrib/docker/hooks/post_push",
    "chars": 143,
    "preview": "#!/bin/bash\n\nBUILD_DATE=`date \"+%Y%m%d%H%M\"`\n\ndocker tag ${IMAGE_NAME} \"${IMAGE_NAME}-${BUILD_DATE}\"\ndocker push \"${IMAG"
  },
  {
    "path": "contrib/init.d/onedrive.init",
    "chars": 1422,
    "preview": "#!/bin/sh\n#\n# chkconfig: 2345 20 80\n# description: Starts and stops OneDrive Client for Linux\n#\n\n# Source function libra"
  },
  {
    "path": "contrib/init.d/onedrive_service.sh",
    "chars": 190,
    "preview": "#!/bin/bash\n# This script is to assist in starting the onedrive client when using init.d\nAPP_OPTIONS=\"--monitor --verbos"
  },
  {
    "path": "contrib/logrotate/onedrive.logrotate",
    "chars": 570,
    "preview": "# Any OneDrive Client logs configured for here \n\n/var/log/onedrive/*log {\n    # What user / group should logrotate use?\n"
  },
  {
    "path": "contrib/pacman/PKGBUILD.in",
    "chars": 829,
    "preview": "pkgname=onedrive\npkgver=@PACKAGE_VERSION@\npkgrel=1 # Patch-level (increment this when a patch is applied)\npkgdesc=\"OneDr"
  },
  {
    "path": "contrib/spec/onedrive.spec.in",
    "chars": 9257,
    "preview": "# Platform-specific default compiler selection\n%if 0%{?fedora} || 0%{?rhel} || 0%{?centos}\n%global default_dcompiler ldc"
  },
  {
    "path": "contrib/systemd/onedrive.service.in",
    "chars": 914,
    "preview": "[Unit]\nDescription=OneDrive Client for Linux\nDocumentation=https://github.com/abraunegg/onedrive\nAfter=network-online.ta"
  },
  {
    "path": "contrib/systemd/onedrive@.service.in",
    "chars": 971,
    "preview": "[Unit]\nDescription=OneDrive Client for Linux running for %i\nDocumentation=https://github.com/abraunegg/onedrive\nAfter=ne"
  },
  {
    "path": "docs/advanced-usage.md",
    "chars": 19421,
    "preview": "# Advanced Configuration of the OneDrive Client for Linux\nThis document covers the following scenarios:\n*   [Configuring"
  },
  {
    "path": "docs/application-config-options.md",
    "chars": 79253,
    "preview": "# Application Configuration Options for the OneDrive Client for Linux\n## Application Version\nBefore reading this documen"
  },
  {
    "path": "docs/application-security.md",
    "chars": 6710,
    "preview": "# OneDrive Client for Linux Application Security\nThis document details the following information:\n\n* Why is this applica"
  },
  {
    "path": "docs/build-rpm-howto.md",
    "chars": 58738,
    "preview": "# RPM Package Build Process\nThe instructions below have been tested on the following systems:\n*   CentOS Stream release "
  },
  {
    "path": "docs/business-shared-items.md",
    "chars": 17435,
    "preview": "# How to sync OneDrive Business Shared Items\n\n> [!CAUTION]\n> Before reading this document, please ensure you are running"
  },
  {
    "path": "docs/client-architecture.md",
    "chars": 28060,
    "preview": "# OneDrive Client for Linux Application Architecture\n\n## How does the client work at a high level?\nThe client utilises t"
  },
  {
    "path": "docs/contributing.md",
    "chars": 6997,
    "preview": "# OneDrive Client for Linux: Coding Style Guidelines\n\n## Introduction\n\nThis document outlines the coding style guideline"
  },
  {
    "path": "docs/docker.md",
    "chars": 27123,
    "preview": "# Run the OneDrive Client for Linux under Docker\nThis client can be run as a Docker container, with 3 available containe"
  },
  {
    "path": "docs/install.md",
    "chars": 36621,
    "preview": "# Installing or Upgrading the OneDrive Client for Linux\n\n## Table of Contents\n\n- [Recommended Installation Method (Using"
  },
  {
    "path": "docs/known-issues.md",
    "chars": 6669,
    "preview": "# List of Identified Known Issues\nThe following points detail known issues associated with this client:\n\n## Renaming or "
  },
  {
    "path": "docs/national-cloud-deployments.md",
    "chars": 7725,
    "preview": "# How to configure access to specific Microsoft Azure deployments\n> [!CAUTION]\n> Before reading this document, please en"
  },
  {
    "path": "docs/podman.md",
    "chars": 20583,
    "preview": "# Run the OneDrive Client for Linux under Podman\nThis client can be run as a Podman container, with 3 available containe"
  },
  {
    "path": "docs/privacy-policy.md",
    "chars": 4901,
    "preview": "# Privacy Policy\nEffective Date: May 16 2018\n\n## Introduction\n\nThis Privacy Policy outlines how OneDrive Client for Linu"
  },
  {
    "path": "docs/puml/applyPotentiallyChangedItem.puml",
    "chars": 1324,
    "preview": "@startuml\nstart\npartition \"applyPotentiallyChangedItem\" {\n  :Check if existing item path differs from changed item path;"
  },
  {
    "path": "docs/puml/applyPotentiallyNewLocalItem.puml",
    "chars": 2659,
    "preview": "@startuml\nstart\npartition \"applyPotentiallyNewLocalItem\" {\n  :Check if path exists;\n  \n  if (Path exists?) then (yes)\n  "
  },
  {
    "path": "docs/puml/client_side_filtering_processing_order.puml",
    "chars": 849,
    "preview": "@startuml\n|Decision Tree|\n:Start Client Side Filtering Evaluation;\nif (check_nosync?) then (true)\n  :Skip item (no sync)"
  },
  {
    "path": "docs/puml/client_side_filtering_rules.puml",
    "chars": 1407,
    "preview": "@startuml\nstart\n:Start;\npartition \"checkPathAgainstClientSideFiltering\" {\n  :Get localFilePath;\n  \n  if (Does path exist"
  },
  {
    "path": "docs/puml/client_use_of_libcurl.puml",
    "chars": 1061,
    "preview": "@startuml\nparticipant \"OneDrive Client\\nfor Linux\" as od\nparticipant \"libcurl\" as lc\nparticipant \"Client Web Browser\" as"
  },
  {
    "path": "docs/puml/code_functional_component_relationships.puml",
    "chars": 1159,
    "preview": "@startuml\n!define DATABASE_ENTITY(x) entity x\ncomponent main {\n}\ncomponent config {\n}\ncomponent log {\n}\ncomponent curlEn"
  },
  {
    "path": "docs/puml/conflict_handling_default.puml",
    "chars": 1143,
    "preview": "@startuml\nstart\nnote left: Operational Mode 'onedrive --sync'\n:Query OneDrive /delta API for online changes;\nnote left: "
  },
  {
    "path": "docs/puml/conflict_handling_default_resync.puml",
    "chars": 1458,
    "preview": "@startuml\nstart\nnote left: Operational Mode 'onedrive -sync --resync'\n:Query OneDrive /delta API for online changes;\nnot"
  },
  {
    "path": "docs/puml/conflict_handling_local-first_default.puml",
    "chars": 1744,
    "preview": "@startuml\nstart\nnote left: Operational Mode 'onedrive -sync -local-first'\n:Performing a database consistency and\\nintegr"
  },
  {
    "path": "docs/puml/conflict_handling_local-first_resync.puml",
    "chars": 2307,
    "preview": "@startuml\nstart\nnote left: Operational Mode 'onedrive -sync -local-first -resync'\n:Query OneDrive API and create new dat"
  },
  {
    "path": "docs/puml/database_schema.puml",
    "chars": 839,
    "preview": "@startuml\n\nclass item {\n    driveId: TEXT\n    id: TEXT\n    name: TEXT\n    remoteName: TEXT\n    type: TEXT\n    eTag: TEXT"
  },
  {
    "path": "docs/puml/default_sync_flow.puml",
    "chars": 627,
    "preview": "@startuml\ntitle Default Sync Flow (Online is Source of Truth)\n\nstart\n\n:Step 1 - Scan OneDrive (online);\n:Detect online c"
  },
  {
    "path": "docs/puml/downloadFile.puml",
    "chars": 1597,
    "preview": "@startuml\nstart\n\npartition \"Download File\" {\n\n  :Get item specifics from JSON;\n  :Calculate item's path;\n  \n  if (Is ite"
  },
  {
    "path": "docs/puml/high_level_operational_process.puml",
    "chars": 1918,
    "preview": "@startuml\n\nparticipant \"OneDrive Client\\nfor Linux\" as Client\nparticipant \"Microsoft OneDrive\\nAPI\" as API\n\n== Access To"
  },
  {
    "path": "docs/puml/is_item_in_sync.puml",
    "chars": 1991,
    "preview": "@startuml\nstart\npartition \"Is item in sync\" {\n  :Check if path exists;\n  if (path does not exist) then (no)\n    :Return "
  },
  {
    "path": "docs/puml/local_first_sync_process.puml",
    "chars": 592,
    "preview": "@startuml\ntitle Local-First Sync Flow (--local-first)\n\nstart\n\n:Step 1 - Scan local files;\n:Detect local changes:\n- New f"
  },
  {
    "path": "docs/puml/main_activity_flows.puml",
    "chars": 2908,
    "preview": "@startuml\n\nstart\n\n:Validate access and existing access token\\nRefresh if needed;\n\n:Query /delta API;\nnote right: Query M"
  },
  {
    "path": "docs/puml/onedrive_linux_authentication.puml",
    "chars": 2305,
    "preview": "@startuml\nparticipant \"OneDrive Client for Linux\"\nparticipant \"Microsoft OneDrive\\nAuthentication Service\\n(login.micros"
  },
  {
    "path": "docs/puml/onedrive_windows_ad_authentication.puml",
    "chars": 3306,
    "preview": "@startuml\nparticipant \"Microsoft Windows OneDrive Client\"\nparticipant \"Azure Active Directory\\n(Active Directory)\\n(logi"
  },
  {
    "path": "docs/puml/onedrive_windows_authentication.puml",
    "chars": 2441,
    "preview": "@startuml\nparticipant \"Microsoft Windows OneDrive Client\"\nparticipant \"Microsoft OneDrive\\nAuthentication Service\\n(logi"
  },
  {
    "path": "docs/puml/uploadFile.puml",
    "chars": 1913,
    "preview": "@startuml\nstart\npartition \"Upload File\" {\n  :Log \"fileToUpload\";\n  :Check database for parent path;\n  if (parent path fo"
  },
  {
    "path": "docs/puml/uploadModifiedFile.puml",
    "chars": 1459,
    "preview": "@startuml\nstart\npartition \"Upload Modified File\" {\n  :Initialize API Instance;\n  :Check for Dry Run;\n  if (Is Dry Run?) "
  },
  {
    "path": "docs/puml/webhooks.puml",
    "chars": 770,
    "preview": "@startuml\n\nskinparam SequenceBoxBackgroundColor<<Internal>> AliceBlue\n\nbox \"Linux System\"<<Internal>>\n  participant Clie"
  },
  {
    "path": "docs/server-side-filtering-limitations.md",
    "chars": 9091,
    "preview": "# Why 'Server Side Filtering' is not possible with Microsoft OneDrive\n\nA common misconception is that `sync_list` or oth"
  },
  {
    "path": "docs/sharepoint-libraries.md",
    "chars": 11444,
    "preview": "# How to configure OneDrive SharePoint Shared Library sync\n\n> [!CAUTION]\n> Before reading this document, please ensure y"
  },
  {
    "path": "docs/terms-of-service.md",
    "chars": 3593,
    "preview": "# OneDrive Client for Linux - Software Service Terms of Service\n\n## 1. Introduction\n\nThese Terms of Service (\"Terms\") go"
  },
  {
    "path": "docs/ubuntu-package-install.md",
    "chars": 23877,
    "preview": "# Installation of 'onedrive' package on Debian and Ubuntu\n\nThis document outlines the steps for installing the 'onedrive"
  },
  {
    "path": "docs/usage.md",
    "chars": 123888,
    "preview": "# Using the OneDrive Client for Linux\n## Application Version\nBefore reading this document, please ensure you are running"
  },
  {
    "path": "docs/webhooks.md",
    "chars": 16916,
    "preview": "# How to configure receiving real-time changes from Microsoft OneDrive using webhooks\n\nWhen operating in 'Monitor Mode,'"
  },
  {
    "path": "install-sh",
    "chars": 15368,
    "preview": "#!/bin/sh\n# install - install a program, script, or datafile\n\nscriptversion=2018-03-11.20; # UTC\n\n# This originates from"
  },
  {
    "path": "onedrive.1.in",
    "chars": 17312,
    "preview": ".TH ONEDRIVE \"1\" \"@PACKAGE_DATE@\" \"@PACKAGE_VERSION@\" \"User Commands\"\n.SH NAME\nonedrive \\- A client for the Microsoft On"
  },
  {
    "path": "readme.md",
    "chars": 16784,
    "preview": "# OneDrive Client for Linux \n[![Version](https://img.shields.io/github/v/release/abraunegg/onedrive)](https://github.com"
  },
  {
    "path": "src/arsd/README.md",
    "chars": 350,
    "preview": "The files in this directory have been obtained form the following places:\n\ncgi.d\n\thttps://github.com/adamdruppe/arsd/blo"
  },
  {
    "path": "src/arsd/cgi.d",
    "chars": 355309,
    "preview": "// FIXME: if an exception is thrown, we shouldn't necessarily cache...\n// FIXME: there's some annoying duplication of co"
  },
  {
    "path": "src/clientSideFiltering.d",
    "chars": 43615,
    "preview": "// What is this module called?\nmodule clientSideFiltering;\n\n// What does this module require to function?\nimport std.alg"
  },
  {
    "path": "src/config.d",
    "chars": 149630,
    "preview": "// What is this module called?\nmodule config;\n\n// What does this module require to function?\nimport core.stdc.stdlib: EX"
  },
  {
    "path": "src/curlEngine.d",
    "chars": 29805,
    "preview": "// What is this module called?\nmodule curlEngine;\n\n// What does this module require to function?\nimport std.net.curl;\nim"
  },
  {
    "path": "src/curlWebsockets.d",
    "chars": 14851,
    "preview": "// What is this module called?\nmodule curlWebsockets;\n\n/****************************************************************"
  },
  {
    "path": "src/intune.d",
    "chars": 8009,
    "preview": "// What is this module called?\nmodule intune;\n\n// What does this module require to function?\nimport core.stdc.string : s"
  },
  {
    "path": "src/itemdb.d",
    "chars": 47358,
    "preview": "// What is this module called?\nmodule itemdb;\n\n// What does this module require to function?\nimport std.datetime;\nimport"
  },
  {
    "path": "src/log.d",
    "chars": 9608,
    "preview": "// What is this module called?\nmodule log;\n\n// What does this module require to function?\nimport std.stdio;\nimport std.f"
  },
  {
    "path": "src/main.d",
    "chars": 95788,
    "preview": "// What is this module called?\nmodule main;\n\n// What does this module require to function?\nimport core.memory;\nimport co"
  },
  {
    "path": "src/monitor.d",
    "chars": 26800,
    "preview": "// What is this module called?\nmodule monitor;\n\n// What does this module require to function?\nimport core.stdc.errno;\nim"
  },
  {
    "path": "src/notifications/README",
    "chars": 420,
    "preview": "The files in this directory have been obtained form the following places:\n\ndnotify.d\n\thttps://github.com/Dav1dde/dnotify"
  },
  {
    "path": "src/notifications/dnotify.d",
    "chars": 8923,
    "preview": "module dnotify;\n\nimport std.path;\nimport std.file;\n\nprivate {\n    import std.string : toStringz;\n    import std.conv : t"
  },
  {
    "path": "src/notifications/notify.d",
    "chars": 6720,
    "preview": "/**\n * Copyright (C) 2004-2006 Christian Hammond\n * Copyright (C) 2010 Red Hat, Inc.\n *\n * This library is free software"
  },
  {
    "path": "src/onedrive.d",
    "chars": 103457,
    "preview": "// What is this module called?\nmodule onedrive;\n\n// What does this module require to function?\nimport core.stdc.stdlib: "
  },
  {
    "path": "src/qxor.d",
    "chars": 2311,
    "preview": "// What is this module called?\nmodule qxor;\n\n// What does this module require to function?\nimport std.algorithm;\nimport "
  },
  {
    "path": "src/socketio.d",
    "chars": 21413,
    "preview": "// What is this module called?\nmodule socketio;\n\n// What does this module require to function?\nimport core.atomic     : "
  },
  {
    "path": "src/sqlite.d",
    "chars": 9098,
    "preview": "// What is this module called?\nmodule sqlite;\n\n// What does this module require to function?\nimport std.stdio;\nimport et"
  },
  {
    "path": "src/sync.d",
    "chars": 724933,
    "preview": "// What is this module called?\nmodule syncEngine;\n\n// What does this module require to function?\nimport core.memory;\nimp"
  },
  {
    "path": "src/util.d",
    "chars": 84185,
    "preview": "// What is this module called?\nmodule util;\n\n// What does this module require to function?\nimport core.memory;\nimport co"
  },
  {
    "path": "src/webhook.d",
    "chars": 9445,
    "preview": "// What is this module called?\nmodule webhook;\n\n// What does this module require to function?\nimport core.atomic : atomi"
  },
  {
    "path": "src/xattr.d",
    "chars": 3568,
    "preview": "module xattr;\n\nimport core.sys.posix.sys.types;\nimport core.stdc.errno;\nimport core.stdc.stdlib;\nimport core.stdc.string"
  },
  {
    "path": "tests/makefiles.sh",
    "chars": 1833,
    "preview": "#!/bin/bash\nONEDRIVEALT=~/OneDriveALT\nif [ ! -d ${ONEDRIVEALT} ]; then\n        mkdir -p ${ONEDRIVEALT}\nelse\n        rm -"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the abraunegg/onedrive GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 91 files (2.5 MB), approximately 671.8k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!