diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8d59864
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/4.2.0.tar.gz
diff --git a/.setools.metadata b/.setools.metadata
new file mode 100644
index 0000000..1bb55ad
--- /dev/null
+++ b/.setools.metadata
@@ -0,0 +1 @@
+3de773047e99ed28cba8a86c4a9cf9c509753796 SOURCES/4.2.0.tar.gz
diff --git a/SOURCES/1001-Do-not-use-Werror-during-build.patch b/SOURCES/1001-Do-not-use-Werror-during-build.patch
new file mode 100644
index 0000000..9efb440
--- /dev/null
+++ b/SOURCES/1001-Do-not-use-Werror-during-build.patch
@@ -0,0 +1,49 @@
+From 617c3ae83c1c72ead627a57e1529724c62df807f Mon Sep 17 00:00:00 2001
+From: rpm-build <rpm-build>
+Date: Thu, 23 Feb 2017 08:17:07 +0100
+Subject: [PATCH 1/2] Do not use -Werror during build
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There are new warnings when setools are built with gcc 7 therefore we
+want to suppress -Werror for now
+
+Fixes:
+libqpol/policy_extend.c: In function ‘policy_extend’:
+libqpol/policy_extend.c:161:27: error: ‘%04zd’ directive output may be truncated writing between 4 and 10 bytes into a region of size 5 [-Werror=format-truncation=]
+    snprintf(buff, 9, "@ttr%04zd", i + 1);
+                           ^~~~~
+libqpol/policy_extend.c:161:22: note: directive argument in the range [1, 4294967295]
+    snprintf(buff, 9, "@ttr%04zd", i + 1);
+                      ^~~~~~~~~~~
+In file included from /usr/include/stdio.h:939:0,
+                 from /usr/include/sepol/policydb/policydb.h:53,
+                 from libqpol/policy_extend.c:29:
+/usr/include/bits/stdio2.h:64:10: note: ‘__builtin___snprintf_chk’ output between 9 and 15 bytes into a destination of size 9
+   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
+          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        __bos (__s), __fmt, __va_arg_pack ());
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+cc1: all warnings being treated as errors
+error: command 'gcc' failed with exit status 1
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 2ca44c9..9319bf6 100644
+--- a/setup.py
++++ b/setup.py
+@@ -105,7 +105,7 @@ ext_py_mods = [Extension('setools.policyrep', ['setools/policyrep.pyx'],
+                          libraries=['selinux', 'sepol'],
+                          library_dirs=lib_dirs,
+                          define_macros=macros,
+-                         extra_compile_args=['-Werror', '-Wextra',
++                         extra_compile_args=['-Wextra',
+                                              '-Waggregate-return',
+                                              '-Wfloat-equal',
+                                              '-Wformat', '-Wformat=2',
+-- 
+2.9.3
+
diff --git a/SOURCES/1002-Do-not-export-use-setools.InfoFlowAnalysis-and-setoo.patch b/SOURCES/1002-Do-not-export-use-setools.InfoFlowAnalysis-and-setoo.patch
new file mode 100644
index 0000000..24eab0e
--- /dev/null
+++ b/SOURCES/1002-Do-not-export-use-setools.InfoFlowAnalysis-and-setoo.patch
@@ -0,0 +1,140 @@
+From 2512c3ba608077db3a5e0286b976fadc8a04a5c4 Mon Sep 17 00:00:00 2001
+From: rpm-build <rpm-build>
+Date: Thu, 23 Feb 2017 08:17:07 +0100
+Subject: [PATCH 2/2] Do not export/use setools.InfoFlowAnalysis and
+ setools.DomainTransitionAnalysis
+
+dta and infoflow modules require networkx which brings lot of dependencies.
+These dependencies are not necessary for setools module itself as it's
+used in policycoreutils.
+
+Therefore it's better to use setools.infoflow.InfoFlowAnalysis and
+setools.dta.DomainTransitionAnalysis and let the package containing
+sedta and seinfoflow to require python3-networkx
+---
+ sedta                       | 4 ++--
+ seinfoflow                  | 4 ++--
+ setools/__init__.py         | 4 ++--
+ setoolsgui/apol/dta.py      | 2 +-
+ setoolsgui/apol/infoflow.py | 2 +-
+ tests/dta.py                | 2 +-
+ tests/infoflow.py           | 2 +-
+ 7 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/sedta b/sedta
+index 10cf43a..b75b4e1 100755
+--- a/sedta
++++ b/sedta
+@@ -21,7 +21,7 @@ import sys
+ import argparse
+ import logging
+ 
+-import setools
++import setools.dta
+ 
+ 
+ def print_transition(trans):
+@@ -111,7 +111,7 @@ else:
+ 
+ try:
+     p = setools.SELinuxPolicy(args.policy)
+-    g = setools.DomainTransitionAnalysis(p, reverse=args.reverse, exclude=args.exclude)
++    g = setools.dta.DomainTransitionAnalysis(p, reverse=args.reverse, exclude=args.exclude)
+ 
+     if args.shortest_path or args.all_paths:
+         if args.shortest_path:
+diff --git a/seinfoflow b/seinfoflow
+index 3ec05ca..32a9a3e 100755
+--- a/seinfoflow
++++ b/seinfoflow
+@@ -17,7 +17,7 @@
+ # along with SETools.  If not, see <http://www.gnu.org/licenses/>.
+ #
+ 
+-import setools
++import setools.infoflow
+ import argparse
+ import sys
+ import logging
+@@ -78,7 +78,7 @@ else:
+ try:
+     p = setools.SELinuxPolicy(args.policy)
+     m = setools.PermissionMap(args.map)
+-    g = setools.InfoFlowAnalysis(p, m, min_weight=args.min_weight, exclude=args.exclude)
++    g = setools.infoflow.InfoFlowAnalysis(p, m, min_weight=args.min_weight, exclude=args.exclude)
+ 
+     if args.shortest_path or args.all_paths:
+         if args.shortest_path:
+diff --git a/setools/__init__.py b/setools/__init__.py
+index 7b70f5e..020be31 100644
+--- a/setools/__init__.py
++++ b/setools/__init__.py
+@@ -73,11 +73,11 @@ from .pcideviceconquery import PcideviceconQuery
+ from .devicetreeconquery import DevicetreeconQuery
+ 
+ # Information Flow Analysis
+-from .infoflow import InfoFlowAnalysis
++# from .infoflow import InfoFlowAnalysis
+ from .permmap import PermissionMap
+ 
+ # Domain Transition Analysis
+-from .dta import DomainTransitionAnalysis
++# from .dta import DomainTransitionAnalysis
+ 
+ # Policy difference
+ from .diff import PolicyDifference
+diff --git a/setoolsgui/apol/dta.py b/setoolsgui/apol/dta.py
+index 4608b9d..2cde44c 100644
+--- a/setoolsgui/apol/dta.py
++++ b/setoolsgui/apol/dta.py
+@@ -23,7 +23,7 @@ from PyQt5.QtCore import pyqtSignal, Qt, QStringListModel, QThread
+ from PyQt5.QtGui import QPalette, QTextCursor
+ from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, \
+     QTreeWidgetItem
+-from setools import DomainTransitionAnalysis
++from setools.dta import DomainTransitionAnalysis
+ 
+ from ..logtosignal import LogHandlerToSignal
+ from .analysistab import AnalysisTab
+diff --git a/setoolsgui/apol/infoflow.py b/setoolsgui/apol/infoflow.py
+index 7bca299..7fee277 100644
+--- a/setoolsgui/apol/infoflow.py
++++ b/setoolsgui/apol/infoflow.py
+@@ -26,7 +26,7 @@ from PyQt5.QtCore import pyqtSignal, Qt, QStringListModel, QThread
+ from PyQt5.QtGui import QPalette, QTextCursor
+ from PyQt5.QtWidgets import QCompleter, QHeaderView, QMessageBox, QProgressDialog, \
+     QTreeWidgetItem
+-from setools import InfoFlowAnalysis
++from setools.infoflow import InfoFlowAnalysis
+ from setools.exception import UnmappedClass, UnmappedPermission
+ 
+ from ..logtosignal import LogHandlerToSignal
+diff --git a/tests/dta.py b/tests/dta.py
+index a0cc938..177e6fb 100644
+--- a/tests/dta.py
++++ b/tests/dta.py
+@@ -18,7 +18,7 @@
+ import os
+ import unittest
+ 
+-from setools import DomainTransitionAnalysis
++from setools.dta import DomainTransitionAnalysis
+ from setools import TERuletype as TERT
+ from setools.exception import InvalidType
+ from setools.policyrep import Type
+diff --git a/tests/infoflow.py b/tests/infoflow.py
+index aa0e44a..fca2848 100644
+--- a/tests/infoflow.py
++++ b/tests/infoflow.py
+@@ -18,7 +18,7 @@
+ import os
+ import unittest
+ 
+-from setools import InfoFlowAnalysis
++from setools.infoflow import InfoFlowAnalysis
+ from setools import TERuletype as TERT
+ from setools.exception import InvalidType
+ from setools.permmap import PermissionMap
+-- 
+2.9.3
+
diff --git a/SOURCES/apol.desktop b/SOURCES/apol.desktop
new file mode 100644
index 0000000..727733a
--- /dev/null
+++ b/SOURCES/apol.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=SELinux Policy Analysis
+GenericName=SELinux Policy Analysis Tool 
+Comment=This tool can examine, search, and relate policy components and policy rules 
+Icon=apol
+Exec=/usr/bin/apol
+Type=Application
+Terminal=false
+Categories=System;
+X-Desktop-File-Install-Version=0.2
+StartupNotify=true
diff --git a/SOURCES/setools.pam b/SOURCES/setools.pam
new file mode 100644
index 0000000..c7d67e3
--- /dev/null
+++ b/SOURCES/setools.pam
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth		include		config-util
+account		include		config-util
+session		include		config-util
diff --git a/SPECS/setools.spec b/SPECS/setools.spec
new file mode 100644
index 0000000..b1ae824
--- /dev/null
+++ b/SPECS/setools.spec
@@ -0,0 +1,227 @@
+# % global setools_pre_ver rc
+# % global gitver f1e5b20
+
+%global sepol_ver 2.8-1
+%global selinux_ver 2.8-1
+
+%bcond_with     networkx
+
+Name:           setools
+Version:        4.2.0
+Release:        2%{?setools_pre_ver:.%{setools_pre_ver}}%{?dist}
+Summary:        Policy analysis tools for SELinux
+
+License:        GPLv2
+URL:            https://github.com/SELinuxProject/setools/wiki
+Source0:        https://github.com/SELinuxProject/setools/archive/%{version}%{?setools_pre_ver:-%{setools_pre_ver}}.tar.gz
+Source1:        setools.pam
+Source2:        apol.desktop
+
+Patch1001:      1001-Do-not-use-Werror-during-build.patch
+Patch1002:      1002-Do-not-export-use-setools.InfoFlowAnalysis-and-setoo.patch
+
+Obsoletes:      setools < 4.0.0, setools-devel < 4.0.0
+BuildRequires:  flex,  bison
+BuildRequires:  glibc-devel, gcc, git
+BuildRequires:  libsepol-devel >= %{sepol_ver}, libsepol-static >= %{sepol_ver}
+BuildRequires:  qt5-qtbase-devel
+BuildRequires:  swig
+BuildRequires:  python3-Cython
+BuildRequires:  python3-devel
+BuildRequires:  python3-setuptools
+BuildRequires:  libselinux-devel
+
+# BuildArch:      
+Requires:       python3-%{name} = %{version}-%{release}
+
+%description
+SETools is a collection of graphical tools, command-line tools, and
+Python modules designed to facilitate SELinux policy analysis.
+
+%package     console
+Summary:     Policy analysis command-line tools for SELinux
+License:     GPLv2
+Requires:    python3-setools = %{version}-%{release}
+Requires:    libselinux >= %{selinux_ver}
+
+%description console
+SETools is a collection of graphical tools, command-line tools, and
+libraries designed to facilitate SELinux policy analysis.
+
+This package includes the following console tools:
+
+  sediff       Compare two policies to find differences.
+  seinfo       List policy components.
+  sesearch     Search rules (allow, type_transition, etc.)
+
+
+%if %{with networkx}
+%package     console-analyses
+Summary:     Policy analysis command-line tools for SELinux
+License:     GPLv2
+Requires:    python3-setools = %{version}-%{release}
+Requires:    libselinux >= %{selinux_ver}
+Requires:    python3-networkx
+
+%description console-analyses
+SETools is a collection of graphical tools, command-line tools, and
+libraries designed to facilitate SELinux policy analysis.
+
+This package includes the following console tools:
+
+  sedta        Perform domain transition analyses.
+  seinfoflow   Perform information flow analyses.
+%endif
+
+
+%package     -n python3-setools
+Summary:     Policy analysis tools for SELinux  
+Obsoletes:   setools-libs < 4.0.0, setools-libs-tcl
+Recommends:  libselinux-python3
+# Remove before F30
+Provides: %{name}-python3 = %{version}-%{release}
+Provides: %{name}-python3%{?_isa} = %{version}-%{release}
+Obsoletes: %{name}-python3 < %{version}-%{release}
+%if 0%{?rhel} && 0%{?rhel} >= 8
+Requires:    platform-python-setuptools
+%else
+Requires:    python3-setuptools
+%endif
+
+%description -n python3-setools
+SETools is a collection of graphical tools, command-line tools, and
+Python 3 modules designed to facilitate SELinux policy analysis.
+
+
+%if %{with networkx}
+%package     gui
+Summary:     Policy analysis graphical tools for SELinux
+Requires:    python3-setools = %{version}-%{release}
+Requires:    python3-qt5
+Requires:    python3-networkx
+
+%description gui
+SETools is a collection of graphical tools, command-line tools, and
+Python modules designed to facilitate SELinux policy analysis.
+%endif
+
+
+%prep
+%autosetup -p 1 -S git -n setools-%{version}%{?setools_pre_ver:-%{setools_pre_ver}}
+
+
+%build
+# Remove CFLAGS=... for noarch packages (unneeded)
+CFLAGS="%{optflags}" %{__python3} setup.py build
+
+
+%install
+%{__python3} setup.py install --root %{buildroot}
+
+%if %{without networkx}
+rm -f %{buildroot}%{_bindir}/sedta %{buildroot}%{_bindir}/seinfoflow \
+  %{buildroot}%{_mandir}/man1/sedta* %{buildroot}%{_mandir}/man1/sedinfoflow*
+rm -rf %{buildroot}%{_bindir}/apol %{buildroot}%{python3_sitearch}/setoolsgui \
+  %{buildroot}%{_mandir}/man1/apol*
+%endif
+
+%check
+%if %{?_with_check:1}%{!?_with_check:0}
+%{__python3} setup.py test
+%endif
+
+
+%files
+
+%files console
+%{_bindir}/sediff
+%{_bindir}/seinfo
+%{_bindir}/sesearch
+%{_mandir}/man1/sediff*
+%{_mandir}/man1/seinfo*
+%{_mandir}/man1/sesearch*
+
+%if %{with networkx}
+%files console-analyses
+%{_bindir}/sedta
+%{_bindir}/seinfoflow
+%{_mandir}/man1/sedta*
+%{_mandir}/man1/seinfoflow*
+%endif
+
+%files -n python3-setools
+%license COPYING COPYING.GPL COPYING.LGPL
+%{python3_sitearch}/setools
+%{python3_sitearch}/setools-*
+
+%if %{with networkx}
+%files gui
+%{_bindir}/apol
+%{python3_sitearch}/setoolsgui
+%{_mandir}/man1/apol*
+%endif
+
+%changelog
+* Fri Nov 16 2018 Lumír Balhar <lbalhar@redhat.com> - 4.2.0-2
+- Require platform-python-setuptools instead of python3-setuptools
+- Resolves: rhbz#1650548
+
+* Tue Nov 13 2018 Petr Lautrbach <plautrba@redhat.com> - 4.2.0-1
+- SETools 4.2.0 release
+
+* Mon Oct 01 2018 Vit Mojzis <vmojzis@redhat.com> - 4.2.0-0.3.rc
+- Update upstream source to 4.2.0-rc
+
+* Wed Aug 22 2018 Petr Lautrbach <plautrba@redhat.com> - 4.1.1-11
+- Fix SCTP patch - https://github.com/SELinuxProject/setools/issues/9
+
+* Thu Jun 14 2018 Petr Lautrbach <plautrba@redhat.com> - 4.1.1-10
+- Move gui python files to -gui subpackage
+- Do not build gui and console-analyses by default
+
+* Wed Jun  6 2018 Petr Lautrbach <plautrba@redhat.com> - 4.1.1-9
+- Don't build the Python 2 subpackage (#1567362)
+
+* Thu Apr 26 2018 Vit Mojzis <vmojzis@redhat.com> - 4.1.1-8
+- Add support for SCTP protocol (#1568333)
+
+* Thu Apr 19 2018 Iryna Shcherbina <shcherbina.iryna@gmail.com> - 4.1.1-7
+- Update Python 2 dependency declarations to new packaging standards
+  (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
+
+* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.1.1-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Mon Sep 04 2017 Petr Lautrbach <plautrba@redhat.com> - 4.1.1-5
+- setools-python2 requires python2-enum34
+
+* Sun Aug 20 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 4.1.1-4
+- Add Provides for the old name without %%_isa
+
+* Thu Aug 10 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 4.1.1-3
+- Python 2 binary package renamed to python2-setools
+  See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3
+- Python 3 binary package renamed to python3-setools
+
+* Thu Aug 10 2017 Petr Lautrbach <plautrba@redhat.com> - 4.1.1-2
+- bswap_* macros are defined in byteswap.h
+
+* Mon Aug 07 2017 Petr Lautrbach <plautrba@redhat.com> - 4.1.1-1
+- New upstream release
+
+* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 4.1.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 4.1.0-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Mon May 22 2017 Petr Lautrbach <plautrba@redhat.com> - 4.1.0-3
+- setools-python{,3} packages should have a weak dependency on libselinux-python{,3}
+  (#1447747)
+
+* Thu Feb 23 2017 Petr Lautrbach <plautrba@redhat.com> - 4.1.0-2
+- Move python networkx dependency to -gui and -console-analyses
+- Ship sedta and seinfoflow in setools-console-analyses
+
+* Wed Feb 15 2017 Petr Lautrbach <plautrba@redhat.com> - 4.1.0-1
+- New upstream release.