/* Credit declaration This command is essencially a copy from make.ado by E. F. Haghish University of Göttingen haghish@med.uni-goesttingen.de https://github.com/haghish */ ** Minor modifications made by Kerry Du // documentation is written for markdoc package (github.com/haghish/markdoc) // . markdoc make.ado, mini export(sthlp) replace /*** _v. 1.1_ make ==== builds package installation files Syntax ------ > __make__ _pakagename_ [, _options_] ### options | _option_ | _Description_ | |:------------------|:-------------------------------------| | replace | replace existing files | | toc | generates __stata.toc__ file | | pkg | generates __packagename.pkg__ file | | readme | generates __README.md__ file | | title(_str_) | title of the package | | version(_str_) | Version of the package | | description(_str_) | description of the package | | license(_str_) | license of the package | | author(_str_) | author of the package | | affiliation(_str_) | author's affiliation | | url(_str_) | package or relevant url address | | email(_str_) | package maintainer's email address | | install(_str_) | installation files, seperated by ";"| | ancillary(_str_) | ancillary files, seperated by ";" | Description ----------- __make__ generates the required files to make a Stata program installable. the command is particularly handy for packages hosted on private websites or GitHub Example ------- building the installation files for "mypackage" program . make mypackage, replace toc pkg readme /// title(title) version(1.0.0) license("MIT") /// description(describe the package) /// author(author name) /// affiliation(author's affiliation) /// email(package maintained email) /// url(relevant URL) /// install("a.ado;a.sthlp;b.ado;b.sthlp") /// ancillary("x.dta;y.dta") Author ------ E. F. Haghish University of Göttingen _haghish@med.uni-goesttingen.de_ [https://github.com/haghish](https://github.com/haghish) License ------- MIT License - - - This help file was dynamically produced by [MarkDoc Literate Programming package](http://www.haghish.com/markdoc/) ***/ cap prog drop make2 prog make2 syntax [anything] [, /// toc /// pkg /// readme /// replace /// title(str) /// Version(str) /// Description(str) /// license(str) /// AUThor(str) /// affiliation(str) /// url(str) /// email(str) /// ancillary(str) /// install(str) /// ] //title of the package //local anything : di `anything' local capital : di ustrupper("`anything'") //make the temporary files tempfile toctmp pkgtmp readtmp tempname hitch knot tocfile pkgfile readmefile // Creating the TOC file // ------------------------------------------------------- qui file open `tocfile' using "`toctmp'", write replace if !missing("`version'") { file write `tocfile' "v `version'" _n } if !missing("`author'") { file write `tocfile' "d Materials by `author'" _n } if !missing("`affiliation'") { file write `tocfile' "d `affiliation'" _n } if !missing("`email'") { file write `tocfile' "d `email'" _n } if !missing("`url'") { file write `tocfile' "d `url'" _n } file write `tocfile' _n *file write `tocfile' "d '`capital''" _n(2) if !missing("`description'") { file write `tocfile' "d '`anything'': `description'" _n(2) } file write `tocfile' "p `anything'" _n // Creating the PKG file // ------------------------------------------------------- qui file open `pkgfile' using `"`pkgtmp'"', write replace if !missing("`version'") { file write `pkgfile' "v `version'" _n } if !missing("`title'") { file write `pkgfile' "d '`capital'': `title'" _n } else file write `pkgfile' "d '`capital''" _n if !missing("`description'") { file write `pkgfile' "d " _n "d `description'" _n } //date local today : di %td_CYND date("$S_DATE", "DMY") file write `pkgfile' "d " _n file write `pkgfile' "d Distribution-Date: `today'" _n if !missing("`license'") { file write `pkgfile' "d License:" " `license'" _n } file write `pkgfile' "d " _n //if install and ancillary are empty, list all files if missing("`install'") & missing("`ancillary'") { //local install : dir . files "*" //the files are manually selected tokenize `"`install'"' while `"`macval(1)'"' != "" { if `"`macval(1)'"' != ".DS_Store" /// & substr(`"`macval(1)'"', -4,.) != ".pkg" /// & substr(`"`macval(1)'"', -4,.) != ".toc" /// & `"`macval(1)'"' != "README.md" /// & `"`macval(1)'"' != "readme.md" /// & `"`macval(1)'"' != "index.md" /// & `"`macval(1)'"' != "index.html" /// & `"`macval(1)'"' != "license.md" /// & `"`macval(1)'"' != "dependency.do" /// & `"`macval(1)'"' != "params.json" /// & `"`macval(1)'"' != ".gitignore" /// { file write `pkgfile' `"F `1'"' _n } macro shift } } if !missing("`install'") { // get the file names install option tokenize `"`install'"', parse(";") preserve qui clear qui generate str files = "" qui set obs 1000 local start = 0 while !missing("`1'") { if "`1'" != ";" { local start = `start' + 1 qui replace files = `"`1'"' in `start' } macro shift } qui drop if files=="" qui sort files forval m = 1/`start' { local n : di files[`m'] file write `pkgfile' `"F `n'"' _n //check whether the file is unique *githubcheckfilename "`anything'", filename("`n'") } restore } if !missing("`ancillary'") { // get the file names ancillary option tokenize `"`ancillary'"', parse(";") while !missing("`1'") { if "`1'" != ";" { file write `pkgfile' `"f `1'"' _n //check whether the file is unique *githubcheckfilename "`anything'", filename("`n'") } macro shift } } // Creating the README.md file // ------------------------------------------------------- qui file open `readmefile' using "`readtmp'", write replace if !missing("`version'") { file write `readmefile' "_v. `version'_ " _n(2) } file write `readmefile' "`" "`anything'" "` " if !missing("`title'") { file write `readmefile' ": `title'" } local len = length(" `anything' : `title' ") file write `readmefile' _n _dup(`len') "=" _n(2) if !missing("`description'") { file write `readmefile' "Description" _n file write `readmefile' "-----------" _n(2) file write `readmefile' "`description'" _n } if !missing("`license'") { file write `readmefile' _n "### License" _n file write `readmefile' "`license'" _n } if !missing("`author'") { file write `readmefile' _n "Author" _n file write `readmefile' "------" _n(2) file write `readmefile' "**`author'** " _n if !missing("`affiliation'") file write `readmefile' "`affiliation' " _n if !missing("`email'") file write `readmefile' "`email' " _n if !missing("`url'") file write `readmefile' "<`url'> " _n } //close and copy the files file close `tocfile' file close `pkgfile' file close `readmefile' if !missing("`toc'") quietly copy "`toctmp'" "stata.toc", `replace' if !missing("`pkg'") quietly copy "`pkgtmp'" "`anything'.pkg", `replace' if !missing("`readme'") quietly copy "`readtmp'" "README.md", `replace' end // make "test" //, install("githubdependency.ado;githublist.ado;githubmake.ado")