# -*- 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 muniversal 1.0 PortGroup compiler_blacklist_versions 1.0 name mozjs60 version 60.8.0 categories lang platforms darwin license {MPL-2 LGPL-2.1+} maintainers {devans @dbevans} openmaintainer description JavaScript-C Engine long_description SpiderMonkey is Mozilla's JavaScript engine written in C/C++. \ It is used in various Mozilla products, including Firefox, \ and is available under the MPL2. homepage https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey # build from GNOME releng tarball master_sites https://ftp.gnome.org/pub/GNOME/teams/releng/tarballs-needing-help/mozjs/ distname mozjs-${version} use_bzip2 yes checksums rmd160 babfc85cd14308a1494d719a5c281b3d392a046c \ sha256 697331336c3d65b80ded9ca87b4a8ceb804e5342b476eaa133ac638102a9dc5d \ size 32802956 depends_build port:autoconf213 \ port:pkgconfig \ port:python27 \ port:yasm depends_lib port:nspr \ port:xorg-libX11 \ port:xorg-libXt # requires C++14 compiler to build compiler.cxx_standard 2014 compiler.blacklist *gcc-3.* *gcc-4.* {clang < 700} if { ${os.platform} eq "darwin" && ${os.major} < 11 } { depends_build-append port:cctools configure.env-append AR=${prefix}/bin/ar } patchfiles patch-js.pc.in.diff \ patch-js-config.in.diff \ patch-virtualenv-arm64-codesign.diff # Use absolute path for install_name post-patch { reinplace "s|@executable_path|${prefix}/lib|g" ${worksrcpath}/config/rules.mk } configure.perl /usr/bin/perl configure.python ${prefix}/bin/python2.7 configure.env-append \ SHELL=/bin/bash configure.dir ${worksrcpath}/js/src/obj configure.cmd ../configure configure.args --with-system-nspr \ --disable-readline configure.universal_args-delete --disable-dependency-tracking if { ${os.platform} eq "darwin" && ${os.major} < 13 } { configure.args-append --disable-xcode-checks } build.env-append SHELL=/bin/bash build.dir ${worksrcpath}/js/src/obj destroot.dir ${worksrcpath}/js/src/obj post-destroot { # make static lib name version specific to avoid conflict with other mozjs versions move ${destroot}${prefix}/lib/libjs_static.ajs ${destroot}${prefix}/lib/libjs60_static.ajs } if {${universal_possible} && [variant_isset universal]} { merger-post-destroot { foreach arch ${universal_archs_to_use} { set dir ${destroot}-${arch} # mozjs60 builds and links with libmozglue.dylib but fails to install it xinstall -m 0755 ${worksrcpath}-${arch}/js/src/obj/mozglue/build/libmozglue.dylib ${dir}${prefix}/lib } } } else { post-destroot { # mozjs60 builds and links with libmozglue.dylib but fails to install it xinstall -m 0755 ${worksrcpath}/js/src/obj/mozglue/build/libmozglue.dylib ${destroot}${prefix}/lib } } if {${universal_possible} && [variant_isset universal]} { set merger_host(x86_64) x86_64-apple-${os.platform}${os.major} set merger_host(i386) i686-apple-${os.platform}${os.major} set merger_configure_args(x86_64) "--host=x86_64-apple-${os.platform}${os.major} --target=x86_64-apple-${os.platform}${os.major}" set merger_configure_args(i386) "--host=i686-apple-${os.platform}${os.major} --target=i686-apple-${os.platform}${os.major}" } else { if {${build_arch} eq "i386"} { configure.args-append \ --host=i686-apple-${os.platform}${os.major} \ --target=i686-apple-${os.platform}${os.major} } elseif {${build_arch} in "x86_64 ppc ppc64"} { configure.args-append \ --host=${build_arch}-apple-${os.platform}${os.major} \ --target=${build_arch}-apple-${os.platform}${os.major} } } # Now for 10.4/10.5... if { ${os.platform} eq "darwin" && ${os.major} < 10 } { patchfiles-append \ patch-malloc_default_purgeable_zone.diff \ patch-no-libc++.diff \ patch-js-shell.diff \ patch-libatomic.diff \ patch-powerpc.diff \ patch-pthread_setname_np.diff post-configure { # Some of the patches disrupt the configure timestamp chain touch ${worksrcpath}/js/src/configure touch ${worksrcpath}/js/src/obj/config.status } if { ${os.major} == 8 } { # Tiger ships with Make 3.80; need 3.81 or later depends_build-append port:gmake build.cmd gmake configure.cppflags-append -D__DARWIN_UNIX03 } # the old gas assembler doesn't like the included ICU files. # Also there's a run-time failure in u_init(), so just # disable ICU until someone wants to sort it out. configure.args-append --without-intl-api if {[string match *gcc* ${configure.compiler}] && ${os.arch} eq "powerpc" } { # Make structs size-compatible with Intel (fixes several static_asserts) configure.cxxflags-append -mone-byte-bool # The C API is littered with bools and references to bools, so we need to # make sure clients (including gjs and policykit) also use the magic flag. # We do this via pkg-config and js-config; note that with this approach # there is some danger that distinct compilation units within the same # project may end up with different bool sizes (for example, if a project's # Makefile only applies the result of `pkg-config --cflags` to source files # that actually consume ), so some care is needed when compiling # against this library. The benefit of this approach is that projects using # pkg-config don't need to remember this flag, and well-designed projects # can "contain" one-byte bools and not have to expose them downstream. patchfiles-append patch-config-powerpc.diff notes-append " In order to run on PowerPC, ${name} has been compiled with the special compiler flag, -mone-byte-bool. Most users are unaffected; however, if you are a software developer compiling against the SpiderMonkey C API (jsapi.h), you will need to add this compiler flag to your own projects, or prepare to encounter unexpected program behavior. The flag will be added automatically to projects that use pkg-config or js-config." } } livecheck.type none