# -*- 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 compiler_blacklist_versions 1.0 PortGroup texlive 1.0 # luajittex requires muniversal (and some patches to configure # scripts) to build universal PortGroup muniversal 1.1 name texlive-bin version 2024.70613 revision 0 categories tex maintainers {dports @drkp} description TeX Live Binaries. long_description TeX Live is an easy way to get up and running with TeX. \ It provides a comprehensive TeX system with binaries for most flavors \ of Unix, including GNU/Linux, and also Windows. It includes all the \ major TeX-related programs, macro packages, and fonts that are free \ software, including support for many languages around the world. homepage http://www.tug.org/texlive/ # This port installs two libraries: kpathsea (LGPL-2.1+) and ptexenc (BSD). # The binaries are covered under various licenses, but all distributable; # see the texlive portfile for more information. license Copyleft Permissive LGPL-2.1+ BSD # Our distfile is a stripped-down version of the texlive source # tarball, available from CTAN in systems/texlive/Source. For faster # download (and configure) time, it omits a number of libraries and # utilities that we don't build. However, the port will still work # with an unmodified texlive distfile. master_sites https://www.ambulatoryclam.net/texlive/ \ https://alpaca.cs.washington.edu/texlive/ \ https://giraffe.cs.washington.edu/texlive/ use_xz yes distname texlive-source-${version}-stripped worksrcdir ${distname} compiler.cxx_standard \ 2011 set tlpkgdistname tlpkg-TeXLive-${version} distfiles-append ${tlpkgdistname}${extract.suffix} checksums texlive-source-2024.70613-stripped.tar.xz \ rmd160 80f75f45091d4517ef56e5e269e1692bcd5da828 \ sha256 84719168dce6162af47ea50c5c942c1f623a2d0c71406c2470bd63881a8d98bc \ size 23945116 \ tlpkg-TeXLive-2024.70613.tar.xz \ rmd160 5b3da9bcfba628930bdf13f023b755bf1a9af534 \ sha256 751a4b845ea9bf0d3640f2398b7adedc2294d30c90a9027b462739544c308138 \ size 118388 depends_lib port:fontconfig \ port:freetype \ port:libpng \ port:ncurses \ port:zlib \ port:libzzip \ path:lib/pkgconfig/cairo.pc:cairo \ path:lib/pkgconfig/pixman-1.pc:libpixman \ port:graphite2 \ path:lib/pkgconfig/icu-uc.pc:icu \ path:lib/pkgconfig/harfbuzz.pc:harfbuzz \ path:lib/pkgconfig/harfbuzz-icu.pc:harfbuzz-icu \ port:libpaper \ port:gmp \ port:mpfr \ port:potrace \ path:lib/pkgconfig/poppler.pc:poppler \ port:texlive-common depends_run port:ghostscript depends_build-append \ path:bin/perl:perl5 \ port:pkgconfig # patches related to changes in install paths patchfiles-append \ patch-texk_tex4htk_Makefile.in.diff \ patch-texk_kpathsea_Makefile.in.diff \ patch-texk_chktex_Makefile.in.diff \ patch-texk_texlive_linked_scripts_Makefile.in.diff \ patch-texk_xdvik_xdvi-sh.in.diff \ patch-utils_texdoctk_Makefile.in.diff # patches to luajit/luajittex's config scripts to correctly detect # architecture in universal builds patchfiles-append patch-libs_luajit_configure.diff \ patch-texk_web2c_configure.diff # disable luazlib's zlib version check since it is way too specific; # see https://trac.macports.org/ticket/69182 patchfiles-append patch-texk_web2c_luatexdir_luazlib_lzlib.c.diff post-patch { reinplace "s|@@TEXMFDIST@@|${texlive_texmfdist}|" ${worksrcpath}/texk/texlive/linked_scripts/Makefile.in # reinplace "s|@@TEXMFDIST@@|${texlive_texmfdist}|" ${worksrcpath}/texk/texlive/tl_scripts/Makefile.in reinplace "s|@@TEXMFDIST@@|${texlive_texmfdist}|" ${worksrcpath}/texk/tex4htk/Makefile.in reinplace "s|@@TEXLIVE_BINDIR@@|${texlive_bindir}|" ${worksrcpath}/texk/xdvik/xdvi-sh.in reinplace "s|@@TEXMFDIST@@|${texlive_texmfdist}|" ${worksrcpath}/texk/chktex/Makefile.in reinplace "s|@@TEXMFDIST@@|${texlive_texmfdist}|" ${worksrcpath}/utils/texdoctk/Makefile.in # Defaults for the texmf search paths need to be compiled into # libkpathsea -- really, just the location of texmf.cnf, which # defines all the other paths. texlive normally finds this file # using a bindir-relative path extracted from texmf.cnf, but this # is both incorrect (it fails to find our texmf.cnf) and overkill # (we know the absolute path of texmf.cnf). # # Accordingly, we patch the kpathsea makefile to not try to derive # the default paths from texmf.cnf, and just provide our own # paths.h with the right path substituted in. delete ${worksrcpath}/texk/kpathsea/texmf.cnf file copy ${filespath}/texk_kpathsea_paths.h ${worksrcpath}/texk/kpathsea/paths.h reinplace "s|@@PREFIX@@|${prefix}|" ${worksrcpath}/texk/kpathsea/paths.h reinplace "s|@@TEXMFSYSCONFIG@@|${texlive_texmfsysconfig}|" ${worksrcpath}/texk/kpathsea/paths.h } set build_dir ${workpath}/build pre-configure { file mkdir ${build.dir} } configure.dir ${build_dir} configure.cmd ${worksrcpath}/configure build.dir ${build_dir} # We use MacPorts-provided libraries instead of the ones included in # texlive whenever possible, to avoid redundancy and to better keep # current with respect to security updates and the like. # # At present, the only exceptions are TeX-specific libraries like # kpathsea and ptexenc that it doesn't make sense to package # separately. # # Many of the --with-system-* and --disable-* flags are actually # redundant because we've removed those components from the distfile, # but we leave them here for compatibility with the stock distfile. configure.args --bindir=${texlive_bindir} \ --mandir=${texlive_bindir} \ --infodir=${prefix}/share/info \ --enable-shared \ --disable-multiplatform \ --disable-native-texlive-build \ --without-old-mac-fonts \ --with-banner-add="/MacPorts ${version}_${revision}" \ --with-system-freetype2 \ --without-system-freetype \ --without-system-icu \ --with-system-cairo \ --with-system-gd \ --with-system-gmp \ --with-system-graphite2 \ --with-system-harfbuzz \ --with-system-icu \ --with-system-libpaper \ --with-libpaper-includes=${prefix}/include \ --with-libpaper-libdir=${prefix}/lib \ --with-system-libpng \ --with-libpng-includes=${prefix}/include \ --with-libpng-libdir=${prefix}/lib \ --with-system-mpfr \ --with-system-ncurses \ --with-system-pixman \ --with-system-poppler \ --with-system-potrace \ --without-system-xpdf \ --with-system-zlib \ --with-system-zziplib \ --disable-biber \ --disable-etex \ --disable-detex \ --disable-dvi2tty \ --disable-dvipng \ --disable-dvisvgm \ --disable-lcdf-typetools \ --disable-ps2eps \ --disable-psutils \ --disable-t1utils \ --disable-texinfo \ --disable-xindy \ --without-x \ --without-pdfopen \ ac_cv_prog_AWK=/usr/bin/awk # makejvf has some invalid character encodings in one of its source # files, which cause certain versions of clang to hang (#38643). Using # -Wno-invalid-source-encoding avoids this problem. # It appears to be specific to Xcode 4.6, but there's no harm in # silencing the warning for all versions of clang. post-patch { if {[string match *clang* ${configure.compiler}]} { reinplace "/^WARNING_CFLAGS =/s/$/ -Wno-invalid-source-encoding/" ${worksrcpath}/texk/makejvf/Makefile.in } } configure.cppflags-delete -I${prefix}/include configure.ldflags-delete -L${prefix}/lib configure.cppflags-append -isystem${prefix}/include configure.env-append LIBRARY_PATH=${prefix}/lib # luajittex does not support ppc configure.args.ppc-append --disable-luajittex configure.args.ppc64-append --disable-luajittex # work around bug in texlive makefiles where $OBJC is not recorded # during configure phase build.env OBJC=${configure.objc} \ OBJCXX=${configure.objcxx} # this is not optimal, but we have to duplicate this cxx11 PG logic here # because of https://trac.macports.org/ticket/56280 if {[string match *clang* ${configure.cxx}] && ${configure.cxx_stdlib} ne ""} { lappend configure.objcxxflags -stdlib=${configure.cxx_stdlib} } if {[string match macports-libstdc++ ${configure.cxx_stdlib}]} { lappend configure.objcxxflags -D_GLIBCXX_USE_CXX11_ABI=0 } foreach arch {arm64 x86_64 i386 ppc ppc64} { build.env.${arch}-append \ "OBJCFLAGS=${configure.objcflags} [muniversal::get_archflag objc ${arch}]" \ "OBJCXXFLAGS=${configure.objcxxflags} [muniversal::get_archflag objcxx ${arch}]" } # work around differences between libc++ and libstdc++ headers building with clang # https://trac.macports.org/ticket/54358#comment:26 if {[string match *clang* ${configure.cxx}]} { configure.cxxflags-append -std=c++11 configure.cxxflags-append -Wno-reserved-user-defined-literal } # Useful variables to set up the TeXDist directory structure. set texdist_root /Library/TeX/Distributions set texdist_fd .FactoryDefaults if {[string equal ${prefix} {/opt/local}]} { set texdist_name MacPorts-TeXLive } else { regsub -all {/} [string trim ${prefix} {/}] {_} prefix_ set texdist_name MacPorts-${prefix_}-TeXLive } set texdist_mp ${texdist_root}/${texdist_name}.texdist set texdist_mpfd ${texdist_root}/${texdist_fd}/${texdist_name}/Contents post-destroot { # Anything that gets installed into texmf-dist will be installed # by one of the texmf ports delete ${destroot}${prefix}/share/texmf-dist delete ${destroot}${texlive_texmfdist} # Do not install symlinks to scripts that we don't install delete ${destroot}${texlive_bindir}/latexmk delete ${destroot}${texlive_bindir}/tlmgr # install the tlpkg/TeXLive perl module xinstall -d ${destroot}${prefix}/share/tlpkg copy ${workpath}/${tlpkgdistname} ${destroot}${prefix}/share/tlpkg/TeXLive # gzip manpages that are installed into texlive_bindir foreach manpage [glob -directory ${destroot}${texlive_bindir} man*/*] { # need to make sure it isn't a symlink if {[file type $manpage] == "file"} { system "gzip $manpage" } } } post-activate { # Run mktexlsr if possible. Since mktexlsr is installed by # texlive-basic, it won't exist on a clean install, but we should # run it if upgrading. if {[file exists ${prefix}/bin/mktexlsr]} { ui_debug {Rebuilding TeX ls-R filename databases} system "${prefix}/bin/mktexlsr" } } variant x11 description {Build with x11 support, using Xaw widgets for xdvi} { depends_lib-append port:xorg-libXp port:xpm configure.args-delete --without-x --without-pdfopen depends_lib-append port:xorg-libXaw port:xorg-libXi configure.args-append --with-xdvi-x-toolkit=xaw } variant motif requires x11 description {Use Motif to build xdvi} { depends_lib-delete port:xorg-libXaw configure.args-delete --with-xdvi-x-toolkit=xaw depends_lib-append lib:libXm:openmotif configure.args-append --with-xdvi-x-toolkit=motif } # Install the TeXDist directory structure describing MacPorts' TeX Live. # # It is used to switch between TeX distribution on macOS by tools such as # the TeX Live Utility, the texdist script, the TeX Distribution # Preference Pane, and the LocalTeX Preference Pane. # For more details, see # - the file TeXDist-description.rtf (installed by MacTeX/BasicTeX in # /Library/TeX/Distributions), # - MacTeX/BasicTeX's postinstall script, # - the postinstall script in https://github.com/TeXLive-M/TeXDist, and # - http://www.tug.org/mactex/multipletexdistributions.html . # # With respect to TeXDist-description.rtf and the postinstall scripts, # we do not install # - /usr/texbin, # - /Library/TeX/Distributions/.DefaultTeX, # - anything in /Library/TeX outside /Library/TeX/Distributions. # In fact they are useful only when other distributions are installed, # and they install those missing pieces. # # MacTeX/BasicTeX's postinstall (but not the other one) install also # symlinks Local/TEXMF{HOME,VAR,CONFIG} inside Contents, but they are not # documented in TeXDist-description.rtf: we do not install them. # # These are installed outside MacPorts's prefix, so we do not install # them when running as a non-root user. if {[getuid] == 0} { destroot.violate_mtree yes post-destroot { # Create version/arch-specific links to the texbin directory used # by the TeXDist prefpane; it seems that future versions of the # prefpane will want these. xinstall -d ${destroot}${texlive_mactex_texdistdir}-${version} if {[variant_exists universal] && [variant_isset universal]} { ln -s ${texlive_mactex_texbindir} \ ${destroot}${texlive_mactex_texdistdir}-${version}/universal-darwin } else { ln -s ${texlive_mactex_texbindir} \ ${destroot}${texlive_mactex_texdistdir}-${version}/${configure.build_arch}-darwin } ln -s ${texlive_mactex_texdistdir}-${version} \ ${destroot}${texlive_mactex_texdistdir} # The directories MacPorts-TeXLive.texdist and MacPorts-teTeX.texdist in # /Library/TeX/Distributions/ and MacPorts-TeXLive and MacPorts-teTeX in # /Library/TeX/Distributions/.FactoryDefaults/ are considered by # TeX Live / MacTeX developers as owned by MacPorts (see # https://github.com/macports/macports-ports/pull/6755#issuecomment-613055213). # # Moreover, they are useful only if MacPorts' TeX Live is installed, so # removing the old ones here and not restoring them in post-deactivate # does no harm to the user. Consider also that teTeX does not exist # anymore in MacPorts. xinstall -d ${destroot}${texdist_mp} ln -s ../${texdist_fd}/${texdist_name}/Contents ${destroot}${texdist_mp}/Contents xinstall -d ${destroot}${texdist_mpfd}/AllTexmf ln -s ${texlive_texmfports} ${destroot}${texdist_mpfd}/AllTexmf/texmf ln -s ${texlive_texmfdist} ${destroot}${texdist_mpfd}/AllTexmf/texmf-dist ln -s ${texlive_texmfdist}/doc ${destroot}${texdist_mpfd}/AllTexmf/texmf-doc ln -s ${texlive_texmflocal} ${destroot}${texdist_mpfd}/AllTexmf/texmf-local ln -s ${texlive_texmfsysvar} ${destroot}${texdist_mpfd}/AllTexmf/texmf-var xinstall -d ${destroot}${texdist_mpfd}/Doc ln -s ${texlive_texmfdist}/doc ${destroot}${texdist_mpfd}/Doc/texmf-dist-doc ln -s ${texlive_texmfports}/doc ${destroot}${texdist_mpfd}/Doc/texmf-doc ln -s ${texlive_texmfdist}/doc ${destroot}${texdist_mpfd}/Doc/texmf-doc-doc ln -s ${texlive_texmfdist}/doc ${destroot}${texdist_mpfd}/Doc/texmf-var-doc ln -s ${prefix}/share/info ${destroot}${texdist_mpfd}/Info ln -s ${prefix}/share/man ${destroot}${texdist_mpfd}/Man # The texdist script determines if a TeX distribution is usable # by testing the binaries in the directory called `uname -p`. # `uname -p` outputs i386 also for x86_64 systems. xinstall -d ${destroot}${texdist_mpfd}/Programs if {[variant_exists universal] && [variant_isset universal]} { if {[string match "*ppc*" ${configure.universal_archs}]} { ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/powerpc ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/ppc } if {"x86_64" in ${configure.universal_archs} || "i386" in ${configure.universal_archs}} { ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/i386 } if {"x86_64" in ${configure.universal_archs}} { ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/x86_64 } } else { if {[string match "ppc*" ${configure.build_arch}]} { ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/powerpc ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/ppc } else { if {${configure.build_arch} eq "x86_64"} { ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/i386 } ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/${configure.build_arch} } } ln -s ${texlive_mactex_texbindir} ${destroot}${texdist_mpfd}/Programs/texbin xinstall -d ${destroot}${texdist_mpfd}/Resources/English.lproj xinstall -m 644 ${filespath}/Description.rtf \ ${destroot}${texdist_mpfd}/Resources/English.lproj/Description.rtf reinplace "s|%%PREFIX%%|${prefix}|g" \ ${destroot}${texdist_mpfd}/Resources/English.lproj/Description.rtf reinplace "s|%%VERSION%%|${version}|g" \ ${destroot}${texdist_mpfd}/Resources/English.lproj/Description.rtf ln -s ${prefix}/share ${destroot}${texdist_mpfd}/Root set texdist_vfile [open ${destroot}${texdist_mpfd}/TeXDistVersion w] puts ${texdist_vfile} "1" close ${texdist_vfile} ln -s ${texlive_texmflocal} ${destroot}${texdist_mpfd}/TexmfLocal ln -s ${texlive_texmfsysvar} ${destroot}${texdist_mpfd}/TexmfSysVar } pre-activate { # Delete leftover MacPorts-related TeXDist directories. # See comment above in post-destroot for the rationale. if {[string equal ${prefix} {/opt/local}]} { set texdist_delete_dist [list TeXLive teTeX] foreach dist ${texdist_delete_dist} { set texdist_delete_dir [list \ ${texdist_root}/MacPorts-${dist}.texdist \ ${texdist_root}/${texdist_fd}/MacPorts-${dist} \ ] foreach dir ${texdist_delete_dir} { if {[file exists ${dir}]} { delete file ${dir} } } } } } } default_variants +x11 livecheck.type none