code: def test_parse_makefile(self):
      self.addCleanup(unlink, TESTFN)
      with open(TESTFN, "w") as makefile:
          print("var1=a$(VAR2)", file=makefile)
          print("VAR2=b$(var3)", file=makefile)
          print("var3=42", file=makefile)
          print("var4=$/invalid", file=makefile)
          print("var5=dollar$$5", file=makefile)
          print(
              "var6=${var3}/lib/python3.5/config-$(VAR2)$(var5)"
              "-x86_64-linux-gnu",
              file=makefile,
          )
      vars = _parse_makefile(TESTFN)
      self.assertEqual(
          vars,
          {
              "var1": "ab42",
              "VAR2": "b42",
              "var3": 42,
              "var4": "$/invalid",
              "var5": "dollar$5",
              "var6": "42/lib/python3.5/config-b42dollar$5-x86_64-linux-gnu",
          },
      )
  
imports: import unittest
  import sys
  import os
  import subprocess
  import shutil
  from copy import copy
  from test.support import captured_stdout, PythonSymlink, requires_subprocess, is_wasi
  from test.support.import_helper import import_module
  from test.support.os_helper import TESTFN, unlink, skip_unless_symlink, change_cwd
  import sysconfig
  from sysconfig import get_paths, get_platform, get_config_vars, get_path, get_path_names, _INSTALL_SCHEMES, get_default_scheme, get_scheme_names, get_config_var, _expand_vars, _get_preferred_schemes
  from sysconfig.__main__ import _main, _parse_makefile
  import _imp
  import _osx_support
  import _sysconfig
label_desc: Use image node_id 2 for calling the MakefileTests obj's underlying member method code with example usage: obj.test_parse_makefile() without return types