This commit is contained in:
parent
e3895ab1a0
commit
ed12148c37
Binary file not shown.
|
@ -0,0 +1,484 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2020 - 2023, Shaun Ruffell, Thomas Lauf.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <AtomicFile.h>
|
||||||
|
#include <FS.h>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cerrno>
|
||||||
|
#include <csignal>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <format.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <timew.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
struct AtomicFile::impl
|
||||||
|
{
|
||||||
|
using value_type = std::shared_ptr <AtomicFile::impl>;
|
||||||
|
// Since it should be relatively small, keep the atomic files in a vector
|
||||||
|
using atomic_files_t = std::vector <value_type>;
|
||||||
|
using iterator = atomic_files_t::iterator;
|
||||||
|
|
||||||
|
File temp_file;
|
||||||
|
File real_file;
|
||||||
|
|
||||||
|
// After the file is modified in any way, all operations should deal only with
|
||||||
|
// the temp file until finalization.
|
||||||
|
bool is_temp_active {false};
|
||||||
|
|
||||||
|
explicit impl (const Path& path);
|
||||||
|
~impl ();
|
||||||
|
|
||||||
|
std::string name () const;
|
||||||
|
const std::string& path () const;
|
||||||
|
bool exists () const;
|
||||||
|
|
||||||
|
bool open ();
|
||||||
|
void close ();
|
||||||
|
size_t size () const;
|
||||||
|
void truncate ();
|
||||||
|
void remove ();
|
||||||
|
void read (std::string& content);
|
||||||
|
void read (std::vector <std::string>& lines);
|
||||||
|
void append (const std::string& content);
|
||||||
|
void write_raw (const std::string& content);
|
||||||
|
|
||||||
|
void finalize ();
|
||||||
|
|
||||||
|
static atomic_files_t::iterator find (const std::string& path) = delete;
|
||||||
|
static atomic_files_t::iterator find (const Path& path);
|
||||||
|
|
||||||
|
// Static members
|
||||||
|
|
||||||
|
// If there is a problem writing to any of the temporary files, we do not want
|
||||||
|
// any of them to be copied over the "real" file.
|
||||||
|
static bool allow_atomics;
|
||||||
|
static atomic_files_t atomic_files;
|
||||||
|
};
|
||||||
|
|
||||||
|
AtomicFile::impl::atomic_files_t AtomicFile::impl::atomic_files {};
|
||||||
|
bool AtomicFile::impl::allow_atomics {true};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
AtomicFile::impl::impl (const Path& path)
|
||||||
|
{
|
||||||
|
static pid_t s_pid = ::getpid ();
|
||||||
|
static int s_count = 0;
|
||||||
|
std::stringstream str;
|
||||||
|
|
||||||
|
std::string real_path;
|
||||||
|
if (path.is_link ())
|
||||||
|
{
|
||||||
|
real_path = path.realpath ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
real_path = path._data;
|
||||||
|
}
|
||||||
|
|
||||||
|
str << real_path << '.' << s_pid << '-' << ++s_count << ".tmp";
|
||||||
|
temp_file = File (str.str ());
|
||||||
|
real_file = File (real_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
AtomicFile::impl::~impl ()
|
||||||
|
{
|
||||||
|
// Make sure we remove any temporary files if AtomicFile::finalize_all was
|
||||||
|
// never called. Typically, this will happen when there are exceptions.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
std::remove (temp_file._data.c_str ());
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string AtomicFile::impl::name () const
|
||||||
|
{
|
||||||
|
return real_file.name ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::string& AtomicFile::impl::path () const
|
||||||
|
{
|
||||||
|
return real_file._data;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool AtomicFile::impl::exists () const
|
||||||
|
{
|
||||||
|
return real_file.exists ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool AtomicFile::impl::open ()
|
||||||
|
{
|
||||||
|
assert (! temp_file._data.empty () && ! real_file._data.empty ());
|
||||||
|
return real_file.open ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::impl::close ()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
temp_file.close ();
|
||||||
|
real_file.close ();
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
allow_atomics = false;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
size_t AtomicFile::impl::size () const
|
||||||
|
{
|
||||||
|
struct stat s;
|
||||||
|
const char *filename = (is_temp_active) ? temp_file._data.c_str () : real_file._data.c_str ();
|
||||||
|
if (stat (filename, &s))
|
||||||
|
{
|
||||||
|
throw format ("stat error {1}: {2}", errno, strerror (errno));
|
||||||
|
}
|
||||||
|
return s.st_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::impl::truncate ()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
temp_file.truncate ();
|
||||||
|
is_temp_active = true;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
allow_atomics = false;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::impl::remove ()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
temp_file.remove ();
|
||||||
|
is_temp_active = true;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
allow_atomics = false;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::impl::read (std::string& content)
|
||||||
|
{
|
||||||
|
if (is_temp_active)
|
||||||
|
{
|
||||||
|
// Close the file before reading it in order to flush any buffers.
|
||||||
|
temp_file.close ();
|
||||||
|
}
|
||||||
|
return (is_temp_active) ? temp_file.read (content) :
|
||||||
|
real_file.read (content);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::impl::read (std::vector <std::string>& lines)
|
||||||
|
{
|
||||||
|
if (is_temp_active)
|
||||||
|
{
|
||||||
|
// Close the file before reading it in order to flush any buffers.
|
||||||
|
temp_file.close ();
|
||||||
|
}
|
||||||
|
return (is_temp_active) ? temp_file.read (lines) :
|
||||||
|
real_file.read (lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::impl::append (const std::string& content)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (! is_temp_active)
|
||||||
|
{
|
||||||
|
is_temp_active = true;
|
||||||
|
|
||||||
|
if (real_file.exists () && ! File::copy (real_file, temp_file))
|
||||||
|
{
|
||||||
|
throw format ("Failed to copy '{1}' to '{2}'",
|
||||||
|
real_file.name (), temp_file.name ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return temp_file.append (content);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
allow_atomics = false;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::impl::write_raw (const std::string& content)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
temp_file.write_raw (content);
|
||||||
|
is_temp_active = true;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
allow_atomics = false;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::impl::finalize ()
|
||||||
|
{
|
||||||
|
if (is_temp_active && impl::allow_atomics)
|
||||||
|
{
|
||||||
|
if (temp_file.exists ())
|
||||||
|
{
|
||||||
|
debug (format ("Moving '{1}' -> '{2}'", temp_file._data, real_file._data));
|
||||||
|
if (std::rename (temp_file._data.c_str (), real_file._data.c_str ()))
|
||||||
|
{
|
||||||
|
throw format("Failed copying '{1}' to '{2}'. Database corruption possible.",
|
||||||
|
temp_file._data, real_file._data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug (format ("Removing '{1}'", real_file._data));
|
||||||
|
std::remove (real_file._data.c_str ());
|
||||||
|
}
|
||||||
|
is_temp_active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
AtomicFile::AtomicFile (const Path& path)
|
||||||
|
{
|
||||||
|
auto end = impl::atomic_files.end ();
|
||||||
|
auto it = std::find_if (impl::atomic_files.begin (), end,
|
||||||
|
[&path] (const impl::value_type& p)
|
||||||
|
{
|
||||||
|
return p->real_file == path;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (it == end)
|
||||||
|
{
|
||||||
|
pimpl = std::make_shared <impl> (path);
|
||||||
|
impl::atomic_files.push_back (pimpl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pimpl = *it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
AtomicFile::AtomicFile (std::string path) : AtomicFile (Path (path))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
AtomicFile::~AtomicFile()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pimpl->close ();
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AtomicFile::AtomicFile (AtomicFile&&) = default;
|
||||||
|
AtomicFile& AtomicFile::operator= (AtomicFile&&) = default;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::string& AtomicFile::path () const
|
||||||
|
{
|
||||||
|
return pimpl->path ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string AtomicFile::name () const
|
||||||
|
{
|
||||||
|
return pimpl->name ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool AtomicFile::exists () const
|
||||||
|
{
|
||||||
|
return pimpl->exists ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool AtomicFile::open ()
|
||||||
|
{
|
||||||
|
return pimpl->open ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::close ()
|
||||||
|
{
|
||||||
|
pimpl->close ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
size_t AtomicFile::size () const
|
||||||
|
{
|
||||||
|
return pimpl->size ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::truncate ()
|
||||||
|
{
|
||||||
|
pimpl->truncate ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::remove ()
|
||||||
|
{
|
||||||
|
pimpl->remove ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::read (std::string& content)
|
||||||
|
{
|
||||||
|
pimpl->read (content);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::read (std::vector <std::string>& lines)
|
||||||
|
{
|
||||||
|
pimpl->read (lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::append (const std::string& content)
|
||||||
|
{
|
||||||
|
pimpl->append (content);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::write_raw (const std::string& content)
|
||||||
|
{
|
||||||
|
pimpl->write_raw (content);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::write (const Path& path, const std::string& data)
|
||||||
|
{
|
||||||
|
AtomicFile file (path);
|
||||||
|
file.truncate ();
|
||||||
|
file.write_raw (data);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::write (const Path& path, const std::vector <std::string>& lines)
|
||||||
|
{
|
||||||
|
AtomicFile file (path);
|
||||||
|
file.truncate ();
|
||||||
|
for (const auto& line : lines)
|
||||||
|
{
|
||||||
|
file.append (line + '\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void AtomicFile::read (const Path& path, std::string& content)
|
||||||
|
{
|
||||||
|
AtomicFile (path).read (content);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AtomicFile::read (const Path& path, std::vector <std::string>& lines)
|
||||||
|
{
|
||||||
|
AtomicFile (path).read (lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// finalize_all - Close / Flush all temporary files and rename to final.
|
||||||
|
void AtomicFile::finalize_all ()
|
||||||
|
{
|
||||||
|
if (! impl::allow_atomics)
|
||||||
|
{
|
||||||
|
throw std::string {"Unable to update database."};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 1: Close / Flush all the atomic files that may still be open. If any
|
||||||
|
// of the files fail this step (close () will throw) then we do not want to
|
||||||
|
// move on to step 2
|
||||||
|
for (auto& file : impl::atomic_files)
|
||||||
|
{
|
||||||
|
file->close ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sigset_t new_mask;
|
||||||
|
sigset_t old_mask;
|
||||||
|
sigfillset (&new_mask);
|
||||||
|
|
||||||
|
// Step 2: Rename the temp files to the *real* file
|
||||||
|
sigprocmask (SIG_SETMASK, &new_mask, &old_mask);
|
||||||
|
for (auto& file : impl::atomic_files)
|
||||||
|
{
|
||||||
|
file->finalize ();
|
||||||
|
}
|
||||||
|
sigprocmask (SIG_SETMASK, &old_mask, nullptr);
|
||||||
|
|
||||||
|
// Step 3: Cleanup any references
|
||||||
|
impl::atomic_files_t new_atomic_files;
|
||||||
|
for (auto& file : impl::atomic_files)
|
||||||
|
{
|
||||||
|
// Delete entry if we are holding the last reference
|
||||||
|
if (file.use_count () > 1)
|
||||||
|
{
|
||||||
|
new_atomic_files.push_back(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new_atomic_files.swap(impl::atomic_files);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// reset - Removes all current atomic files from finalization
|
||||||
|
void AtomicFile::reset ()
|
||||||
|
{
|
||||||
|
impl::atomic_files.clear ();
|
||||||
|
impl::allow_atomics = true;
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2020 - 2022, Shaun Ruffell, Thomas Lauf.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#ifndef INCLUDED_ATOMICFILE
|
||||||
|
#define INCLUDED_ATOMICFILE
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Path;
|
||||||
|
|
||||||
|
class AtomicFile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit AtomicFile (const Path& path);
|
||||||
|
explicit AtomicFile (std::string path);
|
||||||
|
AtomicFile (const AtomicFile&) = delete;
|
||||||
|
AtomicFile (AtomicFile&&);
|
||||||
|
AtomicFile& operator= (const AtomicFile&) = delete;
|
||||||
|
AtomicFile& operator= (AtomicFile&&);
|
||||||
|
~AtomicFile ();
|
||||||
|
|
||||||
|
std::string name () const;
|
||||||
|
const std::string& path () const;
|
||||||
|
bool exists () const;
|
||||||
|
|
||||||
|
bool open ();
|
||||||
|
void close ();
|
||||||
|
void remove ();
|
||||||
|
void truncate ();
|
||||||
|
size_t size () const;
|
||||||
|
void read (std::string& content);
|
||||||
|
void read (std::vector <std::string>& lines);
|
||||||
|
void append (const std::string& content);
|
||||||
|
void write_raw (const std::string& content);
|
||||||
|
|
||||||
|
static void append (const Path& path, const std::string& data);
|
||||||
|
|
||||||
|
static void write (const Path& path, const std::string& data);
|
||||||
|
static void write (const Path& path, const std::vector <std::string>& lines);
|
||||||
|
|
||||||
|
static void read (const Path& path, std::string& content);
|
||||||
|
static void read (const Path& path, std::vector <std::string>& lines);
|
||||||
|
|
||||||
|
static void finalize_all ();
|
||||||
|
static void reset ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct impl;
|
||||||
|
std::shared_ptr <impl> pimpl;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // INCLUDED_ATOMICFILE
|
|
@ -0,0 +1,855 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <CLI.h>
|
||||||
|
#include <Color.h>
|
||||||
|
#include <DatetimeParser.h>
|
||||||
|
#include <Duration.h>
|
||||||
|
#include <Pig.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <format.h>
|
||||||
|
#include <set>
|
||||||
|
#include <shared.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <timew.h>
|
||||||
|
#include <utf8.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
A2::A2 (const std::string& raw, Lexer::Type lextype)
|
||||||
|
{
|
||||||
|
_lextype = lextype;
|
||||||
|
attribute ("raw", raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool A2::hasTag (const std::string& tag) const
|
||||||
|
{
|
||||||
|
return std::find (_tags.begin (), _tags.end (), tag) != _tags.end ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void A2::tag (const std::string& tag)
|
||||||
|
{
|
||||||
|
if (! hasTag (tag))
|
||||||
|
_tags.push_back (tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void A2::unTag (const std::string& tag)
|
||||||
|
{
|
||||||
|
for (auto i = _tags.begin (); i != _tags.end (); ++i)
|
||||||
|
{
|
||||||
|
if (*i == tag)
|
||||||
|
{
|
||||||
|
_tags.erase (i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Accessor for attributes.
|
||||||
|
void A2::attribute (const std::string& name, const std::string& value)
|
||||||
|
{
|
||||||
|
_attributes[name] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Accessor for attributes.
|
||||||
|
void A2::attribute (const std::string& name, int value)
|
||||||
|
{
|
||||||
|
_attributes[name] = format ("{1}", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Accessor for attributes.
|
||||||
|
std::string A2::attribute (const std::string& name) const
|
||||||
|
{
|
||||||
|
// Prevent autovivification.
|
||||||
|
auto i = _attributes.find (name);
|
||||||
|
if (i != _attributes.end ())
|
||||||
|
return i->second;
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string A2::getToken () const
|
||||||
|
{
|
||||||
|
auto i = _attributes.find ("canonical");
|
||||||
|
if (i == _attributes.end ())
|
||||||
|
i = _attributes.find ("raw");
|
||||||
|
|
||||||
|
return i->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string A2::dump () const
|
||||||
|
{
|
||||||
|
auto output = Lexer::typeToString (_lextype);
|
||||||
|
|
||||||
|
// Dump attributes.
|
||||||
|
std::string atts;
|
||||||
|
for (auto& a : _attributes)
|
||||||
|
atts += a.first + "='\033[33m" + a.second + "\033[0m' ";
|
||||||
|
|
||||||
|
// Dump tags.
|
||||||
|
std::string tags;
|
||||||
|
for (const auto& tag : _tags)
|
||||||
|
{
|
||||||
|
if (tag == "BINARY") tags += "\033[1;37;44m" + tag + "\033[0m ";
|
||||||
|
else if (tag == "CMD") tags += "\033[1;37;46m" + tag + "\033[0m ";
|
||||||
|
else if (tag == "EXT") tags += "\033[1;37;42m" + tag + "\033[0m ";
|
||||||
|
else if (tag == "HINT") tags += "\033[1;37;43m" + tag + "\033[0m ";
|
||||||
|
else if (tag == "FILTER") tags += "\033[1;37;45m" + tag + "\033[0m ";
|
||||||
|
else if (tag == "CONFIG") tags += "\033[1;37;101m" + tag + "\033[0m ";
|
||||||
|
else if (tag == "ID") tags += "\033[38;5;7m\033[48;5;34m" + tag + "\033[0m ";
|
||||||
|
else tags += "\033[32m" + tag + "\033[0m ";
|
||||||
|
}
|
||||||
|
|
||||||
|
return output + " " + atts + tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void CLI::entity (const std::string& category, const std::string& name)
|
||||||
|
{
|
||||||
|
// Walk the list of entities for category.
|
||||||
|
auto c = _entities.equal_range (category);
|
||||||
|
for (auto e = c.first; e != c.second; ++e)
|
||||||
|
if (e->second == name)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// The category/name pair was not found, therefore add it.
|
||||||
|
_entities.insert (std::pair <std::string, std::string> (category, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Capture a single argument.
|
||||||
|
void CLI::add (const std::string& argument)
|
||||||
|
{
|
||||||
|
// Sanitize the input: Convert control charts to spaces. Then trim.
|
||||||
|
std::string clean;
|
||||||
|
std::string::size_type i = 0;
|
||||||
|
int character;
|
||||||
|
while ((character = utf8_next_char (argument.c_str (), i)))
|
||||||
|
{
|
||||||
|
if (character <= 32)
|
||||||
|
clean += ' ';
|
||||||
|
else
|
||||||
|
clean += utf8_character (character);
|
||||||
|
}
|
||||||
|
|
||||||
|
A2 arg (Lexer::trim (clean), Lexer::Type::word);
|
||||||
|
arg.tag ("ORIGINAL");
|
||||||
|
_original_args.push_back (arg);
|
||||||
|
|
||||||
|
// Adding a new argument invalidates prior analysis.
|
||||||
|
_args.clear ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Arg0 is the first argument, which is the name and potentially a relative or
|
||||||
|
// absolute path to the invoked binary.
|
||||||
|
//
|
||||||
|
// The binary name is 'timew', but if the binary is reported as 'foo' then it
|
||||||
|
// was invoked via symbolic link, in which case capture the first argument as
|
||||||
|
// 'foo'. This should allow any command/extension to do this.
|
||||||
|
//
|
||||||
|
void CLI::handleArg0 ()
|
||||||
|
{
|
||||||
|
// Capture arg0 separately, because it is the command that was run, and could
|
||||||
|
// need special handling.
|
||||||
|
auto raw = _original_args[0].attribute ("raw");
|
||||||
|
A2 a (raw, Lexer::Type::word);
|
||||||
|
a.tag ("BINARY");
|
||||||
|
|
||||||
|
std::string basename = "timew";
|
||||||
|
auto slash = raw.rfind ('/');
|
||||||
|
if (slash != std::string::npos)
|
||||||
|
basename = raw.substr (slash + 1);
|
||||||
|
|
||||||
|
a.attribute ("basename", basename);
|
||||||
|
if (basename != "timew")
|
||||||
|
{
|
||||||
|
A2 cal (basename, Lexer::Type::word);
|
||||||
|
_args.push_back (cal);
|
||||||
|
}
|
||||||
|
|
||||||
|
_args.push_back (a);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// All arguments must be individually and wholly recognized by the Lexer. Any
|
||||||
|
// argument not recognized is considered a Lexer::Type::word.
|
||||||
|
void CLI::lexArguments ()
|
||||||
|
{
|
||||||
|
// Note: Starts iterating at index 1, because ::handleArg0 has already
|
||||||
|
// processed 0.
|
||||||
|
for (unsigned int i = 1; i < _original_args.size (); ++i)
|
||||||
|
{
|
||||||
|
bool quoted = Lexer::wasQuoted (_original_args[i].attribute ("raw"));
|
||||||
|
|
||||||
|
std::string lexeme;
|
||||||
|
Lexer::Type type;
|
||||||
|
Lexer lex (_original_args[i].attribute ("raw"));
|
||||||
|
if (lex.token (lexeme, type) &&
|
||||||
|
lex.isEOS ())
|
||||||
|
{
|
||||||
|
A2 a (_original_args[i].attribute ("raw"), type);
|
||||||
|
if (quoted)
|
||||||
|
a.tag ("QUOTED");
|
||||||
|
|
||||||
|
if (_original_args[i].hasTag ("ORIGINAL"))
|
||||||
|
a.tag ("ORIGINAL");
|
||||||
|
|
||||||
|
_args.push_back (a);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string quote = "'";
|
||||||
|
auto escaped = str_replace (_original_args[i].attribute ("raw"), quote, "\\'");
|
||||||
|
|
||||||
|
std::string::size_type cursor = 0;
|
||||||
|
std::string word;
|
||||||
|
if (Lexer::readWord (quote + escaped + quote, quote, cursor, word))
|
||||||
|
{
|
||||||
|
A2 unknown (Lexer::dequote (word), Lexer::Type::word);
|
||||||
|
if (Lexer::wasQuoted (_original_args[i].attribute ("raw")))
|
||||||
|
unknown.tag ("QUOTED");
|
||||||
|
|
||||||
|
if (_original_args[i].hasTag ("ORIGINAL"))
|
||||||
|
unknown.tag ("ORIGINAL");
|
||||||
|
|
||||||
|
_args.push_back (unknown);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This branch may have no use-case.
|
||||||
|
else
|
||||||
|
{
|
||||||
|
A2 unknown (Lexer::dequote (_original_args[i].attribute ("raw")), Lexer::Type::word);
|
||||||
|
unknown.tag ("UNKNOWN");
|
||||||
|
|
||||||
|
if (Lexer::wasQuoted (_original_args[i].attribute ("raw")))
|
||||||
|
unknown.tag ("QUOTED");
|
||||||
|
|
||||||
|
if (_original_args[i].hasTag ("ORIGINAL"))
|
||||||
|
unknown.tag ("ORIGINAL");
|
||||||
|
|
||||||
|
_args.push_back (unknown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Intended to be called after ::add() to perform the final analysis.
|
||||||
|
void CLI::analyze ()
|
||||||
|
{
|
||||||
|
// Process _original_args.
|
||||||
|
_args.clear ();
|
||||||
|
handleArg0 ();
|
||||||
|
lexArguments ();
|
||||||
|
identifyOverrides ();
|
||||||
|
identifyIds ();
|
||||||
|
canonicalizeNames ();
|
||||||
|
identifyFilter ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Return all the unknown args.
|
||||||
|
std::vector <std::string> CLI::getWords () const
|
||||||
|
{
|
||||||
|
std::vector <std::string> words;
|
||||||
|
for (const auto& a : _args)
|
||||||
|
if (! a.hasTag ("BINARY") &&
|
||||||
|
! a.hasTag ("CMD") &&
|
||||||
|
! a.hasTag ("CONFIG") &&
|
||||||
|
! a.hasTag ("HINT"))
|
||||||
|
words.push_back (a.attribute ("raw"));
|
||||||
|
|
||||||
|
return words;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Search for 'value' in _entities category, return canonicalized value.
|
||||||
|
bool CLI::canonicalize (
|
||||||
|
std::string& canonicalized,
|
||||||
|
const std::string& category,
|
||||||
|
const std::string& value) const
|
||||||
|
{
|
||||||
|
// Extract a list of entities for category.
|
||||||
|
std::vector <std::string> options;
|
||||||
|
auto c = _entities.equal_range (category);
|
||||||
|
for (auto e = c.first; e != c.second; ++e)
|
||||||
|
{
|
||||||
|
// Shortcut: if an exact match is found, success.
|
||||||
|
if (value == e->second)
|
||||||
|
{
|
||||||
|
canonicalized = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
options.push_back (e->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Match against the options, throw away results.
|
||||||
|
std::vector <std::string> matches;
|
||||||
|
if (autoComplete (value, options, matches) == 1)
|
||||||
|
{
|
||||||
|
canonicalized = matches[0];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string CLI::getBinary () const
|
||||||
|
{
|
||||||
|
if (! _args.empty ())
|
||||||
|
return _args[0].attribute ("raw");
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string CLI::getCommand () const
|
||||||
|
{
|
||||||
|
for (const auto& a : _args)
|
||||||
|
if (a.hasTag ("CMD"))
|
||||||
|
return a.attribute ("canonical");
|
||||||
|
|
||||||
|
for (const auto& a : _args)
|
||||||
|
if (a.hasTag ("EXT"))
|
||||||
|
return a.attribute ("canonical");
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string CLI::dump (const std::string& title) const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
out << "\033[1m" << title << "\033[0m\n"
|
||||||
|
<< " _original_args\n ";
|
||||||
|
|
||||||
|
Color colorArgs ("gray10 on gray4");
|
||||||
|
for (auto i = _original_args.begin (); i != _original_args.end (); ++i)
|
||||||
|
{
|
||||||
|
if (i != _original_args.begin ())
|
||||||
|
out << ' ';
|
||||||
|
|
||||||
|
out << colorArgs.colorize (i->attribute ("raw"));
|
||||||
|
}
|
||||||
|
|
||||||
|
out << '\n';
|
||||||
|
|
||||||
|
if (! _args.empty ())
|
||||||
|
{
|
||||||
|
out << " _args\n";
|
||||||
|
for (auto& a : _args)
|
||||||
|
out << " " << a.dump () << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Scan all arguments and identify instances of 'rc.<name>[:=]<value>'.
|
||||||
|
void CLI::identifyOverrides ()
|
||||||
|
{
|
||||||
|
for (auto& a : _args)
|
||||||
|
{
|
||||||
|
auto raw = a.attribute ("raw");
|
||||||
|
|
||||||
|
if (raw.length () > 3 &&
|
||||||
|
raw.substr (0, 3) == "rc.")
|
||||||
|
{
|
||||||
|
auto sep = raw.find ('=', 3);
|
||||||
|
if (sep == std::string::npos)
|
||||||
|
sep = raw.find (':', 3);
|
||||||
|
if (sep != std::string::npos)
|
||||||
|
{
|
||||||
|
a.tag ("CONFIG");
|
||||||
|
a.attribute ("name", raw.substr (3, sep - 3));
|
||||||
|
a.attribute ("value", raw.substr (sep + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Scan all arguments and identify instances of '@<integer>'.
|
||||||
|
void CLI::identifyIds ()
|
||||||
|
{
|
||||||
|
for (auto& a : _args)
|
||||||
|
{
|
||||||
|
if (a._lextype == Lexer::Type::word)
|
||||||
|
{
|
||||||
|
Pig pig (a.attribute ("raw"));
|
||||||
|
int digits;
|
||||||
|
if (pig.skipLiteral ("@") &&
|
||||||
|
pig.getDigits (digits) &&
|
||||||
|
pig.eos ())
|
||||||
|
{
|
||||||
|
if (digits <= 0)
|
||||||
|
throw format ("'@{1}' is not a valid ID.", digits);
|
||||||
|
|
||||||
|
a.tag ("ID");
|
||||||
|
a.attribute ("value", digits);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Scan all arguments and canonicalize names that need it.
|
||||||
|
void CLI::canonicalizeNames ()
|
||||||
|
{
|
||||||
|
bool alreadyFoundCmd = false;
|
||||||
|
|
||||||
|
for (auto& a : _args)
|
||||||
|
{
|
||||||
|
auto raw = a.attribute ("raw");
|
||||||
|
std::string canonical = raw;
|
||||||
|
|
||||||
|
// Commands.
|
||||||
|
if (! alreadyFoundCmd &&
|
||||||
|
(exactMatch ("command", raw) ||
|
||||||
|
canonicalize (canonical, "command", raw)))
|
||||||
|
{
|
||||||
|
a.attribute ("canonical", canonical);
|
||||||
|
a.tag ("CMD");
|
||||||
|
alreadyFoundCmd = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 'timew <command> --help|-h' should be treated the same as 'timew help <command>'.
|
||||||
|
// Therefore, '--help|-h' on the command line should always become the command.
|
||||||
|
else if (alreadyFoundCmd && (raw == "--help" || raw == "-h"))
|
||||||
|
{
|
||||||
|
for (auto& b : _args) {
|
||||||
|
if (b.hasTag ("CMD"))
|
||||||
|
{
|
||||||
|
b.unTag ("CMD");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a.tag ("CMD");
|
||||||
|
a.attribute ("canonical", canonical);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hints.
|
||||||
|
else if (exactMatch ("hint", raw) ||
|
||||||
|
canonicalize (canonical, "hint", raw))
|
||||||
|
{
|
||||||
|
a.attribute ("canonical", canonical);
|
||||||
|
a.tag ("HINT");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extensions.
|
||||||
|
else if (exactMatch ("extension", raw) ||
|
||||||
|
canonicalize (canonical, "extension", raw))
|
||||||
|
{
|
||||||
|
a.attribute ("canonical", canonical);
|
||||||
|
a.tag ("EXT");
|
||||||
|
alreadyFoundCmd = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Locate arguments that are part of a filter.
|
||||||
|
void CLI::identifyFilter ()
|
||||||
|
{
|
||||||
|
for (auto& a : _args)
|
||||||
|
{
|
||||||
|
if (a.hasTag ("CMD") ||
|
||||||
|
a.hasTag ("EXT") ||
|
||||||
|
a.hasTag ("CONFIG") ||
|
||||||
|
a.hasTag ("BINARY"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
auto raw = a.attribute ("raw");
|
||||||
|
|
||||||
|
if (a.hasTag ("HINT"))
|
||||||
|
a.tag ("FILTER");
|
||||||
|
|
||||||
|
else if (a.hasTag ("ID"))
|
||||||
|
a.tag ("FILTER");
|
||||||
|
|
||||||
|
else if (a._lextype == Lexer::Type::date ||
|
||||||
|
a._lextype == Lexer::Type::duration)
|
||||||
|
{
|
||||||
|
a.tag ("FILTER");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (raw == "from" ||
|
||||||
|
raw == "since" ||
|
||||||
|
raw == "to" ||
|
||||||
|
raw == "for" ||
|
||||||
|
raw == "until" ||
|
||||||
|
raw == "-" ||
|
||||||
|
raw == "before" ||
|
||||||
|
raw == "after" ||
|
||||||
|
raw == "ago")
|
||||||
|
{
|
||||||
|
a.tag ("FILTER");
|
||||||
|
a.tag ("KEYWORD");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (raw.rfind ("dom.",0) == 0)
|
||||||
|
{
|
||||||
|
a.tag ("DOM");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
a.tag ("FILTER");
|
||||||
|
a.tag ("TAG");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Search for exact 'value' in _entities category.
|
||||||
|
bool CLI::exactMatch (
|
||||||
|
const std::string& category,
|
||||||
|
const std::string& value) const
|
||||||
|
{
|
||||||
|
// Extract a list of entities for category.
|
||||||
|
auto c = _entities.equal_range (category);
|
||||||
|
for (auto e = c.first; e != c.second; ++e)
|
||||||
|
if (value == e->second)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::set <int> CLI::getIds () const
|
||||||
|
{
|
||||||
|
std::set <int> ids;
|
||||||
|
|
||||||
|
for (auto& arg : _args)
|
||||||
|
{
|
||||||
|
if (arg.hasTag ("ID"))
|
||||||
|
ids.insert (strtol (arg.attribute ("value").c_str (), nullptr, 10));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::set <std::string> CLI::getTags () const
|
||||||
|
{
|
||||||
|
std::set <std::string> tags;
|
||||||
|
|
||||||
|
for (auto& arg : _args)
|
||||||
|
{
|
||||||
|
if (arg.hasTag ("TAG"))
|
||||||
|
tags.insert (arg.attribute ("raw"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string CLI::getAnnotation () const
|
||||||
|
{
|
||||||
|
std::string annotation;
|
||||||
|
|
||||||
|
for (auto& arg : _args)
|
||||||
|
{
|
||||||
|
if (arg.hasTag ("TAG"))
|
||||||
|
{
|
||||||
|
annotation = (arg.attribute ("raw"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return annotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Duration CLI::getDuration () const
|
||||||
|
{
|
||||||
|
std::string delta;
|
||||||
|
for (auto& arg : _args)
|
||||||
|
{
|
||||||
|
if (arg.hasTag ("FILTER") &&
|
||||||
|
arg._lextype == Lexer::Type::duration)
|
||||||
|
{
|
||||||
|
delta = arg.attribute ("raw");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Duration dur (delta);
|
||||||
|
return dur;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
std::vector <std::string> CLI::getDomReferences () const
|
||||||
|
{
|
||||||
|
std::vector <std::string> references;
|
||||||
|
|
||||||
|
for (auto& arg : _args)
|
||||||
|
{
|
||||||
|
if (arg.hasTag ("DOM"))
|
||||||
|
{
|
||||||
|
references.emplace_back (arg.attribute ("raw"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return references;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Supported range forms:
|
||||||
|
// ["from"] <date> ["to"|"-" <date>]
|
||||||
|
// ["from"] <date> "for" <duration>
|
||||||
|
// <duration> ["before"|"after" <date>]
|
||||||
|
// <duration> "ago"
|
||||||
|
//
|
||||||
|
Range CLI::getRange (const Range& default_range) const
|
||||||
|
{
|
||||||
|
Datetime now;
|
||||||
|
|
||||||
|
Range the_range;
|
||||||
|
std::string start;
|
||||||
|
std::string end;
|
||||||
|
std::string duration;
|
||||||
|
std::vector <std::string> args;
|
||||||
|
|
||||||
|
for (auto& arg : _args)
|
||||||
|
{
|
||||||
|
if (arg.hasTag ("BINARY") ||
|
||||||
|
arg.hasTag ("CMD") ||
|
||||||
|
arg.hasTag ("EXT"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (arg.hasTag ("FILTER"))
|
||||||
|
{
|
||||||
|
auto canonical = arg.attribute ("canonical");
|
||||||
|
auto raw = arg.attribute ("raw");
|
||||||
|
|
||||||
|
if (arg.hasTag ("HINT"))
|
||||||
|
{
|
||||||
|
Range range;
|
||||||
|
if (expandIntervalHint (canonical, range))
|
||||||
|
{
|
||||||
|
if (range.is_empty ())
|
||||||
|
{
|
||||||
|
args.emplace_back ("<all>");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
start = range.start.toISO ();
|
||||||
|
end = range.end.toISO ();
|
||||||
|
|
||||||
|
args.emplace_back ("<date>");
|
||||||
|
args.emplace_back ("-");
|
||||||
|
args.emplace_back ("<date>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hints that are not expandable to a date range are ignored.
|
||||||
|
}
|
||||||
|
else if (arg._lextype == Lexer::Type::date)
|
||||||
|
{
|
||||||
|
if (start.empty ())
|
||||||
|
start = raw;
|
||||||
|
else if (end.empty ())
|
||||||
|
end = raw;
|
||||||
|
|
||||||
|
args.emplace_back ("<date>");
|
||||||
|
}
|
||||||
|
else if (arg._lextype == Lexer::Type::duration)
|
||||||
|
{
|
||||||
|
if (duration.empty ())
|
||||||
|
duration = raw;
|
||||||
|
|
||||||
|
args.emplace_back ("<duration>");
|
||||||
|
}
|
||||||
|
else if (arg.hasTag ("KEYWORD"))
|
||||||
|
{
|
||||||
|
// Note: that KEYWORDS are not entities (why not?) and there is a list
|
||||||
|
// in CLI.cpp of them that must be maintained and synced with this
|
||||||
|
// function.
|
||||||
|
args.push_back (raw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.empty ())
|
||||||
|
{
|
||||||
|
the_range = default_range;
|
||||||
|
}
|
||||||
|
// <date>
|
||||||
|
else if (args.size () == 1 &&
|
||||||
|
args[0] == "<date>")
|
||||||
|
{
|
||||||
|
DatetimeParser dtp;
|
||||||
|
Range range = dtp.parse_range (start);
|
||||||
|
the_range = Range (range);
|
||||||
|
}
|
||||||
|
// from <date>
|
||||||
|
else if (args.size () == 2 &&
|
||||||
|
args[0] == "from" &&
|
||||||
|
args[1] == "<date>")
|
||||||
|
{
|
||||||
|
the_range = Range {Datetime (start), 0};
|
||||||
|
}
|
||||||
|
// <date> to/- <date>
|
||||||
|
else if (args.size () == 3 &&
|
||||||
|
args[0] == "<date>" &&
|
||||||
|
(args[1] == "to" || args[1] == "-") &&
|
||||||
|
args[2] == "<date>")
|
||||||
|
{
|
||||||
|
the_range = Range {Datetime (start), Datetime (end)};
|
||||||
|
}
|
||||||
|
// from <date> to/- <date>
|
||||||
|
else if (args.size () == 4 &&
|
||||||
|
args[0] == "from" &&
|
||||||
|
args[1] == "<date>" &&
|
||||||
|
(args[2] == "to" || args[2] == "-") &&
|
||||||
|
args[3] == "<date>")
|
||||||
|
{
|
||||||
|
the_range = Range {Datetime (start), Datetime (end)};
|
||||||
|
}
|
||||||
|
// <date> for <duration>
|
||||||
|
else if (args.size () == 3 &&
|
||||||
|
args[0] == "<date>" &&
|
||||||
|
args[1] == "for" &&
|
||||||
|
args[2] == "<duration>")
|
||||||
|
{
|
||||||
|
the_range = Range {Datetime (start), Datetime (start) + Duration (duration).toTime_t ()};
|
||||||
|
}
|
||||||
|
// from <date> for <duration>
|
||||||
|
else if (args.size () == 4 &&
|
||||||
|
args[0] == "from" &&
|
||||||
|
args[1] == "<date>" &&
|
||||||
|
args[2] == "for" &&
|
||||||
|
args[3] == "<duration>")
|
||||||
|
{
|
||||||
|
the_range = Range {Datetime (start), Datetime (start) + Duration (duration).toTime_t ()};
|
||||||
|
}
|
||||||
|
// <duration> before <date>
|
||||||
|
else if (args.size () == 3 &&
|
||||||
|
args[0] == "<duration>" &&
|
||||||
|
args[1] == "before" &&
|
||||||
|
args[2] == "<date>")
|
||||||
|
{
|
||||||
|
the_range = Range {Datetime (start) - Duration (duration).toTime_t (), Datetime (start)};
|
||||||
|
}
|
||||||
|
// <duration> after <date>
|
||||||
|
else if (args.size () == 3 &&
|
||||||
|
args[0] == "<duration>" &&
|
||||||
|
args[1] == "after" &&
|
||||||
|
args[2] == "<date>")
|
||||||
|
{
|
||||||
|
the_range = Range {Datetime (start), Datetime (start) + Duration (duration).toTime_t ()};
|
||||||
|
}
|
||||||
|
// <duration> ago
|
||||||
|
else if (args.size () == 2 &&
|
||||||
|
args[0] == "<duration>" &&
|
||||||
|
args[1] == "ago")
|
||||||
|
{
|
||||||
|
the_range = Range {now - Duration (duration).toTime_t (), 0};
|
||||||
|
}
|
||||||
|
// for <duration>
|
||||||
|
else if (args.size () == 2 &&
|
||||||
|
args[0] == "for" &&
|
||||||
|
args[1] == "<duration>")
|
||||||
|
{
|
||||||
|
the_range = Range {now - Duration (duration).toTime_t (), now};
|
||||||
|
}
|
||||||
|
// <duration>
|
||||||
|
else if (args.size () == 1 &&
|
||||||
|
args[0] == "<duration>")
|
||||||
|
{
|
||||||
|
the_range = Range {now - Duration (duration).toTime_t (), now};
|
||||||
|
}
|
||||||
|
// :all
|
||||||
|
else if (args.size () == 1 && args[0] == "<all>")
|
||||||
|
{
|
||||||
|
the_range = Range (0, 0);
|
||||||
|
}
|
||||||
|
// Unrecognized date range construct.
|
||||||
|
else if (! args.empty ())
|
||||||
|
{
|
||||||
|
throw std::string ("Unrecognized date range: '") + join (" ", args) + "'.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (the_range.end != 0 && the_range.start > the_range.end)
|
||||||
|
{
|
||||||
|
throw std::string ("The end of a date range must be after the start.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return the_range;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool CLI::findHint (const std::string& hint) const
|
||||||
|
{
|
||||||
|
for (auto& arg : _args)
|
||||||
|
{
|
||||||
|
if (arg.hasTag ("HINT") &&
|
||||||
|
arg.getToken () == ":" + hint)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool CLI::getComplementaryHint (const std::string& base, const bool default_value) const
|
||||||
|
{
|
||||||
|
if (findHint (base))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (findHint ("no-" + base))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return default_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool CLI::getHint (const std::string& base, const bool default_value) const
|
||||||
|
{
|
||||||
|
if (findHint (base))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return default_value;
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_CLI
|
||||||
|
#define INCLUDED_CLI
|
||||||
|
|
||||||
|
#include <Duration.h>
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <Lexer.h>
|
||||||
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
// Represents a single argument.
|
||||||
|
class A2
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
A2 (const std::string&, Lexer::Type);
|
||||||
|
bool hasTag (const std::string&) const;
|
||||||
|
void tag (const std::string&);
|
||||||
|
void unTag (const std::string&);
|
||||||
|
void attribute (const std::string&, const std::string&);
|
||||||
|
void attribute (const std::string&, int);
|
||||||
|
std::string attribute (const std::string&) const;
|
||||||
|
std::string getToken () const;
|
||||||
|
std::string dump () const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Lexer::Type _lextype {Lexer::Type::word};
|
||||||
|
std::vector <std::string> _tags {};
|
||||||
|
std::map <std::string, std::string> _attributes {};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Represents the command line.
|
||||||
|
class CLI
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CLI () = default;
|
||||||
|
void entity (const std::string&, const std::string&);
|
||||||
|
void add (const std::string&);
|
||||||
|
void analyze ();
|
||||||
|
std::vector <std::string> getWords () const;
|
||||||
|
bool canonicalize (std::string&, const std::string&, const std::string&) const;
|
||||||
|
std::string getBinary () const;
|
||||||
|
std::string getCommand () const;
|
||||||
|
bool getComplementaryHint (const std::string&, bool) const;
|
||||||
|
bool getHint(const std::string&, bool) const;
|
||||||
|
std::set <int> getIds () const;
|
||||||
|
std::set <std::string> getTags () const;
|
||||||
|
std::string getAnnotation() const;
|
||||||
|
Duration getDuration() const;
|
||||||
|
std::vector <std::string> getDomReferences () const;
|
||||||
|
Range getRange (const Range& default_range = {0, 0}) const;
|
||||||
|
std::string dump (const std::string& title = "CLI Parser") const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void handleArg0 ();
|
||||||
|
void lexArguments ();
|
||||||
|
void identifyOverrides ();
|
||||||
|
void identifyIds ();
|
||||||
|
void canonicalizeNames ();
|
||||||
|
void identifyFilter ();
|
||||||
|
bool exactMatch (const std::string&, const std::string&) const;
|
||||||
|
|
||||||
|
bool findHint (const std::string&) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::multimap <std::string, std::string> _entities {};
|
||||||
|
std::vector <A2> _original_args {};
|
||||||
|
std::vector <A2> _args {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,16 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# Relative path conversion top directories.
|
||||||
|
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/jdaugherty/work/pkgs/taskw/timew-1.7.1")
|
||||||
|
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/jdaugherty/work/pkgs/taskw/timew-1.7.1")
|
||||||
|
|
||||||
|
# Force unix paths in dependencies.
|
||||||
|
set(CMAKE_FORCE_UNIX_PATHS 1)
|
||||||
|
|
||||||
|
|
||||||
|
# The C and CXX include file regular expressions for this directory.
|
||||||
|
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
|
||||||
|
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
|
||||||
|
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
|
||||||
|
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
|
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
# Consider dependencies only in project.
|
||||||
|
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||||
|
|
||||||
|
# The set of languages for which implicit dependencies are needed:
|
||||||
|
set(CMAKE_DEPENDS_LANGUAGES
|
||||||
|
)
|
||||||
|
|
||||||
|
# The set of dependency files which are needed:
|
||||||
|
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/lex.cpp" "src/CMakeFiles/lex_executable.dir/lex.cpp.o" "gcc" "src/CMakeFiles/lex_executable.dir/lex.cpp.o.d"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Targets to which this target links.
|
||||||
|
set(CMAKE_TARGET_LINKED_INFO_FILES
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CMakeFiles/timew.dir/DependInfo.cmake"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CMakeFiles/libshared.dir/DependInfo.cmake"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Fortran module output directory.
|
||||||
|
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
|
@ -0,0 +1,112 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# Delete rule output on recipe failure.
|
||||||
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets provided by cmake.
|
||||||
|
|
||||||
|
# Disable implicit rules so canonical targets will work.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : %,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : SCCS/s.%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : s.%
|
||||||
|
|
||||||
|
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||||
|
|
||||||
|
# Command-line flag to silence nested $(MAKE).
|
||||||
|
$(VERBOSE)MAKESILENT = -s
|
||||||
|
|
||||||
|
#Suppress display of executed commands.
|
||||||
|
$(VERBOSE).SILENT:
|
||||||
|
|
||||||
|
# A target that is always out of date.
|
||||||
|
cmake_force:
|
||||||
|
.PHONY : cmake_force
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Set environment variables for the build.
|
||||||
|
|
||||||
|
# The shell in which to execute make rules.
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
# The CMake executable.
|
||||||
|
CMAKE_COMMAND = /usr/local/bin/cmake
|
||||||
|
|
||||||
|
# The command to remove a file.
|
||||||
|
RM = /usr/local/bin/cmake -E rm -f
|
||||||
|
|
||||||
|
# Escaping for special characters.
|
||||||
|
EQUALS = =
|
||||||
|
|
||||||
|
# The top-level source directory on which CMake was run.
|
||||||
|
CMAKE_SOURCE_DIR = /home/jdaugherty/work/pkgs/taskw/timew-1.7.1
|
||||||
|
|
||||||
|
# The top-level build directory on which CMake was run.
|
||||||
|
CMAKE_BINARY_DIR = /home/jdaugherty/work/pkgs/taskw/timew-1.7.1
|
||||||
|
|
||||||
|
# Include any dependencies generated for this target.
|
||||||
|
include src/CMakeFiles/lex_executable.dir/depend.make
|
||||||
|
# Include any dependencies generated by the compiler for this target.
|
||||||
|
include src/CMakeFiles/lex_executable.dir/compiler_depend.make
|
||||||
|
|
||||||
|
# Include the progress variables for this target.
|
||||||
|
include src/CMakeFiles/lex_executable.dir/progress.make
|
||||||
|
|
||||||
|
# Include the compile flags for this target's objects.
|
||||||
|
include src/CMakeFiles/lex_executable.dir/flags.make
|
||||||
|
|
||||||
|
src/CMakeFiles/lex_executable.dir/lex.cpp.o: src/CMakeFiles/lex_executable.dir/flags.make
|
||||||
|
src/CMakeFiles/lex_executable.dir/lex.cpp.o: src/lex.cpp
|
||||||
|
src/CMakeFiles/lex_executable.dir/lex.cpp.o: src/CMakeFiles/lex_executable.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object src/CMakeFiles/lex_executable.dir/lex.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/lex_executable.dir/lex.cpp.o -MF CMakeFiles/lex_executable.dir/lex.cpp.o.d -o CMakeFiles/lex_executable.dir/lex.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/lex.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/lex_executable.dir/lex.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/lex_executable.dir/lex.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/lex.cpp > CMakeFiles/lex_executable.dir/lex.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/lex_executable.dir/lex.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/lex_executable.dir/lex.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/lex.cpp -o CMakeFiles/lex_executable.dir/lex.cpp.s
|
||||||
|
|
||||||
|
# Object files for target lex_executable
|
||||||
|
lex_executable_OBJECTS = \
|
||||||
|
"CMakeFiles/lex_executable.dir/lex.cpp.o"
|
||||||
|
|
||||||
|
# External object files for target lex_executable
|
||||||
|
lex_executable_EXTERNAL_OBJECTS =
|
||||||
|
|
||||||
|
src/lex: src/CMakeFiles/lex_executable.dir/lex.cpp.o
|
||||||
|
src/lex: src/CMakeFiles/lex_executable.dir/build.make
|
||||||
|
src/lex: src/libtimew.a
|
||||||
|
src/lex: src/liblibshared.a
|
||||||
|
src/lex: src/CMakeFiles/lex_executable.dir/link.txt
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable lex"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/lex_executable.dir/link.txt --verbose=$(VERBOSE)
|
||||||
|
|
||||||
|
# Rule to build all files generated by this target.
|
||||||
|
src/CMakeFiles/lex_executable.dir/build: src/lex
|
||||||
|
.PHONY : src/CMakeFiles/lex_executable.dir/build
|
||||||
|
|
||||||
|
src/CMakeFiles/lex_executable.dir/clean:
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -P CMakeFiles/lex_executable.dir/cmake_clean.cmake
|
||||||
|
.PHONY : src/CMakeFiles/lex_executable.dir/clean
|
||||||
|
|
||||||
|
src/CMakeFiles/lex_executable.dir/depend:
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CMakeFiles/lex_executable.dir/DependInfo.cmake --color=$(COLOR)
|
||||||
|
.PHONY : src/CMakeFiles/lex_executable.dir/depend
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
file(REMOVE_RECURSE
|
||||||
|
"CMakeFiles/lex_executable.dir/lex.cpp.o"
|
||||||
|
"CMakeFiles/lex_executable.dir/lex.cpp.o.d"
|
||||||
|
"lex"
|
||||||
|
"lex.pdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Per-language clean rules from dependency scanning.
|
||||||
|
foreach(lang CXX)
|
||||||
|
include(CMakeFiles/lex_executable.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||||
|
endforeach()
|
|
@ -0,0 +1,195 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
src/CMakeFiles/lex_executable.dir/lex.cpp.o
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/lex.cpp
|
||||||
|
/usr/include/stdc-predef.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Lexer.h
|
||||||
|
/usr/include/c++/8/cstddef
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h
|
||||||
|
/usr/include/features.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/cdefs.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wordsize.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/long-double.h
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs.h
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h
|
||||||
|
/usr/include/c++/8/map
|
||||||
|
/usr/include/c++/8/bits/stl_tree.h
|
||||||
|
/usr/include/c++/8/bits/stl_algobase.h
|
||||||
|
/usr/include/c++/8/bits/functexcept.h
|
||||||
|
/usr/include/c++/8/bits/exception_defines.h
|
||||||
|
/usr/include/c++/8/bits/cpp_type_traits.h
|
||||||
|
/usr/include/c++/8/ext/type_traits.h
|
||||||
|
/usr/include/c++/8/ext/numeric_traits.h
|
||||||
|
/usr/include/c++/8/bits/stl_pair.h
|
||||||
|
/usr/include/c++/8/bits/move.h
|
||||||
|
/usr/include/c++/8/bits/concept_check.h
|
||||||
|
/usr/include/c++/8/type_traits
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_types.h
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_funcs.h
|
||||||
|
/usr/include/c++/8/debug/assertions.h
|
||||||
|
/usr/include/c++/8/bits/stl_iterator.h
|
||||||
|
/usr/include/c++/8/bits/ptr_traits.h
|
||||||
|
/usr/include/c++/8/debug/debug.h
|
||||||
|
/usr/include/c++/8/bits/predefined_ops.h
|
||||||
|
/usr/include/c++/8/bits/allocator.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h
|
||||||
|
/usr/include/c++/8/ext/new_allocator.h
|
||||||
|
/usr/include/c++/8/new
|
||||||
|
/usr/include/c++/8/exception
|
||||||
|
/usr/include/c++/8/bits/exception.h
|
||||||
|
/usr/include/c++/8/bits/exception_ptr.h
|
||||||
|
/usr/include/c++/8/bits/cxxabi_init_exception.h
|
||||||
|
/usr/include/c++/8/typeinfo
|
||||||
|
/usr/include/c++/8/bits/hash_bytes.h
|
||||||
|
/usr/include/c++/8/bits/nested_exception.h
|
||||||
|
/usr/include/c++/8/bits/memoryfwd.h
|
||||||
|
/usr/include/c++/8/bits/stl_function.h
|
||||||
|
/usr/include/c++/8/backward/binders.h
|
||||||
|
/usr/include/c++/8/ext/alloc_traits.h
|
||||||
|
/usr/include/c++/8/bits/alloc_traits.h
|
||||||
|
/usr/include/c++/8/ext/aligned_buffer.h
|
||||||
|
/usr/include/c++/8/bits/node_handle.h
|
||||||
|
/usr/include/c++/8/optional
|
||||||
|
/usr/include/c++/8/utility
|
||||||
|
/usr/include/c++/8/bits/stl_relops.h
|
||||||
|
/usr/include/c++/8/initializer_list
|
||||||
|
/usr/include/c++/8/stdexcept
|
||||||
|
/usr/include/c++/8/string
|
||||||
|
/usr/include/c++/8/bits/stringfwd.h
|
||||||
|
/usr/include/c++/8/bits/char_traits.h
|
||||||
|
/usr/include/c++/8/bits/postypes.h
|
||||||
|
/usr/include/c++/8/cwchar
|
||||||
|
/usr/include/wchar.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn-common.h
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wchar.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/FILE.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h
|
||||||
|
/usr/include/c++/8/cstdint
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h
|
||||||
|
/usr/include/stdint.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/typesizes.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h
|
||||||
|
/usr/include/c++/8/bits/localefwd.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h
|
||||||
|
/usr/include/c++/8/clocale
|
||||||
|
/usr/include/locale.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/locale.h
|
||||||
|
/usr/include/c++/8/iosfwd
|
||||||
|
/usr/include/c++/8/cctype
|
||||||
|
/usr/include/ctype.h
|
||||||
|
/usr/include/endian.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/endian.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap-16.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h
|
||||||
|
/usr/include/c++/8/bits/ostream_insert.h
|
||||||
|
/usr/include/c++/8/bits/cxxabi_forced.h
|
||||||
|
/usr/include/c++/8/bits/range_access.h
|
||||||
|
/usr/include/c++/8/bits/basic_string.h
|
||||||
|
/usr/include/c++/8/ext/atomicity.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h
|
||||||
|
/usr/include/pthread.h
|
||||||
|
/usr/include/sched.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/time_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sched.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/cpu-set.h
|
||||||
|
/usr/include/time.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/time.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/timex.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/setjmp.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h
|
||||||
|
/usr/include/c++/8/string_view
|
||||||
|
/usr/include/c++/8/limits
|
||||||
|
/usr/include/c++/8/bits/functional_hash.h
|
||||||
|
/usr/include/c++/8/bits/string_view.tcc
|
||||||
|
/usr/include/c++/8/ext/string_conversions.h
|
||||||
|
/usr/include/c++/8/cstdlib
|
||||||
|
/usr/include/stdlib.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitflags.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitstatus.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/types.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/select.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/select.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/sysmacros.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sysmacros.h
|
||||||
|
/usr/include/alloca.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h
|
||||||
|
/usr/include/c++/8/bits/std_abs.h
|
||||||
|
/usr/include/c++/8/cstdio
|
||||||
|
/usr/include/stdio.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libio.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/_G_config.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h
|
||||||
|
/usr/include/c++/8/cerrno
|
||||||
|
/usr/include/errno.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/errno.h
|
||||||
|
/usr/include/linux/errno.h
|
||||||
|
/usr/include/x86_64-linux-gnu/asm/errno.h
|
||||||
|
/usr/include/asm-generic/errno.h
|
||||||
|
/usr/include/asm-generic/errno-base.h
|
||||||
|
/usr/include/c++/8/bits/basic_string.tcc
|
||||||
|
/usr/include/c++/8/bits/enable_special_members.h
|
||||||
|
/usr/include/c++/8/bits/stl_map.h
|
||||||
|
/usr/include/c++/8/tuple
|
||||||
|
/usr/include/c++/8/array
|
||||||
|
/usr/include/c++/8/bits/uses_allocator.h
|
||||||
|
/usr/include/c++/8/bits/invoke.h
|
||||||
|
/usr/include/c++/8/bits/stl_multimap.h
|
||||||
|
/usr/include/c++/8/vector
|
||||||
|
/usr/include/c++/8/bits/stl_construct.h
|
||||||
|
/usr/include/c++/8/bits/stl_uninitialized.h
|
||||||
|
/usr/include/c++/8/bits/stl_vector.h
|
||||||
|
/usr/include/c++/8/bits/stl_bvector.h
|
||||||
|
/usr/include/c++/8/bits/vector.tcc
|
||||||
|
/usr/include/c++/8/iostream
|
||||||
|
/usr/include/c++/8/ostream
|
||||||
|
/usr/include/c++/8/ios
|
||||||
|
/usr/include/c++/8/bits/ios_base.h
|
||||||
|
/usr/include/c++/8/bits/locale_classes.h
|
||||||
|
/usr/include/c++/8/bits/locale_classes.tcc
|
||||||
|
/usr/include/c++/8/system_error
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h
|
||||||
|
/usr/include/c++/8/streambuf
|
||||||
|
/usr/include/c++/8/bits/streambuf.tcc
|
||||||
|
/usr/include/c++/8/bits/basic_ios.h
|
||||||
|
/usr/include/c++/8/bits/locale_facets.h
|
||||||
|
/usr/include/c++/8/cwctype
|
||||||
|
/usr/include/wctype.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h
|
||||||
|
/usr/include/c++/8/bits/streambuf_iterator.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h
|
||||||
|
/usr/include/c++/8/bits/locale_facets.tcc
|
||||||
|
/usr/include/c++/8/bits/basic_ios.tcc
|
||||||
|
/usr/include/c++/8/bits/ostream.tcc
|
||||||
|
/usr/include/c++/8/istream
|
||||||
|
/usr/include/c++/8/bits/istream.tcc
|
||||||
|
|
|
@ -0,0 +1,574 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
src/CMakeFiles/lex_executable.dir/lex.cpp.o: src/lex.cpp \
|
||||||
|
/usr/include/stdc-predef.h \
|
||||||
|
src/libshared/src/Lexer.h \
|
||||||
|
/usr/include/c++/8/cstddef \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h \
|
||||||
|
/usr/include/features.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/long-double.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h \
|
||||||
|
/usr/include/c++/8/map \
|
||||||
|
/usr/include/c++/8/bits/stl_tree.h \
|
||||||
|
/usr/include/c++/8/bits/stl_algobase.h \
|
||||||
|
/usr/include/c++/8/bits/functexcept.h \
|
||||||
|
/usr/include/c++/8/bits/exception_defines.h \
|
||||||
|
/usr/include/c++/8/bits/cpp_type_traits.h \
|
||||||
|
/usr/include/c++/8/ext/type_traits.h \
|
||||||
|
/usr/include/c++/8/ext/numeric_traits.h \
|
||||||
|
/usr/include/c++/8/bits/stl_pair.h \
|
||||||
|
/usr/include/c++/8/bits/move.h \
|
||||||
|
/usr/include/c++/8/bits/concept_check.h \
|
||||||
|
/usr/include/c++/8/type_traits \
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_types.h \
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_funcs.h \
|
||||||
|
/usr/include/c++/8/debug/assertions.h \
|
||||||
|
/usr/include/c++/8/bits/stl_iterator.h \
|
||||||
|
/usr/include/c++/8/bits/ptr_traits.h \
|
||||||
|
/usr/include/c++/8/debug/debug.h \
|
||||||
|
/usr/include/c++/8/bits/predefined_ops.h \
|
||||||
|
/usr/include/c++/8/bits/allocator.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h \
|
||||||
|
/usr/include/c++/8/ext/new_allocator.h \
|
||||||
|
/usr/include/c++/8/new \
|
||||||
|
/usr/include/c++/8/exception \
|
||||||
|
/usr/include/c++/8/bits/exception.h \
|
||||||
|
/usr/include/c++/8/bits/exception_ptr.h \
|
||||||
|
/usr/include/c++/8/bits/cxxabi_init_exception.h \
|
||||||
|
/usr/include/c++/8/typeinfo \
|
||||||
|
/usr/include/c++/8/bits/hash_bytes.h \
|
||||||
|
/usr/include/c++/8/bits/nested_exception.h \
|
||||||
|
/usr/include/c++/8/bits/memoryfwd.h \
|
||||||
|
/usr/include/c++/8/bits/stl_function.h \
|
||||||
|
/usr/include/c++/8/backward/binders.h \
|
||||||
|
/usr/include/c++/8/ext/alloc_traits.h \
|
||||||
|
/usr/include/c++/8/bits/alloc_traits.h \
|
||||||
|
/usr/include/c++/8/ext/aligned_buffer.h \
|
||||||
|
/usr/include/c++/8/bits/node_handle.h \
|
||||||
|
/usr/include/c++/8/optional \
|
||||||
|
/usr/include/c++/8/utility \
|
||||||
|
/usr/include/c++/8/bits/stl_relops.h \
|
||||||
|
/usr/include/c++/8/initializer_list \
|
||||||
|
/usr/include/c++/8/stdexcept \
|
||||||
|
/usr/include/c++/8/string \
|
||||||
|
/usr/include/c++/8/bits/stringfwd.h \
|
||||||
|
/usr/include/c++/8/bits/char_traits.h \
|
||||||
|
/usr/include/c++/8/bits/postypes.h \
|
||||||
|
/usr/include/c++/8/cwchar \
|
||||||
|
/usr/include/wchar.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wchar.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
|
||||||
|
/usr/include/c++/8/cstdint \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h \
|
||||||
|
/usr/include/stdint.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
|
||||||
|
/usr/include/c++/8/bits/localefwd.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h \
|
||||||
|
/usr/include/c++/8/clocale \
|
||||||
|
/usr/include/locale.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/locale.h \
|
||||||
|
/usr/include/c++/8/iosfwd \
|
||||||
|
/usr/include/c++/8/cctype \
|
||||||
|
/usr/include/ctype.h \
|
||||||
|
/usr/include/endian.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/endian.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
|
||||||
|
/usr/include/c++/8/bits/ostream_insert.h \
|
||||||
|
/usr/include/c++/8/bits/cxxabi_forced.h \
|
||||||
|
/usr/include/c++/8/bits/range_access.h \
|
||||||
|
/usr/include/c++/8/bits/basic_string.h \
|
||||||
|
/usr/include/c++/8/ext/atomicity.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h \
|
||||||
|
/usr/include/pthread.h \
|
||||||
|
/usr/include/sched.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sched.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
|
||||||
|
/usr/include/time.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/time.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/timex.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h \
|
||||||
|
/usr/include/c++/8/string_view \
|
||||||
|
/usr/include/c++/8/limits \
|
||||||
|
/usr/include/c++/8/bits/functional_hash.h \
|
||||||
|
/usr/include/c++/8/bits/string_view.tcc \
|
||||||
|
/usr/include/c++/8/ext/string_conversions.h \
|
||||||
|
/usr/include/c++/8/cstdlib \
|
||||||
|
/usr/include/stdlib.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitflags.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/types.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/select.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/select.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/sysmacros.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sysmacros.h \
|
||||||
|
/usr/include/alloca.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
|
||||||
|
/usr/include/c++/8/bits/std_abs.h \
|
||||||
|
/usr/include/c++/8/cstdio \
|
||||||
|
/usr/include/stdio.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libio.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/_G_config.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
|
||||||
|
/usr/include/c++/8/cerrno \
|
||||||
|
/usr/include/errno.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/errno.h \
|
||||||
|
/usr/include/linux/errno.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/asm/errno.h \
|
||||||
|
/usr/include/asm-generic/errno.h \
|
||||||
|
/usr/include/asm-generic/errno-base.h \
|
||||||
|
/usr/include/c++/8/bits/basic_string.tcc \
|
||||||
|
/usr/include/c++/8/bits/enable_special_members.h \
|
||||||
|
/usr/include/c++/8/bits/stl_map.h \
|
||||||
|
/usr/include/c++/8/tuple \
|
||||||
|
/usr/include/c++/8/array \
|
||||||
|
/usr/include/c++/8/bits/uses_allocator.h \
|
||||||
|
/usr/include/c++/8/bits/invoke.h \
|
||||||
|
/usr/include/c++/8/bits/stl_multimap.h \
|
||||||
|
/usr/include/c++/8/vector \
|
||||||
|
/usr/include/c++/8/bits/stl_construct.h \
|
||||||
|
/usr/include/c++/8/bits/stl_uninitialized.h \
|
||||||
|
/usr/include/c++/8/bits/stl_vector.h \
|
||||||
|
/usr/include/c++/8/bits/stl_bvector.h \
|
||||||
|
/usr/include/c++/8/bits/vector.tcc \
|
||||||
|
/usr/include/c++/8/iostream \
|
||||||
|
/usr/include/c++/8/ostream \
|
||||||
|
/usr/include/c++/8/ios \
|
||||||
|
/usr/include/c++/8/bits/ios_base.h \
|
||||||
|
/usr/include/c++/8/bits/locale_classes.h \
|
||||||
|
/usr/include/c++/8/bits/locale_classes.tcc \
|
||||||
|
/usr/include/c++/8/system_error \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h \
|
||||||
|
/usr/include/c++/8/streambuf \
|
||||||
|
/usr/include/c++/8/bits/streambuf.tcc \
|
||||||
|
/usr/include/c++/8/bits/basic_ios.h \
|
||||||
|
/usr/include/c++/8/bits/locale_facets.h \
|
||||||
|
/usr/include/c++/8/cwctype \
|
||||||
|
/usr/include/wctype.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h \
|
||||||
|
/usr/include/c++/8/bits/streambuf_iterator.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h \
|
||||||
|
/usr/include/c++/8/bits/locale_facets.tcc \
|
||||||
|
/usr/include/c++/8/bits/basic_ios.tcc \
|
||||||
|
/usr/include/c++/8/bits/ostream.tcc \
|
||||||
|
/usr/include/c++/8/istream \
|
||||||
|
/usr/include/c++/8/bits/istream.tcc
|
||||||
|
|
||||||
|
|
||||||
|
/usr/include/c++/8/istream:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/ostream.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/basic_ios.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/streambuf_iterator.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h:
|
||||||
|
|
||||||
|
/usr/include/wctype.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cwctype:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_facets.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/basic_ios.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/system_error:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_classes.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ios:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ostream:
|
||||||
|
|
||||||
|
/usr/include/c++/8/iostream:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/vector.tcc:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types.h:
|
||||||
|
|
||||||
|
/usr/include/wchar.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/array:
|
||||||
|
|
||||||
|
/usr/include/c++/8/streambuf:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/setjmp.h:
|
||||||
|
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/predefined_ops.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/new_allocator.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_uninitialized.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wchar.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/exception_ptr.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/char_traits.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/string:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_relops.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/range_access.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/alloc_traits.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/alloc_traits.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/new:
|
||||||
|
|
||||||
|
/usr/include/c++/8/stdexcept:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn-common.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/locale.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/ostream_insert.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_funcs.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/cxxabi_init_exception.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wordsize.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/string_conversions.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/initializer_list:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/nested_exception.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/backward/binders.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/exception:
|
||||||
|
|
||||||
|
/usr/include/stdint.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cstdint:
|
||||||
|
|
||||||
|
/usr/include/c++/8/map:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_tree.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cstddef:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/istream.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/debug/assertions.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libio.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/cdefs.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/allocator.h:
|
||||||
|
|
||||||
|
/usr/include/stdc-predef.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/limits:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/basic_string.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/optional:
|
||||||
|
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitflags.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/invoke.h:
|
||||||
|
|
||||||
|
src/lex.cpp:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_classes.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/type_traits:
|
||||||
|
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h:
|
||||||
|
|
||||||
|
src/libshared/src/Lexer.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/FILE.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/select.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_types.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/postypes.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_algobase.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/functexcept.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/aligned_buffer.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/time_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
|
||||||
|
|
||||||
|
/usr/include/stdlib.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cwchar:
|
||||||
|
|
||||||
|
/usr/include/ctype.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/errno.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/cpp_type_traits.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/type_traits.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/clocale:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stringfwd.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/node_handle.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_iterator.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/ptr_traits.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_pair.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/concept_check.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/debug/debug.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/exception.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/localefwd.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/typesizes.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/streambuf.tcc:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/cpu-set.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/hash_bytes.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/iosfwd:
|
||||||
|
|
||||||
|
/usr/include/locale.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cctype:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/uses_allocator.h:
|
||||||
|
|
||||||
|
/usr/include/endian.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/ios_base.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/endian.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/cxxabi_forced.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_facets.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/basic_string.h:
|
||||||
|
|
||||||
|
/usr/include/linux/errno.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/move.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/atomicity.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h:
|
||||||
|
|
||||||
|
/usr/include/pthread.h:
|
||||||
|
|
||||||
|
/usr/include/errno.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h:
|
||||||
|
|
||||||
|
/usr/include/sched.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/typeinfo:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/string_view.tcc:
|
||||||
|
|
||||||
|
/usr/include/time.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/time.h:
|
||||||
|
|
||||||
|
/usr/include/alloca.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/timex.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/long-double.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/string_view:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/functional_hash.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cstdlib:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/numeric_traits.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/exception_defines.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/std_abs.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/types.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/select.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
|
||||||
|
|
||||||
|
/usr/include/stdio.h:
|
||||||
|
|
||||||
|
/usr/include/features.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sysmacros.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_vector.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/memoryfwd.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cstdio:
|
||||||
|
|
||||||
|
/usr/include/c++/8/utility:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/_G_config.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sched.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cerrno:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/asm/errno.h:
|
||||||
|
|
||||||
|
/usr/include/asm-generic/errno.h:
|
||||||
|
|
||||||
|
/usr/include/asm-generic/errno-base.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_construct.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/enable_special_members.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_function.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_map.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/tuple:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_multimap.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/vector:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_bvector.h:
|
|
@ -0,0 +1,2 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Timestamp file for compiler generated dependencies management for lex_executable.
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Empty dependencies file for lex_executable.
|
||||||
|
# This may be replaced when dependencies are built.
|
|
@ -0,0 +1,10 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# compile CXX with /usr/bin/c++
|
||||||
|
CXX_DEFINES =
|
||||||
|
|
||||||
|
CXX_INCLUDES = -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1 -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/commands -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src
|
||||||
|
|
||||||
|
CXX_FLAGS = -Wall -Wextra -Wsign-compare -Wreturn-type -g -std=gnu++17
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
/usr/bin/c++ -Wall -Wextra -Wsign-compare -Wreturn-type -g CMakeFiles/lex_executable.dir/lex.cpp.o -o lex libtimew.a liblibshared.a
|
|
@ -0,0 +1,3 @@
|
||||||
|
CMAKE_PROGRESS_1 =
|
||||||
|
CMAKE_PROGRESS_2 = 35
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
|
||||||
|
# Consider dependencies only in project.
|
||||||
|
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||||
|
|
||||||
|
# The set of languages for which implicit dependencies are needed:
|
||||||
|
set(CMAKE_DEPENDS_LANGUAGES
|
||||||
|
)
|
||||||
|
|
||||||
|
# The set of dependency files which are needed:
|
||||||
|
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Args.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Color.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Composite.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Configuration.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Datetime.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Duration.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/FS.cpp" "src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/JSON.cpp" "src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Lexer.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Msg.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Palette.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Pig.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/RX.cpp" "src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Table.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Timer.cpp" "src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/format.cpp" "src/CMakeFiles/libshared.dir/libshared/src/format.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/format.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/shared.cpp" "src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/unicode.cpp" "src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/utf8.cpp" "src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o" "gcc" "src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o.d"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Targets to which this target links.
|
||||||
|
set(CMAKE_TARGET_LINKED_INFO_FILES
|
||||||
|
)
|
||||||
|
|
||||||
|
# Fortran module output directory.
|
||||||
|
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
|
@ -0,0 +1,399 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# Delete rule output on recipe failure.
|
||||||
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets provided by cmake.
|
||||||
|
|
||||||
|
# Disable implicit rules so canonical targets will work.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : %,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : SCCS/s.%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : s.%
|
||||||
|
|
||||||
|
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||||
|
|
||||||
|
# Command-line flag to silence nested $(MAKE).
|
||||||
|
$(VERBOSE)MAKESILENT = -s
|
||||||
|
|
||||||
|
#Suppress display of executed commands.
|
||||||
|
$(VERBOSE).SILENT:
|
||||||
|
|
||||||
|
# A target that is always out of date.
|
||||||
|
cmake_force:
|
||||||
|
.PHONY : cmake_force
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Set environment variables for the build.
|
||||||
|
|
||||||
|
# The shell in which to execute make rules.
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
# The CMake executable.
|
||||||
|
CMAKE_COMMAND = /usr/local/bin/cmake
|
||||||
|
|
||||||
|
# The command to remove a file.
|
||||||
|
RM = /usr/local/bin/cmake -E rm -f
|
||||||
|
|
||||||
|
# Escaping for special characters.
|
||||||
|
EQUALS = =
|
||||||
|
|
||||||
|
# The top-level source directory on which CMake was run.
|
||||||
|
CMAKE_SOURCE_DIR = /home/jdaugherty/work/pkgs/taskw/timew-1.7.1
|
||||||
|
|
||||||
|
# The top-level build directory on which CMake was run.
|
||||||
|
CMAKE_BINARY_DIR = /home/jdaugherty/work/pkgs/taskw/timew-1.7.1
|
||||||
|
|
||||||
|
# Include any dependencies generated for this target.
|
||||||
|
include src/CMakeFiles/libshared.dir/depend.make
|
||||||
|
# Include any dependencies generated by the compiler for this target.
|
||||||
|
include src/CMakeFiles/libshared.dir/compiler_depend.make
|
||||||
|
|
||||||
|
# Include the progress variables for this target.
|
||||||
|
include src/CMakeFiles/libshared.dir/progress.make
|
||||||
|
|
||||||
|
# Include the compile flags for this target's objects.
|
||||||
|
include src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.o: src/libshared/src/Args.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Args.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Args.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Args.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Args.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Args.cpp > CMakeFiles/libshared.dir/libshared/src/Args.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Args.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Args.cpp -o CMakeFiles/libshared.dir/libshared/src/Args.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.o: src/libshared/src/Color.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Color.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Color.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Color.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Color.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Color.cpp > CMakeFiles/libshared.dir/libshared/src/Color.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Color.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Color.cpp -o CMakeFiles/libshared.dir/libshared/src/Color.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o: src/libshared/src/Composite.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Composite.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Composite.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Composite.cpp > CMakeFiles/libshared.dir/libshared/src/Composite.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Composite.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Composite.cpp -o CMakeFiles/libshared.dir/libshared/src/Composite.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o: src/libshared/src/Configuration.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Configuration.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Configuration.cpp > CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Configuration.cpp -o CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o: src/libshared/src/Datetime.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Datetime.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Datetime.cpp > CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Datetime.cpp -o CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o: src/libshared/src/Duration.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Duration.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Duration.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Duration.cpp > CMakeFiles/libshared.dir/libshared/src/Duration.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Duration.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Duration.cpp -o CMakeFiles/libshared.dir/libshared/src/Duration.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.o: src/libshared/src/FS.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/FS.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/FS.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/FS.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/FS.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/FS.cpp > CMakeFiles/libshared.dir/libshared/src/FS.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/FS.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/FS.cpp -o CMakeFiles/libshared.dir/libshared/src/FS.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o: src/libshared/src/JSON.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/JSON.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/JSON.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/JSON.cpp > CMakeFiles/libshared.dir/libshared/src/JSON.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/JSON.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/JSON.cpp -o CMakeFiles/libshared.dir/libshared/src/JSON.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o: src/libshared/src/Lexer.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Lexer.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Lexer.cpp > CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Lexer.cpp -o CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o: src/libshared/src/Msg.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Msg.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Msg.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Msg.cpp > CMakeFiles/libshared.dir/libshared/src/Msg.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Msg.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Msg.cpp -o CMakeFiles/libshared.dir/libshared/src/Msg.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o: src/libshared/src/Palette.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Palette.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Palette.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Palette.cpp > CMakeFiles/libshared.dir/libshared/src/Palette.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Palette.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Palette.cpp -o CMakeFiles/libshared.dir/libshared/src/Palette.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o: src/libshared/src/Pig.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Pig.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Pig.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Pig.cpp > CMakeFiles/libshared.dir/libshared/src/Pig.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Pig.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Pig.cpp -o CMakeFiles/libshared.dir/libshared/src/Pig.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.o: src/libshared/src/RX.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/RX.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/RX.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/RX.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/RX.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/RX.cpp > CMakeFiles/libshared.dir/libshared/src/RX.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/RX.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/RX.cpp -o CMakeFiles/libshared.dir/libshared/src/RX.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.o: src/libshared/src/Table.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Table.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Table.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Table.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Table.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Table.cpp > CMakeFiles/libshared.dir/libshared/src/Table.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Table.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Table.cpp -o CMakeFiles/libshared.dir/libshared/src/Table.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o: src/libshared/src/Timer.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Timer.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/Timer.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Timer.cpp > CMakeFiles/libshared.dir/libshared/src/Timer.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/Timer.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Timer.cpp -o CMakeFiles/libshared.dir/libshared/src/Timer.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/format.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/format.cpp.o: src/libshared/src/format.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/format.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/format.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/format.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/format.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/format.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/format.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/format.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/format.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/format.cpp > CMakeFiles/libshared.dir/libshared/src/format.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/format.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/format.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/format.cpp -o CMakeFiles/libshared.dir/libshared/src/format.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.o: src/libshared/src/shared.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/shared.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/shared.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/shared.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/shared.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/shared.cpp > CMakeFiles/libshared.dir/libshared/src/shared.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/shared.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/shared.cpp -o CMakeFiles/libshared.dir/libshared/src/shared.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o: src/libshared/src/unicode.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/unicode.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/unicode.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/unicode.cpp > CMakeFiles/libshared.dir/libshared/src/unicode.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/unicode.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/unicode.cpp -o CMakeFiles/libshared.dir/libshared/src/unicode.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o: src/CMakeFiles/libshared.dir/flags.make
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o: src/libshared/src/utf8.cpp
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o: src/CMakeFiles/libshared.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building CXX object src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o -MF CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o.d -o CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/utf8.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/libshared.dir/libshared/src/utf8.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/utf8.cpp > CMakeFiles/libshared.dir/libshared/src/utf8.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/libshared.dir/libshared/src/utf8.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/utf8.cpp -o CMakeFiles/libshared.dir/libshared/src/utf8.cpp.s
|
||||||
|
|
||||||
|
# Object files for target libshared
|
||||||
|
libshared_OBJECTS = \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Args.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Color.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/FS.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/RX.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Table.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/format.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/shared.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o" \
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o"
|
||||||
|
|
||||||
|
# External object files for target libshared
|
||||||
|
libshared_EXTERNAL_OBJECTS =
|
||||||
|
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Args.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Color.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/FS.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/RX.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Table.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/format.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/shared.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/build.make
|
||||||
|
src/liblibshared.a: src/CMakeFiles/libshared.dir/link.txt
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Linking CXX static library liblibshared.a"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -P CMakeFiles/libshared.dir/cmake_clean_target.cmake
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/libshared.dir/link.txt --verbose=$(VERBOSE)
|
||||||
|
|
||||||
|
# Rule to build all files generated by this target.
|
||||||
|
src/CMakeFiles/libshared.dir/build: src/liblibshared.a
|
||||||
|
.PHONY : src/CMakeFiles/libshared.dir/build
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/clean:
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -P CMakeFiles/libshared.dir/cmake_clean.cmake
|
||||||
|
.PHONY : src/CMakeFiles/libshared.dir/clean
|
||||||
|
|
||||||
|
src/CMakeFiles/libshared.dir/depend:
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CMakeFiles/libshared.dir/DependInfo.cmake --color=$(COLOR)
|
||||||
|
.PHONY : src/CMakeFiles/libshared.dir/depend
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
file(REMOVE_RECURSE
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Args.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Args.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Color.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Color.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/FS.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/FS.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/RX.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/RX.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Table.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Table.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/format.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/format.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/shared.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/shared.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o.d"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o"
|
||||||
|
"CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o.d"
|
||||||
|
"liblibshared.a"
|
||||||
|
"liblibshared.pdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Per-language clean rules from dependency scanning.
|
||||||
|
foreach(lang CXX)
|
||||||
|
include(CMakeFiles/libshared.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||||
|
endforeach()
|
|
@ -0,0 +1,3 @@
|
||||||
|
file(REMOVE_RECURSE
|
||||||
|
"liblibshared.a"
|
||||||
|
)
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,2 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Timestamp file for compiler generated dependencies management for libshared.
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Empty dependencies file for libshared.
|
||||||
|
# This may be replaced when dependencies are built.
|
|
@ -0,0 +1,10 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# compile CXX with /usr/bin/c++
|
||||||
|
CXX_DEFINES =
|
||||||
|
|
||||||
|
CXX_INCLUDES = -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1 -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/commands -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src
|
||||||
|
|
||||||
|
CXX_FLAGS = -Wall -Wextra -Wsign-compare -Wreturn-type -g -std=gnu++17
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
/usr/bin/ar qc liblibshared.a CMakeFiles/libshared.dir/libshared/src/Args.cpp.o CMakeFiles/libshared.dir/libshared/src/Color.cpp.o CMakeFiles/libshared.dir/libshared/src/Composite.cpp.o CMakeFiles/libshared.dir/libshared/src/Configuration.cpp.o CMakeFiles/libshared.dir/libshared/src/Datetime.cpp.o CMakeFiles/libshared.dir/libshared/src/Duration.cpp.o CMakeFiles/libshared.dir/libshared/src/FS.cpp.o CMakeFiles/libshared.dir/libshared/src/JSON.cpp.o CMakeFiles/libshared.dir/libshared/src/Lexer.cpp.o CMakeFiles/libshared.dir/libshared/src/Msg.cpp.o CMakeFiles/libshared.dir/libshared/src/Palette.cpp.o CMakeFiles/libshared.dir/libshared/src/Pig.cpp.o CMakeFiles/libshared.dir/libshared/src/RX.cpp.o CMakeFiles/libshared.dir/libshared/src/Table.cpp.o CMakeFiles/libshared.dir/libshared/src/Timer.cpp.o CMakeFiles/libshared.dir/libshared/src/format.cpp.o CMakeFiles/libshared.dir/libshared/src/shared.cpp.o CMakeFiles/libshared.dir/libshared/src/unicode.cpp.o CMakeFiles/libshared.dir/libshared/src/utf8.cpp.o
|
||||||
|
/usr/bin/ranlib liblibshared.a
|
|
@ -0,0 +1,21 @@
|
||||||
|
CMAKE_PROGRESS_1 = 36
|
||||||
|
CMAKE_PROGRESS_2 =
|
||||||
|
CMAKE_PROGRESS_3 = 37
|
||||||
|
CMAKE_PROGRESS_4 =
|
||||||
|
CMAKE_PROGRESS_5 = 38
|
||||||
|
CMAKE_PROGRESS_6 = 39
|
||||||
|
CMAKE_PROGRESS_7 =
|
||||||
|
CMAKE_PROGRESS_8 = 40
|
||||||
|
CMAKE_PROGRESS_9 =
|
||||||
|
CMAKE_PROGRESS_10 = 41
|
||||||
|
CMAKE_PROGRESS_11 = 42
|
||||||
|
CMAKE_PROGRESS_12 =
|
||||||
|
CMAKE_PROGRESS_13 = 43
|
||||||
|
CMAKE_PROGRESS_14 =
|
||||||
|
CMAKE_PROGRESS_15 = 44
|
||||||
|
CMAKE_PROGRESS_16 =
|
||||||
|
CMAKE_PROGRESS_17 = 45
|
||||||
|
CMAKE_PROGRESS_18 = 46
|
||||||
|
CMAKE_PROGRESS_19 =
|
||||||
|
CMAKE_PROGRESS_20 = 47
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
57
|
|
@ -0,0 +1,56 @@
|
||||||
|
|
||||||
|
# Consider dependencies only in project.
|
||||||
|
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||||
|
|
||||||
|
# The set of languages for which implicit dependencies are needed:
|
||||||
|
set(CMAKE_DEPENDS_LANGUAGES
|
||||||
|
)
|
||||||
|
|
||||||
|
# The set of dependency files which are needed:
|
||||||
|
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/AtomicFile.cpp" "src/CMakeFiles/timew.dir/AtomicFile.cpp.o" "gcc" "src/CMakeFiles/timew.dir/AtomicFile.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CLI.cpp" "src/CMakeFiles/timew.dir/CLI.cpp.o" "gcc" "src/CMakeFiles/timew.dir/CLI.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Chart.cpp" "src/CMakeFiles/timew.dir/Chart.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Chart.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Database.cpp" "src/CMakeFiles/timew.dir/Database.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Database.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Datafile.cpp" "src/CMakeFiles/timew.dir/Datafile.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Datafile.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/DatetimeParser.cpp" "src/CMakeFiles/timew.dir/DatetimeParser.cpp.o" "gcc" "src/CMakeFiles/timew.dir/DatetimeParser.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Exclusion.cpp" "src/CMakeFiles/timew.dir/Exclusion.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Exclusion.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Extensions.cpp" "src/CMakeFiles/timew.dir/Extensions.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Extensions.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/ExtensionsTable.cpp" "src/CMakeFiles/timew.dir/ExtensionsTable.cpp.o" "gcc" "src/CMakeFiles/timew.dir/ExtensionsTable.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/GapsTable.cpp" "src/CMakeFiles/timew.dir/GapsTable.cpp.o" "gcc" "src/CMakeFiles/timew.dir/GapsTable.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Interval.cpp" "src/CMakeFiles/timew.dir/Interval.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Interval.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFactory.cpp" "src/CMakeFiles/timew.dir/IntervalFactory.cpp.o" "gcc" "src/CMakeFiles/timew.dir/IntervalFactory.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilter.cpp" "src/CMakeFiles/timew.dir/IntervalFilter.cpp.o" "gcc" "src/CMakeFiles/timew.dir/IntervalFilter.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllInRange.cpp" "src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o" "gcc" "src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllWithIds.cpp" "src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o" "gcc" "src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllWithTags.cpp" "src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o" "gcc" "src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAndGroup.cpp" "src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o" "gcc" "src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterFirstOf.cpp" "src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o" "gcc" "src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterTagsDisjoint.cpp" "src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o" "gcc" "src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Journal.cpp" "src/CMakeFiles/timew.dir/Journal.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Journal.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Range.cpp" "src/CMakeFiles/timew.dir/Range.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Range.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Rules.cpp" "src/CMakeFiles/timew.dir/Rules.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Rules.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/SummaryTable.cpp" "src/CMakeFiles/timew.dir/SummaryTable.cpp.o" "gcc" "src/CMakeFiles/timew.dir/SummaryTable.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagDescription.cpp" "src/CMakeFiles/timew.dir/TagDescription.cpp.o" "gcc" "src/CMakeFiles/timew.dir/TagDescription.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfo.cpp" "src/CMakeFiles/timew.dir/TagInfo.cpp.o" "gcc" "src/CMakeFiles/timew.dir/TagInfo.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfoDatabase.cpp" "src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.o" "gcc" "src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagsTable.cpp" "src/CMakeFiles/timew.dir/TagsTable.cpp.o" "gcc" "src/CMakeFiles/timew.dir/TagsTable.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Transaction.cpp" "src/CMakeFiles/timew.dir/Transaction.cpp.o" "gcc" "src/CMakeFiles/timew.dir/Transaction.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TransactionsFactory.cpp" "src/CMakeFiles/timew.dir/TransactionsFactory.cpp.o" "gcc" "src/CMakeFiles/timew.dir/TransactionsFactory.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/UndoAction.cpp" "src/CMakeFiles/timew.dir/UndoAction.cpp.o" "gcc" "src/CMakeFiles/timew.dir/UndoAction.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/data.cpp" "src/CMakeFiles/timew.dir/data.cpp.o" "gcc" "src/CMakeFiles/timew.dir/data.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/dom.cpp" "src/CMakeFiles/timew.dir/dom.cpp.o" "gcc" "src/CMakeFiles/timew.dir/dom.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/helper.cpp" "src/CMakeFiles/timew.dir/helper.cpp.o" "gcc" "src/CMakeFiles/timew.dir/helper.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/init.cpp" "src/CMakeFiles/timew.dir/init.cpp.o" "gcc" "src/CMakeFiles/timew.dir/init.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/log.cpp" "src/CMakeFiles/timew.dir/log.cpp.o" "gcc" "src/CMakeFiles/timew.dir/log.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/paths.cpp" "src/CMakeFiles/timew.dir/paths.cpp.o" "gcc" "src/CMakeFiles/timew.dir/paths.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/util.cpp" "src/CMakeFiles/timew.dir/util.cpp.o" "gcc" "src/CMakeFiles/timew.dir/util.cpp.o.d"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/validate.cpp" "src/CMakeFiles/timew.dir/validate.cpp.o" "gcc" "src/CMakeFiles/timew.dir/validate.cpp.o.d"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Targets to which this target links.
|
||||||
|
set(CMAKE_TARGET_LINKED_INFO_FILES
|
||||||
|
)
|
||||||
|
|
||||||
|
# Fortran module output directory.
|
||||||
|
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
|
@ -0,0 +1,703 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# Delete rule output on recipe failure.
|
||||||
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets provided by cmake.
|
||||||
|
|
||||||
|
# Disable implicit rules so canonical targets will work.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : %,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : SCCS/s.%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : s.%
|
||||||
|
|
||||||
|
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||||
|
|
||||||
|
# Command-line flag to silence nested $(MAKE).
|
||||||
|
$(VERBOSE)MAKESILENT = -s
|
||||||
|
|
||||||
|
#Suppress display of executed commands.
|
||||||
|
$(VERBOSE).SILENT:
|
||||||
|
|
||||||
|
# A target that is always out of date.
|
||||||
|
cmake_force:
|
||||||
|
.PHONY : cmake_force
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Set environment variables for the build.
|
||||||
|
|
||||||
|
# The shell in which to execute make rules.
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
# The CMake executable.
|
||||||
|
CMAKE_COMMAND = /usr/local/bin/cmake
|
||||||
|
|
||||||
|
# The command to remove a file.
|
||||||
|
RM = /usr/local/bin/cmake -E rm -f
|
||||||
|
|
||||||
|
# Escaping for special characters.
|
||||||
|
EQUALS = =
|
||||||
|
|
||||||
|
# The top-level source directory on which CMake was run.
|
||||||
|
CMAKE_SOURCE_DIR = /home/jdaugherty/work/pkgs/taskw/timew-1.7.1
|
||||||
|
|
||||||
|
# The top-level build directory on which CMake was run.
|
||||||
|
CMAKE_BINARY_DIR = /home/jdaugherty/work/pkgs/taskw/timew-1.7.1
|
||||||
|
|
||||||
|
# Include any dependencies generated for this target.
|
||||||
|
include src/CMakeFiles/timew.dir/depend.make
|
||||||
|
# Include any dependencies generated by the compiler for this target.
|
||||||
|
include src/CMakeFiles/timew.dir/compiler_depend.make
|
||||||
|
|
||||||
|
# Include the progress variables for this target.
|
||||||
|
include src/CMakeFiles/timew.dir/progress.make
|
||||||
|
|
||||||
|
# Include the compile flags for this target's objects.
|
||||||
|
include src/CMakeFiles/timew.dir/flags.make
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/AtomicFile.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/AtomicFile.cpp.o: src/AtomicFile.cpp
|
||||||
|
src/CMakeFiles/timew.dir/AtomicFile.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object src/CMakeFiles/timew.dir/AtomicFile.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/AtomicFile.cpp.o -MF CMakeFiles/timew.dir/AtomicFile.cpp.o.d -o CMakeFiles/timew.dir/AtomicFile.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/AtomicFile.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/AtomicFile.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/AtomicFile.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/AtomicFile.cpp > CMakeFiles/timew.dir/AtomicFile.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/AtomicFile.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/AtomicFile.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/AtomicFile.cpp -o CMakeFiles/timew.dir/AtomicFile.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/CLI.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/CLI.cpp.o: src/CLI.cpp
|
||||||
|
src/CMakeFiles/timew.dir/CLI.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object src/CMakeFiles/timew.dir/CLI.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/CLI.cpp.o -MF CMakeFiles/timew.dir/CLI.cpp.o.d -o CMakeFiles/timew.dir/CLI.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CLI.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/CLI.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/CLI.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CLI.cpp > CMakeFiles/timew.dir/CLI.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/CLI.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/CLI.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CLI.cpp -o CMakeFiles/timew.dir/CLI.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Chart.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Chart.cpp.o: src/Chart.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Chart.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object src/CMakeFiles/timew.dir/Chart.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Chart.cpp.o -MF CMakeFiles/timew.dir/Chart.cpp.o.d -o CMakeFiles/timew.dir/Chart.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Chart.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Chart.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Chart.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Chart.cpp > CMakeFiles/timew.dir/Chart.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Chart.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Chart.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Chart.cpp -o CMakeFiles/timew.dir/Chart.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Database.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Database.cpp.o: src/Database.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Database.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object src/CMakeFiles/timew.dir/Database.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Database.cpp.o -MF CMakeFiles/timew.dir/Database.cpp.o.d -o CMakeFiles/timew.dir/Database.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Database.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Database.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Database.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Database.cpp > CMakeFiles/timew.dir/Database.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Database.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Database.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Database.cpp -o CMakeFiles/timew.dir/Database.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Datafile.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Datafile.cpp.o: src/Datafile.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Datafile.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object src/CMakeFiles/timew.dir/Datafile.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Datafile.cpp.o -MF CMakeFiles/timew.dir/Datafile.cpp.o.d -o CMakeFiles/timew.dir/Datafile.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Datafile.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Datafile.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Datafile.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Datafile.cpp > CMakeFiles/timew.dir/Datafile.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Datafile.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Datafile.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Datafile.cpp -o CMakeFiles/timew.dir/Datafile.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/DatetimeParser.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/DatetimeParser.cpp.o: src/DatetimeParser.cpp
|
||||||
|
src/CMakeFiles/timew.dir/DatetimeParser.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object src/CMakeFiles/timew.dir/DatetimeParser.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/DatetimeParser.cpp.o -MF CMakeFiles/timew.dir/DatetimeParser.cpp.o.d -o CMakeFiles/timew.dir/DatetimeParser.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/DatetimeParser.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/DatetimeParser.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/DatetimeParser.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/DatetimeParser.cpp > CMakeFiles/timew.dir/DatetimeParser.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/DatetimeParser.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/DatetimeParser.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/DatetimeParser.cpp -o CMakeFiles/timew.dir/DatetimeParser.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Exclusion.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Exclusion.cpp.o: src/Exclusion.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Exclusion.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object src/CMakeFiles/timew.dir/Exclusion.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Exclusion.cpp.o -MF CMakeFiles/timew.dir/Exclusion.cpp.o.d -o CMakeFiles/timew.dir/Exclusion.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Exclusion.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Exclusion.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Exclusion.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Exclusion.cpp > CMakeFiles/timew.dir/Exclusion.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Exclusion.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Exclusion.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Exclusion.cpp -o CMakeFiles/timew.dir/Exclusion.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Extensions.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Extensions.cpp.o: src/Extensions.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Extensions.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object src/CMakeFiles/timew.dir/Extensions.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Extensions.cpp.o -MF CMakeFiles/timew.dir/Extensions.cpp.o.d -o CMakeFiles/timew.dir/Extensions.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Extensions.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Extensions.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Extensions.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Extensions.cpp > CMakeFiles/timew.dir/Extensions.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Extensions.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Extensions.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Extensions.cpp -o CMakeFiles/timew.dir/Extensions.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/ExtensionsTable.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/ExtensionsTable.cpp.o: src/ExtensionsTable.cpp
|
||||||
|
src/CMakeFiles/timew.dir/ExtensionsTable.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object src/CMakeFiles/timew.dir/ExtensionsTable.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/ExtensionsTable.cpp.o -MF CMakeFiles/timew.dir/ExtensionsTable.cpp.o.d -o CMakeFiles/timew.dir/ExtensionsTable.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/ExtensionsTable.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/ExtensionsTable.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/ExtensionsTable.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/ExtensionsTable.cpp > CMakeFiles/timew.dir/ExtensionsTable.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/ExtensionsTable.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/ExtensionsTable.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/ExtensionsTable.cpp -o CMakeFiles/timew.dir/ExtensionsTable.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/GapsTable.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/GapsTable.cpp.o: src/GapsTable.cpp
|
||||||
|
src/CMakeFiles/timew.dir/GapsTable.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object src/CMakeFiles/timew.dir/GapsTable.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/GapsTable.cpp.o -MF CMakeFiles/timew.dir/GapsTable.cpp.o.d -o CMakeFiles/timew.dir/GapsTable.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/GapsTable.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/GapsTable.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/GapsTable.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/GapsTable.cpp > CMakeFiles/timew.dir/GapsTable.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/GapsTable.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/GapsTable.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/GapsTable.cpp -o CMakeFiles/timew.dir/GapsTable.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Interval.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Interval.cpp.o: src/Interval.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Interval.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object src/CMakeFiles/timew.dir/Interval.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Interval.cpp.o -MF CMakeFiles/timew.dir/Interval.cpp.o.d -o CMakeFiles/timew.dir/Interval.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Interval.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Interval.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Interval.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Interval.cpp > CMakeFiles/timew.dir/Interval.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Interval.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Interval.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Interval.cpp -o CMakeFiles/timew.dir/Interval.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFactory.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFactory.cpp.o: src/IntervalFactory.cpp
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFactory.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object src/CMakeFiles/timew.dir/IntervalFactory.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/IntervalFactory.cpp.o -MF CMakeFiles/timew.dir/IntervalFactory.cpp.o.d -o CMakeFiles/timew.dir/IntervalFactory.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFactory.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFactory.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/IntervalFactory.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFactory.cpp > CMakeFiles/timew.dir/IntervalFactory.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFactory.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/IntervalFactory.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFactory.cpp -o CMakeFiles/timew.dir/IntervalFactory.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilter.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilter.cpp.o: src/IntervalFilter.cpp
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilter.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object src/CMakeFiles/timew.dir/IntervalFilter.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/IntervalFilter.cpp.o -MF CMakeFiles/timew.dir/IntervalFilter.cpp.o.d -o CMakeFiles/timew.dir/IntervalFilter.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilter.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilter.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/IntervalFilter.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilter.cpp > CMakeFiles/timew.dir/IntervalFilter.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilter.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/IntervalFilter.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilter.cpp -o CMakeFiles/timew.dir/IntervalFilter.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o: src/IntervalFilterAndGroup.cpp
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o -MF CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o.d -o CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAndGroup.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAndGroup.cpp > CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAndGroup.cpp -o CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o: src/IntervalFilterAllInRange.cpp
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building CXX object src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o -MF CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o.d -o CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllInRange.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllInRange.cpp > CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllInRange.cpp -o CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o: src/IntervalFilterAllWithIds.cpp
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building CXX object src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o -MF CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o.d -o CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllWithIds.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllWithIds.cpp > CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllWithIds.cpp -o CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o: src/IntervalFilterAllWithTags.cpp
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building CXX object src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o -MF CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o.d -o CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllWithTags.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllWithTags.cpp > CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterAllWithTags.cpp -o CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o: src/IntervalFilterTagsDisjoint.cpp
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building CXX object src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o -MF CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o.d -o CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterTagsDisjoint.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterTagsDisjoint.cpp > CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterTagsDisjoint.cpp -o CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o: src/IntervalFilterFirstOf.cpp
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building CXX object src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o -MF CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o.d -o CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterFirstOf.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterFirstOf.cpp > CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilterFirstOf.cpp -o CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Journal.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Journal.cpp.o: src/Journal.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Journal.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building CXX object src/CMakeFiles/timew.dir/Journal.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Journal.cpp.o -MF CMakeFiles/timew.dir/Journal.cpp.o.d -o CMakeFiles/timew.dir/Journal.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Journal.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Journal.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Journal.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Journal.cpp > CMakeFiles/timew.dir/Journal.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Journal.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Journal.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Journal.cpp -o CMakeFiles/timew.dir/Journal.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Range.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Range.cpp.o: src/Range.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Range.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building CXX object src/CMakeFiles/timew.dir/Range.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Range.cpp.o -MF CMakeFiles/timew.dir/Range.cpp.o.d -o CMakeFiles/timew.dir/Range.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Range.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Range.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Range.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Range.cpp > CMakeFiles/timew.dir/Range.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Range.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Range.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Range.cpp -o CMakeFiles/timew.dir/Range.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Rules.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Rules.cpp.o: src/Rules.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Rules.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building CXX object src/CMakeFiles/timew.dir/Rules.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Rules.cpp.o -MF CMakeFiles/timew.dir/Rules.cpp.o.d -o CMakeFiles/timew.dir/Rules.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Rules.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Rules.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Rules.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Rules.cpp > CMakeFiles/timew.dir/Rules.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Rules.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Rules.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Rules.cpp -o CMakeFiles/timew.dir/Rules.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/SummaryTable.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/SummaryTable.cpp.o: src/SummaryTable.cpp
|
||||||
|
src/CMakeFiles/timew.dir/SummaryTable.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building CXX object src/CMakeFiles/timew.dir/SummaryTable.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/SummaryTable.cpp.o -MF CMakeFiles/timew.dir/SummaryTable.cpp.o.d -o CMakeFiles/timew.dir/SummaryTable.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/SummaryTable.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/SummaryTable.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/SummaryTable.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/SummaryTable.cpp > CMakeFiles/timew.dir/SummaryTable.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/SummaryTable.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/SummaryTable.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/SummaryTable.cpp -o CMakeFiles/timew.dir/SummaryTable.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagDescription.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/TagDescription.cpp.o: src/TagDescription.cpp
|
||||||
|
src/CMakeFiles/timew.dir/TagDescription.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building CXX object src/CMakeFiles/timew.dir/TagDescription.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/TagDescription.cpp.o -MF CMakeFiles/timew.dir/TagDescription.cpp.o.d -o CMakeFiles/timew.dir/TagDescription.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagDescription.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagDescription.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/TagDescription.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagDescription.cpp > CMakeFiles/timew.dir/TagDescription.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagDescription.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/TagDescription.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagDescription.cpp -o CMakeFiles/timew.dir/TagDescription.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagInfo.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/TagInfo.cpp.o: src/TagInfo.cpp
|
||||||
|
src/CMakeFiles/timew.dir/TagInfo.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Building CXX object src/CMakeFiles/timew.dir/TagInfo.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/TagInfo.cpp.o -MF CMakeFiles/timew.dir/TagInfo.cpp.o.d -o CMakeFiles/timew.dir/TagInfo.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfo.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagInfo.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/TagInfo.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfo.cpp > CMakeFiles/timew.dir/TagInfo.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagInfo.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/TagInfo.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfo.cpp -o CMakeFiles/timew.dir/TagInfo.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.o: src/TagInfoDatabase.cpp
|
||||||
|
src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_26) "Building CXX object src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.o -MF CMakeFiles/timew.dir/TagInfoDatabase.cpp.o.d -o CMakeFiles/timew.dir/TagInfoDatabase.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfoDatabase.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/TagInfoDatabase.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfoDatabase.cpp > CMakeFiles/timew.dir/TagInfoDatabase.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/TagInfoDatabase.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfoDatabase.cpp -o CMakeFiles/timew.dir/TagInfoDatabase.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagsTable.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/TagsTable.cpp.o: src/TagsTable.cpp
|
||||||
|
src/CMakeFiles/timew.dir/TagsTable.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_27) "Building CXX object src/CMakeFiles/timew.dir/TagsTable.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/TagsTable.cpp.o -MF CMakeFiles/timew.dir/TagsTable.cpp.o.d -o CMakeFiles/timew.dir/TagsTable.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagsTable.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagsTable.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/TagsTable.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagsTable.cpp > CMakeFiles/timew.dir/TagsTable.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TagsTable.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/TagsTable.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagsTable.cpp -o CMakeFiles/timew.dir/TagsTable.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Transaction.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/Transaction.cpp.o: src/Transaction.cpp
|
||||||
|
src/CMakeFiles/timew.dir/Transaction.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_28) "Building CXX object src/CMakeFiles/timew.dir/Transaction.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/Transaction.cpp.o -MF CMakeFiles/timew.dir/Transaction.cpp.o.d -o CMakeFiles/timew.dir/Transaction.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Transaction.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Transaction.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/Transaction.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Transaction.cpp > CMakeFiles/timew.dir/Transaction.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/Transaction.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/Transaction.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Transaction.cpp -o CMakeFiles/timew.dir/Transaction.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TransactionsFactory.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/TransactionsFactory.cpp.o: src/TransactionsFactory.cpp
|
||||||
|
src/CMakeFiles/timew.dir/TransactionsFactory.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_29) "Building CXX object src/CMakeFiles/timew.dir/TransactionsFactory.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/TransactionsFactory.cpp.o -MF CMakeFiles/timew.dir/TransactionsFactory.cpp.o.d -o CMakeFiles/timew.dir/TransactionsFactory.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TransactionsFactory.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TransactionsFactory.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/TransactionsFactory.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TransactionsFactory.cpp > CMakeFiles/timew.dir/TransactionsFactory.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/TransactionsFactory.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/TransactionsFactory.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TransactionsFactory.cpp -o CMakeFiles/timew.dir/TransactionsFactory.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/UndoAction.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/UndoAction.cpp.o: src/UndoAction.cpp
|
||||||
|
src/CMakeFiles/timew.dir/UndoAction.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_30) "Building CXX object src/CMakeFiles/timew.dir/UndoAction.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/UndoAction.cpp.o -MF CMakeFiles/timew.dir/UndoAction.cpp.o.d -o CMakeFiles/timew.dir/UndoAction.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/UndoAction.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/UndoAction.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/UndoAction.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/UndoAction.cpp > CMakeFiles/timew.dir/UndoAction.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/UndoAction.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/UndoAction.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/UndoAction.cpp -o CMakeFiles/timew.dir/UndoAction.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/data.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/data.cpp.o: src/data.cpp
|
||||||
|
src/CMakeFiles/timew.dir/data.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_31) "Building CXX object src/CMakeFiles/timew.dir/data.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/data.cpp.o -MF CMakeFiles/timew.dir/data.cpp.o.d -o CMakeFiles/timew.dir/data.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/data.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/data.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/data.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/data.cpp > CMakeFiles/timew.dir/data.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/data.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/data.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/data.cpp -o CMakeFiles/timew.dir/data.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/dom.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/dom.cpp.o: src/dom.cpp
|
||||||
|
src/CMakeFiles/timew.dir/dom.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_32) "Building CXX object src/CMakeFiles/timew.dir/dom.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/dom.cpp.o -MF CMakeFiles/timew.dir/dom.cpp.o.d -o CMakeFiles/timew.dir/dom.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/dom.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/dom.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/dom.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/dom.cpp > CMakeFiles/timew.dir/dom.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/dom.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/dom.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/dom.cpp -o CMakeFiles/timew.dir/dom.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/init.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/init.cpp.o: src/init.cpp
|
||||||
|
src/CMakeFiles/timew.dir/init.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_33) "Building CXX object src/CMakeFiles/timew.dir/init.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/init.cpp.o -MF CMakeFiles/timew.dir/init.cpp.o.d -o CMakeFiles/timew.dir/init.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/init.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/init.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/init.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/init.cpp > CMakeFiles/timew.dir/init.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/init.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/init.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/init.cpp -o CMakeFiles/timew.dir/init.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/helper.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/helper.cpp.o: src/helper.cpp
|
||||||
|
src/CMakeFiles/timew.dir/helper.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_34) "Building CXX object src/CMakeFiles/timew.dir/helper.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/helper.cpp.o -MF CMakeFiles/timew.dir/helper.cpp.o.d -o CMakeFiles/timew.dir/helper.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/helper.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/helper.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/helper.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/helper.cpp > CMakeFiles/timew.dir/helper.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/helper.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/helper.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/helper.cpp -o CMakeFiles/timew.dir/helper.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/paths.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/paths.cpp.o: src/paths.cpp
|
||||||
|
src/CMakeFiles/timew.dir/paths.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_35) "Building CXX object src/CMakeFiles/timew.dir/paths.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/paths.cpp.o -MF CMakeFiles/timew.dir/paths.cpp.o.d -o CMakeFiles/timew.dir/paths.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/paths.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/paths.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/paths.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/paths.cpp > CMakeFiles/timew.dir/paths.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/paths.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/paths.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/paths.cpp -o CMakeFiles/timew.dir/paths.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/log.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/log.cpp.o: src/log.cpp
|
||||||
|
src/CMakeFiles/timew.dir/log.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_36) "Building CXX object src/CMakeFiles/timew.dir/log.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/log.cpp.o -MF CMakeFiles/timew.dir/log.cpp.o.d -o CMakeFiles/timew.dir/log.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/log.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/log.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/log.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/log.cpp > CMakeFiles/timew.dir/log.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/log.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/log.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/log.cpp -o CMakeFiles/timew.dir/log.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/util.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/util.cpp.o: src/util.cpp
|
||||||
|
src/CMakeFiles/timew.dir/util.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_37) "Building CXX object src/CMakeFiles/timew.dir/util.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/util.cpp.o -MF CMakeFiles/timew.dir/util.cpp.o.d -o CMakeFiles/timew.dir/util.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/util.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/util.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/util.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/util.cpp > CMakeFiles/timew.dir/util.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/util.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/util.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/util.cpp -o CMakeFiles/timew.dir/util.cpp.s
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/validate.cpp.o: src/CMakeFiles/timew.dir/flags.make
|
||||||
|
src/CMakeFiles/timew.dir/validate.cpp.o: src/validate.cpp
|
||||||
|
src/CMakeFiles/timew.dir/validate.cpp.o: src/CMakeFiles/timew.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_38) "Building CXX object src/CMakeFiles/timew.dir/validate.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew.dir/validate.cpp.o -MF CMakeFiles/timew.dir/validate.cpp.o.d -o CMakeFiles/timew.dir/validate.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/validate.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/validate.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew.dir/validate.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/validate.cpp > CMakeFiles/timew.dir/validate.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/validate.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew.dir/validate.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/validate.cpp -o CMakeFiles/timew.dir/validate.cpp.s
|
||||||
|
|
||||||
|
# Object files for target timew
|
||||||
|
timew_OBJECTS = \
|
||||||
|
"CMakeFiles/timew.dir/AtomicFile.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/CLI.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Chart.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Database.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Datafile.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/DatetimeParser.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Exclusion.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Extensions.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/ExtensionsTable.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/GapsTable.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Interval.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/IntervalFactory.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilter.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Journal.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Range.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Rules.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/SummaryTable.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/TagDescription.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/TagInfo.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/TagInfoDatabase.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/TagsTable.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/Transaction.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/TransactionsFactory.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/UndoAction.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/data.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/dom.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/init.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/helper.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/paths.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/log.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/util.cpp.o" \
|
||||||
|
"CMakeFiles/timew.dir/validate.cpp.o"
|
||||||
|
|
||||||
|
# External object files for target timew
|
||||||
|
timew_EXTERNAL_OBJECTS =
|
||||||
|
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/AtomicFile.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/CLI.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Chart.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Database.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Datafile.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/DatetimeParser.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Exclusion.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Extensions.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/ExtensionsTable.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/GapsTable.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Interval.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/IntervalFactory.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/IntervalFilter.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Journal.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Range.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Rules.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/SummaryTable.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/TagDescription.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/TagInfo.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/TagInfoDatabase.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/TagsTable.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/Transaction.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/TransactionsFactory.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/UndoAction.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/data.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/dom.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/init.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/helper.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/paths.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/log.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/util.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/validate.cpp.o
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/build.make
|
||||||
|
src/libtimew.a: src/CMakeFiles/timew.dir/link.txt
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_39) "Linking CXX static library libtimew.a"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -P CMakeFiles/timew.dir/cmake_clean_target.cmake
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/timew.dir/link.txt --verbose=$(VERBOSE)
|
||||||
|
|
||||||
|
# Rule to build all files generated by this target.
|
||||||
|
src/CMakeFiles/timew.dir/build: src/libtimew.a
|
||||||
|
.PHONY : src/CMakeFiles/timew.dir/build
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/clean:
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -P CMakeFiles/timew.dir/cmake_clean.cmake
|
||||||
|
.PHONY : src/CMakeFiles/timew.dir/clean
|
||||||
|
|
||||||
|
src/CMakeFiles/timew.dir/depend:
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CMakeFiles/timew.dir/DependInfo.cmake --color=$(COLOR)
|
||||||
|
.PHONY : src/CMakeFiles/timew.dir/depend
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
file(REMOVE_RECURSE
|
||||||
|
"CMakeFiles/timew.dir/AtomicFile.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/AtomicFile.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/CLI.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/CLI.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Chart.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Chart.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Database.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Database.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Datafile.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Datafile.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/DatetimeParser.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/DatetimeParser.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Exclusion.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Exclusion.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Extensions.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Extensions.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/ExtensionsTable.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/ExtensionsTable.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/GapsTable.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/GapsTable.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Interval.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Interval.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFactory.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFactory.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilter.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilter.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Journal.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Journal.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Range.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Range.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Rules.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Rules.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/SummaryTable.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/SummaryTable.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/TagDescription.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/TagDescription.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/TagInfo.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/TagInfo.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/TagInfoDatabase.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/TagInfoDatabase.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/TagsTable.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/TagsTable.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/Transaction.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/Transaction.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/TransactionsFactory.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/TransactionsFactory.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/UndoAction.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/UndoAction.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/data.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/data.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/dom.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/dom.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/helper.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/helper.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/init.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/init.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/log.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/log.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/paths.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/paths.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/util.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/util.cpp.o.d"
|
||||||
|
"CMakeFiles/timew.dir/validate.cpp.o"
|
||||||
|
"CMakeFiles/timew.dir/validate.cpp.o.d"
|
||||||
|
"libtimew.a"
|
||||||
|
"libtimew.pdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Per-language clean rules from dependency scanning.
|
||||||
|
foreach(lang CXX)
|
||||||
|
include(CMakeFiles/timew.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||||
|
endforeach()
|
|
@ -0,0 +1,3 @@
|
||||||
|
file(REMOVE_RECURSE
|
||||||
|
"libtimew.a"
|
||||||
|
)
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,2 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Timestamp file for compiler generated dependencies management for timew.
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Empty dependencies file for timew.
|
||||||
|
# This may be replaced when dependencies are built.
|
|
@ -0,0 +1,10 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# compile CXX with /usr/bin/c++
|
||||||
|
CXX_DEFINES =
|
||||||
|
|
||||||
|
CXX_INCLUDES = -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1 -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/commands -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src
|
||||||
|
|
||||||
|
CXX_FLAGS = -Wall -Wextra -Wsign-compare -Wreturn-type -g -std=gnu++17
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
/usr/bin/ar qc libtimew.a CMakeFiles/timew.dir/AtomicFile.cpp.o CMakeFiles/timew.dir/CLI.cpp.o CMakeFiles/timew.dir/Chart.cpp.o CMakeFiles/timew.dir/Database.cpp.o CMakeFiles/timew.dir/Datafile.cpp.o CMakeFiles/timew.dir/DatetimeParser.cpp.o CMakeFiles/timew.dir/Exclusion.cpp.o CMakeFiles/timew.dir/Extensions.cpp.o CMakeFiles/timew.dir/ExtensionsTable.cpp.o CMakeFiles/timew.dir/GapsTable.cpp.o CMakeFiles/timew.dir/Interval.cpp.o CMakeFiles/timew.dir/IntervalFactory.cpp.o CMakeFiles/timew.dir/IntervalFilter.cpp.o CMakeFiles/timew.dir/IntervalFilterAndGroup.cpp.o CMakeFiles/timew.dir/IntervalFilterAllInRange.cpp.o CMakeFiles/timew.dir/IntervalFilterAllWithIds.cpp.o CMakeFiles/timew.dir/IntervalFilterAllWithTags.cpp.o CMakeFiles/timew.dir/IntervalFilterTagsDisjoint.cpp.o CMakeFiles/timew.dir/IntervalFilterFirstOf.cpp.o CMakeFiles/timew.dir/Journal.cpp.o CMakeFiles/timew.dir/Range.cpp.o CMakeFiles/timew.dir/Rules.cpp.o CMakeFiles/timew.dir/SummaryTable.cpp.o CMakeFiles/timew.dir/TagDescription.cpp.o CMakeFiles/timew.dir/TagInfo.cpp.o CMakeFiles/timew.dir/TagInfoDatabase.cpp.o CMakeFiles/timew.dir/TagsTable.cpp.o CMakeFiles/timew.dir/Transaction.cpp.o CMakeFiles/timew.dir/TransactionsFactory.cpp.o CMakeFiles/timew.dir/UndoAction.cpp.o CMakeFiles/timew.dir/data.cpp.o CMakeFiles/timew.dir/dom.cpp.o CMakeFiles/timew.dir/init.cpp.o CMakeFiles/timew.dir/helper.cpp.o CMakeFiles/timew.dir/paths.cpp.o CMakeFiles/timew.dir/log.cpp.o CMakeFiles/timew.dir/util.cpp.o CMakeFiles/timew.dir/validate.cpp.o
|
||||||
|
/usr/bin/ranlib libtimew.a
|
|
@ -0,0 +1,40 @@
|
||||||
|
CMAKE_PROGRESS_1 = 74
|
||||||
|
CMAKE_PROGRESS_2 = 75
|
||||||
|
CMAKE_PROGRESS_3 =
|
||||||
|
CMAKE_PROGRESS_4 = 76
|
||||||
|
CMAKE_PROGRESS_5 =
|
||||||
|
CMAKE_PROGRESS_6 = 77
|
||||||
|
CMAKE_PROGRESS_7 = 78
|
||||||
|
CMAKE_PROGRESS_8 =
|
||||||
|
CMAKE_PROGRESS_9 = 79
|
||||||
|
CMAKE_PROGRESS_10 =
|
||||||
|
CMAKE_PROGRESS_11 = 80
|
||||||
|
CMAKE_PROGRESS_12 = 81
|
||||||
|
CMAKE_PROGRESS_13 =
|
||||||
|
CMAKE_PROGRESS_14 = 82
|
||||||
|
CMAKE_PROGRESS_15 =
|
||||||
|
CMAKE_PROGRESS_16 = 83
|
||||||
|
CMAKE_PROGRESS_17 = 84
|
||||||
|
CMAKE_PROGRESS_18 =
|
||||||
|
CMAKE_PROGRESS_19 = 85
|
||||||
|
CMAKE_PROGRESS_20 =
|
||||||
|
CMAKE_PROGRESS_21 = 86
|
||||||
|
CMAKE_PROGRESS_22 =
|
||||||
|
CMAKE_PROGRESS_23 = 87
|
||||||
|
CMAKE_PROGRESS_24 = 88
|
||||||
|
CMAKE_PROGRESS_25 =
|
||||||
|
CMAKE_PROGRESS_26 = 89
|
||||||
|
CMAKE_PROGRESS_27 =
|
||||||
|
CMAKE_PROGRESS_28 = 90
|
||||||
|
CMAKE_PROGRESS_29 = 91
|
||||||
|
CMAKE_PROGRESS_30 =
|
||||||
|
CMAKE_PROGRESS_31 = 92
|
||||||
|
CMAKE_PROGRESS_32 =
|
||||||
|
CMAKE_PROGRESS_33 = 93
|
||||||
|
CMAKE_PROGRESS_34 = 94
|
||||||
|
CMAKE_PROGRESS_35 =
|
||||||
|
CMAKE_PROGRESS_36 = 95
|
||||||
|
CMAKE_PROGRESS_37 =
|
||||||
|
CMAKE_PROGRESS_38 = 96
|
||||||
|
CMAKE_PROGRESS_39 = 97
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
# Consider dependencies only in project.
|
||||||
|
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||||
|
|
||||||
|
# The set of languages for which implicit dependencies are needed:
|
||||||
|
set(CMAKE_DEPENDS_LANGUAGES
|
||||||
|
)
|
||||||
|
|
||||||
|
# The set of dependency files which are needed:
|
||||||
|
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/timew.cpp" "src/CMakeFiles/timew_executable.dir/timew.cpp.o" "gcc" "src/CMakeFiles/timew_executable.dir/timew.cpp.o.d"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Targets to which this target links.
|
||||||
|
set(CMAKE_TARGET_LINKED_INFO_FILES
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CMakeFiles/timew.dir/DependInfo.cmake"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/commands/CMakeFiles/commands.dir/DependInfo.cmake"
|
||||||
|
"/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CMakeFiles/libshared.dir/DependInfo.cmake"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Fortran module output directory.
|
||||||
|
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
|
@ -0,0 +1,114 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# Delete rule output on recipe failure.
|
||||||
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets provided by cmake.
|
||||||
|
|
||||||
|
# Disable implicit rules so canonical targets will work.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : %,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : RCS/%,v
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : SCCS/s.%
|
||||||
|
|
||||||
|
# Disable VCS-based implicit rules.
|
||||||
|
% : s.%
|
||||||
|
|
||||||
|
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||||
|
|
||||||
|
# Command-line flag to silence nested $(MAKE).
|
||||||
|
$(VERBOSE)MAKESILENT = -s
|
||||||
|
|
||||||
|
#Suppress display of executed commands.
|
||||||
|
$(VERBOSE).SILENT:
|
||||||
|
|
||||||
|
# A target that is always out of date.
|
||||||
|
cmake_force:
|
||||||
|
.PHONY : cmake_force
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Set environment variables for the build.
|
||||||
|
|
||||||
|
# The shell in which to execute make rules.
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
# The CMake executable.
|
||||||
|
CMAKE_COMMAND = /usr/local/bin/cmake
|
||||||
|
|
||||||
|
# The command to remove a file.
|
||||||
|
RM = /usr/local/bin/cmake -E rm -f
|
||||||
|
|
||||||
|
# Escaping for special characters.
|
||||||
|
EQUALS = =
|
||||||
|
|
||||||
|
# The top-level source directory on which CMake was run.
|
||||||
|
CMAKE_SOURCE_DIR = /home/jdaugherty/work/pkgs/taskw/timew-1.7.1
|
||||||
|
|
||||||
|
# The top-level build directory on which CMake was run.
|
||||||
|
CMAKE_BINARY_DIR = /home/jdaugherty/work/pkgs/taskw/timew-1.7.1
|
||||||
|
|
||||||
|
# Include any dependencies generated for this target.
|
||||||
|
include src/CMakeFiles/timew_executable.dir/depend.make
|
||||||
|
# Include any dependencies generated by the compiler for this target.
|
||||||
|
include src/CMakeFiles/timew_executable.dir/compiler_depend.make
|
||||||
|
|
||||||
|
# Include the progress variables for this target.
|
||||||
|
include src/CMakeFiles/timew_executable.dir/progress.make
|
||||||
|
|
||||||
|
# Include the compile flags for this target's objects.
|
||||||
|
include src/CMakeFiles/timew_executable.dir/flags.make
|
||||||
|
|
||||||
|
src/CMakeFiles/timew_executable.dir/timew.cpp.o: src/CMakeFiles/timew_executable.dir/flags.make
|
||||||
|
src/CMakeFiles/timew_executable.dir/timew.cpp.o: src/timew.cpp
|
||||||
|
src/CMakeFiles/timew_executable.dir/timew.cpp.o: src/CMakeFiles/timew_executable.dir/compiler_depend.ts
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object src/CMakeFiles/timew_executable.dir/timew.cpp.o"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT src/CMakeFiles/timew_executable.dir/timew.cpp.o -MF CMakeFiles/timew_executable.dir/timew.cpp.o.d -o CMakeFiles/timew_executable.dir/timew.cpp.o -c /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/timew.cpp
|
||||||
|
|
||||||
|
src/CMakeFiles/timew_executable.dir/timew.cpp.i: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/timew_executable.dir/timew.cpp.i"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/timew.cpp > CMakeFiles/timew_executable.dir/timew.cpp.i
|
||||||
|
|
||||||
|
src/CMakeFiles/timew_executable.dir/timew.cpp.s: cmake_force
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/timew_executable.dir/timew.cpp.s"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/timew.cpp -o CMakeFiles/timew_executable.dir/timew.cpp.s
|
||||||
|
|
||||||
|
# Object files for target timew_executable
|
||||||
|
timew_executable_OBJECTS = \
|
||||||
|
"CMakeFiles/timew_executable.dir/timew.cpp.o"
|
||||||
|
|
||||||
|
# External object files for target timew_executable
|
||||||
|
timew_executable_EXTERNAL_OBJECTS =
|
||||||
|
|
||||||
|
src/timew: src/CMakeFiles/timew_executable.dir/timew.cpp.o
|
||||||
|
src/timew: src/CMakeFiles/timew_executable.dir/build.make
|
||||||
|
src/timew: src/libtimew.a
|
||||||
|
src/timew: src/commands/libcommands.a
|
||||||
|
src/timew: src/libtimew.a
|
||||||
|
src/timew: src/liblibshared.a
|
||||||
|
src/timew: src/CMakeFiles/timew_executable.dir/link.txt
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable timew"
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/timew_executable.dir/link.txt --verbose=$(VERBOSE)
|
||||||
|
|
||||||
|
# Rule to build all files generated by this target.
|
||||||
|
src/CMakeFiles/timew_executable.dir/build: src/timew
|
||||||
|
.PHONY : src/CMakeFiles/timew_executable.dir/build
|
||||||
|
|
||||||
|
src/CMakeFiles/timew_executable.dir/clean:
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src && $(CMAKE_COMMAND) -P CMakeFiles/timew_executable.dir/cmake_clean.cmake
|
||||||
|
.PHONY : src/CMakeFiles/timew_executable.dir/clean
|
||||||
|
|
||||||
|
src/CMakeFiles/timew_executable.dir/depend:
|
||||||
|
cd /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src /home/jdaugherty/work/pkgs/taskw/timew-1.7.1 /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src /home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CMakeFiles/timew_executable.dir/DependInfo.cmake --color=$(COLOR)
|
||||||
|
.PHONY : src/CMakeFiles/timew_executable.dir/depend
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
file(REMOVE_RECURSE
|
||||||
|
"CMakeFiles/timew_executable.dir/timew.cpp.o"
|
||||||
|
"CMakeFiles/timew_executable.dir/timew.cpp.o.d"
|
||||||
|
"timew"
|
||||||
|
"timew.pdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Per-language clean rules from dependency scanning.
|
||||||
|
foreach(lang CXX)
|
||||||
|
include(CMakeFiles/timew_executable.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||||
|
endforeach()
|
|
@ -0,0 +1,258 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
src/CMakeFiles/timew_executable.dir/timew.cpp.o
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/timew.cpp
|
||||||
|
/usr/include/stdc-predef.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/AtomicFile.h
|
||||||
|
/usr/include/c++/8/memory
|
||||||
|
/usr/include/c++/8/bits/stl_algobase.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h
|
||||||
|
/usr/include/features.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/cdefs.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wordsize.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/long-double.h
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs.h
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h
|
||||||
|
/usr/include/c++/8/bits/functexcept.h
|
||||||
|
/usr/include/c++/8/bits/exception_defines.h
|
||||||
|
/usr/include/c++/8/bits/cpp_type_traits.h
|
||||||
|
/usr/include/c++/8/ext/type_traits.h
|
||||||
|
/usr/include/c++/8/ext/numeric_traits.h
|
||||||
|
/usr/include/c++/8/bits/stl_pair.h
|
||||||
|
/usr/include/c++/8/bits/move.h
|
||||||
|
/usr/include/c++/8/bits/concept_check.h
|
||||||
|
/usr/include/c++/8/type_traits
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_types.h
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_funcs.h
|
||||||
|
/usr/include/c++/8/debug/assertions.h
|
||||||
|
/usr/include/c++/8/bits/stl_iterator.h
|
||||||
|
/usr/include/c++/8/bits/ptr_traits.h
|
||||||
|
/usr/include/c++/8/debug/debug.h
|
||||||
|
/usr/include/c++/8/bits/predefined_ops.h
|
||||||
|
/usr/include/c++/8/bits/allocator.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h
|
||||||
|
/usr/include/c++/8/ext/new_allocator.h
|
||||||
|
/usr/include/c++/8/new
|
||||||
|
/usr/include/c++/8/exception
|
||||||
|
/usr/include/c++/8/bits/exception.h
|
||||||
|
/usr/include/c++/8/bits/exception_ptr.h
|
||||||
|
/usr/include/c++/8/bits/cxxabi_init_exception.h
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h
|
||||||
|
/usr/include/c++/8/typeinfo
|
||||||
|
/usr/include/c++/8/bits/hash_bytes.h
|
||||||
|
/usr/include/c++/8/bits/nested_exception.h
|
||||||
|
/usr/include/c++/8/bits/memoryfwd.h
|
||||||
|
/usr/include/c++/8/bits/stl_construct.h
|
||||||
|
/usr/include/c++/8/ext/alloc_traits.h
|
||||||
|
/usr/include/c++/8/bits/alloc_traits.h
|
||||||
|
/usr/include/c++/8/bits/stl_uninitialized.h
|
||||||
|
/usr/include/c++/8/utility
|
||||||
|
/usr/include/c++/8/bits/stl_relops.h
|
||||||
|
/usr/include/c++/8/initializer_list
|
||||||
|
/usr/include/c++/8/bits/stl_tempbuf.h
|
||||||
|
/usr/include/c++/8/bits/stl_raw_storage_iter.h
|
||||||
|
/usr/include/c++/8/iosfwd
|
||||||
|
/usr/include/c++/8/bits/stringfwd.h
|
||||||
|
/usr/include/c++/8/bits/postypes.h
|
||||||
|
/usr/include/c++/8/cwchar
|
||||||
|
/usr/include/wchar.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn-common.h
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wchar.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/FILE.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h
|
||||||
|
/usr/include/c++/8/ext/atomicity.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h
|
||||||
|
/usr/include/pthread.h
|
||||||
|
/usr/include/endian.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/endian.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/typesizes.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap-16.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h
|
||||||
|
/usr/include/sched.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/time_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sched.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/cpu-set.h
|
||||||
|
/usr/include/time.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/time.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/timex.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/setjmp.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h
|
||||||
|
/usr/include/c++/8/ext/concurrence.h
|
||||||
|
/usr/include/c++/8/bits/stl_function.h
|
||||||
|
/usr/include/c++/8/backward/binders.h
|
||||||
|
/usr/include/c++/8/bits/uses_allocator.h
|
||||||
|
/usr/include/c++/8/bits/unique_ptr.h
|
||||||
|
/usr/include/c++/8/tuple
|
||||||
|
/usr/include/c++/8/array
|
||||||
|
/usr/include/c++/8/stdexcept
|
||||||
|
/usr/include/c++/8/string
|
||||||
|
/usr/include/c++/8/bits/char_traits.h
|
||||||
|
/usr/include/c++/8/cstdint
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h
|
||||||
|
/usr/include/stdint.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h
|
||||||
|
/usr/include/c++/8/bits/localefwd.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h
|
||||||
|
/usr/include/c++/8/clocale
|
||||||
|
/usr/include/locale.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/locale.h
|
||||||
|
/usr/include/c++/8/cctype
|
||||||
|
/usr/include/ctype.h
|
||||||
|
/usr/include/c++/8/bits/ostream_insert.h
|
||||||
|
/usr/include/c++/8/bits/cxxabi_forced.h
|
||||||
|
/usr/include/c++/8/bits/range_access.h
|
||||||
|
/usr/include/c++/8/bits/basic_string.h
|
||||||
|
/usr/include/c++/8/string_view
|
||||||
|
/usr/include/c++/8/limits
|
||||||
|
/usr/include/c++/8/bits/functional_hash.h
|
||||||
|
/usr/include/c++/8/bits/string_view.tcc
|
||||||
|
/usr/include/c++/8/ext/string_conversions.h
|
||||||
|
/usr/include/c++/8/cstdlib
|
||||||
|
/usr/include/stdlib.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitflags.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitstatus.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/types.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/select.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/select.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/sysmacros.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sysmacros.h
|
||||||
|
/usr/include/alloca.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h
|
||||||
|
/usr/include/c++/8/bits/std_abs.h
|
||||||
|
/usr/include/c++/8/cstdio
|
||||||
|
/usr/include/stdio.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libio.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/_G_config.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h
|
||||||
|
/usr/include/c++/8/cerrno
|
||||||
|
/usr/include/errno.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/errno.h
|
||||||
|
/usr/include/linux/errno.h
|
||||||
|
/usr/include/x86_64-linux-gnu/asm/errno.h
|
||||||
|
/usr/include/asm-generic/errno.h
|
||||||
|
/usr/include/asm-generic/errno-base.h
|
||||||
|
/usr/include/c++/8/bits/basic_string.tcc
|
||||||
|
/usr/include/c++/8/bits/invoke.h
|
||||||
|
/usr/include/c++/8/bits/shared_ptr.h
|
||||||
|
/usr/include/c++/8/bits/shared_ptr_base.h
|
||||||
|
/usr/include/c++/8/bits/allocated_ptr.h
|
||||||
|
/usr/include/c++/8/bits/refwrap.h
|
||||||
|
/usr/include/c++/8/ext/aligned_buffer.h
|
||||||
|
/usr/include/c++/8/bits/shared_ptr_atomic.h
|
||||||
|
/usr/include/c++/8/bits/atomic_base.h
|
||||||
|
/usr/include/c++/8/bits/atomic_lockfree_defines.h
|
||||||
|
/usr/include/c++/8/backward/auto_ptr.h
|
||||||
|
/usr/include/c++/8/vector
|
||||||
|
/usr/include/c++/8/bits/stl_vector.h
|
||||||
|
/usr/include/c++/8/bits/stl_bvector.h
|
||||||
|
/usr/include/c++/8/bits/vector.tcc
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/CLI.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Duration.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Pig.h
|
||||||
|
/usr/include/c++/8/ctime
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Interval.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Range.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Datetime.h
|
||||||
|
/usr/include/c++/8/set
|
||||||
|
/usr/include/c++/8/bits/stl_tree.h
|
||||||
|
/usr/include/c++/8/bits/node_handle.h
|
||||||
|
/usr/include/c++/8/optional
|
||||||
|
/usr/include/c++/8/bits/enable_special_members.h
|
||||||
|
/usr/include/c++/8/bits/stl_set.h
|
||||||
|
/usr/include/c++/8/bits/stl_multiset.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Lexer.h
|
||||||
|
/usr/include/c++/8/cstddef
|
||||||
|
/usr/include/c++/8/map
|
||||||
|
/usr/include/c++/8/bits/stl_map.h
|
||||||
|
/usr/include/c++/8/bits/stl_multimap.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Database.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Datafile.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/FS.h
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/stat.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stat.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Journal.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Transaction.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/UndoAction.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfoDatabase.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/TagInfo.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Extensions.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Rules.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Timer.h
|
||||||
|
/usr/include/c++/8/chrono
|
||||||
|
/usr/include/c++/8/ratio
|
||||||
|
/usr/include/c++/8/bits/parse_numbers.h
|
||||||
|
/usr/include/c++/8/iomanip
|
||||||
|
/usr/include/c++/8/bits/ios_base.h
|
||||||
|
/usr/include/c++/8/bits/locale_classes.h
|
||||||
|
/usr/include/c++/8/bits/locale_classes.tcc
|
||||||
|
/usr/include/c++/8/system_error
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h
|
||||||
|
/usr/include/c++/8/locale
|
||||||
|
/usr/include/c++/8/bits/locale_facets.h
|
||||||
|
/usr/include/c++/8/cwctype
|
||||||
|
/usr/include/wctype.h
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h
|
||||||
|
/usr/include/c++/8/streambuf
|
||||||
|
/usr/include/c++/8/bits/streambuf.tcc
|
||||||
|
/usr/include/c++/8/bits/streambuf_iterator.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h
|
||||||
|
/usr/include/c++/8/bits/locale_facets.tcc
|
||||||
|
/usr/include/c++/8/bits/locale_facets_nonio.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h
|
||||||
|
/usr/include/libintl.h
|
||||||
|
/usr/include/c++/8/bits/codecvt.h
|
||||||
|
/usr/include/c++/8/bits/locale_facets_nonio.tcc
|
||||||
|
/usr/include/c++/8/bits/locale_conv.h
|
||||||
|
/usr/include/c++/8/bits/quoted_string.h
|
||||||
|
/usr/include/c++/8/sstream
|
||||||
|
/usr/include/c++/8/istream
|
||||||
|
/usr/include/c++/8/ios
|
||||||
|
/usr/include/c++/8/bits/basic_ios.h
|
||||||
|
/usr/include/c++/8/bits/basic_ios.tcc
|
||||||
|
/usr/include/c++/8/ostream
|
||||||
|
/usr/include/c++/8/bits/ostream.tcc
|
||||||
|
/usr/include/c++/8/bits/istream.tcc
|
||||||
|
/usr/include/c++/8/bits/sstream.tcc
|
||||||
|
/usr/include/c++/8/iostream
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/shared.h
|
||||||
|
/usr/include/c++/8/algorithm
|
||||||
|
/usr/include/c++/8/bits/stl_algo.h
|
||||||
|
/usr/include/c++/8/bits/algorithmfwd.h
|
||||||
|
/usr/include/c++/8/bits/stl_heap.h
|
||||||
|
/usr/include/c++/8/bits/uniform_int_dist.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/timew.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Color.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/Exclusion.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/IntervalFilter.h
|
||||||
|
/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src/Palette.h
|
||||||
|
|
|
@ -0,0 +1,763 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
src/CMakeFiles/timew_executable.dir/timew.cpp.o: src/timew.cpp \
|
||||||
|
/usr/include/stdc-predef.h \
|
||||||
|
src/AtomicFile.h \
|
||||||
|
/usr/include/c++/8/memory \
|
||||||
|
/usr/include/c++/8/bits/stl_algobase.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h \
|
||||||
|
/usr/include/features.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/long-double.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h \
|
||||||
|
/usr/include/c++/8/bits/functexcept.h \
|
||||||
|
/usr/include/c++/8/bits/exception_defines.h \
|
||||||
|
/usr/include/c++/8/bits/cpp_type_traits.h \
|
||||||
|
/usr/include/c++/8/ext/type_traits.h \
|
||||||
|
/usr/include/c++/8/ext/numeric_traits.h \
|
||||||
|
/usr/include/c++/8/bits/stl_pair.h \
|
||||||
|
/usr/include/c++/8/bits/move.h \
|
||||||
|
/usr/include/c++/8/bits/concept_check.h \
|
||||||
|
/usr/include/c++/8/type_traits \
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_types.h \
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_funcs.h \
|
||||||
|
/usr/include/c++/8/debug/assertions.h \
|
||||||
|
/usr/include/c++/8/bits/stl_iterator.h \
|
||||||
|
/usr/include/c++/8/bits/ptr_traits.h \
|
||||||
|
/usr/include/c++/8/debug/debug.h \
|
||||||
|
/usr/include/c++/8/bits/predefined_ops.h \
|
||||||
|
/usr/include/c++/8/bits/allocator.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h \
|
||||||
|
/usr/include/c++/8/ext/new_allocator.h \
|
||||||
|
/usr/include/c++/8/new \
|
||||||
|
/usr/include/c++/8/exception \
|
||||||
|
/usr/include/c++/8/bits/exception.h \
|
||||||
|
/usr/include/c++/8/bits/exception_ptr.h \
|
||||||
|
/usr/include/c++/8/bits/cxxabi_init_exception.h \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h \
|
||||||
|
/usr/include/c++/8/typeinfo \
|
||||||
|
/usr/include/c++/8/bits/hash_bytes.h \
|
||||||
|
/usr/include/c++/8/bits/nested_exception.h \
|
||||||
|
/usr/include/c++/8/bits/memoryfwd.h \
|
||||||
|
/usr/include/c++/8/bits/stl_construct.h \
|
||||||
|
/usr/include/c++/8/ext/alloc_traits.h \
|
||||||
|
/usr/include/c++/8/bits/alloc_traits.h \
|
||||||
|
/usr/include/c++/8/bits/stl_uninitialized.h \
|
||||||
|
/usr/include/c++/8/utility \
|
||||||
|
/usr/include/c++/8/bits/stl_relops.h \
|
||||||
|
/usr/include/c++/8/initializer_list \
|
||||||
|
/usr/include/c++/8/bits/stl_tempbuf.h \
|
||||||
|
/usr/include/c++/8/bits/stl_raw_storage_iter.h \
|
||||||
|
/usr/include/c++/8/iosfwd \
|
||||||
|
/usr/include/c++/8/bits/stringfwd.h \
|
||||||
|
/usr/include/c++/8/bits/postypes.h \
|
||||||
|
/usr/include/c++/8/cwchar \
|
||||||
|
/usr/include/wchar.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wchar.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
|
||||||
|
/usr/include/c++/8/ext/atomicity.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h \
|
||||||
|
/usr/include/pthread.h \
|
||||||
|
/usr/include/endian.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/endian.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
|
||||||
|
/usr/include/sched.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sched.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
|
||||||
|
/usr/include/time.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/time.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/timex.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h \
|
||||||
|
/usr/include/c++/8/ext/concurrence.h \
|
||||||
|
/usr/include/c++/8/bits/stl_function.h \
|
||||||
|
/usr/include/c++/8/backward/binders.h \
|
||||||
|
/usr/include/c++/8/bits/uses_allocator.h \
|
||||||
|
/usr/include/c++/8/bits/unique_ptr.h \
|
||||||
|
/usr/include/c++/8/tuple \
|
||||||
|
/usr/include/c++/8/array \
|
||||||
|
/usr/include/c++/8/stdexcept \
|
||||||
|
/usr/include/c++/8/string \
|
||||||
|
/usr/include/c++/8/bits/char_traits.h \
|
||||||
|
/usr/include/c++/8/cstdint \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h \
|
||||||
|
/usr/include/stdint.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
|
||||||
|
/usr/include/c++/8/bits/localefwd.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h \
|
||||||
|
/usr/include/c++/8/clocale \
|
||||||
|
/usr/include/locale.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/locale.h \
|
||||||
|
/usr/include/c++/8/cctype \
|
||||||
|
/usr/include/ctype.h \
|
||||||
|
/usr/include/c++/8/bits/ostream_insert.h \
|
||||||
|
/usr/include/c++/8/bits/cxxabi_forced.h \
|
||||||
|
/usr/include/c++/8/bits/range_access.h \
|
||||||
|
/usr/include/c++/8/bits/basic_string.h \
|
||||||
|
/usr/include/c++/8/string_view \
|
||||||
|
/usr/include/c++/8/limits \
|
||||||
|
/usr/include/c++/8/bits/functional_hash.h \
|
||||||
|
/usr/include/c++/8/bits/string_view.tcc \
|
||||||
|
/usr/include/c++/8/ext/string_conversions.h \
|
||||||
|
/usr/include/c++/8/cstdlib \
|
||||||
|
/usr/include/stdlib.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitflags.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/types.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/select.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/select.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/sysmacros.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sysmacros.h \
|
||||||
|
/usr/include/alloca.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
|
||||||
|
/usr/include/c++/8/bits/std_abs.h \
|
||||||
|
/usr/include/c++/8/cstdio \
|
||||||
|
/usr/include/stdio.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libio.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/_G_config.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
|
||||||
|
/usr/include/c++/8/cerrno \
|
||||||
|
/usr/include/errno.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/errno.h \
|
||||||
|
/usr/include/linux/errno.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/asm/errno.h \
|
||||||
|
/usr/include/asm-generic/errno.h \
|
||||||
|
/usr/include/asm-generic/errno-base.h \
|
||||||
|
/usr/include/c++/8/bits/basic_string.tcc \
|
||||||
|
/usr/include/c++/8/bits/invoke.h \
|
||||||
|
/usr/include/c++/8/bits/shared_ptr.h \
|
||||||
|
/usr/include/c++/8/bits/shared_ptr_base.h \
|
||||||
|
/usr/include/c++/8/bits/allocated_ptr.h \
|
||||||
|
/usr/include/c++/8/bits/refwrap.h \
|
||||||
|
/usr/include/c++/8/ext/aligned_buffer.h \
|
||||||
|
/usr/include/c++/8/bits/shared_ptr_atomic.h \
|
||||||
|
/usr/include/c++/8/bits/atomic_base.h \
|
||||||
|
/usr/include/c++/8/bits/atomic_lockfree_defines.h \
|
||||||
|
/usr/include/c++/8/backward/auto_ptr.h \
|
||||||
|
/usr/include/c++/8/vector \
|
||||||
|
/usr/include/c++/8/bits/stl_vector.h \
|
||||||
|
/usr/include/c++/8/bits/stl_bvector.h \
|
||||||
|
/usr/include/c++/8/bits/vector.tcc \
|
||||||
|
src/CLI.h \
|
||||||
|
src/libshared/src/Duration.h \
|
||||||
|
src/libshared/src/Pig.h \
|
||||||
|
/usr/include/c++/8/ctime \
|
||||||
|
src/Interval.h \
|
||||||
|
src/Range.h \
|
||||||
|
src/libshared/src/Datetime.h \
|
||||||
|
/usr/include/c++/8/set \
|
||||||
|
/usr/include/c++/8/bits/stl_tree.h \
|
||||||
|
/usr/include/c++/8/bits/node_handle.h \
|
||||||
|
/usr/include/c++/8/optional \
|
||||||
|
/usr/include/c++/8/bits/enable_special_members.h \
|
||||||
|
/usr/include/c++/8/bits/stl_set.h \
|
||||||
|
/usr/include/c++/8/bits/stl_multiset.h \
|
||||||
|
src/libshared/src/Lexer.h \
|
||||||
|
/usr/include/c++/8/cstddef \
|
||||||
|
/usr/include/c++/8/map \
|
||||||
|
/usr/include/c++/8/bits/stl_map.h \
|
||||||
|
/usr/include/c++/8/bits/stl_multimap.h \
|
||||||
|
src/Database.h \
|
||||||
|
src/Datafile.h \
|
||||||
|
src/libshared/src/FS.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/stat.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stat.h \
|
||||||
|
src/Journal.h \
|
||||||
|
src/Transaction.h \
|
||||||
|
src/UndoAction.h \
|
||||||
|
src/TagInfoDatabase.h \
|
||||||
|
src/TagInfo.h \
|
||||||
|
src/Extensions.h \
|
||||||
|
src/Rules.h \
|
||||||
|
src/libshared/src/Timer.h \
|
||||||
|
/usr/include/c++/8/chrono \
|
||||||
|
/usr/include/c++/8/ratio \
|
||||||
|
/usr/include/c++/8/bits/parse_numbers.h \
|
||||||
|
/usr/include/c++/8/iomanip \
|
||||||
|
/usr/include/c++/8/bits/ios_base.h \
|
||||||
|
/usr/include/c++/8/bits/locale_classes.h \
|
||||||
|
/usr/include/c++/8/bits/locale_classes.tcc \
|
||||||
|
/usr/include/c++/8/system_error \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h \
|
||||||
|
/usr/include/c++/8/locale \
|
||||||
|
/usr/include/c++/8/bits/locale_facets.h \
|
||||||
|
/usr/include/c++/8/cwctype \
|
||||||
|
/usr/include/wctype.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h \
|
||||||
|
/usr/include/c++/8/streambuf \
|
||||||
|
/usr/include/c++/8/bits/streambuf.tcc \
|
||||||
|
/usr/include/c++/8/bits/streambuf_iterator.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h \
|
||||||
|
/usr/include/c++/8/bits/locale_facets.tcc \
|
||||||
|
/usr/include/c++/8/bits/locale_facets_nonio.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h \
|
||||||
|
/usr/include/libintl.h \
|
||||||
|
/usr/include/c++/8/bits/codecvt.h \
|
||||||
|
/usr/include/c++/8/bits/locale_facets_nonio.tcc \
|
||||||
|
/usr/include/c++/8/bits/locale_conv.h \
|
||||||
|
/usr/include/c++/8/bits/quoted_string.h \
|
||||||
|
/usr/include/c++/8/sstream \
|
||||||
|
/usr/include/c++/8/istream \
|
||||||
|
/usr/include/c++/8/ios \
|
||||||
|
/usr/include/c++/8/bits/basic_ios.h \
|
||||||
|
/usr/include/c++/8/bits/basic_ios.tcc \
|
||||||
|
/usr/include/c++/8/ostream \
|
||||||
|
/usr/include/c++/8/bits/ostream.tcc \
|
||||||
|
/usr/include/c++/8/bits/istream.tcc \
|
||||||
|
/usr/include/c++/8/bits/sstream.tcc \
|
||||||
|
/usr/include/c++/8/iostream \
|
||||||
|
src/libshared/src/shared.h \
|
||||||
|
/usr/include/c++/8/algorithm \
|
||||||
|
/usr/include/c++/8/bits/stl_algo.h \
|
||||||
|
/usr/include/c++/8/bits/algorithmfwd.h \
|
||||||
|
/usr/include/c++/8/bits/stl_heap.h \
|
||||||
|
/usr/include/c++/8/bits/uniform_int_dist.h \
|
||||||
|
src/timew.h \
|
||||||
|
src/libshared/src/Color.h \
|
||||||
|
src/Exclusion.h \
|
||||||
|
src/IntervalFilter.h \
|
||||||
|
src/libshared/src/Palette.h
|
||||||
|
|
||||||
|
|
||||||
|
src/libshared/src/Palette.h:
|
||||||
|
|
||||||
|
src/IntervalFilter.h:
|
||||||
|
|
||||||
|
src/Exclusion.h:
|
||||||
|
|
||||||
|
src/libshared/src/Color.h:
|
||||||
|
|
||||||
|
src/timew.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/algorithmfwd.h:
|
||||||
|
|
||||||
|
src/libshared/src/shared.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/iostream:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_heap.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_algo.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/sstream.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/ostream.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ostream:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/basic_ios.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/basic_ios.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ios:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/quoted_string.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_facets_nonio.tcc:
|
||||||
|
|
||||||
|
/usr/include/libintl.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_facets_nonio.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/streambuf_iterator.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h:
|
||||||
|
|
||||||
|
/usr/include/wctype.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cwctype:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_facets.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/system_error:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_classes.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/parse_numbers.h:
|
||||||
|
|
||||||
|
src/libshared/src/Timer.h:
|
||||||
|
|
||||||
|
src/TagInfoDatabase.h:
|
||||||
|
|
||||||
|
src/UndoAction.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/stat.h:
|
||||||
|
|
||||||
|
src/Datafile.h:
|
||||||
|
|
||||||
|
src/Database.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_multimap.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/map:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cstddef:
|
||||||
|
|
||||||
|
src/libshared/src/Lexer.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/enable_special_members.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/optional:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/node_handle.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_tree.h:
|
||||||
|
|
||||||
|
src/libshared/src/Datetime.h:
|
||||||
|
|
||||||
|
src/Range.h:
|
||||||
|
|
||||||
|
src/Interval.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/istream:
|
||||||
|
|
||||||
|
/usr/include/c++/8/iomanip:
|
||||||
|
|
||||||
|
src/libshared/src/Pig.h:
|
||||||
|
|
||||||
|
src/Extensions.h:
|
||||||
|
|
||||||
|
src/libshared/src/Duration.h:
|
||||||
|
|
||||||
|
src/CLI.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/vector.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_conv.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_bvector.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/vector:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stat.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types.h:
|
||||||
|
|
||||||
|
/usr/include/wchar.h:
|
||||||
|
|
||||||
|
/usr/include/endian.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/ptr_traits.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h:
|
||||||
|
|
||||||
|
src/Transaction.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/array:
|
||||||
|
|
||||||
|
/usr/include/c++/8/streambuf:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ctime:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/setjmp.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_multiset.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wchar.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/exception_ptr.h:
|
||||||
|
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/predefined_ops.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_uninitialized.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/new_allocator.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/sstream:
|
||||||
|
|
||||||
|
/usr/include/c++/8/iosfwd:
|
||||||
|
|
||||||
|
src/timew.cpp:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_set.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_tempbuf.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_relops.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/range_access.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/alloc_traits.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_raw_storage_iter.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/alloc_traits.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/new:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h:
|
||||||
|
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitflags.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/cxxabi_init_exception.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/algorithm:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/wordsize.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/string_conversions.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/istream.tcc:
|
||||||
|
|
||||||
|
/usr/include/c++/8/debug/assertions.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/libio.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/cdefs.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/allocator.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/functexcept.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/ios_base.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/endian.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/shared_ptr_base.h:
|
||||||
|
|
||||||
|
/usr/include/stdc-predef.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/limits:
|
||||||
|
|
||||||
|
src/libshared/src/FS.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/basic_string.tcc:
|
||||||
|
|
||||||
|
src/Rules.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/atomic_lockfree_defines.h:
|
||||||
|
|
||||||
|
src/AtomicFile.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/chrono:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_algobase.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/FILE.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/select.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_types.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/postypes.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cwchar:
|
||||||
|
|
||||||
|
/usr/include/ctype.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/errno.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/cpp_type_traits.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/locale:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/type_traits.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/clocale:
|
||||||
|
|
||||||
|
/usr/include/pthread.h:
|
||||||
|
|
||||||
|
/usr/include/errno.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/backward/auto_ptr.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stringfwd.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/char_traits.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_iterator_base_funcs.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/atomicity.h:
|
||||||
|
|
||||||
|
/usr/include/linux/errno.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/move.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/initializer_list:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/nested_exception.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_pair.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/concept_check.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_classes.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/type_traits:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_iterator.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/memory:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/debug/debug.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/invoke.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_construct.h:
|
||||||
|
|
||||||
|
/usr/include/asm-generic/errno-base.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/backward/binders.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/exception:
|
||||||
|
|
||||||
|
/usr/include/stdint.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/streambuf.tcc:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/cpu-set.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/hash_bytes.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ratio:
|
||||||
|
|
||||||
|
/usr/include/sched.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/typeinfo:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/string_view.tcc:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
|
||||||
|
|
||||||
|
/usr/include/stdlib.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/aligned_buffer.h:
|
||||||
|
|
||||||
|
/usr/include/time.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/time.h:
|
||||||
|
|
||||||
|
/usr/include/alloca.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/timex.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/concurrence.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_map.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_function.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/uses_allocator.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/unique_ptr.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/tuple:
|
||||||
|
|
||||||
|
/usr/include/c++/8/stdexcept:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/floatn-common.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/locale.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/ostream_insert.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/string:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cstdint:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/uniform_int_dist.h:
|
||||||
|
|
||||||
|
src/Journal.h:
|
||||||
|
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/refwrap.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cctype:
|
||||||
|
|
||||||
|
/usr/include/locale.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/cxxabi_forced.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/locale_facets.tcc:
|
||||||
|
|
||||||
|
src/TagInfo.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/basic_string.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/long-double.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/string_view:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/functional_hash.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cstdlib:
|
||||||
|
|
||||||
|
/usr/include/c++/8/set:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/exception_defines.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/ext/numeric_traits.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/std_abs.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/types.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/sys/select.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
|
||||||
|
|
||||||
|
/usr/include/stdio.h:
|
||||||
|
|
||||||
|
/usr/include/features.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sysmacros.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/stl_vector.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/memoryfwd.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cstdio:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/codecvt.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/utility:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/shared_ptr.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/_G_config.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sched.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/cerrno:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/asm/errno.h:
|
||||||
|
|
||||||
|
/usr/include/asm-generic/errno.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/allocated_ptr.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/typesizes.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/localefwd.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/exception.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/shared_ptr_atomic.h:
|
||||||
|
|
||||||
|
/usr/include/x86_64-linux-gnu/bits/types/time_t.h:
|
||||||
|
|
||||||
|
/usr/include/c++/8/bits/atomic_base.h:
|
|
@ -0,0 +1,2 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Timestamp file for compiler generated dependencies management for timew_executable.
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Empty dependencies file for timew_executable.
|
||||||
|
# This may be replaced when dependencies are built.
|
|
@ -0,0 +1,10 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.23
|
||||||
|
|
||||||
|
# compile CXX with /usr/bin/c++
|
||||||
|
CXX_DEFINES =
|
||||||
|
|
||||||
|
CXX_INCLUDES = -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1 -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/commands -I/home/jdaugherty/work/pkgs/taskw/timew-1.7.1/src/libshared/src
|
||||||
|
|
||||||
|
CXX_FLAGS = -Wall -Wextra -Wsign-compare -Wreturn-type -g -std=gnu++17
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
/usr/bin/c++ -Wall -Wextra -Wsign-compare -Wreturn-type -g CMakeFiles/timew_executable.dir/timew.cpp.o -o timew libtimew.a commands/libcommands.a libtimew.a liblibshared.a
|
|
@ -0,0 +1,3 @@
|
||||||
|
CMAKE_PROGRESS_1 =
|
||||||
|
CMAKE_PROGRESS_2 = 98
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
cmake_minimum_required (VERSION 3.8)
|
||||||
|
include_directories (${CMAKE_SOURCE_DIR}
|
||||||
|
${CMAKE_SOURCE_DIR}/src
|
||||||
|
${CMAKE_SOURCE_DIR}/src/commands
|
||||||
|
${CMAKE_SOURCE_DIR}/src/libshared/src
|
||||||
|
${TIMEW_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
set (timew_SRCS AtomicFile.cpp AtomicFile.h
|
||||||
|
CLI.cpp CLI.h
|
||||||
|
Chart.cpp Chart.h
|
||||||
|
ChartConfig.h
|
||||||
|
Database.cpp Database.h
|
||||||
|
Datafile.cpp Datafile.h
|
||||||
|
DatetimeParser.cpp DatetimeParser.h
|
||||||
|
Exclusion.cpp Exclusion.h
|
||||||
|
Extensions.cpp Extensions.h
|
||||||
|
ExtensionsTable.cpp ExtensionsTable.h
|
||||||
|
GapsTable.cpp GapsTable.h
|
||||||
|
Interval.cpp Interval.h
|
||||||
|
IntervalFactory.cpp IntervalFactory.h
|
||||||
|
IntervalFilter.cpp IntervalFilter.h
|
||||||
|
IntervalFilterAndGroup.cpp IntervalFilterAndGroup.h
|
||||||
|
IntervalFilterAllInRange.cpp IntervalFilterAllInRange.h
|
||||||
|
IntervalFilterAllWithIds.cpp IntervalFilterAllWithIds.h
|
||||||
|
IntervalFilterAllWithTags.cpp IntervalFilterAllWithTags.h
|
||||||
|
IntervalFilterTagsDisjoint.cpp IntervalFilterTagsDisjoint.h
|
||||||
|
IntervalFilterFirstOf.cpp IntervalFilterFirstOf.h
|
||||||
|
Journal.cpp Journal.h
|
||||||
|
Range.cpp Range.h
|
||||||
|
Rules.cpp Rules.h
|
||||||
|
SummaryTable.cpp SummaryTable.h
|
||||||
|
TagDescription.cpp TagDescription.h
|
||||||
|
TagInfo.cpp TagInfo.h
|
||||||
|
TagInfoDatabase.cpp TagInfoDatabase.h
|
||||||
|
TagsTable.cpp TagsTable.h
|
||||||
|
Transaction.cpp Transaction.h
|
||||||
|
TransactionsFactory.cpp TransactionsFactory.h
|
||||||
|
UndoAction.cpp UndoAction.h
|
||||||
|
data.cpp
|
||||||
|
dom.cpp
|
||||||
|
init.cpp
|
||||||
|
helper.cpp
|
||||||
|
paths.cpp paths.h
|
||||||
|
log.cpp
|
||||||
|
util.cpp
|
||||||
|
validate.cpp)
|
||||||
|
|
||||||
|
set (libshared_SRCS libshared/src/Args.cpp libshared/src/Args.h
|
||||||
|
libshared/src/Color.cpp libshared/src/Color.h
|
||||||
|
libshared/src/Composite.cpp libshared/src/Composite.h
|
||||||
|
libshared/src/Configuration.cpp libshared/src/Configuration.h
|
||||||
|
libshared/src/Datetime.cpp libshared/src/Datetime.h
|
||||||
|
libshared/src/Duration.cpp libshared/src/Duration.h
|
||||||
|
libshared/src/FS.cpp libshared/src/FS.h
|
||||||
|
libshared/src/JSON.cpp libshared/src/JSON.h
|
||||||
|
libshared/src/Lexer.cpp libshared/src/Lexer.h
|
||||||
|
libshared/src/Msg.cpp libshared/src/Msg.h
|
||||||
|
libshared/src/Palette.cpp libshared/src/Palette.h
|
||||||
|
libshared/src/Pig.cpp libshared/src/Pig.h
|
||||||
|
libshared/src/RX.cpp libshared/src/RX.h
|
||||||
|
libshared/src/Table.cpp libshared/src/Table.h
|
||||||
|
libshared/src/Timer.cpp libshared/src/Timer.h
|
||||||
|
libshared/src/format.cpp libshared/src/format.h
|
||||||
|
libshared/src/shared.cpp libshared/src/shared.h
|
||||||
|
libshared/src/unicode.cpp libshared/src/unicode.h
|
||||||
|
libshared/src/utf8.cpp libshared/src/utf8.h
|
||||||
|
libshared/src/wcwidth.h)
|
||||||
|
|
||||||
|
add_library (timew STATIC ${timew_SRCS})
|
||||||
|
add_library (libshared STATIC ${libshared_SRCS})
|
||||||
|
add_executable (timew_executable timew.cpp)
|
||||||
|
add_executable (lex_executable lex.cpp)
|
||||||
|
|
||||||
|
target_link_libraries (timew_executable timew commands timew libshared ${TIMEW_LIBRARIES})
|
||||||
|
target_link_libraries (lex_executable timew libshared ${TIMEW_LIBRARIES})
|
||||||
|
|
||||||
|
set_property (TARGET timew_executable PROPERTY OUTPUT_NAME "timew")
|
||||||
|
set_property (TARGET lex_executable PROPERTY OUTPUT_NAME "lex")
|
||||||
|
|
||||||
|
install (TARGETS timew_executable DESTINATION ${TIMEW_BINDIR})
|
|
@ -0,0 +1,608 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2019 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Chart.h>
|
||||||
|
#include <Composite.h>
|
||||||
|
#include <Duration.h>
|
||||||
|
#include <cassert>
|
||||||
|
#include <format.h>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <shared.h>
|
||||||
|
#include <timew.h>
|
||||||
|
#include <utf8.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Chart::Chart (const ChartConfig& configuration) :
|
||||||
|
reference_datetime (configuration.reference_datetime),
|
||||||
|
with_label_month (configuration.with_label_month),
|
||||||
|
with_label_week (configuration.with_label_week),
|
||||||
|
with_label_months (configuration.with_label_months),
|
||||||
|
with_label_weeks (configuration.with_label_weeks),
|
||||||
|
with_label_weekday (configuration.with_label_weekday),
|
||||||
|
with_label_day (configuration.with_label_day),
|
||||||
|
with_ids (configuration.with_ids),
|
||||||
|
with_summary (configuration.with_summary),
|
||||||
|
with_holidays (configuration.with_holidays),
|
||||||
|
with_totals (configuration.with_totals),
|
||||||
|
with_internal_axis (configuration.with_internal_axis),
|
||||||
|
show_intervals (configuration.show_intervals),
|
||||||
|
determine_hour_range (configuration.determine_hour_range),
|
||||||
|
minutes_per_char (configuration.minutes_per_char),
|
||||||
|
spacing (configuration.spacing),
|
||||||
|
num_lines (configuration.num_lines),
|
||||||
|
color_today (configuration.color_today),
|
||||||
|
color_holiday (configuration.color_holiday),
|
||||||
|
color_label (configuration.color_label),
|
||||||
|
color_exclusion (configuration.color_exclusion),
|
||||||
|
tag_colors (configuration.tag_colors),
|
||||||
|
cell_width (60 / minutes_per_char + spacing),
|
||||||
|
reference_hour (reference_datetime.hour ())
|
||||||
|
{ }
|
||||||
|
|
||||||
|
std::string Chart::render (
|
||||||
|
const Range& range,
|
||||||
|
const std::vector <Interval>& tracked,
|
||||||
|
const std::vector <Range>& exclusions,
|
||||||
|
const std::map <Datetime, std::string>& holidays)
|
||||||
|
{
|
||||||
|
// Determine hours shown.
|
||||||
|
auto hour_range = determine_hour_range
|
||||||
|
? determineHourRange (range, tracked)
|
||||||
|
: std::make_pair (0, 23);
|
||||||
|
|
||||||
|
int first_hour = hour_range.first;
|
||||||
|
int last_hour = hour_range.second;
|
||||||
|
|
||||||
|
debug (format ("Day range is from {1}:00 - {2}:00", first_hour, last_hour));
|
||||||
|
|
||||||
|
const auto indent_size = getIndentSize ();
|
||||||
|
const auto total_width = (last_hour - first_hour + 1) * (cell_width);
|
||||||
|
const auto padding_size = indent_size + total_width + 1;
|
||||||
|
const auto indent = std::string (indent_size, ' ');
|
||||||
|
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
out << '\n';
|
||||||
|
|
||||||
|
// Render the axis.
|
||||||
|
if (! with_internal_axis)
|
||||||
|
{
|
||||||
|
out << indent << renderAxis (first_hour, last_hour);
|
||||||
|
}
|
||||||
|
|
||||||
|
// For rendering labels on edge detection.
|
||||||
|
Datetime previous {0};
|
||||||
|
|
||||||
|
// Each day is rendered separately.
|
||||||
|
time_t total_work = 0;
|
||||||
|
|
||||||
|
for (Datetime day = range.start; day < range.end; day++)
|
||||||
|
{
|
||||||
|
// Render the exclusion blocks.
|
||||||
|
|
||||||
|
// Add an empty string with no color, to reserve width, so this function
|
||||||
|
// can simply concatenate to lines[i].str ().
|
||||||
|
std::vector <Composite> lines (num_lines);
|
||||||
|
for (int i = 0; i < num_lines; ++i)
|
||||||
|
{
|
||||||
|
lines[i].add (std::string (total_width, ' '), 0, Color ());
|
||||||
|
}
|
||||||
|
|
||||||
|
renderExclusionBlocks (lines, day, first_hour, last_hour, exclusions);
|
||||||
|
|
||||||
|
time_t work = 0;
|
||||||
|
if (! show_intervals)
|
||||||
|
{
|
||||||
|
for (auto& track : tracked)
|
||||||
|
{
|
||||||
|
time_t interval_work = 0;
|
||||||
|
renderInterval (lines, day, track, first_hour, interval_work);
|
||||||
|
work += interval_work;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto color_day = getDayColor (day, holidays);
|
||||||
|
|
||||||
|
auto labelMonth = with_label_month ? renderMonth (previous, day) : "";
|
||||||
|
auto labelWeek = ( with_label_week || with_label_weeks )
|
||||||
|
? renderWeek (previous, day) : "";
|
||||||
|
auto labelWeekday = with_label_weekday ? renderWeekday (day, color_day) : "";
|
||||||
|
auto labelDay = with_label_day ? renderDay (day, color_day) : "";
|
||||||
|
|
||||||
|
out << labelMonth
|
||||||
|
<< labelWeek
|
||||||
|
<< labelWeekday
|
||||||
|
<< labelDay
|
||||||
|
<< lines[0].str ();
|
||||||
|
|
||||||
|
if (lines.size () > 1)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 1; i < lines.size (); ++i)
|
||||||
|
{
|
||||||
|
out << "\n"
|
||||||
|
<< indent
|
||||||
|
<< lines[i].str ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out << (with_totals ? renderTotal (work) : "")
|
||||||
|
<< '\n';
|
||||||
|
|
||||||
|
previous = day;
|
||||||
|
total_work += work;
|
||||||
|
}
|
||||||
|
|
||||||
|
out << (with_totals ? renderSubTotal (total_work, std::string (padding_size, ' ')) : "")
|
||||||
|
<< (with_holidays ? renderHolidays (holidays) : "")
|
||||||
|
<< (with_summary ? renderSummary (indent, range, exclusions, tracked) : "");
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
unsigned long Chart::getIndentSize ()
|
||||||
|
{
|
||||||
|
return (with_label_month ? 4 : 0) +
|
||||||
|
(with_label_week ? 4 : 0) +
|
||||||
|
(with_label_day ? 3 : 0) +
|
||||||
|
(with_label_weekday ? 4 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Scan all tracked intervals, looking for the earliest and latest hour into
|
||||||
|
// which an interval extends.
|
||||||
|
std::pair <int, int> Chart::determineHourRange (
|
||||||
|
const Range& range,
|
||||||
|
const std::vector <Interval>& tracked)
|
||||||
|
{
|
||||||
|
// If there is no data, show the whole day.
|
||||||
|
if (tracked.empty ())
|
||||||
|
{
|
||||||
|
return std::make_pair (0, 23);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the extreme time range for the filtered data.
|
||||||
|
auto first_hour = 23;
|
||||||
|
auto last_hour = 0;
|
||||||
|
|
||||||
|
for (Datetime day = range.start; day < range.end; day++)
|
||||||
|
{
|
||||||
|
auto day_range = getFullDay (day);
|
||||||
|
|
||||||
|
for (auto& track : tracked)
|
||||||
|
{
|
||||||
|
Interval test {track};
|
||||||
|
|
||||||
|
if (test.is_open ())
|
||||||
|
{
|
||||||
|
test.end = reference_datetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (day_range.overlaps (test))
|
||||||
|
{
|
||||||
|
Interval clipped = clip (test, day_range);
|
||||||
|
|
||||||
|
if (clipped.start.hour () < first_hour)
|
||||||
|
{
|
||||||
|
first_hour = clipped.start.hour ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! clipped.is_open () && clipped.end.hour () > last_hour)
|
||||||
|
{
|
||||||
|
last_hour = clipped.end.hour ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (first_hour == 23 && last_hour == 0)
|
||||||
|
{
|
||||||
|
first_hour = reference_hour;
|
||||||
|
last_hour = std::min (first_hour + 1, 23);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
first_hour = std::max (first_hour - 1, 0);
|
||||||
|
last_hour = std::min (last_hour, 23);
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::make_pair (first_hour, last_hour);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderAxis (const int first_hour, const int last_hour)
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
for (int hour = first_hour; hour <= last_hour; hour++)
|
||||||
|
{
|
||||||
|
auto color = getHourColor (hour);
|
||||||
|
out << color.colorize (leftJustify (hour, cell_width));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (with_totals)
|
||||||
|
{
|
||||||
|
out << " " << color_label.colorize ("Total");
|
||||||
|
}
|
||||||
|
|
||||||
|
out << '\n';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderMonth (const Datetime& previous, const Datetime& day)
|
||||||
|
{
|
||||||
|
const auto show_month = previous.month () != day.month ();
|
||||||
|
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
out << (show_month ? Datetime::monthNameShort (day.month ()) : " ")
|
||||||
|
<< ' ';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderWeek (const Datetime& previous, const Datetime& day)
|
||||||
|
{
|
||||||
|
const auto show_week = previous.week () != day.week ();
|
||||||
|
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
out << (show_week ? leftJustify (format ("W{1}", day.week ()), 3) : " ")
|
||||||
|
<< ' ';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderWeekday (Datetime& day, const Color& color)
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
out << color.colorize (Datetime::dayNameShort (day.dayOfWeek ()))
|
||||||
|
<< ' ';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderDay (Datetime& day, const Color& color)
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
out << color.colorize (rightJustify (day.day (), 2))
|
||||||
|
<< ' ';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Color Chart::getDayColor (
|
||||||
|
const Datetime& day,
|
||||||
|
const std::map <Datetime, std::string>& holidays)
|
||||||
|
{
|
||||||
|
if (day.sameDay (reference_datetime))
|
||||||
|
{
|
||||||
|
return color_today;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& entry : holidays)
|
||||||
|
{
|
||||||
|
if (day.sameDay (entry.first))
|
||||||
|
{
|
||||||
|
return color_holiday;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Color {};
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Color Chart::getHourColor (int hour) const
|
||||||
|
{
|
||||||
|
return hour == reference_hour ? color_today : color_label;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderTotal (time_t work)
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
if (work)
|
||||||
|
{
|
||||||
|
int hours = work / 3600;
|
||||||
|
int minutes = (work % 3600) / 60;
|
||||||
|
out << " "
|
||||||
|
<< std::setw (3) << std::setfill (' ') << hours
|
||||||
|
<< ':'
|
||||||
|
<< std::setw (2) << std::setfill ('0') << minutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderSubTotal (
|
||||||
|
time_t total_work,
|
||||||
|
const std::string& padding)
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
int hours = total_work / 3600;
|
||||||
|
int minutes = (total_work % 3600) / 60;
|
||||||
|
|
||||||
|
out << padding
|
||||||
|
<< Color ("underline").colorize (" ")
|
||||||
|
<< '\n'
|
||||||
|
<< padding
|
||||||
|
<< std::setw (3) << std::setfill (' ') << hours
|
||||||
|
<< ':'
|
||||||
|
<< std::setw (2) << std::setfill ('0') << minutes
|
||||||
|
<< '\n';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Chart::renderExclusionBlocks (
|
||||||
|
std::vector <Composite>& lines,
|
||||||
|
const Datetime& day,
|
||||||
|
int first_hour,
|
||||||
|
int last_hour,
|
||||||
|
const std::vector <Range>& exclusions)
|
||||||
|
{
|
||||||
|
// Render the exclusion blocks.
|
||||||
|
for (int hour = first_hour; hour <= last_hour; hour++)
|
||||||
|
{
|
||||||
|
// Construct a range representing a single 'hour', of 'day'.
|
||||||
|
Range hour_range (Datetime (day.year (), day.month (), day.day (), hour, 0, 0),
|
||||||
|
Datetime (day.year (), day.month (), day.day (), hour + 1, 0, 0));
|
||||||
|
|
||||||
|
if (with_internal_axis)
|
||||||
|
{
|
||||||
|
auto label = format ("{1}", hour);
|
||||||
|
int offset = (hour - first_hour) * cell_width;
|
||||||
|
lines[0].add (label, offset, color_label);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& exclusion : exclusions)
|
||||||
|
{
|
||||||
|
if (exclusion.overlaps (hour_range))
|
||||||
|
{
|
||||||
|
// Determine which of the character blocks included.
|
||||||
|
auto sub_hour = exclusion.intersect (hour_range);
|
||||||
|
auto start_block = quantizeToNMinutes (sub_hour.start.minute (), minutes_per_char) / minutes_per_char;
|
||||||
|
auto end_block = quantizeToNMinutes (sub_hour.end.minute () == 0 ? 60 : sub_hour.end.minute (), minutes_per_char) / minutes_per_char;
|
||||||
|
|
||||||
|
int offset = (hour - first_hour) * cell_width + start_block;
|
||||||
|
int width = end_block - start_block;
|
||||||
|
std::string block (width, ' ');
|
||||||
|
|
||||||
|
for (auto& line : lines)
|
||||||
|
{
|
||||||
|
line.add (block, offset, color_exclusion);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (with_internal_axis)
|
||||||
|
{
|
||||||
|
auto label = format ("{1}", hour);
|
||||||
|
if (start_block == 0 &&
|
||||||
|
width >= static_cast <int> (label.length ()))
|
||||||
|
{
|
||||||
|
lines[0].add (label, offset, color_exclusion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Chart::renderInterval (
|
||||||
|
std::vector <Composite>& lines,
|
||||||
|
const Datetime& day,
|
||||||
|
const Interval& track,
|
||||||
|
const int first_hour,
|
||||||
|
time_t& work)
|
||||||
|
{
|
||||||
|
// Ignore any track that doesn't overlap with day.
|
||||||
|
auto day_range = getFullDay (day);
|
||||||
|
if (! day_range.overlaps (track) || (track.is_open () && day > reference_datetime))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the track is open and day is today, then closed the track now, otherwise
|
||||||
|
// it will be rendered until midnight.
|
||||||
|
Interval clipped = clip (track, day_range);
|
||||||
|
if (track.is_open ())
|
||||||
|
{
|
||||||
|
if (day_range.start.sameDay (reference_datetime))
|
||||||
|
{
|
||||||
|
clipped.end = reference_datetime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
clipped.end = day_range.end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto start_mins = (clipped.start.hour () - first_hour) * 60 + clipped.start.minute ();
|
||||||
|
auto end_mins = (clipped.end.hour () - first_hour) * 60 + clipped.end.minute ();
|
||||||
|
|
||||||
|
if (clipped.end.hour () == 0)
|
||||||
|
{
|
||||||
|
end_mins += (clipped.end.day () + (clipped.end.month () - clipped.start.month () - 1) * clipped.start.day ()) * 24 * 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
work = clipped.total ();
|
||||||
|
|
||||||
|
auto start_block = quantizeToNMinutes (start_mins, minutes_per_char) / minutes_per_char;
|
||||||
|
auto end_block = quantizeToNMinutes (end_mins == start_mins ? start_mins + 60 : end_mins, minutes_per_char) / minutes_per_char;
|
||||||
|
|
||||||
|
int start_offset = start_block + (spacing * (start_mins / 60));
|
||||||
|
int end_offset = end_block + (spacing * (end_mins / 60));
|
||||||
|
|
||||||
|
if (end_offset > start_offset)
|
||||||
|
{
|
||||||
|
// Determine color of interval.
|
||||||
|
Color colorTrack = chartIntervalColor (track.tags (), tag_colors);
|
||||||
|
|
||||||
|
// Properly format the tags within the space.
|
||||||
|
std::string label;
|
||||||
|
if (with_ids)
|
||||||
|
{
|
||||||
|
label = format ("@{1}", track.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& tag : track.tags ())
|
||||||
|
{
|
||||||
|
if (! label.empty ())
|
||||||
|
{
|
||||||
|
label += ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
label += tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto width = end_offset - start_offset;
|
||||||
|
|
||||||
|
if (width)
|
||||||
|
{
|
||||||
|
std::vector <std::string> text_lines;
|
||||||
|
|
||||||
|
// --
|
||||||
|
// The hang/memory consumption in #309 is due to a bug in libshared's wrapText
|
||||||
|
// It would be best to make wrapText/extractText width be the count of characters on the screen (and not a byte width).
|
||||||
|
// This fix will only show the tag if the utf8 character width is within the width (and it won't try to wrap),
|
||||||
|
// but otherwise functions normally for text where the utf-8 width matches the byte length of the label.
|
||||||
|
//
|
||||||
|
size_t utf8_characters = utf8_text_width (label);
|
||||||
|
if (static_cast <size_t> (width) >= utf8_characters)
|
||||||
|
{
|
||||||
|
text_lines.push_back (label);
|
||||||
|
}
|
||||||
|
else if (utf8_characters == label.size ())
|
||||||
|
{
|
||||||
|
wrapText (text_lines, label, width, false);
|
||||||
|
}
|
||||||
|
// --
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < lines.size (); ++i)
|
||||||
|
{
|
||||||
|
if (i < text_lines.size ())
|
||||||
|
{
|
||||||
|
lines[i].add (leftJustify (text_lines[i], width), start_offset, colorTrack);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lines[i].add (std::string (width, ' '), start_offset, colorTrack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// An open interval gets a "+" in the bottom right corner
|
||||||
|
if (track.is_open ())
|
||||||
|
{
|
||||||
|
lines.back ().add ("+", start_offset + width - 1, colorTrack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderHolidays (const std::map <Datetime, std::string>& holidays)
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
for (auto& entry : holidays)
|
||||||
|
{
|
||||||
|
out << entry.first.toString ("Y-M-D")
|
||||||
|
<< " "
|
||||||
|
<< entry.second
|
||||||
|
<< '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Chart::renderSummary (
|
||||||
|
const std::string& indent,
|
||||||
|
const Range& range,
|
||||||
|
const std::vector <Range>& exclusions,
|
||||||
|
const std::vector <Interval>& tracked)
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
time_t total_unavailable = 0;
|
||||||
|
|
||||||
|
for (auto& exclusion : exclusions)
|
||||||
|
{
|
||||||
|
if (range.overlaps (exclusion))
|
||||||
|
{
|
||||||
|
total_unavailable += range.intersect (exclusion).total ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t total_worked = 0;
|
||||||
|
|
||||||
|
if (! show_intervals)
|
||||||
|
{
|
||||||
|
for (auto& interval : tracked)
|
||||||
|
{
|
||||||
|
if (range.overlaps (interval))
|
||||||
|
{
|
||||||
|
Interval clipped = clip (interval, range);
|
||||||
|
if (interval.is_open ())
|
||||||
|
{
|
||||||
|
clipped.end = reference_datetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
total_worked += clipped.total ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto total_available = range.total () - total_unavailable;
|
||||||
|
assert (total_available >= 0);
|
||||||
|
auto total_remaining = total_available - total_worked;
|
||||||
|
|
||||||
|
out << '\n'
|
||||||
|
<< indent << "Tracked "
|
||||||
|
<< std::setw (13) << std::setfill (' ') << Duration (total_worked).formatHours () << '\n';
|
||||||
|
|
||||||
|
if (total_remaining >= 0)
|
||||||
|
{
|
||||||
|
out << indent << "Available "
|
||||||
|
<< std::setw (13) << std::setfill (' ') << Duration (total_remaining).formatHours () << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
out << indent << "Total "
|
||||||
|
<< std::setw (13) << std::setfill (' ') << Duration (total_available).formatHours () << '\n'
|
||||||
|
<< '\n';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2019, 2022 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_CHART
|
||||||
|
#define INCLUDED_CHART
|
||||||
|
|
||||||
|
#include <ChartConfig.h>
|
||||||
|
#include <Composite.h>
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
class Chart
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit Chart (const ChartConfig& configuration);
|
||||||
|
|
||||||
|
std::string render (const Range&, const std::vector <Interval>&, const std::vector <Range>&, const std::map <Datetime, std::string>&);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string renderAxis (int, int);
|
||||||
|
std::string renderDay (Datetime&, const Color&);
|
||||||
|
std::string renderHolidays (const std::map <Datetime, std::string>&);
|
||||||
|
std::string renderMonth (const Datetime&, const Datetime&);
|
||||||
|
std::string renderSubTotal (time_t, const std::string&);
|
||||||
|
std::string renderSummary (const std::string&, const Range&, const std::vector <Range>&, const std::vector <Interval>&);
|
||||||
|
std::string renderTotal (time_t);
|
||||||
|
std::string renderWeek (const Datetime&, const Datetime&);
|
||||||
|
std::string renderWeekday (Datetime&, const Color&);
|
||||||
|
|
||||||
|
void renderExclusionBlocks (std::vector <Composite>&, const Datetime&, int, int, const std::vector <Range>&);
|
||||||
|
void renderInterval (std::vector <Composite>&, const Datetime&, const Interval&, int, time_t&);
|
||||||
|
|
||||||
|
unsigned long getIndentSize ();
|
||||||
|
|
||||||
|
std::pair <int, int> determineHourRange (const Range&, const std::vector <Interval>&);
|
||||||
|
|
||||||
|
Color getDayColor (const Datetime&, const std::map <Datetime, std::string>&);
|
||||||
|
Color getHourColor (int) const;
|
||||||
|
|
||||||
|
const Datetime reference_datetime;
|
||||||
|
const bool with_label_month;
|
||||||
|
const bool with_label_week;
|
||||||
|
const bool with_label_months;
|
||||||
|
const bool with_label_weeks;
|
||||||
|
const bool with_label_weekday;
|
||||||
|
const bool with_label_day;
|
||||||
|
const bool with_ids;
|
||||||
|
const bool with_summary;
|
||||||
|
const bool with_holidays;
|
||||||
|
const bool with_totals;
|
||||||
|
const bool with_internal_axis;
|
||||||
|
const bool show_intervals;
|
||||||
|
const bool determine_hour_range;
|
||||||
|
const int minutes_per_char;
|
||||||
|
const int spacing;
|
||||||
|
const int num_lines;
|
||||||
|
const Color color_today;
|
||||||
|
const Color color_holiday;
|
||||||
|
const Color color_label;
|
||||||
|
const Color color_exclusion;
|
||||||
|
const std::map <std::string, Color> tag_colors;
|
||||||
|
|
||||||
|
const int cell_width;
|
||||||
|
const int reference_hour;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,61 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2019, 2022 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_CHARTCONFIG
|
||||||
|
#define INCLUDED_CHARTCONFIG
|
||||||
|
|
||||||
|
#include <Color.h>
|
||||||
|
#include <Datetime.h>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
class ChartConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Datetime reference_datetime;
|
||||||
|
bool with_label_month;
|
||||||
|
bool with_label_week;
|
||||||
|
bool with_label_months;
|
||||||
|
bool with_label_weeks;
|
||||||
|
bool with_label_weekday;
|
||||||
|
bool with_label_day;
|
||||||
|
bool with_ids;
|
||||||
|
bool with_summary;
|
||||||
|
bool with_holidays;
|
||||||
|
bool with_totals;
|
||||||
|
bool with_internal_axis;
|
||||||
|
bool show_intervals;
|
||||||
|
bool determine_hour_range;
|
||||||
|
int minutes_per_char;
|
||||||
|
int spacing;
|
||||||
|
int num_lines;
|
||||||
|
Color color_today;
|
||||||
|
Color color_holiday;
|
||||||
|
Color color_label;
|
||||||
|
Color color_exclusion;
|
||||||
|
std::map <std::string, Color> tag_colors;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,558 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016, 2018 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <AtomicFile.h>
|
||||||
|
#include <Database.h>
|
||||||
|
#include <IntervalFactory.h>
|
||||||
|
#include <JSON.h>
|
||||||
|
#include <cassert>
|
||||||
|
#include <format.h>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <iostream>
|
||||||
|
#include <timew.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Database::iterator::iterator (files_iterator fbegin, files_iterator fend) :
|
||||||
|
files_it (fbegin),
|
||||||
|
files_end (fend)
|
||||||
|
{
|
||||||
|
if (files_end != files_it)
|
||||||
|
{
|
||||||
|
auto& lines = files_it->allLines ();
|
||||||
|
lines_it = lines.rbegin ();
|
||||||
|
lines_end = lines.rend ();
|
||||||
|
while ((lines_it == lines_end) && (files_it != files_end))
|
||||||
|
{
|
||||||
|
++files_it;
|
||||||
|
if (files_it != files_end)
|
||||||
|
{
|
||||||
|
auto& lines = files_it->allLines ();
|
||||||
|
lines_it = lines.rbegin ();
|
||||||
|
lines_end = lines.rend ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Database::iterator& Database::iterator::operator++ ()
|
||||||
|
{
|
||||||
|
if (files_it != files_end)
|
||||||
|
{
|
||||||
|
if (lines_it != lines_end)
|
||||||
|
{
|
||||||
|
++lines_it;
|
||||||
|
|
||||||
|
// If we are at the end of the current file, we will need to advance to
|
||||||
|
// the next file here. A file may be empty, which is why we need to wait
|
||||||
|
// until we are pointing at a valid line.
|
||||||
|
while ((lines_it == lines_end) && (files_it != files_end))
|
||||||
|
{
|
||||||
|
++files_it;
|
||||||
|
if (files_it != files_end)
|
||||||
|
{
|
||||||
|
auto& lines = files_it->allLines ();
|
||||||
|
lines_it = lines.rbegin ();
|
||||||
|
lines_end = lines.rend ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Database::iterator::operator== (const iterator& other) const
|
||||||
|
{
|
||||||
|
return (other.files_it == other.files_end) ?
|
||||||
|
files_it == files_end :
|
||||||
|
((files_it == other.files_it) &&
|
||||||
|
(files_end == other.files_end) &&
|
||||||
|
(lines_it == other.lines_it) &&
|
||||||
|
(lines_end == other.lines_end));
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Database::iterator::operator!= (const iterator& other) const
|
||||||
|
{
|
||||||
|
return ! (*this == other);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::string& Database::iterator::operator* () const
|
||||||
|
{
|
||||||
|
assert (lines_it != lines_end);
|
||||||
|
return *lines_it;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::string* Database::iterator::operator-> () const
|
||||||
|
{
|
||||||
|
assert (lines_it != lines_end);
|
||||||
|
return &(*lines_it);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Database::reverse_iterator::reverse_iterator (files_iterator fbegin,
|
||||||
|
files_iterator fend) :
|
||||||
|
files_it (fbegin),
|
||||||
|
files_end (fend)
|
||||||
|
{
|
||||||
|
if (files_end != files_it)
|
||||||
|
{
|
||||||
|
lines_it = files_it->allLines ().begin ();
|
||||||
|
lines_end = files_it->allLines ().end ();
|
||||||
|
while ((lines_it == lines_end) && (files_it != files_end))
|
||||||
|
{
|
||||||
|
++files_it;
|
||||||
|
if (files_it != files_end)
|
||||||
|
{
|
||||||
|
auto& lines = files_it->allLines ();
|
||||||
|
lines_it = lines.begin ();
|
||||||
|
lines_end = lines.end ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Database::reverse_iterator& Database::reverse_iterator::operator++ ()
|
||||||
|
{
|
||||||
|
if (files_it != files_end)
|
||||||
|
{
|
||||||
|
if (lines_it != lines_end)
|
||||||
|
{
|
||||||
|
++lines_it;
|
||||||
|
|
||||||
|
// If we are at the end of the current file, we will need to advance to
|
||||||
|
// the next file here. A file may be empty, which is why we need to wait
|
||||||
|
// until we are pointing at a valid line.
|
||||||
|
while ((lines_it == lines_end) && (files_it != files_end))
|
||||||
|
{
|
||||||
|
++files_it;
|
||||||
|
if (files_it != files_end)
|
||||||
|
{
|
||||||
|
lines_it = files_it->allLines ().begin ();
|
||||||
|
lines_end = files_it->allLines ().end ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool
|
||||||
|
Database::reverse_iterator::operator== (const reverse_iterator& other) const
|
||||||
|
{
|
||||||
|
return (other.files_it == other.files_end) ?
|
||||||
|
files_it == files_end :
|
||||||
|
((files_it == other.files_it) &&
|
||||||
|
(files_end == other.files_end) &&
|
||||||
|
(lines_it == other.lines_it) &&
|
||||||
|
(lines_end == other.lines_end));
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool
|
||||||
|
Database::reverse_iterator::operator!= (const reverse_iterator& other) const
|
||||||
|
{
|
||||||
|
return ! (*this == other);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::string& Database::reverse_iterator::operator* () const
|
||||||
|
{
|
||||||
|
assert (lines_it != lines_end);
|
||||||
|
return *lines_it;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::string* Database::reverse_iterator::operator-> () const
|
||||||
|
{
|
||||||
|
return &operator* ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Database::iterator Database::begin ()
|
||||||
|
{
|
||||||
|
if (_files.empty ())
|
||||||
|
{
|
||||||
|
initializeDatafiles ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return iterator (_files.rbegin (), _files.rend ());
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Database::iterator Database::end ()
|
||||||
|
{
|
||||||
|
if (_files.empty ())
|
||||||
|
{
|
||||||
|
initializeDatafiles ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return iterator (_files.rend (), _files.rend ());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Database::reverse_iterator Database::rbegin ()
|
||||||
|
{
|
||||||
|
if (_files.empty ())
|
||||||
|
{
|
||||||
|
initializeDatafiles ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return {_files.begin (), _files.end ()};
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Database::reverse_iterator Database::rend ()
|
||||||
|
{
|
||||||
|
if (_files.empty ())
|
||||||
|
{
|
||||||
|
initializeDatafiles ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return reverse_iterator (_files.end (), _files.end ());
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Database::initialize (const std::string& location, Journal& journal)
|
||||||
|
{
|
||||||
|
_location = location;
|
||||||
|
_journal = &journal;
|
||||||
|
initializeTagDatabase ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Database::commit ()
|
||||||
|
{
|
||||||
|
for (auto& file : _files)
|
||||||
|
{
|
||||||
|
file.commit ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_tagInfoDatabase.is_modified ())
|
||||||
|
{
|
||||||
|
AtomicFile::write (_location + "/tags.data", _tagInfoDatabase.toJson ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::vector <std::string> Database::files () const
|
||||||
|
{
|
||||||
|
std::vector <std::string> all;
|
||||||
|
for (auto& file : _files)
|
||||||
|
{
|
||||||
|
all.push_back (file.name ());
|
||||||
|
}
|
||||||
|
|
||||||
|
return all;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::set <std::string> Database::tags () const
|
||||||
|
{
|
||||||
|
return _tagInfoDatabase.tags ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Return most recent line from database
|
||||||
|
std::string Database::getLatestEntry ()
|
||||||
|
{
|
||||||
|
for (auto& line : *this)
|
||||||
|
{
|
||||||
|
if (! line.empty ())
|
||||||
|
{
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Database::addInterval (const Interval& interval, bool verbose)
|
||||||
|
{
|
||||||
|
assert ((interval.end == 0) || (interval.start <= interval.end));
|
||||||
|
|
||||||
|
auto tags = interval.tags ();
|
||||||
|
for (auto& tag : tags)
|
||||||
|
{
|
||||||
|
if (_tagInfoDatabase.incrementTag (tag) == -1 && verbose)
|
||||||
|
{
|
||||||
|
std::cout << "Note: '" << quoteIfNeeded (tag) << "' is a new tag." << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the index into _files for the appropriate Datafile, which may be
|
||||||
|
// created on demand.
|
||||||
|
auto df = getDatafile (interval.start.year (), interval.start.month ());
|
||||||
|
_files[df].addInterval (interval);
|
||||||
|
_journal->recordIntervalAction ("", interval.json ());
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Database::deleteInterval (const Interval& interval)
|
||||||
|
{
|
||||||
|
auto tags = interval.tags ();
|
||||||
|
|
||||||
|
for (auto& tag : tags)
|
||||||
|
{
|
||||||
|
_tagInfoDatabase.decrementTag (tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the index into _files for the appropriate Datafile, which may be
|
||||||
|
// created on demand.
|
||||||
|
auto df = getDatafile (interval.start.year (), interval.start.month ());
|
||||||
|
|
||||||
|
_files[df].deleteInterval (interval);
|
||||||
|
_journal->recordIntervalAction (interval.json (), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// The algorithm to modify an interval is first to find and remove it from the
|
||||||
|
// Datafile, then add it back to the right Datafile. This is because
|
||||||
|
// modification may involve changing the start date, which could mean the
|
||||||
|
// Interval belongs in a different file.
|
||||||
|
void Database::modifyInterval (const Interval& from, const Interval& to, bool verbose)
|
||||||
|
{
|
||||||
|
if (! from.empty ())
|
||||||
|
{
|
||||||
|
deleteInterval (from);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! to.empty ())
|
||||||
|
{
|
||||||
|
addInterval (to, verbose);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Database::dump () const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
out << "Database\n";
|
||||||
|
for (auto& df : _files)
|
||||||
|
{
|
||||||
|
out << df.dump ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
unsigned int Database::getDatafile (int year, int month)
|
||||||
|
{
|
||||||
|
std::stringstream file;
|
||||||
|
file << _location
|
||||||
|
<< '/'
|
||||||
|
<< std::setw (4) << std::setfill ('0') << year
|
||||||
|
<< '-'
|
||||||
|
<< std::setw (2) << std::setfill ('0') << month
|
||||||
|
<< ".data";
|
||||||
|
auto name = file.str ();
|
||||||
|
auto basename = Path (name).name ();
|
||||||
|
|
||||||
|
// If the datafile is already initialized, return.
|
||||||
|
for (unsigned int i = 0; i < _files.size (); ++i)
|
||||||
|
{
|
||||||
|
if (_files[i].name () == basename)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the Datafile.
|
||||||
|
Datafile df;
|
||||||
|
df.initialize (name);
|
||||||
|
|
||||||
|
// Insert Datafile into _files. The position is not important.
|
||||||
|
_files.push_back (df);
|
||||||
|
return _files.size () - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// The input Daterange has a start and end, for example:
|
||||||
|
//
|
||||||
|
// 2016-02-20 to 2016-04-15
|
||||||
|
//
|
||||||
|
// Given the monthly storage scheme, split the Daterange into a vector of
|
||||||
|
// segmented Dateranges:
|
||||||
|
//
|
||||||
|
// 2016-02-01 to 2016-03-01
|
||||||
|
// 2016-03-01 to 2016-04-01
|
||||||
|
// 2016-04-01 to 2016-05-01
|
||||||
|
//
|
||||||
|
std::vector <Range> Database::segmentRange (const Range& range)
|
||||||
|
{
|
||||||
|
std::vector <Range> segments;
|
||||||
|
|
||||||
|
auto start_y = range.start.year ();
|
||||||
|
auto start_m = range.start.month ();
|
||||||
|
|
||||||
|
auto end = range.end;
|
||||||
|
if (end.toEpoch () == 0)
|
||||||
|
{
|
||||||
|
end = Datetime ();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto end_y = end.year ();
|
||||||
|
auto end_m = end.month ();
|
||||||
|
|
||||||
|
while (start_y < end_y ||
|
||||||
|
(start_y == end_y && start_m <= end_m))
|
||||||
|
{
|
||||||
|
// Capture date before incrementing month.
|
||||||
|
Datetime segmentStart (start_y, start_m, 1);
|
||||||
|
|
||||||
|
// Next month.
|
||||||
|
start_m += 1;
|
||||||
|
if (start_m > 12)
|
||||||
|
{
|
||||||
|
start_y += 1;
|
||||||
|
start_m = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Capture date after incrementing month.
|
||||||
|
Datetime segmentEnd (start_y, start_m, 1);
|
||||||
|
auto segment = Range (segmentStart, segmentEnd);
|
||||||
|
if (range.intersects (segment))
|
||||||
|
{
|
||||||
|
segments.push_back (segment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return segments;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Database::empty ()
|
||||||
|
{
|
||||||
|
return Database::begin () == Database::end ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Database::initializeTagDatabase ()
|
||||||
|
{
|
||||||
|
_tagInfoDatabase = TagInfoDatabase ();
|
||||||
|
Path tags_path (_location + "/tags.data");
|
||||||
|
std::string content;
|
||||||
|
const bool exists = tags_path.exists ();
|
||||||
|
|
||||||
|
if (exists && File::read (tags_path, content))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
std::unique_ptr <json::object> json (dynamic_cast <json::object*> (json::parse (content)));
|
||||||
|
|
||||||
|
if (content.empty () || (json == nullptr))
|
||||||
|
{
|
||||||
|
throw std::string ("Contents invalid.");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& pair : json->_data)
|
||||||
|
{
|
||||||
|
auto key = json::decode (pair.first);
|
||||||
|
auto *value = (json::object *) pair.second;
|
||||||
|
auto iter = value->_data.find ("count");
|
||||||
|
|
||||||
|
if (iter == value->_data.end ())
|
||||||
|
{
|
||||||
|
throw format ("Failed to find \"count\" member for tag \"{1}\" in tags database.", key);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto number = dynamic_cast <json::number*> (iter->second);
|
||||||
|
_tagInfoDatabase.add (key, TagInfo{(unsigned int) number->_dvalue});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since we just loaded the database from the file, there we can clear the
|
||||||
|
// modified state so that we will not write it back out unless there is a
|
||||||
|
// new change.
|
||||||
|
_tagInfoDatabase.clear_modified ();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (const std::string& error)
|
||||||
|
{
|
||||||
|
std::cerr << "Error parsing tags database: " << error << '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// We always want the tag database file to exist.
|
||||||
|
_tagInfoDatabase = TagInfoDatabase ();
|
||||||
|
AtomicFile::write (_location + "/tags.data", _tagInfoDatabase.toJson ());
|
||||||
|
|
||||||
|
auto it = Database::begin ();
|
||||||
|
auto end = Database::end ();
|
||||||
|
|
||||||
|
if (it == end)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! exists)
|
||||||
|
{
|
||||||
|
std::cout << "Tags database does not exist. ";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Recreating from interval data..." << std::endl;
|
||||||
|
|
||||||
|
for (; it != end; ++it)
|
||||||
|
{
|
||||||
|
Interval interval = IntervalFactory::fromSerialization (*it);
|
||||||
|
for (auto& tag : interval.tags ())
|
||||||
|
{
|
||||||
|
_tagInfoDatabase.incrementTag (tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Database::initializeDatafiles ()
|
||||||
|
{
|
||||||
|
// Because the data files have names YYYY-MM.data, sorting them by name also
|
||||||
|
// sorts by the intervals within.
|
||||||
|
Directory d (_location);
|
||||||
|
auto files = d.list ();
|
||||||
|
std::sort (files.begin (), files.end ());
|
||||||
|
|
||||||
|
for (auto& file : files)
|
||||||
|
{
|
||||||
|
// If it looks like a data file: *-??.data
|
||||||
|
if (file[file.length () - 8] == '-' &&
|
||||||
|
file.find (".data") == file.length () - 5)
|
||||||
|
{
|
||||||
|
auto basename = Path (file).name ();
|
||||||
|
auto year = strtol (basename.substr (0, 4).c_str (), nullptr, 10);
|
||||||
|
auto month = strtol (basename.substr (5, 2).c_str (), nullptr, 10);
|
||||||
|
getDatafile (year, month);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,129 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016, 2018 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_DATABASE
|
||||||
|
#define INCLUDED_DATABASE
|
||||||
|
|
||||||
|
#include <Datafile.h>
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <Journal.h>
|
||||||
|
#include <Range.h>
|
||||||
|
#include <TagInfoDatabase.h>
|
||||||
|
#include <Transaction.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Database
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
class iterator
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
friend class Database;
|
||||||
|
typedef std::vector <Datafile>::reverse_iterator files_iterator;
|
||||||
|
typedef std::vector <std::string>::const_reverse_iterator lines_iterator;
|
||||||
|
typedef std::string value_type;
|
||||||
|
|
||||||
|
files_iterator files_it;
|
||||||
|
files_iterator files_end;
|
||||||
|
|
||||||
|
lines_iterator lines_it;
|
||||||
|
lines_iterator lines_end;
|
||||||
|
|
||||||
|
iterator (files_iterator fbegin, files_iterator fend);
|
||||||
|
|
||||||
|
public:
|
||||||
|
iterator& operator++ ();
|
||||||
|
iterator& operator++ (int);
|
||||||
|
iterator& operator-- ();
|
||||||
|
bool operator== (const iterator & other) const;
|
||||||
|
bool operator!= (const iterator & other) const;
|
||||||
|
const value_type& operator* () const;
|
||||||
|
const value_type* operator-> () const;
|
||||||
|
};
|
||||||
|
|
||||||
|
class reverse_iterator
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
friend class Database;
|
||||||
|
typedef std::vector <Datafile>::iterator files_iterator;
|
||||||
|
typedef std::vector <std::string>::const_iterator lines_iterator;
|
||||||
|
typedef std::string value_type;
|
||||||
|
|
||||||
|
files_iterator files_it;
|
||||||
|
files_iterator files_end;
|
||||||
|
|
||||||
|
lines_iterator lines_it;
|
||||||
|
lines_iterator lines_end;
|
||||||
|
|
||||||
|
reverse_iterator(files_iterator fbegin, files_iterator fend);
|
||||||
|
|
||||||
|
public:
|
||||||
|
reverse_iterator& operator++ ();
|
||||||
|
reverse_iterator& operator++ (int);
|
||||||
|
reverse_iterator& operator-- ();
|
||||||
|
bool operator== (const reverse_iterator & other) const;
|
||||||
|
bool operator!= (const reverse_iterator & other) const;
|
||||||
|
const value_type& operator* () const;
|
||||||
|
const value_type* operator-> () const;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
Database () = default;
|
||||||
|
void initialize (const std::string&, Journal& journal);
|
||||||
|
void commit ();
|
||||||
|
std::vector <std::string> files () const;
|
||||||
|
std::set <std::string> tags () const;
|
||||||
|
|
||||||
|
std::string getLatestEntry ();
|
||||||
|
|
||||||
|
void addInterval (const Interval&, bool verbose);
|
||||||
|
void deleteInterval (const Interval&);
|
||||||
|
void modifyInterval (const Interval&, const Interval&, bool verbose);
|
||||||
|
|
||||||
|
std::string dump () const;
|
||||||
|
|
||||||
|
bool empty ();
|
||||||
|
iterator begin ();
|
||||||
|
iterator end ();
|
||||||
|
reverse_iterator rbegin ();
|
||||||
|
reverse_iterator rend ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int getDatafile (int, int);
|
||||||
|
std::vector <Range> segmentRange (const Range&);
|
||||||
|
void initializeDatafiles ();
|
||||||
|
void initializeTagDatabase ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string _location {};
|
||||||
|
std::vector <Datafile> _files {};
|
||||||
|
TagInfoDatabase _tagInfoDatabase {};
|
||||||
|
Journal* _journal {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,217 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016, 2018 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <AtomicFile.h>
|
||||||
|
#include <Datafile.h>
|
||||||
|
#include <IntervalFactory.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <format.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <timew.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Datafile::initialize (const std::string& name)
|
||||||
|
{
|
||||||
|
_file = Path (name);
|
||||||
|
|
||||||
|
// From the name, which is of the form YYYY-MM.data, extract the YYYY and MM.
|
||||||
|
auto basename = _file.name ();
|
||||||
|
auto year = strtol (basename.substr (0, 4).c_str (), nullptr, 10);
|
||||||
|
auto month = strtol (basename.substr (5, 2).c_str (), nullptr, 10);
|
||||||
|
|
||||||
|
// The range is a month: [start, end).
|
||||||
|
Datetime start (year, month, 1, 0, 0, 0);
|
||||||
|
month++;
|
||||||
|
if (month > 12)
|
||||||
|
{
|
||||||
|
year++;
|
||||||
|
month = 1;
|
||||||
|
}
|
||||||
|
Datetime end (year, month, 1, 0, 0, 0);
|
||||||
|
_range = Range (start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Datafile::name () const
|
||||||
|
{
|
||||||
|
return _file.name ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Identifies the last incluѕion (^i) lines
|
||||||
|
std::string Datafile::lastLine ()
|
||||||
|
{
|
||||||
|
if (! _lines_loaded)
|
||||||
|
load_lines ();
|
||||||
|
|
||||||
|
std::vector <std::string>::reverse_iterator ri;
|
||||||
|
for (ri = _lines.rbegin (); ri != _lines.rend (); ri++)
|
||||||
|
if (ri->operator[] (0) == 'i')
|
||||||
|
return *ri;
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::vector <std::string>& Datafile::allLines ()
|
||||||
|
{
|
||||||
|
if (! _lines_loaded)
|
||||||
|
load_lines ();
|
||||||
|
|
||||||
|
return _lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Accepted intervals; day1 <= interval.start < dayN
|
||||||
|
void Datafile::addInterval (const Interval& interval)
|
||||||
|
{
|
||||||
|
// Note: end date might be zero.
|
||||||
|
assert (interval.startsWithin (_range));
|
||||||
|
|
||||||
|
if (! _lines_loaded)
|
||||||
|
load_lines ();
|
||||||
|
|
||||||
|
const std::string serialization = interval.serialize ();
|
||||||
|
|
||||||
|
// Ensure that the IntervalFactory can properly parse the serialization before
|
||||||
|
// adding it to the database.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Interval test = IntervalFactory::fromSerialization (serialization);
|
||||||
|
test.id = interval.id;
|
||||||
|
if (interval != test)
|
||||||
|
{
|
||||||
|
throw (format ("Encode / decode check failed:\n {1}\nis not equal to:\n {2}",
|
||||||
|
interval.dump (), test.dump ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
_lines.push_back (serialization);
|
||||||
|
debug (format ("{1}: Added {2}", _file.name (), _lines.back ()));
|
||||||
|
_dirty = true;
|
||||||
|
}
|
||||||
|
catch (const std::string& error)
|
||||||
|
{
|
||||||
|
debug (format ("Datafile::addInterval() failed.\n{1}", error));
|
||||||
|
throw std::string ("Internal error. Failed encode / decode check.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Datafile::deleteInterval (const Interval& interval)
|
||||||
|
{
|
||||||
|
// Note: end date might be zero.
|
||||||
|
assert (interval.startsWithin (_range));
|
||||||
|
|
||||||
|
if (! _lines_loaded)
|
||||||
|
{
|
||||||
|
load_lines ();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto serialized = interval.serialize ();
|
||||||
|
auto i = std::find (_lines.begin (), _lines.end (), serialized);
|
||||||
|
if (i == _lines.end ())
|
||||||
|
{
|
||||||
|
throw format ("Datafile::deleteInterval failed to find '{1}'", serialized);
|
||||||
|
}
|
||||||
|
|
||||||
|
_lines.erase (i);
|
||||||
|
_dirty = true;
|
||||||
|
debug (format ("{1}: Deleted {2}", _file.name (), serialized));
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Datafile::commit ()
|
||||||
|
{
|
||||||
|
// The _dirty flag indicates that the file needs to be written.
|
||||||
|
if (_dirty)
|
||||||
|
{
|
||||||
|
AtomicFile file (_file);
|
||||||
|
if (! _lines.empty ())
|
||||||
|
{
|
||||||
|
if (file.open ())
|
||||||
|
{
|
||||||
|
// Sort the intervals by ascending start time.
|
||||||
|
std::sort (_lines.begin (), _lines.end ());
|
||||||
|
|
||||||
|
// Write out all the lines.
|
||||||
|
file.truncate ();
|
||||||
|
for (auto& line : _lines)
|
||||||
|
{
|
||||||
|
file.write_raw (line + '\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
_dirty = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw format ("Could not write to data file {1}", _file._data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
file.remove ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Datafile::dump () const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
out << "Datafile\n"
|
||||||
|
<< " Name: " << _file.name () << (_file.exists () ? "" : " (does not exist)") << '\n'
|
||||||
|
<< " dirty: " << (_dirty ? "true" : "false") << '\n'
|
||||||
|
<< " lines: " << _lines.size () << '\n'
|
||||||
|
<< " loaded " << (_lines_loaded ? "true" : "false") << '\n'
|
||||||
|
<< " range: " << _range.start.toISO () << " - "
|
||||||
|
<< _range.end.toISO () << '\n';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Datafile::load_lines ()
|
||||||
|
{
|
||||||
|
AtomicFile file (_file);
|
||||||
|
if (file.open ())
|
||||||
|
{
|
||||||
|
// Load the data.
|
||||||
|
std::vector <std::string> read_lines;
|
||||||
|
file.read (read_lines);
|
||||||
|
file.close ();
|
||||||
|
|
||||||
|
// Append the lines that were read.
|
||||||
|
for (auto& line : read_lines)
|
||||||
|
_lines.push_back (line);
|
||||||
|
|
||||||
|
_lines_loaded = true;
|
||||||
|
debug (format ("{1}: {2} intervals", file.name (), read_lines.size ()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,63 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016, 2018 - 2022, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_DATAFILE
|
||||||
|
#define INCLUDED_DATAFILE
|
||||||
|
|
||||||
|
#include <FS.h>
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <Range.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Datafile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Datafile () = default;
|
||||||
|
void initialize (const std::string&);
|
||||||
|
std::string name () const;
|
||||||
|
|
||||||
|
std::string lastLine ();
|
||||||
|
const std::vector <std::string>& allLines ();
|
||||||
|
|
||||||
|
void addInterval (const Interval&);
|
||||||
|
void deleteInterval (const Interval&);
|
||||||
|
void commit ();
|
||||||
|
|
||||||
|
std::string dump () const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void load_lines ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Path _file {};
|
||||||
|
bool _dirty {false};
|
||||||
|
std::vector <std::string> _lines {};
|
||||||
|
bool _lines_loaded {false};
|
||||||
|
Range _range {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,148 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2020, 2022, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// http://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_DATETIMEPARSER
|
||||||
|
#define INCLUDED_DATETIMEPARSER
|
||||||
|
|
||||||
|
#include <Pig.h>
|
||||||
|
#include <Range.h>
|
||||||
|
#include <ctime>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class DatetimeParser
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DatetimeParser () = default;
|
||||||
|
Range parse_range(const std::string&);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void clear ();
|
||||||
|
|
||||||
|
bool parse_named (Pig&);
|
||||||
|
bool parse_named_day (Pig&);
|
||||||
|
bool parse_named_month (Pig&);
|
||||||
|
bool parse_epoch (Pig&);
|
||||||
|
bool parse_date_time_ext (Pig&);
|
||||||
|
bool parse_date_ext (Pig&);
|
||||||
|
bool parse_off_ext (Pig&);
|
||||||
|
bool parse_time_ext (Pig&, bool terminated = true);
|
||||||
|
bool parse_time_utc_ext (Pig&);
|
||||||
|
bool parse_time_off_ext (Pig&);
|
||||||
|
bool parse_date_time (Pig&);
|
||||||
|
bool parse_date (Pig&);
|
||||||
|
bool parse_time_utc (Pig&);
|
||||||
|
bool parse_time_off (Pig&);
|
||||||
|
bool parse_time (Pig&, bool terminated = true);
|
||||||
|
bool parse_informal_time (Pig&);
|
||||||
|
bool parse_off (Pig&);
|
||||||
|
|
||||||
|
bool parse_year (Pig&, int&);
|
||||||
|
bool parse_month (Pig&, int&);
|
||||||
|
bool parse_week (Pig&, int&);
|
||||||
|
bool parse_julian (Pig&, int&);
|
||||||
|
bool parse_day (Pig&, int&);
|
||||||
|
bool parse_weekday (Pig&, int&);
|
||||||
|
bool parse_hour (Pig&, int&);
|
||||||
|
bool parse_minute (Pig&, int&);
|
||||||
|
bool parse_second (Pig&, int&);
|
||||||
|
bool parse_off_hour (Pig&, int&);
|
||||||
|
bool parse_off_minute (Pig&, int&);
|
||||||
|
|
||||||
|
bool initializeNow (Pig&);
|
||||||
|
bool initializeYesterday (Pig&);
|
||||||
|
bool initializeToday (Pig&);
|
||||||
|
bool initializeTomorrow (Pig&);
|
||||||
|
bool initializeOrdinal (Pig&);
|
||||||
|
bool initializeDayName (Pig&);
|
||||||
|
bool initializeMonthName (Pig&);
|
||||||
|
bool initializeLater (Pig&);
|
||||||
|
bool initializeSopd (Pig&);
|
||||||
|
bool initializeSod (Pig&);
|
||||||
|
bool initializeSond (Pig&);
|
||||||
|
bool initializeEopd (Pig&);
|
||||||
|
bool initializeEod (Pig&);
|
||||||
|
bool initializeEond (Pig&);
|
||||||
|
bool initializeSopw (Pig&);
|
||||||
|
bool initializeSow (Pig&);
|
||||||
|
bool initializeSonw (Pig&);
|
||||||
|
bool initializeEopw (Pig&);
|
||||||
|
bool initializeEow (Pig&);
|
||||||
|
bool initializeEonw (Pig&);
|
||||||
|
bool initializeSopww (Pig&);
|
||||||
|
bool initializeSonww (Pig&);
|
||||||
|
bool initializeSoww (Pig&);
|
||||||
|
bool initializeEopww (Pig&);
|
||||||
|
bool initializeEonww (Pig&);
|
||||||
|
bool initializeEoww (Pig&);
|
||||||
|
bool initializeSopm (Pig&);
|
||||||
|
bool initializeSom (Pig&);
|
||||||
|
bool initializeSonm (Pig&);
|
||||||
|
bool initializeEopm (Pig&);
|
||||||
|
bool initializeEom (Pig&);
|
||||||
|
bool initializeEonm (Pig&);
|
||||||
|
bool initializeSopq (Pig&);
|
||||||
|
bool initializeSoq (Pig&);
|
||||||
|
bool initializeSonq (Pig&);
|
||||||
|
bool initializeEopq (Pig&);
|
||||||
|
bool initializeEoq (Pig&);
|
||||||
|
bool initializeEonq (Pig&);
|
||||||
|
bool initializeSopy (Pig&);
|
||||||
|
bool initializeSoy (Pig&);
|
||||||
|
bool initializeSony (Pig&);
|
||||||
|
bool initializeEopy (Pig&);
|
||||||
|
bool initializeEoy (Pig&);
|
||||||
|
bool initializeEony (Pig&);
|
||||||
|
bool initializeEaster (Pig&);
|
||||||
|
bool initializeMidsommar (Pig&);
|
||||||
|
bool initializeMidsommarafton (Pig&);
|
||||||
|
bool initializeInformalTime (Pig&);
|
||||||
|
|
||||||
|
void easter (struct tm*) const;
|
||||||
|
void midsommar (struct tm*) const;
|
||||||
|
void midsommarafton (struct tm*) const;
|
||||||
|
|
||||||
|
bool initializeNthDayInMonth (const std::vector <std::string>&);
|
||||||
|
|
||||||
|
bool isOrdinal (const std::string&, int&);
|
||||||
|
|
||||||
|
bool validate ();
|
||||||
|
void resolve ();
|
||||||
|
|
||||||
|
public:
|
||||||
|
int _year {0};
|
||||||
|
int _month {0};
|
||||||
|
int _week {0};
|
||||||
|
int _weekday {0};
|
||||||
|
int _julian {0};
|
||||||
|
int _day {0};
|
||||||
|
int _seconds {0};
|
||||||
|
int _offset {0};
|
||||||
|
bool _utc {false};
|
||||||
|
time_t _date {0};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,203 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016 - 2019, 2022 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Datetime.h>
|
||||||
|
#include <Exclusion.h>
|
||||||
|
#include <Pig.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <format.h>
|
||||||
|
#include <shared.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// An exclusion represents untrackable time such as holidays, weekends, evenings
|
||||||
|
// and lunch. There are none by default, but they may be configured. Once there
|
||||||
|
// are exclusions defined, the :fill functionality is enabled.
|
||||||
|
//
|
||||||
|
// Exclusions are instantiated from configuration, and are passed here as name/
|
||||||
|
// value strings.
|
||||||
|
//
|
||||||
|
// Name Value
|
||||||
|
// -------------------------- ------------------------
|
||||||
|
// exclusions.days.2016_01_01 on
|
||||||
|
// exclusions.days.2016_01_02 off
|
||||||
|
// exclusions.friday <8:00 12:00-12:45 >17:30
|
||||||
|
// exclusions.monday <8:00 12:00-12:45 >17:30
|
||||||
|
// exclusions.thursday <8:00 12:00-12:45 >17:30
|
||||||
|
// exclusions.tuesday <8:00 12:00-12:45 >18:30
|
||||||
|
// exclusions.wednesday <8:00 12:00-13:30 >17:30
|
||||||
|
//
|
||||||
|
Exclusion::Exclusion (const std::string& name, const std::string& value)
|
||||||
|
//void Exclusion::initialize (const std::string& line)
|
||||||
|
{
|
||||||
|
_tokens = split (name, '.');
|
||||||
|
for (auto& token : split (value))
|
||||||
|
_tokens.push_back (token);
|
||||||
|
|
||||||
|
// Validate syntax only. Do nothing with the data.
|
||||||
|
if (_tokens.size () >= 2 &&
|
||||||
|
_tokens[0] == "exclusions")
|
||||||
|
{
|
||||||
|
if (_tokens.size () == 4 &&
|
||||||
|
_tokens[1] == "days" &&
|
||||||
|
_tokens[3] == "on") {
|
||||||
|
_additive = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (_tokens.size () == 4 &&
|
||||||
|
_tokens[1] == "days" &&
|
||||||
|
_tokens[3] == "off")
|
||||||
|
{
|
||||||
|
_additive = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (Datetime::dayOfWeek (_tokens[1]) != -1)
|
||||||
|
{
|
||||||
|
_additive = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw format ("Unrecognized exclusion syntax: '{1}' '{2}'.", name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::vector <std::string> Exclusion::tokens () const
|
||||||
|
{
|
||||||
|
return _tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Within range, yield a collection of recurring ranges as defined by _tokens.
|
||||||
|
//
|
||||||
|
// exc monday <block> [<block> ...] --> yields a day range for every monday,
|
||||||
|
// and every block within
|
||||||
|
// exc day on <date> --> yields single day range
|
||||||
|
// exc day off <date> --> yields single day range
|
||||||
|
//
|
||||||
|
std::vector <Range> Exclusion::ranges (const Range& range) const
|
||||||
|
{
|
||||||
|
std::vector <Range> results;
|
||||||
|
int dayOfWeek;
|
||||||
|
|
||||||
|
if (_tokens[1] == "days" &&
|
||||||
|
(_tokens[3] == "on" ||
|
||||||
|
_tokens[3] == "off"))
|
||||||
|
{
|
||||||
|
auto day = _tokens[2];
|
||||||
|
std::replace (day.begin (), day.end (), '_', '-');
|
||||||
|
Datetime start (day);
|
||||||
|
Datetime end (start);
|
||||||
|
++end;
|
||||||
|
Range all_day (start, end);
|
||||||
|
if (range.overlaps (all_day))
|
||||||
|
results.push_back (all_day);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ((dayOfWeek = Datetime::dayOfWeek (_tokens[1])) != -1)
|
||||||
|
{
|
||||||
|
Datetime start (range.start.year (), range.start.month (), range.start.day (), 0, 0, 0);
|
||||||
|
|
||||||
|
Range myRange = {range};
|
||||||
|
|
||||||
|
if (myRange.is_open ())
|
||||||
|
{
|
||||||
|
myRange.end = Datetime ();
|
||||||
|
}
|
||||||
|
|
||||||
|
while (start <= myRange.end)
|
||||||
|
{
|
||||||
|
if (start.dayOfWeek () == dayOfWeek)
|
||||||
|
{
|
||||||
|
Datetime end = start;
|
||||||
|
++end;
|
||||||
|
|
||||||
|
// Now that 'start' and 'end' represent the correct day, compose a set
|
||||||
|
// of Range objects for each time block.
|
||||||
|
for (unsigned int block = 2; block < _tokens.size (); ++block)
|
||||||
|
{
|
||||||
|
auto r = rangeFromTimeBlock (_tokens[block], start, end);
|
||||||
|
if (myRange.overlaps (r))
|
||||||
|
results.push_back (r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Exclusion::additive () const
|
||||||
|
{
|
||||||
|
return _additive;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Exclusion::dump () const
|
||||||
|
{
|
||||||
|
return join (" ", _tokens);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Range Exclusion::rangeFromTimeBlock (
|
||||||
|
const std::string& block,
|
||||||
|
const Datetime& start,
|
||||||
|
const Datetime& end) const
|
||||||
|
{
|
||||||
|
Pig pig (block);
|
||||||
|
|
||||||
|
if (pig.skip ('<'))
|
||||||
|
{
|
||||||
|
int hh, mm, ss;
|
||||||
|
if (pig.getHMS (hh, mm, ss))
|
||||||
|
return Range (Datetime (start.year (), start.month (), start.day (), 0, 0, 0),
|
||||||
|
Datetime (start.year (), start.month (), start.day (), hh, mm, ss));
|
||||||
|
}
|
||||||
|
else if (pig.skip ('>'))
|
||||||
|
{
|
||||||
|
int hh, mm, ss;
|
||||||
|
if (pig.getHMS (hh, mm, ss))
|
||||||
|
return Range (Datetime (start.year (), start.month (), start.day (), hh, mm, ss),
|
||||||
|
Datetime (end.year (), end.month (), end.day (), 0, 0, 0));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int hh1, mm1, ss1;
|
||||||
|
int hh2, mm2, ss2;
|
||||||
|
if (pig.getHMS (hh1, mm1, ss1) &&
|
||||||
|
pig.skip ('-') &&
|
||||||
|
pig.getHMS (hh2, mm2, ss2))
|
||||||
|
return Range (
|
||||||
|
Datetime (start.year (), start.month (), start.day (), hh1, mm1, ss1),
|
||||||
|
Datetime (start.year (), start.month (), start.day (), hh2, mm2, ss2));
|
||||||
|
}
|
||||||
|
|
||||||
|
throw format ("Malformed time block '{1}'.", block);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,52 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016, 2018, 2022, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_EXCLUSION
|
||||||
|
#define INCLUDED_EXCLUSION
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <Range.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Exclusion
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Exclusion (const std::string&, const std::string&);
|
||||||
|
std::vector <std::string> tokens () const;
|
||||||
|
std::vector <Range> ranges (const Range&) const;
|
||||||
|
bool additive () const;
|
||||||
|
std::string dump () const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Range rangeFromTimeBlock (const std::string&, const Datetime&, const Datetime&) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector <std::string> _tokens {};
|
||||||
|
bool _additive {false};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,125 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016 - 2018, 2022, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Extensions.h>
|
||||||
|
#include <FS.h>
|
||||||
|
#include <Timer.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <iostream>
|
||||||
|
#include <shared.h>
|
||||||
|
#include <timew.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Extensions::initialize (const std::string& location)
|
||||||
|
{
|
||||||
|
// Scan extension directory.
|
||||||
|
Directory d (location);
|
||||||
|
if (d.is_directory () &&
|
||||||
|
d.readable ())
|
||||||
|
{
|
||||||
|
_scripts = d.list ();
|
||||||
|
std::sort (_scripts.begin (), _scripts.end ());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw std::string ("Extension directory not readable: ") + d._data;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Extensions::debug ()
|
||||||
|
{
|
||||||
|
_debug = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::vector <std::string> Extensions::all () const
|
||||||
|
{
|
||||||
|
return _scripts;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
int Extensions::callExtension (
|
||||||
|
const std::string& script,
|
||||||
|
const std::vector <std::string>& input,
|
||||||
|
std::vector <std::string>& output) const
|
||||||
|
{
|
||||||
|
if (_debug)
|
||||||
|
{
|
||||||
|
std::cout << "Extension: Calling " << script << '\n'
|
||||||
|
<< "Extension: input";
|
||||||
|
|
||||||
|
for (auto& i : input)
|
||||||
|
std::cout << " " << i << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
auto inputStr = join ("\n", input);
|
||||||
|
|
||||||
|
// Measure time for each hook if running in debug
|
||||||
|
int status = 0;
|
||||||
|
std::string outputStr;
|
||||||
|
|
||||||
|
if (_debug)
|
||||||
|
{
|
||||||
|
Timer t;
|
||||||
|
status = execute (script, {}, inputStr, outputStr);
|
||||||
|
t.stop ();
|
||||||
|
|
||||||
|
std::stringstream s;
|
||||||
|
s << "Timer Extension: execute ("
|
||||||
|
<< script
|
||||||
|
<< ") "
|
||||||
|
<< std::setprecision (6)
|
||||||
|
<< std::fixed
|
||||||
|
<< t.total_us () / 1000000.0
|
||||||
|
<< " sec\n";
|
||||||
|
::debug (s.str ());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = execute (script, {}, inputStr, outputStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
output = split (outputStr, '\n');
|
||||||
|
|
||||||
|
if (_debug)
|
||||||
|
std::cout << "Extension: Completed with status " << status << '\n';
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Extensions::dump () const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
out << "Extensions\n";
|
||||||
|
for (auto& script : _scripts)
|
||||||
|
out << " " << script << '\n';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,48 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016, 2018, 2022, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_EXTENSIONS
|
||||||
|
#define INCLUDED_EXTENSIONS
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Extensions
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Extensions () = default;
|
||||||
|
void initialize (const std::string&);
|
||||||
|
void debug ();
|
||||||
|
std::vector <std::string> all () const;
|
||||||
|
int callExtension (const std::string&, const std::vector <std::string>&, std::vector <std::string>&) const;
|
||||||
|
std::string dump () const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector <std::string> _scripts {};
|
||||||
|
bool _debug {false};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,89 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2023, Gothenburg Bit Factory.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Extensions.h>
|
||||||
|
#include <ExtensionsTable.h>
|
||||||
|
#include <FS.h>
|
||||||
|
#include <timew.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
ExtensionsTable::Builder ExtensionsTable::builder ()
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
ExtensionsTable::Builder& ExtensionsTable::Builder::withExtensions (const Extensions& extensions)
|
||||||
|
{
|
||||||
|
_extensions = extensions;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
Table ExtensionsTable::Builder::build ()
|
||||||
|
{
|
||||||
|
int terminalWidth = getTerminalWidth ();
|
||||||
|
|
||||||
|
Table table;
|
||||||
|
table.width (terminalWidth);
|
||||||
|
table.colorHeader (Color ("underline"));
|
||||||
|
table.add ("Extension", true);
|
||||||
|
table.add ("Status", true);
|
||||||
|
|
||||||
|
for (auto& ext: _extensions.all ())
|
||||||
|
{
|
||||||
|
File program (ext);
|
||||||
|
|
||||||
|
// Show program name.
|
||||||
|
auto row = table.addRow ();
|
||||||
|
table.set (row, 0, program.name ());
|
||||||
|
|
||||||
|
// Show extension status.
|
||||||
|
std::string status;
|
||||||
|
|
||||||
|
if (! program.readable ())
|
||||||
|
{
|
||||||
|
status = "Not readable";
|
||||||
|
}
|
||||||
|
else if (! program.executable ())
|
||||||
|
{
|
||||||
|
status = "No executable";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = "Active";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (program.is_link ())
|
||||||
|
{
|
||||||
|
status += " (link)";
|
||||||
|
}
|
||||||
|
|
||||||
|
table.set (row, 1, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
return table;
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2023, Gothenburg Bit Factory.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_EXTENSIONSTABLE
|
||||||
|
#define INCLUDED_EXTENSIONSTABLE
|
||||||
|
|
||||||
|
#include <Extensions.h>
|
||||||
|
#include <Table.h>
|
||||||
|
|
||||||
|
class ExtensionsTable
|
||||||
|
{
|
||||||
|
class Builder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Builder& withExtensions (const Extensions&);
|
||||||
|
|
||||||
|
Table build ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Extensions _extensions;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
static Builder builder ();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_EXTENSIONSTABLE
|
|
@ -0,0 +1,118 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2023, Gothenburg Bit Factory.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Duration.h>
|
||||||
|
#include <GapsTable.h>
|
||||||
|
#include <format.h>
|
||||||
|
#include <timew.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
GapsTable::Builder GapsTable::builder ()
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
GapsTable::Builder& GapsTable::Builder::withRange (const Range& range)
|
||||||
|
{
|
||||||
|
_range = range;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
GapsTable::Builder& GapsTable::Builder::withIntervals (const std::vector <Range>& intervals)
|
||||||
|
{
|
||||||
|
_intervals = intervals;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
Table GapsTable::Builder::build ()
|
||||||
|
{
|
||||||
|
int terminalWidth = getTerminalWidth ();
|
||||||
|
|
||||||
|
Table table;
|
||||||
|
table.width (terminalWidth);
|
||||||
|
table.colorHeader (Color ("underline"));
|
||||||
|
table.add ("Wk");
|
||||||
|
table.add ("Date");
|
||||||
|
table.add ("Day");
|
||||||
|
table.add ("Start", false);
|
||||||
|
table.add ("End", false);
|
||||||
|
table.add ("Time", false);
|
||||||
|
table.add ("Total", false);
|
||||||
|
|
||||||
|
// Each day is rendered separately.
|
||||||
|
time_t grand_total = 0;
|
||||||
|
Datetime previous;
|
||||||
|
|
||||||
|
for (Datetime day = _range.start; day < _range.end; day++)
|
||||||
|
{
|
||||||
|
auto day_range = getFullDay (day);
|
||||||
|
time_t daily_total = 0;
|
||||||
|
int row = -1;
|
||||||
|
|
||||||
|
for (auto& gap: subset (day_range, _intervals))
|
||||||
|
{
|
||||||
|
row = table.addRow ();
|
||||||
|
|
||||||
|
if (day != previous)
|
||||||
|
{
|
||||||
|
table.set (row, 0, format ("W{1}", day.week ()));
|
||||||
|
table.set (row, 1, day.toString ("Y-M-D"));
|
||||||
|
table.set (row, 2, Datetime::dayNameShort (day.dayOfWeek ()));
|
||||||
|
previous = day;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intersect track with day.
|
||||||
|
auto today = day_range.intersect (gap);
|
||||||
|
|
||||||
|
if (gap.is_open ())
|
||||||
|
{
|
||||||
|
today.end = Datetime ();
|
||||||
|
}
|
||||||
|
|
||||||
|
table.set (row, 3, today.start.toString ("h:N:S"));
|
||||||
|
table.set (row, 4, (gap.is_open () ? "-" : today.end.toString ("h:N:S")));
|
||||||
|
table.set (row, 5, Duration (today.total ()).formatHours ());
|
||||||
|
|
||||||
|
daily_total += today.total ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (row != -1)
|
||||||
|
{
|
||||||
|
table.set (row, 6, Duration (daily_total).formatHours ());
|
||||||
|
}
|
||||||
|
|
||||||
|
grand_total += daily_total;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the total.
|
||||||
|
table.set (table.addRow (), 6, " ", Color ("underline"));
|
||||||
|
table.set (table.addRow (), 6, Duration (grand_total).formatHours ());
|
||||||
|
|
||||||
|
return table;
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2023, Gothenburg Bit Factory.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_GAPSTABLE
|
||||||
|
#define INCLUDED_GAPSTABLE
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <Range.h>
|
||||||
|
#include <Table.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class GapsTable
|
||||||
|
{
|
||||||
|
class Builder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Builder& withRange (const Range&);
|
||||||
|
Builder& withIntervals (const std::vector <Range>&);
|
||||||
|
|
||||||
|
Table build ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector <Range> _intervals;
|
||||||
|
Range _range;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
static Builder builder ();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_GAPSTABLE
|
|
@ -0,0 +1,239 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <JSON.h>
|
||||||
|
#include <Lexer.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <sstream>
|
||||||
|
#include <timew.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Interval::operator== (const Interval& other) const
|
||||||
|
{
|
||||||
|
if ((annotation == other.annotation) &&
|
||||||
|
(_tags == other._tags) &&
|
||||||
|
(synthetic == other.synthetic) &&
|
||||||
|
(id == other.id))
|
||||||
|
{
|
||||||
|
return Range::operator== (other);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Interval::operator!= (const Interval& other) const
|
||||||
|
{
|
||||||
|
return ! operator== (other);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Interval::empty () const
|
||||||
|
{
|
||||||
|
return start.toEpoch () == 0 &&
|
||||||
|
end.toEpoch () == 0 &&
|
||||||
|
_tags.empty () &&
|
||||||
|
annotation.empty ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Interval::hasTag (const std::string& tag) const
|
||||||
|
{
|
||||||
|
return std::find (_tags.begin (), _tags.end (), tag) != _tags.end ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::set <std::string>& Interval::tags () const
|
||||||
|
{
|
||||||
|
return _tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Interval::tag (const std::string& tag)
|
||||||
|
{
|
||||||
|
_tags.insert (tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Interval::tag (const std::set <std::string>& tags)
|
||||||
|
{
|
||||||
|
_tags.insert (tags.begin (), tags.end ());
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Interval::untag (const std::string& tag)
|
||||||
|
{
|
||||||
|
_tags.erase (tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Interval::untag (const std::set <std::string>& tags)
|
||||||
|
{
|
||||||
|
std::set <std::string> updated;
|
||||||
|
|
||||||
|
std::set_difference (
|
||||||
|
_tags.begin (), _tags.end (),
|
||||||
|
tags.begin (), tags.end (),
|
||||||
|
std::inserter (updated, updated.end ())
|
||||||
|
);
|
||||||
|
|
||||||
|
_tags = updated;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Interval::clearTags ()
|
||||||
|
{
|
||||||
|
_tags.clear ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Interval::serialize () const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
out << "inc";
|
||||||
|
|
||||||
|
if (start.toEpoch ())
|
||||||
|
out << " " << start.toISO ();
|
||||||
|
|
||||||
|
if (end.toEpoch ())
|
||||||
|
out << " - " << end.toISO ();
|
||||||
|
|
||||||
|
if (! _tags.empty ())
|
||||||
|
{
|
||||||
|
out << " #";
|
||||||
|
for (auto& tag : _tags)
|
||||||
|
out << ' ' << quoteIfNeeded (tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! annotation.empty ())
|
||||||
|
{
|
||||||
|
out << (_tags.empty () ? " #" : "")
|
||||||
|
<< " # \"" << escape (annotation, '"') << "\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Interval::json () const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
out << "{";
|
||||||
|
|
||||||
|
if (! empty ())
|
||||||
|
{
|
||||||
|
out << "\"id\":" << id;
|
||||||
|
|
||||||
|
if (is_started ())
|
||||||
|
{
|
||||||
|
out << ",\"start\":\"" << start.toISO () << "\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_ended ())
|
||||||
|
{
|
||||||
|
out << ",\"end\":\"" << end.toISO () << "\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! _tags.empty ())
|
||||||
|
{
|
||||||
|
std::string tags;
|
||||||
|
for (auto& tag : _tags)
|
||||||
|
{
|
||||||
|
if (tags[0])
|
||||||
|
tags += ',';
|
||||||
|
|
||||||
|
tags += "\"" + json::encode (tag) + "\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
out << ",\"tags\":["
|
||||||
|
<< tags
|
||||||
|
<< ']';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! annotation.empty ())
|
||||||
|
{
|
||||||
|
out << ",\"annotation\":\"" << json::encode (annotation) << "\"";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out << "}";
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Interval::dump () const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
|
||||||
|
out << "interval";
|
||||||
|
|
||||||
|
if (id)
|
||||||
|
out << " @" << id;
|
||||||
|
|
||||||
|
if (start.toEpoch ())
|
||||||
|
out << " " << start.toISOLocalExtended ();
|
||||||
|
|
||||||
|
if (end.toEpoch ())
|
||||||
|
out << " - " << end.toISOLocalExtended ();
|
||||||
|
|
||||||
|
if (! _tags.empty ())
|
||||||
|
{
|
||||||
|
out << " #";
|
||||||
|
for (auto& tag : _tags)
|
||||||
|
out << ' ' << quoteIfNeeded (tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (synthetic)
|
||||||
|
out << " synthetic";
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Interval::setRange (const Range& range)
|
||||||
|
{
|
||||||
|
setRange (range.start, range.end);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Interval::setRange (const Datetime& start, const Datetime& end)
|
||||||
|
{
|
||||||
|
this->start = start;
|
||||||
|
this->end = end;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Interval::setAnnotation (const std::string& annotation)
|
||||||
|
{
|
||||||
|
this->annotation = annotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Interval::getAnnotation () const
|
||||||
|
{
|
||||||
|
return annotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,73 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVAL
|
||||||
|
#define INCLUDED_INTERVAL
|
||||||
|
|
||||||
|
#include <Range.h>
|
||||||
|
#include <set>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
class Interval : public Range
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Interval () = default;
|
||||||
|
Interval (const Datetime& start, const Datetime& end) : Range (start, end) {}
|
||||||
|
Interval (const Range& range, std::set <std::string> tags) : Range (range), _tags(std::move(tags)) {}
|
||||||
|
|
||||||
|
bool operator== (const Interval&) const;
|
||||||
|
bool operator!= (const Interval&) const;
|
||||||
|
|
||||||
|
bool empty () const;
|
||||||
|
bool hasTag (const std::string&) const;
|
||||||
|
const std::set <std::string>& tags () const;
|
||||||
|
void tag (const std::string&);
|
||||||
|
void tag (const std::set <std::string>&);
|
||||||
|
void untag (const std::string&);
|
||||||
|
void untag (const std::set <std::string>&);
|
||||||
|
void clearTags ();
|
||||||
|
|
||||||
|
void setRange (const Range& range);
|
||||||
|
void setRange (const Datetime& start, const Datetime& end);
|
||||||
|
|
||||||
|
void setAnnotation(const std::string& annotation);
|
||||||
|
std::string getAnnotation() const;
|
||||||
|
|
||||||
|
std::string serialize () const;
|
||||||
|
std::string json () const;
|
||||||
|
std::string dump () const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
int id {0};
|
||||||
|
bool synthetic {false};
|
||||||
|
std::string annotation {};
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::set <std::string> _tags {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,158 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <IntervalFactory.h>
|
||||||
|
#include <JSON.h>
|
||||||
|
#include <Lexer.h>
|
||||||
|
#include <format.h>
|
||||||
|
|
||||||
|
static std::vector <std::string> tokenizeSerialization (const std::string& line)
|
||||||
|
{
|
||||||
|
std::vector <std::string> tokens;
|
||||||
|
|
||||||
|
Lexer lexer (line);
|
||||||
|
std::string token;
|
||||||
|
Lexer::Type type;
|
||||||
|
|
||||||
|
// When parsing the serialization, we only need the lexer to look for strings
|
||||||
|
// and words since we're not using the provided type information
|
||||||
|
lexer.noDate ();
|
||||||
|
lexer.noDuration ();
|
||||||
|
lexer.noUUID ();
|
||||||
|
lexer.noHexNumber ();
|
||||||
|
lexer.noURL ();
|
||||||
|
lexer.noPath ();
|
||||||
|
lexer.noPattern ();
|
||||||
|
lexer.noOperator ();
|
||||||
|
|
||||||
|
while (lexer.token (token, type))
|
||||||
|
{
|
||||||
|
tokens.push_back (Lexer::dequote (token));
|
||||||
|
}
|
||||||
|
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Syntax:
|
||||||
|
// 'inc' [ <iso> [ '-' <iso> ]] [ '#' <tag> [ <tag> ... ]]
|
||||||
|
Interval IntervalFactory::fromSerialization (const std::string& line)
|
||||||
|
{
|
||||||
|
std::vector <std::string> tokens = tokenizeSerialization (line);
|
||||||
|
|
||||||
|
// Minimal requirement 'inc'.
|
||||||
|
if (! tokens.empty () && tokens[0] == "inc")
|
||||||
|
{
|
||||||
|
Interval interval = Interval ();
|
||||||
|
|
||||||
|
unsigned int offset = 0;
|
||||||
|
|
||||||
|
// Optional <iso>
|
||||||
|
if (tokens.size () > 1 &&
|
||||||
|
tokens[1].length () == 16)
|
||||||
|
{
|
||||||
|
interval.start = Datetime (tokens[1]);
|
||||||
|
offset = 1;
|
||||||
|
|
||||||
|
// Optional '-' <iso>
|
||||||
|
if (tokens.size () > 3 &&
|
||||||
|
tokens[2] == "-" &&
|
||||||
|
tokens[3].length () == 16)
|
||||||
|
{
|
||||||
|
interval.end = Datetime (tokens[3]);
|
||||||
|
offset = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional '#' <tag>
|
||||||
|
if (tokens.size () > 2 + offset && tokens[1 + offset] == "#")
|
||||||
|
{
|
||||||
|
// Optional <tag> ...
|
||||||
|
auto index = 2 + offset;
|
||||||
|
|
||||||
|
while (index < tokens.size () && tokens[index] != "#")
|
||||||
|
{
|
||||||
|
interval.tag (tokens[index]);
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional '#' <annotation>
|
||||||
|
if (index < tokens.size () && tokens[index] == "#")
|
||||||
|
{
|
||||||
|
std::string annotation;
|
||||||
|
|
||||||
|
// Optional <annotation> ...
|
||||||
|
for (unsigned int i = index + 1; i < tokens.size (); ++i)
|
||||||
|
{
|
||||||
|
annotation += (i > index +1 ? " " : "") + tokens[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
interval.setAnnotation (annotation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw format ("Unrecognizable line '{1}'.", line);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Interval IntervalFactory::fromJson (const std::string& jsonString)
|
||||||
|
{
|
||||||
|
Interval interval = Interval ();
|
||||||
|
|
||||||
|
if (! jsonString.empty ())
|
||||||
|
{
|
||||||
|
std::unique_ptr <json::object> json (dynamic_cast <json::object*> (json::parse (jsonString)));
|
||||||
|
|
||||||
|
json::array* tags = (json::array*) json->_data["tags"];
|
||||||
|
|
||||||
|
if (tags != nullptr)
|
||||||
|
{
|
||||||
|
for (auto& tag : tags->_data)
|
||||||
|
{
|
||||||
|
auto* value = (json::string*) tag;
|
||||||
|
interval.tag (json::decode (value->_data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
json::string* annotation = (json::string*) json->_data["annotation"];
|
||||||
|
interval.annotation = (annotation != nullptr) ? json::decode (annotation->_data) : "";
|
||||||
|
|
||||||
|
json::string* start = (json::string*) json->_data["start"];
|
||||||
|
interval.start = (start != nullptr) ? Datetime (start->_data) : 0;
|
||||||
|
json::string* end = (json::string*) json->_data["end"];
|
||||||
|
interval.end = (end != nullptr) ? Datetime(end->_data) : 0;
|
||||||
|
|
||||||
|
json::number* id = (json::number*) json->_data["id"];
|
||||||
|
interval.id = (id != nullptr) ? id->_dvalue : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,40 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018 - 2019, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVALFACTORY
|
||||||
|
#define INCLUDED_INTERVALFACTORY
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class IntervalFactory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static Interval fromSerialization (const std::string& line);
|
||||||
|
static Interval fromJson (const std::string& jsonString);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,43 @@
|
||||||
|
// ///////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
// ///////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <IntervalFilter.h>
|
||||||
|
|
||||||
|
bool IntervalFilter::is_done () const
|
||||||
|
{
|
||||||
|
return _done;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalFilter::set_done (bool done)
|
||||||
|
{
|
||||||
|
_done = done;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalFilter::reset ()
|
||||||
|
{
|
||||||
|
set_done (false);
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVALFILTER
|
||||||
|
#define INCLUDED_INTERVALFILTER
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
|
||||||
|
class IntervalFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual bool accepts (const Interval&) = 0;
|
||||||
|
virtual void reset ();
|
||||||
|
virtual ~IntervalFilter() = default;
|
||||||
|
|
||||||
|
bool is_done () const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void set_done (bool);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool _done = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_INTERVALFILTER
|
|
@ -0,0 +1,50 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <IntervalFilterAllInRange.h>
|
||||||
|
|
||||||
|
IntervalFilterAllInRange::IntervalFilterAllInRange (Range range): _range (std::move(range))
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool IntervalFilterAllInRange::accepts (const Interval& interval)
|
||||||
|
{
|
||||||
|
if (is_done())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((! _range.is_started() && ! _range.is_ended()) || interval.intersects (_range))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since we are moving backwards in time, and the intervals are in sorted order,
|
||||||
|
// if the filter is after the interval and does not intersect,
|
||||||
|
// we know there will be no more matches
|
||||||
|
set_done (interval.start < _range.start);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVALFILTEALLINRRANGE
|
||||||
|
#define INCLUDED_INTERVALFILTEALLINRRANGE
|
||||||
|
|
||||||
|
#include <IntervalFilter.h>
|
||||||
|
#include <Range.h>
|
||||||
|
|
||||||
|
class IntervalFilterAllInRange : public IntervalFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit IntervalFilterAllInRange (Range);
|
||||||
|
|
||||||
|
bool accepts (const Interval&) final;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const Range _range;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_INTERVALFILTERRANGE
|
|
@ -0,0 +1,58 @@
|
||||||
|
// ///////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
// ///////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <IntervalFilterAllWithIds.h>
|
||||||
|
|
||||||
|
IntervalFilterAllWithIds::IntervalFilterAllWithIds (std::set <int> ids) : _ids (std::move (ids))
|
||||||
|
{
|
||||||
|
_id_it = _ids.begin ();
|
||||||
|
_id_end = _ids.end ();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IntervalFilterAllWithIds::accepts (const Interval& interval)
|
||||||
|
{
|
||||||
|
if (is_done ())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (interval.id == *_id_it)
|
||||||
|
{
|
||||||
|
++_id_it;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_done (_id_it == _id_end);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalFilterAllWithIds::reset ()
|
||||||
|
{
|
||||||
|
set_done (false);
|
||||||
|
_id_it = _ids.begin ();
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVALFILTERALLWITHIDS
|
||||||
|
#define INCLUDED_INTERVALFILTERALLWITHIDS
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <IntervalFilter.h>
|
||||||
|
#include <set>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class IntervalFilterAllWithIds : public IntervalFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit IntervalFilterAllWithIds(std::set <int>);
|
||||||
|
|
||||||
|
bool accepts (const Interval&) final;
|
||||||
|
void reset () override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const std::set <int> _ids {};
|
||||||
|
std::set <int>::iterator _id_it;
|
||||||
|
std::set <int>::iterator _id_end;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDE_INTERVALFILTERALLWITHIDS
|
|
@ -0,0 +1,44 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <IntervalFilterAllWithTags.h>
|
||||||
|
|
||||||
|
IntervalFilterAllWithTags::IntervalFilterAllWithTags (std::set <std::string> tags): _tags (std::move (tags))
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool IntervalFilterAllWithTags::accepts (const Interval& interval)
|
||||||
|
{
|
||||||
|
for (auto& tag : _tags)
|
||||||
|
{
|
||||||
|
if (! interval.hasTag (tag))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVALFILTERALLWITHTAGSET
|
||||||
|
#define INCLUDED_INTERVALFILTERALLWITHTAGSET
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <IntervalFilter.h>
|
||||||
|
#include <set>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class IntervalFilterAllWithTags : public IntervalFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit IntervalFilterAllWithTags(std::set <std::string>);
|
||||||
|
|
||||||
|
bool accepts (const Interval&) final;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const std::set <std::string> _tags {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_INTERVALFILTERTAGSET
|
|
@ -0,0 +1,63 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <IntervalFilterAndGroup.h>
|
||||||
|
|
||||||
|
IntervalFilterAndGroup::IntervalFilterAndGroup (std::vector <std::shared_ptr <IntervalFilter>> filters) : _filters (std::move (filters))
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool IntervalFilterAndGroup::accepts (const Interval& interval)
|
||||||
|
{
|
||||||
|
if (is_done ())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& filter: _filters)
|
||||||
|
{
|
||||||
|
if (filter->accepts (interval))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filter->is_done ())
|
||||||
|
{
|
||||||
|
set_done (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalFilterAndGroup::reset ()
|
||||||
|
{
|
||||||
|
for (auto& filter: _filters)
|
||||||
|
{
|
||||||
|
filter->reset ();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVALFILTERANDGROUP
|
||||||
|
#define INCLUDED_INTERVALFILTERANDGROUP
|
||||||
|
|
||||||
|
#include <IntervalFilter.h>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class IntervalFilterAndGroup : public IntervalFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit IntervalFilterAndGroup (std::vector <std::shared_ptr <IntervalFilter>> filters);
|
||||||
|
|
||||||
|
bool accepts (const Interval&) final;
|
||||||
|
void reset () override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const std::vector <std::shared_ptr <IntervalFilter>> _filters = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_INTERVALFILTERANDGROUP
|
|
@ -0,0 +1,49 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <IntervalFilterFirstOf.h>
|
||||||
|
|
||||||
|
IntervalFilterFirstOf::IntervalFilterFirstOf (std::shared_ptr <IntervalFilter> filter) : _filter (filter)
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool IntervalFilterFirstOf::accepts (const Interval& interval)
|
||||||
|
{
|
||||||
|
if (is_done ())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto accepted = _filter->accepts (interval);
|
||||||
|
set_done (accepted);
|
||||||
|
|
||||||
|
return accepted;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntervalFilterFirstOf::reset ()
|
||||||
|
{
|
||||||
|
set_done (false);
|
||||||
|
_filter->reset ();
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVALFILTERFIRSTOF
|
||||||
|
#define INCLUDED_INTERVALFILTERFIRSTOF
|
||||||
|
|
||||||
|
#include <IntervalFilter.h>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class IntervalFilterFirstOf : public IntervalFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit IntervalFilterFirstOf(std::shared_ptr <IntervalFilter> filter);
|
||||||
|
|
||||||
|
bool accepts (const Interval&) final;
|
||||||
|
void reset ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::shared_ptr <IntervalFilter> _filter;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_INTERVALFILTERFIRSTOF
|
|
@ -0,0 +1,44 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <IntervalFilterTagsDisjoint.h>
|
||||||
|
|
||||||
|
IntervalFilterTagsDisjoint::IntervalFilterTagsDisjoint (std::set <std::string> tags): _tags (std::move (tags))
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool IntervalFilterTagsDisjoint::accepts (const Interval& interval)
|
||||||
|
{
|
||||||
|
for (auto& tag : _tags)
|
||||||
|
{
|
||||||
|
if ( interval.hasTag (tag))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2021, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_INTERVALFILTERTAGSDISJOINT
|
||||||
|
#define INCLUDED_INTERVALFILTERTAGSDISJOINT
|
||||||
|
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <IntervalFilter.h>
|
||||||
|
#include <set>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
class IntervalFilterTagsDisjoint : public IntervalFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit IntervalFilterTagsDisjoint(std::set <std::string>);
|
||||||
|
|
||||||
|
bool accepts (const Interval&) final;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const std::set <std::string> _tags {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_INTERVALFILTERTAGSET
|
|
@ -0,0 +1,200 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <AtomicFile.h>
|
||||||
|
#include <Journal.h>
|
||||||
|
#include <TransactionsFactory.h>
|
||||||
|
#include <cassert>
|
||||||
|
#include <timew.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool Journal::enabled () const
|
||||||
|
{
|
||||||
|
return _size != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
std::vector <Transaction> loadJournal (AtomicFile& undo)
|
||||||
|
{
|
||||||
|
std::vector <std::string> read_lines;
|
||||||
|
undo.read (read_lines);
|
||||||
|
undo.close ();
|
||||||
|
|
||||||
|
TransactionsFactory transactionsFactory;
|
||||||
|
|
||||||
|
for (auto& line: read_lines)
|
||||||
|
{
|
||||||
|
transactionsFactory.parseLine (line);
|
||||||
|
}
|
||||||
|
|
||||||
|
return transactionsFactory.get ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Journal::initialize (const std::string& location, int size)
|
||||||
|
{
|
||||||
|
_location = location;
|
||||||
|
_size = size;
|
||||||
|
|
||||||
|
if (! enabled ())
|
||||||
|
{
|
||||||
|
AtomicFile undo (_location);
|
||||||
|
if (undo.exists () && undo.size () > 0)
|
||||||
|
{
|
||||||
|
undo.remove ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Journal::startTransaction ()
|
||||||
|
{
|
||||||
|
if (enabled ())
|
||||||
|
{
|
||||||
|
if (_currentTransaction != nullptr)
|
||||||
|
{
|
||||||
|
throw "Subsequent call to start transaction";
|
||||||
|
}
|
||||||
|
|
||||||
|
_currentTransaction = std::make_shared <Transaction> ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Journal::endTransaction ()
|
||||||
|
{
|
||||||
|
if (! enabled ())
|
||||||
|
{
|
||||||
|
assert (_currentTransaction == nullptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_currentTransaction == nullptr)
|
||||||
|
{
|
||||||
|
throw "Call to end non-existent transaction";
|
||||||
|
}
|
||||||
|
|
||||||
|
AtomicFile undo (_location);
|
||||||
|
|
||||||
|
if (_size > 1)
|
||||||
|
{
|
||||||
|
std::vector <Transaction> transactions = loadJournal (undo);
|
||||||
|
|
||||||
|
unsigned int toCopy = _size - 1;
|
||||||
|
auto it = transactions.cbegin ();
|
||||||
|
auto end = transactions.cend ();
|
||||||
|
|
||||||
|
if (transactions.size () > toCopy)
|
||||||
|
{
|
||||||
|
it += transactions.size () - toCopy;
|
||||||
|
}
|
||||||
|
|
||||||
|
undo.truncate ();
|
||||||
|
for (; it != end; ++it)
|
||||||
|
{
|
||||||
|
undo.append (it->toString ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (_size == 1)
|
||||||
|
{
|
||||||
|
undo.truncate ();
|
||||||
|
}
|
||||||
|
|
||||||
|
undo.append (_currentTransaction->toString ());
|
||||||
|
_currentTransaction.reset ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Journal::recordConfigAction (const std::string& before, const std::string& after)
|
||||||
|
{
|
||||||
|
recordUndoAction ("config", before, after);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Journal::recordIntervalAction (const std::string& before, const std::string& after)
|
||||||
|
{
|
||||||
|
recordUndoAction ("interval", before, after);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Record undoable actions. There are several types:
|
||||||
|
// interval changes to stored intervals
|
||||||
|
// config changes to configuration
|
||||||
|
//
|
||||||
|
// Actions are only recorded if a transaction is open
|
||||||
|
//
|
||||||
|
void Journal::recordUndoAction (
|
||||||
|
const std::string& type,
|
||||||
|
const std::string& before,
|
||||||
|
const std::string& after)
|
||||||
|
{
|
||||||
|
if (enabled () && _currentTransaction != nullptr)
|
||||||
|
{
|
||||||
|
_currentTransaction->addUndoAction (type, before, after);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Transaction Journal::popLastTransaction ()
|
||||||
|
{
|
||||||
|
if (! enabled ())
|
||||||
|
{
|
||||||
|
return Transaction {};
|
||||||
|
}
|
||||||
|
|
||||||
|
AtomicFile undo (_location);
|
||||||
|
std::vector <Transaction> transactions = loadJournal (undo);
|
||||||
|
|
||||||
|
if (transactions.empty ())
|
||||||
|
{
|
||||||
|
return Transaction {};
|
||||||
|
}
|
||||||
|
|
||||||
|
Transaction last = transactions.back ();
|
||||||
|
transactions.pop_back ();
|
||||||
|
|
||||||
|
if (transactions.empty ())
|
||||||
|
{
|
||||||
|
undo.close ();
|
||||||
|
undo.remove ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
undo.open ();
|
||||||
|
undo.truncate ();
|
||||||
|
|
||||||
|
for (auto& transaction : transactions)
|
||||||
|
{
|
||||||
|
undo.append (transaction.toString ());
|
||||||
|
}
|
||||||
|
|
||||||
|
undo.close ();
|
||||||
|
}
|
||||||
|
|
||||||
|
return last;
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_JOURNAL
|
||||||
|
#define INCLUDED_JOURNAL
|
||||||
|
|
||||||
|
|
||||||
|
#include <Transaction.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Journal
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Journal() = default;
|
||||||
|
Journal(const Journal&) = delete;
|
||||||
|
Journal& operator= (const Journal&) = delete;
|
||||||
|
|
||||||
|
void initialize(const std::string&, int);
|
||||||
|
|
||||||
|
void startTransaction ();
|
||||||
|
void endTransaction ();
|
||||||
|
void recordConfigAction(const std::string&, const std::string&);
|
||||||
|
void recordIntervalAction(const std::string&, const std::string&);
|
||||||
|
bool enabled () const;
|
||||||
|
|
||||||
|
Transaction popLastTransaction();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void recordUndoAction (const std::string&, const std::string&, const std::string&);
|
||||||
|
|
||||||
|
std::string _location {};
|
||||||
|
std::shared_ptr <Transaction> _currentTransaction = nullptr;
|
||||||
|
int _size {0};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,378 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016 - 2019, 2022 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Range.h>
|
||||||
|
#include <cassert>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// A Range consists of a start time and optional end time. A missing end
|
||||||
|
// time makes the Range 'started' but not 'ended'.
|
||||||
|
//
|
||||||
|
// [start, end)
|
||||||
|
//
|
||||||
|
Range::Range (const Datetime& start_value, const Datetime& end_value)
|
||||||
|
{
|
||||||
|
start = start_value;
|
||||||
|
end = end_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::operator== (const Range& other) const
|
||||||
|
{
|
||||||
|
return start == other.start &&
|
||||||
|
end == other.end;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::operator!= (const Range& other) const
|
||||||
|
{
|
||||||
|
return start != other.start ||
|
||||||
|
end != other.end;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Range::open ()
|
||||||
|
{
|
||||||
|
start = Datetime ();
|
||||||
|
end = Datetime (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Range::open (const Datetime& value)
|
||||||
|
{
|
||||||
|
start = value;
|
||||||
|
end = Datetime (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Range::close ()
|
||||||
|
{
|
||||||
|
end = Datetime ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::is_open () const
|
||||||
|
{
|
||||||
|
return is_started () && ! is_ended ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::is_started () const
|
||||||
|
{
|
||||||
|
return start.toEpoch () > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::is_ended () const
|
||||||
|
{
|
||||||
|
return end.toEpoch () > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::is_empty () const
|
||||||
|
{
|
||||||
|
return start == end;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::contains (const Datetime& datetime) const
|
||||||
|
{
|
||||||
|
return (! is_started () || start < datetime) &&
|
||||||
|
(! is_ended () || datetime < end);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Detect the following overlap cases:
|
||||||
|
//
|
||||||
|
// this [--------)
|
||||||
|
// A [--------)
|
||||||
|
// B [--------)
|
||||||
|
// C [----)
|
||||||
|
// D [--------)
|
||||||
|
// E [--------)
|
||||||
|
// F [-------------)
|
||||||
|
// G [...
|
||||||
|
// H [...
|
||||||
|
// I [...
|
||||||
|
//
|
||||||
|
// this [...
|
||||||
|
// A [--------)
|
||||||
|
// B [--------)
|
||||||
|
// C [----)
|
||||||
|
// D [--------)
|
||||||
|
// E [--------)
|
||||||
|
// F [-------------)
|
||||||
|
// G [...
|
||||||
|
// H [...
|
||||||
|
// I [...
|
||||||
|
//
|
||||||
|
bool Range::overlaps (const Range& other) const
|
||||||
|
{
|
||||||
|
if (! is_started () || ! other.is_started ())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Other range ends before this range starts.
|
||||||
|
if (other.is_ended () && other.end <= start)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Other range starts after this range ends.
|
||||||
|
if (is_ended () && other.start >= end)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::encloses (const Range& other) const
|
||||||
|
{
|
||||||
|
return other.startsWithin (*this) && other.endsWithin (*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::startsWithin (const Range& other) const
|
||||||
|
{
|
||||||
|
if (other.is_empty ())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return other.start == start || other.contains (start);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::endsWithin (const Range& other) const
|
||||||
|
{
|
||||||
|
if (other.is_empty ())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return other.end == end || other.contains (end);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Calculate the following intersection cases:
|
||||||
|
//
|
||||||
|
// this [--------)
|
||||||
|
// A [--------)
|
||||||
|
// B [--------)
|
||||||
|
// C [----)
|
||||||
|
// D [--------)
|
||||||
|
// E [--------)
|
||||||
|
// F [-------------)
|
||||||
|
// G [...
|
||||||
|
// H [...
|
||||||
|
// I [...
|
||||||
|
//
|
||||||
|
// this [...
|
||||||
|
// A [--------)
|
||||||
|
// B [--------)
|
||||||
|
// C [----)
|
||||||
|
// D [--------)
|
||||||
|
// E [--------)
|
||||||
|
// F [-------------)
|
||||||
|
// G [...
|
||||||
|
// H [...
|
||||||
|
// I [...
|
||||||
|
//
|
||||||
|
Range Range::intersect (const Range& other) const
|
||||||
|
{
|
||||||
|
if (overlaps (other))
|
||||||
|
{
|
||||||
|
// Intersection is choosing the later one of the two starts, and the earlier one of
|
||||||
|
// the two ends, provided the two ranges overlap.
|
||||||
|
Range result;
|
||||||
|
result.start = start > other.start ? start : other.start;
|
||||||
|
|
||||||
|
if (is_ended ())
|
||||||
|
{
|
||||||
|
if (other.is_ended ())
|
||||||
|
result.end = end < other.end ? end : other.end;
|
||||||
|
else
|
||||||
|
result.end = end;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (other.is_ended ())
|
||||||
|
result.end = other.end;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there is an intersection but no overlap, we have a zero-width
|
||||||
|
// interval [p, p) and another interval [p, q), where q >= p.
|
||||||
|
if (intersects (other)) {
|
||||||
|
return Range {start, start};
|
||||||
|
}
|
||||||
|
|
||||||
|
return Range {};
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Range::intersects (const Range& other) const
|
||||||
|
{
|
||||||
|
if (overlaps (other)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A half-closed zero-width interval [p, p) may have the same
|
||||||
|
// starting point as another interval without overlapping it.
|
||||||
|
// We consider p to be an element of a range [p, p).
|
||||||
|
return (is_started () && other.is_started () && start == other.start);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// If the ranges do not overlap, the result is *this.
|
||||||
|
//
|
||||||
|
// this [----)
|
||||||
|
// other [----)
|
||||||
|
// result [-------)
|
||||||
|
//
|
||||||
|
// this [...
|
||||||
|
// other [----)
|
||||||
|
// result [...
|
||||||
|
//
|
||||||
|
// this [----)
|
||||||
|
// other [...
|
||||||
|
// result [...
|
||||||
|
//
|
||||||
|
// this [...
|
||||||
|
// other [...
|
||||||
|
// result [...
|
||||||
|
//
|
||||||
|
Range Range::combine (const Range& other) const
|
||||||
|
{
|
||||||
|
Range result {*this};
|
||||||
|
|
||||||
|
if (is_started () && other.is_started ())
|
||||||
|
{
|
||||||
|
// Start is hte earlier of the two.
|
||||||
|
result.start = std::min (result.start, other.start);
|
||||||
|
|
||||||
|
if (is_open () || other.is_open ())
|
||||||
|
result.end = {0};
|
||||||
|
else
|
||||||
|
result.end = std::max (result.end, other.end);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Consider the following overlap cases:
|
||||||
|
//
|
||||||
|
// this [--------)
|
||||||
|
// A [--------)
|
||||||
|
// B [--------)
|
||||||
|
// C [----)
|
||||||
|
// D [--------)
|
||||||
|
// E [--------)
|
||||||
|
// F [-------------)
|
||||||
|
// G [...
|
||||||
|
// H [...
|
||||||
|
// I [...
|
||||||
|
//
|
||||||
|
// this [...
|
||||||
|
// A [--------)
|
||||||
|
// B [--------)
|
||||||
|
// C [----)
|
||||||
|
// D [--------)
|
||||||
|
// E [--------)
|
||||||
|
// F [-------------)
|
||||||
|
// G [...
|
||||||
|
// H [...
|
||||||
|
// I [...
|
||||||
|
//
|
||||||
|
std::vector <Range> Range::subtract (const Range& other) const
|
||||||
|
{
|
||||||
|
std::vector <Range> results;
|
||||||
|
|
||||||
|
if (overlaps (other))
|
||||||
|
{
|
||||||
|
if (start < other.start)
|
||||||
|
{
|
||||||
|
results.emplace_back (start, other.start);
|
||||||
|
|
||||||
|
if (other.is_ended () &&
|
||||||
|
(! is_ended () || end > other.end))
|
||||||
|
{
|
||||||
|
results.emplace_back (other.end, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (other.is_ended ())
|
||||||
|
{
|
||||||
|
if (is_ended ())
|
||||||
|
{
|
||||||
|
if (end > other.end)
|
||||||
|
results.emplace_back (other.end, end);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
results.emplace_back (other.end, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Non-overlapping subtraction is a nop.
|
||||||
|
else
|
||||||
|
{
|
||||||
|
results.push_back (*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Returns the number of seconds between start and end.
|
||||||
|
// If the range is open, use 'now' as the end.
|
||||||
|
time_t Range::total () const
|
||||||
|
{
|
||||||
|
assert (is_open () || end >= start);
|
||||||
|
|
||||||
|
if (is_open ())
|
||||||
|
return Datetime () - Datetime (start);
|
||||||
|
|
||||||
|
return Datetime (end) - Datetime (start);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Range::dump () const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
out << "Range "
|
||||||
|
<< (start.toEpoch () ? start.toISOLocalExtended () : "n/a")
|
||||||
|
<< " - "
|
||||||
|
<< (end.toEpoch () ? end.toISOLocalExtended () : "n/a");
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,71 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2016 - 2019, 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_RANGE
|
||||||
|
#define INCLUDED_RANGE
|
||||||
|
|
||||||
|
#include <Datetime.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Range
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Range () = default;
|
||||||
|
virtual ~Range() = default;
|
||||||
|
Range (const Datetime&, const Datetime&);
|
||||||
|
bool operator== (const Range&) const;
|
||||||
|
bool operator!= (const Range&) const;
|
||||||
|
|
||||||
|
void open ();
|
||||||
|
void open (const Datetime&);
|
||||||
|
void close ();
|
||||||
|
|
||||||
|
bool is_open () const;
|
||||||
|
bool is_started () const;
|
||||||
|
bool is_ended () const;
|
||||||
|
bool is_empty () const;
|
||||||
|
|
||||||
|
bool contains (const Datetime&) const;
|
||||||
|
|
||||||
|
bool overlaps (const Range&) const;
|
||||||
|
bool encloses (const Range&) const;
|
||||||
|
bool startsWithin (const Range&) const;
|
||||||
|
bool endsWithin (const Range&) const;
|
||||||
|
Range intersect (const Range&) const;
|
||||||
|
bool intersects (const Range&) const;
|
||||||
|
Range combine (const Range&) const;
|
||||||
|
std::vector <Range> subtract (const Range&) const;
|
||||||
|
time_t total () const;
|
||||||
|
|
||||||
|
virtual std::string dump () const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Datetime start {0};
|
||||||
|
Datetime end {0};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,758 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2015 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <AtomicFile.h>
|
||||||
|
#include <FS.h>
|
||||||
|
#include <JSON.h>
|
||||||
|
#include <Rules.h>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cerrno>
|
||||||
|
#include <cinttypes>
|
||||||
|
#include <format.h>
|
||||||
|
#include <shared.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <tuple>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Rules::Rules ()
|
||||||
|
{
|
||||||
|
// Load the default values.
|
||||||
|
_settings =
|
||||||
|
{
|
||||||
|
{"confirmation", "on"},
|
||||||
|
{"debug", "off"},
|
||||||
|
{"verbose", "on"},
|
||||||
|
|
||||||
|
// 'day' report.
|
||||||
|
{"reports.day.hours", "all"},
|
||||||
|
{"reports.day.axis", "internal"},
|
||||||
|
{"reports.day.lines", "2"},
|
||||||
|
{"reports.day.spacing", "1"},
|
||||||
|
{"reports.day.month", "no"},
|
||||||
|
{"reports.day.week", "no"},
|
||||||
|
{"reports.day.day", "yes"},
|
||||||
|
{"reports.day.weekday", "yes"},
|
||||||
|
{"reports.day.totals", "no"},
|
||||||
|
{"reports.day.summary", "yes"},
|
||||||
|
{"reports.day.holidays", "no"},
|
||||||
|
{"reports.day.cell", "15"},
|
||||||
|
|
||||||
|
// 'week' report.
|
||||||
|
{"reports.week.hours", "all"},
|
||||||
|
{"reports.week.lines", "1"},
|
||||||
|
{"reports.week.spacing", "1"},
|
||||||
|
{"reports.week.month", "no"},
|
||||||
|
{"reports.week.week", "yes"},
|
||||||
|
{"reports.week.day", "yes"},
|
||||||
|
{"reports.week.weekday", "yes"},
|
||||||
|
{"reports.week.totals", "yes"},
|
||||||
|
{"reports.week.summary", "yes"},
|
||||||
|
{"reports.week.holidays", "yes"},
|
||||||
|
{"reports.week.cell", "15"},
|
||||||
|
|
||||||
|
// 'month' report.
|
||||||
|
{"reports.month.hours", "all"},
|
||||||
|
{"reports.month.lines", "1"},
|
||||||
|
{"reports.month.spacing", "1"},
|
||||||
|
{"reports.month.month", "yes"},
|
||||||
|
{"reports.month.week", "yes"},
|
||||||
|
{"reports.month.day", "yes"},
|
||||||
|
{"reports.month.weekday", "yes"},
|
||||||
|
{"reports.month.totals", "yes"},
|
||||||
|
{"reports.month.summary", "yes"},
|
||||||
|
{"reports.month.holidays", "yes"},
|
||||||
|
{"reports.month.cell", "15"},
|
||||||
|
|
||||||
|
// 'weeks' report.
|
||||||
|
{"reports.weeks.hours", "all"},
|
||||||
|
{"reports.weeks.lines", "1"},
|
||||||
|
{"reports.weeks.spacing", "1"},
|
||||||
|
{"reports.weeks.month", "no"},
|
||||||
|
{"reports.weeks.week", "yes"},
|
||||||
|
{"reports.weeks.day", "yes"},
|
||||||
|
{"reports.weeks.weekday", "yes"},
|
||||||
|
{"reports.weeks.totals", "yes"},
|
||||||
|
{"reports.weeks.summary", "yes"},
|
||||||
|
{"reports.weeks.holidays", "yes"},
|
||||||
|
{"reports.weeks.cell", "15"},
|
||||||
|
|
||||||
|
// 'months' report.
|
||||||
|
{"reports.months.hours", "all"},
|
||||||
|
{"reports.months.lines", "1"},
|
||||||
|
{"reports.months.spacing", "1"},
|
||||||
|
{"reports.months.month", "yes"},
|
||||||
|
{"reports.months.week", "yes"},
|
||||||
|
{"reports.months.day", "yes"},
|
||||||
|
{"reports.months.weekday", "yes"},
|
||||||
|
{"reports.months.totals", "yes"},
|
||||||
|
{"reports.months.summary", "yes"},
|
||||||
|
{"reports.months.holidays", "yes"},
|
||||||
|
{"reports.months.cell", "15"},
|
||||||
|
|
||||||
|
// 'summary' report.
|
||||||
|
{"reports.summary.holidays", "yes"},
|
||||||
|
|
||||||
|
// Enough of a theme to make the charts work.
|
||||||
|
{"theme.description", "Built-in default"},
|
||||||
|
{"theme.colors.exclusion", "gray8 on gray4"},
|
||||||
|
{"theme.colors.today", "white"},
|
||||||
|
{"theme.colors.holiday", "gray4"},
|
||||||
|
{"theme.colors.label", "gray4"},
|
||||||
|
|
||||||
|
// Options for the journal / undo file.
|
||||||
|
{"journal.size", "-1"},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Nested files are supported, with the following construct:
|
||||||
|
// import /absolute/path/to/file
|
||||||
|
void Rules::load (const std::string& file, int nest /* = 1 */)
|
||||||
|
{
|
||||||
|
if (nest > 10)
|
||||||
|
throw std::string ("Rules files may only be nested to 10 levels.");
|
||||||
|
|
||||||
|
if (nest == 1)
|
||||||
|
{
|
||||||
|
Path originalFile (file);
|
||||||
|
_original_file = originalFile._data;
|
||||||
|
|
||||||
|
if (! originalFile.exists ())
|
||||||
|
throw std::string ("ERROR: Configuration file not found.");
|
||||||
|
|
||||||
|
if (! originalFile.readable ())
|
||||||
|
throw std::string ("ERROR: Configuration file cannot be read (insufficient privileges).");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the file, then parse the contents.
|
||||||
|
std::string contents;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
AtomicFile::read (file, contents);
|
||||||
|
if (contents.length ())
|
||||||
|
{
|
||||||
|
parse (contents, nest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Rules::file () const
|
||||||
|
{
|
||||||
|
return _original_file;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Rules::has (const std::string& key) const
|
||||||
|
{
|
||||||
|
return _settings.find (key) != _settings.end ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Return the configuration value given the specified key.
|
||||||
|
std::string Rules::get (const std::string& key, const std::string& defaultValue) const
|
||||||
|
{
|
||||||
|
auto found = _settings.find (key);
|
||||||
|
|
||||||
|
if (found != _settings.end ())
|
||||||
|
{
|
||||||
|
return found->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
int Rules::getInteger (const std::string& key, int defaultValue) const
|
||||||
|
{
|
||||||
|
auto found = _settings.find (key);
|
||||||
|
if (found != _settings.end ())
|
||||||
|
{
|
||||||
|
int value = strtoimax (found->second.c_str (), nullptr, 10);
|
||||||
|
|
||||||
|
// Invalid values are handled. ERANGE errors are simply capped by
|
||||||
|
// strtoimax, which is desired behavior.
|
||||||
|
// Note that not all platforms behave alike, and the EINVAL is not
|
||||||
|
// necessarily returned.
|
||||||
|
if (value == 0 && (errno == EINVAL || found->second != "0"))
|
||||||
|
throw format ("Invalid integer value for '{1}': '{2}'", key, found->second);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
double Rules::getReal (const std::string& key) const
|
||||||
|
{
|
||||||
|
auto found = _settings.find (key);
|
||||||
|
if (found != _settings.end ())
|
||||||
|
return strtod (found->second.c_str (), nullptr);
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Rules::getBoolean (const std::string& key, bool defaultValue) const
|
||||||
|
{
|
||||||
|
auto found = _settings.find (key);
|
||||||
|
|
||||||
|
if (found != _settings.end ())
|
||||||
|
{
|
||||||
|
auto value = lowerCase (found->second);
|
||||||
|
if (value == "true" ||
|
||||||
|
value == "1" ||
|
||||||
|
value == "y" ||
|
||||||
|
value == "yes" ||
|
||||||
|
value == "on")
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Rules::set (const std::string& key, const int value)
|
||||||
|
{
|
||||||
|
_settings[key] = format (value);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Rules::set (const std::string& key, const double value)
|
||||||
|
{
|
||||||
|
_settings[key] = format (value, 1, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Rules::set (const std::string& key, const std::string& value)
|
||||||
|
{
|
||||||
|
_settings[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Provide a vector of all configuration keys. If a stem is provided, only
|
||||||
|
// return matching keys.
|
||||||
|
std::vector <std::string> Rules::all (const std::string& stem) const
|
||||||
|
{
|
||||||
|
std::vector <std::string> items;
|
||||||
|
for (const auto& it : _settings)
|
||||||
|
if (stem.empty () || it.first.find (stem) == 0)
|
||||||
|
items.push_back (it.first);
|
||||||
|
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool Rules::isRuleType (const std::string& type) const
|
||||||
|
{
|
||||||
|
if (std::find (_rule_types.begin (), _rule_types.end (), type) != _rule_types.end ())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string Rules::dump () const
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
out << "Rules\n"
|
||||||
|
<< " _original_file " << _original_file
|
||||||
|
<< '\n';
|
||||||
|
|
||||||
|
out << " Settings\n";
|
||||||
|
for (const auto& item : _settings)
|
||||||
|
out << " " << item.first << "=" << item.second << '\n';
|
||||||
|
|
||||||
|
return out.str ();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Rules::parse (const std::string& input, int nest /* = 1 */)
|
||||||
|
{
|
||||||
|
bool inRule = false;
|
||||||
|
std::string ruleDef;
|
||||||
|
|
||||||
|
// Remove comments from input.
|
||||||
|
for (auto& line : split (input, '\n'))
|
||||||
|
{
|
||||||
|
auto comment = line.find ("#");
|
||||||
|
if (comment != std::string::npos)
|
||||||
|
{
|
||||||
|
line.resize (comment);
|
||||||
|
line = rtrim (line);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tokenize the line for convenience, but capture the indentation level.
|
||||||
|
// tokens.
|
||||||
|
auto indent = line.find_first_not_of (' ');
|
||||||
|
|
||||||
|
auto tokens = Lexer::tokenize (line);
|
||||||
|
if (! tokens.empty ())
|
||||||
|
{
|
||||||
|
if (inRule)
|
||||||
|
{
|
||||||
|
if (indent == 0)
|
||||||
|
{
|
||||||
|
inRule = false;
|
||||||
|
parseRule (ruleDef);
|
||||||
|
ruleDef = "";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ruleDef += line + '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: this should NOT be an 'else' to the above 'if (inRule)', because
|
||||||
|
// there are lines where both blocks need to run.
|
||||||
|
if (! inRule)
|
||||||
|
{
|
||||||
|
auto firstWord = std::get <0> (tokens[0]);
|
||||||
|
|
||||||
|
// Top-level rule definition:
|
||||||
|
// 'define'
|
||||||
|
// ...
|
||||||
|
//
|
||||||
|
if (firstWord == "define")
|
||||||
|
{
|
||||||
|
if (! ruleDef.empty ())
|
||||||
|
{
|
||||||
|
parseRule (ruleDef);
|
||||||
|
ruleDef = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
inRule = true;
|
||||||
|
ruleDef = line + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Top-level import:
|
||||||
|
// 'import' <file>
|
||||||
|
else if (firstWord == "import" &&
|
||||||
|
tokens.size () == 2 &&
|
||||||
|
std::get <1> (tokens[1]) == Lexer::Type::path)
|
||||||
|
{
|
||||||
|
File imported (std::get <0> (tokens[1]));
|
||||||
|
if (! imported.is_absolute ())
|
||||||
|
throw format ("Can only import files with absolute paths, not '{1}'.", imported._data);
|
||||||
|
|
||||||
|
if (! imported.readable ())
|
||||||
|
throw format ("Could not read imported file '{1}'.", imported._data);
|
||||||
|
|
||||||
|
load (imported._data, nest + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Top-level settings:
|
||||||
|
// <name> '=' <value>
|
||||||
|
else if (tokens.size () >= 3 &&
|
||||||
|
std::get <0> (tokens[1]) == "=")
|
||||||
|
{
|
||||||
|
// If this line is an assignment, then tokenizing it is a mistake, so
|
||||||
|
// use the raw data from 'line'.
|
||||||
|
auto equals = line.find ('=');
|
||||||
|
assert (equals != std::string::npos);
|
||||||
|
|
||||||
|
set (trim (line.substr (indent, equals - indent)),
|
||||||
|
trim (line.substr (equals + 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Top-level settings, with no value:
|
||||||
|
// <name> '='
|
||||||
|
else if (tokens.size () == 2 &&
|
||||||
|
std::get <0> (tokens[1]) == "=")
|
||||||
|
{
|
||||||
|
set (firstWord, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admit defeat.
|
||||||
|
else
|
||||||
|
throw format ("Unrecognized construct: {1}", line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! ruleDef.empty ())
|
||||||
|
parseRule (ruleDef);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Rules::parseRule (const std::string& input)
|
||||||
|
{
|
||||||
|
// Break the rule def into lines.
|
||||||
|
auto lines = split (input, '\n');
|
||||||
|
|
||||||
|
// Tokenize the first line.
|
||||||
|
std::vector <std::string> tokens;
|
||||||
|
std::string token;
|
||||||
|
Lexer::Type type;
|
||||||
|
Lexer lexer (lines[0]);
|
||||||
|
while (lexer.token (token, type))
|
||||||
|
tokens.push_back (token);
|
||||||
|
|
||||||
|
// Based on the tokens of the first line, determine which rule type needs to
|
||||||
|
// be parsed.
|
||||||
|
if (tokens.size () >= 2 &&
|
||||||
|
tokens[0] == "define")
|
||||||
|
{
|
||||||
|
if (tokens.size () >= 2 &&
|
||||||
|
isRuleType (tokens[1].substr (0, tokens[1].length () - 1)))
|
||||||
|
parseRuleSettings (lines);
|
||||||
|
|
||||||
|
// Error.
|
||||||
|
else
|
||||||
|
throw format ("Unrecognized rule type '{1}'", join (" ", tokens));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Rules::parseRuleSettings (
|
||||||
|
const std::vector <std::string>& lines)
|
||||||
|
{
|
||||||
|
std::vector <std::string> hierarchy;
|
||||||
|
std::vector <unsigned int> indents;
|
||||||
|
indents.push_back (0);
|
||||||
|
|
||||||
|
for (const auto& line : lines)
|
||||||
|
{
|
||||||
|
auto indent = getIndentation (line);
|
||||||
|
auto tokens = tokenizeLine (line);
|
||||||
|
auto group = parseGroup (tokens);
|
||||||
|
|
||||||
|
// Capture increased indentation.
|
||||||
|
if (indent > indents.back ())
|
||||||
|
indents.push_back (indent);
|
||||||
|
|
||||||
|
// If indent decreased.
|
||||||
|
else if (indent < indents.back ())
|
||||||
|
{
|
||||||
|
while (! indents.empty () && indent != indents.back ())
|
||||||
|
{
|
||||||
|
indents.pop_back ();
|
||||||
|
hierarchy.pop_back ();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spot raggedy-ass indentation.
|
||||||
|
if (indent != indents.back ())
|
||||||
|
throw std::string ("Syntax error in rule: mismatched indent.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Descend.
|
||||||
|
if (! group.empty ())
|
||||||
|
hierarchy.push_back (group);
|
||||||
|
|
||||||
|
// Settings.
|
||||||
|
if (tokens.size () >= 3 && tokens[1] == "=")
|
||||||
|
{
|
||||||
|
auto name = join (".", hierarchy) + "." + tokens[0];
|
||||||
|
|
||||||
|
auto equals = line.find ('=');
|
||||||
|
if (equals == std::string::npos)
|
||||||
|
throw format ("Syntax error in rule: missing '=' in line '{1}'.", line);
|
||||||
|
|
||||||
|
auto value = Lexer::dequote (trim (line.substr (equals + 1)));
|
||||||
|
set (name, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Should arrive here with indents and hierarchy in their original state.
|
||||||
|
if (indents.size () != 1 ||
|
||||||
|
indents[0] != 0)
|
||||||
|
throw std::string ("Syntax error - indentation is not right.");
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
unsigned int Rules::getIndentation (const std::string& line)
|
||||||
|
{
|
||||||
|
auto indent = line.find_first_not_of (' ');
|
||||||
|
if (indent == std::string::npos)
|
||||||
|
indent = 0;
|
||||||
|
|
||||||
|
return indent;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Tokenize the line. This loses whitespace information and token types.
|
||||||
|
std::vector <std::string> Rules::tokenizeLine (const std::string& line)
|
||||||
|
{
|
||||||
|
std::vector <std::string> tokens;
|
||||||
|
std::string token;
|
||||||
|
Lexer::Type type;
|
||||||
|
Lexer lexer (line);
|
||||||
|
while (lexer.token (token, type))
|
||||||
|
tokens.push_back (token);
|
||||||
|
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// {"one","two:"} --> "two"
|
||||||
|
// {"one two", ":"} --> "one two"
|
||||||
|
// {"one"} --> ""
|
||||||
|
std::string Rules::parseGroup (const std::vector <std::string>& tokens)
|
||||||
|
{
|
||||||
|
auto count = tokens.size ();
|
||||||
|
if (count)
|
||||||
|
{
|
||||||
|
auto last = tokens.back ();
|
||||||
|
|
||||||
|
if (count >= 2 && last == ":")
|
||||||
|
return tokens[count - 2];
|
||||||
|
|
||||||
|
else if (count >= 1 && last[last.length () - 1] == ':')
|
||||||
|
return last.substr (0, last.length () - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Note that because this function does not recurse with includes, it therefore
|
||||||
|
// only sees the top-level settings. This has the desirable effect of adding as
|
||||||
|
// an override any setting which resides in an imported file.
|
||||||
|
bool Rules::setConfigVariable (
|
||||||
|
Journal& journal,
|
||||||
|
const Rules& rules,
|
||||||
|
std::string name,
|
||||||
|
std::string value,
|
||||||
|
bool confirmation /* = false */)
|
||||||
|
{
|
||||||
|
// Read config file as lines of text.
|
||||||
|
std::vector <std::string> lines;
|
||||||
|
File::read (rules.file (), lines);
|
||||||
|
|
||||||
|
bool change = false;
|
||||||
|
|
||||||
|
if (rules.has (name))
|
||||||
|
{
|
||||||
|
// No change.
|
||||||
|
if (rules.get (name) == value)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// If there is a non-comment line containing the entry in flattened form:
|
||||||
|
// a.b.c = value
|
||||||
|
bool found = false;
|
||||||
|
for (auto& line : lines)
|
||||||
|
{
|
||||||
|
auto comment = line.find ('#');
|
||||||
|
auto pos = line.find (name);
|
||||||
|
if (pos != std::string::npos &&
|
||||||
|
(comment == std::string::npos || comment > pos))
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
|
||||||
|
// Modify value
|
||||||
|
if (! confirmation ||
|
||||||
|
confirm (format ("Are you sure you want to change the value of '{1}' from '{2}' to '{3}'?",
|
||||||
|
name,
|
||||||
|
rules.get (name),
|
||||||
|
value)))
|
||||||
|
{
|
||||||
|
auto before = line;
|
||||||
|
line = line.substr (0, pos) + name + " = " + value;
|
||||||
|
|
||||||
|
journal.recordConfigAction (before, line);
|
||||||
|
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it was not found, then retry in hierarchical form∴
|
||||||
|
// a:
|
||||||
|
// b:
|
||||||
|
// c = value
|
||||||
|
if (! found)
|
||||||
|
{
|
||||||
|
auto leaf = split (name, '.').back () + ":";
|
||||||
|
for (auto& line : lines)
|
||||||
|
{
|
||||||
|
auto comment = line.find ('#');
|
||||||
|
auto pos = line.find (leaf);
|
||||||
|
if (pos != std::string::npos &&
|
||||||
|
(comment == std::string::npos || comment > pos))
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
|
||||||
|
// Remove name
|
||||||
|
if (! confirmation ||
|
||||||
|
confirm (format ("Are you sure you want to change the value of '{1}' from '{2}' to '{3}'?",
|
||||||
|
name,
|
||||||
|
rules.get (name),
|
||||||
|
value)))
|
||||||
|
{
|
||||||
|
auto before = line;
|
||||||
|
line = line.substr (0, pos) + leaf + " " + value;
|
||||||
|
|
||||||
|
journal.recordConfigAction (before, line);
|
||||||
|
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (! found)
|
||||||
|
{
|
||||||
|
// Remove name
|
||||||
|
if (! confirmation ||
|
||||||
|
confirm (format ("Are you sure you want to change the value of '{1}' from '{2}' to '{3}'?",
|
||||||
|
name,
|
||||||
|
rules.get (name),
|
||||||
|
value)))
|
||||||
|
{
|
||||||
|
// Add blank line required by rules.
|
||||||
|
if (lines.empty () || lines.back ().empty ())
|
||||||
|
lines.emplace_back ("");
|
||||||
|
|
||||||
|
// Add new line.
|
||||||
|
lines.push_back (name + " = " + json::encode (value));
|
||||||
|
|
||||||
|
journal.recordConfigAction ("", lines.back ());
|
||||||
|
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (! confirmation ||
|
||||||
|
confirm (format ("Are you sure you want to add '{1}' with a value of '{2}'?", name, value)))
|
||||||
|
{
|
||||||
|
// TODO Ideally, this would locate an existing hierarchy and insert the
|
||||||
|
// new leaf/value properly. But that's non-trivial.
|
||||||
|
|
||||||
|
// Add blank line required by rules.
|
||||||
|
if (lines.empty () || lines.back ().empty ())
|
||||||
|
lines.emplace_back ("");
|
||||||
|
|
||||||
|
// Add new line.
|
||||||
|
lines.push_back (name + " = " + json::encode (value));
|
||||||
|
|
||||||
|
journal.recordConfigAction ("", lines.back ());
|
||||||
|
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (change)
|
||||||
|
{
|
||||||
|
AtomicFile::write (rules.file (), lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
return change;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Removes lines from configuration but leaves comments intact.
|
||||||
|
//
|
||||||
|
// Return codes:
|
||||||
|
// 0 - found and removed
|
||||||
|
// 1 - found and not removed
|
||||||
|
// 2 - not found
|
||||||
|
int Rules::unsetConfigVariable (
|
||||||
|
Journal& journal,
|
||||||
|
const Rules& rules,
|
||||||
|
std::string name,
|
||||||
|
bool confirmation /* = false */)
|
||||||
|
{
|
||||||
|
// Setting not found.
|
||||||
|
if (! rules.has (name))
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
// Read config file as lines of text.
|
||||||
|
std::vector <std::string> lines;
|
||||||
|
AtomicFile::read (rules.file (), lines);
|
||||||
|
|
||||||
|
// If there is a non-comment line containing the entry in flattened form:
|
||||||
|
// a.b.c = value
|
||||||
|
bool found = false;
|
||||||
|
bool change = false;
|
||||||
|
for (auto& line : lines)
|
||||||
|
{
|
||||||
|
auto comment = line.find ('#');
|
||||||
|
auto pos = line.find (name);
|
||||||
|
if (pos != std::string::npos &&
|
||||||
|
(comment == std::string::npos || comment > pos))
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
|
||||||
|
// Remove name
|
||||||
|
if (! confirmation ||
|
||||||
|
confirm (format ("Are you sure you want to remove '{1}'?", name)))
|
||||||
|
{
|
||||||
|
journal.recordConfigAction (line, "");
|
||||||
|
|
||||||
|
line = "";
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it was not found, then retry in hierarchical form∴
|
||||||
|
// a:
|
||||||
|
// b:
|
||||||
|
// c = value
|
||||||
|
if (! found)
|
||||||
|
{
|
||||||
|
auto leaf = split (name, '.').back () + ":";
|
||||||
|
for (auto& line : lines)
|
||||||
|
{
|
||||||
|
auto comment = line.find ('#');
|
||||||
|
auto pos = line.find (leaf);
|
||||||
|
if (pos != std::string::npos &&
|
||||||
|
(comment == std::string::npos || comment > pos))
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
|
||||||
|
// Remove name
|
||||||
|
if (! confirmation ||
|
||||||
|
confirm (format ("Are you sure you want to remove '{1}'?", name)))
|
||||||
|
{
|
||||||
|
line = "";
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (change)
|
||||||
|
{
|
||||||
|
AtomicFile::write (rules.file (), lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (change && found)
|
||||||
|
return 0;
|
||||||
|
else if (found)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2015 - 2016, 2018 - 2019, 2022 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_RULES
|
||||||
|
#define INCLUDED_RULES
|
||||||
|
|
||||||
|
#include <Database.h>
|
||||||
|
#include <Journal.h>
|
||||||
|
#include <Lexer.h>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Rules
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Rules ();
|
||||||
|
void load (const std::string&, int next = 1);
|
||||||
|
std::string file () const;
|
||||||
|
|
||||||
|
bool has (const std::string&) const;
|
||||||
|
std::string get (const std::string&, const std::string& = "") const;
|
||||||
|
int getInteger (const std::string&, int = 0) const;
|
||||||
|
double getReal (const std::string&) const;
|
||||||
|
bool getBoolean (const std::string&, bool = false) const;
|
||||||
|
|
||||||
|
void set (const std::string&, int);
|
||||||
|
void set (const std::string&, double);
|
||||||
|
void set (const std::string&, const std::string&);
|
||||||
|
|
||||||
|
std::vector <std::string> all (const std::string& = "") const;
|
||||||
|
bool isRuleType (const std::string&) const;
|
||||||
|
|
||||||
|
std::string dump () const;
|
||||||
|
|
||||||
|
static bool setConfigVariable (Journal&, const Rules&, std::string, std::string, bool confirmation);
|
||||||
|
static int unsetConfigVariable (Journal&, const Rules&, std::string, bool confirmation);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void parse (const std::string&, int = 1);
|
||||||
|
void parseRule (const std::string&);
|
||||||
|
void parseRuleSettings (const std::vector <std::string>&);
|
||||||
|
|
||||||
|
unsigned int getIndentation (const std::string&);
|
||||||
|
std::vector <std::string> tokenizeLine (const std::string&);
|
||||||
|
std::string parseGroup (const std::vector <std::string>&);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string _original_file {};
|
||||||
|
std::map <std::string, std::string> _settings {};
|
||||||
|
std::vector <std::string> _rule_types {"tags", "reports", "theme", "holidays", "exclusions"};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,271 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018, 2023, Gothenburg Bit Factory.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Datetime.h>
|
||||||
|
#include <SummaryTable.h>
|
||||||
|
#include <Table.h>
|
||||||
|
#include <format.h>
|
||||||
|
#include <timew.h>
|
||||||
|
#include <utf8.h>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder SummaryTable::builder ()
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder& SummaryTable::Builder::withWeekFormat (const std::string& format)
|
||||||
|
{
|
||||||
|
_week_fmt = format;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder& SummaryTable::Builder::withDateFormat (const std::string& format)
|
||||||
|
{
|
||||||
|
_date_fmt = format;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder& SummaryTable::Builder::withTimeFormat (const std::string& format)
|
||||||
|
{
|
||||||
|
_time_fmt = format;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder& SummaryTable::Builder::withAnnotations (const bool show)
|
||||||
|
{
|
||||||
|
_show_annotations = show;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder& SummaryTable::Builder::withIds (bool show, Color color)
|
||||||
|
{
|
||||||
|
_show_ids = show;
|
||||||
|
_color_id = color;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder & SummaryTable::Builder::withTags (bool show, std::map <std::string, Color>& colors)
|
||||||
|
{
|
||||||
|
_show_tags = show;
|
||||||
|
_color_tags = std::move (colors);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder& SummaryTable::Builder::withWeekdays (const bool show)
|
||||||
|
{
|
||||||
|
_show_weekdays = show;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder& SummaryTable::Builder::withWeeks (const bool show)
|
||||||
|
{
|
||||||
|
_show_weeks = show;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder& SummaryTable::Builder::withRange (const Range& range)
|
||||||
|
{
|
||||||
|
_range = range;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
SummaryTable::Builder & SummaryTable::Builder::withIntervals (const std::vector <Interval>& tracked)
|
||||||
|
{
|
||||||
|
_tracked = tracked;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Table SummaryTable::Builder::build ()
|
||||||
|
{
|
||||||
|
const auto dates_col_offset = _show_weeks ? 1 : 0;
|
||||||
|
const auto weekdays_col_offset = dates_col_offset;
|
||||||
|
const auto ids_col_offset = weekdays_col_offset + (_show_weekdays ? 1: 0);
|
||||||
|
const auto tags_col_offset = ids_col_offset + (_show_ids ? 1 : 0);
|
||||||
|
const auto annotation_col_offset = tags_col_offset + (_show_tags ? 1 : 0);
|
||||||
|
const auto start_col_offset = annotation_col_offset + (_show_annotations ? 1 : 0);
|
||||||
|
|
||||||
|
const auto weeks_col_index = 0;
|
||||||
|
const auto dates_col_index = 0 + dates_col_offset;
|
||||||
|
const auto weekdays_col_index = 1 + weekdays_col_offset;
|
||||||
|
const auto ids_col_index = 1 + ids_col_offset;
|
||||||
|
const auto tags_col_index = 1 + tags_col_offset;
|
||||||
|
const auto annotation_col_index = 1 + annotation_col_offset;
|
||||||
|
const auto start_col_index = 1 + start_col_offset;
|
||||||
|
const auto end_col_index = 2 + start_col_offset;
|
||||||
|
const auto duration_col_index = 3 + start_col_offset;
|
||||||
|
const auto total_col_index = 4 + start_col_offset;
|
||||||
|
|
||||||
|
int terminalWidth = getTerminalWidth ();
|
||||||
|
|
||||||
|
Table table;
|
||||||
|
table.width (terminalWidth);
|
||||||
|
table.colorHeader (Color ("underline"));
|
||||||
|
|
||||||
|
if (_show_weeks)
|
||||||
|
{
|
||||||
|
table.add ("Wk");
|
||||||
|
}
|
||||||
|
|
||||||
|
table.add ("Date");
|
||||||
|
|
||||||
|
if (_show_weekdays)
|
||||||
|
{
|
||||||
|
table.add ("Day");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_show_ids)
|
||||||
|
{
|
||||||
|
table.add ("ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_show_tags)
|
||||||
|
{
|
||||||
|
table.add ("Tags");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_show_annotations)
|
||||||
|
{
|
||||||
|
table.add ("Annotation");
|
||||||
|
}
|
||||||
|
|
||||||
|
table.add ("Start", false);
|
||||||
|
table.add ("End", false);
|
||||||
|
table.add ("Time", false);
|
||||||
|
table.add ("Total", false);
|
||||||
|
|
||||||
|
// Each day is rendered separately.
|
||||||
|
time_t grand_total = 0;
|
||||||
|
Datetime previous;
|
||||||
|
|
||||||
|
auto days_start = _range.is_started () ? _range.start : _tracked.front ().start;
|
||||||
|
auto days_end = _range.is_ended () ? _range.end : _tracked.back ().end;
|
||||||
|
|
||||||
|
const auto now = Datetime ();
|
||||||
|
|
||||||
|
if (days_end == 0)
|
||||||
|
{
|
||||||
|
days_end = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Datetime day = days_start.startOfDay (); day < days_end; ++day)
|
||||||
|
{
|
||||||
|
auto day_range = getFullDay (day);
|
||||||
|
time_t daily_total = 0;
|
||||||
|
|
||||||
|
int row = -1;
|
||||||
|
for (auto& track : subset (day_range, _tracked))
|
||||||
|
{
|
||||||
|
// Make sure the track only represents one day.
|
||||||
|
if ((track.is_open () && day > now))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
row = table.addRow ();
|
||||||
|
|
||||||
|
if (day != previous)
|
||||||
|
{
|
||||||
|
if (_show_weeks)
|
||||||
|
{
|
||||||
|
table.set (row, weeks_col_index, format (_week_fmt, day.week ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
table.set (row, dates_col_index, day.toString (_date_fmt));
|
||||||
|
|
||||||
|
if (_show_weekdays)
|
||||||
|
{
|
||||||
|
table.set (row, weekdays_col_index, Datetime::dayNameShort (day.dayOfWeek ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
previous = day;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intersect track with day.
|
||||||
|
auto today = day_range.intersect (track);
|
||||||
|
|
||||||
|
if (track.is_open () && track.start > now)
|
||||||
|
{
|
||||||
|
today.end = track.start;
|
||||||
|
}
|
||||||
|
else if (track.is_open () && day <= now && today.end > now)
|
||||||
|
{
|
||||||
|
today.end = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_show_ids)
|
||||||
|
{
|
||||||
|
table.set (row, ids_col_index, format ("@{1}", track.id), _color_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_show_tags)
|
||||||
|
{
|
||||||
|
auto tags_string = join (", ", track.tags ());
|
||||||
|
table.set (row, tags_col_index, tags_string, summaryIntervalColor (_color_tags, track.tags ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_show_annotations)
|
||||||
|
{
|
||||||
|
table.set (row, annotation_col_index, track.getAnnotation ());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto total = today.total ();
|
||||||
|
|
||||||
|
table.set (row, start_col_index, today.start.toString (_time_fmt));
|
||||||
|
table.set (row, end_col_index, (track.is_open () ? "-" : today.end.toString (_time_fmt)));
|
||||||
|
table.set (row, duration_col_index, Duration (total).formatHours ());
|
||||||
|
|
||||||
|
daily_total += total;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (row != -1)
|
||||||
|
{
|
||||||
|
table.set (row, total_col_index, Duration (daily_total).formatHours ());
|
||||||
|
}
|
||||||
|
|
||||||
|
grand_total += daily_total;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the total.
|
||||||
|
table.set (table.addRow (), total_col_index, " ", Color ("underline"));
|
||||||
|
table.set (table.addRow (), total_col_index, Duration (grand_total).formatHours ());
|
||||||
|
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,77 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018, 2023, Gothenburg Bit Factory.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_SUMMARYTABLE
|
||||||
|
#define INCLUDED_SUMMARYTABLE
|
||||||
|
|
||||||
|
#include <Color.h>
|
||||||
|
#include <Interval.h>
|
||||||
|
#include <Range.h>
|
||||||
|
#include <Table.h>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
class SummaryTable
|
||||||
|
{
|
||||||
|
class Builder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Builder& withWeekFormat (const std::string&);
|
||||||
|
Builder& withDateFormat (const std::string&);
|
||||||
|
Builder& withTimeFormat (const std::string&);
|
||||||
|
|
||||||
|
Builder& withAnnotations (bool);
|
||||||
|
Builder& withIds (bool, Color);
|
||||||
|
Builder& withTags (bool, std::map <std::string, Color>&);
|
||||||
|
Builder& withWeeks (bool);
|
||||||
|
Builder& withWeekdays (bool);
|
||||||
|
|
||||||
|
Builder& withRange (const Range&);
|
||||||
|
Builder& withIntervals (const std::vector <Interval>&);
|
||||||
|
|
||||||
|
Table build ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string _week_fmt;
|
||||||
|
std::string _date_fmt;
|
||||||
|
std::string _time_fmt;
|
||||||
|
|
||||||
|
bool _show_annotations;
|
||||||
|
bool _show_ids;
|
||||||
|
bool _show_tags;
|
||||||
|
bool _show_weekdays;
|
||||||
|
bool _show_weeks;
|
||||||
|
|
||||||
|
Range _range;
|
||||||
|
std::vector <Interval> _tracked;
|
||||||
|
Color _color_id;
|
||||||
|
std::map <std::string, Color> _color_tags;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
static Builder builder ();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // INCLUDED_SUMMARYTABLE
|
|
@ -0,0 +1,35 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2023, Gothenburg Bit Factory.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <Color.h>
|
||||||
|
#include <TagDescription.h>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
TagDescription::TagDescription (std::string name, Color color, std::string description) :
|
||||||
|
name (std::move (name)),
|
||||||
|
color (color),
|
||||||
|
description (std::move (description))
|
||||||
|
{}
|
|
@ -0,0 +1,42 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2023, Gothenburg Bit Factory.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_TAGDESCRIPTION
|
||||||
|
#define INCLUDED_TAGDESCRIPTION
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class TagDescription
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TagDescription (std::string , Color, std::string);
|
||||||
|
|
||||||
|
std::string name;
|
||||||
|
Color color;
|
||||||
|
std::string description;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //INCLUDED_TAGDESCRIPTION
|
|
@ -0,0 +1,61 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018 - 2019, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <TagInfo.h>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
TagInfo::TagInfo (unsigned int count)
|
||||||
|
{
|
||||||
|
_count = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
unsigned int TagInfo::increment ()
|
||||||
|
{
|
||||||
|
return _count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
unsigned int TagInfo::decrement ()
|
||||||
|
{
|
||||||
|
return --_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool TagInfo::hasCount ()
|
||||||
|
{
|
||||||
|
return _count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string TagInfo::toJson ()
|
||||||
|
{
|
||||||
|
std::stringstream output;
|
||||||
|
output << "{\"count\":" << _count << "}";
|
||||||
|
|
||||||
|
return output.str ();
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018 - 2019, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_TAGINFO
|
||||||
|
#define INCLUDED_TAGINFO
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class TagInfo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit TagInfo (unsigned int);
|
||||||
|
|
||||||
|
unsigned int increment ();
|
||||||
|
unsigned int decrement ();
|
||||||
|
|
||||||
|
bool hasCount ();
|
||||||
|
|
||||||
|
std::string toJson ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int _count = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,131 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018 - 2023, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <JSON.h>
|
||||||
|
#include <TagInfo.h>
|
||||||
|
#include <TagInfoDatabase.h>
|
||||||
|
#include <format.h>
|
||||||
|
#include <timew.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Increment tag count
|
||||||
|
// If it does not exist, a new entry is created
|
||||||
|
//
|
||||||
|
// Returns the previous tag count, -1 if it did not exist
|
||||||
|
//
|
||||||
|
int TagInfoDatabase::incrementTag (const std::string& tag)
|
||||||
|
{
|
||||||
|
auto search = _tagInformation.find (tag);
|
||||||
|
|
||||||
|
if (search == _tagInformation.end ())
|
||||||
|
{
|
||||||
|
add (tag, TagInfo {1});
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
_is_modified = true;
|
||||||
|
return search->second.increment ();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Decrement tag count
|
||||||
|
//
|
||||||
|
// Returns the new tag count
|
||||||
|
//
|
||||||
|
int TagInfoDatabase::decrementTag (const std::string& tag)
|
||||||
|
{
|
||||||
|
auto search = _tagInformation.find (tag);
|
||||||
|
|
||||||
|
if (search == _tagInformation.end ())
|
||||||
|
{
|
||||||
|
throw format ("Trying to decrement non-existent tag '{1}'", tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
_is_modified = true;
|
||||||
|
return search->second.decrement ();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Add tag to database
|
||||||
|
//
|
||||||
|
void TagInfoDatabase::add (const std::string& tag, const TagInfo& tagInfo)
|
||||||
|
{
|
||||||
|
_is_modified = true;
|
||||||
|
_tagInformation.emplace (tag, tagInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Return the current set of tag names
|
||||||
|
//
|
||||||
|
std::set <std::string> TagInfoDatabase::tags () const
|
||||||
|
{
|
||||||
|
std::set <std::string> tags;
|
||||||
|
|
||||||
|
for (auto& item : _tagInformation)
|
||||||
|
{
|
||||||
|
tags.insert (item.first);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TagInfoDatabase::is_modified () const
|
||||||
|
{
|
||||||
|
return _is_modified;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TagInfoDatabase::clear_modified ()
|
||||||
|
{
|
||||||
|
_is_modified = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
std::string TagInfoDatabase::toJson ()
|
||||||
|
{
|
||||||
|
std::stringstream json;
|
||||||
|
bool first = true;
|
||||||
|
|
||||||
|
json << "{";
|
||||||
|
|
||||||
|
for (auto& pair : _tagInformation)
|
||||||
|
{
|
||||||
|
auto tagInfo = pair.second;
|
||||||
|
|
||||||
|
if (tagInfo.hasCount ())
|
||||||
|
{
|
||||||
|
json << (first ? "" : ",")
|
||||||
|
<< "\n \"" << json::encode (pair.first) << "\":"
|
||||||
|
<< tagInfo.toJson ();
|
||||||
|
|
||||||
|
first = (first ? false : first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
json << "\n}";
|
||||||
|
|
||||||
|
return json.str ();
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright 2018 - 2022, Thomas Lauf, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// https://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_TAGINFODATABASE
|
||||||
|
#define INCLUDED_TAGINFODATABASE
|
||||||
|
|
||||||
|
#include <TagInfo.h>
|
||||||
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class TagInfoDatabase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int incrementTag (const std::string&);
|
||||||
|
int decrementTag (const std::string&);
|
||||||
|
|
||||||
|
void add (const std::string&, const TagInfo&);
|
||||||
|
|
||||||
|
std::set <std::string> tags () const;
|
||||||
|
|
||||||
|
std::string toJson ();
|
||||||
|
|
||||||
|
bool is_modified () const;
|
||||||
|
void clear_modified ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::map <std::string, TagInfo> _tagInformation {};
|
||||||
|
bool _is_modified {false};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue