code: def _correct_build_location(self):
          # type: () -> None
          
          if self.source_dir is not None:
              return
          assert self.req is not None
          assert self._temp_build_dir.path
          assert (self._ideal_build_dir is not None and
                  self._ideal_build_dir.path)  # type: ignore
          old_location = self._temp_build_dir.path
          self._temp_build_dir.path = None
  
          new_location = self.build_location(self._ideal_build_dir)
          if os.path.exists(new_location):
              raise InstallationError(
                  'A package already exists in %s; please remove it to continue'
                  % display_path(new_location))
          logger.debug(
              'Moving package %s from %s to new location %s',
              self, display_path(old_location), display_path(new_location),
          )
          shutil.move(old_location, new_location)
          self._temp_build_dir.path = new_location
          self._ideal_build_dir = None
          self.source_dir = os.path.normpath(os.path.abspath(new_location))
          self._egg_info_path = None
  
          # Correct the metadata directory, if it exists
          if self.metadata_directory:
              old_meta = self.metadata_directory
              rel = os.path.relpath(old_meta, start=old_location)
              new_meta = os.path.join(new_location, rel)
              new_meta = os.path.normpath(os.path.abspath(new_meta))
              self.metadata_directory = new_meta
docs: Move self._temp_build_dir to self._ideal_build_dir/self.req.name
  
          For some requirements (e.g. a path to a directory), the name of the
          package is not available until we run egg_info, so the build_location
          will return a temporary directory and store the _ideal_build_dir.
  
          This is only called by self.run_egg_info to fix the temporary build
          directory.