OpenSDE Framework (without history before r20070)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

496 lines
12 KiB

  1. #!/bin/bash
  2. #
  3. # --- SDE-COPYRIGHT-NOTE-BEGIN ---
  4. # This copyright note is auto-generated by ./scripts/Create-CopyPatch.
  5. #
  6. # Filename: lib/sde-package/new-freshmeat.sh
  7. # Copyright (C) 2006 The OpenSDE Project
  8. # Copyright (C) 2004 - 2006 The T2 SDE Project
  9. # Copyright (C) 1998 - 2003 Clifford Wolf
  10. #
  11. # More information can be found in the files COPYING and README.
  12. #
  13. # This program is free software; you can redistribute it and/or modify
  14. # it under the terms of the GNU General Public License as published by
  15. # the Free Software Foundation; version 2 of the License. A copy of the
  16. # GNU General Public License can be found in the file COPYING.
  17. # --- SDE-COPYRIGHT-NOTE-END ---
  18. #
  19. # Written by Benjamin Schieder <blindcoder@scavenger.homeip.net>
  20. #
  21. # Modified by Juergen Sawinski <jsaw@gmx.net> to create
  22. # a package based on freshmeat info.
  23. #
  24. # And Rene Rebe <rene@exactcode.de> to fix I/T sentences to begin with
  25. # capitals as well as no trailing . in the I tag.
  26. #
  27. # newpackage.sh [-main] <rep>/<pkg> <freshmeat package name>
  28. #
  29. extract_xml_name() {
  30. local tmp="`tr -d "\012" < $2 | grep $3 |
  31. sed -e "s|.*<$3>\([^<]*\)<.*|\1|" -e 's| |\n|g'`"
  32. eval "$1=\"\$tmp\""
  33. }
  34. get_download() {
  35. local location
  36. for arg; do
  37. if curl -s -I -f "$arg" -o "header.log"; then
  38. location="`sed -n 's/\r// ; s/Location: *//p' header.log`"
  39. download_file="`basename $location`"
  40. download_url="`dirname $location`/"
  41. rm -f header.log
  42. return
  43. fi
  44. done
  45. rm -f header.log
  46. }
  47. read_fm_config() {
  48. local fmname=$1
  49. curl_options="" #--disable-epsv -#
  50. if curl -s -f $resume $curl_options "http://freshmeat.net/projects-xml/$fmname/$fmname.xml" -o "$fmname.xml"; then
  51. extract_xml_name project $fmname.xml projectname_full
  52. extract_xml_name title $fmname.xml desc_short
  53. extract_xml_name desc $fmname.xml desc_full
  54. extract_xml_name urlh $fmname.xml url_homepage
  55. extract_xml_name license $fmname.xml license
  56. extract_xml_name version $fmname.xml latest_release_version
  57. extract_xml_name url_tbz $fmname.xml url_bz2
  58. extract_xml_name url_tgz $fmname.xml url_tgz
  59. extract_xml_name url_zip $fmname.xml url_zip
  60. extract_xml_name url_cvs $fmname.xml url_cvs
  61. url="$(curl -I $urlh 2>/dev/null | grep "^Location:" | sed -e 's,^Location: \(.*\)$,\1,' | tr -d '\015' )"
  62. get_download $url_tbz $url_tgz $url_zip #@FIXME $url_cvs
  63. # grep trove categories for status IDs
  64. for trove_id in `grep '<trove_id>' $fmname.xml | sed 's,.*<trove_id>\(.*\)</trove_id>,\1,g'` ; do
  65. case $trove_id in
  66. 9) status="Alpha"
  67. ;;
  68. 10) status="Beta"
  69. ;;
  70. 11,12) status="Stable"
  71. ;;
  72. # there is no default
  73. esac
  74. done
  75. # download package fm-page and grep for the author
  76. html="http://freshmeat.net/projects/$fmname/"
  77. curl -I -s "$html" -o "header.log"
  78. html_new="`grep Location: header.log | sed 's,Location:[ ]\([.0-9A-Za-z:/%?_= -]*\).*,\1,'`"
  79. [ ! -z "$html_new" ] && html="$html_new"
  80. unset html_new
  81. rm -f header.log
  82. curl -s "$html" -o "$fmname.html"
  83. dev_name="`grep 'contact developer' "$fmname.html" | sed 's,^[[:blank:]]*\(.*\)[[:blank:]]<a.*$,\1,' | sed 's, *$,,g'`"
  84. dev_mail="`grep 'contact developer' "$fmname.html" | sed 's,^.*<a href=\"mailto:\(.*\)\">.*$,\1,'`"
  85. echo "__at__ @" >subst
  86. echo "__dot__ ." >>subst
  87. echo "|at| @" >>subst
  88. echo "|dot| ." >>subst
  89. echo "\\[at\\] @" >>subst
  90. echo "\\[dot\\] ." >>subst
  91. echo "(at) @" >>subst
  92. echo "(dot) ." >>subst
  93. echo -n "$dev_mail" >dev_mail
  94. # for some strange reason, this doesn't work:
  95. # cat subst | while read from to ; do
  96. # export dev_mail="${dev_mail// $from /$to}"
  97. # done
  98. # dev_mail will have the same value as before
  99. cat subst | while read from to ; do
  100. dev_mail="`cat dev_mail`"
  101. dev_mail="${dev_mail// $from /$to}"
  102. echo -n "$dev_mail" >dev_mail
  103. done
  104. dev_mail="`cat dev_mail`"
  105. rm -f subst $fmname.html dev_mail
  106. if [ -z "$dev_name" ]; then
  107. dev_name="TODO:"
  108. dev_mail="Author"
  109. elif [ -z "$dev_mail" ]; then
  110. dev_name="TODO: $dev_name"
  111. dev_mail="Mail Address"
  112. else
  113. dev_mail="<$dev_mail>"
  114. fi
  115. #cleanup license
  116. case "$license" in
  117. *GPL*Library*)
  118. license=LGPL
  119. ;;
  120. *GPL*Documentation*)
  121. license=FDL
  122. ;;
  123. *GPL*)
  124. license=GPL
  125. ;;
  126. *Mozilla*Public*)
  127. license=MPL
  128. ;;
  129. *MIT*)
  130. license=MIT
  131. ;;
  132. *BSD*)
  133. license=BSD
  134. ;;
  135. *Artistic*)
  136. license=Artistic
  137. ;;
  138. esac
  139. rm -f $fmname.xml
  140. else
  141. return 1
  142. fi
  143. }
  144. if [ "$1" == "-main" ] ; then
  145. create_main=1
  146. shift
  147. fi
  148. if [ $# -lt 2 -o $# -gt 2 ] ; then
  149. cat <<-EEE
  150. Usage:
  151. $0 <option> package/repository/packagename freshmeat-package-name
  152. Where <option> may be:
  153. -main Create a package.conf file with main-function
  154. EEE
  155. exit 1
  156. fi
  157. dir=${1#package/} ; shift
  158. package=${dir##*/}
  159. if [ "$package" = "$dir" ]; then
  160. echo "failed"
  161. echo -e "\t$dir must be <rep>/<pkg>!\n"
  162. exit
  163. fi
  164. rep="$( echo package/*/$package | cut -d'/' -f 2 )"
  165. if [ "$rep" != "*" ]; then
  166. echo "failed"
  167. echo -e "\tpackage $package belongs to $rep!\n"
  168. exit
  169. fi
  170. rep=${dir/\/$package/}
  171. maintainer='The OpenSDE Community <list@opensde.org>'
  172. echo -n "Creating package/$dir ... "
  173. if [ -e package/$dir ] ; then
  174. echo "failed"
  175. echo -e "\tpackage/$dir already exists!\n"
  176. exit
  177. fi
  178. if mkdir -p package/$dir ; then
  179. echo "ok"
  180. else
  181. echo "failed"
  182. exit
  183. fi
  184. cd package/$dir
  185. rc="ROCK-COPYRIGHT"
  186. download_file=
  187. download_url=
  188. if ! read_fm_config $1; then
  189. echo "Error or wrong freshmeat package name"
  190. exit 1
  191. fi
  192. echo -n "Creating $package.desc ... "
  193. cat > $package.desc <<EOF
  194. [COPY] --- SDE-COPYRIGHT-NOTE-BEGIN ---
  195. # This copyright note is auto-generated by ./scripts/Create-CopyPatch.
  196. #
  197. # Filename: lib/sde-package/new-freshmeat.sh
  198. # Copyright (C) 2007 The OpenSDE Project
  199. # Copyright (C) 2004 - 2006 The T2 SDE Project
  200. # Copyright (C) 1998 - 2003 Clifford Wolf
  201. # Copyright (C) 2007 The OpenSDE Project
  202. #
  203. # More information can be found in the files COPYING and README.
  204. #
  205. # This program is free software; you can redistribute it and/or modify
  206. # it under the terms of the GNU General Public License as published by
  207. # the Free Software Foundation; version 2 of the License. A copy of the
  208. # GNU General Public License can be found in the file COPYING.
  209. # --- SDE-COPYRIGHT-NOTE-END ---
  210. #
  211. # Written by Benjamin Schieder <blindcoder@scavenger.homeip.net>
  212. #
  213. # Modified by Juergen Sawinski <jsaw@gmx.net> to create
  214. # a package based on freshmeat info.
  215. #
  216. # And Rene Rebe <rene@exactcode.de> to fix I/T sentences to begin with
  217. # capitals as well as no trailing . in the I tag.
  218. #
  219. # newpackage.sh [-main] <rep>/<pkg> <freshmeat package name>
  220. #
  221. extract_xml_name() {
  222. local tmp="`tr -d "\012" < $2 | grep $3 |
  223. sed -e "s|.*<$3>\([^<]*\)<.*|\1|" -e 's| |\n|g'`"
  224. eval "$1=\"\$tmp\""
  225. }
  226. get_download() {
  227. local location
  228. for arg; do
  229. if curl -s -I -f "$arg" -o "header.log"; then
  230. location="`sed -n 's/\r// ; s/Location: *//p' header.log`"
  231. download_file="`basename $location`"
  232. download_url="`dirname $location`/"
  233. rm -f header.log
  234. return
  235. fi
  236. done
  237. rm -f header.log
  238. }
  239. read_fm_config() {
  240. local fmname=$1
  241. curl_options="" #--disable-epsv -#
  242. if curl -s -f $resume $curl_options "http://freshmeat.net/projects-xml/$fmname/$fmname.xml" -o "$fmname.xml"; then
  243. extract_xml_name project $fmname.xml projectname_full
  244. extract_xml_name title $fmname.xml desc_short
  245. extract_xml_name desc $fmname.xml desc_full
  246. extract_xml_name urlh $fmname.xml url_homepage
  247. extract_xml_name license $fmname.xml license
  248. extract_xml_name version $fmname.xml latest_release_version
  249. extract_xml_name url_tbz $fmname.xml url_bz2
  250. extract_xml_name url_tgz $fmname.xml url_tgz
  251. extract_xml_name url_zip $fmname.xml url_zip
  252. extract_xml_name url_cvs $fmname.xml url_cvs
  253. url="$(curl -I $urlh 2>/dev/null | grep "^Location:" | sed -e 's,^Location: \(.*\)$,\1,' | tr -d '\015' )"
  254. get_download $url_tbz $url_tgz $url_zip #@FIXME $url_cvs
  255. # grep trove categories for status IDs
  256. for trove_id in `grep '<trove_id>' $fmname.xml | sed 's,.*<trove_id>\(.*\)</trove_id>,\1,g'` ; do
  257. case $trove_id in
  258. 9) status="Alpha"
  259. ;;
  260. 10) status="Beta"
  261. ;;
  262. 11,12) status="Stable"
  263. ;;
  264. # there is no default
  265. esac
  266. done
  267. # download package fm-page and grep for the author
  268. html="http://freshmeat.net/projects/$fmname/"
  269. curl -I -s "$html" -o "header.log"
  270. html_new="`grep Location: header.log | sed 's,Location:[ ]\([.0-9A-Za-z:/%?_= -]*\).*,\1,'`"
  271. [ ! -z "$html_new" ] && html="$html_new"
  272. unset html_new
  273. rm -f header.log
  274. curl -s "$html" -o "$fmname.html"
  275. dev_name="`grep 'contact developer' "$fmname.html" | sed 's,^[[:blank:]]*\(.*\)[[:blank:]]<a.*$,\1,' | sed 's, *$,,g'`"
  276. dev_mail="`grep 'contact developer' "$fmname.html" | sed 's,^.*<a href=\"mailto:\(.*\)\">.*$,\1,'`"
  277. echo "__at__ @" >subst
  278. echo "__dot__ ." >>subst
  279. echo "|at| @" >>subst
  280. echo "|dot| ." >>subst
  281. echo "\\[at\\] @" >>subst
  282. echo "\\[dot\\] ." >>subst
  283. echo "(at) @" >>subst
  284. echo "(dot) ." >>subst
  285. echo -n "$dev_mail" >dev_mail
  286. # for some strange reason, this doesn't work:
  287. # cat subst | while read from to ; do
  288. # export dev_mail="${dev_mail// $from /$to}"
  289. # done
  290. # dev_mail will have the same value as before
  291. cat subst | while read from to ; do
  292. dev_mail="`cat dev_mail`"
  293. dev_mail="${dev_mail// $from /$to}"
  294. echo -n "$dev_mail" >dev_mail
  295. done
  296. dev_mail="`cat dev_mail`"
  297. rm -f subst $fmname.html dev_mail
  298. if [ -z "$dev_name" ]; then
  299. dev_name="TODO:"
  300. dev_mail="Author"
  301. elif [ -z "$dev_mail" ]; then
  302. dev_name="TODO: $dev_name"
  303. dev_mail="Mail Address"
  304. else
  305. dev_mail="<$dev_mail>"
  306. fi
  307. #cleanup license
  308. case "$license" in
  309. *GPL*Library*)
  310. license=LGPL
  311. ;;
  312. *GPL*Documentation*)
  313. license=FDL
  314. ;;
  315. *GPL*)
  316. license=GPL
  317. ;;
  318. *Mozilla*Public*)
  319. license=MPL
  320. ;;
  321. *MIT*)
  322. license=MIT
  323. ;;
  324. *BSD*)
  325. license=BSD
  326. ;;
  327. *Artistic*)
  328. license=Artistic
  329. ;;
  330. esac
  331. rm -f $fmname.xml
  332. else
  333. return 1
  334. fi
  335. }
  336. if [ "$1" == "-main" ] ; then
  337. create_main=1
  338. shift
  339. fi
  340. if [ $# -lt 2 -o $# -gt 2 ] ; then
  341. cat <<-EEE
  342. Usage:
  343. $0 <option> package/repository/packagename freshmeat-package-name
  344. Where <option> may be:
  345. -main Create a package.conf file with main-function
  346. EEE
  347. exit 1
  348. fi
  349. dir=${1#package/} ; shift
  350. package=${dir##*/}
  351. if [ "$package" = "$dir" ]; then
  352. echo "failed"
  353. echo -e "\t$dir must be <rep>/<pkg>!\n"
  354. exit
  355. fi
  356. rep="$( echo package/*/$package | cut -d'/' -f 2 )"
  357. if [ "$rep" != "*" ]; then
  358. echo "failed"
  359. echo -e "\tpackage $package belongs to $rep!\n"
  360. exit
  361. fi
  362. rep=${dir/\/$package/}
  363. maintainer='The OpenSDE Community <list@opensde.org>'
  364. echo -n "Creating package/$dir ... "
  365. if [ -e package/$dir ] ; then
  366. echo "failed"
  367. echo -e "\tpackage/$dir already exists!\n"
  368. exit
  369. fi
  370. if mkdir -p package/$dir ; then
  371. echo "ok"
  372. else
  373. echo "failed"
  374. exit
  375. fi
  376. cd package/$dir
  377. rc="ROCK-COPYRIGHT"
  378. download_file=
  379. download_url=
  380. if ! read_fm_config $1; then
  381. echo "Error or wrong freshmeat package name"
  382. exit 1
  383. fi
  384. echo -n "Creating $package.desc ... "
  385. cat > $package.desc <<EOF
  386. [COPY] --- SDE-COPYRIGHT-NOTE-BEGIN ---
  387. [COPY] This copyright note is auto-generated by ./scripts/Create-CopyPatch.
  388. [COPY]
  389. [COPY] Filename: package/.../$package/$package.desc
  390. [COPY] Copyright (C) $( date +%Y ) The OpenSDE Project
  391. [COPY]
  392. [COPY] More information can be found in the files COPYING and README.
  393. [COPY]
  394. [COPY] This program is free software; you can redistribute it and/or modify
  395. [COPY] it under the terms of the GNU General Public License as published by
  396. [COPY] the Free Software Foundation; version 2 of the License. A copy of the
  397. [COPY] GNU General Public License can be found in the file COPYING.
  398. [COPY] --- SDE-COPYRIGHT-NOTE-END ---
  399. EOF
  400. title="`echo "$title" | sed 's/^\(.\)/\U\1/ ; s/\.$//'`"
  401. cat >>$package.desc <<EOF
  402. [I] ${title:-TODO: Title}
  403. EOF
  404. desc="`echo "$desc" | sed '1s/^\(.\)/\U\1/ ; s/\. *\(.\)/. \U\1/g'`"
  405. while read l; do
  406. echo "[T] $l" >>$package.desc
  407. done < <(echo ${desc:-TODO: Description} | fmt --width 75)
  408. cat >>$package.desc <<EOF
  409. [U] ${url:-TODO: URL}
  410. [A] $dev_name $dev_mail
  411. [M] ${maintainer:-TODO: Maintainer}
  412. [C] TODO: Category
  413. [L] ${license:-TODO: License}
  414. [S] ${status:-TODO: Status}
  415. [V] ${version:-TODO: Version}
  416. [P] X -----5---9 800.000
  417. EOF
  418. if [ "$download_file" ]; then
  419. cat >>$package.desc <<-EOF
  420. [D] 0 $download_file $download_url
  421. EOF
  422. fi
  423. echo "ok"
  424. echo -n "Creating $package.conf ... "
  425. if [ "$create_main" == "1" ] ; then
  426. cat >>$package.conf <<-EOF
  427. ${package}_main() {
  428. : TODO
  429. }
  430. custmain="${package}_main"
  431. EOF
  432. fi
  433. echo "ok"
  434. echo "Remember to fill in the TODO's:"
  435. cd -
  436. grep TODO package/$dir/$package.*
  437. echo