Files
2022-10-31 08:35:31 +11:00

103 lines
3.9 KiB
Tcl

# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
PortGroup github 1.0
github.setup pxb1988 dex2jar 2.1 v
github.tarball_from releases
maintainers nomaintainer
categories java devel
description Tools to work with android .dex and java .class files
long_description dex2jar contains 4 components:\n\
- dex-reader/writer: Read/write the Dalvik Executable (.dex) file.\n\
- d2j-dex2jar: Convert .dex file to .class files (zipped as jar)\n\
- smali/baksmali: disassemble dex to smali files and assemble dex from smali files.\n\
- other tools: d2j-decrypt-string
platforms any
supported_archs noarch
license Apache-2 BSD
use_zip yes
checksums rmd160 9e45f6d0860df2255090d25b0322092cecb85f5c \
sha256 7a9bdf843d43de4d1e94ec2e7b6f55825017b0c4a7ee39ff82660e2493a46f08 \
size 5641797
patchfiles patch-adjust-classpath.diff
post-patch {
# dex2jar does not expect to be installed, but to be run from its source
# directory. Since we put the binaries in $prefix/bin, they fail to find
# their *.jar archives (which would then be expected in $prefix/bin/lib).
# Reinplace $prefix to fix this. For the handling of the other tools, see
# below.
reinplace \
"s#\$APP_HOME/lib/#${prefix}/lib/dex2jar/#g" \
${worksrcpath}/bin/dex-tools
# All other shell scripts in dex2jar contain the same code that
# (incorrectly) discovers the classpath. The only difference is the class
# that is invoked as the entry point at the end. There is also one generic
# wrapper d2j_invoke.sh, that does not pass a class name. We patch
# d2j_invoke.sh, reinplce prefix, and overwrite all other scripts with
# a script that will just invoke d2j_invoke.sh with the correct class name.
reinplace -W ${worksrcpath} "s#@@PREFIX@@#${prefix}#g" d2j_invoke.sh
array set tools []
foreach filename [glob -directory ${worksrcpath} *.sh] {
if {[file tail $filename] eq "d2j_invoke.sh"} {
# Don't modify d2j_invoke.sh
continue
}
# But re-write all other tools as wrappers for d2j_invoke.sh
set fp [open ${filename} r]
set lines [split [read $fp] "\n"]
set last_line [lindex $lines end-1]
close $fp
# Example line: java -Xms512m -Xmx2048m -classpath "${_classpath}" "com.googlecode.d2j.jasmin.Jar2JasminCmd" "$@"
regexp "java .* -classpath \"\[^\"]+\" \"(com\\.googlecode\[^\"]+)\"" $last_line -> classname
set tools($filename) $classname
}
foreach filename [array names tools] {
set fp [open ${filename} w]
puts $fp "#!/bin/sh"
puts $fp "${prefix}/bin/d2j_invoke.sh \"$tools($filename)\" \"\$@\""
close $fp
}
}
use_configure no
build {}
destroot {
xinstall -m 0755 -W ${worksrcpath} \
d2j-apk-sign.sh \
d2j-asm-verify.sh \
d2j-baksmali.sh \
d2j-class-version-switch.sh \
d2j-decrypt-string.sh \
d2j-dex-recompute-checksum.sh \
d2j-dex-weaver.sh \
d2j-dex2jar.sh \
d2j-dex2smali.sh \
d2j-jar-access.sh \
d2j-jar-weaver.sh \
d2j-jar2dex.sh \
d2j-jar2jasmin.sh \
d2j-jasmin2jar.sh \
d2j-smali.sh \
d2j-std-apk.sh \
d2j_invoke.sh \
bin/dex-tools \
${destroot}${prefix}/bin
xinstall -m 0755 -d ${destroot}${prefix}/lib/dex2jar
xinstall -m 0644 -W ${worksrcpath}/lib \
{*}[glob -directory ${worksrcpath}/lib *] \
${destroot}${prefix}/lib/dex2jar
xinstall -m 0755 -d ${destroot}${prefix}/share/doc/dex2jar
xinstall -m 0644 -W ${worksrcpath} \
LICENSE.txt \
NOTICE.txt \
${destroot}${prefix}/share/doc/dex2jar
}