distributable:
  url: https://downloads.sourceforge.net/project/tcl/Tcl/{{version}}/tcl{{version}}-src.tar.gz
  strip-components: 1

versions:
  url: https://www.tcl-lang.org/software/tcltk/download.html
  match: /tcl\d+\.\d+\.\d+-src\.tar\.gz/
  strip:
    - /^tcl/
    - /-src\.tar\.gz/

dependencies:
  openssl.org: ^1.1
  zlib.net: ^1.3
  freetype.org: ^2
  freedesktop.org/pkg-config: ^0.29
  x.org/x11: ^1
  x.org/exts: ^1

build:
  dependencies:
    gnu.org/patch: '*'
    linux:
      curl.se: '*'
      tukaani.org/xz: '*' # for tar -xJ
  script:
    - run: |
        ./configure $ARGS
        make --jobs {{hw.concurrency}}
        make --jobs {{hw.concurrency}} install
        make --jobs {{hw.concurrency}} install-private-headers
      working-directory: unix

    - run: ln -s tclsh{{version.marketing}} tclsh
      working-directory: '{{prefix}}/bin'

    # fixed in 8.6.14
    - run: |
        curl -L "$patch_1" | patch -p0
        curl -L "$patch_2" | patch -p0
      working-directory: tk
      if: <8.6.14

    - run: |
        curl -L "$res_tk" | tar -xz --strip-components=1
        cd unix
        ./configure $ARGS --without-x --with-tcl={{prefix}}/lib
        make --jobs {{hw.concurrency}}
        make --jobs {{hw.concurrency}} install
        make --jobs {{hw.concurrency}} install-private-headers
      working-directory: tk

    - run: ln -s wish{{version.marketing}} wish
      working-directory: '{{prefix}}/bin'

    - run: |
        curl -L "$res_critcl" | tar -xz --strip-components=1
        sed -i.bak "s|package require Tcl 8.6|package require Tcl 8|g" build.tcl && rm *.bak
        tclsh build.tcl install
      working-directory: critcl

    - run: |
        curl -L "$res_tcllib" | tar -xJ --strip-components=1
        ./configure --prefix={{prefix}} --mandir={{prefix}}/share/man
        make --jobs {{hw.concurrency}} install
        make --jobs {{hw.concurrency}} critcl
        cp -r modules/tcllibc {{prefix}}/lib/
      working-directory: tcllib

    - run: |
        curl -L "$res_tcltls" | tar -xz --strip-components=1
        ./configure $TLS_ARGS
        make --jobs {{hw.concurrency}} install
      working-directory: tcltls

    - run: |
        curl -L "$res_itk4" | tar -xz --strip-components=1
        itcl_dir=$(ls -d {{prefix}}/lib/itcl* | tail -n 1)
        ./configure $ITK4_ARGS --with-itcl=$itcl_dir
        make --jobs {{hw.concurrency}}
        make --jobs {{hw.concurrency}} install
      working-directory: itk4

    - rm {{prefix}}/bin/sqlite3_analyzer
  env:
    res_critcl: https://github.com/andreas-kupries/critcl/archive/refs/tags/3.2.tar.gz
    res_tcllib: https://downloads.sourceforge.net/project/tcllib/tcllib/1.21/tcllib-1.21.tar.xz
    res_tcltls: https://core.tcl-lang.org/tcltls/uv/tcltls-1.7.22.tar.gz
    res_tk: https://downloads.sourceforge.net/project/tcl/Tcl/{{version}}/tk{{version}}-src.tar.gz
    patch_1: https://raw.githubusercontent.com/macports/macports-ports/db4f8f774193/x11/tk/files/fix-themechanged-error.patch
    patch_2: https://raw.githubusercontent.com/macports/macports-ports/6a93695d61d3/x11/tk/files/fix-kvo-crash.diff
    res_itk4: https://downloads.sourceforge.net/project/incrtcl/%5Bincr%20Tcl_Tk%5D-4-source/itk%204.1.0/itk4.1.0.tar.gz
    ARGS:
      - --prefix={{prefix}}
      - --includedir={{prefix}}/include/tcl-tk
      - --mandir={{prefix}}/share/man
      - --enable-threads
    TCL_PACKAGE_PATH: '{{prefix}}/lib'
    PATH: '{{prefix}}/bin:$PATH'
    TLS_ARGS:
      - --with-ssl=openssl
      - --with-openssl-dir={{deps.openssl.org.prefix}}
      - --prefix={{prefix}}
      - --mandir={{prefix}}/share/man
    ITK4_ARGS:
      - --prefix={{prefix}}
      - --exec-prefix={{prefix}}
      - --with-tcl={{prefix}}/lib
      - --with-tclinclude={{prefix}}/include/tcl-tk
      - --with-tk={{prefix}}/lib
      - --with-tkinclude={{prefix}}/include/tcl-tk
      - --with-itcl={{prefix}}/lib/itcl*
    x86-64:
      ARGS:
        - --enable-64bit

provides:
  - bin/tclsh
  - bin/wish
  - bin/critcl
  - bin/dtplite
  - bin/mkdoc
  - bin/nns
  - bin/nnsd
  - bin/nnslog
  - bin/page
  - bin/pt
  - bin/tcldocstrip

test:
  - tclsh test.tcl
  - tclsh version.tcl | grep {{version}}
