pro mg_use, routines, outdir, class=class
compile_opt strictarr
resolve_routine, routines, /either
resolve_all, class=class
resolve_all
procedures = routine_info(/source)
functions = routine_info(/source, /functions)
nprocedures = size(procedures, /type) eq 7L ? 0: n_elements(procedures)
nfunctions = size(functions, /type) eq 7L ? 0: n_elements(functions)
if (nprocedures gt 1L) then procedures = procedures[1:*]
nprocedures--
case 1 of
nprocedures gt 0L && nfunctions gt 0L: filenames = [procedures.path, functions.path]
nprocedures gt 0L && nfunctions eq 0L: filenames = procedures.path
nprocedures eq 0L && nfunctions gt 0L: filenames = functions.path
nprocedures eq 0L && nfunctions eq 0L: return
endcase
libdir = filepath('lib')
libfiles = where(strpos(filenames, libdir) eq 0L, nlibfiles)
if (nlibfiles gt 0L) then begin
all = bytarr(n_elements(filenames))
all[libfiles] = 1B
nonlibfiles = where(all eq 0B, nnonlibfiles)
if (nnonlibfiles gt 0L) then begin
filenames = filenames[nonlibfiles]
endif else return
endif
uniqElements = uniq(filenames, sort(filenames))
filenames = filenames[uniqElements]
if (n_elements(filenames) eq 1L) then return
filenames = filenames[where(file_basename(filenames) ne 'mg_use.pro')]
validInd = where(file_basename(filenames) ne 'mg_use_wrapper.pro', nvalid)
if (nvalid gt 0L) then filenames = filenames[validInd] else return
if (n_elements(outdir) eq 0L) then begin
print, n_elements(filenames) eq 1L ? filenames : transpose(filenames)
endif else begin
if (~file_test(outdir, /directory)) then file_mkdir, outdir
file_copy, filenames, outdir, /allow_same, /overwrite
endelse
end