{"id":17800991,"url":"https://github.com/refi64/tinymk","last_synced_at":"2025-10-16T06:02:57.414Z","repository":{"id":18743389,"uuid":"21955235","full_name":"refi64/tinymk","owner":"refi64","description":"A single-file build tool based on CoffeeScript's cake and Shake, written in Python","archived":false,"fork":false,"pushed_at":"2017-08-16T19:16:25.000Z","size":34,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T05:06:48.004Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/refi64.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-07-17T19:44:39.000Z","updated_at":"2017-08-16T19:03:39.000Z","dependencies_parsed_at":"2022-09-10T21:01:25.992Z","dependency_job_id":null,"html_url":"https://github.com/refi64/tinymk","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refi64%2Ftinymk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refi64%2Ftinymk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refi64%2Ftinymk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refi64%2Ftinymk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/refi64","download_url":"https://codeload.github.com/refi64/tinymk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246758278,"owners_count":20828919,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-27T12:33:05.831Z","updated_at":"2025-10-16T06:02:52.378Z","avatar_url":"https://github.com/refi64.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"TinyMk\n======\n\nTinyMk is a small but powerful make system written in Python and based on\n`Cake \u003chttp://coffeescript.org/#cake\u003e`_ and\n`Shake \u003chttp://http://shakebuild.com/\u003e`_. It consists of a single script that's\naround 350 lines long. Here's a somewhat complex example of using it:\n\n.. code-block:: python\n\n  from tinymk import * # import TinyMk\n  import os, glob\n\n  sources = ['a.c', 'b.c', 'c.c']\n  objects = [os.path.splitext(src)[0]+'.o' for src in sources]\n\n  @task()\n  def build():\n      # invoke 2 other targets\n      invoke('build:headers')\n      invoke('build:app')\n\n  # create a task for each element in sources inside of the category objects\n  # ptask is like GNU make's pattern rules\n  # for each element in the sources list, call the function\n  @ptask('%.c', '%.o', sources, 'objects')\n  def objects(outs, src):\n      # outs is a list; since there is only one output, get it\n      out = outs[0]\n      # object the object file in the source has changed\n      run_d(out, dep, 'gcc -c %s -o %s' % (src, out))\n\n  # create a task named 'app' in the category 'build'\n  @task('build:')\n  def app():\n      # if we need to update the output file...\n      if need_to_update('app', sources):\n          cinvoke('objects')\n          # update the output file\n          run('gcc %s -o %s' % (' '.join(objects), 'app'))\n\n  # create a task named 'headers' in the category 'build'\n  @task('build:')\n  def headers():\n      # regenerate gen.h if gen.py has changed\n      run_d('gen.h', 'gen.py', 'python gen.py \u003e gen.h')\n\n  main()\n\nEven better, TinyMk is licensed under the MIT Expat license, so you can\ndistribute it with your application without needing to worry about licensing\ntroubles.\n\nFor more info, see the ``docs`` folder and the ``examples`` folder.\n\nPrebuilt docs are available on\n`ReadTheDocs \u003chttps://tinymk.readthedocs.org/en/latest\u003e`_.\n\nLinks\n*****\n\n- `GitHub \u003chttps://github.com/kirbyfan64/tinymk\u003e`_.\n- `Documentation on ReadTheDocs \u003ctinymk.readthedocs.org\u003e`_.\n- `Mailing list \u003ctinymk@googlegroups.com\u003e`_.\n- `Mailing list web interface \u003chttps://groups.google.com/forum/#!forum/tinymk\u003e`_.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frefi64%2Ftinymk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frefi64%2Ftinymk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frefi64%2Ftinymk/lists"}