aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvatar Ciaran McCreesh <ciaran.mccreesh@googlemail.com> 2010-08-05 09:59:43 +0100
committerAvatar Ciaran McCreesh <ciaran.mccreesh@googlemail.com> 2010-08-05 09:59:43 +0100
commite491822c8f84330b1ba114b84226988753c88ec9 (patch)
tree40700e4fb9d1bfc601d0a4ff76ccc832b860afb3
parentb2a37f58b68808eb9f7b27d89b223242affa6bfe (diff)
downloadpaludis-e491822c8f84330b1ba114b84226988753c88ec9.tar.gz
paludis-e491822c8f84330b1ba114b84226988753c88ec9.tar.xz
Split AdditionalPackageDepSpecRequirement into own header
-rw-r--r--paludis/additional_package_dep_spec_requirement-fwd.hh48
-rw-r--r--paludis/additional_package_dep_spec_requirement.cc38
-rw-r--r--paludis/additional_package_dep_spec_requirement.hh97
-rw-r--r--paludis/dep_spec-fwd.hh19
-rw-r--r--paludis/dep_spec.cc15
-rw-r--r--paludis/dep_spec.hh60
-rw-r--r--paludis/elike_use_requirement-fwd.hh5
-rw-r--r--paludis/elike_use_requirement.cc1
-rw-r--r--paludis/elike_use_requirement_TEST.cc1
-rw-r--r--paludis/files.m4207
-rw-r--r--paludis/match_package.cc1
-rw-r--r--paludis/resolver/decider.cc1
-rw-r--r--paludis/user_dep_spec.hh1
13 files changed, 298 insertions, 196 deletions
diff --git a/paludis/additional_package_dep_spec_requirement-fwd.hh b/paludis/additional_package_dep_spec_requirement-fwd.hh
new file mode 100644
index 0000000..d45db55
--- /dev/null
+++ b/paludis/additional_package_dep_spec_requirement-fwd.hh
@@ -0,0 +1,48 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef PALUDIS_GUARD_PALUDIS_ADDITIONAL_PACKAGE_DEP_SPEC_REQUIREMENT_FWD_HH
+#define PALUDIS_GUARD_PALUDIS_ADDITIONAL_PACKAGE_DEP_SPEC_REQUIREMENT_FWD_HH 1
+
+#include <paludis/util/attributes.hh>
+#include <paludis/util/sequence-fwd.hh>
+#include <iosfwd>
+#include <memory>
+
+namespace paludis
+{
+ class AdditionalPackageDepSpecRequirement;
+
+ /**
+ * An AdditionalPackageDepSpecRequirement can be written to an ostream.
+ *
+ * \ingroup g_dep_spec
+ */
+ std::ostream & operator<< (std::ostream &, const AdditionalPackageDepSpecRequirement &) PALUDIS_VISIBLE;
+
+ /**
+ * A collection of additional requirements for a PackageDepSpec.
+ *
+ * \since 0.26
+ * \ingroup g_dep_spec
+ */
+ typedef Sequence<std::shared_ptr<const AdditionalPackageDepSpecRequirement> > AdditionalPackageDepSpecRequirements;
+}
+
+#endif
diff --git a/paludis/additional_package_dep_spec_requirement.cc b/paludis/additional_package_dep_spec_requirement.cc
new file mode 100644
index 0000000..e6d09a5
--- /dev/null
+++ b/paludis/additional_package_dep_spec_requirement.cc
@@ -0,0 +1,38 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <paludis/additional_package_dep_spec_requirement.hh>
+#include <paludis/util/sequence-impl.hh>
+#include <paludis/util/wrapped_forward_iterator-impl.hh>
+#include <ostream>
+
+using namespace paludis;
+
+AdditionalPackageDepSpecRequirement::~AdditionalPackageDepSpecRequirement() = default;
+
+std::ostream &
+paludis::operator<< (std::ostream & s, const AdditionalPackageDepSpecRequirement & a)
+{
+ s << a.as_raw_string();
+ return s;
+}
+
+template class Sequence<std::shared_ptr<const AdditionalPackageDepSpecRequirement> >;
+template class WrappedForwardIterator<AdditionalPackageDepSpecRequirements::ConstIteratorTag, const std::shared_ptr<const AdditionalPackageDepSpecRequirement> >;
+
diff --git a/paludis/additional_package_dep_spec_requirement.hh b/paludis/additional_package_dep_spec_requirement.hh
new file mode 100644
index 0000000..05232b7
--- /dev/null
+++ b/paludis/additional_package_dep_spec_requirement.hh
@@ -0,0 +1,97 @@
+/* vim: set sw=4 sts=4 et foldmethod=syntax : */
+
+/*
+ * Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010 Ciaran McCreesh
+ *
+ * This file is part of the Paludis package manager. Paludis is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU General
+ * Public License version 2, as published by the Free Software Foundation.
+ *
+ * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef PALUDIS_GUARD_PALUDIS_ADDITIONAL_PACKAGE_DEP_SPEC_REQUIREMENT_HH
+#define PALUDIS_GUARD_PALUDIS_ADDITIONAL_PACKAGE_DEP_SPEC_REQUIREMENT_HH 1
+
+#include <paludis/additional_package_dep_spec_requirement-fwd.hh>
+#include <paludis/util/sequence.hh>
+#include <paludis/util/wrapped_forward_iterator.hh>
+#include <paludis/environment-fwd.hh>
+#include <paludis/changed_choices-fwd.hh>
+#include <paludis/package_id-fwd.hh>
+#include <utility>
+
+namespace paludis
+{
+ /**
+ * An additional requirement for a PackageDepSpec.
+ *
+ * \since 0.26
+ * \ingroup g_dep_spec
+ */
+ class PALUDIS_VISIBLE AdditionalPackageDepSpecRequirement
+ {
+ public:
+ AdditionalPackageDepSpecRequirement() = default;
+ virtual ~AdditionalPackageDepSpecRequirement();
+
+ AdditionalPackageDepSpecRequirement(const AdditionalPackageDepSpecRequirement &) = delete;
+ AdditionalPackageDepSpecRequirement & operator= (const AdditionalPackageDepSpecRequirement &) = delete;
+
+ /**
+ * Is our requirement met for a given PackageID?
+ *
+ * The string in the return type might be a description of why the
+ * requirement was not met. Sometimes better messages can be given
+ * than simply the return value of as_human_string() when the ID to
+ * be matched is known. If the bool is false, the string is
+ * meaningless.
+ *
+ * \since 0.44 returns pair<bool, std::string>
+ * \since 0.51 takes optional ChangedChoices arguments
+ */
+ virtual const std::pair<bool, std::string> requirement_met(
+ const Environment * const,
+ const ChangedChoices * const maybe_changes_to_owner,
+ const PackageID &,
+ const ChangedChoices * const maybe_changes_to_target) const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
+
+ /**
+ * If possible, indicate which choices to change to make our
+ * requirement met for a particular ID.
+ *
+ * Verifies that the ID has the appropriate choice, and that that
+ * choice isn't locked.
+ *
+ * \since 0.51
+ */
+ virtual bool accumulate_changes_to_make_met(
+ const Environment * const,
+ const ChangedChoices * const maybe_changes_to_owner,
+ const std::shared_ptr<const PackageID> &,
+ ChangedChoices &) const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
+
+ /**
+ * Return a human readable string representation of ourself.
+ */
+ virtual const std::string as_human_string() const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
+
+ /**
+ * Return a raw string representation of ourself.
+ */
+ virtual const std::string as_raw_string() const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
+ };
+
+ extern template class Sequence<std::shared_ptr<const AdditionalPackageDepSpecRequirement> >;
+ extern template class WrappedForwardIterator<AdditionalPackageDepSpecRequirements::ConstIteratorTag,
+ const std::shared_ptr<const AdditionalPackageDepSpecRequirement> >;
+}
+
+#endif
diff --git a/paludis/dep_spec-fwd.hh b/paludis/dep_spec-fwd.hh
index c2552a9..9f96b3d 100644
--- a/paludis/dep_spec-fwd.hh
+++ b/paludis/dep_spec-fwd.hh
@@ -1,7 +1,7 @@
/* vim: set sw=4 sts=4 et foldmethod=syntax : */
/*
- * Copyright (c) 2005, 2006, 2007, 2008, 2009 Ciaran McCreesh
+ * Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010 Ciaran McCreesh
*
* This file is part of the Paludis package manager. Paludis is free software;
* you can redistribute it and/or modify it under the terms of the GNU General
@@ -83,27 +83,10 @@ namespace paludis
class PartiallyMadePackageDepSpec;
class ConditionalDepSpecData;
- class AdditionalPackageDepSpecRequirement;
-
struct InstallableToRepository;
struct InstallableToPath;
/**
- * An AdditionalPackageDepSpecRequirement can be written to an ostream.
- *
- * \ingroup g_dep_spec
- */
- std::ostream & operator<< (std::ostream &, const AdditionalPackageDepSpecRequirement &) PALUDIS_VISIBLE;
-
- /**
- * A collection of additional requirements for a PackageDepSpec.
- *
- * \since 0.26
- * \ingroup g_dep_spec
- */
- typedef Sequence<std::shared_ptr<const AdditionalPackageDepSpecRequirement> > AdditionalPackageDepSpecRequirements;
-
- /**
* Create a PackageDepSpec from various rules.
*
* Note the return type is a PartiallyMadePackageDepSpec, which is implicitly convertible to
diff --git a/paludis/dep_spec.cc b/paludis/dep_spec.cc
index 749ea9d..06d2348 100644
--- a/paludis/dep_spec.cc
+++ b/paludis/dep_spec.cc
@@ -36,6 +36,7 @@
#include <paludis/util/options.hh>
#include <paludis/util/fs_entry.hh>
#include <paludis/metadata_key.hh>
+#include <paludis/additional_package_dep_spec_requirement.hh>
#include <functional>
#include <algorithm>
#include <list>
@@ -742,17 +743,6 @@ PackageDepSpec::need_keys_added() const
{
}
-AdditionalPackageDepSpecRequirement::~AdditionalPackageDepSpecRequirement()
-{
-}
-
-std::ostream &
-paludis::operator<< (std::ostream & s, const AdditionalPackageDepSpecRequirement & a)
-{
- s << a.as_raw_string();
- return s;
-}
-
PartiallyMadePackageDepSpec
paludis::make_package_dep_spec(const PartiallyMadePackageDepSpecOptions & o)
{
@@ -1228,9 +1218,6 @@ PartiallyMadePackageDepSpec::to_package_dep_spec() const
template class LabelsDepSpec<URILabel>;
template class LabelsDepSpec<DependenciesLabel>;
-template class Sequence<std::shared_ptr<const AdditionalPackageDepSpecRequirement> >;
-template class WrappedForwardIterator<AdditionalPackageDepSpecRequirements::ConstIteratorTag, const std::shared_ptr<const AdditionalPackageDepSpecRequirement> >;
-
template class Cloneable<DepSpec>;
template class Pimp<ConditionalDepSpec>;
template class CloneUsingThis<DepSpec, ConditionalDepSpec>;
diff --git a/paludis/dep_spec.hh b/paludis/dep_spec.hh
index 587ea18..610b6cc 100644
--- a/paludis/dep_spec.hh
+++ b/paludis/dep_spec.hh
@@ -39,6 +39,7 @@
#include <paludis/slot_requirement-fwd.hh>
#include <paludis/package_id-fwd.hh>
#include <paludis/environment-fwd.hh>
+#include <paludis/additional_package_dep_spec_requirement-fwd.hh>
#include <memory>
#include <functional>
@@ -283,65 +284,6 @@ namespace paludis
std::string text() const;
};
- /**
- * An additional requirement for a PackageDepSpec.
- *
- * \since 0.26
- * \ingroup g_dep_spec
- */
- class PALUDIS_VISIBLE AdditionalPackageDepSpecRequirement
- {
- public:
- AdditionalPackageDepSpecRequirement() = default;
- virtual ~AdditionalPackageDepSpecRequirement();
-
- AdditionalPackageDepSpecRequirement(const AdditionalPackageDepSpecRequirement &) = delete;
- AdditionalPackageDepSpecRequirement & operator= (const AdditionalPackageDepSpecRequirement &) = delete;
-
- /**
- * Is our requirement met for a given PackageID?
- *
- * The string in the return type might be a description of why the
- * requirement was not met. Sometimes better messages can be given
- * than simply the return value of as_human_string() when the ID to
- * be matched is known. If the bool is false, the string is
- * meaningless.
- *
- * \since 0.44 returns pair<bool, std::string>
- * \since 0.51 takes optional ChangedChoices arguments
- */
- virtual const std::pair<bool, std::string> requirement_met(
- const Environment * const,
- const ChangedChoices * const maybe_changes_to_owner,
- const PackageID &,
- const ChangedChoices * const maybe_changes_to_target) const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
-
- /**
- * If possible, indicate which choices to change to make our
- * requirement met for a particular ID.
- *
- * Verifies that the ID has the appropriate choice, and that that
- * choice isn't locked.
- *
- * \since 0.51
- */
- virtual bool accumulate_changes_to_make_met(
- const Environment * const,
- const ChangedChoices * const maybe_changes_to_owner,
- const std::shared_ptr<const PackageID> &,
- ChangedChoices &) const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
-
- /**
- * Return a human readable string representation of ourself.
- */
- virtual const std::string as_human_string() const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
-
- /**
- * Return a raw string representation of ourself.
- */
- virtual const std::string as_raw_string() const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
- };
-
namespace n
{
typedef Name<struct include_masked_name> include_masked;
diff --git a/paludis/elike_use_requirement-fwd.hh b/paludis/elike_use_requirement-fwd.hh
index 47abd0e..8df88aa 100644
--- a/paludis/elike_use_requirement-fwd.hh
+++ b/paludis/elike_use_requirement-fwd.hh
@@ -1,7 +1,7 @@
/* vim: set sw=4 sts=4 et foldmethod=syntax : */
/*
- * Copyright (c) 2008 Ciaran McCreesh
+ * Copyright (c) 2008, 2010 Ciaran McCreesh
*
* This file is part of the Paludis package manager. Paludis is free software;
* you can redistribute it and/or modify it under the terms of the GNU General
@@ -24,9 +24,10 @@
#include <paludis/util/options-fwd.hh>
#include <paludis/package_id-fwd.hh>
#include <paludis/dep_spec-fwd.hh>
+#include <paludis/additional_package_dep_spec_requirement-fwd.hh>
#include <iosfwd>
#include <string>
-#include <functional>
+#include <memory>
namespace paludis
{
diff --git a/paludis/elike_use_requirement.cc b/paludis/elike_use_requirement.cc
index 0b810ea..12c4b45 100644
--- a/paludis/elike_use_requirement.cc
+++ b/paludis/elike_use_requirement.cc
@@ -32,6 +32,7 @@
#include <paludis/metadata_key.hh>
#include <paludis/choice.hh>
#include <paludis/changed_choices.hh>
+#include <paludis/additional_package_dep_spec_requirement.hh>
#include <vector>
#include <functional>
#include <algorithm>
diff --git a/paludis/elike_use_requirement_TEST.cc b/paludis/elike_use_requirement_TEST.cc
index fa5afb4..4ee3fcb 100644
--- a/paludis/elike_use_requirement_TEST.cc
+++ b/paludis/elike_use_requirement_TEST.cc
@@ -26,6 +26,7 @@
#include <paludis/util/tokeniser.hh>
#include <paludis/util/make_named_values.hh>
#include <paludis/choice.hh>
+#include <paludis/additional_package_dep_spec_requirement.hh>
#include <test/test_framework.hh>
#include <test/test_runner.hh>
#include <list>
diff --git a/paludis/files.m4 b/paludis/files.m4
index 2046c88..b6a9f1b 100644
--- a/paludis/files.m4
+++ b/paludis/files.m4
@@ -8,107 +8,108 @@ dnl the base filename with no extension; later parameters can be `hh', `cc',
dnl `test', `impl', `testscript'. Note that there isn't much error checking done
dnl on this file at present...
-add(`about', `hh', `test')
-add(`about_metadata', `hh', `cc', `fwd')
-add(`action', `hh', `cc', `fwd', `se')
-add(`action_names', `hh', `cc', `fwd')
-add(`broken_linkage_configuration', `hh', `cc', `test', `testscript')
-add(`broken_linkage_finder', `hh', `cc')
-add(`buffer_output_manager', `hh', `cc', `fwd')
-add(`changed_choices', `hh', `cc', `fwd')
-add(`choice', `hh', `cc', `fwd')
-add(`comma_separated_dep_parser', `hh', `cc', `test')
-add(`comma_separated_dep_printer', `hh', `cc')
-add(`common_sets', `hh', `cc', `fwd')
-add(`contents', `hh', `cc', `fwd')
-add(`create_output_manager_info', `hh', `cc', `fwd', `se')
-add(`dep_label', `hh', `cc', `fwd')
-add(`dep_list', `hh', `cc', `fwd', `test')
-add(`dep_list_exceptions', `hh', `cc')
-add(`dep_list_options', `hh', `cc', `se')
-add(`dep_spec', `hh', `cc', `test', `fwd', `se')
-add(`dep_spec_flattener', `hh', `cc')
-add(`dep_tag', `hh', `cc', `fwd')
-add(`distribution', `hh', `cc', `impl', `fwd')
-add(`elf_linkage_checker', `hh', `cc')
-add(`elike_annotations', `hh', `cc', `fwd')
-add(`elike_choices', `hh', `cc', `fwd')
-add(`elike_dep_parser', `hh', `cc', `fwd', `test')
-add(`elike_conditional_dep_spec', `hh', `cc', `fwd')
-add(`elike_package_dep_spec', `hh', `cc', `fwd', `se')
-add(`elike_slot_requirement', `hh', `cc', `fwd')
-add(`elike_use_requirement', `hh', `cc', `fwd', `se', `test')
-add(`environment', `hh', `fwd', `cc')
-add(`environment_factory', `hh', `fwd', `cc')
-add(`environment_implementation', `hh', `cc')
-add(`file_output_manager', `hh', `cc', `fwd')
-add(`filter', `hh', `cc', `fwd', `test')
-add(`filter_handler', `hh', `cc', `fwd')
-add(`filtered_generator', `hh', `cc', `fwd', `test')
-add(`find_unused_packages_task', `hh', `cc')
-add(`format_messages_output_manager', `hh', `fwd', `cc')
-add(`formatter', `hh', `fwd', `cc')
-add(`forward_at_finish_output_manager', `hh', `fwd', `cc')
-add(`fs_merger', `hh', `cc', `fwd', `se', `test', `testscript')
-add(`fuzzy_finder', `hh', `cc', `test')
-add(`generator', `hh', `cc', `fwd', `test')
-add(`generator_handler', `hh', `cc', `fwd')
-add(`handled_information', `hh', `fwd', `cc')
-add(`hook', `hh', `cc', `fwd', `se')
-add(`hooker', `hh', `cc', `test', `testscript')
-add(`install_task', `hh', `cc', `se')
-add(`ipc_output_manager', `hh', `cc', `fwd')
-add(`libtool_linkage_checker', `hh', `cc')
-add(`linkage_checker', `hh', `cc')
-add(`literal_metadata_key', `hh', `cc')
-add(`mask', `hh', `cc', `fwd', `se')
-add(`match_package', `hh', `cc', `se', `fwd')
-add(`merger', `hh', `cc', `se', `fwd')
-add(`merger_entry_type', `hh', `cc', `se')
-add(`metadata_key', `hh', `cc', `se', `fwd')
-add(`metadata_key_holder', `hh', `cc', `fwd')
-add(`name', `hh', `cc', `fwd', `test')
-add(`ndbam', `hh', `cc', `fwd')
-add(`ndbam_merger', `hh', `cc')
-add(`ndbam_unmerger', `hh', `cc')
-add(`notifier_callback', `hh', `cc', `fwd')
-add(`output_manager', `hh', `fwd', `cc', `se')
-add(`output_manager_factory', `hh', `fwd', `cc')
-add(`output_manager_from_environment', `hh', `fwd', `cc')
-add(`override_functions', `hh', `cc')
-add(`package_database', `hh', `cc', `fwd', `test')
-add(`package_dep_spec_properties', `hh', `cc', `fwd')
-add(`package_id', `hh', `cc', `fwd', `se')
-add(`paludis', `hh')
-add(`paludislike_options_conf', `hh', `cc', `fwd')
-add(`query_visitor', `hh', `cc')
-add(`range_rewriter', `hh', `cc', `test')
-add(`report_task', `hh', `cc')
-add(`repository', `hh', `fwd', `cc')
-add(`repository_factory', `hh', `fwd', `cc')
-add(`repository_name_cache', `hh', `cc', `test', `testscript')
-add(`selection', `hh', `cc', `fwd', `test')
-add(`selection_cache', `hh', `cc', `fwd')
-add(`selection_handler', `hh', `cc', `fwd')
-add(`serialise', `hh', `cc', `fwd', `impl')
-add(`set_file', `hh', `cc', `se', `test', `testscript')
-add(`show_suggest_visitor', `hh', `cc')
-add(`slot_requirement', `hh', `fwd', `cc')
-add(`spec_tree', `hh', `fwd', `cc')
-add(`standard_output_manager', `hh', `cc', `fwd')
-add(`stringify_formatter', `hh', `cc', `fwd', `impl', `test')
-add(`stripper', `hh', `cc', `fwd', `test', `testscript')
-add(`syncer', `hh', `cc')
-add(`sync_task', `hh', `cc')
-add(`tar_merger', `hh', `cc', `fwd', `test', `testscript', `se')
-add(`tasks_exceptions', `hh', `cc')
-add(`tee_output_manager', `hh', `cc', `fwd')
-add(`unchoices_key', `hh', `cc', `fwd')
-add(`uninstall_list', `hh', `cc', `se', `test')
-add(`uninstall_task', `hh', `cc')
-add(`unmerger', `hh', `cc')
-add(`user_dep_spec', `hh', `cc', `se', `fwd', `test')
-add(`version_operator', `hh', `cc', `fwd', `se', `test')
-add(`version_requirements', `hh', `cc', `fwd')
-add(`version_spec', `hh', `cc', `se', `fwd', `test')
+add(`about', `hh', `test')
+add(`about_metadata', `hh', `cc', `fwd')
+add(`action', `hh', `cc', `fwd', `se')
+add(`action_names', `hh', `cc', `fwd')
+add(`additional_package_dep_spec_requirement', `hh', `cc', `fwd')
+add(`broken_linkage_configuration', `hh', `cc', `test', `testscript')
+add(`broken_linkage_finder', `hh', `cc')
+add(`buffer_output_manager', `hh', `cc', `fwd')
+add(`changed_choices', `hh', `cc', `fwd')
+add(`choice', `hh', `cc', `fwd')
+add(`comma_separated_dep_parser', `hh', `cc', `test')
+add(`comma_separated_dep_printer', `hh', `cc')
+add(`common_sets', `hh', `cc', `fwd')
+add(`contents', `hh', `cc', `fwd')
+add(`create_output_manager_info', `hh', `cc', `fwd', `se')
+add(`dep_label', `hh', `cc', `fwd')
+add(`dep_list', `hh', `cc', `fwd', `test')
+add(`dep_list_exceptions', `hh', `cc')
+add(`dep_list_options', `hh', `cc', `se')
+add(`dep_spec', `hh', `cc', `test', `fwd', `se')
+add(`dep_spec_flattener', `hh', `cc')
+add(`dep_tag', `hh', `cc', `fwd')
+add(`distribution', `hh', `cc', `impl', `fwd')
+add(`elf_linkage_checker', `hh', `cc')
+add(`elike_annotations', `hh', `cc', `fwd')
+add(`elike_choices', `hh', `cc', `fwd')
+add(`elike_dep_parser', `hh', `cc', `fwd', `test')
+add(`elike_conditional_dep_spec', `hh', `cc', `fwd')
+add(`elike_package_dep_spec', `hh', `cc', `fwd', `se')
+add(`elike_slot_requirement', `hh', `cc', `fwd')
+add(`elike_use_requirement', `hh', `cc', `fwd', `se', `test')
+add(`environment', `hh', `fwd', `cc')
+add(`environment_factory', `hh', `fwd', `cc')
+add(`environment_implementation', `hh', `cc')
+add(`file_output_manager', `hh', `cc', `fwd')
+add(`filter', `hh', `cc', `fwd', `test')
+add(`filter_handler', `hh', `cc', `fwd')
+add(`filtered_generator', `hh', `cc', `fwd', `test')
+add(`find_unused_packages_task', `hh', `cc')
+add(`format_messages_output_manager', `hh', `fwd', `cc')
+add(`formatter', `hh', `fwd', `cc')
+add(`forward_at_finish_output_manager', `hh', `fwd', `cc')
+add(`fs_merger', `hh', `cc', `fwd', `se', `test', `testscript')
+add(`fuzzy_finder', `hh', `cc', `test')
+add(`generator', `hh', `cc', `fwd', `test')
+add(`generator_handler', `hh', `cc', `fwd')
+add(`handled_information', `hh', `fwd', `cc')
+add(`hook', `hh', `cc', `fwd', `se')
+add(`hooker', `hh', `cc', `test', `testscript')
+add(`install_task', `hh', `cc', `se')
+add(`ipc_output_manager', `hh', `cc', `fwd')
+add(`libtool_linkage_checker', `hh', `cc')
+add(`linkage_checker', `hh', `cc')
+add(`literal_metadata_key', `hh', `cc')
+add(`mask', `hh', `cc', `fwd', `se')
+add(`match_package', `hh', `cc', `se', `fwd')
+add(`merger', `hh', `cc', `se', `fwd')
+add(`merger_entry_type', `hh', `cc', `se')
+add(`metadata_key', `hh', `cc', `se', `fwd')
+add(`metadata_key_holder', `hh', `cc', `fwd')
+add(`name', `hh', `cc', `fwd', `test')
+add(`ndbam', `hh', `cc', `fwd')
+add(`ndbam_merger', `hh', `cc')
+add(`ndbam_unmerger', `hh', `cc')
+add(`notifier_callback', `hh', `cc', `fwd')
+add(`output_manager', `hh', `fwd', `cc', `se')
+add(`output_manager_factory', `hh', `fwd', `cc')
+add(`output_manager_from_environment', `hh', `fwd', `cc')
+add(`override_functions', `hh', `cc')
+add(`package_database', `hh', `cc', `fwd', `test')
+add(`package_dep_spec_properties', `hh', `cc', `fwd')
+add(`package_id', `hh', `cc', `fwd', `se')
+add(`paludis', `hh')
+add(`paludislike_options_conf', `hh', `cc', `fwd')
+add(`query_visitor', `hh', `cc')
+add(`range_rewriter', `hh', `cc', `test')
+add(`report_task', `hh', `cc')
+add(`repository', `hh', `fwd', `cc')
+add(`repository_factory', `hh', `fwd', `cc')
+add(`repository_name_cache', `hh', `cc', `test', `testscript')
+add(`selection', `hh', `cc', `fwd', `test')
+add(`selection_cache', `hh', `cc', `fwd')
+add(`selection_handler', `hh', `cc', `fwd')
+add(`serialise', `hh', `cc', `fwd', `impl')
+add(`set_file', `hh', `cc', `se', `test', `testscript')
+add(`show_suggest_visitor', `hh', `cc')
+add(`slot_requirement', `hh', `fwd', `cc')
+add(`spec_tree', `hh', `fwd', `cc')
+add(`standard_output_manager', `hh', `cc', `fwd')
+add(`stringify_formatter', `hh', `cc', `fwd', `impl', `test')
+add(`stripper', `hh', `cc', `fwd', `test', `testscript')
+add(`syncer', `hh', `cc')
+add(`sync_task', `hh', `cc')
+add(`tar_merger', `hh', `cc', `fwd', `test', `testscript', `se')
+add(`tasks_exceptions', `hh', `cc')
+add(`tee_output_manager', `hh', `cc', `fwd')
+add(`unchoices_key', `hh', `cc', `fwd')
+add(`uninstall_list', `hh', `cc', `se', `test')
+add(`uninstall_task', `hh', `cc')
+add(`unmerger', `hh', `cc')
+add(`user_dep_spec', `hh', `cc', `se', `fwd', `test')
+add(`version_operator', `hh', `cc', `fwd', `se', `test')
+add(`version_requirements', `hh', `cc', `fwd')
+add(`version_spec', `hh', `cc', `se', `fwd', `test')
diff --git a/paludis/match_package.cc b/paludis/match_package.cc
index c56056f..429f680 100644
--- a/paludis/match_package.cc
+++ b/paludis/match_package.cc
@@ -33,6 +33,7 @@
#include <paludis/util/sequence.hh>
#include <paludis/action.hh>
#include <paludis/repository.hh>
+#include <paludis/additional_package_dep_spec_requirement.hh>
#include <paludis/util/indirect_iterator-impl.hh>
diff --git a/paludis/resolver/decider.cc b/paludis/resolver/decider.cc
index 9d861cc..cab8ce6 100644
--- a/paludis/resolver/decider.cc
+++ b/paludis/resolver/decider.cc
@@ -62,6 +62,7 @@
#include <paludis/dep_spec_flattener.hh>
#include <paludis/package_id.hh>
#include <paludis/changed_choices.hh>
+#include <paludis/additional_package_dep_spec_requirement.hh>
#include <paludis/util/pimp-impl.hh>
diff --git a/paludis/user_dep_spec.hh b/paludis/user_dep_spec.hh
index b95dd14..d248e6a 100644
--- a/paludis/user_dep_spec.hh
+++ b/paludis/user_dep_spec.hh
@@ -24,6 +24,7 @@
#include <paludis/dep_spec.hh>
#include <paludis/slot_requirement.hh>
#include <paludis/filter.hh>
+#include <paludis/additional_package_dep_spec_requirement.hh>
#include <paludis/util/pimp.hh>
namespace paludis