Blob Blame History Raw
Name:           libdasm
Version:        1.6
Summary:        Simple x86 disassembly library
%global         baserelease     7
%if 0%{?rhel}
# Group needed for EPEL
Group:          Applications/System
%endif


%global         common_description %{expand:
libdasm is a C-library that tries to provide simple and convenient
way to disassemble Intel x86 raw op-code bytes (machine code).
It can parse and print out op-codes in AT&T and Intel syntax.

The op-codes are based on IA-32 Intel Architecture Software Developers
Manual Volume 2: Instruction Set Reference, order number 243667,
year 2004.  Non-Intel instructions are not supported at the moment (also,
non-Intel but Intel-compatible CPU extensions, like AMD 3DNow! are
not supported).}


# Do not build with python3 by default for now
# Module can be compiled but it doesn't load properly to python3
%bcond_with  python3

%if ( 0%{?fedora} && 0%{?fedora} <= 30 ) || ( 0%{?rhel} && 0%{?rhel} <= 7 )
%bcond_without  python2
%else
%bcond_with     python2
%endif


# TODO - add ruby subpackage

# Current code being maintained on github by Joshua Pereyda
# version 1.6 was released with the BSD license
# Original author Jarkko Turkulainen <jt () klake org> put the code into public domain
# http://www.klake.org/~jt/misc/libdasm-1.4.tar.gz -> https://web.archive.org/web/20060718012748/http://www.klake.org/~jt/misc/libdasm-1.4.tar.gz
# http://www.klake.org/~jt/misc/libdasm-1.5.tar.gz -> https://web.archive.org/web/20120119123445/http://www.klake.org/~jt/misc/libdasm-1.5.tar.gz
# https://labsblog.f-secure.com/author/turkja/
# http://en.gravatar.com/turkja
# There was another fork on https://code.google.com/archive/p/libdasm/ by Ange Albertini
License:        BSD
URL:            https://github.com/jtpereyda/libdasm


# Other resources:
#               https://github.com/jtpereyda/libdasm
#               https://code.google.com/archive/p/libdasm/
#               https://github.com/axcheron/libdasm
#               https://github.com/axcheron/pydasm
#               https://github.com/nkzxw/libdasm
#               https://github.com/whb224117/libdasm
#               https://github.com/Starwarsfan2099/PyDasm-3.5
#               https://github.com/gdbinit/pydbg64/tree/master/libdasm-beta
#               https://github.com/gunmetalbackupgooglecode/libdasm

# Fix up the Makefiles to remove upstream compilation flags, install to destdir
# https://github.com/jtpereyda/libdasm/issues/6
# https://github.com/jtpereyda/libdasm/pull/5
# Patch0:       libdasm-00_destdir.patch

# Do not ask for unneeded write access in "das"
# https://github.com/jtpereyda/libdasm/pull/9
# https://github.com/jtpereyda/libdasm/commit/3af940dc771132e3cafe275bb6eeaba2b55937cc.patch
Patch1:         libdasm-01_readonly.patch

# Build the oython only explicitly
Patch2:         libdasm-02_explicit_python.patch

# Make das.py example compatible with both pytho2 and python3
Patch3:         libdasm-03_das_futurize.patch

%if 0%{?rhel} && 0%{?rhel} <= 6
%{!?__python2:        %global __python2 /usr/bin/python2}
%{!?python2_sitelib:  %global python2_sitelib %(%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%{!?python2_sitearch: %global python2_sitearch %(%{__python2} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%endif


# we don't want to provide private python extension libs
%{?filter_setup:
%filter_provides_in %{python2_sitearch}/.*\.so$
%filter_setup
}


%global         gituser         jtpereyda
%global         gitname         libdasm
# Current version
%global         gitdate         20180330
%global         commit          b9233ccf35dce894ac0188e5830fa4346873a1f6
%global         shortcommit     %(c=%{commit}; echo ${c:0:7})


# Build source is tarball release=1 or git commit=0
%global         build_release    1

%if 0%{?build_release}  > 0
# Build from the targball release
Release:        %{baserelease}%{?dist}
Source0:        https://github.com/%{gituser}/%{gitname}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz

%else
# Build from the git commit snapshot
# Release is not starting with 0 as usual, because the next release will be 1.6
Release:        %{baserelease}.%{gitdate}git%{shortcommit}%{?dist}
Source0:        https://github.com/%{gituser}/%{gitname}/archive/%{commit}/%{name}-%{version}-%{shortcommit}.tar.gz
%endif #build_release



BuildRequires:  pkgconfig
BuildRequires:  automake
BuildRequires:  libtool
BuildRequires:  gettext-devel


%if 0%{?with_python2}
BuildRequires:  python2-devel
BuildRequires:  python2-setuptools
%endif

%if 0%{?with_python3}
BuildRequires:  python%{python3_pkgversion}-devel
BuildRequires:  python%{python3_pkgversion}-setuptools
%endif

%description 
%{common_description}


%package        devel
Summary:        Development files for %{name}
Requires:       %{name}%{?_isa} = %{version}-%{release}

%description    devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.
%{common_description}


%if 0%{?with_python2}
# We use here the upstream name for the python module - pydasm
%package        -n python2-pydasm
Summary:        Python2 module for disassembling x86 machine code
Requires:       %{name}%{?_isa} = %{version}-%{release}
%{?python_provide:%python_provide python2-%{name}}
%{?python_provide:%python_provide python2-pydasm}


%description    -n python2-pydasm
The python2 pydasm module for disassembling x86 machine code.
It is a python wrapper for libdasm.
%{common_description}

%endif



%if 0%{?with_python3}
%package        -n python%{python3_pkgversion}-pydasm
Summary:        Python module for disassembling x86 machine code
Requires:       %{name}%{?_isa} = %{version}-%{release}
%{?python_provide:%python_provide python%{python3_pkgversion}-pydasm}


%description    -n python%{python3_pkgversion}-pydasm
The python%{python3_pkgversion} pydasm module for disassembling x86 machine code.
It is a python wrapper for libdasm.
%{common_description}

%endif




%prep
# ======================= prep =======================================
%if 0%{?build_release} > 0
# Build from tarball release version
%autosetup -p 1 -n %{gitname}-%{version}

%else
# Build from git commit
%autosetup -p 1 -n %{gitname}-%{commit}
%endif


# Remove prebuilt Win32 DLLs from the tarball:
rm -rf bin

# Build explicitly for python2
sed -i -e 's|python |python2 |g;' pydasm/Makefile

# Do not build the python subpackage by default but build explicitly
sed -i -e 's|make -C pydasm|# make -C pydasm|' Makefile



%build
make %{?_smp_mflags} CFLAGS="%{optflags} -fPIC" PREFIX=/usr LIBDIR=%{_libdir} BINDIR=%{_bindir}

%if 0%{?with_python2}
pushd pydasm
%py2_build
popd
%endif


%if 0%{?with_python3}
pushd pydasm
%py3_build
popd
%endif



%install
make install DESTDIR=%{buildroot} PREFIX=/usr LIBDIR=%{_libdir} BINDIR=%{_bindir}

%if 0%{?with_python2}
# do the python2 install explicitly
#Use explicitly versioned python2 shabang
sed -i -e 's|^#!/usr/bin/.*|#!/usr/bin/python2|;' pydasm/das.py
pushd pydasm
%py2_install
install -m 755 -p -D das.py "%{buildroot}%{_bindir}/das-%{python2_version}"
pushd %{buildroot}%{_bindir}
ln -s "das-%{python2_version}" "das-2"
popd
popd
%endif


%if 0%{?with_python3}
# do the python3 install explicitly
#Use explicitly versioned python3 shabang
sed -i -e 's|^#!/usr/bin/.*|#!/usr/bin/python3|;' pydasm/das.py
pushd pydasm
%py3_install
install -m 755 -p -D das.py "%{buildroot}%{_bindir}/das-%{python3_version}"
pushd %{buildroot}%{_bindir}
ln -s "das-%{python3_version}" "das-3"
popd
popd
%endif


pushd %{buildroot}%{_bindir}
%if (0%{?fedora} && 0%{?fedora} <= 30 ) || ( 0%{?rhel} && 0%{?rhel} <= 7 )
    #Link to python2 as default on fedora up to 30 and rhel up to 7
    ln -s "das-2" "das.py"
%else
    #Link to python3 as default on fedora 31+ and rhel8+ and everything else
    ln -s "das-3" "das.py"
%endif
popd

find %{buildroot} -name '*.la' -exec rm -f {} ';'
find %{buildroot} -name '*.a' -exec rm -f {} ';'


%ldconfig_scriptlets


%files
%doc HISTORY.txt LIB.txt README.txt TODO.txt
%{_libdir}/*.so.*
%{_bindir}/das

%files devel
%{_includedir}/*
%{_libdir}/*.so

%if 0%{?with_python2}
%files -n python2-pydasm
%{python2_sitearch}/*
%{_bindir}/das-%{python2_version}
%{_bindir}/das-2
%if (0%{?fedora} && 0%{?fedora} <= 30 ) || ( 0%{?rhel} && 0%{?rhel} <= 7 )
%{_bindir}/das.py
%endif
%endif

%if 0%{?with_python3}
%files -n python%{python3_pkgversion}-pydasm
%{python3_sitearch}/pydasm*
%{_bindir}/das-%{python3_version}
%{_bindir}/das-3
%if (0%{?fedora} && 0%{?fedora} >= 31 ) || ( 0%{?rhel} && 0%{?rhel} >= 8 )
%{_bindir}/das.py
%endif
%endif


%changelog
* Wed Oct 23 2019 Michal Ambroz <rebus at, seznam.cz> - 1.6-7
- remove python2 package for fc31+ rhel8+
- add python3 support

* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild

* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild

* Tue Jul 17 2018 Miro HronĨok <mhroncok@redhat.com> - 1.6-4
- Update Python macros to new packaging standards
  (See https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_package)
- explicit build with python2

* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild

* Tue Apr 17 2018 Michal Ambroz <rebus at, seznam.cz> - 1.6-2
- patch das to not request write permissions

* Sun Apr 01 2018 Michal Ambroz <rebus at, seznam.cz> - 1.6-1
- switch to the github release of 1.6

* Fri Mar 30 2018 Michal Ambroz <rebus at, seznam.cz> - 1.5-6.20180328gitc315f8d
- switch to github snapshot with BSD license
- use ldconfig_scriptlets instead of ldconfig in post/postun

* Sun Mar 25 2018 Michal Ambroz <rebus at, seznam.cz> - 1.5-5.20151201gitc1afd03
- switch to github snapshot

* Sun Mar 04 2018 Michal Ambroz <rebus at, seznam.cz> - 1.5-4
- remove *.a files

* Sat Jul 14 2012 Michal Ambroz <rebus at, seznam.cz> - 1.5-3
- build for Fedora 17
- patch the makefiles to fix issue with soname, destdir

* Fri Jun  5 2009 David Malcolm <dmalcolm@redhat.com> - 1.5-2
- add python-devel to build requirements

* Fri May  8 2009 David Malcolm <dmalcolm@redhat.com> - 1.5-1
- initial packaging